/******/ (function(modules) { // webpackBootstrap
/******/ 	// The module cache
/******/ 	var installedModules = {};
/******/
/******/ 	// The require function
/******/ 	function __webpack_require__(moduleId) {
/******/
/******/ 		// Check if module is in cache
/******/ 		if(installedModules[moduleId]) {
/******/ 			return installedModules[moduleId].exports;
/******/ 		}
/******/ 		// Create a new module (and put it into the cache)
/******/ 		var module = installedModules[moduleId] = {
/******/ 			i: moduleId,
/******/ 			l: false,
/******/ 			exports: {}
/******/ 		};
/******/
/******/ 		// Execute the module function
/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ 		// Flag the module as loaded
/******/ 		module.l = true;
/******/
/******/ 		// Return the exports of the module
/******/ 		return module.exports;
/******/ 	}
/******/
/******/
/******/ 	// expose the modules object (__webpack_modules__)
/******/ 	__webpack_require__.m = modules;
/******/
/******/ 	// expose the module cache
/******/ 	__webpack_require__.c = installedModules;
/******/
/******/ 	// define getter function for harmony exports
/******/ 	__webpack_require__.d = function(exports, name, getter) {
/******/ 		if(!__webpack_require__.o(exports, name)) {
/******/ 			Object.defineProperty(exports, name, {
/******/ 				configurable: false,
/******/ 				enumerable: true,
/******/ 				get: getter
/******/ 			});
/******/ 		}
/******/ 	};
/******/
/******/ 	// define __esModule on exports
/******/ 	__webpack_require__.r = function(exports) {
/******/ 		Object.defineProperty(exports, '__esModule', { value: true });
/******/ 	};
/******/
/******/ 	// getDefaultExport function for compatibility with non-harmony modules
/******/ 	__webpack_require__.n = function(module) {
/******/ 		var getter = module && module.__esModule ?
/******/ 			function getDefault() { return module['default']; } :
/******/ 			function getModuleExports() { return module; };
/******/ 		__webpack_require__.d(getter, 'a', getter);
/******/ 		return getter;
/******/ 	};
/******/
/******/ 	// Object.prototype.hasOwnProperty.call
/******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ 	// __webpack_public_path__
/******/ 	__webpack_require__.p = "";
/******/
/******/
/******/ 	// Load entry module and return exports
/******/ 	return __webpack_require__(__webpack_require__.s = 0);
/******/ })
/************************************************************************/
/******/ ({

/***/ "./blocks/about-author/editor.scss":
/*!*****************************************!*\
  !*** ./blocks/about-author/editor.scss ***!
  \*****************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("// removed by extract-text-webpack-plugin\n\n//# sourceURL=webpack:///./blocks/about-author/editor.scss?");

/***/ }),

/***/ "./blocks/about-author/index.js":
/*!**************************************!*\
  !*** ./blocks/about-author/index.js ***!
  \**************************************/
/*! no exports provided */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _editor_scss__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./editor.scss */ \"./blocks/about-author/editor.scss\");\n/* harmony import */ var _editor_scss__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_editor_scss__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _style_scss__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./style.scss */ \"./blocks/about-author/style.scss\");\n/* harmony import */ var _style_scss__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_style_scss__WEBPACK_IMPORTED_MODULE_1__);\n/**\r\n * WordPress dependencies...\r\n */\nvar __ = wp.i18n.__;\nvar registerBlockType = wp.blocks.registerBlockType;\nvar _wp$compose = wp.compose,\n    compose = _wp$compose.compose,\n    withState = _wp$compose.withState;\nvar Spinner = wp.components.Spinner;\nvar withSelect = wp.data.withSelect;\n\n/**\r\n * Internal dependencies\r\n */\n\n\n\n\nregisterBlockType('orbitfox/about-author', {\n\ttitle: __('About Author'),\n\tdescription: __('About Author block is the easiest way to add a author bio below your posts.'),\n\ticon: 'admin-users',\n\tcategory: 'orbitfox',\n\tkeywords: ['about', 'author', 'profile'],\n\tattributes: {\n\t\tid: {\n\t\t\ttype: 'number'\n\t\t}\n\t},\n\n\tsupports: {\n\t\thtml: false\n\t},\n\n\tedit: compose([withSelect(function (select, props) {\n\t\treturn {\n\t\t\tpostAuthor: select('core/editor').getEditedPostAttribute('author'),\n\t\t\tauthors: select('core').getAuthors(),\n\t\t\tprops: props\n\t\t};\n\t}), withState({\n\t\tstatus: 0,\n\t\tauthor_details: {}\n\t})])(function (_ref) {\n\t\tvar postAuthor = _ref.postAuthor,\n\t\t    authors = _ref.authors,\n\t\t    status = _ref.status,\n\t\t    author_details = _ref.author_details,\n\t\t    setState = _ref.setState,\n\t\t    props = _ref.props,\n\t\t    className = _ref.className;\n\n\n\t\tif (status === 0 && postAuthor && authors && postAuthor !== props.attributes.id) {\n\t\t\tauthors.find(function (o) {\n\t\t\t\tif (o.id === postAuthor) {\n\t\t\t\t\tprops.setAttributes({ id: o.id });\n\t\t\t\t\tsetState({\n\t\t\t\t\t\tauthor_details: o,\n\t\t\t\t\t\tstatus: 1\n\t\t\t\t\t});\n\t\t\t\t\treturn o.id === postAuthor;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn status === 1 && postAuthor && authors ? wp.element.createElement(\n\t\t\t'section',\n\t\t\t{ className: className },\n\t\t\twp.element.createElement(\n\t\t\t\t'div',\n\t\t\t\t{ className: 'obfx-author-image' },\n\t\t\t\twp.element.createElement('img', { className: 'author-image', src: author_details.avatar_urls['96'], alt: author_details.name })\n\t\t\t),\n\t\t\twp.element.createElement(\n\t\t\t\t'div',\n\t\t\t\t{ className: 'obfx-author-data' },\n\t\t\t\twp.element.createElement(\n\t\t\t\t\t'h4',\n\t\t\t\t\tnull,\n\t\t\t\t\tauthor_details.name\n\t\t\t\t),\n\t\t\t\twp.element.createElement(\n\t\t\t\t\t'p',\n\t\t\t\t\tnull,\n\t\t\t\t\tauthor_details.description\n\t\t\t\t)\n\t\t\t)\n\t\t) : wp.element.createElement(\n\t\t\t'div',\n\t\t\t{ key: 'loading', className: 'wp-block-embed is-loading' },\n\t\t\twp.element.createElement(Spinner, null),\n\t\t\twp.element.createElement(\n\t\t\t\t'p',\n\t\t\t\tnull,\n\t\t\t\t__('Loading…')\n\t\t\t)\n\t\t);\n\t}),\n\n\tsave: function save() {\n\t\treturn null;\n\t}\n});\n\n//# sourceURL=webpack:///./blocks/about-author/index.js?");

/***/ }),

/***/ "./blocks/about-author/style.scss":
/*!****************************************!*\
  !*** ./blocks/about-author/style.scss ***!
  \****************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("// removed by extract-text-webpack-plugin\n\n//# sourceURL=webpack:///./blocks/about-author/style.scss?");

/***/ }),

/***/ "./blocks/accordion-box/accordion-area.js":
/*!************************************************!*\
  !*** ./blocks/accordion-box/accordion-area.js ***!
  \************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("/**\r\n * WordPress dependencies...\r\n */\nvar __ = wp.i18n.__;\nvar registerBlockType = wp.blocks.registerBlockType;\nvar InnerBlocks = wp.editor.InnerBlocks;\n\n\nregisterBlockType('orbitfox/accordion-area', {\n\ttitle: __('Accordion'),\n\tdescription: __('Accordion block allows you to add beautiful accordions in your posts.'),\n\ticon: 'menu',\n\tcategory: 'orbitfox',\n\tkeywords: ['accordion', 'collapsible', 'orbitfox'],\n\n\tedit: function edit(props) {\n\t\tvar ALLOWED_BLOCKS = ['orbitfox/accordion-block'];\n\t\tvar TEMPLATE = [['orbitfox/accordion-block'], ['orbitfox/accordion-block'], ['orbitfox/accordion-block']];\n\t\treturn wp.element.createElement(\n\t\t\t'div',\n\t\t\t{ className: props.className },\n\t\t\twp.element.createElement(\n\t\t\t\t'ul',\n\t\t\t\tnull,\n\t\t\t\twp.element.createElement(InnerBlocks, {\n\t\t\t\t\tallowedBlocks: ALLOWED_BLOCKS,\n\t\t\t\t\ttemplate: TEMPLATE\n\t\t\t\t})\n\t\t\t)\n\t\t);\n\t},\n\n\tsave: function save() {\n\t\treturn wp.element.createElement(\n\t\t\t'div',\n\t\t\t{ className: 'wp-block-orbitfox-accordion-box' },\n\t\t\twp.element.createElement(\n\t\t\t\t'ul',\n\t\t\t\tnull,\n\t\t\t\twp.element.createElement(InnerBlocks.Content, null)\n\t\t\t)\n\t\t);\n\t}\n});\n\n//# sourceURL=webpack:///./blocks/accordion-box/accordion-area.js?");

/***/ }),

/***/ "./blocks/accordion-box/accordion-block.js":
/*!*************************************************!*\
  !*** ./blocks/accordion-box/accordion-block.js ***!
  \*************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("/**\n * WordPress dependencies...\n */\nvar __ = wp.i18n.__;\nvar registerBlockType = wp.blocks.registerBlockType;\nvar _wp$editor = wp.editor,\n    RichText = _wp$editor.RichText,\n    InnerBlocks = _wp$editor.InnerBlocks;\n\n\nregisterBlockType('orbitfox/accordion-block', {\n\ttitle: __('Accordion Item'),\n\tdescription: __('Accordion block allows you to add beautiful accordions in your posts.'),\n\tparent: ['orbitfox/accordion-area'],\n\ticon: 'menu',\n\tcategory: 'orbitfox',\n\tkeywords: ['accordion', 'collapsible', 'orbitfox'],\n\n\tattributes: {\n\t\theading: {\n\t\t\ttype: 'array',\n\t\t\tsource: 'children',\n\t\t\tselector: '.accordion-heading'\n\t\t}\n\t},\n\n\tedit: function edit(props) {\n\n\t\tvar CONTENT = [['core/paragraph', {\n\t\t\tcontent: __('What is the point of being alive if you don’t at least try to do something remarkable?'),\n\t\t\tclassName: 'accordion-content'\n\t\t}]];\n\n\t\treturn wp.element.createElement(\n\t\t\t'li',\n\t\t\t{ className: props.className },\n\t\t\twp.element.createElement(RichText, {\n\t\t\t\ttagName: 'h4',\n\t\t\t\tclassName: 'accordion-heading',\n\t\t\t\tvalue: props.attributes.heading,\n\t\t\t\tplaceholder: 'Section Title',\n\t\t\t\tonChange: function onChange(heading) {\n\t\t\t\t\treturn props.setAttributes({ heading: heading });\n\t\t\t\t}\n\t\t\t}),\n\t\t\twp.element.createElement(\n\t\t\t\t'div',\n\t\t\t\t{ className: 'accordion-content' },\n\t\t\t\twp.element.createElement(InnerBlocks, {\n\t\t\t\t\ttemplate: CONTENT,\n\t\t\t\t\tid: 'accordion-content'\n\t\t\t\t})\n\t\t\t)\n\t\t);\n\t},\n\n\tsave: function save(props) {\n\t\treturn wp.element.createElement(\n\t\t\t'li',\n\t\t\tnull,\n\t\t\twp.element.createElement('input', { type: 'checkbox', checked: true }),\n\t\t\twp.element.createElement('i', null),\n\t\t\twp.element.createElement(RichText.Content, {\n\t\t\t\ttagName: 'h4',\n\t\t\t\tclassName: 'accordion-heading',\n\t\t\t\tvalue: props.attributes.heading\n\t\t\t}),\n\t\t\twp.element.createElement(\n\t\t\t\t'div',\n\t\t\t\t{ className: 'accordion-content' },\n\t\t\t\twp.element.createElement(InnerBlocks.Content, null)\n\t\t\t)\n\t\t);\n\t}\n});\n\n//# sourceURL=webpack:///./blocks/accordion-box/accordion-block.js?");

/***/ }),

/***/ "./blocks/accordion-box/editor.scss":
/*!******************************************!*\
  !*** ./blocks/accordion-box/editor.scss ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("// removed by extract-text-webpack-plugin\n\n//# sourceURL=webpack:///./blocks/accordion-box/editor.scss?");

/***/ }),

/***/ "./blocks/accordion-box/index.js":
/*!***************************************!*\
  !*** ./blocks/accordion-box/index.js ***!
  \***************************************/
/*! no exports provided */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _style_scss__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./style.scss */ \"./blocks/accordion-box/style.scss\");\n/* harmony import */ var _style_scss__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_style_scss__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _editor_scss__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./editor.scss */ \"./blocks/accordion-box/editor.scss\");\n/* harmony import */ var _editor_scss__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_editor_scss__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _accordion_area_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./accordion-area.js */ \"./blocks/accordion-box/accordion-area.js\");\n/* harmony import */ var _accordion_area_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_accordion_area_js__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _accordion_block_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./accordion-block.js */ \"./blocks/accordion-box/accordion-block.js\");\n/* harmony import */ var _accordion_block_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_accordion_block_js__WEBPACK_IMPORTED_MODULE_3__);\n/**\n * Accordion Block\n */\n\n\n\n\n\n//# sourceURL=webpack:///./blocks/accordion-box/index.js?");

/***/ }),

/***/ "./blocks/accordion-box/style.scss":
/*!*****************************************!*\
  !*** ./blocks/accordion-box/style.scss ***!
  \*****************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("// removed by extract-text-webpack-plugin\n\n//# sourceURL=webpack:///./blocks/accordion-box/style.scss?");

/***/ }),

/***/ "./blocks/chart/editor.scss":
/*!**********************************!*\
  !*** ./blocks/chart/editor.scss ***!
  \**********************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("// removed by extract-text-webpack-plugin\n\n//# sourceURL=webpack:///./blocks/chart/editor.scss?");

/***/ }),

/***/ "./blocks/chart/index.js":
/*!*******************************!*\
  !*** ./blocks/chart/index.js ***!
  \*******************************/
/*! no exports provided */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var babel_runtime_helpers_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! babel-runtime/helpers/extends */ \"./node_modules/babel-runtime/helpers/extends.js\");\n/* harmony import */ var babel_runtime_helpers_extends__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(babel_runtime_helpers_extends__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var babel_runtime_core_js_json_stringify__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! babel-runtime/core-js/json/stringify */ \"./node_modules/babel-runtime/core-js/json/stringify.js\");\n/* harmony import */ var babel_runtime_core_js_json_stringify__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(babel_runtime_core_js_json_stringify__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var react_google_charts__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-google-charts */ \"./node_modules/react-google-charts/dist/index.esm.js\");\n/* harmony import */ var _handsontable_react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @handsontable/react */ \"./node_modules/@handsontable/react/dist/react-handsontable.js\");\n/* harmony import */ var _handsontable_react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_handsontable_react__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var handsontable_dist_handsontable_full_css__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! handsontable/dist/handsontable.full.css */ \"./node_modules/handsontable/dist/handsontable.full.css\");\n/* harmony import */ var handsontable_dist_handsontable_full_css__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(handsontable_dist_handsontable_full_css__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _editor_scss__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./editor.scss */ \"./blocks/chart/editor.scss\");\n/* harmony import */ var _editor_scss__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_editor_scss__WEBPACK_IMPORTED_MODULE_5__);\n\n\n/**\r\n * External dependencies\r\n */\n\n\n\n\n\n\n/**\r\n * WordPress dependencies.\r\n */\nvar __ = wp.i18n.__;\nvar registerBlockType = wp.blocks.registerBlockType;\nvar _wp$components = wp.components,\n    Button = _wp$components.Button,\n    Dashicon = _wp$components.Dashicon,\n    FormToggle = _wp$components.FormToggle,\n    PanelBody = _wp$components.PanelBody,\n    PanelRow = _wp$components.PanelRow,\n    TextControl = _wp$components.TextControl,\n    Toolbar = _wp$components.Toolbar,\n    Tooltip = _wp$components.Tooltip;\nvar _wp$compose = wp.compose,\n    compose = _wp$compose.compose,\n    withState = _wp$compose.withState;\nvar withSelect = wp.data.withSelect;\nvar _wp$editor = wp.editor,\n    BlockControls = _wp$editor.BlockControls,\n    InspectorControls = _wp$editor.InspectorControls;\nvar Fragment = wp.element.Fragment;\n\n/**\r\n * Internal dependencies\r\n */\n\n\n\nregisterBlockType('orbitfox/chart-pie', {\n\ttitle: __('Pie Chart'),\n\tdescription: __('Display a beautiful Pie Chart on your blog post with Pie Chart block.'),\n\ticon: 'chart-pie',\n\tcategory: 'orbitfox',\n\tkeywords: [__('pie'), __('chart'), __('orbitfox')],\n\tattributes: {\n\t\tdata: {\n\t\t\ttype: 'string',\n\t\t\tdefault: '[[\"Label\",\"Data\"],[\"Dogs\",40],[\"Cats\",30],[\"Racoons\",20],[\"Monkeys\",10]]'\n\t\t},\n\t\toptions: {\n\t\t\ttype: 'object',\n\t\t\tdefault: {\n\t\t\t\ttitle: 'Animals',\n\t\t\t\tis3D: true\n\t\t\t}\n\t\t},\n\t\tid: {\n\t\t\ttype: 'string',\n\t\t\tdefault: ''\n\t\t}\n\t},\n\n\tsupports: {\n\t\talign: true\n\t},\n\n\tedit: compose([withSelect(function (select, props) {\n\t\treturn {\n\t\t\tprops: props\n\t\t};\n\t}), withState({\n\t\tisOpen: false\n\t})])(function (_ref) {\n\t\tvar isOpen = _ref.isOpen,\n\t\t    setState = _ref.setState,\n\t\t    props = _ref.props,\n\t\t    className = _ref.className;\n\n\n\t\tvar updateData = function updateData(value, source) {\n\t\t\tif (value !== null) {\n\t\t\t\tvar options = JSON.parse([props.attributes.data]);\n\t\t\t\tvalue.forEach(function (item) {\n\t\t\t\t\toptions[item[0]][item[1]] = item[3];\n\t\t\t\t});\n\t\t\t\tprops.setAttributes({ data: babel_runtime_core_js_json_stringify__WEBPACK_IMPORTED_MODULE_1___default()(options) });\n\t\t\t}\n\t\t};\n\n\t\tvar addRow = function addRow() {\n\t\t\tvar options = JSON.parse([props.attributes.data]);\n\t\t\toptions.push([\"\", \"\"]);\n\t\t\tprops.setAttributes({ data: babel_runtime_core_js_json_stringify__WEBPACK_IMPORTED_MODULE_1___default()(options) });\n\t\t};\n\n\t\tvar changeChartTitle = function changeChartTitle(value) {\n\t\t\tvar options = babel_runtime_helpers_extends__WEBPACK_IMPORTED_MODULE_0___default()({}, props.attributes.options);\n\t\t\toptions['title'] = value;\n\t\t\tprops.setAttributes({ options: options });\n\t\t};\n\n\t\tvar toggle3d = function toggle3d() {\n\t\t\tvar options = babel_runtime_helpers_extends__WEBPACK_IMPORTED_MODULE_0___default()({}, props.attributes.options);\n\t\t\toptions['is3D'] = !props.attributes.options.is3D;\n\t\t\tprops.setAttributes({ options: options });\n\t\t};\n\n\t\tif (props.clientId && props.attributes.id === '') {\n\t\t\tvar id = props.clientId;\n\t\t\tprops.setAttributes({ id: id });\n\t\t}\n\n\t\treturn [wp.element.createElement(\n\t\t\tBlockControls,\n\t\t\t{ key: 'toolbar-controls' },\n\t\t\twp.element.createElement(\n\t\t\t\tToolbar,\n\t\t\t\t{\n\t\t\t\t\tclassName: 'components-toolbar'\n\t\t\t\t},\n\t\t\t\twp.element.createElement(\n\t\t\t\t\tTooltip,\n\t\t\t\t\t{ text: __('Edit Chart') },\n\t\t\t\t\twp.element.createElement(\n\t\t\t\t\t\tButton,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tclassName: 'components-icon-button components-toolbar__control edit-pie-chart',\n\t\t\t\t\t\t\tonClick: function onClick() {\n\t\t\t\t\t\t\t\treturn setState({ isOpen: !isOpen });\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\twp.element.createElement(Dashicon, { icon: isOpen ? 'yes' : 'edit' })\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t)\n\t\t), wp.element.createElement(\n\t\t\tInspectorControls,\n\t\t\tnull,\n\t\t\twp.element.createElement(\n\t\t\t\tPanelBody,\n\t\t\t\t{\n\t\t\t\t\ttitle: __('Chart Settings')\n\t\t\t\t},\n\t\t\t\twp.element.createElement(TextControl, {\n\t\t\t\t\tlabel: __('Chart Title'),\n\t\t\t\t\tvalue: props.attributes.options.title,\n\t\t\t\t\tonChange: changeChartTitle\n\t\t\t\t}),\n\t\t\t\twp.element.createElement(\n\t\t\t\t\tPanelRow,\n\t\t\t\t\tnull,\n\t\t\t\t\twp.element.createElement(\n\t\t\t\t\t\t'label',\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\thtmlFor: 'is-3d-form-toggle'\n\t\t\t\t\t\t},\n\t\t\t\t\t\t__('Is chart 3d?')\n\t\t\t\t\t),\n\t\t\t\t\twp.element.createElement(FormToggle, {\n\t\t\t\t\t\tid: 'is-3d-form-toggle',\n\t\t\t\t\t\tlabel: __('Is chart 3rd? '),\n\t\t\t\t\t\tchecked: props.attributes.options.is3D,\n\t\t\t\t\t\tonChange: toggle3d\n\t\t\t\t\t})\n\t\t\t\t)\n\t\t\t)\n\t\t), wp.element.createElement(\n\t\t\t'div',\n\t\t\t{ className: className },\n\t\t\tisOpen ? wp.element.createElement(\n\t\t\t\tFragment,\n\t\t\t\tnull,\n\t\t\t\twp.element.createElement(_handsontable_react__WEBPACK_IMPORTED_MODULE_3__[\"HotTable\"], {\n\t\t\t\t\tdata: JSON.parse(props.attributes.data),\n\t\t\t\t\tallowInsertRow: true,\n\t\t\t\t\tcell: [{\n\t\t\t\t\t\trow: 0,\n\t\t\t\t\t\tcol: 0,\n\t\t\t\t\t\treadOnly: true\n\t\t\t\t\t}, {\n\t\t\t\t\t\trow: 0,\n\t\t\t\t\t\tcol: 1,\n\t\t\t\t\t\treadOnly: true\n\t\t\t\t\t}],\n\t\t\t\t\tcolumns: [{\n\t\t\t\t\t\ttype: 'text'\n\t\t\t\t\t}, {\n\t\t\t\t\t\ttype: 'numeric'\n\t\t\t\t\t}],\n\t\t\t\t\tcontextMenu: true,\n\t\t\t\t\tclassName: 'htLeft',\n\t\t\t\t\theight: '200',\n\t\t\t\t\trowHeaders: true,\n\t\t\t\t\tstretchH: 'all',\n\t\t\t\t\tonAfterChange: function onAfterChange(value, source) {\n\t\t\t\t\t\treturn updateData(value, source);\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\twp.element.createElement(\n\t\t\t\t\tButton,\n\t\t\t\t\t{\n\t\t\t\t\t\tonClick: addRow,\n\t\t\t\t\t\tisPrimary: true\n\t\t\t\t\t},\n\t\t\t\t\t__('Add another row')\n\t\t\t\t)\n\t\t\t) : wp.element.createElement(react_google_charts__WEBPACK_IMPORTED_MODULE_2__[\"Chart\"], {\n\t\t\t\tchartType: 'PieChart',\n\t\t\t\tdata: JSON.parse(props.attributes.data),\n\t\t\t\toptions: props.attributes.options,\n\t\t\t\twidth: '100%',\n\t\t\t\theight: '400px',\n\t\t\t\tlegendToggle: true\n\t\t\t})\n\t\t)];\n\t}),\n\n\tsave: function save() {\n\t\treturn null;\n\t}\n});\n\n//# sourceURL=webpack:///./blocks/chart/index.js?");

/***/ }),

/***/ "./blocks/font-awesome-icons/editor.scss":
/*!***********************************************!*\
  !*** ./blocks/font-awesome-icons/editor.scss ***!
  \***********************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("// removed by extract-text-webpack-plugin\n\n//# sourceURL=webpack:///./blocks/font-awesome-icons/editor.scss?");

/***/ }),

/***/ "./blocks/font-awesome-icons/index.js":
/*!********************************************!*\
  !*** ./blocks/font-awesome-icons/index.js ***!
  \********************************************/
/*! no exports provided */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _style_scss__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./style.scss */ \"./blocks/font-awesome-icons/style.scss\");\n/* harmony import */ var _style_scss__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_style_scss__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _editor_scss__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./editor.scss */ \"./blocks/font-awesome-icons/editor.scss\");\n/* harmony import */ var _editor_scss__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_editor_scss__WEBPACK_IMPORTED_MODULE_1__);\n/**\r\n * WordPress dependencies...\r\n */\n\nvar __ = wp.i18n.__;\nvar registerBlockType = wp.blocks.registerBlockType;\nvar _wp$components = wp.components,\n    Autocomplete = _wp$components.Autocomplete,\n    PanelBody = _wp$components.PanelBody,\n    Spinner = _wp$components.Spinner,\n    Placeholder = _wp$components.Placeholder,\n    RangeControl = _wp$components.RangeControl;\nvar withSelect = wp.data.withSelect;\nvar _wp$editor = wp.editor,\n    ContrastChecker = _wp$editor.ContrastChecker,\n    InspectorControls = _wp$editor.InspectorControls,\n    PanelColorSettings = _wp$editor.PanelColorSettings;\n\n/**\r\n * Internal dependencies\r\n */\n\n\n\n\nregisterBlockType('orbitfox/font-awesome-icons', {\n\ttitle: __('Font Awesome Icons'),\n\tdescription: __('Share buttons for your website visitors to share content on any social sharing service.'),\n\ticon: 'smiley',\n\tcategory: 'orbitfox',\n\tkeywords: ['font awesome', 'dashicons', 'icons'],\n\tattributes: {\n\t\tprefix: {\n\t\t\ttype: 'string',\n\t\t\tdefault: 'fab'\n\t\t},\n\t\ticon: {\n\t\t\ttype: 'string',\n\t\t\tdefault: 'themeisle'\n\t\t},\n\t\tfontSize: {\n\t\t\ttype: 'number',\n\t\t\tdefault: 16\n\t\t},\n\t\tpadding: {\n\t\t\ttype: 'number',\n\t\t\tdefault: 5\n\t\t},\n\t\tmargin: {\n\t\t\ttype: 'number',\n\t\t\tdefault: 5\n\t\t},\n\t\tbackgroundColor: {\n\t\t\ttype: 'string'\n\t\t},\n\t\ttextColor: {\n\t\t\ttype: 'string'\n\t\t},\n\t\tborderColor: {\n\t\t\ttype: 'string'\n\t\t},\n\t\tborderSize: {\n\t\t\ttype: 'number',\n\t\t\tdefault: 0\n\t\t},\n\t\tborderRadius: {\n\t\t\ttype: 'number',\n\t\t\tdefault: 0\n\t\t}\n\t},\n\n\tsupports: {\n\t\talign: ['left', 'center', 'right']\n\t},\n\n\tedit: withSelect(function (select, props) {\n\t\tvar iconsList = select('obfx/blocks').getFaIconsList();\n\t\treturn {\n\t\t\ticonsList: iconsList,\n\t\t\tprops: props\n\t\t};\n\t})(function (_ref) {\n\t\tvar iconsList = _ref.iconsList,\n\t\t    props = _ref.props;\n\n\n\t\tvar autocompleters = [{\n\t\t\tname: 'font-awesome',\n\t\t\ttriggerPrefix: '',\n\t\t\toptions: iconsList,\n\t\t\tgetOptionLabel: function getOptionLabel(option) {\n\t\t\t\treturn wp.element.createElement(\n\t\t\t\t\t'span',\n\t\t\t\t\tnull,\n\t\t\t\t\twp.element.createElement('i', { className: option.prefix + ' fa-fw fa-' + option.name }),\n\t\t\t\t\t' ',\n\t\t\t\t\toption.name\n\t\t\t\t);\n\t\t\t},\n\t\t\tgetOptionKeywords: function getOptionKeywords(option) {\n\t\t\t\treturn [option.name];\n\t\t\t},\n\t\t\tgetOptionCompletion: function getOptionCompletion(option) {\n\t\t\t\tprops.setAttributes({\n\t\t\t\t\tprefix: option.prefix,\n\t\t\t\t\ticon: option.name\n\t\t\t\t});\n\t\t\t\treturn option.name;\n\t\t\t}\n\t\t}];\n\n\t\tvar changeFontSize = function changeFontSize(value) {\n\t\t\tprops.setAttributes({ fontSize: value });\n\t\t};\n\n\t\tvar changePadding = function changePadding(value) {\n\t\t\tprops.setAttributes({ padding: value });\n\t\t};\n\n\t\tvar changeMargin = function changeMargin(value) {\n\t\t\tprops.setAttributes({ margin: value });\n\t\t};\n\n\t\tvar changeBackgroundColor = function changeBackgroundColor(value) {\n\t\t\tprops.setAttributes({ backgroundColor: value });\n\t\t};\n\n\t\tvar changeTextColor = function changeTextColor(value) {\n\t\t\tprops.setAttributes({ textColor: value });\n\t\t};\n\n\t\tvar changeBorderColor = function changeBorderColor(value) {\n\t\t\tprops.setAttributes({ borderColor: value });\n\t\t};\n\n\t\tvar changeBorderSize = function changeBorderSize(value) {\n\t\t\tprops.setAttributes({ borderSize: value });\n\t\t};\n\n\t\tvar changeBorderRadius = function changeBorderRadius(value) {\n\t\t\tprops.setAttributes({ borderRadius: value });\n\t\t};\n\n\t\tvar iconStyle = {\n\t\t\tborderRadius: props.attributes.borderRadius + '%',\n\t\t\tfontSize: props.attributes.fontSize + 'px',\n\t\t\tpadding: props.attributes.padding + 'px'\n\t\t};\n\n\t\tvar containerStyle = {\n\t\t\tcolor: props.attributes.textColor,\n\t\t\tbackgroundColor: props.attributes.backgroundColor,\n\t\t\tborderColor: props.attributes.borderColor,\n\t\t\tborderRadius: props.attributes.borderRadius + '%',\n\t\t\tborderStyle: 'solid',\n\t\t\tborderWidth: props.attributes.borderSize + 'px',\n\t\t\tdisplay: 'inline-block',\n\t\t\tmargin: props.attributes.margin + 'px'\n\t\t};\n\n\t\treturn [wp.element.createElement(\n\t\t\tInspectorControls,\n\t\t\tnull,\n\t\t\twp.element.createElement(\n\t\t\t\tPanelBody,\n\t\t\t\t{\n\t\t\t\t\ttitle: __('Icon Settings')\n\t\t\t\t},\n\t\t\t\ticonsList !== undefined && iconsList.length > 0 ? wp.element.createElement(\n\t\t\t\t\tAutocomplete,\n\t\t\t\t\t{ completers: autocompleters },\n\t\t\t\t\tfunction (_ref2) {\n\t\t\t\t\t\tvar isExpanded = _ref2.isExpanded,\n\t\t\t\t\t\t    listBoxId = _ref2.listBoxId,\n\t\t\t\t\t\t    activeId = _ref2.activeId;\n\t\t\t\t\t\treturn wp.element.createElement(\n\t\t\t\t\t\t\t'div',\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tclassName: 'font-awesome-auto-complete'\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\twp.element.createElement(\n\t\t\t\t\t\t\t\t'label',\n\t\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\t\twp.element.createElement('i', { className: props.attributes.prefix + ' fa-' + props.attributes.icon })\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\twp.element.createElement(\n\t\t\t\t\t\t\t\t'div',\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tclassName: 'icon-complete',\n\t\t\t\t\t\t\t\t\tcontentEditable: true,\n\t\t\t\t\t\t\t\t\tsuppressContentEditableWarning: true,\n\t\t\t\t\t\t\t\t\t'aria-autocomplete': 'list',\n\t\t\t\t\t\t\t\t\t'aria-expanded': isExpanded,\n\t\t\t\t\t\t\t\t\t'aria-owns': listBoxId,\n\t\t\t\t\t\t\t\t\t'aria-activedescendant': activeId\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tprops.attributes.icon\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t) : wp.element.createElement(\n\t\t\t\t\tPlaceholder,\n\t\t\t\t\tnull,\n\t\t\t\t\twp.element.createElement(Spinner, null)\n\t\t\t\t)\n\t\t\t),\n\t\t\twp.element.createElement(\n\t\t\t\tPanelBody,\n\t\t\t\t{\n\t\t\t\t\ttitle: __('Icon Sizes'),\n\t\t\t\t\tclassName: 'blocks-font-size',\n\t\t\t\t\tinitialOpen: false\n\t\t\t\t},\n\t\t\t\twp.element.createElement(RangeControl, {\n\t\t\t\t\tlabel: __('Text Size'),\n\t\t\t\t\tvalue: props.attributes.fontSize || '',\n\t\t\t\t\tinitialPosition: 16,\n\t\t\t\t\tonChange: changeFontSize,\n\t\t\t\t\tmin: 12,\n\t\t\t\t\tmax: 140,\n\t\t\t\t\tbeforeIcon: 'editor-textcolor',\n\t\t\t\t\tafterIcon: 'editor-textcolor'\n\t\t\t\t}),\n\t\t\t\twp.element.createElement(RangeControl, {\n\t\t\t\t\tlabel: __('Inner Space'),\n\t\t\t\t\tvalue: props.attributes.padding || '',\n\t\t\t\t\tinitialPosition: 5,\n\t\t\t\t\tonChange: changePadding,\n\t\t\t\t\tmin: 0,\n\t\t\t\t\tmax: 100,\n\t\t\t\t\tbeforeIcon: 'minus',\n\t\t\t\t\tafterIcon: 'plus'\n\t\t\t\t}),\n\t\t\t\twp.element.createElement(RangeControl, {\n\t\t\t\t\tlabel: __('Outer Space'),\n\t\t\t\t\tvalue: props.attributes.margin || '',\n\t\t\t\t\tinitialPosition: 5,\n\t\t\t\t\tonChange: changeMargin,\n\t\t\t\t\tmin: 0,\n\t\t\t\t\tmax: 100,\n\t\t\t\t\tbeforeIcon: 'minus',\n\t\t\t\t\tafterIcon: 'plus'\n\t\t\t\t})\n\t\t\t),\n\t\t\twp.element.createElement(\n\t\t\t\tPanelColorSettings,\n\t\t\t\t{\n\t\t\t\t\ttitle: __('Color Settings'),\n\t\t\t\t\tinitialOpen: false,\n\t\t\t\t\tcolorSettings: [{\n\t\t\t\t\t\tvalue: props.attributes.backgroundColor,\n\t\t\t\t\t\tonChange: changeBackgroundColor,\n\t\t\t\t\t\tlabel: __('Background Color')\n\t\t\t\t\t}, {\n\t\t\t\t\t\tvalue: props.attributes.textColor,\n\t\t\t\t\t\tonChange: changeTextColor,\n\t\t\t\t\t\tlabel: __('Text Color')\n\t\t\t\t\t}, {\n\t\t\t\t\t\tvalue: props.attributes.borderColor,\n\t\t\t\t\t\tonChange: changeBorderColor,\n\t\t\t\t\t\tlabel: __('Border Color')\n\t\t\t\t\t}]\n\t\t\t\t},\n\t\t\t\twp.element.createElement(ContrastChecker, {\n\t\t\t\t\ttextColor: props.attributes.textColor,\n\t\t\t\t\tbackgroundColor: props.attributes.backgroundColor\n\t\t\t\t})\n\t\t\t),\n\t\t\twp.element.createElement(\n\t\t\t\tPanelBody,\n\t\t\t\t{\n\t\t\t\t\ttitle: __('Border Settings'),\n\t\t\t\t\tinitialOpen: false\n\t\t\t\t},\n\t\t\t\twp.element.createElement(RangeControl, {\n\t\t\t\t\tlabel: __('Border Size'),\n\t\t\t\t\tvalue: props.attributes.borderSize,\n\t\t\t\t\tonChange: changeBorderSize,\n\t\t\t\t\tmin: 0,\n\t\t\t\t\tmax: 120,\n\t\t\t\t\tbeforeIcon: 'minus',\n\t\t\t\t\tafterIcon: 'plus'\n\t\t\t\t}),\n\t\t\t\twp.element.createElement(RangeControl, {\n\t\t\t\t\tlabel: __('Border Radius'),\n\t\t\t\t\tvalue: props.attributes.borderRadius,\n\t\t\t\t\tonChange: changeBorderRadius,\n\t\t\t\t\tmin: 0,\n\t\t\t\t\tmax: 100,\n\t\t\t\t\tbeforeIcon: 'grid-view',\n\t\t\t\t\tafterIcon: 'marker'\n\t\t\t\t})\n\t\t\t)\n\t\t), wp.element.createElement(\n\t\t\t'p',\n\t\t\t{ className: props.className },\n\t\t\twp.element.createElement(\n\t\t\t\t'span',\n\t\t\t\t{\n\t\t\t\t\tclassName: props.className + '-container',\n\t\t\t\t\tstyle: containerStyle\n\t\t\t\t},\n\t\t\t\twp.element.createElement('i', {\n\t\t\t\t\tclassName: props.attributes.prefix + ' fa-' + props.attributes.icon,\n\t\t\t\t\tstyle: iconStyle\n\t\t\t\t})\n\t\t\t)\n\t\t)];\n\t}),\n\n\tsave: function save(props) {\n\t\tvar iconStyle = {\n\t\t\tborderRadius: props.attributes.borderRadius + '%',\n\t\t\tfontSize: props.attributes.fontSize + 'px',\n\t\t\tpadding: props.attributes.padding + 'px'\n\t\t};\n\n\t\tvar containerStyle = {\n\t\t\tcolor: props.attributes.textColor,\n\t\t\tbackgroundColor: props.attributes.backgroundColor,\n\t\t\tborderColor: props.attributes.borderColor,\n\t\t\tborderRadius: props.attributes.borderRadius + '%',\n\t\t\tborderStyle: 'solid',\n\t\t\tborderWidth: props.attributes.borderSize + 'px',\n\t\t\tdisplay: 'inline-block',\n\t\t\tmargin: props.attributes.margin + 'px'\n\t\t};\n\n\t\treturn wp.element.createElement(\n\t\t\t'p',\n\t\t\tnull,\n\t\t\twp.element.createElement(\n\t\t\t\t'span',\n\t\t\t\t{ style: containerStyle },\n\t\t\t\twp.element.createElement('i', {\n\t\t\t\t\tclassName: props.attributes.prefix + ' fa-' + props.attributes.icon,\n\t\t\t\t\tstyle: iconStyle\n\t\t\t\t})\n\t\t\t)\n\t\t);\n\t}\n});\n\n//# sourceURL=webpack:///./blocks/font-awesome-icons/index.js?");

/***/ }),

/***/ "./blocks/font-awesome-icons/style.scss":
/*!**********************************************!*\
  !*** ./blocks/font-awesome-icons/style.scss ***!
  \**********************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("// removed by extract-text-webpack-plugin\n\n//# sourceURL=webpack:///./blocks/font-awesome-icons/style.scss?");

/***/ }),

/***/ "./blocks/google-map/editor.scss":
/*!***************************************!*\
  !*** ./blocks/google-map/editor.scss ***!
  \***************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("// removed by extract-text-webpack-plugin\n\n//# sourceURL=webpack:///./blocks/google-map/editor.scss?");

/***/ }),

/***/ "./blocks/google-map/index.js":
/*!************************************!*\
  !*** ./blocks/google-map/index.js ***!
  \************************************/
/*! no exports provided */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _editor_scss__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./editor.scss */ \"./blocks/google-map/editor.scss\");\n/* harmony import */ var _editor_scss__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_editor_scss__WEBPACK_IMPORTED_MODULE_0__);\n/**\r\n * WordPress dependencies...\r\n */\nvar __ = wp.i18n.__;\nvar registerBlockType = wp.blocks.registerBlockType;\nvar _wp$components = wp.components,\n    Button = _wp$components.Button,\n    PanelBody = _wp$components.PanelBody,\n    Placeholder = _wp$components.Placeholder,\n    RangeControl = _wp$components.RangeControl,\n    SelectControl = _wp$components.SelectControl,\n    Spinner = _wp$components.Spinner,\n    TextControl = _wp$components.TextControl;\nvar _wp$compose = wp.compose,\n    compose = _wp$compose.compose,\n    withState = _wp$compose.withState;\nvar withSelect = wp.data.withSelect;\nvar InspectorControls = wp.editor.InspectorControls;\n\n/**\r\n * Internal dependencies\r\n */\n\n\n\nregisterBlockType('orbitfox/google-map', {\n\ttitle: __('Google Map'),\n\tdescription: __('Display a Google Map on your website with Google Map block.'),\n\ticon: 'admin-site',\n\tcategory: 'orbitfox',\n\tkeywords: ['map', 'google', 'orbitfox'],\n\tattributes: {\n\t\tlocation: {\n\t\t\ttype: 'string'\n\t\t},\n\t\ttype: {\n\t\t\ttype: 'string',\n\t\t\tdefault: 'roadmap'\n\t\t},\n\t\tzoom: {\n\t\t\ttype: 'number',\n\t\t\tdefault: 10\n\t\t},\n\t\theight: {\n\t\t\ttype: 'string',\n\t\t\tdefault: '400px'\n\t\t}\n\t},\n\n\tsupports: {\n\t\thtml: false\n\t},\n\n\tedit: compose([withSelect(function (select, props) {\n\t\treturn {\n\t\t\tprops: props\n\t\t};\n\t}), withState({\n\t\tapi: '',\n\t\tisAPILoaded: false,\n\t\tisAPISaved: false,\n\t\tisSaving: false\n\t})])(function (_ref) {\n\t\tvar props = _ref.props,\n\t\t    className = _ref.className,\n\t\t    api = _ref.api,\n\t\t    isAPILoaded = _ref.isAPILoaded,\n\t\t    isAPISaved = _ref.isAPISaved,\n\t\t    isSaving = _ref.isSaving,\n\t\t    setState = _ref.setState;\n\n\n\t\tvar settings = void 0;\n\n\t\twp.api.loadPromise.then(function () {\n\t\t\tsettings = new wp.api.models.Settings();\n\t\t});\n\n\t\tif (isAPILoaded === false) {\n\t\t\tsettings.fetch().then(function (response) {\n\t\t\t\tsetState({\n\t\t\t\t\tapi: response.orbitfox_google_map_block_api_key,\n\t\t\t\t\tisAPILoaded: true\n\t\t\t\t});\n\n\t\t\t\tif (response.orbitfox_google_map_block_api_key !== '') {\n\t\t\t\t\tsetState({\n\t\t\t\t\t\tisAPISaved: true\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tvar changeAPI = function changeAPI(value) {\n\t\t\tsetState({\n\t\t\t\tapi: value\n\t\t\t});\n\t\t};\n\n\t\tvar saveAPIKey = function saveAPIKey() {\n\n\t\t\tsetState({\n\t\t\t\tisSaving: true\n\t\t\t});\n\n\t\t\tvar model = new wp.api.models.Settings({\n\t\t\t\torbitfox_google_map_block_api_key: api\n\t\t\t});\n\n\t\t\tmodel.save().then(function (response) {\n\t\t\t\tsettings.fetch();\n\t\t\t\tsetState({\n\t\t\t\t\tisSaving: false,\n\t\t\t\t\tisAPISaved: true\n\t\t\t\t});\n\t\t\t});\n\t\t};\n\n\t\tvar changeLocation = function changeLocation(value) {\n\t\t\tprops.setAttributes({ location: value });\n\t\t};\n\n\t\tvar changeMapType = function changeMapType(value) {\n\t\t\tprops.setAttributes({ type: value });\n\t\t};\n\n\t\tvar changeZoom = function changeZoom(value) {\n\t\t\tprops.setAttributes({ zoom: value });\n\t\t};\n\n\t\tvar changeHeight = function changeHeight(value) {\n\t\t\tprops.setAttributes({ height: value });\n\t\t};\n\n\t\tif (!isAPILoaded) {\n\t\t\treturn wp.element.createElement(\n\t\t\t\tPlaceholder,\n\t\t\t\tnull,\n\t\t\t\twp.element.createElement(Spinner, null),\n\t\t\t\t__('Loading…')\n\t\t\t);\n\t\t}\n\n\t\tif (!isAPISaved) {\n\t\t\treturn wp.element.createElement(\n\t\t\t\t'div',\n\t\t\t\t{ className: className },\n\t\t\t\twp.element.createElement(\n\t\t\t\t\tPlaceholder,\n\t\t\t\t\t{\n\t\t\t\t\t\ticon: 'admin-site',\n\t\t\t\t\t\tlabel: __('Google Maps'),\n\t\t\t\t\t\tinstructions: __('A Google Maps API key is required, please enter one below.')\n\t\t\t\t\t},\n\t\t\t\t\twp.element.createElement(TextControl, {\n\t\t\t\t\t\ttype: 'text',\n\t\t\t\t\t\tplaceholder: __('Google Maps API Key'),\n\t\t\t\t\t\tvalue: api,\n\t\t\t\t\t\tclassName: 'components-placeholder__input',\n\t\t\t\t\t\tonChange: changeAPI\n\t\t\t\t\t}),\n\t\t\t\t\twp.element.createElement(\n\t\t\t\t\t\tButton,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tisLarge: true,\n\t\t\t\t\t\t\ttype: 'submit',\n\t\t\t\t\t\t\tonClick: saveAPIKey,\n\t\t\t\t\t\t\tisBusy: isSaving,\n\t\t\t\t\t\t\tdisabled: api === ''\n\t\t\t\t\t\t},\n\t\t\t\t\t\t__('Save API Key')\n\t\t\t\t\t),\n\t\t\t\t\twp.element.createElement(\n\t\t\t\t\t\t'div',\n\t\t\t\t\t\t{ 'class': 'components-placeholder__instructions' },\n\t\t\t\t\t\t__('Need an API key? Get one'),\n\t\t\t\t\t\twp.element.createElement(\n\t\t\t\t\t\t\t'a',\n\t\t\t\t\t\t\t{ target: '_blank', href: 'https://console.developers.google.com/flows/enableapi?apiid=maps_backend,static_maps_backend,maps_embed_backend&keyType=CLIENT_SIDE&reusekey=true' },\n\t\t\t\t\t\t\t__(' here.')\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\n\t\treturn [wp.element.createElement(\n\t\t\tInspectorControls,\n\t\t\tnull,\n\t\t\twp.element.createElement(\n\t\t\t\tPanelBody,\n\t\t\t\t{\n\t\t\t\t\ttitle: __('Map Settings')\n\t\t\t\t},\n\t\t\t\twp.element.createElement(SelectControl, {\n\t\t\t\t\tlabel: __('Map Type'),\n\t\t\t\t\tvalue: props.attributes.type,\n\t\t\t\t\toptions: [{ label: __('Road Map'), value: 'roadmap' }, { label: __('Satellite View'), value: 'satellite' }],\n\t\t\t\t\tonChange: changeMapType\n\t\t\t\t}),\n\t\t\t\twp.element.createElement(RangeControl, {\n\t\t\t\t\tlabel: __('Map Zoom Level'),\n\t\t\t\t\tvalue: props.attributes.zoom,\n\t\t\t\t\tonChange: changeZoom,\n\t\t\t\t\tmin: 0,\n\t\t\t\t\tmax: 21\n\t\t\t\t}),\n\t\t\t\twp.element.createElement(TextControl, {\n\t\t\t\t\tlabel: __('Map Height'),\n\t\t\t\t\ttype: 'text',\n\t\t\t\t\tvalue: props.attributes.height,\n\t\t\t\t\tonChange: changeHeight\n\t\t\t\t})\n\t\t\t),\n\t\t\twp.element.createElement(\n\t\t\t\tPanelBody,\n\t\t\t\t{\n\t\t\t\t\ttitle: __('Global Settings'),\n\t\t\t\t\tinitialOpen: false\n\t\t\t\t},\n\t\t\t\twp.element.createElement(TextControl, {\n\t\t\t\t\tlabel: __('Google Maps API Key'),\n\t\t\t\t\ttype: 'text',\n\t\t\t\t\tplaceholder: __('Google Maps API Key'),\n\t\t\t\t\tvalue: api,\n\t\t\t\t\tclassName: 'components-placeholder__input',\n\t\t\t\t\tonChange: changeAPI,\n\t\t\t\t\thelp: __('Changing the API key effects all Google Map Embed blocks.')\n\t\t\t\t}),\n\t\t\t\twp.element.createElement(\n\t\t\t\t\tButton,\n\t\t\t\t\t{\n\t\t\t\t\t\tisLarge: true,\n\t\t\t\t\t\ttype: 'submit',\n\t\t\t\t\t\tonClick: saveAPIKey,\n\t\t\t\t\t\tisBusy: isSaving,\n\t\t\t\t\t\tdisabled: api === ''\n\t\t\t\t\t},\n\t\t\t\t\t__('Save API Key')\n\t\t\t\t)\n\t\t\t)\n\t\t), wp.element.createElement(TextControl, {\n\t\t\ttype: 'text',\n\t\t\tplaceholder: __('Enter a location…'),\n\t\t\tvalue: props.attributes.location,\n\t\t\tonChange: changeLocation\n\t\t}), props.attributes.location && wp.element.createElement(\n\t\t\t'div',\n\t\t\t{ className: className + ' interactive' },\n\t\t\twp.element.createElement(\n\t\t\t\t'div',\n\t\t\t\t{ className: 'map' },\n\t\t\t\twp.element.createElement(\n\t\t\t\t\t'iframe',\n\t\t\t\t\t{\n\t\t\t\t\t\twidth: '100%',\n\t\t\t\t\t\theight: '100%',\n\t\t\t\t\t\tframeBorder: '0',\n\t\t\t\t\t\tstyle: {\n\t\t\t\t\t\t\tborder: 0,\n\t\t\t\t\t\t\theight: props.attributes.height\n\t\t\t\t\t\t},\n\t\t\t\t\t\tsrc: 'https://www.google.com/maps/embed/v1/place?key=' + api + '&q=' + props.attributes.location + '&maptype=' + props.attributes.type + '&zoom=' + props.attributes.zoom,\n\t\t\t\t\t\tallowFullScreen: true },\n\t\t\t\t\t'>'\n\t\t\t\t)\n\t\t\t)\n\t\t)];\n\t}),\n\n\tsave: function save() {\n\t\treturn null;\n\t}\n});\n\n//# sourceURL=webpack:///./blocks/google-map/index.js?");

/***/ }),

/***/ "./blocks/notice/editor.scss":
/*!***********************************!*\
  !*** ./blocks/notice/editor.scss ***!
  \***********************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("// removed by extract-text-webpack-plugin\n\n//# sourceURL=webpack:///./blocks/notice/editor.scss?");

/***/ }),

/***/ "./blocks/notice/index.js":
/*!********************************!*\
  !*** ./blocks/notice/index.js ***!
  \********************************/
/*! no exports provided */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _style_scss__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./style.scss */ \"./blocks/notice/style.scss\");\n/* harmony import */ var _style_scss__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_style_scss__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _editor_scss__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./editor.scss */ \"./blocks/notice/editor.scss\");\n/* harmony import */ var _editor_scss__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_editor_scss__WEBPACK_IMPORTED_MODULE_1__);\n/**\r\n * WordPress dependencies...\r\n */\nvar __ = wp.i18n.__;\nvar registerBlockType = wp.blocks.registerBlockType;\nvar RichText = wp.editor.RichText;\nvar Notice = wp.components.Notice;\n\n/**\r\n * Internal dependencies\r\n */\n\n\n\n\nregisterBlockType('orbitfox/notice', {\n\ttitle: __('Notice'),\n\tdescription: __('Provide contextual feedback messages for typical user actions with the handful of available and flexible alert messages.'),\n\ticon: 'info',\n\tcategory: 'orbitfox',\n\tkeywords: ['notice', 'info'],\n\tattributes: {\n\t\tcontent: {\n\t\t\ttype: 'array',\n\t\t\tsource: 'children',\n\t\t\tselector: '.components-notice__content'\n\t\t}\n\t},\n\n\tsupports: {\n\t\talign: ['wide', 'full']\n\t},\n\n\tstyles: [{ name: 'sucess', label: __('Success'), isDefault: true }, { name: 'info', label: __('Info') }, { name: 'warning', label: __('Warning') }, { name: 'error', label: __('Error') }],\n\n\tedit: function edit(props) {\n\t\tvar status = \"success\";\n\t\tif (props.attributes.className && props.attributes.className.includes('is-style-info')) {\n\t\t\tstatus = \"\";\n\t\t} else if (props.attributes.className && props.attributes.className.includes('is-style-warning')) {\n\t\t\tstatus = \"warning\";\n\t\t} else if (props.attributes.className && props.attributes.className.includes('is-style-error')) {\n\t\t\tstatus = \"error\";\n\t\t}\n\t\treturn wp.element.createElement(\n\t\t\tNotice,\n\t\t\t{\n\t\t\t\tclassName: props.className,\n\t\t\t\tisDismissible: false,\n\t\t\t\tstatus: status\n\t\t\t},\n\t\t\twp.element.createElement(RichText, {\n\t\t\t\ttagName: 'p',\n\t\t\t\tplaceholder: __('Lorem ipsum dolor sit amet, consectetur adipiscing elit.'),\n\t\t\t\tvalue: props.attributes.content,\n\t\t\t\tclassName: 'components-notice__content',\n\t\t\t\tonChange: function onChange(content) {\n\t\t\t\t\treturn props.setAttributes({ content: content });\n\t\t\t\t},\n\t\t\t\tkeepPlaceholderOnFocus: 'true'\n\t\t\t})\n\t\t);\n\t},\n\tsave: function save(props) {\n\t\tvar status = \"success\";\n\t\tif (props.attributes.className && props.attributes.className.includes('is-style-info')) {\n\t\t\tstatus = \"\";\n\t\t} else if (props.attributes.className && props.attributes.className.includes('is-style-warning')) {\n\t\t\tstatus = \"warning\";\n\t\t} else if (props.attributes.className && props.attributes.className.includes('is-style-error')) {\n\t\t\tstatus = \"error\";\n\t\t}\n\t\treturn wp.element.createElement(\n\t\t\tNotice,\n\t\t\t{\n\t\t\t\tclassName: 'obfx-block-notice',\n\t\t\t\tisDismissible: false,\n\t\t\t\tstatus: status\n\t\t\t},\n\t\t\twp.element.createElement(RichText.Content, {\n\t\t\t\ttagName: 'p',\n\t\t\t\tclassName: 'components-notice__content',\n\t\t\t\tvalue: props.attributes.content\n\t\t\t})\n\t\t);\n\t}\n});\n\n//# sourceURL=webpack:///./blocks/notice/index.js?");

/***/ }),

/***/ "./blocks/notice/style.scss":
/*!**********************************!*\
  !*** ./blocks/notice/style.scss ***!
  \**********************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("// removed by extract-text-webpack-plugin\n\n//# sourceURL=webpack:///./blocks/notice/style.scss?");

/***/ }),

/***/ "./blocks/plugin-card/editor.scss":
/*!****************************************!*\
  !*** ./blocks/plugin-card/editor.scss ***!
  \****************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("// removed by extract-text-webpack-plugin\n\n//# sourceURL=webpack:///./blocks/plugin-card/editor.scss?");

/***/ }),

/***/ "./blocks/plugin-card/index.js":
/*!*************************************!*\
  !*** ./blocks/plugin-card/index.js ***!
  \*************************************/
/*! no exports provided */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var babel_runtime_core_js_object_keys__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! babel-runtime/core-js/object/keys */ \"./node_modules/babel-runtime/core-js/object/keys.js\");\n/* harmony import */ var babel_runtime_core_js_object_keys__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(babel_runtime_core_js_object_keys__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _editor_scss__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./editor.scss */ \"./blocks/plugin-card/editor.scss\");\n/* harmony import */ var _editor_scss__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_editor_scss__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _style_scss__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./style.scss */ \"./blocks/plugin-card/style.scss\");\n/* harmony import */ var _style_scss__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_style_scss__WEBPACK_IMPORTED_MODULE_2__);\n\n/**\n * WordPress dependencies...\n */\n\nvar __ = wp.i18n.__;\nvar registerBlockType = wp.blocks.registerBlockType;\nvar _wp$components = wp.components,\n    Placeholder = _wp$components.Placeholder,\n    Dashicon = _wp$components.Dashicon,\n    TextControl = _wp$components.TextControl,\n    Spinner = _wp$components.Spinner,\n    Button = _wp$components.Button,\n    Toolbar = _wp$components.Toolbar,\n    Tooltip = _wp$components.Tooltip;\nvar _wp$compose = wp.compose,\n    compose = _wp$compose.compose,\n    withState = _wp$compose.withState;\nvar BlockControls = wp.editor.BlockControls;\nvar withSelect = wp.data.withSelect;\nvar ENTER = wp.keycodes.ENTER;\n\n\nvar starRating = function starRating(stars) {\n\tvar rating = Math.floor(stars / 10) / 2;\n\tvar fullStars = Math.floor(rating);\n\tvar halfStars = Math.ceil(rating - fullStars);\n\tvar emptyStars = 5 - fullStars - halfStars;\n\tvar ratings = '<span class=\"star-full\"></span>'.repeat(fullStars) + '<span class=\"star-half\"></span>'.repeat(halfStars) + '<span class=\"star-empty\"></span>'.repeat(emptyStars);\n\treturn ratings;\n};\n\nvar unescapeHTML = function unescapeHTML(value) {\n\tvar htmlNode = document.createElement('div');\n\thtmlNode.innerHTML = value;\n\tif (htmlNode.innerText !== undefined) {\n\t\treturn htmlNode.innerText;\n\t}\n\treturn htmlNode.textContent;\n};\n\n/**\n * Internal dependencies\n */\n\n\n\nregisterBlockType('orbitfox/plugin-cards', {\n\ttitle: __('Plugin Card'),\n\tdescription: __('Plugin Card block lets you display plugins data in your blog posts.'),\n\ticon: 'admin-plugins',\n\tcategory: 'orbitfox',\n\tkeywords: ['plugin', 'card', 'orbitfox'],\n\tattributes: {\n\t\tslug: {\n\t\t\ttype: 'string'\n\t\t},\n\t\tplugin_icon: {\n\t\t\ttype: 'string'\n\t\t},\n\t\tplugin_name: {\n\t\t\ttype: 'string'\n\t\t},\n\t\tplugin_author: {\n\t\t\ttype: 'string'\n\t\t},\n\t\tplugin_rating: {\n\t\t\ttype: 'number'\n\t\t},\n\t\tplugin_description: {\n\t\t\ttype: 'string'\n\t\t},\n\t\tplugin_installs: {\n\t\t\ttype: 'number'\n\t\t},\n\t\tplugin_version: {\n\t\t\ttype: 'string'\n\t\t},\n\t\tplugin_tested: {\n\t\t\ttype: 'string'\n\t\t},\n\t\tplugin_link: {\n\t\t\ttype: 'string'\n\t\t}\n\t},\n\n\tsupports: {\n\t\thtml: false,\n\t\talign: ['left', 'center', 'right']\n\t},\n\n\tedit: compose([withSelect(function (select, props) {\n\t\treturn {\n\t\t\tprops: props\n\t\t};\n\t}), withState({\n\t\tstatus: 0,\n\t\tresults: {}\n\t})])(function (_ref) {\n\t\tvar props = _ref.props,\n\t\t    className = _ref.className,\n\t\t    status = _ref.status,\n\t\t    results = _ref.results,\n\t\t    setState = _ref.setState;\n\n\n\t\tvar changeSlug = function changeSlug(value) {\n\t\t\tprops.setAttributes({ slug: value });\n\t\t};\n\n\t\tvar searchPlugins = function searchPlugins(search) {\n\t\t\tsetState({ status: 1 });\n\t\t\twp.apiFetch({ path: 'obfx-plugin-card/v1/search?search=\\'' + encodeURIComponent(search) }).then(function (payload) {\n\t\t\t\tvar data = payload.data.plugins;\n\t\t\t\tsetState({\n\t\t\t\t\tstatus: 0,\n\t\t\t\t\tresults: data\n\t\t\t\t});\n\t\t\t});\n\t\t};\n\n\t\tvar selectPlugin = function selectPlugin(data) {\n\t\t\tvar icon = void 0;\n\t\t\tif (data.icons['svg']) {\n\t\t\t\ticon = data.icons['svg'];\n\t\t\t}if (data.icons['2x']) {\n\t\t\t\ticon = data.icons['2x'];\n\t\t\t}if (data.icons['1x']) {\n\t\t\t\ticon = data.icons['1x'];\n\t\t\t}if (data.icons['default']) {\n\t\t\t\ticon = data.icons['default'];\n\t\t\t}\n\t\t\tprops.setAttributes({\n\t\t\t\tslug: data.slug,\n\t\t\t\tplugin_icon: icon,\n\t\t\t\tplugin_name: data.name,\n\t\t\t\tplugin_author: data.author,\n\t\t\t\tplugin_rating: data.rating,\n\t\t\t\tplugin_description: data.short_description,\n\t\t\t\tplugin_installs: data.active_installs,\n\t\t\t\tplugin_version: data.version,\n\t\t\t\tplugin_tested: data.tested,\n\t\t\t\tplugin_link: data.download_link\n\t\t\t});\n\t\t\tsetState({\n\t\t\t\tresults: {}\n\t\t\t});\n\t\t};\n\n\t\treturn [props.attributes.plugin_name && wp.element.createElement(\n\t\t\tBlockControls,\n\t\t\t{ key: 'toolbar-controls' },\n\t\t\twp.element.createElement(\n\t\t\t\tToolbar,\n\t\t\t\t{\n\t\t\t\t\tclassName: 'components-toolbar'\n\t\t\t\t},\n\t\t\t\twp.element.createElement(\n\t\t\t\t\tTooltip,\n\t\t\t\t\t{ text: __('Edit Plugin Card') },\n\t\t\t\t\twp.element.createElement(\n\t\t\t\t\t\tButton,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tclassName: 'components-icon-button components-toolbar__control edit-plugin-card',\n\t\t\t\t\t\t\tonClick: function onClick() {\n\t\t\t\t\t\t\t\tprops.setAttributes({\n\t\t\t\t\t\t\t\t\tplugin_icon: '',\n\t\t\t\t\t\t\t\t\tplugin_name: '',\n\t\t\t\t\t\t\t\t\tplugin_author: '',\n\t\t\t\t\t\t\t\t\tplugin_rating: '',\n\t\t\t\t\t\t\t\t\tplugin_description: '',\n\t\t\t\t\t\t\t\t\tplugin_installs: '',\n\t\t\t\t\t\t\t\t\tplugin_version: '',\n\t\t\t\t\t\t\t\t\tplugin_tested: '',\n\t\t\t\t\t\t\t\t\tplugin_link: ''\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\twp.element.createElement(Dashicon, { icon: 'edit' })\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t)\n\t\t), wp.element.createElement(\n\t\t\t'div',\n\t\t\t{ className: '' + className },\n\t\t\tprops.attributes.plugin_name ? wp.element.createElement(\n\t\t\t\t'div',\n\t\t\t\t{ 'class': 'obfx-plugin-card' },\n\t\t\t\twp.element.createElement(\n\t\t\t\t\t'div',\n\t\t\t\t\t{ 'class': 'card-header' },\n\t\t\t\t\twp.element.createElement(\n\t\t\t\t\t\t'div',\n\t\t\t\t\t\t{ 'class': 'card-main' },\n\t\t\t\t\t\twp.element.createElement(\n\t\t\t\t\t\t\t'div',\n\t\t\t\t\t\t\t{ 'class': 'card-logo' },\n\t\t\t\t\t\t\twp.element.createElement('img', { src: props.attributes.plugin_icon, alt: unescapeHTML(props.attributes.plugin_name), title: unescapeHTML(props.attributes.plugin_name) })\n\t\t\t\t\t\t),\n\t\t\t\t\t\twp.element.createElement(\n\t\t\t\t\t\t\t'div',\n\t\t\t\t\t\t\t{ 'class': 'card-info' },\n\t\t\t\t\t\t\twp.element.createElement(\n\t\t\t\t\t\t\t\t'h4',\n\t\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\t\tunescapeHTML(props.attributes.plugin_name)\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\twp.element.createElement('h5', { dangerouslySetInnerHTML: { __html: _.unescape(props.attributes.plugin_author) } })\n\t\t\t\t\t\t),\n\t\t\t\t\t\twp.element.createElement('div', { 'class': 'card-ratings', dangerouslySetInnerHTML: { __html: _.unescape(starRating(props.attributes.plugin_rating)) } })\n\t\t\t\t\t)\n\t\t\t\t),\n\t\t\t\twp.element.createElement(\n\t\t\t\t\t'div',\n\t\t\t\t\t{ 'class': 'card-details' },\n\t\t\t\t\twp.element.createElement(\n\t\t\t\t\t\t'div',\n\t\t\t\t\t\t{ 'class': 'card-description' },\n\t\t\t\t\t\tunescapeHTML(props.attributes.plugin_description)\n\t\t\t\t\t),\n\t\t\t\t\twp.element.createElement(\n\t\t\t\t\t\t'div',\n\t\t\t\t\t\t{ 'class': 'card-stats' },\n\t\t\t\t\t\twp.element.createElement(\n\t\t\t\t\t\t\t'h5',\n\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\t__('Plugin Stats')\n\t\t\t\t\t\t),\n\t\t\t\t\t\twp.element.createElement(\n\t\t\t\t\t\t\t'div',\n\t\t\t\t\t\t\t{ 'class': 'card-stats-list' },\n\t\t\t\t\t\t\twp.element.createElement(\n\t\t\t\t\t\t\t\t'div',\n\t\t\t\t\t\t\t\t{ 'class': 'card-stat' },\n\t\t\t\t\t\t\t\twp.element.createElement(\n\t\t\t\t\t\t\t\t\t'span',\n\t\t\t\t\t\t\t\t\t{ 'class': 'card-text-large' },\n\t\t\t\t\t\t\t\t\tprops.attributes.plugin_installs.toLocaleString(),\n\t\t\t\t\t\t\t\t\t'+'\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t__('active installs')\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\twp.element.createElement(\n\t\t\t\t\t\t\t\t'div',\n\t\t\t\t\t\t\t\t{ 'class': 'card-stat' },\n\t\t\t\t\t\t\t\twp.element.createElement(\n\t\t\t\t\t\t\t\t\t'span',\n\t\t\t\t\t\t\t\t\t{ 'class': 'card-text-large' },\n\t\t\t\t\t\t\t\t\tprops.attributes.plugin_version\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t__('version')\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\twp.element.createElement(\n\t\t\t\t\t\t\t\t'div',\n\t\t\t\t\t\t\t\t{ 'class': 'card-stat' },\n\t\t\t\t\t\t\t\twp.element.createElement(\n\t\t\t\t\t\t\t\t\t'span',\n\t\t\t\t\t\t\t\t\t{ 'class': 'card-text-large' },\n\t\t\t\t\t\t\t\t\tprops.attributes.plugin_tested\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t__('tested up to')\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t),\n\t\t\t\twp.element.createElement(\n\t\t\t\t\t'div',\n\t\t\t\t\t{ 'class': 'card-download' },\n\t\t\t\t\twp.element.createElement(\n\t\t\t\t\t\t'a',\n\t\t\t\t\t\t{ href: props.attributes.plugin_link },\n\t\t\t\t\t\t__('Download')\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t) : wp.element.createElement(\n\t\t\t\tPlaceholder,\n\t\t\t\t{\n\t\t\t\t\ticon: 'admin-plugins',\n\t\t\t\t\tlabel: __('Plugin Card')\n\t\t\t\t},\n\t\t\t\twp.element.createElement(\n\t\t\t\t\t'div',\n\t\t\t\t\t{ className: 'search-plugin-field' },\n\t\t\t\t\twp.element.createElement(Dashicon, { icon: 'search' }),\n\t\t\t\t\tstatus === 1 && wp.element.createElement(Spinner, null),\n\t\t\t\t\twp.element.createElement(TextControl, {\n\t\t\t\t\t\ttype: 'text',\n\t\t\t\t\t\tplaceholder: __('Search for plugin…'),\n\t\t\t\t\t\tvalue: props.attributes.slug,\n\t\t\t\t\t\tonChange: changeSlug,\n\t\t\t\t\t\tonKeyDown: function onKeyDown(event) {\n\t\t\t\t\t\t\tif (event.keyCode === ENTER) {\n\t\t\t\t\t\t\t\tsearchPlugins(event.target.value);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}),\n\t\t\t\t\tresults && wp.element.createElement(\n\t\t\t\t\t\t'div',\n\t\t\t\t\t\t{ className: 'plugin-card-search-results' },\n\t\t\t\t\t\twp.element.createElement(\n\t\t\t\t\t\t\t'div',\n\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\tbabel_runtime_core_js_object_keys__WEBPACK_IMPORTED_MODULE_0___default()(results).map(function (i, j) {\n\t\t\t\t\t\t\t\tvar plugin_data = results[i];\n\t\t\t\t\t\t\t\tvar icon = void 0;\n\t\t\t\t\t\t\t\tif (plugin_data.icons['svg']) {\n\t\t\t\t\t\t\t\t\ticon = plugin_data.icons['svg'];\n\t\t\t\t\t\t\t\t}if (plugin_data.icons['2x']) {\n\t\t\t\t\t\t\t\t\ticon = plugin_data.icons['2x'];\n\t\t\t\t\t\t\t\t}if (plugin_data.icons['1x']) {\n\t\t\t\t\t\t\t\t\ticon = plugin_data.icons['1x'];\n\t\t\t\t\t\t\t\t}if (plugin_data.icons['default']) {\n\t\t\t\t\t\t\t\t\ticon = plugin_data.icons['default'];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn wp.element.createElement(\n\t\t\t\t\t\t\t\t\t'div',\n\t\t\t\t\t\t\t\t\t{ className: 'plugin-card-list-item', key: i, onClick: function onClick(e) {\n\t\t\t\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\t\t\t\tselectPlugin(plugin_data);\n\t\t\t\t\t\t\t\t\t\t} },\n\t\t\t\t\t\t\t\t\twp.element.createElement('img', { src: icon }),\n\t\t\t\t\t\t\t\t\twp.element.createElement('span', { dangerouslySetInnerHTML: { __html: _.unescape(plugin_data.name) } })\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t)\n\t\t)];\n\t}),\n\n\tsave: function save() {\n\t\treturn null;\n\t}\n});\n\n//# sourceURL=webpack:///./blocks/plugin-card/index.js?");

/***/ }),

/***/ "./blocks/plugin-card/style.scss":
/*!***************************************!*\
  !*** ./blocks/plugin-card/style.scss ***!
  \***************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("// removed by extract-text-webpack-plugin\n\n//# sourceURL=webpack:///./blocks/plugin-card/style.scss?");

/***/ }),

/***/ "./blocks/post-grid/Thumbnail.js":
/*!***************************************!*\
  !*** ./blocks/post-grid/Thumbnail.js ***!
  \***************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var babel_runtime_core_js_object_get_prototype_of__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! babel-runtime/core-js/object/get-prototype-of */ \"./node_modules/babel-runtime/core-js/object/get-prototype-of.js\");\n/* harmony import */ var babel_runtime_core_js_object_get_prototype_of__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(babel_runtime_core_js_object_get_prototype_of__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ \"./node_modules/babel-runtime/helpers/classCallCheck.js\");\n/* harmony import */ var babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! babel-runtime/helpers/createClass */ \"./node_modules/babel-runtime/helpers/createClass.js\");\n/* harmony import */ var babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! babel-runtime/helpers/possibleConstructorReturn */ \"./node_modules/babel-runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! babel-runtime/helpers/inherits */ \"./node_modules/babel-runtime/helpers/inherits.js\");\n/* harmony import */ var babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__);\n\n\n\n\n\n/**\n * WordPress Dependencies\n */\nvar Spinner = wp.components.Spinner;\nvar withSelect = wp.data.withSelect;\nvar Component = wp.element.Component;\n\nvar Thumbnail = function (_Component) {\n\tbabel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default()(Thumbnail, _Component);\n\n\tfunction Thumbnail() {\n\t\tbabel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1___default()(this, Thumbnail);\n\n\t\treturn babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3___default()(this, (Thumbnail.__proto__ || babel_runtime_core_js_object_get_prototype_of__WEBPACK_IMPORTED_MODULE_0___default()(Thumbnail)).apply(this, arguments));\n\t}\n\n\tbabel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2___default()(Thumbnail, [{\n\t\tkey: 'render',\n\t\tvalue: function render() {\n\t\t\tvar _props = this.props,\n\t\t\t    alt = _props.alt,\n\t\t\t    id = _props.id,\n\t\t\t    thumbnail = _props.thumbnail,\n\t\t\t    link = _props.link;\n\n\n\t\t\tvar img = thumbnail ? wp.element.createElement('img', { src: thumbnail, alt: alt, 'data-id': id }) : wp.element.createElement(Spinner, null);\n\n\t\t\treturn wp.element.createElement(\n\t\t\t\t'div',\n\t\t\t\t{ className: 'post-thumbnail' },\n\t\t\t\twp.element.createElement(\n\t\t\t\t\t'a',\n\t\t\t\t\t{ href: link },\n\t\t\t\t\timg\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\t}]);\n\n\treturn Thumbnail;\n}(Component);\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (withSelect(function (select, ownProps) {\n\tvar id = ownProps.id;\n\n\tvar image = id ? select('core').getMedia(id) : undefined;\n\tvar size = 'medium';\n\tvar thumbnail = image ? image.media_details.sizes[size].source_url : null;\n\n\treturn image ? {\n\t\tthumbnail: thumbnail,\n\t\talt: image.alt_text\n\t} : {\n\t\talt: null\n\t};\n})(Thumbnail));\n\n//# sourceURL=webpack:///./blocks/post-grid/Thumbnail.js?");

/***/ }),

/***/ "./blocks/post-grid/editor.scss":
/*!**************************************!*\
  !*** ./blocks/post-grid/editor.scss ***!
  \**************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("// removed by extract-text-webpack-plugin\n\n//# sourceURL=webpack:///./blocks/post-grid/editor.scss?");

/***/ }),

/***/ "./blocks/post-grid/index.js":
/*!***********************************!*\
  !*** ./blocks/post-grid/index.js ***!
  \***********************************/
/*! no exports provided */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var babel_runtime_helpers_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! babel-runtime/helpers/extends */ \"./node_modules/babel-runtime/helpers/extends.js\");\n/* harmony import */ var babel_runtime_helpers_extends__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(babel_runtime_helpers_extends__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! classnames */ \"./node_modules/classnames/index.js\");\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _Thumbnail_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Thumbnail.js */ \"./blocks/post-grid/Thumbnail.js\");\n/* harmony import */ var _style_scss__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./style.scss */ \"./blocks/post-grid/style.scss\");\n/* harmony import */ var _style_scss__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_style_scss__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _editor_scss__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./editor.scss */ \"./blocks/post-grid/editor.scss\");\n/* harmony import */ var _editor_scss__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_editor_scss__WEBPACK_IMPORTED_MODULE_4__);\n\n/**\r\n * External dependencies\r\n */\n\n\n\n\n/**\r\n * WordPress dependencies...\r\n */\n\nvar _lodash = lodash,\n    isUndefined = _lodash.isUndefined,\n    pickBy = _lodash.pickBy;\nvar __ = wp.i18n.__;\nvar registerBlockType = wp.blocks.registerBlockType;\nvar _wp$components = wp.components,\n    Button = _wp$components.Button,\n    Dashicon = _wp$components.Dashicon,\n    PanelBody = _wp$components.PanelBody,\n    QueryControls = _wp$components.QueryControls,\n    RangeControl = _wp$components.RangeControl,\n    Spinner = _wp$components.Spinner,\n    TextControl = _wp$components.TextControl,\n    ToggleControl = _wp$components.ToggleControl,\n    Toolbar = _wp$components.Toolbar,\n    Tooltip = _wp$components.Tooltip;\nvar withSelect = wp.data.withSelect;\nvar _wp$editor = wp.editor,\n    BlockControls = _wp$editor.BlockControls,\n    InspectorControls = _wp$editor.InspectorControls;\n\n\nvar unescapeHTML = function unescapeHTML(value) {\n\tvar htmlNode = document.createElement('div');\n\thtmlNode.innerHTML = value;\n\tif (htmlNode.innerText !== undefined) {\n\t\treturn htmlNode.innerText;\n\t}\n\treturn htmlNode.textContent;\n};\n\nvar formatDate = function formatDate(date) {\n\tvar monthNames = [__('January'), __('February'), __('March'), __('April'), __('May'), __('June'), __('July'), __('August'), __('September'), __('October'), __('November'), __('December')];\n\tvar weekNames = [__('Sunday'), __('Monday'), __('Tuesday'), __('Wednesday'), __('Thursday'), __('Friday'), __('Saturday')];\n\tdate = new Date(date);\n\tvar day = date.getDate();\n\tvar monthIndex = date.getMonth();\n\tvar year = date.getFullYear();\n\treturn day + ' ' + monthNames[monthIndex] + ', ' + year;\n};\n\n\n\n\nregisterBlockType('orbitfox/posts-grid', {\n\ttitle: __('Posts Grid'),\n\tdescription: __('Display a list of your most recent posts in a beautiful grid.'),\n\ticon: 'screenoptions',\n\tcategory: 'orbitfox',\n\tkeywords: ['posts', 'grid', 'orbitfox'],\n\tattributes: {\n\t\tgrid: {\n\t\t\ttype: 'boolean',\n\t\t\tdefault: false\n\t\t},\n\t\tcolumns: {\n\t\t\ttype: 'number',\n\t\t\tdefault: 3\n\t\t},\n\t\tcategories: {\n\t\t\ttype: 'string'\n\t\t},\n\t\tpostsToShow: {\n\t\t\ttype: 'number',\n\t\t\tdefault: 5\n\t\t},\n\t\torder: {\n\t\t\ttype: 'string',\n\t\t\tdefault: 'desc'\n\t\t},\n\t\torderBy: {\n\t\t\ttype: 'string',\n\t\t\tdefault: 'date'\n\t\t},\n\t\tdisplayFeaturedImage: {\n\t\t\ttype: 'boolean',\n\t\t\tdefault: true\n\t\t},\n\t\tdisplayCategory: {\n\t\t\ttype: 'boolean',\n\t\t\tdefault: true\n\t\t},\n\t\tdisplayDate: {\n\t\t\ttype: 'boolean',\n\t\t\tdefault: true\n\t\t},\n\t\tdisplayAuthor: {\n\t\t\ttype: 'boolean',\n\t\t\tdefault: true\n\t\t},\n\t\texcerptLength: {\n\t\t\ttype: 'number',\n\t\t\tdefault: 200\n\t\t}\n\t},\n\n\tedit: withSelect(function (select, props) {\n\t\tvar _props$attributes = props.attributes,\n\t\t    categories = _props$attributes.categories,\n\t\t    order = _props$attributes.order,\n\t\t    orderBy = _props$attributes.orderBy,\n\t\t    postsToShow = _props$attributes.postsToShow;\n\n\t\tvar latestPostsQuery = pickBy({\n\t\t\tcategories: categories,\n\t\t\torder: order,\n\t\t\torderby: orderBy,\n\t\t\tper_page: postsToShow\n\t\t}, function (value) {\n\t\t\treturn !isUndefined(value);\n\t\t});\n\t\treturn {\n\t\t\tposts: select('core').getEntityRecords('postType', 'post', latestPostsQuery),\n\t\t\tcategoriesList: select('core').getEntityRecords('taxonomy', 'category', { per_page: 100 }),\n\t\t\tauthors: select('core').getAuthors(),\n\t\t\tprops: props\n\t\t};\n\t})(function (_ref) {\n\t\tvar posts = _ref.posts,\n\t\t    categoriesList = _ref.categoriesList,\n\t\t    authors = _ref.authors,\n\t\t    className = _ref.className,\n\t\t    setAttributes = _ref.setAttributes,\n\t\t    props = _ref.props;\n\n\t\tif (!posts) {\n\t\t\treturn wp.element.createElement(\n\t\t\t\t'p',\n\t\t\t\t{ className: className },\n\t\t\t\twp.element.createElement(Spinner, null),\n\t\t\t\t__('Loading Posts')\n\t\t\t);\n\t\t}\n\t\tif (0 === posts.length) {\n\t\t\treturn wp.element.createElement(\n\t\t\t\t'p',\n\t\t\t\tnull,\n\t\t\t\t__('No Posts')\n\t\t\t);\n\t\t}\n\n\t\tvar _props$attributes2 = props.attributes,\n\t\t    grid = _props$attributes2.grid,\n\t\t    columns = _props$attributes2.columns,\n\t\t    order = _props$attributes2.order,\n\t\t    orderBy = _props$attributes2.orderBy,\n\t\t    categories = _props$attributes2.categories,\n\t\t    postsToShow = _props$attributes2.postsToShow,\n\t\t    displayFeaturedImage = _props$attributes2.displayFeaturedImage,\n\t\t    displayCategory = _props$attributes2.displayCategory,\n\t\t    displayDate = _props$attributes2.displayDate,\n\t\t    displayAuthor = _props$attributes2.displayAuthor,\n\t\t    excerptLength = _props$attributes2.excerptLength;\n\n\n\t\tvar toggleLayout = function toggleLayout() {\n\t\t\tprops.setAttributes({ grid: !grid });\n\t\t};\n\n\t\tvar changeColumns = function changeColumns(value) {\n\t\t\tprops.setAttributes({ columns: value });\n\t\t};\n\n\t\tvar toggleFeaturedImage = function toggleFeaturedImage() {\n\t\t\tprops.setAttributes({ displayFeaturedImage: !displayFeaturedImage });\n\t\t};\n\n\t\tvar toggleDisplayCategory = function toggleDisplayCategory() {\n\t\t\tprops.setAttributes({ displayCategory: !displayCategory });\n\t\t};\n\n\t\tvar toggleDisplayDate = function toggleDisplayDate() {\n\t\t\tprops.setAttributes({ displayDate: !displayDate });\n\t\t};\n\n\t\tvar toggleDisplayAuthor = function toggleDisplayAuthor() {\n\t\t\tprops.setAttributes({ displayAuthor: !displayAuthor });\n\t\t};\n\n\t\tvar onExcerptLength = function onExcerptLength(value) {\n\t\t\tprops.setAttributes({ excerptLength: value });\n\t\t};\n\n\t\treturn [wp.element.createElement(\n\t\t\tBlockControls,\n\t\t\t{ key: 'toolbar-controls' },\n\t\t\twp.element.createElement(\n\t\t\t\tToolbar,\n\t\t\t\t{\n\t\t\t\t\tclassName: 'components-toolbar'\n\t\t\t\t},\n\t\t\t\twp.element.createElement(\n\t\t\t\t\tTooltip,\n\t\t\t\t\t{ text: __('List Layout') },\n\t\t\t\t\twp.element.createElement(\n\t\t\t\t\t\tButton,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tclassName: classnames__WEBPACK_IMPORTED_MODULE_1___default()('components-icon-button', 'components-toolbar__control', { 'is-active': !grid }),\n\t\t\t\t\t\t\tonClick: toggleLayout\n\t\t\t\t\t\t},\n\t\t\t\t\t\twp.element.createElement(Dashicon, { icon: 'list-view' })\n\t\t\t\t\t)\n\t\t\t\t),\n\t\t\t\twp.element.createElement(\n\t\t\t\t\tTooltip,\n\t\t\t\t\t{ text: __('Grid Layout') },\n\t\t\t\t\twp.element.createElement(\n\t\t\t\t\t\tButton,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tclassName: classnames__WEBPACK_IMPORTED_MODULE_1___default()('components-icon-button', 'components-toolbar__control', { 'is-active': grid }),\n\t\t\t\t\t\t\tonClick: toggleLayout\n\t\t\t\t\t\t},\n\t\t\t\t\t\twp.element.createElement(Dashicon, { icon: 'grid-view' })\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t)\n\t\t), wp.element.createElement(\n\t\t\tInspectorControls,\n\t\t\tnull,\n\t\t\twp.element.createElement(\n\t\t\t\tPanelBody,\n\t\t\t\t{\n\t\t\t\t\ttitle: __('Posts Grid Settings')\n\t\t\t\t},\n\t\t\t\tgrid && wp.element.createElement(RangeControl, {\n\t\t\t\t\tlabel: __('Columns'),\n\t\t\t\t\tvalue: columns,\n\t\t\t\t\tonChange: changeColumns,\n\t\t\t\t\tmin: 1,\n\t\t\t\t\tmax: 5\n\t\t\t\t}),\n\t\t\t\twp.element.createElement(QueryControls, babel_runtime_helpers_extends__WEBPACK_IMPORTED_MODULE_0___default()({ order: order, orderBy: orderBy }, {\n\t\t\t\t\tnumberOfItems: postsToShow,\n\t\t\t\t\tcategoriesList: categoriesList,\n\t\t\t\t\tselectedCategoryId: categories,\n\t\t\t\t\tonOrderChange: function onOrderChange(value) {\n\t\t\t\t\t\treturn setAttributes({ order: value });\n\t\t\t\t\t},\n\t\t\t\t\tonOrderByChange: function onOrderByChange(value) {\n\t\t\t\t\t\treturn setAttributes({ orderBy: value });\n\t\t\t\t\t},\n\t\t\t\t\tonCategoryChange: function onCategoryChange(value) {\n\t\t\t\t\t\treturn setAttributes({ categories: '' !== value ? value : undefined });\n\t\t\t\t\t},\n\t\t\t\t\tonNumberOfItemsChange: function onNumberOfItemsChange(value) {\n\t\t\t\t\t\treturn setAttributes({ postsToShow: value });\n\t\t\t\t\t}\n\t\t\t\t})),\n\t\t\t\twp.element.createElement(ToggleControl, {\n\t\t\t\t\tlabel: __('Display Featured Image?'),\n\t\t\t\t\tchecked: displayFeaturedImage,\n\t\t\t\t\tonChange: toggleFeaturedImage\n\t\t\t\t}),\n\t\t\t\twp.element.createElement(ToggleControl, {\n\t\t\t\t\tlabel: __('Display Post Category?'),\n\t\t\t\t\tchecked: displayCategory,\n\t\t\t\t\tonChange: toggleDisplayCategory\n\t\t\t\t}),\n\t\t\t\twp.element.createElement(ToggleControl, {\n\t\t\t\t\tlabel: __('Display Post Date?'),\n\t\t\t\t\tchecked: displayDate,\n\t\t\t\t\tonChange: toggleDisplayDate\n\t\t\t\t}),\n\t\t\t\twp.element.createElement(ToggleControl, {\n\t\t\t\t\tlabel: __('Display Post Author?'),\n\t\t\t\t\tchecked: displayAuthor,\n\t\t\t\t\tonChange: toggleDisplayAuthor\n\t\t\t\t}),\n\t\t\t\twp.element.createElement(TextControl, {\n\t\t\t\t\tlabel: __('Description Character Limit'),\n\t\t\t\t\ttype: 'number',\n\t\t\t\t\tvalue: excerptLength,\n\t\t\t\t\tonChange: onExcerptLength\n\t\t\t\t})\n\t\t\t)\n\t\t), wp.element.createElement(\n\t\t\t'div',\n\t\t\t{ className: classnames__WEBPACK_IMPORTED_MODULE_1___default()(className, { 'is-grid': grid }) },\n\t\t\tposts.map(function (post) {\n\t\t\t\tvar category = void 0,\n\t\t\t\t    author = void 0;\n\t\t\t\tif (categoriesList) {\n\t\t\t\t\tcategory = categoriesList.find(function (item) {\n\t\t\t\t\t\treturn item.id === post.categories[0];\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif (authors) {\n\t\t\t\t\tauthor = authors.find(function (item) {\n\t\t\t\t\t\treturn item.id === post.author;\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn wp.element.createElement(\n\t\t\t\t\t'div',\n\t\t\t\t\t{ className: 'grid-post grid-' + columns },\n\t\t\t\t\twp.element.createElement(\n\t\t\t\t\t\t'div',\n\t\t\t\t\t\t{ className: 'grid-post-row' },\n\t\t\t\t\t\tpost.featured_media !== 0 && displayFeaturedImage && wp.element.createElement(\n\t\t\t\t\t\t\t'div',\n\t\t\t\t\t\t\t{ className: 'grid-image-area' },\n\t\t\t\t\t\t\twp.element.createElement(_Thumbnail_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"], { id: post.featured_media, link: post.link })\n\t\t\t\t\t\t),\n\t\t\t\t\t\twp.element.createElement(\n\t\t\t\t\t\t\t'div',\n\t\t\t\t\t\t\t{ className: 'grid-content-area ' + (!displayFeaturedImage && 'full') },\n\t\t\t\t\t\t\tdisplayCategory && categoriesList && wp.element.createElement(\n\t\t\t\t\t\t\t\t'h6',\n\t\t\t\t\t\t\t\t{ className: 'grid-content-category' },\n\t\t\t\t\t\t\t\twp.element.createElement(\n\t\t\t\t\t\t\t\t\t'a',\n\t\t\t\t\t\t\t\t\t{ href: category.link },\n\t\t\t\t\t\t\t\t\tcategory.name\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\twp.element.createElement(\n\t\t\t\t\t\t\t\t'h3',\n\t\t\t\t\t\t\t\t{ className: 'grid-content-title' },\n\t\t\t\t\t\t\t\twp.element.createElement(\n\t\t\t\t\t\t\t\t\t'a',\n\t\t\t\t\t\t\t\t\t{ href: post.link },\n\t\t\t\t\t\t\t\t\tpost.title.rendered\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t(displayDate || displayAuthor) && wp.element.createElement(\n\t\t\t\t\t\t\t\t'p',\n\t\t\t\t\t\t\t\t{ className: 'grid-content-meta' },\n\t\t\t\t\t\t\t\tdisplayDate && [__('on '), wp.element.createElement(\n\t\t\t\t\t\t\t\t\t'time',\n\t\t\t\t\t\t\t\t\t{ datetime: post.date },\n\t\t\t\t\t\t\t\t\tformatDate(post.date)\n\t\t\t\t\t\t\t\t), ' '],\n\t\t\t\t\t\t\t\tdisplayAuthor && authors && [__('by '), wp.element.createElement(\n\t\t\t\t\t\t\t\t\t'a',\n\t\t\t\t\t\t\t\t\t{ href: author.link },\n\t\t\t\t\t\t\t\t\tauthor.name\n\t\t\t\t\t\t\t\t)]\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\texcerptLength > 0 && wp.element.createElement(\n\t\t\t\t\t\t\t\t'p',\n\t\t\t\t\t\t\t\t{ className: 'grid-content-excerpt' },\n\t\t\t\t\t\t\t\tunescapeHTML(post.excerpt.rendered).substring(0, excerptLength) + '…'\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t})\n\t\t)];\n\t}),\n\n\tsave: function save() {\n\t\treturn null;\n\t}\n});\n\n//# sourceURL=webpack:///./blocks/post-grid/index.js?");

/***/ }),

/***/ "./blocks/post-grid/style.scss":
/*!*************************************!*\
  !*** ./blocks/post-grid/style.scss ***!
  \*************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("// removed by extract-text-webpack-plugin\n\n//# sourceURL=webpack:///./blocks/post-grid/style.scss?");

/***/ }),

/***/ "./blocks/pricing-table/editor.scss":
/*!******************************************!*\
  !*** ./blocks/pricing-table/editor.scss ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("// removed by extract-text-webpack-plugin\n\n//# sourceURL=webpack:///./blocks/pricing-table/editor.scss?");

/***/ }),

/***/ "./blocks/pricing-table/index.js":
/*!***************************************!*\
  !*** ./blocks/pricing-table/index.js ***!
  \***************************************/
/*! no exports provided */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _style_scss__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./style.scss */ \"./blocks/pricing-table/style.scss\");\n/* harmony import */ var _style_scss__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_style_scss__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _editor_scss__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./editor.scss */ \"./blocks/pricing-table/editor.scss\");\n/* harmony import */ var _editor_scss__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_editor_scss__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _pricing_table__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./pricing-table */ \"./blocks/pricing-table/pricing-table.js\");\n/* harmony import */ var _pricing_block__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./pricing-block */ \"./blocks/pricing-table/pricing-block.js\");\n/**\r\n * Pricing Table Block\r\n */\n\n\n\n\n\n//# sourceURL=webpack:///./blocks/pricing-table/index.js?");

/***/ }),

/***/ "./blocks/pricing-table/pricing-block.js":
/*!***********************************************!*\
  !*** ./blocks/pricing-table/pricing-block.js ***!
  \***********************************************/
/*! no exports provided */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! classnames */ \"./node_modules/classnames/index.js\");\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_0__);\n/**\n * WordPress dependencies...\n */\n\n\n\nvar __ = wp.i18n.__;\nvar registerBlockType = wp.blocks.registerBlockType;\nvar _wp$editor = wp.editor,\n    InnerBlocks = _wp$editor.InnerBlocks,\n    BlockControls = _wp$editor.BlockControls,\n    InspectorControls = _wp$editor.InspectorControls,\n    PanelColorSettings = _wp$editor.PanelColorSettings;\nvar _wp$components = wp.components,\n    Dashicon = _wp$components.Dashicon,\n    Toolbar = _wp$components.Toolbar,\n    Button = _wp$components.Button,\n    Tooltip = _wp$components.Tooltip;\n\n/**\n * Internal dependencies\n */\n\nregisterBlockType('orbitfox/pricing-block', {\n\ttitle: __('Pricing Block'),\n\tdescription: __('Pricing tables are a critical part in showcasing your services, prices and overall offerings.'),\n\tparent: ['orbitfox/pricing-table'],\n\ticon: 'slides',\n\tcategory: 'orbitfox',\n\tkeywords: ['pricing', 'table', 'orbitfox'],\n\tattributes: {\n\t\tfeatured: {\n\t\t\ttype: 'boolean',\n\t\t\tdefault: false\n\t\t},\n\t\tbackgroundColor: {\n\t\t\ttype: 'string',\n\t\t\tdefault: '#ffffff'\n\t\t}\n\t},\n\n\tedit: function edit(props) {\n\t\tvar toggleFeatured = function toggleFeatured() {\n\t\t\tprops.setAttributes({ featured: !props.attributes.featured });\n\t\t};\n\t\tvar setBackgroundColor = function setBackgroundColor(value) {\n\t\t\tprops.setAttributes({ backgroundColor: value });\n\t\t};\n\t\tvar TEMPLATE = [['core/heading', {\n\t\t\tcontent: __('Basic'),\n\t\t\tclassName: 'pricing-title',\n\t\t\talign: 'center',\n\t\t\tlevel: 5\n\t\t}], ['core/paragraph', {\n\t\t\tcontent: __('$9.99'),\n\t\t\talign: 'center',\n\t\t\tcustomFontSize: 36\n\t\t}], ['core/paragraph', {\n\t\t\tcontent: __('Per Month'),\n\t\t\talign: 'center',\n\t\t\tcustomFontSize: 12\n\t\t}], ['core/separator', {}], ['core/paragraph', {\n\t\t\tcontent: __('First Feature'),\n\t\t\talign: 'center',\n\t\t\tfontSize: 'small'\n\t\t}], ['core/separator', {}], ['core/paragraph', {\n\t\t\tcontent: __('Second Feature'),\n\t\t\talign: 'center',\n\t\t\tfontSize: 'small'\n\t\t}], ['core/separator', {}], ['core/paragraph', {\n\t\t\tcontent: __('Last Feature'),\n\t\t\talign: 'center',\n\t\t\tfontSize: 'small'\n\t\t}], ['core/separator', {}], ['core/button', {\n\t\t\ttext: __('Buy Now'),\n\t\t\tclassName: 'pricing-button',\n\t\t\talign: 'center'\n\t\t}]];\n\n\t\treturn [wp.element.createElement(\n\t\t\tBlockControls,\n\t\t\t{ key: 'toolbar-controls' },\n\t\t\twp.element.createElement(\n\t\t\t\tToolbar,\n\t\t\t\t{\n\t\t\t\t\tclassName: 'components-toolbar'\n\t\t\t\t},\n\t\t\t\twp.element.createElement(\n\t\t\t\t\tTooltip,\n\t\t\t\t\t{ text: __('Feature Table') },\n\t\t\t\t\twp.element.createElement(\n\t\t\t\t\t\tButton,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tclassName: classnames__WEBPACK_IMPORTED_MODULE_0___default()('components-icon-button', 'components-toolbar__control', { 'is-active': props.attributes.featured }),\n\t\t\t\t\t\t\tonClick: toggleFeatured\n\t\t\t\t\t\t},\n\t\t\t\t\t\twp.element.createElement(Dashicon, { icon: 'star-empty' })\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t)\n\t\t), wp.element.createElement(\n\t\t\tInspectorControls,\n\t\t\tnull,\n\t\t\twp.element.createElement(PanelColorSettings, {\n\t\t\t\ttitle: __('Color Settings'),\n\t\t\t\tinitialOpen: true,\n\t\t\t\tcolorSettings: [{\n\t\t\t\t\tvalue: props.attributes.backgroundColor,\n\t\t\t\t\tonChange: setBackgroundColor,\n\t\t\t\t\tlabel: __('Background Color')\n\t\t\t\t}]\n\t\t\t})\n\t\t), wp.element.createElement(\n\t\t\t'div',\n\t\t\t{\n\t\t\t\tclassName: classnames__WEBPACK_IMPORTED_MODULE_0___default()('wp-block-column', { 'raised': props.attributes.featured }),\n\t\t\t\tstyle: {\n\t\t\t\t\tbackgroundColor: props.attributes.backgroundColor\n\t\t\t\t}\n\t\t\t},\n\t\t\twp.element.createElement(InnerBlocks, {\n\t\t\t\ttemplate: TEMPLATE\n\t\t\t})\n\t\t)];\n\t},\n\n\tsave: function save(props) {\n\t\treturn wp.element.createElement(\n\t\t\t'div',\n\t\t\t{\n\t\t\t\tclassName: classnames__WEBPACK_IMPORTED_MODULE_0___default()('wp-block-column', { 'raised': props.attributes.featured }),\n\t\t\t\tstyle: {\n\t\t\t\t\tbackgroundColor: props.attributes.backgroundColor\n\t\t\t\t}\n\t\t\t},\n\t\t\twp.element.createElement(InnerBlocks.Content, null)\n\t\t);\n\t}\n});\n\n//# sourceURL=webpack:///./blocks/pricing-table/pricing-block.js?");

/***/ }),

/***/ "./blocks/pricing-table/pricing-table.js":
/*!***********************************************!*\
  !*** ./blocks/pricing-table/pricing-table.js ***!
  \***********************************************/
/*! no exports provided */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! classnames */ \"./node_modules/classnames/index.js\");\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_0__);\n/**\n * External dependencies\n */\n\n\n/**\n * WordPress dependencies...\n */\n\nvar __ = wp.i18n.__;\nvar registerBlockType = wp.blocks.registerBlockType;\nvar _wp$editor = wp.editor,\n    ColorPalette = _wp$editor.ColorPalette,\n    InnerBlocks = _wp$editor.InnerBlocks,\n    InspectorControls = _wp$editor.InspectorControls,\n    MediaPlaceholder = _wp$editor.MediaPlaceholder;\nvar _wp$components = wp.components,\n    Button = _wp$components.Button,\n    ToggleControl = _wp$components.ToggleControl,\n    SelectControl = _wp$components.SelectControl,\n    PanelBody = _wp$components.PanelBody;\nvar Fragment = wp.element.Fragment;\n\n\nregisterBlockType('orbitfox/pricing-table', {\n\ttitle: __('Pricing Table'),\n\tdescription: __('Pricing tables are a critical part in showcasing your services, prices and overall offerings.'),\n\ticon: 'slides',\n\tcategory: 'orbitfox',\n\tkeywords: ['pricing', 'table', 'orbitfox'],\n\tattributes: {\n\t\tbackgroundType: {\n\t\t\ttype: 'string',\n\t\t\tdefault: 'color'\n\t\t},\n\t\tbackgroundColor: {\n\t\t\ttype: 'string',\n\t\t\tdefault: '#ffffff'\n\t\t},\n\t\tbackgroundImageID: {\n\t\t\ttype: 'string'\n\t\t},\n\t\tbackgroundImageURL: {\n\t\t\ttype: 'string'\n\t\t},\n\t\tbackgroundDimmed: {\n\t\t\ttype: 'boolean',\n\t\t\tdefault: true\n\t\t},\n\t\tbackgroundParallax: {\n\t\t\ttype: 'boolean',\n\t\t\tdefault: false\n\t\t}\n\t},\n\n\tsupports: {\n\t\talign: ['wide', 'full']\n\t},\n\n\tedit: function edit(props) {\n\t\tvar ALLOWED_BLOCKS = ['orbitfox/pricing-block'];\n\t\tvar ALLOWED_MEDIA_TYPES = ['image'];\n\t\tvar TEMPLATE = [['orbitfox/pricing-block'], ['orbitfox/pricing-block'], ['orbitfox/pricing-block']];\n\t\tvar changeType = function changeType(value) {\n\t\t\tprops.setAttributes({ backgroundType: value });\n\t\t};\n\t\tvar changeColor = function changeColor(value) {\n\t\t\tprops.setAttributes({ backgroundColor: value });\n\t\t};\n\t\tvar changeBackground = function changeBackground(value) {\n\t\t\tprops.setAttributes({\n\t\t\t\tbackgroundImageID: value.id,\n\t\t\t\tbackgroundImageURL: value.url\n\t\t\t});\n\t\t};\n\t\tvar removeBackground = function removeBackground() {\n\t\t\tprops.setAttributes({\n\t\t\t\tbackgroundImageID: '',\n\t\t\t\tbackgroundImageURL: ''\n\t\t\t});\n\t\t};\n\t\tvar toggleDimming = function toggleDimming() {\n\t\t\tprops.setAttributes({ backgroundDimmed: !props.attributes.backgroundDimmed });\n\t\t};\n\t\tvar toggleParallax = function toggleParallax() {\n\t\t\tprops.setAttributes({ backgroundParallax: !props.attributes.backgroundParallax });\n\t\t};\n\t\tvar style = {\n\t\t\tbackground: props.attributes.backgroundType === 'color' ? props.attributes.backgroundColor : 'url(\\' ' + props.attributes.backgroundImageURL + ' \\')'\n\t\t};\n\t\treturn [wp.element.createElement(\n\t\t\tInspectorControls,\n\t\t\tnull,\n\t\t\twp.element.createElement(\n\t\t\t\tPanelBody,\n\t\t\t\t{\n\t\t\t\t\ttitle: __('Background')\n\t\t\t\t},\n\t\t\t\twp.element.createElement(SelectControl, {\n\t\t\t\t\tlabel: __('Background Type'),\n\t\t\t\t\tvalue: props.attributes.backgroundType,\n\t\t\t\t\toptions: [{ label: 'Color', value: 'color' }, { label: 'Image', value: 'image' }],\n\t\t\t\t\tonChange: changeType\n\t\t\t\t}),\n\t\t\t\tprops.attributes.backgroundType === 'color' ? wp.element.createElement(ColorPalette, {\n\t\t\t\t\tlabel: __('Background Color'),\n\t\t\t\t\tvalue: props.attributes.backgroundColor,\n\t\t\t\t\tonChange: changeColor\n\t\t\t\t}) : props.attributes.backgroundImageURL ? wp.element.createElement(\n\t\t\t\t\tFragment,\n\t\t\t\t\tnull,\n\t\t\t\t\twp.element.createElement(ToggleControl, {\n\t\t\t\t\t\tlabel: __('Dimmed Background'),\n\t\t\t\t\t\tchecked: props.attributes.backgroundDimmed,\n\t\t\t\t\t\tonChange: toggleDimming\n\t\t\t\t\t}),\n\t\t\t\t\twp.element.createElement(ToggleControl, {\n\t\t\t\t\t\tlabel: __('Parallax Background'),\n\t\t\t\t\t\tchecked: props.attributes.backgroundParallax,\n\t\t\t\t\t\tonChange: toggleParallax\n\t\t\t\t\t}),\n\t\t\t\t\twp.element.createElement('img', {\n\t\t\t\t\t\tsrc: props.attributes.backgroundImageURL\n\t\t\t\t\t}),\n\t\t\t\t\twp.element.createElement(\n\t\t\t\t\t\tButton,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tisLarge: true,\n\t\t\t\t\t\t\tonClick: removeBackground,\n\t\t\t\t\t\t\tstyle: { marginTop: '10px' }\n\t\t\t\t\t\t},\n\t\t\t\t\t\t__('Change or Remove Image')\n\t\t\t\t\t)\n\t\t\t\t) : wp.element.createElement(MediaPlaceholder, {\n\t\t\t\t\ticon: 'format-image',\n\t\t\t\t\tlabels: {\n\t\t\t\t\t\ttitle: __('Background Image'),\n\t\t\t\t\t\tname: __('an image')\n\t\t\t\t\t},\n\t\t\t\t\tvalue: props.attributes.backgroundImageID,\n\t\t\t\t\tonSelect: changeBackground,\n\t\t\t\t\taccept: 'image/*',\n\t\t\t\t\tallowedTypes: ALLOWED_MEDIA_TYPES\n\t\t\t\t})\n\t\t\t)\n\t\t), wp.element.createElement(\n\t\t\t'div',\n\t\t\t{\n\t\t\t\tclassName: classnames__WEBPACK_IMPORTED_MODULE_0___default()(props.className, { 'is-dim': props.attributes.backgroundType === 'image' && props.attributes.backgroundDimmed }, { 'is-parallax': props.attributes.backgroundType === 'image' && props.attributes.backgroundParallax }),\n\t\t\t\tstyle: style\n\t\t\t},\n\t\t\twp.element.createElement(InnerBlocks, {\n\t\t\t\tallowedBlocks: ALLOWED_BLOCKS,\n\t\t\t\ttemplate: TEMPLATE\n\t\t\t})\n\t\t)];\n\t},\n\n\tsave: function save(props) {\n\t\tvar style = {\n\t\t\tbackground: props.attributes.backgroundType === 'color' ? props.attributes.backgroundColor : 'url(\\' ' + props.attributes.backgroundImageURL + ' \\')'\n\t\t};\n\t\treturn wp.element.createElement(\n\t\t\t'div',\n\t\t\t{\n\t\t\t\tclassName: classnames__WEBPACK_IMPORTED_MODULE_0___default()('wp-block-orbitfox-pricing-table', { 'is-dim': props.attributes.backgroundType === 'image' && props.attributes.backgroundDimmed }, { 'is-parallax': props.attributes.backgroundType === 'image' && props.attributes.backgroundParallax }),\n\t\t\t\tstyle: style\n\t\t\t},\n\t\t\twp.element.createElement(InnerBlocks.Content, null)\n\t\t);\n\t}\n});\n\n//# sourceURL=webpack:///./blocks/pricing-table/pricing-table.js?");

/***/ }),

/***/ "./blocks/pricing-table/style.scss":
/*!*****************************************!*\
  !*** ./blocks/pricing-table/style.scss ***!
  \*****************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("// removed by extract-text-webpack-plugin\n\n//# sourceURL=webpack:///./blocks/pricing-table/style.scss?");

/***/ }),

/***/ "./blocks/services/editor.scss":
/*!*************************************!*\
  !*** ./blocks/services/editor.scss ***!
  \*************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("// removed by extract-text-webpack-plugin\n\n//# sourceURL=webpack:///./blocks/services/editor.scss?");

/***/ }),

/***/ "./blocks/services/index.js":
/*!**********************************!*\
  !*** ./blocks/services/index.js ***!
  \**********************************/
/*! no exports provided */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _style_scss__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./style.scss */ \"./blocks/services/style.scss\");\n/* harmony import */ var _style_scss__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_style_scss__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _editor_scss__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./editor.scss */ \"./blocks/services/editor.scss\");\n/* harmony import */ var _editor_scss__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_editor_scss__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _services_block__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./services-block */ \"./blocks/services/services-block.js\");\n/* harmony import */ var _service_block__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./service-block */ \"./blocks/services/service-block.js\");\n/* harmony import */ var _service_block__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_service_block__WEBPACK_IMPORTED_MODULE_3__);\n/**\r\n * Services Block\r\n */\n\n\n\n\n\n//# sourceURL=webpack:///./blocks/services/index.js?");

/***/ }),

/***/ "./blocks/services/service-block.js":
/*!******************************************!*\
  !*** ./blocks/services/service-block.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("/**\n * WordPress dependencies...\n */\nvar __ = wp.i18n.__;\nvar registerBlockType = wp.blocks.registerBlockType;\nvar _wp$editor = wp.editor,\n    InnerBlocks = _wp$editor.InnerBlocks,\n    InspectorControls = _wp$editor.InspectorControls,\n    PanelColorSettings = _wp$editor.PanelColorSettings;\n\n\nregisterBlockType('orbitfox/service-block', {\n\ttitle: __('Service Block'),\n\tdescription: __('Use this Services table to showcase services your website offers.'),\n\tparent: ['orbitfox/services'],\n\ticon: 'slides',\n\tcategory: 'orbitfox',\n\tkeywords: ['pricing', 'table', 'orbitfox'],\n\tattributes: {\n\t\tbackgroundColor: {\n\t\t\ttype: 'string',\n\t\t\tdefault: '#ffffff'\n\t\t}\n\t},\n\n\tedit: function edit(props) {\n\t\tvar setBackgroundColor = function setBackgroundColor(value) {\n\t\t\tprops.setAttributes({ backgroundColor: value });\n\t\t};\n\t\tvar TEMPLATE = [['orbitfox/font-awesome-icons', {\n\t\t\tfontSize: '62',\n\t\t\tprefix: 'fab',\n\t\t\ticon: 'angellist'\n\t\t}], ['core/heading', {\n\t\t\tcontent: __('Panel'),\n\t\t\tclassName: 'service-title',\n\t\t\talign: 'center',\n\t\t\tlevel: 4\n\t\t}], ['core/paragraph', {\n\t\t\tcontent: __('Small description, but a pretty long one.'),\n\t\t\tclassName: 'service-content',\n\t\t\talign: 'center'\n\t\t}], ['core/button', {\n\t\t\ttext: __('Learn More'),\n\t\t\tclassName: 'service-button',\n\t\t\talign: 'center'\n\t\t}]];\n\n\t\treturn [wp.element.createElement(\n\t\t\tInspectorControls,\n\t\t\tnull,\n\t\t\twp.element.createElement(PanelColorSettings, {\n\t\t\t\ttitle: __('Color Settings'),\n\t\t\t\tinitialOpen: true,\n\t\t\t\tcolorSettings: [{\n\t\t\t\t\tvalue: props.attributes.backgroundColor,\n\t\t\t\t\tonChange: setBackgroundColor,\n\t\t\t\t\tlabel: __('Background Color')\n\t\t\t\t}]\n\t\t\t})\n\t\t), wp.element.createElement(\n\t\t\t'div',\n\t\t\t{\n\t\t\t\tclassName: 'wp-block-column',\n\t\t\t\tstyle: {\n\t\t\t\t\tbackgroundColor: props.attributes.backgroundColor\n\t\t\t\t}\n\t\t\t},\n\t\t\twp.element.createElement(InnerBlocks, {\n\t\t\t\ttemplate: TEMPLATE\n\t\t\t})\n\t\t)];\n\t},\n\n\tsave: function save(props) {\n\t\treturn wp.element.createElement(\n\t\t\t'div',\n\t\t\t{\n\t\t\t\tclassName: 'wp-block-column',\n\t\t\t\tstyle: {\n\t\t\t\t\tbackgroundColor: props.attributes.backgroundColor\n\t\t\t\t}\n\t\t\t},\n\t\t\twp.element.createElement(InnerBlocks.Content, null)\n\t\t);\n\t}\n});\n\n//# sourceURL=webpack:///./blocks/services/service-block.js?");

/***/ }),

/***/ "./blocks/services/services-block.js":
/*!*******************************************!*\
  !*** ./blocks/services/services-block.js ***!
  \*******************************************/
/*! no exports provided */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! classnames */ \"./node_modules/classnames/index.js\");\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_0__);\n/**\n * External dependencies\n */\n\n\n/**\n * WordPress dependencies...\n */\n\nvar __ = wp.i18n.__;\nvar registerBlockType = wp.blocks.registerBlockType;\nvar _wp$editor = wp.editor,\n    ColorPalette = _wp$editor.ColorPalette,\n    InnerBlocks = _wp$editor.InnerBlocks,\n    InspectorControls = _wp$editor.InspectorControls,\n    MediaPlaceholder = _wp$editor.MediaPlaceholder;\nvar _wp$components = wp.components,\n    Button = _wp$components.Button,\n    ToggleControl = _wp$components.ToggleControl,\n    SelectControl = _wp$components.SelectControl,\n    PanelBody = _wp$components.PanelBody;\nvar Fragment = wp.element.Fragment;\n\n\nregisterBlockType('orbitfox/services', {\n\ttitle: __('Our Services'),\n\tdescription: __('Use this Services table to showcase services your website offers.'),\n\ticon: 'columns',\n\tcategory: 'orbitfox',\n\tkeywords: ['services', 'features', 'orbitfox'],\n\tattributes: {\n\t\tbackgroundType: {\n\t\t\ttype: 'string',\n\t\t\tdefault: 'color'\n\t\t},\n\t\tbackgroundColor: {\n\t\t\ttype: 'string',\n\t\t\tdefault: '#ffffff'\n\t\t},\n\t\tbackgroundImageID: {\n\t\t\ttype: 'string'\n\t\t},\n\t\tbackgroundImageURL: {\n\t\t\ttype: 'string'\n\t\t},\n\t\tbackgroundDimmed: {\n\t\t\ttype: 'boolean',\n\t\t\tdefault: true\n\t\t},\n\t\tbackgroundParallax: {\n\t\t\ttype: 'boolean',\n\t\t\tdefault: false\n\t\t}\n\t},\n\n\tsupports: {\n\t\talign: ['wide', 'full']\n\t},\n\n\tedit: function edit(props) {\n\t\tvar ALLOWED_BLOCKS = ['orbitfox/service-block'];\n\t\tvar ALLOWED_MEDIA_TYPES = ['image'];\n\t\tvar TEMPLATE = [['orbitfox/service-block'], ['orbitfox/service-block'], ['orbitfox/service-block']];\n\t\tvar changeType = function changeType(value) {\n\t\t\tprops.setAttributes({ backgroundType: value });\n\t\t};\n\t\tvar changeColor = function changeColor(value) {\n\t\t\tprops.setAttributes({ backgroundColor: value });\n\t\t};\n\t\tvar changeBackground = function changeBackground(value) {\n\t\t\tprops.setAttributes({\n\t\t\t\tbackgroundImageID: value.id,\n\t\t\t\tbackgroundImageURL: value.url\n\t\t\t});\n\t\t};\n\t\tvar removeBackground = function removeBackground() {\n\t\t\tprops.setAttributes({\n\t\t\t\tbackgroundImageID: '',\n\t\t\t\tbackgroundImageURL: ''\n\t\t\t});\n\t\t};\n\t\tvar toggleDimming = function toggleDimming() {\n\t\t\tprops.setAttributes({ backgroundDimmed: !props.attributes.backgroundDimmed });\n\t\t};\n\t\tvar toggleParallax = function toggleParallax() {\n\t\t\tprops.setAttributes({ backgroundParallax: !props.attributes.backgroundParallax });\n\t\t};\n\t\tvar style = {\n\t\t\tbackground: props.attributes.backgroundType === 'color' ? props.attributes.backgroundColor : 'url(\\' ' + props.attributes.backgroundImageURL + ' \\')'\n\t\t};\n\t\treturn [wp.element.createElement(\n\t\t\tInspectorControls,\n\t\t\tnull,\n\t\t\twp.element.createElement(\n\t\t\t\tPanelBody,\n\t\t\t\t{\n\t\t\t\t\ttitle: __('Background')\n\t\t\t\t},\n\t\t\t\twp.element.createElement(SelectControl, {\n\t\t\t\t\tlabel: __('Background Type'),\n\t\t\t\t\tvalue: props.attributes.backgroundType,\n\t\t\t\t\toptions: [{ label: 'Color', value: 'color' }, { label: 'Image', value: 'image' }],\n\t\t\t\t\tonChange: changeType\n\t\t\t\t}),\n\t\t\t\tprops.attributes.backgroundType === 'color' ? wp.element.createElement(ColorPalette, {\n\t\t\t\t\tlabel: __('Background Color'),\n\t\t\t\t\tvalue: props.attributes.backgroundColor,\n\t\t\t\t\tonChange: changeColor\n\t\t\t\t}) : props.attributes.backgroundImageURL ? wp.element.createElement(\n\t\t\t\t\tFragment,\n\t\t\t\t\tnull,\n\t\t\t\t\twp.element.createElement(ToggleControl, {\n\t\t\t\t\t\tlabel: __('Dimmed Background'),\n\t\t\t\t\t\tchecked: props.attributes.backgroundDimmed,\n\t\t\t\t\t\tonChange: toggleDimming\n\t\t\t\t\t}),\n\t\t\t\t\twp.element.createElement(ToggleControl, {\n\t\t\t\t\t\tlabel: __('Parallax Background'),\n\t\t\t\t\t\tchecked: props.attributes.backgroundParallax,\n\t\t\t\t\t\tonChange: toggleParallax\n\t\t\t\t\t}),\n\t\t\t\t\twp.element.createElement('img', {\n\t\t\t\t\t\tsrc: props.attributes.backgroundImageURL\n\t\t\t\t\t}),\n\t\t\t\t\twp.element.createElement(\n\t\t\t\t\t\tButton,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tisLarge: true,\n\t\t\t\t\t\t\tonClick: removeBackground,\n\t\t\t\t\t\t\tstyle: { marginTop: '10px' }\n\t\t\t\t\t\t},\n\t\t\t\t\t\t__('Change or Remove Image')\n\t\t\t\t\t)\n\t\t\t\t) : wp.element.createElement(MediaPlaceholder, {\n\t\t\t\t\ticon: 'format-image',\n\t\t\t\t\tlabels: {\n\t\t\t\t\t\ttitle: __('Background Image'),\n\t\t\t\t\t\tname: __('an image')\n\t\t\t\t\t},\n\t\t\t\t\tvalue: props.attributes.backgroundImageID,\n\t\t\t\t\tonSelect: changeBackground,\n\t\t\t\t\taccept: 'image/*',\n\t\t\t\t\tallowedTypes: ALLOWED_MEDIA_TYPES\n\t\t\t\t})\n\t\t\t)\n\t\t), wp.element.createElement(\n\t\t\t'div',\n\t\t\t{\n\t\t\t\tclassName: classnames__WEBPACK_IMPORTED_MODULE_0___default()(props.className, { 'is-dim': props.attributes.backgroundType === 'image' && props.attributes.backgroundDimmed }, { 'is-parallax': props.attributes.backgroundType === 'image' && props.attributes.backgroundParallax }),\n\t\t\t\tstyle: style\n\t\t\t},\n\t\t\twp.element.createElement(InnerBlocks, {\n\t\t\t\tallowedBlocks: ALLOWED_BLOCKS,\n\t\t\t\ttemplate: TEMPLATE\n\t\t\t})\n\t\t)];\n\t},\n\n\tsave: function save(props) {\n\t\tvar style = {\n\t\t\tbackground: props.attributes.backgroundType === 'color' ? props.attributes.backgroundColor : 'url(\\' ' + props.attributes.backgroundImageURL + ' \\')'\n\t\t};\n\t\treturn wp.element.createElement(\n\t\t\t'div',\n\t\t\t{\n\t\t\t\tclassName: classnames__WEBPACK_IMPORTED_MODULE_0___default()('wp-block-orbitfox-services', { 'is-dim': props.attributes.backgroundType === 'image' && props.attributes.backgroundDimmed }, { 'is-parallax': props.attributes.backgroundType === 'image' && props.attributes.backgroundParallax }),\n\t\t\t\tstyle: style\n\t\t\t},\n\t\t\twp.element.createElement(InnerBlocks.Content, null)\n\t\t);\n\t}\n});\n\n//# sourceURL=webpack:///./blocks/services/services-block.js?");

/***/ }),

/***/ "./blocks/services/style.scss":
/*!************************************!*\
  !*** ./blocks/services/style.scss ***!
  \************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("// removed by extract-text-webpack-plugin\n\n//# sourceURL=webpack:///./blocks/services/style.scss?");

/***/ }),

/***/ "./blocks/sharing-icons/editor.scss":
/*!******************************************!*\
  !*** ./blocks/sharing-icons/editor.scss ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("// removed by extract-text-webpack-plugin\n\n//# sourceURL=webpack:///./blocks/sharing-icons/editor.scss?");

/***/ }),

/***/ "./blocks/sharing-icons/icons.js":
/*!***************************************!*\
  !*** ./blocks/sharing-icons/icons.js ***!
  \***************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var babel_runtime_core_js_object_get_prototype_of__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! babel-runtime/core-js/object/get-prototype-of */ \"./node_modules/babel-runtime/core-js/object/get-prototype-of.js\");\n/* harmony import */ var babel_runtime_core_js_object_get_prototype_of__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(babel_runtime_core_js_object_get_prototype_of__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! babel-runtime/helpers/classCallCheck */ \"./node_modules/babel-runtime/helpers/classCallCheck.js\");\n/* harmony import */ var babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! babel-runtime/helpers/createClass */ \"./node_modules/babel-runtime/helpers/createClass.js\");\n/* harmony import */ var babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! babel-runtime/helpers/possibleConstructorReturn */ \"./node_modules/babel-runtime/helpers/possibleConstructorReturn.js\");\n/* harmony import */ var babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! babel-runtime/helpers/inherits */ \"./node_modules/babel-runtime/helpers/inherits.js\");\n/* harmony import */ var babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__);\n\n\n\n\n\n/**\n * WordPress dependencies...\n */\nvar Component = wp.element.Component;\n\nvar SocialIcons = function (_Component) {\n\tbabel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default()(SocialIcons, _Component);\n\n\tfunction SocialIcons() {\n\t\tbabel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1___default()(this, SocialIcons);\n\n\t\treturn babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_3___default()(this, (SocialIcons.__proto__ || babel_runtime_core_js_object_get_prototype_of__WEBPACK_IMPORTED_MODULE_0___default()(SocialIcons)).apply(this, arguments));\n\t}\n\n\tbabel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2___default()(SocialIcons, [{\n\t\tkey: \"render\",\n\t\tvalue: function render() {\n\t\t\tif (this.props.icon === 'facebook') {\n\t\t\t\treturn wp.element.createElement(\n\t\t\t\t\t\"svg\",\n\t\t\t\t\t{ className: \"obfx-toolbar\", xmlns: \"http://www.w3.org/2000/svg\", viewBox: \"0 0 264 512\" },\n\t\t\t\t\twp.element.createElement(\"path\", { fill: \"currentColor\", d: \"M76.7 512V283H0v-91h76.7v-71.7C76.7 42.4 124.3 0 193.8 0c33.3 0 61.9 2.5 70.2 3.6V85h-48.2c-37.8 0-45.1 18-45.1 44.3V192H256l-11.7 91h-73.6v229\" })\n\t\t\t\t);\n\t\t\t} else if (this.props.icon === 'twitter') {\n\t\t\t\treturn wp.element.createElement(\n\t\t\t\t\t\"svg\",\n\t\t\t\t\t{ className: \"obfx-toolbar\", xmlns: \"http://www.w3.org/2000/svg\", viewBox: \"0 0 512 512\" },\n\t\t\t\t\twp.element.createElement(\"path\", { fill: \"currentColor\", d: \"M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z\" })\n\t\t\t\t);\n\t\t\t} else if (this.props.icon === 'googleplus') {\n\t\t\t\treturn wp.element.createElement(\n\t\t\t\t\t\"svg\",\n\t\t\t\t\t{ className: \"obfx-toolbar\", xmlns: \"http://www.w3.org/2000/svg\", viewBox: \"0 0 640 512\" },\n\t\t\t\t\twp.element.createElement(\"path\", { fill: \"currentColor\", d: \"M386.061 228.496c1.834 9.692 3.143 19.384 3.143 31.956C389.204 370.205 315.599 448 204.8 448c-106.084 0-192-85.915-192-192s85.916-192 192-192c51.864 0 95.083 18.859 128.611 50.292l-52.126 50.03c-14.145-13.621-39.028-29.599-76.485-29.599-65.484 0-118.92 54.221-118.92 121.277 0 67.056 53.436 121.277 118.92 121.277 75.961 0 104.513-54.745 108.965-82.773H204.8v-66.009h181.261zm185.406 6.437V179.2h-56.001v55.733h-55.733v56.001h55.733v55.733h56.001v-55.733H627.2v-56.001h-55.733z\" })\n\t\t\t\t);\n\t\t\t} else if (this.props.icon === 'linkedin') {\n\t\t\t\treturn wp.element.createElement(\n\t\t\t\t\t\"svg\",\n\t\t\t\t\t{ className: \"obfx-toolbar\", xmlns: \"http://www.w3.org/2000/svg\", viewBox: \"0 0 448 512\" },\n\t\t\t\t\twp.element.createElement(\"path\", { fill: \"currentColor\", d: \"M100.3 480H7.4V180.9h92.9V480zM53.8 140.1C24.1 140.1 0 115.5 0 85.8 0 56.1 24.1 32 53.8 32c29.7 0 53.8 24.1 53.8 53.8 0 29.7-24.1 54.3-53.8 54.3zM448 480h-92.7V334.4c0-34.7-.7-79.2-48.3-79.2-48.3 0-55.7 37.7-55.7 76.7V480h-92.8V180.9h89.1v40.8h1.3c12.4-23.5 42.7-48.3 87.9-48.3 94 0 111.3 61.9 111.3 142.3V480z\" })\n\t\t\t\t);\n\t\t\t} else if (this.props.icon === 'pinterest') {\n\t\t\t\treturn wp.element.createElement(\n\t\t\t\t\t\"svg\",\n\t\t\t\t\t{ className: \"obfx-toolbar\", xmlns: \"http://www.w3.org/2000/svg\", viewBox: \"0 0 384 512\" },\n\t\t\t\t\twp.element.createElement(\"path\", { fill: \"currentColor\", d: \"M204 6.5C101.4 6.5 0 74.9 0 185.6 0 256 39.6 296 63.6 296c9.9 0 15.6-27.6 15.6-35.4 0-9.3-23.7-29.1-23.7-67.8 0-80.4 61.2-137.4 140.4-137.4 68.1 0 118.5 38.7 118.5 109.8 0 53.1-21.3 152.7-90.3 152.7-24.9 0-46.2-18-46.2-43.8 0-37.8 26.4-74.4 26.4-113.4 0-66.2-93.9-54.2-93.9 25.8 0 16.8 2.1 35.4 9.6 50.7-13.8 59.4-42 147.9-42 209.1 0 18.9 2.7 37.5 4.5 56.4 3.4 3.8 1.7 3.4 6.9 1.5 50.4-69 48.6-82.5 71.4-172.8 12.3 23.4 44.1 36 69.3 36 106.2 0 153.9-103.5 153.9-196.8C384 71.3 298.2 6.5 204 6.5z\" })\n\t\t\t\t);\n\t\t\t} else if (this.props.icon === 'tumblr') {\n\t\t\t\treturn wp.element.createElement(\n\t\t\t\t\t\"svg\",\n\t\t\t\t\t{ className: \"obfx-toolbar\", xmlns: \"http://www.w3.org/2000/svg\", viewBox: \"0 0 320 512\" },\n\t\t\t\t\twp.element.createElement(\"path\", { fill: \"currentColor\", d: \"M309.8 480.3c-13.6 14.5-50 31.7-97.4 31.7-120.8 0-147-88.8-147-140.6v-144H17.9c-5.5 0-10-4.5-10-10v-68c0-7.2 4.5-13.6 11.3-16 62-21.8 81.5-76 84.3-117.1.8-11 6.5-16.3 16.1-16.3h70.9c5.5 0 10 4.5 10 10v115.2h83c5.5 0 10 4.4 10 9.9v81.7c0 5.5-4.5 10-10 10h-83.4V360c0 34.2 23.7 53.6 68 35.8 4.8-1.9 9-3.2 12.7-2.2 3.5.9 5.8 3.4 7.4 7.9l22 64.3c1.8 5 3.3 10.6-.4 14.5z\" })\n\t\t\t\t);\n\t\t\t} else if (this.props.icon === 'reddit') {\n\t\t\t\treturn wp.element.createElement(\n\t\t\t\t\t\"svg\",\n\t\t\t\t\t{ className: \"obfx-toolbar\", xmlns: \"http://www.w3.org/2000/svg\", viewBox: \"0 0 512 512\" },\n\t\t\t\t\twp.element.createElement(\"path\", { fill: \"currentColor\", d: \"M440.3 203.5c-15 0-28.2 6.2-37.9 15.9-35.7-24.7-83.8-40.6-137.1-42.3L293 52.3l88.2 19.8c0 21.6 17.6 39.2 39.2 39.2 22 0 39.7-18.1 39.7-39.7s-17.6-39.7-39.7-39.7c-15.4 0-28.7 9.3-35.3 22l-97.4-21.6c-4.9-1.3-9.7 2.2-11 7.1L246.3 177c-52.9 2.2-100.5 18.1-136.3 42.8-9.7-10.1-23.4-16.3-38.4-16.3-55.6 0-73.8 74.6-22.9 100.1-1.8 7.9-2.6 16.3-2.6 24.7 0 83.8 94.4 151.7 210.3 151.7 116.4 0 210.8-67.9 210.8-151.7 0-8.4-.9-17.2-3.1-25.1 49.9-25.6 31.5-99.7-23.8-99.7zM129.4 308.9c0-22 17.6-39.7 39.7-39.7 21.6 0 39.2 17.6 39.2 39.7 0 21.6-17.6 39.2-39.2 39.2-22 .1-39.7-17.6-39.7-39.2zm214.3 93.5c-36.4 36.4-139.1 36.4-175.5 0-4-3.5-4-9.7 0-13.7 3.5-3.5 9.7-3.5 13.2 0 27.8 28.5 120 29 149 0 3.5-3.5 9.7-3.5 13.2 0 4.1 4 4.1 10.2.1 13.7zm-.8-54.2c-21.6 0-39.2-17.6-39.2-39.2 0-22 17.6-39.7 39.2-39.7 22 0 39.7 17.6 39.7 39.7-.1 21.5-17.7 39.2-39.7 39.2z\" })\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\treturn wp.element.createElement(\n\t\t\t\t\t\"svg\",\n\t\t\t\t\t{ className: \"obfx-toolbar\", xmlns: \"http://www.w3.org/2000/svg\", viewBox: \"0 0 512 512\" },\n\t\t\t\t\twp.element.createElement(\"path\", { fill: \"currentColor\", d: \"M208 88.286c0-10 6.286-21.714 17.715-21.714 11.142 0 17.714 11.714 17.714 21.714 0 10.285-6.572 21.714-17.714 21.714C214.286 110 208 98.571 208 88.286zm304 160c0 36.001-11.429 102.286-36.286 129.714-22.858 24.858-87.428 61.143-120.857 70.572l-1.143.286v32.571c0 16.286-12.572 30.571-29.143 30.571-10 0-19.429-5.714-24.572-14.286-5.427 8.572-14.856 14.286-24.856 14.286-10 0-19.429-5.714-24.858-14.286-5.142 8.572-14.571 14.286-24.57 14.286-10.286 0-19.429-5.714-24.858-14.286-5.143 8.572-14.571 14.286-24.571 14.286-18.857 0-29.429-15.714-29.429-32.857-16.286 12.285-35.715 19.428-56.571 19.428-22 0-43.429-8.285-60.286-22.857 10.285-.286 20.571-2.286 30.285-5.714-20.857-5.714-39.428-18.857-52-36.286 21.37 4.645 46.209 1.673 67.143-11.143-22-22-56.571-58.857-68.572-87.428C1.143 321.714 0 303.714 0 289.429c0-49.714 20.286-160 86.286-160 10.571 0 18.857 4.858 23.143 14.857a158.792 158.792 0 0 1 12-15.428c2-2.572 5.714-5.429 7.143-8.286 7.999-12.571 11.714-21.142 21.714-34C182.571 45.428 232 17.143 285.143 17.143c6 0 12 .285 17.714 1.143C313.714 6.571 328.857 0 344.572 0c14.571 0 29.714 6 40 16.286.857.858 1.428 2.286 1.428 3.428 0 3.714-10.285 13.429-12.857 16.286 4.286 1.429 15.714 6.858 15.714 12 0 2.857-2.857 5.143-4.571 7.143 31.429 27.714 49.429 67.143 56.286 108 4.286-5.143 10.285-8.572 17.143-8.572 10.571 0 20.857 7.144 28.571 14.001C507.143 187.143 512 221.714 512 248.286zM188 89.428c0 18.286 12.571 37.143 32.286 37.143 19.714 0 32.285-18.857 32.285-37.143 0-18-12.571-36.857-32.285-36.857-19.715 0-32.286 18.858-32.286 36.857zM237.714 194c0-19.714 3.714-39.143 8.571-58.286-52.039 79.534-13.531 184.571 68.858 184.571 21.428 0 42.571-7.714 60-20 2-7.429 3.714-14.857 3.714-22.572 0-14.286-6.286-21.428-20.572-21.428-4.571 0-9.143.857-13.429 1.714-63.343 12.668-107.142 3.669-107.142-63.999zm-41.142 254.858c0-11.143-8.858-20.857-20.286-20.857-11.429 0-20 9.715-20 20.857v32.571c0 11.143 8.571 21.142 20 21.142 11.428 0 20.286-9.715 20.286-21.142v-32.571zm49.143 0c0-11.143-8.572-20.857-20-20.857-11.429 0-20.286 9.715-20.286 20.857v32.571c0 11.143 8.857 21.142 20.286 21.142 11.428 0 20-10 20-21.142v-32.571zm49.713 0c0-11.143-8.857-20.857-20.285-20.857-11.429 0-20.286 9.715-20.286 20.857v32.571c0 11.143 8.857 21.142 20.286 21.142 11.428 0 20.285-9.715 20.285-21.142v-32.571zm49.715 0c0-11.143-8.857-20.857-20.286-20.857-11.428 0-20.286 9.715-20.286 20.857v32.571c0 11.143 8.858 21.142 20.286 21.142 11.429 0 20.286-10 20.286-21.142v-32.571zM421.714 286c-30.857 59.142-90.285 102.572-158.571 102.572-96.571 0-160.571-84.572-160.571-176.572 0-16.857 2-33.429 6-49.714-20 33.715-29.714 72.572-29.714 111.429 0 60.286 24.857 121.715 71.429 160.857 5.143-9.714 14.857-16.286 26-16.286 10 0 19.428 5.714 24.571 14.286 5.429-8.571 14.571-14.286 24.858-14.286 10 0 19.428 5.714 24.571 14.286 5.429-8.571 14.857-14.286 24.858-14.286 10 0 19.428 5.714 24.857 14.286 5.143-8.571 14.571-14.286 24.572-14.286 10.857 0 20.857 6.572 25.714 16 43.427-36.286 68.569-92 71.426-148.286zm10.572-99.714c0-53.714-34.571-105.714-92.572-105.714-30.285 0-58.571 15.143-78.857 36.857C240.862 183.812 233.41 254 302.286 254c28.805 0 97.357-28.538 84.286 36.857 28.857-26 45.714-65.714 45.714-104.571z\" })\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}]);\n\n\treturn SocialIcons;\n}(Component);\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (SocialIcons);\n\n//# sourceURL=webpack:///./blocks/sharing-icons/icons.js?");

/***/ }),

/***/ "./blocks/sharing-icons/index.js":
/*!***************************************!*\
  !*** ./blocks/sharing-icons/index.js ***!
  \***************************************/
/*! no exports provided */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var babel_runtime_core_js_object_keys__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! babel-runtime/core-js/object/keys */ \"./node_modules/babel-runtime/core-js/object/keys.js\");\n/* harmony import */ var babel_runtime_core_js_object_keys__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(babel_runtime_core_js_object_keys__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! babel-runtime/helpers/defineProperty */ \"./node_modules/babel-runtime/helpers/defineProperty.js\");\n/* harmony import */ var babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! classnames */ \"./node_modules/classnames/index.js\");\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _style_scss__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./style.scss */ \"./blocks/sharing-icons/style.scss\");\n/* harmony import */ var _style_scss__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_style_scss__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _editor_scss__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./editor.scss */ \"./blocks/sharing-icons/editor.scss\");\n/* harmony import */ var _editor_scss__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_editor_scss__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _social_list__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./social_list */ \"./blocks/sharing-icons/social_list.js\");\n/* harmony import */ var _icons__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./icons */ \"./blocks/sharing-icons/icons.js\");\n\n\n/**\r\n * WordPress dependencies...\r\n */\n\n\n\nvar __ = wp.i18n.__;\nvar registerBlockType = wp.blocks.registerBlockType;\nvar BlockControls = wp.editor.BlockControls;\nvar _wp$components = wp.components,\n    Toolbar = _wp$components.Toolbar,\n    Button = _wp$components.Button,\n    Tooltip = _wp$components.Tooltip;\n\n/**\r\n * Internal dependencies\r\n */\n\n\n\n\n\n\nregisterBlockType('orbitfox/sharing-icons', {\n\ttitle: __('Sharing Icons'),\n\tdescription: __('Share buttons for your website visitors to share content on any social sharing service.'),\n\ticon: 'networking',\n\tcategory: 'orbitfox',\n\tkeywords: ['social media', 'sharing', 'icons'],\n\tattributes: {\n\t\tfacebook: {\n\t\t\ttype: 'boolean',\n\t\t\tdefault: true\n\t\t},\n\t\ttwitter: {\n\t\t\ttype: 'boolean',\n\t\t\tdefault: true\n\t\t},\n\t\tgoogleplus: {\n\t\t\ttype: 'boolean',\n\t\t\tdefault: true\n\t\t},\n\t\tlinkedin: {\n\t\t\ttype: 'boolean',\n\t\t\tdefault: true\n\t\t},\n\t\tpinterest: {\n\t\t\ttype: 'boolean',\n\t\t\tdefault: false\n\t\t},\n\t\ttumblr: {\n\t\t\ttype: 'boolean',\n\t\t\tdefault: false\n\t\t},\n\t\treddit: {\n\t\t\ttype: 'boolean',\n\t\t\tdefault: false\n\t\t}\n\t},\n\n\tsupports: {\n\t\thtml: true,\n\t\talign: ['left', 'center', 'right']\n\t},\n\n\tstyles: [{ name: 'default', label: __('Regular'), isDefault: true }, { name: 'icons', label: __('Icons Only') }],\n\n\tedit: function edit(props) {\n\t\tvar toggleIcons = function toggleIcons(item) {\n\t\t\tprops.setAttributes(babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1___default()({}, item, !props.attributes[item]));\n\t\t};\n\n\t\treturn [wp.element.createElement(\n\t\t\tBlockControls,\n\t\t\t{ key: 'toolbar-controls' },\n\t\t\twp.element.createElement(\n\t\t\t\tToolbar,\n\t\t\t\t{\n\t\t\t\t\tclassName: 'components-toolbar'\n\t\t\t\t},\n\t\t\t\tbabel_runtime_core_js_object_keys__WEBPACK_IMPORTED_MODULE_0___default()(_social_list__WEBPACK_IMPORTED_MODULE_5__[\"default\"]).map(function (item, i) {\n\t\t\t\t\tvar prop = props.attributes[item];\n\t\t\t\t\treturn wp.element.createElement(\n\t\t\t\t\t\tTooltip,\n\t\t\t\t\t\t{ text: __('Display ' + _social_list__WEBPACK_IMPORTED_MODULE_5__[\"default\"][item]['label']) },\n\t\t\t\t\t\twp.element.createElement(\n\t\t\t\t\t\t\tButton,\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tclassName: classnames__WEBPACK_IMPORTED_MODULE_2___default()('components-icon-button', 'components-toolbar__control', { 'is-active': prop }),\n\t\t\t\t\t\t\t\tonClick: function onClick(e) {\n\t\t\t\t\t\t\t\t\treturn toggleIcons(item);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\twp.element.createElement(_icons__WEBPACK_IMPORTED_MODULE_6__[\"default\"], { icon: item })\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\t\t\t\t})\n\t\t\t)\n\t\t), wp.element.createElement(\n\t\t\t'div',\n\t\t\t{\n\t\t\t\tclassName: classnames__WEBPACK_IMPORTED_MODULE_2___default()(props.className, { 'has-label': props.attributes.className ? !props.attributes.className.includes('is-style-icons') : true })\n\t\t\t},\n\t\t\tbabel_runtime_core_js_object_keys__WEBPACK_IMPORTED_MODULE_0___default()(_social_list__WEBPACK_IMPORTED_MODULE_5__[\"default\"]).map(function (item, i) {\n\t\t\t\tif (props.attributes[item] === true) {\n\t\t\t\t\treturn wp.element.createElement(\n\t\t\t\t\t\t'a',\n\t\t\t\t\t\t{ className: 'social-icon is-' + item },\n\t\t\t\t\t\twp.element.createElement('i', { 'class': 'fab fa-' + _social_list__WEBPACK_IMPORTED_MODULE_5__[\"default\"][item]['icon'] }),\n\t\t\t\t\t\t(props.attributes.className ? !props.attributes.className.includes('is-style-icons') : true) && _social_list__WEBPACK_IMPORTED_MODULE_5__[\"default\"][item]['label']\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t})\n\t\t)];\n\t},\n\n\tsave: function save() {\n\t\treturn null;\n\t}\n});\n\n//# sourceURL=webpack:///./blocks/sharing-icons/index.js?");

/***/ }),

/***/ "./blocks/sharing-icons/social_list.js":
/*!*********************************************!*\
  !*** ./blocks/sharing-icons/social_list.js ***!
  \*********************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/**\r\n * WordPress dependencies...\r\n */\nvar __ = wp.i18n.__;\n\n\nvar social_list = {\n\tfacebook: {\n\t\tlabel: __('Facebook'),\n\t\ticon: 'facebook-f'\n\t},\n\ttwitter: {\n\t\tlabel: __('Twitter'),\n\t\ticon: 'twitter'\n\t},\n\tgoogleplus: {\n\t\tlabel: __('Google+'),\n\t\ticon: 'google-plus-g'\n\t},\n\tlinkedin: {\n\t\tlabel: __('Linkedin'),\n\t\ticon: 'linkedin-in'\n\t},\n\tpinterest: {\n\t\tlabel: __('Pinterest'),\n\t\ticon: 'pinterest-p'\n\t},\n\ttumblr: {\n\t\tlabel: __('Tumblr'),\n\t\ticon: 'tumblr'\n\t},\n\treddit: {\n\t\tlabel: __('Reddit'),\n\t\ticon: 'reddit-alien'\n\t}\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (social_list);\n\n//# sourceURL=webpack:///./blocks/sharing-icons/social_list.js?");

/***/ }),

/***/ "./blocks/sharing-icons/style.scss":
/*!*****************************************!*\
  !*** ./blocks/sharing-icons/style.scss ***!
  \*****************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("// removed by extract-text-webpack-plugin\n\n//# sourceURL=webpack:///./blocks/sharing-icons/style.scss?");

/***/ }),

/***/ "./blocks/testimonials/editor.scss":
/*!*****************************************!*\
  !*** ./blocks/testimonials/editor.scss ***!
  \*****************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("// removed by extract-text-webpack-plugin\n\n//# sourceURL=webpack:///./blocks/testimonials/editor.scss?");

/***/ }),

/***/ "./blocks/testimonials/index.js":
/*!**************************************!*\
  !*** ./blocks/testimonials/index.js ***!
  \**************************************/
/*! no exports provided */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _style_scss__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./style.scss */ \"./blocks/testimonials/style.scss\");\n/* harmony import */ var _style_scss__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_style_scss__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _editor_scss__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./editor.scss */ \"./blocks/testimonials/editor.scss\");\n/* harmony import */ var _editor_scss__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_editor_scss__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _testimonials_area__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./testimonials-area */ \"./blocks/testimonials/testimonials-area.js\");\n/* harmony import */ var _testimonials_block__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./testimonials-block */ \"./blocks/testimonials/testimonials-block.js\");\n/* harmony import */ var _testimonials_block__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_testimonials_block__WEBPACK_IMPORTED_MODULE_3__);\n/**\r\n * Testimonials Block\r\n */\n\n\n\n\n\n//# sourceURL=webpack:///./blocks/testimonials/index.js?");

/***/ }),

/***/ "./blocks/testimonials/style.scss":
/*!****************************************!*\
  !*** ./blocks/testimonials/style.scss ***!
  \****************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("// removed by extract-text-webpack-plugin\n\n//# sourceURL=webpack:///./blocks/testimonials/style.scss?");

/***/ }),

/***/ "./blocks/testimonials/testimonials-area.js":
/*!**************************************************!*\
  !*** ./blocks/testimonials/testimonials-area.js ***!
  \**************************************************/
/*! no exports provided */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! classnames */ \"./node_modules/classnames/index.js\");\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_0__);\n/**\n * External dependencies\n */\n\n\n/**\n * WordPress dependencies...\n */\n\nvar __ = wp.i18n.__;\nvar registerBlockType = wp.blocks.registerBlockType;\nvar _wp$editor = wp.editor,\n    ColorPalette = _wp$editor.ColorPalette,\n    InnerBlocks = _wp$editor.InnerBlocks,\n    InspectorControls = _wp$editor.InspectorControls,\n    MediaPlaceholder = _wp$editor.MediaPlaceholder;\nvar _wp$components = wp.components,\n    Button = _wp$components.Button,\n    ToggleControl = _wp$components.ToggleControl,\n    SelectControl = _wp$components.SelectControl,\n    PanelBody = _wp$components.PanelBody;\nvar Fragment = wp.element.Fragment;\n\n\nregisterBlockType('orbitfox/testimonials-area', {\n\ttitle: __('Testimonials Area'),\n\tdescription: __('Display kudos from customers and clients and display them on your website.'),\n\ticon: 'testimonial',\n\tcategory: 'orbitfox',\n\tkeywords: ['testimonials', 'clients', 'quotes'],\n\tattributes: {\n\t\tbackgroundType: {\n\t\t\ttype: 'string',\n\t\t\tdefault: 'color'\n\t\t},\n\t\tbackgroundColor: {\n\t\t\ttype: 'string',\n\t\t\tdefault: '#ffffff'\n\t\t},\n\t\tbackgroundImageID: {\n\t\t\ttype: 'string'\n\t\t},\n\t\tbackgroundImageURL: {\n\t\t\ttype: 'string'\n\t\t},\n\t\tbackgroundDimmed: {\n\t\t\ttype: 'boolean',\n\t\t\tdefault: true\n\t\t},\n\t\tbackgroundParallax: {\n\t\t\ttype: 'boolean',\n\t\t\tdefault: false\n\t\t}\n\t},\n\n\tsupports: {\n\t\talign: ['wide', 'full']\n\t},\n\n\tedit: function edit(props) {\n\t\tvar ALLOWED_BLOCKS = ['orbitfox/testimonials-block'];\n\t\tvar ALLOWED_MEDIA_TYPES = ['image'];\n\t\tvar TEMPLATE = [['orbitfox/testimonials-block'], ['orbitfox/testimonials-block'], ['orbitfox/testimonials-block']];\n\t\tvar changeType = function changeType(value) {\n\t\t\tprops.setAttributes({ backgroundType: value });\n\t\t};\n\t\tvar changeColor = function changeColor(value) {\n\t\t\tprops.setAttributes({ backgroundColor: value });\n\t\t};\n\t\tvar changeBackground = function changeBackground(value) {\n\t\t\tprops.setAttributes({\n\t\t\t\tbackgroundImageID: value.id,\n\t\t\t\tbackgroundImageURL: value.url\n\t\t\t});\n\t\t};\n\t\tvar removeBackground = function removeBackground() {\n\t\t\tprops.setAttributes({\n\t\t\t\tbackgroundImageID: '',\n\t\t\t\tbackgroundImageURL: ''\n\t\t\t});\n\t\t};\n\t\tvar toggleDimming = function toggleDimming() {\n\t\t\tprops.setAttributes({ backgroundDimmed: !props.attributes.backgroundDimmed });\n\t\t};\n\t\tvar toggleParallax = function toggleParallax() {\n\t\t\tprops.setAttributes({ backgroundParallax: !props.attributes.backgroundParallax });\n\t\t};\n\t\tvar style = {\n\t\t\tbackground: props.attributes.backgroundType === 'color' ? props.attributes.backgroundColor : 'url(\\' ' + props.attributes.backgroundImageURL + ' \\')'\n\t\t};\n\t\treturn [wp.element.createElement(\n\t\t\tInspectorControls,\n\t\t\tnull,\n\t\t\twp.element.createElement(\n\t\t\t\tPanelBody,\n\t\t\t\t{\n\t\t\t\t\ttitle: __('Background')\n\t\t\t\t},\n\t\t\t\twp.element.createElement(SelectControl, {\n\t\t\t\t\tlabel: __('Background Type'),\n\t\t\t\t\tvalue: props.attributes.backgroundType,\n\t\t\t\t\toptions: [{ label: 'Color', value: 'color' }, { label: 'Image', value: 'image' }],\n\t\t\t\t\tonChange: changeType\n\t\t\t\t}),\n\t\t\t\tprops.attributes.backgroundType === 'color' ? wp.element.createElement(ColorPalette, {\n\t\t\t\t\tlabel: __('Background Color'),\n\t\t\t\t\tvalue: props.attributes.backgroundColor,\n\t\t\t\t\tonChange: changeColor\n\t\t\t\t}) : props.attributes.backgroundImageURL ? wp.element.createElement(\n\t\t\t\t\tFragment,\n\t\t\t\t\tnull,\n\t\t\t\t\twp.element.createElement(ToggleControl, {\n\t\t\t\t\t\tlabel: __('Dimmed Background'),\n\t\t\t\t\t\tchecked: props.attributes.backgroundDimmed,\n\t\t\t\t\t\tonChange: toggleDimming\n\t\t\t\t\t}),\n\t\t\t\t\twp.element.createElement(ToggleControl, {\n\t\t\t\t\t\tlabel: __('Parallax Background'),\n\t\t\t\t\t\tchecked: props.attributes.backgroundParallax,\n\t\t\t\t\t\tonChange: toggleParallax\n\t\t\t\t\t}),\n\t\t\t\t\twp.element.createElement('img', {\n\t\t\t\t\t\tsrc: props.attributes.backgroundImageURL\n\t\t\t\t\t}),\n\t\t\t\t\twp.element.createElement(\n\t\t\t\t\t\tButton,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tisLarge: true,\n\t\t\t\t\t\t\tonClick: removeBackground,\n\t\t\t\t\t\t\tstyle: { marginTop: '10px' }\n\t\t\t\t\t\t},\n\t\t\t\t\t\t__('Change or Remove Image')\n\t\t\t\t\t)\n\t\t\t\t) : wp.element.createElement(MediaPlaceholder, {\n\t\t\t\t\ticon: 'format-image',\n\t\t\t\t\tlabels: {\n\t\t\t\t\t\ttitle: __('Background Image'),\n\t\t\t\t\t\tname: __('an image')\n\t\t\t\t\t},\n\t\t\t\t\tvalue: props.attributes.backgroundImageID,\n\t\t\t\t\tonSelect: changeBackground,\n\t\t\t\t\taccept: 'image/*',\n\t\t\t\t\tallowedTypes: ALLOWED_MEDIA_TYPES\n\t\t\t\t})\n\t\t\t)\n\t\t), wp.element.createElement(\n\t\t\t'div',\n\t\t\t{\n\t\t\t\tclassName: classnames__WEBPACK_IMPORTED_MODULE_0___default()(props.className, { 'is-dim': props.attributes.backgroundType === 'image' && props.attributes.backgroundDimmed }, { 'is-parallax': props.attributes.backgroundType === 'image' && props.attributes.backgroundParallax }),\n\t\t\t\tstyle: style\n\t\t\t},\n\t\t\twp.element.createElement(InnerBlocks, {\n\t\t\t\tallowedBlocks: ALLOWED_BLOCKS,\n\t\t\t\ttemplate: TEMPLATE\n\t\t\t})\n\t\t)];\n\t},\n\n\tsave: function save(props) {\n\t\tvar style = {\n\t\t\tbackground: props.attributes.backgroundType === 'color' ? props.attributes.backgroundColor : 'url(\\' ' + props.attributes.backgroundImageURL + ' \\')'\n\t\t};\n\t\treturn wp.element.createElement(\n\t\t\t'div',\n\t\t\t{\n\t\t\t\tclassName: classnames__WEBPACK_IMPORTED_MODULE_0___default()('wp-block-orbitfox-testimonials-area', { 'is-dim': props.attributes.backgroundType === 'image' && props.attributes.backgroundDimmed }, { 'is-parallax': props.attributes.backgroundType === 'image' && props.attributes.backgroundParallax }),\n\t\t\t\tstyle: style\n\t\t\t},\n\t\t\twp.element.createElement(InnerBlocks.Content, null)\n\t\t);\n\t}\n});\n\n//# sourceURL=webpack:///./blocks/testimonials/testimonials-area.js?");

/***/ }),

/***/ "./blocks/testimonials/testimonials-block.js":
/*!***************************************************!*\
  !*** ./blocks/testimonials/testimonials-block.js ***!
  \***************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("/**\n * WordPress dependencies...\n */\n\nvar __ = wp.i18n.__;\nvar registerBlockType = wp.blocks.registerBlockType;\nvar _wp$editor = wp.editor,\n    InnerBlocks = _wp$editor.InnerBlocks,\n    InspectorControls = _wp$editor.InspectorControls,\n    PanelColorSettings = _wp$editor.PanelColorSettings;\n\n/**\n * Internal dependencies\n */\n\nregisterBlockType('orbitfox/testimonials-block', {\n\ttitle: __('Testimonials Block'),\n\tdescription: __('Display kudos from customers and clients and display them on your website.'),\n\tparent: ['orbitfox/testimonials-area'],\n\ticon: 'testimonial',\n\tcategory: 'orbitfox',\n\tkeywords: ['testimonials', 'clients', 'quotes'],\n\tattributes: {\n\t\tbackgroundColor: {\n\t\t\ttype: 'string',\n\t\t\tdefault: '#ffffff'\n\t\t}\n\t},\n\n\tedit: function edit(props) {\n\t\tvar setBackgroundColor = function setBackgroundColor(value) {\n\t\t\tprops.setAttributes({ backgroundColor: value });\n\t\t};\n\t\tvar TEMPLATE = [['core/image', {\n\t\t\talign: 'center'\n\t\t}], ['core/heading', {\n\t\t\tcontent: __('John Doe'),\n\t\t\tclassName: 'testimonials-title',\n\t\t\talign: 'center',\n\t\t\tlevel: 3\n\t\t}], ['core/heading', {\n\t\t\tcontent: __('Jedi Master'),\n\t\t\tclassName: 'testimonials-subtitle',\n\t\t\talign: 'center',\n\t\t\tlevel: 6\n\t\t}], ['core/paragraph', {\n\t\t\tcontent: __('What is the point of being alive if you don’t at least try to do something remarkable?'),\n\t\t\tclassName: 'testimonials-content',\n\t\t\talign: 'center'\n\t\t}]];\n\n\t\treturn [wp.element.createElement(\n\t\t\tInspectorControls,\n\t\t\tnull,\n\t\t\twp.element.createElement(PanelColorSettings, {\n\t\t\t\ttitle: __('Color Settings'),\n\t\t\t\tinitialOpen: true,\n\t\t\t\tcolorSettings: [{\n\t\t\t\t\tvalue: props.attributes.backgroundColor,\n\t\t\t\t\tonChange: setBackgroundColor,\n\t\t\t\t\tlabel: __('Background Color')\n\t\t\t\t}]\n\t\t\t})\n\t\t), wp.element.createElement(\n\t\t\t'div',\n\t\t\t{\n\t\t\t\tclassName: 'wp-block-column',\n\t\t\t\tstyle: {\n\t\t\t\t\tbackgroundColor: props.attributes.backgroundColor\n\t\t\t\t}\n\t\t\t},\n\t\t\twp.element.createElement(InnerBlocks, {\n\t\t\t\ttemplate: TEMPLATE\n\t\t\t})\n\t\t)];\n\t},\n\n\tsave: function save(props) {\n\t\treturn wp.element.createElement(\n\t\t\t'div',\n\t\t\t{\n\t\t\t\tclassName: 'wp-block-column',\n\t\t\t\tstyle: {\n\t\t\t\t\tbackgroundColor: props.attributes.backgroundColor\n\t\t\t\t}\n\t\t\t},\n\t\t\twp.element.createElement(InnerBlocks.Content, null)\n\t\t);\n\t}\n});\n\n//# sourceURL=webpack:///./blocks/testimonials/testimonials-block.js?");

/***/ }),

/***/ "./blocks/tweetable/editor.scss":
/*!**************************************!*\
  !*** ./blocks/tweetable/editor.scss ***!
  \**************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("// removed by extract-text-webpack-plugin\n\n//# sourceURL=webpack:///./blocks/tweetable/editor.scss?");

/***/ }),

/***/ "./blocks/tweetable/index.js":
/*!***********************************!*\
  !*** ./blocks/tweetable/index.js ***!
  \***********************************/
/*! no exports provided */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _editor_scss__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./editor.scss */ \"./blocks/tweetable/editor.scss\");\n/* harmony import */ var _editor_scss__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_editor_scss__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _style_scss__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./style.scss */ \"./blocks/tweetable/style.scss\");\n/* harmony import */ var _style_scss__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_style_scss__WEBPACK_IMPORTED_MODULE_1__);\n/**\r\n * WordPress dependencies.\r\n */\nvar __ = wp.i18n.__;\nvar _lodash = lodash,\n    get = _lodash.get;\nvar _wp$blocks = wp.blocks,\n    registerBlockType = _wp$blocks.registerBlockType,\n    createBlock = _wp$blocks.createBlock;\nvar _wp$components = wp.components,\n    Toolbar = _wp$components.Toolbar,\n    TextControl = _wp$components.TextControl;\nvar BlockControls = wp.editor.BlockControls;\nvar withSelect = wp.data.withSelect;\nvar RichText = wp.editor.RichText;\n\n/**\r\n * Internal dependencies\r\n */\n\n\n\n\nregisterBlockType('orbitfox/tweetable', {\n\ttitle: __('Click To Tweet'),\n\tdescription: __('Click to Tweet allows visitors to easily share your content on Twitter.'),\n\ticon: 'twitter',\n\tcategory: 'orbitfox',\n\tkeywords: [__('twitter'), __('tweet'), __('orbitfox')],\n\tattributes: {\n\t\tquote: {\n\t\t\ttype: 'string',\n\t\t\tsource: 'children',\n\t\t\tselector: 'p',\n\t\t\tdefault: []\n\t\t},\n\t\tpermalink: {\n\t\t\ttype: 'url'\n\t\t},\n\t\tvia: {\n\t\t\ttype: 'string'\n\t\t},\n\t\tbuttonText: {\n\t\t\ttype: 'string',\n\t\t\tdefault: __('Click to Tweet')\n\t\t}\n\t},\n\n\ttransforms: {\n\t\tfrom: [{\n\t\t\ttype: 'block',\n\t\t\tblocks: ['core/paragraph'],\n\t\t\ttransform: function transform(_ref) {\n\t\t\t\tvar content = _ref.content;\n\n\t\t\t\treturn createBlock('orbitfox/tweetable', { quote: content });\n\t\t\t}\n\t\t}, {\n\t\t\ttype: 'block',\n\t\t\tblocks: ['core/quote'],\n\t\t\ttransform: function transform(_ref2) {\n\t\t\t\tvar value = _ref2.value,\n\t\t\t\t    citation = _ref2.citation;\n\n\t\t\t\tif ((!value || !value.length) && !citation) {\n\t\t\t\t\treturn createBlock('orbitfox/tweetable');\n\t\t\t\t}\n\t\t\t\treturn (value || []).map(function (item) {\n\t\t\t\t\treturn createBlock('orbitfox/tweetable', {\n\t\t\t\t\t\tquote: [get(item, 'children.props.children', '')]\n\t\t\t\t\t});\n\t\t\t\t}).concat(citation ? createBlock('core/paragraph', {\n\t\t\t\t\tcontent: citation\n\t\t\t\t}) : []);\n\t\t\t}\n\t\t}, {\n\t\t\ttype: 'block',\n\t\t\tblocks: ['core/pullquote'],\n\t\t\ttransform: function transform(_ref3) {\n\t\t\t\tvar value = _ref3.value,\n\t\t\t\t    citation = _ref3.citation;\n\n\t\t\t\tif ((!value || !value.length) && !citation) {\n\t\t\t\t\treturn createBlock('orbitfox/tweetable');\n\t\t\t\t}\n\t\t\t\treturn (value || []).map(function (item) {\n\t\t\t\t\treturn createBlock('orbitfox/tweetable', {\n\t\t\t\t\t\tquote: [get(item, 'children.props.children', '')]\n\t\t\t\t\t});\n\t\t\t\t}).concat(citation ? createBlock('core/paragraph', {\n\t\t\t\t\tquote: citation\n\t\t\t\t}) : []);\n\t\t\t}\n\t\t}],\n\t\tto: [{\n\t\t\ttype: 'block',\n\t\t\tblocks: ['core/paragraph'],\n\t\t\ttransform: function transform(_ref4) {\n\t\t\t\tvar content = _ref4.content,\n\t\t\t\t    quote = _ref4.quote;\n\n\t\t\t\tif (!quote || !quote.length) {\n\t\t\t\t\treturn createBlock('core/paragraph');\n\t\t\t\t}\n\t\t\t\treturn (quote || []).map(function (item) {\n\t\t\t\t\treturn createBlock('core/paragraph', {\n\t\t\t\t\t\tcontent: quote\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\t\t}, {\n\t\t\ttype: 'block',\n\t\t\tblocks: ['core/quote'],\n\t\t\ttransform: function transform(_ref5) {\n\t\t\t\tvar quote = _ref5.quote;\n\n\t\t\t\treturn createBlock('core/quote', {\n\t\t\t\t\tvalue: [{ children: wp.element.createElement(\n\t\t\t\t\t\t\t'p',\n\t\t\t\t\t\t\t{ key: '1' },\n\t\t\t\t\t\t\tquote\n\t\t\t\t\t\t) }]\n\t\t\t\t});\n\t\t\t}\n\t\t}, {\n\t\t\ttype: 'block',\n\t\t\tblocks: ['core/pullquote'],\n\t\t\ttransform: function transform(_ref6) {\n\t\t\t\tvar quote = _ref6.quote;\n\n\t\t\t\treturn createBlock('core/pullquote', {\n\t\t\t\t\tvalue: [{ children: wp.element.createElement(\n\t\t\t\t\t\t\t'p',\n\t\t\t\t\t\t\t{ key: '1' },\n\t\t\t\t\t\t\tquote\n\t\t\t\t\t\t) }]\n\t\t\t\t});\n\t\t\t}\n\t\t}]\n\t},\n\n\tedit: withSelect(function (select, props) {\n\t\tvar _select = select('core/editor'),\n\t\t    getPermalink = _select.getPermalink;\n\n\t\tif (props.attributes.permalink === undefined) {\n\t\t\tprops.setAttributes({ permalink: getPermalink() });\n\t\t}\n\t\treturn {\n\t\t\tpermalink: getPermalink(),\n\t\t\tprops: props\n\t\t};\n\t})(function (_ref7) {\n\t\tvar props = _ref7.props,\n\t\t    className = _ref7.className;\n\n\t\tvar onChangeQuote = function onChangeQuote(value) {\n\t\t\tprops.setAttributes({ quote: value });\n\t\t};\n\n\t\tvar onChangeButton = function onChangeButton(value) {\n\t\t\tprops.setAttributes({ buttonText: value });\n\t\t};\n\n\t\tvar onChangeVia = function onChangeVia(value) {\n\t\t\tprops.setAttributes({ via: value });\n\t\t};\n\n\t\treturn [wp.element.createElement(\n\t\t\tBlockControls,\n\t\t\t{ key: 'controls' },\n\t\t\twp.element.createElement(\n\t\t\t\tToolbar,\n\t\t\t\tnull,\n\t\t\t\twp.element.createElement('i', { className: 'fas fa-at tweetable-icon' }),\n\t\t\t\twp.element.createElement(TextControl, {\n\t\t\t\t\ttype: 'text',\n\t\t\t\t\tplaceholder: 'Username',\n\t\t\t\t\tclassName: 'tweetable-controls',\n\t\t\t\t\tvalue: props.attributes.via,\n\t\t\t\t\tonChange: onChangeVia\n\t\t\t\t})\n\t\t\t)\n\t\t), wp.element.createElement(\n\t\t\t'blockquote',\n\t\t\t{ className: className },\n\t\t\twp.element.createElement(RichText, {\n\t\t\t\ttagName: 'p',\n\t\t\t\tmultiline: 'false',\n\t\t\t\tplaceholder: __('What should we tweet?'),\n\t\t\t\tvalue: props.attributes.quote,\n\t\t\t\tformattingControls: [],\n\t\t\t\tonChange: onChangeQuote,\n\t\t\t\tkeepPlaceholderOnFocus: true\n\t\t\t}),\n\t\t\twp.element.createElement(RichText, {\n\t\t\t\ttagName: 'span',\n\t\t\t\tplaceholder: __('Tweet this!'),\n\t\t\t\tclassName: 'tweetbutton',\n\t\t\t\tvalue: props.attributes.buttonText ? props.attributes.buttonText : __('Tweet this!'),\n\t\t\t\tformattingControls: [],\n\t\t\t\tonChange: onChangeButton,\n\t\t\t\tkeepPlaceholderOnFocus: true\n\t\t\t})\n\t\t)];\n\t}),\n\n\tsave: function save(props) {\n\t\tvar viaUrl = props.attributes.via ? '&via=' + props.attributes.via : '';\n\n\t\tvar tweetUrl = 'http://twitter.com/share?&text=' + encodeURIComponent(props.attributes.quote) + '&url=' + props.attributes.permalink + viaUrl;\n\n\t\treturn wp.element.createElement(\n\t\t\t'blockquote',\n\t\t\tnull,\n\t\t\twp.element.createElement(RichText.Content, {\n\t\t\t\ttagName: 'p',\n\t\t\t\tvalue: props.attributes.quote\n\t\t\t}),\n\t\t\twp.element.createElement(RichText.Content, {\n\t\t\t\ttagName: 'a',\n\t\t\t\tclassName: 'tweetbutton',\n\t\t\t\thref: tweetUrl,\n\t\t\t\tvalue: props.attributes.buttonText,\n\t\t\t\ttarget: '_blank'\n\t\t\t})\n\t\t);\n\t}\n});\n\n//# sourceURL=webpack:///./blocks/tweetable/index.js?");

/***/ }),

/***/ "./blocks/tweetable/style.scss":
/*!*************************************!*\
  !*** ./blocks/tweetable/style.scss ***!
  \*************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("// removed by extract-text-webpack-plugin\n\n//# sourceURL=webpack:///./blocks/tweetable/style.scss?");

/***/ }),

/***/ "./node_modules/@handsontable/react/dist/react-handsontable.js":
/*!*********************************************************************!*\
  !*** ./node_modules/@handsontable/react/dist/react-handsontable.js ***!
  \*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("/*!\n * (The MIT License)\n * \n * Copyright (c) Handsoncode sp. z o.o. <hello@handsoncode.net>\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 * Version: 1.1.0 (built at Fri Aug 17 2018 10:16:29 GMT+0200 (CEST))\n */\n(function (global, factory) {\n true ? factory(exports, __webpack_require__(/*! handsontable */ \"./node_modules/handsontable/dist/handsontable.js\"), __webpack_require__(/*! react */ \"./node_modules/react/index.js\")) :\nundefined;\n}(this, (function (exports,Handsontable,React) { 'use strict';\n\nHandsontable = Handsontable && Handsontable.hasOwnProperty('default') ? Handsontable['default'] : Handsontable;\nReact = React && React.hasOwnProperty('default') ? React['default'] : React;\n\nvar classCallCheck = function (instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n};\n\nvar createClass = function () {\n  function defineProperties(target, props) {\n    for (var i = 0; i < props.length; i++) {\n      var descriptor = props[i];\n      descriptor.enumerable = descriptor.enumerable || false;\n      descriptor.configurable = true;\n      if (\"value\" in descriptor) descriptor.writable = true;\n      Object.defineProperty(target, descriptor.key, descriptor);\n    }\n  }\n\n  return function (Constructor, protoProps, staticProps) {\n    if (protoProps) defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) defineProperties(Constructor, staticProps);\n    return Constructor;\n  };\n}();\n\nvar inherits = function (subClass, superClass) {\n  if (typeof superClass !== \"function\" && superClass !== null) {\n    throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n  }\n\n  subClass.prototype = Object.create(superClass && superClass.prototype, {\n    constructor: {\n      value: subClass,\n      enumerable: false,\n      writable: true,\n      configurable: true\n    }\n  });\n  if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n};\n\nvar possibleConstructorReturn = function (self, call) {\n  if (!self) {\n    throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  }\n\n  return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n};\n\nvar SettingsMapper = function () {\n    function SettingsMapper() {\n        classCallCheck(this, SettingsMapper);\n\n        this.registeredHooks = Handsontable.hooks.getRegistered();\n    }\n    /**\r\n     * Parse component settings into Handosntable-compatible settings.\r\n     *\r\n     * @param {Object} properties Object containing properties from the HotTable object.\r\n     * @returns {Object} Handsontable-compatible settings object.\r\n     */\n\n\n    createClass(SettingsMapper, [{\n        key: 'getSettings',\n        value: function getSettings(properties) {\n            var newSettings = {};\n            if (properties.settings) {\n                var settings = properties.settings;\n                for (var key in settings) {\n                    if (settings.hasOwnProperty(key)) {\n                        newSettings[this.trimHookPrefix(key)] = settings[key];\n                    }\n                }\n            }\n            for (var _key in properties) {\n                if (_key !== 'settings' && properties.hasOwnProperty(_key)) {\n                    newSettings[this.trimHookPrefix(_key)] = properties[_key];\n                }\n            }\n            return newSettings;\n        }\n        /**\r\n         * Trim the \"on\" hook prefix.\r\n         *\r\n         * @param {String} prop Settings property.\r\n         * @returns {String} Handsontable-compatible, prefix-less property name.\r\n         */\n\n    }, {\n        key: 'trimHookPrefix',\n        value: function trimHookPrefix(prop) {\n            if (prop.indexOf('on') === 0) {\n                var hookName = prop.charAt(2).toLowerCase() + prop.slice(3, prop.length);\n                if (this.registeredHooks.indexOf(hookName) > -1) {\n                    return hookName;\n                }\n            }\n            // returns the string anyway, when we're sure all the hooks are registered, might be changed\n            return prop;\n        }\n    }]);\n    return SettingsMapper;\n}();\n\n/**\r\n * A Handsontable-ReactJS wrapper.\r\n *\r\n * To implement, use the `HotTable` tag with properties corresponding to Handsontable options.\r\n * For example:\r\n *\r\n * ```js\r\n * <HotTable id=\"hot\" data={dataObject} contextMenu={true} colHeaders={true} width={600} height={300} stretchH=\"all\" />\r\n *\r\n * // is analogous to\r\n * let hot = new Handsontable(document.getElementById('hot'), {\r\n *    data: dataObject,\r\n *    contextMenu: true,\r\n *    colHeaders: true,\r\n *    width: 600\r\n *    height: 300\r\n * });\r\n *\r\n * ```\r\n *\r\n * @class HotTable\r\n */\nvar HotTable = function (_React$Component) {\n  inherits(HotTable, _React$Component);\n\n  function HotTable() {\n    classCallCheck(this, HotTable);\n\n    /**\r\n     * Reference to the `SettingsMapper` instance.\r\n     *\r\n     * @type {SettingsMapper}\r\n     */\n    var _this = possibleConstructorReturn(this, (HotTable.__proto__ || Object.getPrototypeOf(HotTable)).apply(this, arguments));\n\n    _this.settingsMapper = new SettingsMapper();\n    /**\r\n     * The `id` of the main Handsontable DOM element.\r\n     *\r\n     * @type {String}\r\n     */\n    _this.id = null;\n    /**\r\n     * Reference to the Handsontable instance.\r\n     *\r\n     * @type {Object}\r\n     */\n    _this.hotInstance = null;\n    /**\r\n     * Reference to the main Handsontable DOM element.\r\n     *\r\n     * @type {HTMLElement}\r\n     */\n    _this.hotElementRef = null;\n    return _this;\n  }\n  /**\r\n   * Set the reference to the main Handsontable DOM element.\r\n   *\r\n   * @param {HTMLElement} element The main Handsontable DOM element.\r\n   */\n\n\n  createClass(HotTable, [{\n    key: 'setHotElementRef',\n    value: function setHotElementRef(element) {\n      this.hotElementRef = element;\n    }\n    /**\r\n     * Initialize Handsontable after the component has mounted.\r\n     */\n\n  }, {\n    key: 'componentDidMount',\n    value: function componentDidMount() {\n      var newSettings = this.settingsMapper.getSettings(this.props);\n      this.hotInstance = new Handsontable(this.hotElementRef, newSettings);\n    }\n    /**\r\n     * Call the `updateHot` method and prevent the component from re-rendering the instance.\r\n     *\r\n     * @param {Object} nextProps\r\n     * @param {Object} nextState\r\n     * @returns {Boolean}\r\n     */\n\n  }, {\n    key: 'shouldComponentUpdate',\n    value: function shouldComponentUpdate(nextProps, nextState) {\n      this.updateHot(this.settingsMapper.getSettings(nextProps));\n      return false;\n    }\n    /**\r\n     * Destroy the Handsontable instance when the parent component unmounts.\r\n     */\n\n  }, {\n    key: 'componentWillUnmount',\n    value: function componentWillUnmount() {\n      this.hotInstance.destroy();\n    }\n    /**\r\n     * Render the table.\r\n     */\n\n  }, {\n    key: 'render',\n    value: function render() {\n      this.id = this.props.id || 'hot-' + Math.random().toString(36).substring(5);\n      this.className = this.props.className || '';\n      this.style = this.props.style || {};\n      return React.createElement(\"div\", { ref: this.setHotElementRef.bind(this), id: this.id, className: this.className, style: this.style });\n    }\n    /**\r\n     * Call the `updateSettings` method for the Handsontable instance.\r\n     *\r\n     * @param {Object} newSettings The settings object.\r\n     */\n\n  }, {\n    key: 'updateHot',\n    value: function updateHot(newSettings) {\n      this.hotInstance.updateSettings(newSettings, false);\n    }\n  }]);\n  return HotTable;\n}(React.Component);\n\nexports.HotTable = HotTable;\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\n})));\n//# sourceMappingURL=react-handsontable.js.map\n\n\n//# sourceURL=webpack:///./node_modules/@handsontable/react/dist/react-handsontable.js?");

/***/ }),

/***/ "./node_modules/babel-runtime/core-js/json/stringify.js":
/*!**************************************************************!*\
  !*** ./node_modules/babel-runtime/core-js/json/stringify.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("module.exports = { \"default\": __webpack_require__(/*! core-js/library/fn/json/stringify */ \"./node_modules/core-js/library/fn/json/stringify.js\"), __esModule: true };\n\n//# sourceURL=webpack:///./node_modules/babel-runtime/core-js/json/stringify.js?");

/***/ }),

/***/ "./node_modules/babel-runtime/core-js/object/assign.js":
/*!*************************************************************!*\
  !*** ./node_modules/babel-runtime/core-js/object/assign.js ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("module.exports = { \"default\": __webpack_require__(/*! core-js/library/fn/object/assign */ \"./node_modules/core-js/library/fn/object/assign.js\"), __esModule: true };\n\n//# sourceURL=webpack:///./node_modules/babel-runtime/core-js/object/assign.js?");

/***/ }),

/***/ "./node_modules/babel-runtime/core-js/object/create.js":
/*!*************************************************************!*\
  !*** ./node_modules/babel-runtime/core-js/object/create.js ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("module.exports = { \"default\": __webpack_require__(/*! core-js/library/fn/object/create */ \"./node_modules/core-js/library/fn/object/create.js\"), __esModule: true };\n\n//# sourceURL=webpack:///./node_modules/babel-runtime/core-js/object/create.js?");

/***/ }),

/***/ "./node_modules/babel-runtime/core-js/object/define-property.js":
/*!**********************************************************************!*\
  !*** ./node_modules/babel-runtime/core-js/object/define-property.js ***!
  \**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("module.exports = { \"default\": __webpack_require__(/*! core-js/library/fn/object/define-property */ \"./node_modules/core-js/library/fn/object/define-property.js\"), __esModule: true };\n\n//# sourceURL=webpack:///./node_modules/babel-runtime/core-js/object/define-property.js?");

/***/ }),

/***/ "./node_modules/babel-runtime/core-js/object/get-prototype-of.js":
/*!***********************************************************************!*\
  !*** ./node_modules/babel-runtime/core-js/object/get-prototype-of.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("module.exports = { \"default\": __webpack_require__(/*! core-js/library/fn/object/get-prototype-of */ \"./node_modules/core-js/library/fn/object/get-prototype-of.js\"), __esModule: true };\n\n//# sourceURL=webpack:///./node_modules/babel-runtime/core-js/object/get-prototype-of.js?");

/***/ }),

/***/ "./node_modules/babel-runtime/core-js/object/keys.js":
/*!***********************************************************!*\
  !*** ./node_modules/babel-runtime/core-js/object/keys.js ***!
  \***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("module.exports = { \"default\": __webpack_require__(/*! core-js/library/fn/object/keys */ \"./node_modules/core-js/library/fn/object/keys.js\"), __esModule: true };\n\n//# sourceURL=webpack:///./node_modules/babel-runtime/core-js/object/keys.js?");

/***/ }),

/***/ "./node_modules/babel-runtime/core-js/object/set-prototype-of.js":
/*!***********************************************************************!*\
  !*** ./node_modules/babel-runtime/core-js/object/set-prototype-of.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("module.exports = { \"default\": __webpack_require__(/*! core-js/library/fn/object/set-prototype-of */ \"./node_modules/core-js/library/fn/object/set-prototype-of.js\"), __esModule: true };\n\n//# sourceURL=webpack:///./node_modules/babel-runtime/core-js/object/set-prototype-of.js?");

/***/ }),

/***/ "./node_modules/babel-runtime/core-js/promise.js":
/*!*******************************************************!*\
  !*** ./node_modules/babel-runtime/core-js/promise.js ***!
  \*******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("module.exports = { \"default\": __webpack_require__(/*! core-js/library/fn/promise */ \"./node_modules/core-js/library/fn/promise.js\"), __esModule: true };\n\n//# sourceURL=webpack:///./node_modules/babel-runtime/core-js/promise.js?");

/***/ }),

/***/ "./node_modules/babel-runtime/core-js/symbol.js":
/*!******************************************************!*\
  !*** ./node_modules/babel-runtime/core-js/symbol.js ***!
  \******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("module.exports = { \"default\": __webpack_require__(/*! core-js/library/fn/symbol */ \"./node_modules/core-js/library/fn/symbol/index.js\"), __esModule: true };\n\n//# sourceURL=webpack:///./node_modules/babel-runtime/core-js/symbol.js?");

/***/ }),

/***/ "./node_modules/babel-runtime/core-js/symbol/iterator.js":
/*!***************************************************************!*\
  !*** ./node_modules/babel-runtime/core-js/symbol/iterator.js ***!
  \***************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("module.exports = { \"default\": __webpack_require__(/*! core-js/library/fn/symbol/iterator */ \"./node_modules/core-js/library/fn/symbol/iterator.js\"), __esModule: true };\n\n//# sourceURL=webpack:///./node_modules/babel-runtime/core-js/symbol/iterator.js?");

/***/ }),

/***/ "./node_modules/babel-runtime/helpers/asyncToGenerator.js":
/*!****************************************************************!*\
  !*** ./node_modules/babel-runtime/helpers/asyncToGenerator.js ***!
  \****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\n\nexports.__esModule = true;\n\nvar _promise = __webpack_require__(/*! ../core-js/promise */ \"./node_modules/babel-runtime/core-js/promise.js\");\n\nvar _promise2 = _interopRequireDefault(_promise);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function (fn) {\n  return function () {\n    var gen = fn.apply(this, arguments);\n    return new _promise2.default(function (resolve, reject) {\n      function step(key, arg) {\n        try {\n          var info = gen[key](arg);\n          var value = info.value;\n        } catch (error) {\n          reject(error);\n          return;\n        }\n\n        if (info.done) {\n          resolve(value);\n        } else {\n          return _promise2.default.resolve(value).then(function (value) {\n            step(\"next\", value);\n          }, function (err) {\n            step(\"throw\", err);\n          });\n        }\n      }\n\n      return step(\"next\");\n    });\n  };\n};\n\n//# sourceURL=webpack:///./node_modules/babel-runtime/helpers/asyncToGenerator.js?");

/***/ }),

/***/ "./node_modules/babel-runtime/helpers/classCallCheck.js":
/*!**************************************************************!*\
  !*** ./node_modules/babel-runtime/helpers/classCallCheck.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\n\nexports.__esModule = true;\n\nexports.default = function (instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n};\n\n//# sourceURL=webpack:///./node_modules/babel-runtime/helpers/classCallCheck.js?");

/***/ }),

/***/ "./node_modules/babel-runtime/helpers/createClass.js":
/*!***********************************************************!*\
  !*** ./node_modules/babel-runtime/helpers/createClass.js ***!
  \***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\n\nexports.__esModule = true;\n\nvar _defineProperty = __webpack_require__(/*! ../core-js/object/define-property */ \"./node_modules/babel-runtime/core-js/object/define-property.js\");\n\nvar _defineProperty2 = _interopRequireDefault(_defineProperty);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function () {\n  function defineProperties(target, props) {\n    for (var i = 0; i < props.length; i++) {\n      var descriptor = props[i];\n      descriptor.enumerable = descriptor.enumerable || false;\n      descriptor.configurable = true;\n      if (\"value\" in descriptor) descriptor.writable = true;\n      (0, _defineProperty2.default)(target, descriptor.key, descriptor);\n    }\n  }\n\n  return function (Constructor, protoProps, staticProps) {\n    if (protoProps) defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) defineProperties(Constructor, staticProps);\n    return Constructor;\n  };\n}();\n\n//# sourceURL=webpack:///./node_modules/babel-runtime/helpers/createClass.js?");

/***/ }),

/***/ "./node_modules/babel-runtime/helpers/defineProperty.js":
/*!**************************************************************!*\
  !*** ./node_modules/babel-runtime/helpers/defineProperty.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\n\nexports.__esModule = true;\n\nvar _defineProperty = __webpack_require__(/*! ../core-js/object/define-property */ \"./node_modules/babel-runtime/core-js/object/define-property.js\");\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//# sourceURL=webpack:///./node_modules/babel-runtime/helpers/defineProperty.js?");

/***/ }),

/***/ "./node_modules/babel-runtime/helpers/extends.js":
/*!*******************************************************!*\
  !*** ./node_modules/babel-runtime/helpers/extends.js ***!
  \*******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\n\nexports.__esModule = true;\n\nvar _assign = __webpack_require__(/*! ../core-js/object/assign */ \"./node_modules/babel-runtime/core-js/object/assign.js\");\n\nvar _assign2 = _interopRequireDefault(_assign);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _assign2.default || function (target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i];\n\n    for (var key in source) {\n      if (Object.prototype.hasOwnProperty.call(source, key)) {\n        target[key] = source[key];\n      }\n    }\n  }\n\n  return target;\n};\n\n//# sourceURL=webpack:///./node_modules/babel-runtime/helpers/extends.js?");

/***/ }),

/***/ "./node_modules/babel-runtime/helpers/inherits.js":
/*!********************************************************!*\
  !*** ./node_modules/babel-runtime/helpers/inherits.js ***!
  \********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\n\nexports.__esModule = true;\n\nvar _setPrototypeOf = __webpack_require__(/*! ../core-js/object/set-prototype-of */ \"./node_modules/babel-runtime/core-js/object/set-prototype-of.js\");\n\nvar _setPrototypeOf2 = _interopRequireDefault(_setPrototypeOf);\n\nvar _create = __webpack_require__(/*! ../core-js/object/create */ \"./node_modules/babel-runtime/core-js/object/create.js\");\n\nvar _create2 = _interopRequireDefault(_create);\n\nvar _typeof2 = __webpack_require__(/*! ../helpers/typeof */ \"./node_modules/babel-runtime/helpers/typeof.js\");\n\nvar _typeof3 = _interopRequireDefault(_typeof2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function (subClass, superClass) {\n  if (typeof superClass !== \"function\" && superClass !== null) {\n    throw new TypeError(\"Super expression must either be null or a function, not \" + (typeof superClass === \"undefined\" ? \"undefined\" : (0, _typeof3.default)(superClass)));\n  }\n\n  subClass.prototype = (0, _create2.default)(superClass && superClass.prototype, {\n    constructor: {\n      value: subClass,\n      enumerable: false,\n      writable: true,\n      configurable: true\n    }\n  });\n  if (superClass) _setPrototypeOf2.default ? (0, _setPrototypeOf2.default)(subClass, superClass) : subClass.__proto__ = superClass;\n};\n\n//# sourceURL=webpack:///./node_modules/babel-runtime/helpers/inherits.js?");

/***/ }),

/***/ "./node_modules/babel-runtime/helpers/possibleConstructorReturn.js":
/*!*************************************************************************!*\
  !*** ./node_modules/babel-runtime/helpers/possibleConstructorReturn.js ***!
  \*************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\n\nexports.__esModule = true;\n\nvar _typeof2 = __webpack_require__(/*! ../helpers/typeof */ \"./node_modules/babel-runtime/helpers/typeof.js\");\n\nvar _typeof3 = _interopRequireDefault(_typeof2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function (self, call) {\n  if (!self) {\n    throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  }\n\n  return call && ((typeof call === \"undefined\" ? \"undefined\" : (0, _typeof3.default)(call)) === \"object\" || typeof call === \"function\") ? call : self;\n};\n\n//# sourceURL=webpack:///./node_modules/babel-runtime/helpers/possibleConstructorReturn.js?");

/***/ }),

/***/ "./node_modules/babel-runtime/helpers/typeof.js":
/*!******************************************************!*\
  !*** ./node_modules/babel-runtime/helpers/typeof.js ***!
  \******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\n\nexports.__esModule = true;\n\nvar _iterator = __webpack_require__(/*! ../core-js/symbol/iterator */ \"./node_modules/babel-runtime/core-js/symbol/iterator.js\");\n\nvar _iterator2 = _interopRequireDefault(_iterator);\n\nvar _symbol = __webpack_require__(/*! ../core-js/symbol */ \"./node_modules/babel-runtime/core-js/symbol.js\");\n\nvar _symbol2 = _interopRequireDefault(_symbol);\n\nvar _typeof = typeof _symbol2.default === \"function\" && typeof _iterator2.default === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof _symbol2.default === \"function\" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? \"symbol\" : typeof obj; };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = typeof _symbol2.default === \"function\" && _typeof(_iterator2.default) === \"symbol\" ? function (obj) {\n  return typeof obj === \"undefined\" ? \"undefined\" : _typeof(obj);\n} : function (obj) {\n  return obj && typeof _symbol2.default === \"function\" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? \"symbol\" : typeof obj === \"undefined\" ? \"undefined\" : _typeof(obj);\n};\n\n//# sourceURL=webpack:///./node_modules/babel-runtime/helpers/typeof.js?");

/***/ }),

/***/ "./node_modules/babel-runtime/node_modules/regenerator-runtime/runtime-module.js":
/*!***************************************************************************************!*\
  !*** ./node_modules/babel-runtime/node_modules/regenerator-runtime/runtime-module.js ***!
  \***************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n// This method of obtaining a reference to the global object needs to be\n// kept identical to the way it is obtained in runtime.js\nvar g = (function() { return this })() || Function(\"return this\")();\n\n// Use `getOwnPropertyNames` because not all browsers support calling\n// `hasOwnProperty` on the global `self` object in a worker. See #183.\nvar hadRuntime = g.regeneratorRuntime &&\n  Object.getOwnPropertyNames(g).indexOf(\"regeneratorRuntime\") >= 0;\n\n// Save the old regeneratorRuntime in case it needs to be restored later.\nvar oldRuntime = hadRuntime && g.regeneratorRuntime;\n\n// Force reevalutation of runtime.js.\ng.regeneratorRuntime = undefined;\n\nmodule.exports = __webpack_require__(/*! ./runtime */ \"./node_modules/babel-runtime/node_modules/regenerator-runtime/runtime.js\");\n\nif (hadRuntime) {\n  // Restore the original runtime.\n  g.regeneratorRuntime = oldRuntime;\n} else {\n  // Remove the global property added by runtime.js.\n  try {\n    delete g.regeneratorRuntime;\n  } catch(e) {\n    g.regeneratorRuntime = undefined;\n  }\n}\n\n\n//# sourceURL=webpack:///./node_modules/babel-runtime/node_modules/regenerator-runtime/runtime-module.js?");

/***/ }),

/***/ "./node_modules/babel-runtime/node_modules/regenerator-runtime/runtime.js":
/*!********************************************************************************!*\
  !*** ./node_modules/babel-runtime/node_modules/regenerator-runtime/runtime.js ***!
  \********************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n!(function(global) {\n  \"use strict\";\n\n  var Op = Object.prototype;\n  var hasOwn = Op.hasOwnProperty;\n  var undefined; // More compressible than void 0.\n  var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n  var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n  var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n  var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n  var inModule = typeof module === \"object\";\n  var runtime = global.regeneratorRuntime;\n  if (runtime) {\n    if (inModule) {\n      // If regeneratorRuntime is defined globally and we're in a module,\n      // make the exports object identical to regeneratorRuntime.\n      module.exports = runtime;\n    }\n    // Don't bother evaluating the rest of this file if the runtime was\n    // already defined globally.\n    return;\n  }\n\n  // Define the runtime globally (as expected by generated code) as either\n  // module.exports (if we're in a module) or a new, empty object.\n  runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\n  function wrap(innerFn, outerFn, self, tryLocsList) {\n    // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n    var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n    var generator = Object.create(protoGenerator.prototype);\n    var context = new Context(tryLocsList || []);\n\n    // The ._invoke method unifies the implementations of the .next,\n    // .throw, and .return methods.\n    generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n    return generator;\n  }\n  runtime.wrap = wrap;\n\n  // Try/catch helper to minimize deoptimizations. Returns a completion\n  // record like context.tryEntries[i].completion. This interface could\n  // have been (and was previously) designed to take a closure to be\n  // invoked without arguments, but in all the cases we care about we\n  // already have an existing method we want to call, so there's no need\n  // to create a new function object. We can even get away with assuming\n  // the method takes exactly one argument, since that happens to be true\n  // in every case, so we don't have to touch the arguments object. The\n  // only additional allocation required is the completion record, which\n  // has a stable shape and so hopefully should be cheap to allocate.\n  function tryCatch(fn, obj, arg) {\n    try {\n      return { type: \"normal\", arg: fn.call(obj, arg) };\n    } catch (err) {\n      return { type: \"throw\", arg: err };\n    }\n  }\n\n  var GenStateSuspendedStart = \"suspendedStart\";\n  var GenStateSuspendedYield = \"suspendedYield\";\n  var GenStateExecuting = \"executing\";\n  var GenStateCompleted = \"completed\";\n\n  // Returning this object from the innerFn has the same effect as\n  // breaking out of the dispatch switch statement.\n  var ContinueSentinel = {};\n\n  // Dummy constructor functions that we use as the .constructor and\n  // .constructor.prototype properties for functions that return Generator\n  // objects. For full spec compliance, you may wish to configure your\n  // minifier not to mangle the names of these two functions.\n  function Generator() {}\n  function GeneratorFunction() {}\n  function GeneratorFunctionPrototype() {}\n\n  // This is a polyfill for %IteratorPrototype% for environments that\n  // don't natively support it.\n  var IteratorPrototype = {};\n  IteratorPrototype[iteratorSymbol] = function () {\n    return this;\n  };\n\n  var getProto = Object.getPrototypeOf;\n  var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n  if (NativeIteratorPrototype &&\n      NativeIteratorPrototype !== Op &&\n      hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n    // This environment has a native %IteratorPrototype%; use it instead\n    // of the polyfill.\n    IteratorPrototype = NativeIteratorPrototype;\n  }\n\n  var Gp = GeneratorFunctionPrototype.prototype =\n    Generator.prototype = Object.create(IteratorPrototype);\n  GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n  GeneratorFunctionPrototype.constructor = GeneratorFunction;\n  GeneratorFunctionPrototype[toStringTagSymbol] =\n    GeneratorFunction.displayName = \"GeneratorFunction\";\n\n  // Helper for defining the .next, .throw, and .return methods of the\n  // Iterator interface in terms of a single ._invoke method.\n  function defineIteratorMethods(prototype) {\n    [\"next\", \"throw\", \"return\"].forEach(function(method) {\n      prototype[method] = function(arg) {\n        return this._invoke(method, arg);\n      };\n    });\n  }\n\n  runtime.isGeneratorFunction = function(genFun) {\n    var ctor = typeof genFun === \"function\" && genFun.constructor;\n    return ctor\n      ? ctor === GeneratorFunction ||\n        // For the native GeneratorFunction constructor, the best we can\n        // do is to check its .name property.\n        (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n      : false;\n  };\n\n  runtime.mark = function(genFun) {\n    if (Object.setPrototypeOf) {\n      Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n    } else {\n      genFun.__proto__ = GeneratorFunctionPrototype;\n      if (!(toStringTagSymbol in genFun)) {\n        genFun[toStringTagSymbol] = \"GeneratorFunction\";\n      }\n    }\n    genFun.prototype = Object.create(Gp);\n    return genFun;\n  };\n\n  // Within the body of any async function, `await x` is transformed to\n  // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n  // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n  // meant to be awaited.\n  runtime.awrap = function(arg) {\n    return { __await: arg };\n  };\n\n  function AsyncIterator(generator) {\n    function invoke(method, arg, resolve, reject) {\n      var record = tryCatch(generator[method], generator, arg);\n      if (record.type === \"throw\") {\n        reject(record.arg);\n      } else {\n        var result = record.arg;\n        var value = result.value;\n        if (value &&\n            typeof value === \"object\" &&\n            hasOwn.call(value, \"__await\")) {\n          return Promise.resolve(value.__await).then(function(value) {\n            invoke(\"next\", value, resolve, reject);\n          }, function(err) {\n            invoke(\"throw\", err, resolve, reject);\n          });\n        }\n\n        return Promise.resolve(value).then(function(unwrapped) {\n          // When a yielded Promise is resolved, its final value becomes\n          // the .value of the Promise<{value,done}> result for the\n          // current iteration. If the Promise is rejected, however, the\n          // result for this iteration will be rejected with the same\n          // reason. Note that rejections of yielded Promises are not\n          // thrown back into the generator function, as is the case\n          // when an awaited Promise is rejected. This difference in\n          // behavior between yield and await is important, because it\n          // allows the consumer to decide what to do with the yielded\n          // rejection (swallow it and continue, manually .throw it back\n          // into the generator, abandon iteration, whatever). With\n          // await, by contrast, there is no opportunity to examine the\n          // rejection reason outside the generator function, so the\n          // only option is to throw it from the await expression, and\n          // let the generator function handle the exception.\n          result.value = unwrapped;\n          resolve(result);\n        }, reject);\n      }\n    }\n\n    var previousPromise;\n\n    function enqueue(method, arg) {\n      function callInvokeWithMethodAndArg() {\n        return new Promise(function(resolve, reject) {\n          invoke(method, arg, resolve, reject);\n        });\n      }\n\n      return previousPromise =\n        // If enqueue has been called before, then we want to wait until\n        // all previous Promises have been resolved before calling invoke,\n        // so that results are always delivered in the correct order. If\n        // enqueue has not been called before, then it is important to\n        // call invoke immediately, without waiting on a callback to fire,\n        // so that the async generator function has the opportunity to do\n        // any necessary setup in a predictable way. This predictability\n        // is why the Promise constructor synchronously invokes its\n        // executor callback, and why async functions synchronously\n        // execute code before the first await. Since we implement simple\n        // async functions in terms of async generators, it is especially\n        // important to get this right, even though it requires care.\n        previousPromise ? previousPromise.then(\n          callInvokeWithMethodAndArg,\n          // Avoid propagating failures to Promises returned by later\n          // invocations of the iterator.\n          callInvokeWithMethodAndArg\n        ) : callInvokeWithMethodAndArg();\n    }\n\n    // Define the unified helper method that is used to implement .next,\n    // .throw, and .return (see defineIteratorMethods).\n    this._invoke = enqueue;\n  }\n\n  defineIteratorMethods(AsyncIterator.prototype);\n  AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n    return this;\n  };\n  runtime.AsyncIterator = AsyncIterator;\n\n  // Note that simple async functions are implemented on top of\n  // AsyncIterator objects; they just return a Promise for the value of\n  // the final result produced by the iterator.\n  runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n    var iter = new AsyncIterator(\n      wrap(innerFn, outerFn, self, tryLocsList)\n    );\n\n    return runtime.isGeneratorFunction(outerFn)\n      ? iter // If outerFn is a generator, return the full iterator.\n      : iter.next().then(function(result) {\n          return result.done ? result.value : iter.next();\n        });\n  };\n\n  function makeInvokeMethod(innerFn, self, context) {\n    var state = GenStateSuspendedStart;\n\n    return function invoke(method, arg) {\n      if (state === GenStateExecuting) {\n        throw new Error(\"Generator is already running\");\n      }\n\n      if (state === GenStateCompleted) {\n        if (method === \"throw\") {\n          throw arg;\n        }\n\n        // Be forgiving, per 25.3.3.3.3 of the spec:\n        // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n        return doneResult();\n      }\n\n      context.method = method;\n      context.arg = arg;\n\n      while (true) {\n        var delegate = context.delegate;\n        if (delegate) {\n          var delegateResult = maybeInvokeDelegate(delegate, context);\n          if (delegateResult) {\n            if (delegateResult === ContinueSentinel) continue;\n            return delegateResult;\n          }\n        }\n\n        if (context.method === \"next\") {\n          // Setting context._sent for legacy support of Babel's\n          // function.sent implementation.\n          context.sent = context._sent = context.arg;\n\n        } else if (context.method === \"throw\") {\n          if (state === GenStateSuspendedStart) {\n            state = GenStateCompleted;\n            throw context.arg;\n          }\n\n          context.dispatchException(context.arg);\n\n        } else if (context.method === \"return\") {\n          context.abrupt(\"return\", context.arg);\n        }\n\n        state = GenStateExecuting;\n\n        var record = tryCatch(innerFn, self, context);\n        if (record.type === \"normal\") {\n          // If an exception is thrown from innerFn, we leave state ===\n          // GenStateExecuting and loop back for another invocation.\n          state = context.done\n            ? GenStateCompleted\n            : GenStateSuspendedYield;\n\n          if (record.arg === ContinueSentinel) {\n            continue;\n          }\n\n          return {\n            value: record.arg,\n            done: context.done\n          };\n\n        } else if (record.type === \"throw\") {\n          state = GenStateCompleted;\n          // Dispatch the exception by looping back around to the\n          // context.dispatchException(context.arg) call above.\n          context.method = \"throw\";\n          context.arg = record.arg;\n        }\n      }\n    };\n  }\n\n  // Call delegate.iterator[context.method](context.arg) and handle the\n  // result, either by returning a { value, done } result from the\n  // delegate iterator, or by modifying context.method and context.arg,\n  // setting context.delegate to null, and returning the ContinueSentinel.\n  function maybeInvokeDelegate(delegate, context) {\n    var method = delegate.iterator[context.method];\n    if (method === undefined) {\n      // A .throw or .return when the delegate iterator has no .throw\n      // method always terminates the yield* loop.\n      context.delegate = null;\n\n      if (context.method === \"throw\") {\n        if (delegate.iterator.return) {\n          // If the delegate iterator has a return method, give it a\n          // chance to clean up.\n          context.method = \"return\";\n          context.arg = undefined;\n          maybeInvokeDelegate(delegate, context);\n\n          if (context.method === \"throw\") {\n            // If maybeInvokeDelegate(context) changed context.method from\n            // \"return\" to \"throw\", let that override the TypeError below.\n            return ContinueSentinel;\n          }\n        }\n\n        context.method = \"throw\";\n        context.arg = new TypeError(\n          \"The iterator does not provide a 'throw' method\");\n      }\n\n      return ContinueSentinel;\n    }\n\n    var record = tryCatch(method, delegate.iterator, context.arg);\n\n    if (record.type === \"throw\") {\n      context.method = \"throw\";\n      context.arg = record.arg;\n      context.delegate = null;\n      return ContinueSentinel;\n    }\n\n    var info = record.arg;\n\n    if (! info) {\n      context.method = \"throw\";\n      context.arg = new TypeError(\"iterator result is not an object\");\n      context.delegate = null;\n      return ContinueSentinel;\n    }\n\n    if (info.done) {\n      // Assign the result of the finished delegate to the temporary\n      // variable specified by delegate.resultName (see delegateYield).\n      context[delegate.resultName] = info.value;\n\n      // Resume execution at the desired location (see delegateYield).\n      context.next = delegate.nextLoc;\n\n      // If context.method was \"throw\" but the delegate handled the\n      // exception, let the outer generator proceed normally. If\n      // context.method was \"next\", forget context.arg since it has been\n      // \"consumed\" by the delegate iterator. If context.method was\n      // \"return\", allow the original .return call to continue in the\n      // outer generator.\n      if (context.method !== \"return\") {\n        context.method = \"next\";\n        context.arg = undefined;\n      }\n\n    } else {\n      // Re-yield the result returned by the delegate method.\n      return info;\n    }\n\n    // The delegate iterator is finished, so forget it and continue with\n    // the outer generator.\n    context.delegate = null;\n    return ContinueSentinel;\n  }\n\n  // Define Generator.prototype.{next,throw,return} in terms of the\n  // unified ._invoke helper method.\n  defineIteratorMethods(Gp);\n\n  Gp[toStringTagSymbol] = \"Generator\";\n\n  // A Generator should always return itself as the iterator object when the\n  // @@iterator function is called on it. Some browsers' implementations of the\n  // iterator prototype chain incorrectly implement this, causing the Generator\n  // object to not be returned from this call. This ensures that doesn't happen.\n  // See https://github.com/facebook/regenerator/issues/274 for more details.\n  Gp[iteratorSymbol] = function() {\n    return this;\n  };\n\n  Gp.toString = function() {\n    return \"[object Generator]\";\n  };\n\n  function pushTryEntry(locs) {\n    var entry = { tryLoc: locs[0] };\n\n    if (1 in locs) {\n      entry.catchLoc = locs[1];\n    }\n\n    if (2 in locs) {\n      entry.finallyLoc = locs[2];\n      entry.afterLoc = locs[3];\n    }\n\n    this.tryEntries.push(entry);\n  }\n\n  function resetTryEntry(entry) {\n    var record = entry.completion || {};\n    record.type = \"normal\";\n    delete record.arg;\n    entry.completion = record;\n  }\n\n  function Context(tryLocsList) {\n    // The root entry object (effectively a try statement without a catch\n    // or a finally block) gives us a place to store values thrown from\n    // locations where there is no enclosing try statement.\n    this.tryEntries = [{ tryLoc: \"root\" }];\n    tryLocsList.forEach(pushTryEntry, this);\n    this.reset(true);\n  }\n\n  runtime.keys = function(object) {\n    var keys = [];\n    for (var key in object) {\n      keys.push(key);\n    }\n    keys.reverse();\n\n    // Rather than returning an object with a next method, we keep\n    // things simple and return the next function itself.\n    return function next() {\n      while (keys.length) {\n        var key = keys.pop();\n        if (key in object) {\n          next.value = key;\n          next.done = false;\n          return next;\n        }\n      }\n\n      // To avoid creating an additional object, we just hang the .value\n      // and .done properties off the next function object itself. This\n      // also ensures that the minifier will not anonymize the function.\n      next.done = true;\n      return next;\n    };\n  };\n\n  function values(iterable) {\n    if (iterable) {\n      var iteratorMethod = iterable[iteratorSymbol];\n      if (iteratorMethod) {\n        return iteratorMethod.call(iterable);\n      }\n\n      if (typeof iterable.next === \"function\") {\n        return iterable;\n      }\n\n      if (!isNaN(iterable.length)) {\n        var i = -1, next = function next() {\n          while (++i < iterable.length) {\n            if (hasOwn.call(iterable, i)) {\n              next.value = iterable[i];\n              next.done = false;\n              return next;\n            }\n          }\n\n          next.value = undefined;\n          next.done = true;\n\n          return next;\n        };\n\n        return next.next = next;\n      }\n    }\n\n    // Return an iterator with no values.\n    return { next: doneResult };\n  }\n  runtime.values = values;\n\n  function doneResult() {\n    return { value: undefined, done: true };\n  }\n\n  Context.prototype = {\n    constructor: Context,\n\n    reset: function(skipTempReset) {\n      this.prev = 0;\n      this.next = 0;\n      // Resetting context._sent for legacy support of Babel's\n      // function.sent implementation.\n      this.sent = this._sent = undefined;\n      this.done = false;\n      this.delegate = null;\n\n      this.method = \"next\";\n      this.arg = undefined;\n\n      this.tryEntries.forEach(resetTryEntry);\n\n      if (!skipTempReset) {\n        for (var name in this) {\n          // Not sure about the optimal order of these conditions:\n          if (name.charAt(0) === \"t\" &&\n              hasOwn.call(this, name) &&\n              !isNaN(+name.slice(1))) {\n            this[name] = undefined;\n          }\n        }\n      }\n    },\n\n    stop: function() {\n      this.done = true;\n\n      var rootEntry = this.tryEntries[0];\n      var rootRecord = rootEntry.completion;\n      if (rootRecord.type === \"throw\") {\n        throw rootRecord.arg;\n      }\n\n      return this.rval;\n    },\n\n    dispatchException: function(exception) {\n      if (this.done) {\n        throw exception;\n      }\n\n      var context = this;\n      function handle(loc, caught) {\n        record.type = \"throw\";\n        record.arg = exception;\n        context.next = loc;\n\n        if (caught) {\n          // If the dispatched exception was caught by a catch block,\n          // then let that catch block handle the exception normally.\n          context.method = \"next\";\n          context.arg = undefined;\n        }\n\n        return !! caught;\n      }\n\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        var record = entry.completion;\n\n        if (entry.tryLoc === \"root\") {\n          // Exception thrown outside of any try block that could handle\n          // it, so set the completion value of the entire function to\n          // throw the exception.\n          return handle(\"end\");\n        }\n\n        if (entry.tryLoc <= this.prev) {\n          var hasCatch = hasOwn.call(entry, \"catchLoc\");\n          var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n          if (hasCatch && hasFinally) {\n            if (this.prev < entry.catchLoc) {\n              return handle(entry.catchLoc, true);\n            } else if (this.prev < entry.finallyLoc) {\n              return handle(entry.finallyLoc);\n            }\n\n          } else if (hasCatch) {\n            if (this.prev < entry.catchLoc) {\n              return handle(entry.catchLoc, true);\n            }\n\n          } else if (hasFinally) {\n            if (this.prev < entry.finallyLoc) {\n              return handle(entry.finallyLoc);\n            }\n\n          } else {\n            throw new Error(\"try statement without catch or finally\");\n          }\n        }\n      }\n    },\n\n    abrupt: function(type, arg) {\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        if (entry.tryLoc <= this.prev &&\n            hasOwn.call(entry, \"finallyLoc\") &&\n            this.prev < entry.finallyLoc) {\n          var finallyEntry = entry;\n          break;\n        }\n      }\n\n      if (finallyEntry &&\n          (type === \"break\" ||\n           type === \"continue\") &&\n          finallyEntry.tryLoc <= arg &&\n          arg <= finallyEntry.finallyLoc) {\n        // Ignore the finally entry if control is not jumping to a\n        // location outside the try/catch block.\n        finallyEntry = null;\n      }\n\n      var record = finallyEntry ? finallyEntry.completion : {};\n      record.type = type;\n      record.arg = arg;\n\n      if (finallyEntry) {\n        this.method = \"next\";\n        this.next = finallyEntry.finallyLoc;\n        return ContinueSentinel;\n      }\n\n      return this.complete(record);\n    },\n\n    complete: function(record, afterLoc) {\n      if (record.type === \"throw\") {\n        throw record.arg;\n      }\n\n      if (record.type === \"break\" ||\n          record.type === \"continue\") {\n        this.next = record.arg;\n      } else if (record.type === \"return\") {\n        this.rval = this.arg = record.arg;\n        this.method = \"return\";\n        this.next = \"end\";\n      } else if (record.type === \"normal\" && afterLoc) {\n        this.next = afterLoc;\n      }\n\n      return ContinueSentinel;\n    },\n\n    finish: function(finallyLoc) {\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        if (entry.finallyLoc === finallyLoc) {\n          this.complete(entry.completion, entry.afterLoc);\n          resetTryEntry(entry);\n          return ContinueSentinel;\n        }\n      }\n    },\n\n    \"catch\": function(tryLoc) {\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        if (entry.tryLoc === tryLoc) {\n          var record = entry.completion;\n          if (record.type === \"throw\") {\n            var thrown = record.arg;\n            resetTryEntry(entry);\n          }\n          return thrown;\n        }\n      }\n\n      // The context.catch method must only be called with a location\n      // argument that corresponds to a known catch block.\n      throw new Error(\"illegal catch attempt\");\n    },\n\n    delegateYield: function(iterable, resultName, nextLoc) {\n      this.delegate = {\n        iterator: values(iterable),\n        resultName: resultName,\n        nextLoc: nextLoc\n      };\n\n      if (this.method === \"next\") {\n        // Deliberately forget the last sent value so that we don't\n        // accidentally pass it on to the delegate.\n        this.arg = undefined;\n      }\n\n      return ContinueSentinel;\n    }\n  };\n})(\n  // In sloppy mode, unbound `this` refers to the global object, fallback to\n  // Function constructor if we're in global strict mode. That is sadly a form\n  // of indirect eval which violates Content Security Policy.\n  (function() { return this })() || Function(\"return this\")()\n);\n\n\n//# sourceURL=webpack:///./node_modules/babel-runtime/node_modules/regenerator-runtime/runtime.js?");

/***/ }),

/***/ "./node_modules/babel-runtime/regenerator/index.js":
/*!*********************************************************!*\
  !*** ./node_modules/babel-runtime/regenerator/index.js ***!
  \*********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("module.exports = __webpack_require__(/*! regenerator-runtime */ \"./node_modules/babel-runtime/node_modules/regenerator-runtime/runtime-module.js\");\n\n\n//# sourceURL=webpack:///./node_modules/babel-runtime/regenerator/index.js?");

/***/ }),

/***/ "./node_modules/classnames/index.js":
/*!******************************************!*\
  !*** ./node_modules/classnames/index.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!\n  Copyright (c) 2017 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) && arg.length) {\n\t\t\t\tvar inner = classNames.apply(null, arg);\n\t\t\t\tif (inner) {\n\t\t\t\t\tclasses.push(inner);\n\t\t\t\t}\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\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (true) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\t!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function () {\n\t\t\treturn classNames;\n\t\t}).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t} else {}\n}());\n\n\n//# sourceURL=webpack:///./node_modules/classnames/index.js?");

/***/ }),

/***/ "./node_modules/core-js/library/fn/json/stringify.js":
/*!***********************************************************!*\
  !*** ./node_modules/core-js/library/fn/json/stringify.js ***!
  \***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var core = __webpack_require__(/*! ../../modules/_core */ \"./node_modules/core-js/library/modules/_core.js\");\nvar $JSON = core.JSON || (core.JSON = { stringify: JSON.stringify });\nmodule.exports = function stringify(it) { // eslint-disable-line no-unused-vars\n  return $JSON.stringify.apply($JSON, arguments);\n};\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/fn/json/stringify.js?");

/***/ }),

/***/ "./node_modules/core-js/library/fn/object/assign.js":
/*!**********************************************************!*\
  !*** ./node_modules/core-js/library/fn/object/assign.js ***!
  \**********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("__webpack_require__(/*! ../../modules/es6.object.assign */ \"./node_modules/core-js/library/modules/es6.object.assign.js\");\nmodule.exports = __webpack_require__(/*! ../../modules/_core */ \"./node_modules/core-js/library/modules/_core.js\").Object.assign;\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/fn/object/assign.js?");

/***/ }),

/***/ "./node_modules/core-js/library/fn/object/create.js":
/*!**********************************************************!*\
  !*** ./node_modules/core-js/library/fn/object/create.js ***!
  \**********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("__webpack_require__(/*! ../../modules/es6.object.create */ \"./node_modules/core-js/library/modules/es6.object.create.js\");\nvar $Object = __webpack_require__(/*! ../../modules/_core */ \"./node_modules/core-js/library/modules/_core.js\").Object;\nmodule.exports = function create(P, D) {\n  return $Object.create(P, D);\n};\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/fn/object/create.js?");

/***/ }),

/***/ "./node_modules/core-js/library/fn/object/define-property.js":
/*!*******************************************************************!*\
  !*** ./node_modules/core-js/library/fn/object/define-property.js ***!
  \*******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("__webpack_require__(/*! ../../modules/es6.object.define-property */ \"./node_modules/core-js/library/modules/es6.object.define-property.js\");\nvar $Object = __webpack_require__(/*! ../../modules/_core */ \"./node_modules/core-js/library/modules/_core.js\").Object;\nmodule.exports = function defineProperty(it, key, desc) {\n  return $Object.defineProperty(it, key, desc);\n};\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/fn/object/define-property.js?");

/***/ }),

/***/ "./node_modules/core-js/library/fn/object/get-prototype-of.js":
/*!********************************************************************!*\
  !*** ./node_modules/core-js/library/fn/object/get-prototype-of.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("__webpack_require__(/*! ../../modules/es6.object.get-prototype-of */ \"./node_modules/core-js/library/modules/es6.object.get-prototype-of.js\");\nmodule.exports = __webpack_require__(/*! ../../modules/_core */ \"./node_modules/core-js/library/modules/_core.js\").Object.getPrototypeOf;\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/fn/object/get-prototype-of.js?");

/***/ }),

/***/ "./node_modules/core-js/library/fn/object/keys.js":
/*!********************************************************!*\
  !*** ./node_modules/core-js/library/fn/object/keys.js ***!
  \********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("__webpack_require__(/*! ../../modules/es6.object.keys */ \"./node_modules/core-js/library/modules/es6.object.keys.js\");\nmodule.exports = __webpack_require__(/*! ../../modules/_core */ \"./node_modules/core-js/library/modules/_core.js\").Object.keys;\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/fn/object/keys.js?");

/***/ }),

/***/ "./node_modules/core-js/library/fn/object/set-prototype-of.js":
/*!********************************************************************!*\
  !*** ./node_modules/core-js/library/fn/object/set-prototype-of.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("__webpack_require__(/*! ../../modules/es6.object.set-prototype-of */ \"./node_modules/core-js/library/modules/es6.object.set-prototype-of.js\");\nmodule.exports = __webpack_require__(/*! ../../modules/_core */ \"./node_modules/core-js/library/modules/_core.js\").Object.setPrototypeOf;\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/fn/object/set-prototype-of.js?");

/***/ }),

/***/ "./node_modules/core-js/library/fn/promise.js":
/*!****************************************************!*\
  !*** ./node_modules/core-js/library/fn/promise.js ***!
  \****************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("__webpack_require__(/*! ../modules/es6.object.to-string */ \"./node_modules/core-js/library/modules/es6.object.to-string.js\");\n__webpack_require__(/*! ../modules/es6.string.iterator */ \"./node_modules/core-js/library/modules/es6.string.iterator.js\");\n__webpack_require__(/*! ../modules/web.dom.iterable */ \"./node_modules/core-js/library/modules/web.dom.iterable.js\");\n__webpack_require__(/*! ../modules/es6.promise */ \"./node_modules/core-js/library/modules/es6.promise.js\");\n__webpack_require__(/*! ../modules/es7.promise.finally */ \"./node_modules/core-js/library/modules/es7.promise.finally.js\");\n__webpack_require__(/*! ../modules/es7.promise.try */ \"./node_modules/core-js/library/modules/es7.promise.try.js\");\nmodule.exports = __webpack_require__(/*! ../modules/_core */ \"./node_modules/core-js/library/modules/_core.js\").Promise;\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/fn/promise.js?");

/***/ }),

/***/ "./node_modules/core-js/library/fn/symbol/index.js":
/*!*********************************************************!*\
  !*** ./node_modules/core-js/library/fn/symbol/index.js ***!
  \*********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("__webpack_require__(/*! ../../modules/es6.symbol */ \"./node_modules/core-js/library/modules/es6.symbol.js\");\n__webpack_require__(/*! ../../modules/es6.object.to-string */ \"./node_modules/core-js/library/modules/es6.object.to-string.js\");\n__webpack_require__(/*! ../../modules/es7.symbol.async-iterator */ \"./node_modules/core-js/library/modules/es7.symbol.async-iterator.js\");\n__webpack_require__(/*! ../../modules/es7.symbol.observable */ \"./node_modules/core-js/library/modules/es7.symbol.observable.js\");\nmodule.exports = __webpack_require__(/*! ../../modules/_core */ \"./node_modules/core-js/library/modules/_core.js\").Symbol;\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/fn/symbol/index.js?");

/***/ }),

/***/ "./node_modules/core-js/library/fn/symbol/iterator.js":
/*!************************************************************!*\
  !*** ./node_modules/core-js/library/fn/symbol/iterator.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("__webpack_require__(/*! ../../modules/es6.string.iterator */ \"./node_modules/core-js/library/modules/es6.string.iterator.js\");\n__webpack_require__(/*! ../../modules/web.dom.iterable */ \"./node_modules/core-js/library/modules/web.dom.iterable.js\");\nmodule.exports = __webpack_require__(/*! ../../modules/_wks-ext */ \"./node_modules/core-js/library/modules/_wks-ext.js\").f('iterator');\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/fn/symbol/iterator.js?");

/***/ }),

/***/ "./node_modules/core-js/library/modules/_a-function.js":
/*!*************************************************************!*\
  !*** ./node_modules/core-js/library/modules/_a-function.js ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("module.exports = function (it) {\n  if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n  return it;\n};\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/modules/_a-function.js?");

/***/ }),

/***/ "./node_modules/core-js/library/modules/_add-to-unscopables.js":
/*!*********************************************************************!*\
  !*** ./node_modules/core-js/library/modules/_add-to-unscopables.js ***!
  \*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("module.exports = function () { /* empty */ };\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/modules/_add-to-unscopables.js?");

/***/ }),

/***/ "./node_modules/core-js/library/modules/_an-instance.js":
/*!**************************************************************!*\
  !*** ./node_modules/core-js/library/modules/_an-instance.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("module.exports = function (it, Constructor, name, forbiddenField) {\n  if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n    throw TypeError(name + ': incorrect invocation!');\n  } return it;\n};\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/modules/_an-instance.js?");

/***/ }),

/***/ "./node_modules/core-js/library/modules/_an-object.js":
/*!************************************************************!*\
  !*** ./node_modules/core-js/library/modules/_an-object.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var isObject = __webpack_require__(/*! ./_is-object */ \"./node_modules/core-js/library/modules/_is-object.js\");\nmodule.exports = function (it) {\n  if (!isObject(it)) throw TypeError(it + ' is not an object!');\n  return it;\n};\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/modules/_an-object.js?");

/***/ }),

/***/ "./node_modules/core-js/library/modules/_array-includes.js":
/*!*****************************************************************!*\
  !*** ./node_modules/core-js/library/modules/_array-includes.js ***!
  \*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("// false -> Array#indexOf\n// true  -> Array#includes\nvar toIObject = __webpack_require__(/*! ./_to-iobject */ \"./node_modules/core-js/library/modules/_to-iobject.js\");\nvar toLength = __webpack_require__(/*! ./_to-length */ \"./node_modules/core-js/library/modules/_to-length.js\");\nvar toAbsoluteIndex = __webpack_require__(/*! ./_to-absolute-index */ \"./node_modules/core-js/library/modules/_to-absolute-index.js\");\nmodule.exports = function (IS_INCLUDES) {\n  return function ($this, el, fromIndex) {\n    var O = toIObject($this);\n    var length = toLength(O.length);\n    var index = toAbsoluteIndex(fromIndex, length);\n    var value;\n    // Array#includes uses SameValueZero equality algorithm\n    // eslint-disable-next-line no-self-compare\n    if (IS_INCLUDES && el != el) while (length > index) {\n      value = O[index++];\n      // eslint-disable-next-line no-self-compare\n      if (value != value) return true;\n    // Array#indexOf ignores holes, Array#includes - not\n    } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n      if (O[index] === el) return IS_INCLUDES || index || 0;\n    } return !IS_INCLUDES && -1;\n  };\n};\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/modules/_array-includes.js?");

/***/ }),

/***/ "./node_modules/core-js/library/modules/_classof.js":
/*!**********************************************************!*\
  !*** ./node_modules/core-js/library/modules/_classof.js ***!
  \**********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = __webpack_require__(/*! ./_cof */ \"./node_modules/core-js/library/modules/_cof.js\");\nvar TAG = __webpack_require__(/*! ./_wks */ \"./node_modules/core-js/library/modules/_wks.js\")('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n  try {\n    return it[key];\n  } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n  var O, T, B;\n  return it === undefined ? 'Undefined' : it === null ? 'Null'\n    // @@toStringTag case\n    : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n    // builtinTag case\n    : ARG ? cof(O)\n    // ES3 arguments fallback\n    : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/modules/_classof.js?");

/***/ }),

/***/ "./node_modules/core-js/library/modules/_cof.js":
/*!******************************************************!*\
  !*** ./node_modules/core-js/library/modules/_cof.js ***!
  \******************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("var toString = {}.toString;\n\nmodule.exports = function (it) {\n  return toString.call(it).slice(8, -1);\n};\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/modules/_cof.js?");

/***/ }),

/***/ "./node_modules/core-js/library/modules/_core.js":
/*!*******************************************************!*\
  !*** ./node_modules/core-js/library/modules/_core.js ***!
  \*******************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("var core = module.exports = { version: '2.5.7' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/modules/_core.js?");

/***/ }),

/***/ "./node_modules/core-js/library/modules/_ctx.js":
/*!******************************************************!*\
  !*** ./node_modules/core-js/library/modules/_ctx.js ***!
  \******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("// optional / simple context binding\nvar aFunction = __webpack_require__(/*! ./_a-function */ \"./node_modules/core-js/library/modules/_a-function.js\");\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//# sourceURL=webpack:///./node_modules/core-js/library/modules/_ctx.js?");

/***/ }),

/***/ "./node_modules/core-js/library/modules/_defined.js":
/*!**********************************************************!*\
  !*** ./node_modules/core-js/library/modules/_defined.js ***!
  \**********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n  if (it == undefined) throw TypeError(\"Can't call method on  \" + it);\n  return it;\n};\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/modules/_defined.js?");

/***/ }),

/***/ "./node_modules/core-js/library/modules/_descriptors.js":
/*!**************************************************************!*\
  !*** ./node_modules/core-js/library/modules/_descriptors.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("// Thank's IE8 for his funny defineProperty\nmodule.exports = !__webpack_require__(/*! ./_fails */ \"./node_modules/core-js/library/modules/_fails.js\")(function () {\n  return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/modules/_descriptors.js?");

/***/ }),

/***/ "./node_modules/core-js/library/modules/_dom-create.js":
/*!*************************************************************!*\
  !*** ./node_modules/core-js/library/modules/_dom-create.js ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var isObject = __webpack_require__(/*! ./_is-object */ \"./node_modules/core-js/library/modules/_is-object.js\");\nvar document = __webpack_require__(/*! ./_global */ \"./node_modules/core-js/library/modules/_global.js\").document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n  return is ? document.createElement(it) : {};\n};\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/modules/_dom-create.js?");

/***/ }),

/***/ "./node_modules/core-js/library/modules/_enum-bug-keys.js":
/*!****************************************************************!*\
  !*** ./node_modules/core-js/library/modules/_enum-bug-keys.js ***!
  \****************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("// IE 8- don't enum bug keys\nmodule.exports = (\n  'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/modules/_enum-bug-keys.js?");

/***/ }),

/***/ "./node_modules/core-js/library/modules/_enum-keys.js":
/*!************************************************************!*\
  !*** ./node_modules/core-js/library/modules/_enum-keys.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("// all enumerable object keys, includes symbols\nvar getKeys = __webpack_require__(/*! ./_object-keys */ \"./node_modules/core-js/library/modules/_object-keys.js\");\nvar gOPS = __webpack_require__(/*! ./_object-gops */ \"./node_modules/core-js/library/modules/_object-gops.js\");\nvar pIE = __webpack_require__(/*! ./_object-pie */ \"./node_modules/core-js/library/modules/_object-pie.js\");\nmodule.exports = function (it) {\n  var result = getKeys(it);\n  var getSymbols = gOPS.f;\n  if (getSymbols) {\n    var symbols = getSymbols(it);\n    var isEnum = pIE.f;\n    var i = 0;\n    var key;\n    while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n  } return result;\n};\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/modules/_enum-keys.js?");

/***/ }),

/***/ "./node_modules/core-js/library/modules/_export.js":
/*!*********************************************************!*\
  !*** ./node_modules/core-js/library/modules/_export.js ***!
  \*********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var global = __webpack_require__(/*! ./_global */ \"./node_modules/core-js/library/modules/_global.js\");\nvar core = __webpack_require__(/*! ./_core */ \"./node_modules/core-js/library/modules/_core.js\");\nvar ctx = __webpack_require__(/*! ./_ctx */ \"./node_modules/core-js/library/modules/_ctx.js\");\nvar hide = __webpack_require__(/*! ./_hide */ \"./node_modules/core-js/library/modules/_hide.js\");\nvar has = __webpack_require__(/*! ./_has */ \"./node_modules/core-js/library/modules/_has.js\");\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n  var IS_FORCED = type & $export.F;\n  var IS_GLOBAL = type & $export.G;\n  var IS_STATIC = type & $export.S;\n  var IS_PROTO = type & $export.P;\n  var IS_BIND = type & $export.B;\n  var IS_WRAP = type & $export.W;\n  var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n  var expProto = exports[PROTOTYPE];\n  var target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE];\n  var 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 && has(exports, key)) 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//# sourceURL=webpack:///./node_modules/core-js/library/modules/_export.js?");

/***/ }),

/***/ "./node_modules/core-js/library/modules/_fails.js":
/*!********************************************************!*\
  !*** ./node_modules/core-js/library/modules/_fails.js ***!
  \********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("module.exports = function (exec) {\n  try {\n    return !!exec();\n  } catch (e) {\n    return true;\n  }\n};\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/modules/_fails.js?");

/***/ }),

/***/ "./node_modules/core-js/library/modules/_for-of.js":
/*!*********************************************************!*\
  !*** ./node_modules/core-js/library/modules/_for-of.js ***!
  \*********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var ctx = __webpack_require__(/*! ./_ctx */ \"./node_modules/core-js/library/modules/_ctx.js\");\nvar call = __webpack_require__(/*! ./_iter-call */ \"./node_modules/core-js/library/modules/_iter-call.js\");\nvar isArrayIter = __webpack_require__(/*! ./_is-array-iter */ \"./node_modules/core-js/library/modules/_is-array-iter.js\");\nvar anObject = __webpack_require__(/*! ./_an-object */ \"./node_modules/core-js/library/modules/_an-object.js\");\nvar toLength = __webpack_require__(/*! ./_to-length */ \"./node_modules/core-js/library/modules/_to-length.js\");\nvar getIterFn = __webpack_require__(/*! ./core.get-iterator-method */ \"./node_modules/core-js/library/modules/core.get-iterator-method.js\");\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n  var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n  var f = ctx(fn, that, entries ? 2 : 1);\n  var index = 0;\n  var length, step, iterator, result;\n  if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n  // fast case for arrays with default iterator\n  if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n    result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n    if (result === BREAK || result === RETURN) return result;\n  } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n    result = call(iterator, f, step.value, entries);\n    if (result === BREAK || result === RETURN) return result;\n  }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/modules/_for-of.js?");

/***/ }),

/***/ "./node_modules/core-js/library/modules/_global.js":
/*!*********************************************************!*\
  !*** ./node_modules/core-js/library/modules/_global.js ***!
  \*********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("// 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\n  // eslint-disable-next-line no-new-func\n  : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/modules/_global.js?");

/***/ }),

/***/ "./node_modules/core-js/library/modules/_has.js":
/*!******************************************************!*\
  !*** ./node_modules/core-js/library/modules/_has.js ***!
  \******************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n  return hasOwnProperty.call(it, key);\n};\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/modules/_has.js?");

/***/ }),

/***/ "./node_modules/core-js/library/modules/_hide.js":
/*!*******************************************************!*\
  !*** ./node_modules/core-js/library/modules/_hide.js ***!
  \*******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var dP = __webpack_require__(/*! ./_object-dp */ \"./node_modules/core-js/library/modules/_object-dp.js\");\nvar createDesc = __webpack_require__(/*! ./_property-desc */ \"./node_modules/core-js/library/modules/_property-desc.js\");\nmodule.exports = __webpack_require__(/*! ./_descriptors */ \"./node_modules/core-js/library/modules/_descriptors.js\") ? 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//# sourceURL=webpack:///./node_modules/core-js/library/modules/_hide.js?");

/***/ }),

/***/ "./node_modules/core-js/library/modules/_html.js":
/*!*******************************************************!*\
  !*** ./node_modules/core-js/library/modules/_html.js ***!
  \*******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var document = __webpack_require__(/*! ./_global */ \"./node_modules/core-js/library/modules/_global.js\").document;\nmodule.exports = document && document.documentElement;\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/modules/_html.js?");

/***/ }),

/***/ "./node_modules/core-js/library/modules/_ie8-dom-define.js":
/*!*****************************************************************!*\
  !*** ./node_modules/core-js/library/modules/_ie8-dom-define.js ***!
  \*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("module.exports = !__webpack_require__(/*! ./_descriptors */ \"./node_modules/core-js/library/modules/_descriptors.js\") && !__webpack_require__(/*! ./_fails */ \"./node_modules/core-js/library/modules/_fails.js\")(function () {\n  return Object.defineProperty(__webpack_require__(/*! ./_dom-create */ \"./node_modules/core-js/library/modules/_dom-create.js\")('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/modules/_ie8-dom-define.js?");

/***/ }),

/***/ "./node_modules/core-js/library/modules/_invoke.js":
/*!*********************************************************!*\
  !*** ./node_modules/core-js/library/modules/_invoke.js ***!
  \*********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n  var un = that === undefined;\n  switch (args.length) {\n    case 0: return un ? fn()\n                      : fn.call(that);\n    case 1: return un ? fn(args[0])\n                      : fn.call(that, args[0]);\n    case 2: return un ? fn(args[0], args[1])\n                      : fn.call(that, args[0], args[1]);\n    case 3: return un ? fn(args[0], args[1], args[2])\n                      : fn.call(that, args[0], args[1], args[2]);\n    case 4: return un ? fn(args[0], args[1], args[2], args[3])\n                      : fn.call(that, args[0], args[1], args[2], args[3]);\n  } return fn.apply(that, args);\n};\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/modules/_invoke.js?");

/***/ }),

/***/ "./node_modules/core-js/library/modules/_iobject.js":
/*!**********************************************************!*\
  !*** ./node_modules/core-js/library/modules/_iobject.js ***!
  \**********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = __webpack_require__(/*! ./_cof */ \"./node_modules/core-js/library/modules/_cof.js\");\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n  return cof(it) == 'String' ? it.split('') : Object(it);\n};\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/modules/_iobject.js?");

/***/ }),

/***/ "./node_modules/core-js/library/modules/_is-array-iter.js":
/*!****************************************************************!*\
  !*** ./node_modules/core-js/library/modules/_is-array-iter.js ***!
  \****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("// check on default Array iterator\nvar Iterators = __webpack_require__(/*! ./_iterators */ \"./node_modules/core-js/library/modules/_iterators.js\");\nvar ITERATOR = __webpack_require__(/*! ./_wks */ \"./node_modules/core-js/library/modules/_wks.js\")('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n  return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/modules/_is-array-iter.js?");

/***/ }),

/***/ "./node_modules/core-js/library/modules/_is-array.js":
/*!***********************************************************!*\
  !*** ./node_modules/core-js/library/modules/_is-array.js ***!
  \***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("// 7.2.2 IsArray(argument)\nvar cof = __webpack_require__(/*! ./_cof */ \"./node_modules/core-js/library/modules/_cof.js\");\nmodule.exports = Array.isArray || function isArray(arg) {\n  return cof(arg) == 'Array';\n};\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/modules/_is-array.js?");

/***/ }),

/***/ "./node_modules/core-js/library/modules/_is-object.js":
/*!************************************************************!*\
  !*** ./node_modules/core-js/library/modules/_is-object.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("module.exports = function (it) {\n  return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/modules/_is-object.js?");

/***/ }),

/***/ "./node_modules/core-js/library/modules/_iter-call.js":
/*!************************************************************!*\
  !*** ./node_modules/core-js/library/modules/_iter-call.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("// call something on iterator step with safe closing on error\nvar anObject = __webpack_require__(/*! ./_an-object */ \"./node_modules/core-js/library/modules/_an-object.js\");\nmodule.exports = function (iterator, fn, value, entries) {\n  try {\n    return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n  // 7.4.6 IteratorClose(iterator, completion)\n  } catch (e) {\n    var ret = iterator['return'];\n    if (ret !== undefined) anObject(ret.call(iterator));\n    throw e;\n  }\n};\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/modules/_iter-call.js?");

/***/ }),

/***/ "./node_modules/core-js/library/modules/_iter-create.js":
/*!**************************************************************!*\
  !*** ./node_modules/core-js/library/modules/_iter-create.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\nvar create = __webpack_require__(/*! ./_object-create */ \"./node_modules/core-js/library/modules/_object-create.js\");\nvar descriptor = __webpack_require__(/*! ./_property-desc */ \"./node_modules/core-js/library/modules/_property-desc.js\");\nvar setToStringTag = __webpack_require__(/*! ./_set-to-string-tag */ \"./node_modules/core-js/library/modules/_set-to-string-tag.js\");\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\n__webpack_require__(/*! ./_hide */ \"./node_modules/core-js/library/modules/_hide.js\")(IteratorPrototype, __webpack_require__(/*! ./_wks */ \"./node_modules/core-js/library/modules/_wks.js\")('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n  Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n  setToStringTag(Constructor, NAME + ' Iterator');\n};\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/modules/_iter-create.js?");

/***/ }),

/***/ "./node_modules/core-js/library/modules/_iter-define.js":
/*!**************************************************************!*\
  !*** ./node_modules/core-js/library/modules/_iter-define.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\nvar LIBRARY = __webpack_require__(/*! ./_library */ \"./node_modules/core-js/library/modules/_library.js\");\nvar $export = __webpack_require__(/*! ./_export */ \"./node_modules/core-js/library/modules/_export.js\");\nvar redefine = __webpack_require__(/*! ./_redefine */ \"./node_modules/core-js/library/modules/_redefine.js\");\nvar hide = __webpack_require__(/*! ./_hide */ \"./node_modules/core-js/library/modules/_hide.js\");\nvar Iterators = __webpack_require__(/*! ./_iterators */ \"./node_modules/core-js/library/modules/_iterators.js\");\nvar $iterCreate = __webpack_require__(/*! ./_iter-create */ \"./node_modules/core-js/library/modules/_iter-create.js\");\nvar setToStringTag = __webpack_require__(/*! ./_set-to-string-tag */ \"./node_modules/core-js/library/modules/_set-to-string-tag.js\");\nvar getPrototypeOf = __webpack_require__(/*! ./_object-gpo */ \"./node_modules/core-js/library/modules/_object-gpo.js\");\nvar ITERATOR = __webpack_require__(/*! ./_wks */ \"./node_modules/core-js/library/modules/_wks.js\")('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n  $iterCreate(Constructor, NAME, next);\n  var getMethod = function (kind) {\n    if (!BUGGY && kind in proto) return proto[kind];\n    switch (kind) {\n      case KEYS: return function keys() { return new Constructor(this, kind); };\n      case VALUES: return function values() { return new Constructor(this, kind); };\n    } return function entries() { return new Constructor(this, kind); };\n  };\n  var TAG = NAME + ' Iterator';\n  var DEF_VALUES = DEFAULT == VALUES;\n  var VALUES_BUG = false;\n  var proto = Base.prototype;\n  var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n  var $default = $native || getMethod(DEFAULT);\n  var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n  var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n  var methods, key, IteratorPrototype;\n  // Fix native\n  if ($anyNative) {\n    IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n    if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n      // Set @@toStringTag to native iterators\n      setToStringTag(IteratorPrototype, TAG, true);\n      // fix for some old engines\n      if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);\n    }\n  }\n  // fix Array#{values, @@iterator}.name in V8 / FF\n  if (DEF_VALUES && $native && $native.name !== VALUES) {\n    VALUES_BUG = true;\n    $default = function values() { return $native.call(this); };\n  }\n  // Define iterator\n  if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n    hide(proto, ITERATOR, $default);\n  }\n  // Plug for library\n  Iterators[NAME] = $default;\n  Iterators[TAG] = returnThis;\n  if (DEFAULT) {\n    methods = {\n      values: DEF_VALUES ? $default : getMethod(VALUES),\n      keys: IS_SET ? $default : getMethod(KEYS),\n      entries: $entries\n    };\n    if (FORCED) for (key in methods) {\n      if (!(key in proto)) redefine(proto, key, methods[key]);\n    } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n  }\n  return methods;\n};\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/modules/_iter-define.js?");

/***/ }),

/***/ "./node_modules/core-js/library/modules/_iter-detect.js":
/*!**************************************************************!*\
  !*** ./node_modules/core-js/library/modules/_iter-detect.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var ITERATOR = __webpack_require__(/*! ./_wks */ \"./node_modules/core-js/library/modules/_wks.js\")('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n  var riter = [7][ITERATOR]();\n  riter['return'] = function () { SAFE_CLOSING = true; };\n  // eslint-disable-next-line no-throw-literal\n  Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n  if (!skipClosing && !SAFE_CLOSING) return false;\n  var safe = false;\n  try {\n    var arr = [7];\n    var iter = arr[ITERATOR]();\n    iter.next = function () { return { done: safe = true }; };\n    arr[ITERATOR] = function () { return iter; };\n    exec(arr);\n  } catch (e) { /* empty */ }\n  return safe;\n};\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/modules/_iter-detect.js?");

/***/ }),

/***/ "./node_modules/core-js/library/modules/_iter-step.js":
/*!************************************************************!*\
  !*** ./node_modules/core-js/library/modules/_iter-step.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("module.exports = function (done, value) {\n  return { value: value, done: !!done };\n};\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/modules/_iter-step.js?");

/***/ }),

/***/ "./node_modules/core-js/library/modules/_iterators.js":
/*!************************************************************!*\
  !*** ./node_modules/core-js/library/modules/_iterators.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("module.exports = {};\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/modules/_iterators.js?");

/***/ }),

/***/ "./node_modules/core-js/library/modules/_library.js":
/*!**********************************************************!*\
  !*** ./node_modules/core-js/library/modules/_library.js ***!
  \**********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("module.exports = true;\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/modules/_library.js?");

/***/ }),

/***/ "./node_modules/core-js/library/modules/_meta.js":
/*!*******************************************************!*\
  !*** ./node_modules/core-js/library/modules/_meta.js ***!
  \*******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var META = __webpack_require__(/*! ./_uid */ \"./node_modules/core-js/library/modules/_uid.js\")('meta');\nvar isObject = __webpack_require__(/*! ./_is-object */ \"./node_modules/core-js/library/modules/_is-object.js\");\nvar has = __webpack_require__(/*! ./_has */ \"./node_modules/core-js/library/modules/_has.js\");\nvar setDesc = __webpack_require__(/*! ./_object-dp */ \"./node_modules/core-js/library/modules/_object-dp.js\").f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n  return true;\n};\nvar FREEZE = !__webpack_require__(/*! ./_fails */ \"./node_modules/core-js/library/modules/_fails.js\")(function () {\n  return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n  setDesc(it, META, { value: {\n    i: 'O' + ++id, // object ID\n    w: {}          // weak collections IDs\n  } });\n};\nvar fastKey = function (it, create) {\n  // return primitive with prefix\n  if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n  if (!has(it, META)) {\n    // can't set metadata to uncaught frozen object\n    if (!isExtensible(it)) return 'F';\n    // not necessary to add metadata\n    if (!create) return 'E';\n    // add missing metadata\n    setMeta(it);\n  // return object ID\n  } return it[META].i;\n};\nvar getWeak = function (it, create) {\n  if (!has(it, META)) {\n    // can't set metadata to uncaught frozen object\n    if (!isExtensible(it)) return true;\n    // not necessary to add metadata\n    if (!create) return false;\n    // add missing metadata\n    setMeta(it);\n  // return hash weak collections IDs\n  } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n  if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n  return it;\n};\nvar meta = module.exports = {\n  KEY: META,\n  NEED: false,\n  fastKey: fastKey,\n  getWeak: getWeak,\n  onFreeze: onFreeze\n};\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/modules/_meta.js?");

/***/ }),

/***/ "./node_modules/core-js/library/modules/_microtask.js":
/*!************************************************************!*\
  !*** ./node_modules/core-js/library/modules/_microtask.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var global = __webpack_require__(/*! ./_global */ \"./node_modules/core-js/library/modules/_global.js\");\nvar macrotask = __webpack_require__(/*! ./_task */ \"./node_modules/core-js/library/modules/_task.js\").set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = __webpack_require__(/*! ./_cof */ \"./node_modules/core-js/library/modules/_cof.js\")(process) == 'process';\n\nmodule.exports = function () {\n  var head, last, notify;\n\n  var flush = function () {\n    var parent, fn;\n    if (isNode && (parent = process.domain)) parent.exit();\n    while (head) {\n      fn = head.fn;\n      head = head.next;\n      try {\n        fn();\n      } catch (e) {\n        if (head) notify();\n        else last = undefined;\n        throw e;\n      }\n    } last = undefined;\n    if (parent) parent.enter();\n  };\n\n  // Node.js\n  if (isNode) {\n    notify = function () {\n      process.nextTick(flush);\n    };\n  // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n  } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n    var toggle = true;\n    var node = document.createTextNode('');\n    new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n    notify = function () {\n      node.data = toggle = !toggle;\n    };\n  // environments with maybe non-completely correct, but existent Promise\n  } else if (Promise && Promise.resolve) {\n    // Promise.resolve without an argument throws an error in LG WebOS 2\n    var promise = Promise.resolve(undefined);\n    notify = function () {\n      promise.then(flush);\n    };\n  // for other environments - macrotask based on:\n  // - setImmediate\n  // - MessageChannel\n  // - window.postMessag\n  // - onreadystatechange\n  // - setTimeout\n  } else {\n    notify = function () {\n      // strange IE + webpack dev server bug - use .call(global)\n      macrotask.call(global, flush);\n    };\n  }\n\n  return function (fn) {\n    var task = { fn: fn, next: undefined };\n    if (last) last.next = task;\n    if (!head) {\n      head = task;\n      notify();\n    } last = task;\n  };\n};\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/modules/_microtask.js?");

/***/ }),

/***/ "./node_modules/core-js/library/modules/_new-promise-capability.js":
/*!*************************************************************************!*\
  !*** ./node_modules/core-js/library/modules/_new-promise-capability.js ***!
  \*************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = __webpack_require__(/*! ./_a-function */ \"./node_modules/core-js/library/modules/_a-function.js\");\n\nfunction PromiseCapability(C) {\n  var resolve, reject;\n  this.promise = new C(function ($$resolve, $$reject) {\n    if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n    resolve = $$resolve;\n    reject = $$reject;\n  });\n  this.resolve = aFunction(resolve);\n  this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n  return new PromiseCapability(C);\n};\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/modules/_new-promise-capability.js?");

/***/ }),

/***/ "./node_modules/core-js/library/modules/_object-assign.js":
/*!****************************************************************!*\
  !*** ./node_modules/core-js/library/modules/_object-assign.js ***!
  \****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\n// 19.1.2.1 Object.assign(target, source, ...)\nvar getKeys = __webpack_require__(/*! ./_object-keys */ \"./node_modules/core-js/library/modules/_object-keys.js\");\nvar gOPS = __webpack_require__(/*! ./_object-gops */ \"./node_modules/core-js/library/modules/_object-gops.js\");\nvar pIE = __webpack_require__(/*! ./_object-pie */ \"./node_modules/core-js/library/modules/_object-pie.js\");\nvar toObject = __webpack_require__(/*! ./_to-object */ \"./node_modules/core-js/library/modules/_to-object.js\");\nvar IObject = __webpack_require__(/*! ./_iobject */ \"./node_modules/core-js/library/modules/_iobject.js\");\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || __webpack_require__(/*! ./_fails */ \"./node_modules/core-js/library/modules/_fails.js\")(function () {\n  var A = {};\n  var B = {};\n  // eslint-disable-next-line no-undef\n  var S = Symbol();\n  var K = 'abcdefghijklmnopqrst';\n  A[S] = 7;\n  K.split('').forEach(function (k) { B[k] = k; });\n  return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n  var T = toObject(target);\n  var aLen = arguments.length;\n  var index = 1;\n  var getSymbols = gOPS.f;\n  var isEnum = pIE.f;\n  while (aLen > index) {\n    var S = IObject(arguments[index++]);\n    var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n    var length = keys.length;\n    var j = 0;\n    var key;\n    while (length > j) if (isEnum.call(S, key = keys[j++])) T[key] = S[key];\n  } return T;\n} : $assign;\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/modules/_object-assign.js?");

/***/ }),

/***/ "./node_modules/core-js/library/modules/_object-create.js":
/*!****************************************************************!*\
  !*** ./node_modules/core-js/library/modules/_object-create.js ***!
  \****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = __webpack_require__(/*! ./_an-object */ \"./node_modules/core-js/library/modules/_an-object.js\");\nvar dPs = __webpack_require__(/*! ./_object-dps */ \"./node_modules/core-js/library/modules/_object-dps.js\");\nvar enumBugKeys = __webpack_require__(/*! ./_enum-bug-keys */ \"./node_modules/core-js/library/modules/_enum-bug-keys.js\");\nvar IE_PROTO = __webpack_require__(/*! ./_shared-key */ \"./node_modules/core-js/library/modules/_shared-key.js\")('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n  // Thrash, waste and sodomy: IE GC bug\n  var iframe = __webpack_require__(/*! ./_dom-create */ \"./node_modules/core-js/library/modules/_dom-create.js\")('iframe');\n  var i = enumBugKeys.length;\n  var lt = '<';\n  var gt = '>';\n  var iframeDocument;\n  iframe.style.display = 'none';\n  __webpack_require__(/*! ./_html */ \"./node_modules/core-js/library/modules/_html.js\").appendChild(iframe);\n  iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n  // createDict = iframe.contentWindow.Object;\n  // html.removeChild(iframe);\n  iframeDocument = iframe.contentWindow.document;\n  iframeDocument.open();\n  iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n  iframeDocument.close();\n  createDict = iframeDocument.F;\n  while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n  return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n  var result;\n  if (O !== null) {\n    Empty[PROTOTYPE] = anObject(O);\n    result = new Empty();\n    Empty[PROTOTYPE] = null;\n    // add \"__proto__\" for Object.getPrototypeOf polyfill\n    result[IE_PROTO] = O;\n  } else result = createDict();\n  return Properties === undefined ? result : dPs(result, Properties);\n};\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/modules/_object-create.js?");

/***/ }),

/***/ "./node_modules/core-js/library/modules/_object-dp.js":
/*!************************************************************!*\
  !*** ./node_modules/core-js/library/modules/_object-dp.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var anObject = __webpack_require__(/*! ./_an-object */ \"./node_modules/core-js/library/modules/_an-object.js\");\nvar IE8_DOM_DEFINE = __webpack_require__(/*! ./_ie8-dom-define */ \"./node_modules/core-js/library/modules/_ie8-dom-define.js\");\nvar toPrimitive = __webpack_require__(/*! ./_to-primitive */ \"./node_modules/core-js/library/modules/_to-primitive.js\");\nvar dP = Object.defineProperty;\n\nexports.f = __webpack_require__(/*! ./_descriptors */ \"./node_modules/core-js/library/modules/_descriptors.js\") ? 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//# sourceURL=webpack:///./node_modules/core-js/library/modules/_object-dp.js?");

/***/ }),

/***/ "./node_modules/core-js/library/modules/_object-dps.js":
/*!*************************************************************!*\
  !*** ./node_modules/core-js/library/modules/_object-dps.js ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var dP = __webpack_require__(/*! ./_object-dp */ \"./node_modules/core-js/library/modules/_object-dp.js\");\nvar anObject = __webpack_require__(/*! ./_an-object */ \"./node_modules/core-js/library/modules/_an-object.js\");\nvar getKeys = __webpack_require__(/*! ./_object-keys */ \"./node_modules/core-js/library/modules/_object-keys.js\");\n\nmodule.exports = __webpack_require__(/*! ./_descriptors */ \"./node_modules/core-js/library/modules/_descriptors.js\") ? Object.defineProperties : function defineProperties(O, Properties) {\n  anObject(O);\n  var keys = getKeys(Properties);\n  var length = keys.length;\n  var i = 0;\n  var P;\n  while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n  return O;\n};\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/modules/_object-dps.js?");

/***/ }),

/***/ "./node_modules/core-js/library/modules/_object-gopd.js":
/*!**************************************************************!*\
  !*** ./node_modules/core-js/library/modules/_object-gopd.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var pIE = __webpack_require__(/*! ./_object-pie */ \"./node_modules/core-js/library/modules/_object-pie.js\");\nvar createDesc = __webpack_require__(/*! ./_property-desc */ \"./node_modules/core-js/library/modules/_property-desc.js\");\nvar toIObject = __webpack_require__(/*! ./_to-iobject */ \"./node_modules/core-js/library/modules/_to-iobject.js\");\nvar toPrimitive = __webpack_require__(/*! ./_to-primitive */ \"./node_modules/core-js/library/modules/_to-primitive.js\");\nvar has = __webpack_require__(/*! ./_has */ \"./node_modules/core-js/library/modules/_has.js\");\nvar IE8_DOM_DEFINE = __webpack_require__(/*! ./_ie8-dom-define */ \"./node_modules/core-js/library/modules/_ie8-dom-define.js\");\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = __webpack_require__(/*! ./_descriptors */ \"./node_modules/core-js/library/modules/_descriptors.js\") ? gOPD : function getOwnPropertyDescriptor(O, P) {\n  O = toIObject(O);\n  P = toPrimitive(P, true);\n  if (IE8_DOM_DEFINE) try {\n    return gOPD(O, P);\n  } catch (e) { /* empty */ }\n  if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/modules/_object-gopd.js?");

/***/ }),

/***/ "./node_modules/core-js/library/modules/_object-gopn-ext.js":
/*!******************************************************************!*\
  !*** ./node_modules/core-js/library/modules/_object-gopn-ext.js ***!
  \******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = __webpack_require__(/*! ./_to-iobject */ \"./node_modules/core-js/library/modules/_to-iobject.js\");\nvar gOPN = __webpack_require__(/*! ./_object-gopn */ \"./node_modules/core-js/library/modules/_object-gopn.js\").f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n  ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n  try {\n    return gOPN(it);\n  } catch (e) {\n    return windowNames.slice();\n  }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n  return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/modules/_object-gopn-ext.js?");

/***/ }),

/***/ "./node_modules/core-js/library/modules/_object-gopn.js":
/*!**************************************************************!*\
  !*** ./node_modules/core-js/library/modules/_object-gopn.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = __webpack_require__(/*! ./_object-keys-internal */ \"./node_modules/core-js/library/modules/_object-keys-internal.js\");\nvar hiddenKeys = __webpack_require__(/*! ./_enum-bug-keys */ \"./node_modules/core-js/library/modules/_enum-bug-keys.js\").concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n  return $keys(O, hiddenKeys);\n};\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/modules/_object-gopn.js?");

/***/ }),

/***/ "./node_modules/core-js/library/modules/_object-gops.js":
/*!**************************************************************!*\
  !*** ./node_modules/core-js/library/modules/_object-gops.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("exports.f = Object.getOwnPropertySymbols;\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/modules/_object-gops.js?");

/***/ }),

/***/ "./node_modules/core-js/library/modules/_object-gpo.js":
/*!*************************************************************!*\
  !*** ./node_modules/core-js/library/modules/_object-gpo.js ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = __webpack_require__(/*! ./_has */ \"./node_modules/core-js/library/modules/_has.js\");\nvar toObject = __webpack_require__(/*! ./_to-object */ \"./node_modules/core-js/library/modules/_to-object.js\");\nvar IE_PROTO = __webpack_require__(/*! ./_shared-key */ \"./node_modules/core-js/library/modules/_shared-key.js\")('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n  O = toObject(O);\n  if (has(O, IE_PROTO)) return O[IE_PROTO];\n  if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n    return O.constructor.prototype;\n  } return O instanceof Object ? ObjectProto : null;\n};\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/modules/_object-gpo.js?");

/***/ }),

/***/ "./node_modules/core-js/library/modules/_object-keys-internal.js":
/*!***********************************************************************!*\
  !*** ./node_modules/core-js/library/modules/_object-keys-internal.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var has = __webpack_require__(/*! ./_has */ \"./node_modules/core-js/library/modules/_has.js\");\nvar toIObject = __webpack_require__(/*! ./_to-iobject */ \"./node_modules/core-js/library/modules/_to-iobject.js\");\nvar arrayIndexOf = __webpack_require__(/*! ./_array-includes */ \"./node_modules/core-js/library/modules/_array-includes.js\")(false);\nvar IE_PROTO = __webpack_require__(/*! ./_shared-key */ \"./node_modules/core-js/library/modules/_shared-key.js\")('IE_PROTO');\n\nmodule.exports = function (object, names) {\n  var O = toIObject(object);\n  var i = 0;\n  var result = [];\n  var key;\n  for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n  // Don't enum bug & hidden keys\n  while (names.length > i) if (has(O, key = names[i++])) {\n    ~arrayIndexOf(result, key) || result.push(key);\n  }\n  return result;\n};\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/modules/_object-keys-internal.js?");

/***/ }),

/***/ "./node_modules/core-js/library/modules/_object-keys.js":
/*!**************************************************************!*\
  !*** ./node_modules/core-js/library/modules/_object-keys.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = __webpack_require__(/*! ./_object-keys-internal */ \"./node_modules/core-js/library/modules/_object-keys-internal.js\");\nvar enumBugKeys = __webpack_require__(/*! ./_enum-bug-keys */ \"./node_modules/core-js/library/modules/_enum-bug-keys.js\");\n\nmodule.exports = Object.keys || function keys(O) {\n  return $keys(O, enumBugKeys);\n};\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/modules/_object-keys.js?");

/***/ }),

/***/ "./node_modules/core-js/library/modules/_object-pie.js":
/*!*************************************************************!*\
  !*** ./node_modules/core-js/library/modules/_object-pie.js ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("exports.f = {}.propertyIsEnumerable;\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/modules/_object-pie.js?");

/***/ }),

/***/ "./node_modules/core-js/library/modules/_object-sap.js":
/*!*************************************************************!*\
  !*** ./node_modules/core-js/library/modules/_object-sap.js ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("// most Object methods by ES6 should accept primitives\nvar $export = __webpack_require__(/*! ./_export */ \"./node_modules/core-js/library/modules/_export.js\");\nvar core = __webpack_require__(/*! ./_core */ \"./node_modules/core-js/library/modules/_core.js\");\nvar fails = __webpack_require__(/*! ./_fails */ \"./node_modules/core-js/library/modules/_fails.js\");\nmodule.exports = function (KEY, exec) {\n  var fn = (core.Object || {})[KEY] || Object[KEY];\n  var exp = {};\n  exp[KEY] = exec(fn);\n  $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/modules/_object-sap.js?");

/***/ }),

/***/ "./node_modules/core-js/library/modules/_perform.js":
/*!**********************************************************!*\
  !*** ./node_modules/core-js/library/modules/_perform.js ***!
  \**********************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("module.exports = function (exec) {\n  try {\n    return { e: false, v: exec() };\n  } catch (e) {\n    return { e: true, v: e };\n  }\n};\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/modules/_perform.js?");

/***/ }),

/***/ "./node_modules/core-js/library/modules/_promise-resolve.js":
/*!******************************************************************!*\
  !*** ./node_modules/core-js/library/modules/_promise-resolve.js ***!
  \******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var anObject = __webpack_require__(/*! ./_an-object */ \"./node_modules/core-js/library/modules/_an-object.js\");\nvar isObject = __webpack_require__(/*! ./_is-object */ \"./node_modules/core-js/library/modules/_is-object.js\");\nvar newPromiseCapability = __webpack_require__(/*! ./_new-promise-capability */ \"./node_modules/core-js/library/modules/_new-promise-capability.js\");\n\nmodule.exports = function (C, x) {\n  anObject(C);\n  if (isObject(x) && x.constructor === C) return x;\n  var promiseCapability = newPromiseCapability.f(C);\n  var resolve = promiseCapability.resolve;\n  resolve(x);\n  return promiseCapability.promise;\n};\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/modules/_promise-resolve.js?");

/***/ }),

/***/ "./node_modules/core-js/library/modules/_property-desc.js":
/*!****************************************************************!*\
  !*** ./node_modules/core-js/library/modules/_property-desc.js ***!
  \****************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("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//# sourceURL=webpack:///./node_modules/core-js/library/modules/_property-desc.js?");

/***/ }),

/***/ "./node_modules/core-js/library/modules/_redefine-all.js":
/*!***************************************************************!*\
  !*** ./node_modules/core-js/library/modules/_redefine-all.js ***!
  \***************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var hide = __webpack_require__(/*! ./_hide */ \"./node_modules/core-js/library/modules/_hide.js\");\nmodule.exports = function (target, src, safe) {\n  for (var key in src) {\n    if (safe && target[key]) target[key] = src[key];\n    else hide(target, key, src[key]);\n  } return target;\n};\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/modules/_redefine-all.js?");

/***/ }),

/***/ "./node_modules/core-js/library/modules/_redefine.js":
/*!***********************************************************!*\
  !*** ./node_modules/core-js/library/modules/_redefine.js ***!
  \***********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("module.exports = __webpack_require__(/*! ./_hide */ \"./node_modules/core-js/library/modules/_hide.js\");\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/modules/_redefine.js?");

/***/ }),

/***/ "./node_modules/core-js/library/modules/_set-proto.js":
/*!************************************************************!*\
  !*** ./node_modules/core-js/library/modules/_set-proto.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = __webpack_require__(/*! ./_is-object */ \"./node_modules/core-js/library/modules/_is-object.js\");\nvar anObject = __webpack_require__(/*! ./_an-object */ \"./node_modules/core-js/library/modules/_an-object.js\");\nvar check = function (O, proto) {\n  anObject(O);\n  if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n  set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n    function (test, buggy, set) {\n      try {\n        set = __webpack_require__(/*! ./_ctx */ \"./node_modules/core-js/library/modules/_ctx.js\")(Function.call, __webpack_require__(/*! ./_object-gopd */ \"./node_modules/core-js/library/modules/_object-gopd.js\").f(Object.prototype, '__proto__').set, 2);\n        set(test, []);\n        buggy = !(test instanceof Array);\n      } catch (e) { buggy = true; }\n      return function setPrototypeOf(O, proto) {\n        check(O, proto);\n        if (buggy) O.__proto__ = proto;\n        else set(O, proto);\n        return O;\n      };\n    }({}, false) : undefined),\n  check: check\n};\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/modules/_set-proto.js?");

/***/ }),

/***/ "./node_modules/core-js/library/modules/_set-species.js":
/*!**************************************************************!*\
  !*** ./node_modules/core-js/library/modules/_set-species.js ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\nvar global = __webpack_require__(/*! ./_global */ \"./node_modules/core-js/library/modules/_global.js\");\nvar core = __webpack_require__(/*! ./_core */ \"./node_modules/core-js/library/modules/_core.js\");\nvar dP = __webpack_require__(/*! ./_object-dp */ \"./node_modules/core-js/library/modules/_object-dp.js\");\nvar DESCRIPTORS = __webpack_require__(/*! ./_descriptors */ \"./node_modules/core-js/library/modules/_descriptors.js\");\nvar SPECIES = __webpack_require__(/*! ./_wks */ \"./node_modules/core-js/library/modules/_wks.js\")('species');\n\nmodule.exports = function (KEY) {\n  var C = typeof core[KEY] == 'function' ? core[KEY] : global[KEY];\n  if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n    configurable: true,\n    get: function () { return this; }\n  });\n};\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/modules/_set-species.js?");

/***/ }),

/***/ "./node_modules/core-js/library/modules/_set-to-string-tag.js":
/*!********************************************************************!*\
  !*** ./node_modules/core-js/library/modules/_set-to-string-tag.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var def = __webpack_require__(/*! ./_object-dp */ \"./node_modules/core-js/library/modules/_object-dp.js\").f;\nvar has = __webpack_require__(/*! ./_has */ \"./node_modules/core-js/library/modules/_has.js\");\nvar TAG = __webpack_require__(/*! ./_wks */ \"./node_modules/core-js/library/modules/_wks.js\")('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n  if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/modules/_set-to-string-tag.js?");

/***/ }),

/***/ "./node_modules/core-js/library/modules/_shared-key.js":
/*!*************************************************************!*\
  !*** ./node_modules/core-js/library/modules/_shared-key.js ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var shared = __webpack_require__(/*! ./_shared */ \"./node_modules/core-js/library/modules/_shared.js\")('keys');\nvar uid = __webpack_require__(/*! ./_uid */ \"./node_modules/core-js/library/modules/_uid.js\");\nmodule.exports = function (key) {\n  return shared[key] || (shared[key] = uid(key));\n};\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/modules/_shared-key.js?");

/***/ }),

/***/ "./node_modules/core-js/library/modules/_shared.js":
/*!*********************************************************!*\
  !*** ./node_modules/core-js/library/modules/_shared.js ***!
  \*********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var core = __webpack_require__(/*! ./_core */ \"./node_modules/core-js/library/modules/_core.js\");\nvar global = __webpack_require__(/*! ./_global */ \"./node_modules/core-js/library/modules/_global.js\");\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\n\n(module.exports = function (key, value) {\n  return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n  version: core.version,\n  mode: __webpack_require__(/*! ./_library */ \"./node_modules/core-js/library/modules/_library.js\") ? 'pure' : 'global',\n  copyright: '© 2018 Denis Pushkarev (zloirock.ru)'\n});\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/modules/_shared.js?");

/***/ }),

/***/ "./node_modules/core-js/library/modules/_species-constructor.js":
/*!**********************************************************************!*\
  !*** ./node_modules/core-js/library/modules/_species-constructor.js ***!
  \**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = __webpack_require__(/*! ./_an-object */ \"./node_modules/core-js/library/modules/_an-object.js\");\nvar aFunction = __webpack_require__(/*! ./_a-function */ \"./node_modules/core-js/library/modules/_a-function.js\");\nvar SPECIES = __webpack_require__(/*! ./_wks */ \"./node_modules/core-js/library/modules/_wks.js\")('species');\nmodule.exports = function (O, D) {\n  var C = anObject(O).constructor;\n  var S;\n  return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/modules/_species-constructor.js?");

/***/ }),

/***/ "./node_modules/core-js/library/modules/_string-at.js":
/*!************************************************************!*\
  !*** ./node_modules/core-js/library/modules/_string-at.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var toInteger = __webpack_require__(/*! ./_to-integer */ \"./node_modules/core-js/library/modules/_to-integer.js\");\nvar defined = __webpack_require__(/*! ./_defined */ \"./node_modules/core-js/library/modules/_defined.js\");\n// true  -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n  return function (that, pos) {\n    var s = String(defined(that));\n    var i = toInteger(pos);\n    var l = s.length;\n    var a, b;\n    if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n    a = s.charCodeAt(i);\n    return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n      ? TO_STRING ? s.charAt(i) : a\n      : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n  };\n};\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/modules/_string-at.js?");

/***/ }),

/***/ "./node_modules/core-js/library/modules/_task.js":
/*!*******************************************************!*\
  !*** ./node_modules/core-js/library/modules/_task.js ***!
  \*******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var ctx = __webpack_require__(/*! ./_ctx */ \"./node_modules/core-js/library/modules/_ctx.js\");\nvar invoke = __webpack_require__(/*! ./_invoke */ \"./node_modules/core-js/library/modules/_invoke.js\");\nvar html = __webpack_require__(/*! ./_html */ \"./node_modules/core-js/library/modules/_html.js\");\nvar cel = __webpack_require__(/*! ./_dom-create */ \"./node_modules/core-js/library/modules/_dom-create.js\");\nvar global = __webpack_require__(/*! ./_global */ \"./node_modules/core-js/library/modules/_global.js\");\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n  var id = +this;\n  // eslint-disable-next-line no-prototype-builtins\n  if (queue.hasOwnProperty(id)) {\n    var fn = queue[id];\n    delete queue[id];\n    fn();\n  }\n};\nvar listener = function (event) {\n  run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n  setTask = function setImmediate(fn) {\n    var args = [];\n    var i = 1;\n    while (arguments.length > i) args.push(arguments[i++]);\n    queue[++counter] = function () {\n      // eslint-disable-next-line no-new-func\n      invoke(typeof fn == 'function' ? fn : Function(fn), args);\n    };\n    defer(counter);\n    return counter;\n  };\n  clearTask = function clearImmediate(id) {\n    delete queue[id];\n  };\n  // Node.js 0.8-\n  if (__webpack_require__(/*! ./_cof */ \"./node_modules/core-js/library/modules/_cof.js\")(process) == 'process') {\n    defer = function (id) {\n      process.nextTick(ctx(run, id, 1));\n    };\n  // Sphere (JS game engine) Dispatch API\n  } else if (Dispatch && Dispatch.now) {\n    defer = function (id) {\n      Dispatch.now(ctx(run, id, 1));\n    };\n  // Browsers with MessageChannel, includes WebWorkers\n  } else if (MessageChannel) {\n    channel = new MessageChannel();\n    port = channel.port2;\n    channel.port1.onmessage = listener;\n    defer = ctx(port.postMessage, port, 1);\n  // Browsers with postMessage, skip WebWorkers\n  // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n  } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n    defer = function (id) {\n      global.postMessage(id + '', '*');\n    };\n    global.addEventListener('message', listener, false);\n  // IE8-\n  } else if (ONREADYSTATECHANGE in cel('script')) {\n    defer = function (id) {\n      html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n        html.removeChild(this);\n        run.call(id);\n      };\n    };\n  // Rest old browsers\n  } else {\n    defer = function (id) {\n      setTimeout(ctx(run, id, 1), 0);\n    };\n  }\n}\nmodule.exports = {\n  set: setTask,\n  clear: clearTask\n};\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/modules/_task.js?");

/***/ }),

/***/ "./node_modules/core-js/library/modules/_to-absolute-index.js":
/*!********************************************************************!*\
  !*** ./node_modules/core-js/library/modules/_to-absolute-index.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var toInteger = __webpack_require__(/*! ./_to-integer */ \"./node_modules/core-js/library/modules/_to-integer.js\");\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n  index = toInteger(index);\n  return index < 0 ? max(index + length, 0) : min(index, length);\n};\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/modules/_to-absolute-index.js?");

/***/ }),

/***/ "./node_modules/core-js/library/modules/_to-integer.js":
/*!*************************************************************!*\
  !*** ./node_modules/core-js/library/modules/_to-integer.js ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n  return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/modules/_to-integer.js?");

/***/ }),

/***/ "./node_modules/core-js/library/modules/_to-iobject.js":
/*!*************************************************************!*\
  !*** ./node_modules/core-js/library/modules/_to-iobject.js ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = __webpack_require__(/*! ./_iobject */ \"./node_modules/core-js/library/modules/_iobject.js\");\nvar defined = __webpack_require__(/*! ./_defined */ \"./node_modules/core-js/library/modules/_defined.js\");\nmodule.exports = function (it) {\n  return IObject(defined(it));\n};\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/modules/_to-iobject.js?");

/***/ }),

/***/ "./node_modules/core-js/library/modules/_to-length.js":
/*!************************************************************!*\
  !*** ./node_modules/core-js/library/modules/_to-length.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("// 7.1.15 ToLength\nvar toInteger = __webpack_require__(/*! ./_to-integer */ \"./node_modules/core-js/library/modules/_to-integer.js\");\nvar min = Math.min;\nmodule.exports = function (it) {\n  return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/modules/_to-length.js?");

/***/ }),

/***/ "./node_modules/core-js/library/modules/_to-object.js":
/*!************************************************************!*\
  !*** ./node_modules/core-js/library/modules/_to-object.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("// 7.1.13 ToObject(argument)\nvar defined = __webpack_require__(/*! ./_defined */ \"./node_modules/core-js/library/modules/_defined.js\");\nmodule.exports = function (it) {\n  return Object(defined(it));\n};\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/modules/_to-object.js?");

/***/ }),

/***/ "./node_modules/core-js/library/modules/_to-primitive.js":
/*!***************************************************************!*\
  !*** ./node_modules/core-js/library/modules/_to-primitive.js ***!
  \***************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = __webpack_require__(/*! ./_is-object */ \"./node_modules/core-js/library/modules/_is-object.js\");\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//# sourceURL=webpack:///./node_modules/core-js/library/modules/_to-primitive.js?");

/***/ }),

/***/ "./node_modules/core-js/library/modules/_uid.js":
/*!******************************************************!*\
  !*** ./node_modules/core-js/library/modules/_uid.js ***!
  \******************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n  return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/modules/_uid.js?");

/***/ }),

/***/ "./node_modules/core-js/library/modules/_user-agent.js":
/*!*************************************************************!*\
  !*** ./node_modules/core-js/library/modules/_user-agent.js ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var global = __webpack_require__(/*! ./_global */ \"./node_modules/core-js/library/modules/_global.js\");\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/modules/_user-agent.js?");

/***/ }),

/***/ "./node_modules/core-js/library/modules/_wks-define.js":
/*!*************************************************************!*\
  !*** ./node_modules/core-js/library/modules/_wks-define.js ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var global = __webpack_require__(/*! ./_global */ \"./node_modules/core-js/library/modules/_global.js\");\nvar core = __webpack_require__(/*! ./_core */ \"./node_modules/core-js/library/modules/_core.js\");\nvar LIBRARY = __webpack_require__(/*! ./_library */ \"./node_modules/core-js/library/modules/_library.js\");\nvar wksExt = __webpack_require__(/*! ./_wks-ext */ \"./node_modules/core-js/library/modules/_wks-ext.js\");\nvar defineProperty = __webpack_require__(/*! ./_object-dp */ \"./node_modules/core-js/library/modules/_object-dp.js\").f;\nmodule.exports = function (name) {\n  var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n  if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/modules/_wks-define.js?");

/***/ }),

/***/ "./node_modules/core-js/library/modules/_wks-ext.js":
/*!**********************************************************!*\
  !*** ./node_modules/core-js/library/modules/_wks-ext.js ***!
  \**********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("exports.f = __webpack_require__(/*! ./_wks */ \"./node_modules/core-js/library/modules/_wks.js\");\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/modules/_wks-ext.js?");

/***/ }),

/***/ "./node_modules/core-js/library/modules/_wks.js":
/*!******************************************************!*\
  !*** ./node_modules/core-js/library/modules/_wks.js ***!
  \******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var store = __webpack_require__(/*! ./_shared */ \"./node_modules/core-js/library/modules/_shared.js\")('wks');\nvar uid = __webpack_require__(/*! ./_uid */ \"./node_modules/core-js/library/modules/_uid.js\");\nvar Symbol = __webpack_require__(/*! ./_global */ \"./node_modules/core-js/library/modules/_global.js\").Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n  return store[name] || (store[name] =\n    USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/modules/_wks.js?");

/***/ }),

/***/ "./node_modules/core-js/library/modules/core.get-iterator-method.js":
/*!**************************************************************************!*\
  !*** ./node_modules/core-js/library/modules/core.get-iterator-method.js ***!
  \**************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var classof = __webpack_require__(/*! ./_classof */ \"./node_modules/core-js/library/modules/_classof.js\");\nvar ITERATOR = __webpack_require__(/*! ./_wks */ \"./node_modules/core-js/library/modules/_wks.js\")('iterator');\nvar Iterators = __webpack_require__(/*! ./_iterators */ \"./node_modules/core-js/library/modules/_iterators.js\");\nmodule.exports = __webpack_require__(/*! ./_core */ \"./node_modules/core-js/library/modules/_core.js\").getIteratorMethod = function (it) {\n  if (it != undefined) return it[ITERATOR]\n    || it['@@iterator']\n    || Iterators[classof(it)];\n};\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/modules/core.get-iterator-method.js?");

/***/ }),

/***/ "./node_modules/core-js/library/modules/es6.array.iterator.js":
/*!********************************************************************!*\
  !*** ./node_modules/core-js/library/modules/es6.array.iterator.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\nvar addToUnscopables = __webpack_require__(/*! ./_add-to-unscopables */ \"./node_modules/core-js/library/modules/_add-to-unscopables.js\");\nvar step = __webpack_require__(/*! ./_iter-step */ \"./node_modules/core-js/library/modules/_iter-step.js\");\nvar Iterators = __webpack_require__(/*! ./_iterators */ \"./node_modules/core-js/library/modules/_iterators.js\");\nvar toIObject = __webpack_require__(/*! ./_to-iobject */ \"./node_modules/core-js/library/modules/_to-iobject.js\");\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = __webpack_require__(/*! ./_iter-define */ \"./node_modules/core-js/library/modules/_iter-define.js\")(Array, 'Array', function (iterated, kind) {\n  this._t = toIObject(iterated); // target\n  this._i = 0;                   // next index\n  this._k = kind;                // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n  var O = this._t;\n  var kind = this._k;\n  var index = this._i++;\n  if (!O || index >= O.length) {\n    this._t = undefined;\n    return step(1);\n  }\n  if (kind == 'keys') return step(0, index);\n  if (kind == 'values') return step(0, O[index]);\n  return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/modules/es6.array.iterator.js?");

/***/ }),

/***/ "./node_modules/core-js/library/modules/es6.object.assign.js":
/*!*******************************************************************!*\
  !*** ./node_modules/core-js/library/modules/es6.object.assign.js ***!
  \*******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("// 19.1.3.1 Object.assign(target, source)\nvar $export = __webpack_require__(/*! ./_export */ \"./node_modules/core-js/library/modules/_export.js\");\n\n$export($export.S + $export.F, 'Object', { assign: __webpack_require__(/*! ./_object-assign */ \"./node_modules/core-js/library/modules/_object-assign.js\") });\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/modules/es6.object.assign.js?");

/***/ }),

/***/ "./node_modules/core-js/library/modules/es6.object.create.js":
/*!*******************************************************************!*\
  !*** ./node_modules/core-js/library/modules/es6.object.create.js ***!
  \*******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var $export = __webpack_require__(/*! ./_export */ \"./node_modules/core-js/library/modules/_export.js\");\n// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\n$export($export.S, 'Object', { create: __webpack_require__(/*! ./_object-create */ \"./node_modules/core-js/library/modules/_object-create.js\") });\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/modules/es6.object.create.js?");

/***/ }),

/***/ "./node_modules/core-js/library/modules/es6.object.define-property.js":
/*!****************************************************************************!*\
  !*** ./node_modules/core-js/library/modules/es6.object.define-property.js ***!
  \****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var $export = __webpack_require__(/*! ./_export */ \"./node_modules/core-js/library/modules/_export.js\");\n// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)\n$export($export.S + $export.F * !__webpack_require__(/*! ./_descriptors */ \"./node_modules/core-js/library/modules/_descriptors.js\"), 'Object', { defineProperty: __webpack_require__(/*! ./_object-dp */ \"./node_modules/core-js/library/modules/_object-dp.js\").f });\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/modules/es6.object.define-property.js?");

/***/ }),

/***/ "./node_modules/core-js/library/modules/es6.object.get-prototype-of.js":
/*!*****************************************************************************!*\
  !*** ./node_modules/core-js/library/modules/es6.object.get-prototype-of.js ***!
  \*****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject = __webpack_require__(/*! ./_to-object */ \"./node_modules/core-js/library/modules/_to-object.js\");\nvar $getPrototypeOf = __webpack_require__(/*! ./_object-gpo */ \"./node_modules/core-js/library/modules/_object-gpo.js\");\n\n__webpack_require__(/*! ./_object-sap */ \"./node_modules/core-js/library/modules/_object-sap.js\")('getPrototypeOf', function () {\n  return function getPrototypeOf(it) {\n    return $getPrototypeOf(toObject(it));\n  };\n});\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/modules/es6.object.get-prototype-of.js?");

/***/ }),

/***/ "./node_modules/core-js/library/modules/es6.object.keys.js":
/*!*****************************************************************!*\
  !*** ./node_modules/core-js/library/modules/es6.object.keys.js ***!
  \*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("// 19.1.2.14 Object.keys(O)\nvar toObject = __webpack_require__(/*! ./_to-object */ \"./node_modules/core-js/library/modules/_to-object.js\");\nvar $keys = __webpack_require__(/*! ./_object-keys */ \"./node_modules/core-js/library/modules/_object-keys.js\");\n\n__webpack_require__(/*! ./_object-sap */ \"./node_modules/core-js/library/modules/_object-sap.js\")('keys', function () {\n  return function keys(it) {\n    return $keys(toObject(it));\n  };\n});\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/modules/es6.object.keys.js?");

/***/ }),

/***/ "./node_modules/core-js/library/modules/es6.object.set-prototype-of.js":
/*!*****************************************************************************!*\
  !*** ./node_modules/core-js/library/modules/es6.object.set-prototype-of.js ***!
  \*****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("// 19.1.3.19 Object.setPrototypeOf(O, proto)\nvar $export = __webpack_require__(/*! ./_export */ \"./node_modules/core-js/library/modules/_export.js\");\n$export($export.S, 'Object', { setPrototypeOf: __webpack_require__(/*! ./_set-proto */ \"./node_modules/core-js/library/modules/_set-proto.js\").set });\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/modules/es6.object.set-prototype-of.js?");

/***/ }),

/***/ "./node_modules/core-js/library/modules/es6.object.to-string.js":
/*!**********************************************************************!*\
  !*** ./node_modules/core-js/library/modules/es6.object.to-string.js ***!
  \**********************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("\n\n//# sourceURL=webpack:///./node_modules/core-js/library/modules/es6.object.to-string.js?");

/***/ }),

/***/ "./node_modules/core-js/library/modules/es6.promise.js":
/*!*************************************************************!*\
  !*** ./node_modules/core-js/library/modules/es6.promise.js ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\nvar LIBRARY = __webpack_require__(/*! ./_library */ \"./node_modules/core-js/library/modules/_library.js\");\nvar global = __webpack_require__(/*! ./_global */ \"./node_modules/core-js/library/modules/_global.js\");\nvar ctx = __webpack_require__(/*! ./_ctx */ \"./node_modules/core-js/library/modules/_ctx.js\");\nvar classof = __webpack_require__(/*! ./_classof */ \"./node_modules/core-js/library/modules/_classof.js\");\nvar $export = __webpack_require__(/*! ./_export */ \"./node_modules/core-js/library/modules/_export.js\");\nvar isObject = __webpack_require__(/*! ./_is-object */ \"./node_modules/core-js/library/modules/_is-object.js\");\nvar aFunction = __webpack_require__(/*! ./_a-function */ \"./node_modules/core-js/library/modules/_a-function.js\");\nvar anInstance = __webpack_require__(/*! ./_an-instance */ \"./node_modules/core-js/library/modules/_an-instance.js\");\nvar forOf = __webpack_require__(/*! ./_for-of */ \"./node_modules/core-js/library/modules/_for-of.js\");\nvar speciesConstructor = __webpack_require__(/*! ./_species-constructor */ \"./node_modules/core-js/library/modules/_species-constructor.js\");\nvar task = __webpack_require__(/*! ./_task */ \"./node_modules/core-js/library/modules/_task.js\").set;\nvar microtask = __webpack_require__(/*! ./_microtask */ \"./node_modules/core-js/library/modules/_microtask.js\")();\nvar newPromiseCapabilityModule = __webpack_require__(/*! ./_new-promise-capability */ \"./node_modules/core-js/library/modules/_new-promise-capability.js\");\nvar perform = __webpack_require__(/*! ./_perform */ \"./node_modules/core-js/library/modules/_perform.js\");\nvar userAgent = __webpack_require__(/*! ./_user-agent */ \"./node_modules/core-js/library/modules/_user-agent.js\");\nvar promiseResolve = __webpack_require__(/*! ./_promise-resolve */ \"./node_modules/core-js/library/modules/_promise-resolve.js\");\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar versions = process && process.versions;\nvar v8 = versions && versions.v8 || '';\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n  try {\n    // correct subclassing with @@species support\n    var promise = $Promise.resolve(1);\n    var FakePromise = (promise.constructor = {})[__webpack_require__(/*! ./_wks */ \"./node_modules/core-js/library/modules/_wks.js\")('species')] = function (exec) {\n      exec(empty, empty);\n    };\n    // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n    return (isNode || typeof PromiseRejectionEvent == 'function')\n      && promise.then(empty) instanceof FakePromise\n      // v8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables\n      // https://bugs.chromium.org/p/chromium/issues/detail?id=830565\n      // we can't detect it synchronously, so just check versions\n      && v8.indexOf('6.6') !== 0\n      && userAgent.indexOf('Chrome/66') === -1;\n  } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n  var then;\n  return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n  if (promise._n) return;\n  promise._n = true;\n  var chain = promise._c;\n  microtask(function () {\n    var value = promise._v;\n    var ok = promise._s == 1;\n    var i = 0;\n    var run = function (reaction) {\n      var handler = ok ? reaction.ok : reaction.fail;\n      var resolve = reaction.resolve;\n      var reject = reaction.reject;\n      var domain = reaction.domain;\n      var result, then, exited;\n      try {\n        if (handler) {\n          if (!ok) {\n            if (promise._h == 2) onHandleUnhandled(promise);\n            promise._h = 1;\n          }\n          if (handler === true) result = value;\n          else {\n            if (domain) domain.enter();\n            result = handler(value); // may throw\n            if (domain) {\n              domain.exit();\n              exited = true;\n            }\n          }\n          if (result === reaction.promise) {\n            reject(TypeError('Promise-chain cycle'));\n          } else if (then = isThenable(result)) {\n            then.call(result, resolve, reject);\n          } else resolve(result);\n        } else reject(value);\n      } catch (e) {\n        if (domain && !exited) domain.exit();\n        reject(e);\n      }\n    };\n    while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n    promise._c = [];\n    promise._n = false;\n    if (isReject && !promise._h) onUnhandled(promise);\n  });\n};\nvar onUnhandled = function (promise) {\n  task.call(global, function () {\n    var value = promise._v;\n    var unhandled = isUnhandled(promise);\n    var result, handler, console;\n    if (unhandled) {\n      result = perform(function () {\n        if (isNode) {\n          process.emit('unhandledRejection', value, promise);\n        } else if (handler = global.onunhandledrejection) {\n          handler({ promise: promise, reason: value });\n        } else if ((console = global.console) && console.error) {\n          console.error('Unhandled promise rejection', value);\n        }\n      });\n      // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n      promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n    } promise._a = undefined;\n    if (unhandled && result.e) throw result.v;\n  });\n};\nvar isUnhandled = function (promise) {\n  return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n  task.call(global, function () {\n    var handler;\n    if (isNode) {\n      process.emit('rejectionHandled', promise);\n    } else if (handler = global.onrejectionhandled) {\n      handler({ promise: promise, reason: promise._v });\n    }\n  });\n};\nvar $reject = function (value) {\n  var promise = this;\n  if (promise._d) return;\n  promise._d = true;\n  promise = promise._w || promise; // unwrap\n  promise._v = value;\n  promise._s = 2;\n  if (!promise._a) promise._a = promise._c.slice();\n  notify(promise, true);\n};\nvar $resolve = function (value) {\n  var promise = this;\n  var then;\n  if (promise._d) return;\n  promise._d = true;\n  promise = promise._w || promise; // unwrap\n  try {\n    if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n    if (then = isThenable(value)) {\n      microtask(function () {\n        var wrapper = { _w: promise, _d: false }; // wrap\n        try {\n          then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n        } catch (e) {\n          $reject.call(wrapper, e);\n        }\n      });\n    } else {\n      promise._v = value;\n      promise._s = 1;\n      notify(promise, false);\n    }\n  } catch (e) {\n    $reject.call({ _w: promise, _d: false }, e); // wrap\n  }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n  // 25.4.3.1 Promise(executor)\n  $Promise = function Promise(executor) {\n    anInstance(this, $Promise, PROMISE, '_h');\n    aFunction(executor);\n    Internal.call(this);\n    try {\n      executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n    } catch (err) {\n      $reject.call(this, err);\n    }\n  };\n  // eslint-disable-next-line no-unused-vars\n  Internal = function Promise(executor) {\n    this._c = [];             // <- awaiting reactions\n    this._a = undefined;      // <- checked in isUnhandled reactions\n    this._s = 0;              // <- state\n    this._d = false;          // <- done\n    this._v = undefined;      // <- value\n    this._h = 0;              // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n    this._n = false;          // <- notify\n  };\n  Internal.prototype = __webpack_require__(/*! ./_redefine-all */ \"./node_modules/core-js/library/modules/_redefine-all.js\")($Promise.prototype, {\n    // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n    then: function then(onFulfilled, onRejected) {\n      var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n      reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n      reaction.fail = typeof onRejected == 'function' && onRejected;\n      reaction.domain = isNode ? process.domain : undefined;\n      this._c.push(reaction);\n      if (this._a) this._a.push(reaction);\n      if (this._s) notify(this, false);\n      return reaction.promise;\n    },\n    // 25.4.5.1 Promise.prototype.catch(onRejected)\n    'catch': function (onRejected) {\n      return this.then(undefined, onRejected);\n    }\n  });\n  OwnPromiseCapability = function () {\n    var promise = new Internal();\n    this.promise = promise;\n    this.resolve = ctx($resolve, promise, 1);\n    this.reject = ctx($reject, promise, 1);\n  };\n  newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n    return C === $Promise || C === Wrapper\n      ? new OwnPromiseCapability(C)\n      : newGenericPromiseCapability(C);\n  };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\n__webpack_require__(/*! ./_set-to-string-tag */ \"./node_modules/core-js/library/modules/_set-to-string-tag.js\")($Promise, PROMISE);\n__webpack_require__(/*! ./_set-species */ \"./node_modules/core-js/library/modules/_set-species.js\")(PROMISE);\nWrapper = __webpack_require__(/*! ./_core */ \"./node_modules/core-js/library/modules/_core.js\")[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n  // 25.4.4.5 Promise.reject(r)\n  reject: function reject(r) {\n    var capability = newPromiseCapability(this);\n    var $$reject = capability.reject;\n    $$reject(r);\n    return capability.promise;\n  }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n  // 25.4.4.6 Promise.resolve(x)\n  resolve: function resolve(x) {\n    return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n  }\n});\n$export($export.S + $export.F * !(USE_NATIVE && __webpack_require__(/*! ./_iter-detect */ \"./node_modules/core-js/library/modules/_iter-detect.js\")(function (iter) {\n  $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n  // 25.4.4.1 Promise.all(iterable)\n  all: function all(iterable) {\n    var C = this;\n    var capability = newPromiseCapability(C);\n    var resolve = capability.resolve;\n    var reject = capability.reject;\n    var result = perform(function () {\n      var values = [];\n      var index = 0;\n      var remaining = 1;\n      forOf(iterable, false, function (promise) {\n        var $index = index++;\n        var alreadyCalled = false;\n        values.push(undefined);\n        remaining++;\n        C.resolve(promise).then(function (value) {\n          if (alreadyCalled) return;\n          alreadyCalled = true;\n          values[$index] = value;\n          --remaining || resolve(values);\n        }, reject);\n      });\n      --remaining || resolve(values);\n    });\n    if (result.e) reject(result.v);\n    return capability.promise;\n  },\n  // 25.4.4.4 Promise.race(iterable)\n  race: function race(iterable) {\n    var C = this;\n    var capability = newPromiseCapability(C);\n    var reject = capability.reject;\n    var result = perform(function () {\n      forOf(iterable, false, function (promise) {\n        C.resolve(promise).then(capability.resolve, reject);\n      });\n    });\n    if (result.e) reject(result.v);\n    return capability.promise;\n  }\n});\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/modules/es6.promise.js?");

/***/ }),

/***/ "./node_modules/core-js/library/modules/es6.string.iterator.js":
/*!*********************************************************************!*\
  !*** ./node_modules/core-js/library/modules/es6.string.iterator.js ***!
  \*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\nvar $at = __webpack_require__(/*! ./_string-at */ \"./node_modules/core-js/library/modules/_string-at.js\")(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\n__webpack_require__(/*! ./_iter-define */ \"./node_modules/core-js/library/modules/_iter-define.js\")(String, 'String', function (iterated) {\n  this._t = String(iterated); // target\n  this._i = 0;                // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function () {\n  var O = this._t;\n  var index = this._i;\n  var point;\n  if (index >= O.length) return { value: undefined, done: true };\n  point = $at(O, index);\n  this._i += point.length;\n  return { value: point, done: false };\n});\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/modules/es6.string.iterator.js?");

/***/ }),

/***/ "./node_modules/core-js/library/modules/es6.symbol.js":
/*!************************************************************!*\
  !*** ./node_modules/core-js/library/modules/es6.symbol.js ***!
  \************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\n// ECMAScript 6 symbols shim\nvar global = __webpack_require__(/*! ./_global */ \"./node_modules/core-js/library/modules/_global.js\");\nvar has = __webpack_require__(/*! ./_has */ \"./node_modules/core-js/library/modules/_has.js\");\nvar DESCRIPTORS = __webpack_require__(/*! ./_descriptors */ \"./node_modules/core-js/library/modules/_descriptors.js\");\nvar $export = __webpack_require__(/*! ./_export */ \"./node_modules/core-js/library/modules/_export.js\");\nvar redefine = __webpack_require__(/*! ./_redefine */ \"./node_modules/core-js/library/modules/_redefine.js\");\nvar META = __webpack_require__(/*! ./_meta */ \"./node_modules/core-js/library/modules/_meta.js\").KEY;\nvar $fails = __webpack_require__(/*! ./_fails */ \"./node_modules/core-js/library/modules/_fails.js\");\nvar shared = __webpack_require__(/*! ./_shared */ \"./node_modules/core-js/library/modules/_shared.js\");\nvar setToStringTag = __webpack_require__(/*! ./_set-to-string-tag */ \"./node_modules/core-js/library/modules/_set-to-string-tag.js\");\nvar uid = __webpack_require__(/*! ./_uid */ \"./node_modules/core-js/library/modules/_uid.js\");\nvar wks = __webpack_require__(/*! ./_wks */ \"./node_modules/core-js/library/modules/_wks.js\");\nvar wksExt = __webpack_require__(/*! ./_wks-ext */ \"./node_modules/core-js/library/modules/_wks-ext.js\");\nvar wksDefine = __webpack_require__(/*! ./_wks-define */ \"./node_modules/core-js/library/modules/_wks-define.js\");\nvar enumKeys = __webpack_require__(/*! ./_enum-keys */ \"./node_modules/core-js/library/modules/_enum-keys.js\");\nvar isArray = __webpack_require__(/*! ./_is-array */ \"./node_modules/core-js/library/modules/_is-array.js\");\nvar anObject = __webpack_require__(/*! ./_an-object */ \"./node_modules/core-js/library/modules/_an-object.js\");\nvar isObject = __webpack_require__(/*! ./_is-object */ \"./node_modules/core-js/library/modules/_is-object.js\");\nvar toIObject = __webpack_require__(/*! ./_to-iobject */ \"./node_modules/core-js/library/modules/_to-iobject.js\");\nvar toPrimitive = __webpack_require__(/*! ./_to-primitive */ \"./node_modules/core-js/library/modules/_to-primitive.js\");\nvar createDesc = __webpack_require__(/*! ./_property-desc */ \"./node_modules/core-js/library/modules/_property-desc.js\");\nvar _create = __webpack_require__(/*! ./_object-create */ \"./node_modules/core-js/library/modules/_object-create.js\");\nvar gOPNExt = __webpack_require__(/*! ./_object-gopn-ext */ \"./node_modules/core-js/library/modules/_object-gopn-ext.js\");\nvar $GOPD = __webpack_require__(/*! ./_object-gopd */ \"./node_modules/core-js/library/modules/_object-gopd.js\");\nvar $DP = __webpack_require__(/*! ./_object-dp */ \"./node_modules/core-js/library/modules/_object-dp.js\");\nvar $keys = __webpack_require__(/*! ./_object-keys */ \"./node_modules/core-js/library/modules/_object-keys.js\");\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function';\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n  return _create(dP({}, 'a', {\n    get: function () { return dP(this, 'a', { value: 7 }).a; }\n  })).a != 7;\n}) ? function (it, key, D) {\n  var protoDesc = gOPD(ObjectProto, key);\n  if (protoDesc) delete ObjectProto[key];\n  dP(it, key, D);\n  if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n  var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n  sym._k = tag;\n  return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n  return typeof it == 'symbol';\n} : function (it) {\n  return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n  if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n  anObject(it);\n  key = toPrimitive(key, true);\n  anObject(D);\n  if (has(AllSymbols, key)) {\n    if (!D.enumerable) {\n      if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n      it[HIDDEN][key] = true;\n    } else {\n      if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n      D = _create(D, { enumerable: createDesc(0, false) });\n    } return setSymbolDesc(it, key, D);\n  } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n  anObject(it);\n  var keys = enumKeys(P = toIObject(P));\n  var i = 0;\n  var l = keys.length;\n  var key;\n  while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n  return it;\n};\nvar $create = function create(it, P) {\n  return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n  var E = isEnum.call(this, key = toPrimitive(key, true));\n  if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n  return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n  it = toIObject(it);\n  key = toPrimitive(key, true);\n  if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n  var D = gOPD(it, key);\n  if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n  return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n  var names = gOPN(toIObject(it));\n  var result = [];\n  var i = 0;\n  var key;\n  while (names.length > i) {\n    if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n  } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n  var IS_OP = it === ObjectProto;\n  var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n  var result = [];\n  var i = 0;\n  var key;\n  while (names.length > i) {\n    if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n  } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n  $Symbol = function Symbol() {\n    if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n    var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n    var $set = function (value) {\n      if (this === ObjectProto) $set.call(OPSymbols, value);\n      if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n      setSymbolDesc(this, tag, createDesc(1, value));\n    };\n    if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n    return wrap(tag);\n  };\n  redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n    return this._k;\n  });\n\n  $GOPD.f = $getOwnPropertyDescriptor;\n  $DP.f = $defineProperty;\n  __webpack_require__(/*! ./_object-gopn */ \"./node_modules/core-js/library/modules/_object-gopn.js\").f = gOPNExt.f = $getOwnPropertyNames;\n  __webpack_require__(/*! ./_object-pie */ \"./node_modules/core-js/library/modules/_object-pie.js\").f = $propertyIsEnumerable;\n  __webpack_require__(/*! ./_object-gops */ \"./node_modules/core-js/library/modules/_object-gops.js\").f = $getOwnPropertySymbols;\n\n  if (DESCRIPTORS && !__webpack_require__(/*! ./_library */ \"./node_modules/core-js/library/modules/_library.js\")) {\n    redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n  }\n\n  wksExt.f = function (name) {\n    return wrap(wks(name));\n  };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n  // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n  'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n  // 19.4.2.1 Symbol.for(key)\n  'for': function (key) {\n    return has(SymbolRegistry, key += '')\n      ? SymbolRegistry[key]\n      : SymbolRegistry[key] = $Symbol(key);\n  },\n  // 19.4.2.5 Symbol.keyFor(sym)\n  keyFor: function keyFor(sym) {\n    if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n    for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n  },\n  useSetter: function () { setter = true; },\n  useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n  // 19.1.2.2 Object.create(O [, Properties])\n  create: $create,\n  // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n  defineProperty: $defineProperty,\n  // 19.1.2.3 Object.defineProperties(O, Properties)\n  defineProperties: $defineProperties,\n  // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n  getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n  // 19.1.2.7 Object.getOwnPropertyNames(O)\n  getOwnPropertyNames: $getOwnPropertyNames,\n  // 19.1.2.8 Object.getOwnPropertySymbols(O)\n  getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n  var S = $Symbol();\n  // MS Edge converts symbol values to JSON as {}\n  // WebKit converts symbol values to JSON as null\n  // V8 throws on boxed symbols\n  return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n  stringify: function stringify(it) {\n    var args = [it];\n    var i = 1;\n    var replacer, $replacer;\n    while (arguments.length > i) args.push(arguments[i++]);\n    $replacer = replacer = args[1];\n    if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n    if (!isArray(replacer)) replacer = function (key, value) {\n      if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n      if (!isSymbol(value)) return value;\n    };\n    args[1] = replacer;\n    return _stringify.apply($JSON, args);\n  }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || __webpack_require__(/*! ./_hide */ \"./node_modules/core-js/library/modules/_hide.js\")($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/modules/es6.symbol.js?");

/***/ }),

/***/ "./node_modules/core-js/library/modules/es7.promise.finally.js":
/*!*********************************************************************!*\
  !*** ./node_modules/core-js/library/modules/es7.promise.finally.js ***!
  \*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("// https://github.com/tc39/proposal-promise-finally\n\nvar $export = __webpack_require__(/*! ./_export */ \"./node_modules/core-js/library/modules/_export.js\");\nvar core = __webpack_require__(/*! ./_core */ \"./node_modules/core-js/library/modules/_core.js\");\nvar global = __webpack_require__(/*! ./_global */ \"./node_modules/core-js/library/modules/_global.js\");\nvar speciesConstructor = __webpack_require__(/*! ./_species-constructor */ \"./node_modules/core-js/library/modules/_species-constructor.js\");\nvar promiseResolve = __webpack_require__(/*! ./_promise-resolve */ \"./node_modules/core-js/library/modules/_promise-resolve.js\");\n\n$export($export.P + $export.R, 'Promise', { 'finally': function (onFinally) {\n  var C = speciesConstructor(this, core.Promise || global.Promise);\n  var isFunction = typeof onFinally == 'function';\n  return this.then(\n    isFunction ? function (x) {\n      return promiseResolve(C, onFinally()).then(function () { return x; });\n    } : onFinally,\n    isFunction ? function (e) {\n      return promiseResolve(C, onFinally()).then(function () { throw e; });\n    } : onFinally\n  );\n} });\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/modules/es7.promise.finally.js?");

/***/ }),

/***/ "./node_modules/core-js/library/modules/es7.promise.try.js":
/*!*****************************************************************!*\
  !*** ./node_modules/core-js/library/modules/es7.promise.try.js ***!
  \*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\n// https://github.com/tc39/proposal-promise-try\nvar $export = __webpack_require__(/*! ./_export */ \"./node_modules/core-js/library/modules/_export.js\");\nvar newPromiseCapability = __webpack_require__(/*! ./_new-promise-capability */ \"./node_modules/core-js/library/modules/_new-promise-capability.js\");\nvar perform = __webpack_require__(/*! ./_perform */ \"./node_modules/core-js/library/modules/_perform.js\");\n\n$export($export.S, 'Promise', { 'try': function (callbackfn) {\n  var promiseCapability = newPromiseCapability.f(this);\n  var result = perform(callbackfn);\n  (result.e ? promiseCapability.reject : promiseCapability.resolve)(result.v);\n  return promiseCapability.promise;\n} });\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/modules/es7.promise.try.js?");

/***/ }),

/***/ "./node_modules/core-js/library/modules/es7.symbol.async-iterator.js":
/*!***************************************************************************!*\
  !*** ./node_modules/core-js/library/modules/es7.symbol.async-iterator.js ***!
  \***************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("__webpack_require__(/*! ./_wks-define */ \"./node_modules/core-js/library/modules/_wks-define.js\")('asyncIterator');\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/modules/es7.symbol.async-iterator.js?");

/***/ }),

/***/ "./node_modules/core-js/library/modules/es7.symbol.observable.js":
/*!***********************************************************************!*\
  !*** ./node_modules/core-js/library/modules/es7.symbol.observable.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("__webpack_require__(/*! ./_wks-define */ \"./node_modules/core-js/library/modules/_wks-define.js\")('observable');\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/modules/es7.symbol.observable.js?");

/***/ }),

/***/ "./node_modules/core-js/library/modules/web.dom.iterable.js":
/*!******************************************************************!*\
  !*** ./node_modules/core-js/library/modules/web.dom.iterable.js ***!
  \******************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("__webpack_require__(/*! ./es6.array.iterator */ \"./node_modules/core-js/library/modules/es6.array.iterator.js\");\nvar global = __webpack_require__(/*! ./_global */ \"./node_modules/core-js/library/modules/_global.js\");\nvar hide = __webpack_require__(/*! ./_hide */ \"./node_modules/core-js/library/modules/_hide.js\");\nvar Iterators = __webpack_require__(/*! ./_iterators */ \"./node_modules/core-js/library/modules/_iterators.js\");\nvar TO_STRING_TAG = __webpack_require__(/*! ./_wks */ \"./node_modules/core-js/library/modules/_wks.js\")('toStringTag');\n\nvar DOMIterables = ('CSSRuleList,CSSStyleDeclaration,CSSValueList,ClientRectList,DOMRectList,DOMStringList,' +\n  'DOMTokenList,DataTransferItemList,FileList,HTMLAllCollection,HTMLCollection,HTMLFormElement,HTMLSelectElement,' +\n  'MediaList,MimeTypeArray,NamedNodeMap,NodeList,PaintRequestList,Plugin,PluginArray,SVGLengthList,SVGNumberList,' +\n  'SVGPathSegList,SVGPointList,SVGStringList,SVGTransformList,SourceBufferList,StyleSheetList,TextTrackCueList,' +\n  'TextTrackList,TouchList').split(',');\n\nfor (var i = 0; i < DOMIterables.length; i++) {\n  var NAME = DOMIterables[i];\n  var Collection = global[NAME];\n  var proto = Collection && Collection.prototype;\n  if (proto && !proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n  Iterators[NAME] = Iterators.Array;\n}\n\n\n//# sourceURL=webpack:///./node_modules/core-js/library/modules/web.dom.iterable.js?");

/***/ }),

/***/ "./node_modules/fbjs/lib/emptyFunction.js":
/*!************************************************!*\
  !*** ./node_modules/fbjs/lib/emptyFunction.js ***!
  \************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\n\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\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//# sourceURL=webpack:///./node_modules/fbjs/lib/emptyFunction.js?");

/***/ }),

/***/ "./node_modules/fbjs/lib/emptyObject.js":
/*!**********************************************!*\
  !*** ./node_modules/fbjs/lib/emptyObject.js ***!
  \**********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\n\n\nvar emptyObject = {};\n\nif (false) {}\n\nmodule.exports = emptyObject;\n\n//# sourceURL=webpack:///./node_modules/fbjs/lib/emptyObject.js?");

/***/ }),

/***/ "./node_modules/fbjs/lib/invariant.js":
/*!********************************************!*\
  !*** ./node_modules/fbjs/lib/invariant.js ***!
  \********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\n\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 validateFormat = function validateFormat(format) {};\n\nif (false) {}\n\nfunction invariant(condition, format, a, b, c, d, e, f) {\n  validateFormat(format);\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//# sourceURL=webpack:///./node_modules/fbjs/lib/invariant.js?");

/***/ }),

/***/ "./node_modules/handsontable/dist/handsontable.full.css":
/*!**************************************************************!*\
  !*** ./node_modules/handsontable/dist/handsontable.full.css ***!
  \**************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("// removed by extract-text-webpack-plugin\n\n//# sourceURL=webpack:///./node_modules/handsontable/dist/handsontable.full.css?");

/***/ }),

/***/ "./node_modules/handsontable/dist/handsontable.js":
/*!********************************************************!*\
  !*** ./node_modules/handsontable/dist/handsontable.js ***!
  \********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("/* WEBPACK VAR INJECTION */(function(setImmediate, clearImmediate) {/*!\n * (The MIT License)\n * \n * Copyright (c) 2012-2014 Marcin Warpechowski\n * Copyright (c) 2015 Handsoncode sp. z o.o. <hello@handsoncode.net>\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 * Version: 5.0.2\n * Release date: 12/09/2018 (built at 11/09/2018 09:55:19)\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(true)\n\t\tmodule.exports = factory(__webpack_require__(/*! moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\"), __webpack_require__(/*! numbro */ \"./node_modules/numbro/dist/numbro.min.js\"), __webpack_require__(/*! pikaday */ \"./node_modules/pikaday/pikaday.js\"));\n\telse {}\n})(typeof self !== 'undefined' ? self : this, function(__WEBPACK_EXTERNAL_MODULE_57__, __WEBPACK_EXTERNAL_MODULE_248__, __WEBPACK_EXTERNAL_MODULE_237__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\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/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\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.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\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// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 207);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports.HTML_CHARACTERS = undefined;\nexports.getParent = getParent;\nexports.closest = closest;\nexports.closestDown = closestDown;\nexports.isChildOf = isChildOf;\nexports.isChildOfWebComponentTable = isChildOfWebComponentTable;\nexports.polymerWrap = polymerWrap;\nexports.polymerUnwrap = polymerUnwrap;\nexports.index = index;\nexports.overlayContainsElement = overlayContainsElement;\nexports.hasClass = hasClass;\nexports.addClass = addClass;\nexports.removeClass = removeClass;\nexports.removeTextNodes = removeTextNodes;\nexports.empty = empty;\nexports.fastInnerHTML = fastInnerHTML;\nexports.fastInnerText = fastInnerText;\nexports.isVisible = isVisible;\nexports.offset = offset;\nexports.getWindowScrollTop = getWindowScrollTop;\nexports.getWindowScrollLeft = getWindowScrollLeft;\nexports.getScrollTop = getScrollTop;\nexports.getScrollLeft = getScrollLeft;\nexports.getScrollableElement = getScrollableElement;\nexports.getTrimmingContainer = getTrimmingContainer;\nexports.getStyle = getStyle;\nexports.getComputedStyle = getComputedStyle;\nexports.outerWidth = outerWidth;\nexports.outerHeight = outerHeight;\nexports.innerHeight = innerHeight;\nexports.innerWidth = innerWidth;\nexports.addEvent = addEvent;\nexports.removeEvent = removeEvent;\nexports.getCaretPosition = getCaretPosition;\nexports.getSelectionEndPosition = getSelectionEndPosition;\nexports.getSelectionText = getSelectionText;\nexports.setCaretPosition = setCaretPosition;\nexports.getScrollbarWidth = getScrollbarWidth;\nexports.hasVerticalScrollbar = hasVerticalScrollbar;\nexports.hasHorizontalScrollbar = hasHorizontalScrollbar;\nexports.setOverlayPosition = setOverlayPosition;\nexports.getCssTransform = getCssTransform;\nexports.resetCssTransform = resetCssTransform;\nexports.isInput = isInput;\nexports.isOutsideInput = isOutsideInput;\n\nvar _browser = __webpack_require__(39);\n\nvar _feature = __webpack_require__(40);\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\n/**\n * Get the parent of the specified node in the DOM tree.\n *\n * @param  {HTMLElement} element Element from which traversing is started.\n * @param  {Number} [level=0] Traversing deep level.\n * @return {HTMLElement|null}\n */\nfunction getParent(element) {\n  var level = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n  var iteration = -1;\n  var parent = null;\n  var elementToCheck = element;\n\n  while (elementToCheck !== null) {\n    if (iteration === level) {\n      parent = elementToCheck;\n      break;\n    }\n\n    if (elementToCheck.host && elementToCheck.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n      elementToCheck = elementToCheck.host;\n    } else {\n      iteration += 1;\n      elementToCheck = elementToCheck.parentNode;\n    }\n  }\n\n  return parent;\n}\n\n/**\n * Goes up the DOM tree (including given element) until it finds an element that matches the nodes or nodes name.\n * This method goes up through web components.\n *\n * @param {HTMLElement} element Element from which traversing is started\n * @param {Array} nodes Array of elements or Array of elements name\n * @param {HTMLElement} [until]\n * @returns {HTMLElement|null}\n */\nfunction closest(element, nodes, until) {\n  var elementToCheck = element;\n\n  while (elementToCheck !== null && elementToCheck !== until) {\n    if (elementToCheck.nodeType === Node.ELEMENT_NODE && (nodes.indexOf(elementToCheck.nodeName) > -1 || nodes.indexOf(elementToCheck) > -1)) {\n      return elementToCheck;\n    }\n    if (elementToCheck.host && elementToCheck.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n      elementToCheck = elementToCheck.host;\n    } else {\n      elementToCheck = elementToCheck.parentNode;\n    }\n  }\n\n  return null;\n}\n\n/**\n * Goes \"down\" the DOM tree (including given element) until it finds an element that matches the nodes or nodes name.\n *\n * @param {HTMLElement} element Element from which traversing is started\n * @param {Array} nodes Array of elements or Array of elements name\n * @param {HTMLElement} [until]\n * @returns {HTMLElement|null}\n */\nfunction closestDown(element, nodes, until) {\n  var matched = [];\n  var elementToCheck = element;\n\n  while (elementToCheck) {\n    elementToCheck = closest(elementToCheck, nodes, until);\n\n    if (!elementToCheck || until && !until.contains(elementToCheck)) {\n      break;\n    }\n    matched.push(elementToCheck);\n\n    if (elementToCheck.host && elementToCheck.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n      elementToCheck = elementToCheck.host;\n    } else {\n      elementToCheck = elementToCheck.parentNode;\n    }\n  }\n  var length = matched.length;\n\n  return length ? matched[length - 1] : null;\n}\n\n/**\n * Goes up the DOM tree and checks if element is child of another element.\n *\n * @param child Child element\n * @param {Object|String} parent Parent element OR selector of the parent element.\n *                               If string provided, function returns `true` for the first occurrence of element with that class.\n * @returns {Boolean}\n */\nfunction isChildOf(child, parent) {\n  var node = child.parentNode;\n  var queriedParents = [];\n\n  if (typeof parent === 'string') {\n    queriedParents = Array.prototype.slice.call(document.querySelectorAll(parent), 0);\n  } else {\n    queriedParents.push(parent);\n  }\n\n  while (node !== null) {\n    if (queriedParents.indexOf(node) > -1) {\n      return true;\n    }\n    node = node.parentNode;\n  }\n\n  return false;\n}\n\n/**\n * Check if an element is part of `hot-table` web component.\n *\n * @param {Element} element\n * @returns {Boolean}\n */\nfunction isChildOfWebComponentTable(element) {\n  var hotTableName = 'hot-table';\n  var result = false;\n  var parentNode = polymerWrap(element);\n\n  function isHotTable(testElement) {\n    return testElement.nodeType === Node.ELEMENT_NODE && testElement.nodeName === hotTableName.toUpperCase();\n  }\n\n  while (parentNode !== null) {\n    if (isHotTable(parentNode)) {\n      result = true;\n      break;\n    } else if (parentNode.host && parentNode.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n      result = isHotTable(parentNode.host);\n\n      if (result) {\n        break;\n      }\n      parentNode = parentNode.host;\n    }\n    parentNode = parentNode.parentNode;\n  }\n\n  return result;\n}\n\n/* global Polymer wrap unwrap */\n\n/**\n * Wrap element into polymer/webcomponent container if exists\n *\n * @param element\n * @returns {*}\n */\nfunction polymerWrap(element) {\n  return typeof Polymer !== 'undefined' && typeof wrap === 'function' ? wrap(element) : element;\n}\n\n/**\n * Unwrap element from polymer/webcomponent container if exists\n *\n * @param element\n * @returns {*}\n */\nfunction polymerUnwrap(element) {\n  return typeof Polymer !== 'undefined' && typeof unwrap === 'function' ? unwrap(element) : element;\n}\n\n/**\n * Counts index of element within its parent\n * WARNING: for performance reasons, assumes there are only element nodes (no text nodes). This is true for Walkotnable\n * Otherwise would need to check for nodeType or use previousElementSibling\n *\n * @see http://jsperf.com/sibling-index/10\n * @param {Element} element\n * @return {Number}\n */\nfunction index(element) {\n  var i = 0;\n  var elementToCheck = element;\n\n  if (elementToCheck.previousSibling) {\n    /* eslint-disable no-cond-assign */\n    while (elementToCheck = elementToCheck.previousSibling) {\n      i += 1;\n    }\n  }\n\n  return i;\n}\n\n/**\n * Check if the provided overlay contains the provided element\n *\n * @param {String} overlay\n * @param {HTMLElement} element\n * @returns {boolean}\n */\nfunction overlayContainsElement(overlayType, element) {\n  var overlayElement = document.querySelector('.ht_clone_' + overlayType);\n  return overlayElement ? overlayElement.contains(element) : null;\n}\n\nvar classListSupport = !!document.documentElement.classList;\nvar _hasClass = void 0;\nvar _addClass = void 0;\nvar _removeClass = void 0;\n\nfunction filterEmptyClassNames(classNames) {\n  var result = [];\n\n  if (!classNames || !classNames.length) {\n    return result;\n  }\n\n  var len = 0;\n\n  while (classNames[len]) {\n    result.push(classNames[len]);\n    len += 1;\n  }\n\n  return result;\n}\n\nif (classListSupport) {\n  var isSupportMultipleClassesArg = function () {\n    var element = document.createElement('div');\n\n    element.classList.add('test', 'test2');\n\n    return element.classList.contains('test2');\n  }();\n\n  _hasClass = function _hasClass(element, className) {\n    if (element.classList === void 0 || typeof className !== 'string' || className === '') {\n      return false;\n    }\n\n    return element.classList.contains(className);\n  };\n\n  _addClass = function _addClass(element, classes) {\n    var className = classes;\n\n    if (typeof className === 'string') {\n      className = className.split(' ');\n    }\n\n    className = filterEmptyClassNames(className);\n\n    if (className.length > 0) {\n      if (isSupportMultipleClassesArg) {\n        var _element$classList;\n\n        (_element$classList = element.classList).add.apply(_element$classList, _toConsumableArray(className));\n      } else {\n        var len = 0;\n\n        while (className && className[len]) {\n          element.classList.add(className[len]);\n          len += 1;\n        }\n      }\n    }\n  };\n\n  _removeClass = function _removeClass(element, classes) {\n    var className = classes;\n\n    if (typeof className === 'string') {\n      className = className.split(' ');\n    }\n\n    className = filterEmptyClassNames(className);\n\n    if (className.length > 0) {\n      if (isSupportMultipleClassesArg) {\n        var _element$classList2;\n\n        (_element$classList2 = element.classList).remove.apply(_element$classList2, _toConsumableArray(className));\n      } else {\n        var len = 0;\n\n        while (className && className[len]) {\n          element.classList.remove(className[len]);\n          len += 1;\n        }\n      }\n    }\n  };\n} else {\n  var createClassNameRegExp = function createClassNameRegExp(className) {\n    return new RegExp('(\\\\s|^)' + className + '(\\\\s|$)');\n  };\n\n  _hasClass = function _hasClass(element, className) {\n    // http://snipplr.com/view/3561/addclass-removeclass-hasclass/\n    return element.className !== void 0 && createClassNameRegExp(className).test(element.className);\n  };\n\n  _addClass = function _addClass(element, classes) {\n    var len = 0;\n    var _className = element.className;\n    var className = classes;\n\n    if (typeof className === 'string') {\n      className = className.split(' ');\n    }\n    if (_className === '') {\n      _className = className.join(' ');\n    } else {\n      while (className && className[len]) {\n        if (!createClassNameRegExp(className[len]).test(_className)) {\n          _className += ' ' + className[len];\n        }\n        len += 1;\n      }\n    }\n    element.className = _className;\n  };\n\n  _removeClass = function _removeClass(element, classes) {\n    var len = 0;\n    var _className = element.className;\n    var className = classes;\n\n    if (typeof className === 'string') {\n      className = className.split(' ');\n    }\n    while (className && className[len]) {\n      // String.prototype.trim is defined in polyfill.js\n      _className = _className.replace(createClassNameRegExp(className[len]), ' ').trim();\n      len += 1;\n    }\n    if (element.className !== _className) {\n      element.className = _className;\n    }\n  };\n}\n\n/**\n * Checks if element has class name\n *\n * @param {HTMLElement} element\n * @param {String} className Class name to check\n * @returns {Boolean}\n */\nfunction hasClass(element, className) {\n  return _hasClass(element, className);\n}\n\n/**\n * Add class name to an element\n *\n * @param {HTMLElement} element\n * @param {String|Array} className Class name as string or array of strings\n */\nfunction addClass(element, className) {\n  return _addClass(element, className);\n}\n\n/**\n * Remove class name from an element\n *\n * @param {HTMLElement} element\n * @param {String|Array} className Class name as string or array of strings\n */\nfunction removeClass(element, className) {\n  return _removeClass(element, className);\n}\n\nfunction removeTextNodes(element, parent) {\n  if (element.nodeType === 3) {\n    parent.removeChild(element); // bye text nodes!\n  } else if (['TABLE', 'THEAD', 'TBODY', 'TFOOT', 'TR'].indexOf(element.nodeName) > -1) {\n    var childs = element.childNodes;\n    for (var i = childs.length - 1; i >= 0; i--) {\n      removeTextNodes(childs[i], element);\n    }\n  }\n}\n\n/**\n * Remove childs function\n * WARNING - this doesn't unload events and data attached by jQuery\n * http://jsperf.com/jquery-html-vs-empty-vs-innerhtml/9\n * http://jsperf.com/jquery-html-vs-empty-vs-innerhtml/11 - no siginificant improvement with Chrome remove() method\n *\n * @param element\n * @returns {void}\n */\n//\nfunction empty(element) {\n  var child = void 0;\n  /* eslint-disable no-cond-assign */\n  while (child = element.lastChild) {\n    element.removeChild(child);\n  }\n}\n\nvar HTML_CHARACTERS = exports.HTML_CHARACTERS = /(<(.*)>|&(.*);)/;\n\n/**\n * Insert content into element trying avoid innerHTML method.\n * @return {void}\n */\nfunction fastInnerHTML(element, content) {\n  if (HTML_CHARACTERS.test(content)) {\n    element.innerHTML = content;\n  } else {\n    fastInnerText(element, content);\n  }\n}\n\n/**\n * Insert text content into element\n * @return {void}\n */\n\nvar textContextSupport = !!document.createTextNode('test').textContent;\n\nfunction fastInnerText(element, content) {\n  var child = element.firstChild;\n\n  if (child && child.nodeType === 3 && child.nextSibling === null) {\n    // fast lane - replace existing text node\n\n    if (textContextSupport) {\n      // http://jsperf.com/replace-text-vs-reuse\n      child.textContent = content;\n    } else {\n      // http://jsperf.com/replace-text-vs-reuse\n      child.data = content;\n    }\n  } else {\n    // slow lane - empty element and insert a text node\n    empty(element);\n    element.appendChild(document.createTextNode(content));\n  }\n}\n\n/**\n * Returns true if element is attached to the DOM and visible, false otherwise\n * @param elem\n * @returns {boolean}\n */\nfunction isVisible(elem) {\n  var next = elem;\n\n  while (polymerUnwrap(next) !== document.documentElement) {\n    // until <html> reached\n    if (next === null) {\n      // parent detached from DOM\n      return false;\n    } else if (next.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n      if (next.host) {\n        // this is Web Components Shadow DOM\n        // see: http://w3c.github.io/webcomponents/spec/shadow/#encapsulation\n        // according to spec, should be if (next.ownerDocument !== window.document), but that doesn't work yet\n        if (next.host.impl) {\n          // Chrome 33.0.1723.0 canary (2013-11-29) Web Platform features disabled\n          return isVisible(next.host.impl);\n        } else if (next.host) {\n          // Chrome 33.0.1723.0 canary (2013-11-29) Web Platform features enabled\n          return isVisible(next.host);\n        }\n        throw new Error('Lost in Web Components world');\n      } else {\n        return false; // this is a node detached from document in IE8\n      }\n    } else if (next.style.display === 'none') {\n      return false;\n    }\n    next = next.parentNode;\n  }\n\n  return true;\n}\n\n/**\n * Returns elements top and left offset relative to the document. Function is not compatible with jQuery offset.\n *\n * @param {HTMLElement} elem\n * @return {Object} Returns object with `top` and `left` props\n */\nfunction offset(elem) {\n  var docElem = document.documentElement;\n  var elementToCheck = elem;\n  var offsetLeft = void 0;\n  var offsetTop = void 0;\n  var lastElem = void 0;\n  var box = void 0;\n\n  if ((0, _feature.hasCaptionProblem)() && elementToCheck.firstChild && elementToCheck.firstChild.nodeName === 'CAPTION') {\n    // fixes problem with Firefox ignoring <caption> in TABLE offset (see also export outerHeight)\n    // http://jsperf.com/offset-vs-getboundingclientrect/8\n    box = elementToCheck.getBoundingClientRect();\n\n    return {\n      top: box.top + (window.pageYOffset || docElem.scrollTop) - (docElem.clientTop || 0),\n      left: box.left + (window.pageXOffset || docElem.scrollLeft) - (docElem.clientLeft || 0)\n    };\n  }\n  offsetLeft = elementToCheck.offsetLeft;\n  offsetTop = elementToCheck.offsetTop;\n  lastElem = elementToCheck;\n\n  /* eslint-disable no-cond-assign */\n  while (elementToCheck = elementToCheck.offsetParent) {\n    // from my observation, document.body always has scrollLeft/scrollTop == 0\n    if (elementToCheck === document.body) {\n      break;\n    }\n    offsetLeft += elementToCheck.offsetLeft;\n    offsetTop += elementToCheck.offsetTop;\n    lastElem = elementToCheck;\n  }\n\n  // slow - http://jsperf.com/offset-vs-getboundingclientrect/6\n  if (lastElem && lastElem.style.position === 'fixed') {\n    // if(lastElem !== document.body) { //faster but does gives false positive in Firefox\n    offsetLeft += window.pageXOffset || docElem.scrollLeft;\n    offsetTop += window.pageYOffset || docElem.scrollTop;\n  }\n\n  return {\n    left: offsetLeft,\n    top: offsetTop\n  };\n}\n\n/**\n * Returns the document's scrollTop property.\n *\n * @returns {Number}\n */\nfunction getWindowScrollTop() {\n  var res = window.scrollY;\n\n  if (res === void 0) {\n    // IE8-11\n    res = document.documentElement.scrollTop;\n  }\n\n  return res;\n}\n\n/**\n * Returns the document's scrollLeft property.\n *\n * @returns {Number}\n */\nfunction getWindowScrollLeft() {\n  var res = window.scrollX;\n\n  if (res === void 0) {\n    // IE8-11\n    res = document.documentElement.scrollLeft;\n  }\n\n  return res;\n}\n\n/**\n * Returns the provided element's scrollTop property.\n *\n * @param element\n * @returns {Number}\n */\nfunction getScrollTop(element) {\n  if (element === window) {\n    return getWindowScrollTop();\n  }\n  return element.scrollTop;\n}\n\n/**\n * Returns the provided element's scrollLeft property.\n *\n * @param element\n * @returns {Number}\n */\nfunction getScrollLeft(element) {\n  if (element === window) {\n    return getWindowScrollLeft();\n  }\n  return element.scrollLeft;\n}\n\n/**\n * Returns a DOM element responsible for scrolling of the provided element.\n *\n * @param {HTMLElement} element\n * @returns {HTMLElement} Element's scrollable parent\n */\nfunction getScrollableElement(element) {\n  var props = ['auto', 'scroll'];\n  var el = element.parentNode;\n  var overflow = void 0;\n  var overflowX = void 0;\n  var overflowY = void 0;\n  var computedStyle = '';\n  var computedOverflow = '';\n  var computedOverflowY = '';\n  var computedOverflowX = '';\n\n  while (el && el.style && document.body !== el) {\n    overflow = el.style.overflow;\n    overflowX = el.style.overflowX;\n    overflowY = el.style.overflowY;\n\n    if (overflow === 'scroll' || overflowX === 'scroll' || overflowY === 'scroll') {\n      return el;\n    } else if (window.getComputedStyle) {\n      computedStyle = window.getComputedStyle(el);\n      computedOverflow = computedStyle.getPropertyValue('overflow');\n      computedOverflowY = computedStyle.getPropertyValue('overflow-y');\n      computedOverflowX = computedStyle.getPropertyValue('overflow-x');\n\n      if (computedOverflow === 'scroll' || computedOverflowX === 'scroll' || computedOverflowY === 'scroll') {\n        return el;\n      }\n    }\n\n    // The '+ 1' after the scrollHeight/scrollWidth is to prevent problems with zoomed out Chrome.\n    if (el.clientHeight <= el.scrollHeight + 1 && (props.indexOf(overflowY) !== -1 || props.indexOf(overflow) !== -1 || props.indexOf(computedOverflow) !== -1 || props.indexOf(computedOverflowY) !== -1)) {\n      return el;\n    }\n    if (el.clientWidth <= el.scrollWidth + 1 && (props.indexOf(overflowX) !== -1 || props.indexOf(overflow) !== -1 || props.indexOf(computedOverflow) !== -1 || props.indexOf(computedOverflowX) !== -1)) {\n      return el;\n    }\n    el = el.parentNode;\n  }\n\n  return window;\n}\n\n/**\n * Returns a DOM element responsible for trimming the provided element.\n *\n * @param {HTMLElement} base Base element\n * @returns {HTMLElement} Base element's trimming parent\n */\nfunction getTrimmingContainer(base) {\n  var el = base.parentNode;\n\n  while (el && el.style && document.body !== el) {\n    if (el.style.overflow !== 'visible' && el.style.overflow !== '') {\n      return el;\n    } else if (window.getComputedStyle) {\n      var computedStyle = window.getComputedStyle(el);\n\n      if (computedStyle.getPropertyValue('overflow') !== 'visible' && computedStyle.getPropertyValue('overflow') !== '') {\n        return el;\n      }\n    }\n\n    el = el.parentNode;\n  }\n\n  return window;\n}\n\n/**\n * Returns a style property for the provided element. (Be it an inline or external style).\n *\n * @param {HTMLElement} element\n * @param {String} prop Wanted property\n * @returns {String|undefined} Element's style property\n */\nfunction getStyle(element, prop) {\n  /* eslint-disable */\n  if (!element) {\n    return;\n  } else if (element === window) {\n    if (prop === 'width') {\n      return window.innerWidth + 'px';\n    } else if (prop === 'height') {\n      return window.innerHeight + 'px';\n    }\n\n    return;\n  }\n\n  var styleProp = element.style[prop],\n      computedStyle;\n\n  if (styleProp !== '' && styleProp !== void 0) {\n    return styleProp;\n  } else {\n    computedStyle = getComputedStyle(element);\n\n    if (computedStyle[prop] !== '' && computedStyle[prop] !== void 0) {\n      return computedStyle[prop];\n    }\n  }\n}\n\n/**\n * Returns a computed style object for the provided element. (Needed if style is declared in external stylesheet).\n *\n * @param element\n * @returns {IEElementStyle|CssStyle} Elements computed style object\n */\nfunction getComputedStyle(element) {\n  return element.currentStyle || document.defaultView.getComputedStyle(element);\n}\n\n/**\n * Returns the element's outer width.\n *\n * @param element\n * @returns {number} Element's outer width\n */\nfunction outerWidth(element) {\n  return element.offsetWidth;\n}\n\n/**\n * Returns the element's outer height\n *\n * @param elem\n * @returns {number} Element's outer height\n */\nfunction outerHeight(elem) {\n  if ((0, _feature.hasCaptionProblem)() && elem.firstChild && elem.firstChild.nodeName === 'CAPTION') {\n    // fixes problem with Firefox ignoring <caption> in TABLE.offsetHeight\n    // jQuery (1.10.1) still has this unsolved\n    // may be better to just switch to getBoundingClientRect\n    // http://bililite.com/blog/2009/03/27/finding-the-size-of-a-table/\n    // http://lists.w3.org/Archives/Public/www-style/2009Oct/0089.html\n    // http://bugs.jquery.com/ticket/2196\n    // http://lists.w3.org/Archives/Public/www-style/2009Oct/0140.html#start140\n    return elem.offsetHeight + elem.firstChild.offsetHeight;\n  }\n\n  return elem.offsetHeight;\n}\n\n/**\n * Returns the element's inner height.\n *\n * @param element\n * @returns {number} Element's inner height\n */\nfunction innerHeight(element) {\n  return element.clientHeight || element.innerHeight;\n}\n\n/**\n * Returns the element's inner width.\n *\n * @param element\n * @returns {number} Element's inner width\n */\nfunction innerWidth(element) {\n  return element.clientWidth || element.innerWidth;\n}\n\nfunction addEvent(element, event, callback) {\n  if (window.addEventListener) {\n    element.addEventListener(event, callback, false);\n  } else {\n    element.attachEvent('on' + event, callback);\n  }\n}\n\nfunction removeEvent(element, event, callback) {\n  if (window.removeEventListener) {\n    element.removeEventListener(event, callback, false);\n  } else {\n    element.detachEvent('on' + event, callback);\n  }\n}\n\n/**\n * Returns caret position in text input\n *\n * @author http://stackoverflow.com/questions/263743/how-to-get-caret-position-in-textarea\n * @return {Number}\n */\nfunction getCaretPosition(el) {\n  if (el.selectionStart) {\n    return el.selectionStart;\n  } else if (document.selection) {\n    // IE8\n    el.focus();\n\n    var r = document.selection.createRange();\n\n    if (r == null) {\n      return 0;\n    }\n    var re = el.createTextRange();\n    var rc = re.duplicate();\n\n    re.moveToBookmark(r.getBookmark());\n    rc.setEndPoint('EndToStart', re);\n\n    return rc.text.length;\n  }\n\n  return 0;\n}\n\n/**\n * Returns end of the selection in text input\n *\n * @return {Number}\n */\nfunction getSelectionEndPosition(el) {\n  if (el.selectionEnd) {\n    return el.selectionEnd;\n  } else if (document.selection) {\n    // IE8\n    var r = document.selection.createRange();\n\n    if (r == null) {\n      return 0;\n    }\n    var re = el.createTextRange();\n\n    return re.text.indexOf(r.text) + r.text.length;\n  }\n\n  return 0;\n}\n\n/**\n * Returns text under selection.\n *\n * @returns {String}\n */\nfunction getSelectionText() {\n  var text = '';\n\n  if (window.getSelection) {\n    text = window.getSelection().toString();\n  } else if (document.selection && document.selection.type !== 'Control') {\n    text = document.selection.createRange().text;\n  }\n\n  return text;\n}\n\n/**\n * Sets caret position in text input.\n *\n * @author http://blog.vishalon.net/index.php/javascript-getting-and-setting-caret-position-in-textarea/\n * @param {Element} element\n * @param {Number} pos\n * @param {Number} endPos\n */\nfunction setCaretPosition(element, pos, endPos) {\n  if (endPos === void 0) {\n    endPos = pos;\n  }\n  if (element.setSelectionRange) {\n    element.focus();\n\n    try {\n      element.setSelectionRange(pos, endPos);\n    } catch (err) {\n      var elementParent = element.parentNode;\n      var parentDisplayValue = elementParent.style.display;\n      elementParent.style.display = 'block';\n      element.setSelectionRange(pos, endPos);\n      elementParent.style.display = parentDisplayValue;\n    }\n  } else if (element.createTextRange) {\n    // IE8\n    var range = element.createTextRange();\n    range.collapse(true);\n    range.moveEnd('character', endPos);\n    range.moveStart('character', pos);\n    range.select();\n  }\n}\n\nvar cachedScrollbarWidth;\n\n// http://stackoverflow.com/questions/986937/how-can-i-get-the-browsers-scrollbar-sizes\nfunction walkontableCalculateScrollbarWidth() {\n  var inner = document.createElement('div');\n  inner.style.height = '200px';\n  inner.style.width = '100%';\n\n  var outer = document.createElement('div');\n  outer.style.boxSizing = 'content-box';\n  outer.style.height = '150px';\n  outer.style.left = '0px';\n  outer.style.overflow = 'hidden';\n  outer.style.position = 'absolute';\n  outer.style.top = '0px';\n  outer.style.width = '200px';\n  outer.style.visibility = 'hidden';\n  outer.appendChild(inner);\n\n  (document.body || document.documentElement).appendChild(outer);\n  var w1 = inner.offsetWidth;\n  outer.style.overflow = 'scroll';\n  var w2 = inner.offsetWidth;\n  if (w1 == w2) {\n    w2 = outer.clientWidth;\n  }\n\n  (document.body || document.documentElement).removeChild(outer);\n\n  return w1 - w2;\n}\n\n/**\n * Returns the computed width of the native browser scroll bar.\n *\n * @return {Number} width\n */\nfunction getScrollbarWidth() {\n  if (cachedScrollbarWidth === void 0) {\n    cachedScrollbarWidth = walkontableCalculateScrollbarWidth();\n  }\n\n  return cachedScrollbarWidth;\n}\n\n/**\n * Checks if the provided element has a vertical scrollbar.\n *\n * @param {HTMLElement} element\n * @returns {Boolean}\n */\nfunction hasVerticalScrollbar(element) {\n  return element.offsetWidth !== element.clientWidth;\n}\n\n/**\n * Checks if the provided element has a vertical scrollbar.\n *\n * @param {HTMLElement} element\n * @returns {Boolean}\n */\nfunction hasHorizontalScrollbar(element) {\n  return element.offsetHeight !== element.clientHeight;\n}\n\n/**\n * Sets overlay position depending on it's type and used browser\n */\nfunction setOverlayPosition(overlayElem, left, top) {\n  if ((0, _browser.isIE8)() || (0, _browser.isIE9)()) {\n    overlayElem.style.top = top;\n    overlayElem.style.left = left;\n  } else if ((0, _browser.isSafari)()) {\n    overlayElem.style['-webkit-transform'] = 'translate3d(' + left + ',' + top + ',0)';\n  } else {\n    overlayElem.style.transform = 'translate3d(' + left + ',' + top + ',0)';\n  }\n}\n\nfunction getCssTransform(element) {\n  var transform = void 0;\n\n  if (element.style.transform && (transform = element.style.transform) !== '') {\n    return ['transform', transform];\n  } else if (element.style['-webkit-transform'] && (transform = element.style['-webkit-transform']) !== '') {\n\n    return ['-webkit-transform', transform];\n  }\n\n  return -1;\n}\n\nfunction resetCssTransform(element) {\n  if (element.style.transform && element.style.transform !== '') {\n    element.style.transform = '';\n  } else if (element.style['-webkit-transform'] && element.style['-webkit-transform'] !== '') {\n    element.style['-webkit-transform'] = '';\n  }\n}\n\n/**\n * Determines if the given DOM element is an input field.\n * Notice: By 'input' we mean input, textarea and select nodes\n *\n * @param {HTMLElement} element - DOM element\n * @returns {Boolean}\n */\nfunction isInput(element) {\n  var inputs = ['INPUT', 'SELECT', 'TEXTAREA'];\n\n  return element && (inputs.indexOf(element.nodeName) > -1 || element.contentEditable === 'true');\n}\n\n/**\n * Determines if the given DOM element is an input field placed OUTSIDE of HOT.\n * Notice: By 'input' we mean input, textarea and select nodes\n *\n * @param {HTMLElement} element - DOM element\n * @returns {Boolean}\n */\nfunction isOutsideInput(element) {\n  return isInput(element) && element.className.indexOf('handsontableInput') == -1 && element.className.indexOf('copyPaste') == -1;\n}\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\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 && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nexports.duckSchema = duckSchema;\nexports.inherit = inherit;\nexports.extend = extend;\nexports.deepExtend = deepExtend;\nexports.deepClone = deepClone;\nexports.clone = clone;\nexports.mixin = mixin;\nexports.isObjectEqual = isObjectEqual;\nexports.isObject = isObject;\nexports.defineGetter = defineGetter;\nexports.objectEach = objectEach;\nexports.getProperty = getProperty;\nexports.deepObjectSize = deepObjectSize;\nexports.createObjectPropListener = createObjectPropListener;\nexports.hasOwnProperty = hasOwnProperty;\n\nvar _array = __webpack_require__(2);\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\n/**\n * Generate schema for passed object.\n *\n * @param {Array|Object} object\n * @returns {Array|Object}\n */\nfunction duckSchema(object) {\n  var schema = void 0;\n\n  if (Array.isArray(object)) {\n    schema = [];\n  } else {\n    schema = {};\n\n    objectEach(object, function (value, key) {\n      if (key === '__children') {\n        return;\n      }\n\n      if (value && (typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object' && !Array.isArray(value)) {\n        schema[key] = duckSchema(value);\n      } else if (Array.isArray(value)) {\n        if (value.length && _typeof(value[0]) === 'object' && !Array.isArray(value[0])) {\n          schema[key] = [duckSchema(value[0])];\n        } else {\n          schema[key] = [];\n        }\n      } else {\n        schema[key] = null;\n      }\n    });\n  }\n\n  return schema;\n}\n\n/**\n * Inherit without without calling parent constructor, and setting `Child.prototype.constructor` to `Child` instead of `Parent`.\n * Creates temporary dummy function to call it as constructor.\n * Described in ticket: https://github.com/handsontable/handsontable/pull/516\n *\n * @param  {Object} Child  child class\n * @param  {Object} Parent parent class\n * @return {Object}        extended Child\n */\nfunction inherit(Child, Parent) {\n  Parent.prototype.constructor = Parent;\n  Child.prototype = new Parent();\n  Child.prototype.constructor = Child;\n\n  return Child;\n}\n\n/**\n * Perform shallow extend of a target object with extension's own properties.\n *\n * @param {Object} target An object that will receive the new properties.\n * @param {Object} extension An object containing additional properties to merge into the target.\n */\nfunction extend(target, extension) {\n  objectEach(extension, function (value, key) {\n    target[key] = value;\n  });\n\n  return target;\n}\n\n/**\n * Perform deep extend of a target object with extension's own properties.\n *\n * @param {Object} target An object that will receive the new properties.\n * @param {Object} extension An object containing additional properties to merge into the target.\n */\nfunction deepExtend(target, extension) {\n  objectEach(extension, function (value, key) {\n    if (extension[key] && _typeof(extension[key]) === 'object') {\n      if (!target[key]) {\n        if (Array.isArray(extension[key])) {\n          target[key] = [];\n        } else if (Object.prototype.toString.call(extension[key]) === '[object Date]') {\n          target[key] = extension[key];\n        } else {\n          target[key] = {};\n        }\n      }\n      deepExtend(target[key], extension[key]);\n    } else {\n      target[key] = extension[key];\n    }\n  });\n}\n\n/**\n * Perform deep clone of an object.\n * WARNING! Only clones JSON properties. Will cause error when `obj` contains a function, Date, etc.\n *\n * @param {Object} obj An object that will be cloned\n * @return {Object}\n */\nfunction deepClone(obj) {\n  if ((typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) === 'object') {\n    return JSON.parse(JSON.stringify(obj));\n  }\n\n  return obj;\n}\n\n/**\n * Shallow clone object.\n *\n * @param {Object} object\n * @returns {Object}\n */\nfunction clone(object) {\n  var result = {};\n\n  objectEach(object, function (value, key) {\n    result[key] = value;\n  });\n\n  return result;\n}\n\n/**\n * Extend the Base object (usually prototype) of the functionality the `mixins` objects.\n *\n * @param {Object} Base Base object which will be extended.\n * @param {Object} mixins The object of the functionality will be \"copied\".\n * @returns {Object}\n */\nfunction mixin(Base) {\n  if (!Base.MIXINS) {\n    Base.MIXINS = [];\n  }\n\n  for (var _len = arguments.length, mixins = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n    mixins[_key - 1] = arguments[_key];\n  }\n\n  (0, _array.arrayEach)(mixins, function (mixinItem) {\n    Base.MIXINS.push(mixinItem.MIXIN_NAME);\n\n    objectEach(mixinItem, function (value, key) {\n      if (Base.prototype[key] !== void 0) {\n        throw new Error('Mixin conflict. Property \\'' + key + '\\' already exist and cannot be overwritten.');\n      }\n      if (typeof value === 'function') {\n        Base.prototype[key] = value;\n      } else {\n        var getter = function _getter(property, initialValue) {\n          var propertyName = '_' + property;\n\n          var initValue = function initValue(newValue) {\n            var result = newValue;\n\n            if (Array.isArray(result) || isObject(result)) {\n              result = deepClone(result);\n            }\n\n            return result;\n          };\n\n          return function () {\n            if (this[propertyName] === void 0) {\n              this[propertyName] = initValue(initialValue);\n            }\n\n            return this[propertyName];\n          };\n        };\n        var setter = function _setter(property) {\n          var propertyName = '_' + property;\n\n          return function (newValue) {\n            this[propertyName] = newValue;\n          };\n        };\n        Object.defineProperty(Base.prototype, key, {\n          get: getter(key, value),\n          set: setter(key),\n          configurable: true\n        });\n      }\n    });\n  });\n\n  return Base;\n}\n\n/**\n * Checks if two objects or arrays are (deep) equal\n *\n * @param {Object|Array} object1\n * @param {Object|Array} object2\n * @returns {Boolean}\n */\nfunction isObjectEqual(object1, object2) {\n  return JSON.stringify(object1) === JSON.stringify(object2);\n}\n\n/**\n * Determines whether given object is a plain Object.\n * Note: String and Array are not plain Objects\n * @param {*} obj\n * @returns {boolean}\n */\nfunction isObject(obj) {\n  return Object.prototype.toString.call(obj) === '[object Object]';\n}\n\nfunction defineGetter(object, property, value, options) {\n  options.value = value;\n  options.writable = options.writable !== false;\n  options.enumerable = options.enumerable !== false;\n  options.configurable = options.configurable !== false;\n\n  Object.defineProperty(object, property, options);\n}\n\n/**\n * A specialized version of `.forEach` for objects.\n *\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\nfunction objectEach(object, iteratee) {\n  // eslint-disable-next-line no-restricted-syntax\n  for (var key in object) {\n    if (!object.hasOwnProperty || object.hasOwnProperty && Object.prototype.hasOwnProperty.call(object, key)) {\n      if (iteratee(object[key], key, object) === false) {\n        break;\n      }\n    }\n  }\n\n  return object;\n}\n\n/**\n * Get object property by its name. Access to sub properties can be achieved by dot notation (e.q. `'foo.bar.baz'`).\n *\n * @param {Object} object Object which value will be exported.\n * @param {String} name Object property name.\n * @returns {*}\n */\nfunction getProperty(object, name) {\n  var names = name.split('.');\n  var result = object;\n\n  objectEach(names, function (nameItem) {\n    result = result[nameItem];\n\n    if (result === void 0) {\n      result = void 0;\n\n      return false;\n    }\n  });\n\n  return result;\n}\n\n/**\n * Return object length (recursively).\n *\n * @param {*} object Object for which we want get length.\n * @returns {Number}\n */\nfunction deepObjectSize(object) {\n  if (!isObject(object)) {\n    return 0;\n  }\n  var recursObjLen = function recursObjLen(obj) {\n    var result = 0;\n\n    if (isObject(obj)) {\n      objectEach(obj, function (key) {\n        result += recursObjLen(key);\n      });\n    } else {\n      result += 1;\n    }\n\n    return result;\n  };\n\n  return recursObjLen(object);\n}\n\n/**\n * Create object with property where its value change will be observed.\n *\n * @param {*} [defaultValue=undefined] Default value.\n * @param {String} [propertyToListen='value'] Property to listen.\n * @returns {Object}\n */\nfunction createObjectPropListener(defaultValue) {\n  var _holder;\n\n  var propertyToListen = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'value';\n\n  var privateProperty = '_' + propertyToListen;\n  var holder = (_holder = {\n    _touched: false\n  }, _defineProperty(_holder, privateProperty, defaultValue), _defineProperty(_holder, 'isTouched', function isTouched() {\n    return this._touched;\n  }), _holder);\n\n  Object.defineProperty(holder, propertyToListen, {\n    get: function get() {\n      return this[privateProperty];\n    },\n    set: function set(value) {\n      this._touched = true;\n      this[privateProperty] = value;\n    },\n\n    enumerable: true,\n    configurable: true\n  });\n\n  return holder;\n}\n\n/**\n * Check if at specified `key` there is any value for `object`.\n *\n * @param {Object} object Object to search value at specyfic key.\n * @param {String} key String key to check.\n */\nfunction hasOwnProperty(object, key) {\n  return Object.prototype.hasOwnProperty.call(object, key);\n}\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports.to2dArray = to2dArray;\nexports.extendArray = extendArray;\nexports.pivot = pivot;\nexports.arrayReduce = arrayReduce;\nexports.arrayFilter = arrayFilter;\nexports.arrayMap = arrayMap;\nexports.arrayEach = arrayEach;\nexports.arraySum = arraySum;\nexports.arrayMax = arrayMax;\nexports.arrayMin = arrayMin;\nexports.arrayAvg = arrayAvg;\nexports.arrayFlatten = arrayFlatten;\nexports.arrayUnique = arrayUnique;\nfunction to2dArray(arr) {\n  var ilen = arr.length;\n  var i = 0;\n\n  while (i < ilen) {\n    arr[i] = [arr[i]];\n    i += 1;\n  }\n}\n\nfunction extendArray(arr, extension) {\n  var ilen = extension.length;\n  var i = 0;\n\n  while (i < ilen) {\n    arr.push(extension[i]);\n    i += 1;\n  }\n}\n\nfunction pivot(arr) {\n  var pivotedArr = [];\n\n  if (!arr || arr.length === 0 || !arr[0] || arr[0].length === 0) {\n    return pivotedArr;\n  }\n\n  var rowCount = arr.length;\n  var colCount = arr[0].length;\n\n  for (var i = 0; i < rowCount; i++) {\n    for (var j = 0; j < colCount; j++) {\n      if (!pivotedArr[j]) {\n        pivotedArr[j] = [];\n      }\n\n      pivotedArr[j][i] = arr[i][j];\n    }\n  }\n\n  return pivotedArr;\n}\n\n/**\n * A specialized version of `.reduce` for arrays without support for callback\n * shorthands and `this` binding.\n *\n * {@link https://github.com/lodash/lodash/blob/master/lodash.js}\n *\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {Boolean} [initFromArray] Specify using the first element of `array` as the initial value.\n * @returns {*} Returns the accumulated value.\n */\nfunction arrayReduce(array, iteratee, accumulator, initFromArray) {\n  var index = -1;\n  var iterable = array;\n  var result = accumulator;\n\n  if (!Array.isArray(array)) {\n    iterable = Array.from(array);\n  }\n  var length = iterable.length;\n\n  if (initFromArray && length) {\n    index += 1;\n    result = iterable[index];\n  }\n\n  index += 1;\n\n  while (index < length) {\n    result = iteratee(result, iterable[index], index, iterable);\n    index += 1;\n  }\n\n  return result;\n}\n\n/**\n * A specialized version of `.filter` for arrays without support for callback\n * shorthands and `this` binding.\n *\n * {@link https://github.com/lodash/lodash/blob/master/lodash.js}\n *\n * @param {Array} array The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n  var index = 0;\n  var iterable = array;\n\n  if (!Array.isArray(array)) {\n    iterable = Array.from(array);\n  }\n\n  var length = iterable.length;\n  var result = [];\n  var resIndex = -1;\n\n  while (index < length) {\n    var value = iterable[index];\n\n    if (predicate(value, index, iterable)) {\n      resIndex += 1;\n      result[resIndex] = value;\n    }\n\n    index += 1;\n  }\n\n  return result;\n}\n\n/**\n * A specialized version of `.map` for arrays without support for callback\n * shorthands and `this` binding.\n *\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayMap(array, iteratee) {\n  var index = 0;\n  var iterable = array;\n\n  if (!Array.isArray(array)) {\n    iterable = Array.from(array);\n  }\n\n  var length = iterable.length;\n  var result = [];\n  var resIndex = -1;\n\n  while (index < length) {\n    var value = iterable[index];\n\n    resIndex += 1;\n    result[resIndex] = iteratee(value, index, iterable);\n    index += 1;\n  }\n\n  return result;\n}\n\n/**\n * A specialized version of `.forEach` for arrays without support for callback\n * shorthands and `this` binding.\n *\n * {@link https://github.com/lodash/lodash/blob/master/lodash.js}\n *\n * @param {Array|*} array The array to iterate over or an any element with implemented iterator protocol.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n  var index = 0;\n  var iterable = array;\n\n  if (!Array.isArray(array)) {\n    iterable = Array.from(array);\n  }\n\n  var length = iterable.length;\n\n  while (index < length) {\n    if (iteratee(iterable[index], index, iterable) === false) {\n      break;\n    }\n\n    index += 1;\n  }\n\n  return array;\n}\n\n/**\n * Calculate sum value for each item of the array.\n *\n * @param {Array} array The array to process.\n * @returns {Number} Returns calculated sum value.\n */\nfunction arraySum(array) {\n  return arrayReduce(array, function (a, b) {\n    return a + b;\n  }, 0);\n}\n\n/**\n * Returns the highest value from an array. Can be array of numbers or array of strings.\n * NOTICE: Mixed values is not supported.\n *\n * @param {Array} array The array to process.\n * @returns {Number} Returns the highest value from an array.\n */\nfunction arrayMax(array) {\n  return arrayReduce(array, function (a, b) {\n    return a > b ? a : b;\n  }, Array.isArray(array) ? array[0] : void 0);\n}\n\n/**\n * Returns the lowest value from an array. Can be array of numbers or array of strings.\n * NOTICE: Mixed values is not supported.\n *\n * @param {Array} array The array to process.\n * @returns {Number} Returns the lowest value from an array.\n */\nfunction arrayMin(array) {\n  return arrayReduce(array, function (a, b) {\n    return a < b ? a : b;\n  }, Array.isArray(array) ? array[0] : void 0);\n}\n\n/**\n * Calculate average value for each item of the array.\n *\n * @param {Array} array The array to process.\n * @returns {Number} Returns calculated average value.\n */\nfunction arrayAvg(array) {\n  if (!array.length) {\n    return 0;\n  }\n\n  return arraySum(array) / array.length;\n}\n\n/**\n * Flatten multidimensional array.\n *\n * @param {Array} array Array of Arrays\n * @returns {Array}\n */\nfunction arrayFlatten(array) {\n  return arrayReduce(array, function (initial, value) {\n    return initial.concat(Array.isArray(value) ? arrayFlatten(value) : value);\n  }, []);\n}\n\n/**\n * Unique values in the array.\n *\n * @param {Array} array The array to process.\n * @returns {Array}\n */\nfunction arrayUnique(array) {\n  var unique = [];\n\n  arrayEach(array, function (value) {\n    if (unique.indexOf(value) === -1) {\n      unique.push(value);\n    }\n  });\n\n  return unique;\n}\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar global = __webpack_require__(15);\nvar core = __webpack_require__(37);\nvar hide = __webpack_require__(29);\nvar redefine = __webpack_require__(28);\nvar ctx = __webpack_require__(30);\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n  var IS_FORCED = type & $export.F;\n  var IS_GLOBAL = type & $export.G;\n  var IS_STATIC = type & $export.S;\n  var IS_PROTO = type & $export.P;\n  var IS_BIND = type & $export.B;\n  var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n  var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n  var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n  var key, own, out, exp;\n  if (IS_GLOBAL) source = name;\n  for (key in source) {\n    // contains in native\n    own = !IS_FORCED && target && target[key] !== undefined;\n    // export native or passed\n    out = (own ? target : source)[key];\n    // bind timers to global for call from export context\n    exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n    // extend global\n    if (target) redefine(target, key, out, type & $export.U);\n    // export\n    if (exports[key] != out) hide(exports, key, exp);\n    if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n  }\n};\nglobal.core = core;\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/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports.Viewport = exports.TableRenderer = exports.Table = exports.Settings = exports.Selection = exports.Scroll = exports.Overlays = exports.Event = exports.Core = exports.default = exports.Border = exports.TopLeftCornerOverlay = exports.TopOverlay = exports.LeftOverlay = exports.DebugOverlay = exports.RowFilter = exports.ColumnFilter = exports.CellRange = exports.CellCoords = exports.ViewportRowsCalculator = exports.ViewportColumnsCalculator = undefined;\n\n__webpack_require__(98);\n\n__webpack_require__(113);\n\n__webpack_require__(114);\n\n__webpack_require__(118);\n\n__webpack_require__(119);\n\n__webpack_require__(121);\n\n__webpack_require__(124);\n\n__webpack_require__(125);\n\n__webpack_require__(126);\n\n__webpack_require__(127);\n\n__webpack_require__(128);\n\n__webpack_require__(129);\n\n__webpack_require__(130);\n\n__webpack_require__(131);\n\n__webpack_require__(132);\n\n__webpack_require__(133);\n\n__webpack_require__(134);\n\n__webpack_require__(135);\n\n__webpack_require__(136);\n\n__webpack_require__(137);\n\n__webpack_require__(138);\n\n__webpack_require__(139);\n\n__webpack_require__(140);\n\n__webpack_require__(141);\n\n__webpack_require__(143);\n\n__webpack_require__(145);\n\n__webpack_require__(146);\n\n__webpack_require__(147);\n\n__webpack_require__(148);\n\n__webpack_require__(149);\n\n__webpack_require__(150);\n\n__webpack_require__(151);\n\n__webpack_require__(152);\n\n__webpack_require__(153);\n\n__webpack_require__(154);\n\n__webpack_require__(155);\n\n__webpack_require__(156);\n\n__webpack_require__(157);\n\n__webpack_require__(88);\n\n__webpack_require__(158);\n\n__webpack_require__(159);\n\n__webpack_require__(161);\n\n__webpack_require__(162);\n\n__webpack_require__(163);\n\n__webpack_require__(164);\n\n__webpack_require__(165);\n\n__webpack_require__(166);\n\n__webpack_require__(167);\n\n__webpack_require__(169);\n\n__webpack_require__(170);\n\n__webpack_require__(171);\n\n__webpack_require__(173);\n\n__webpack_require__(174);\n\n__webpack_require__(175);\n\nvar _viewportColumns = __webpack_require__(176);\n\nvar _viewportColumns2 = _interopRequireDefault(_viewportColumns);\n\nvar _viewportRows = __webpack_require__(177);\n\nvar _viewportRows2 = _interopRequireDefault(_viewportRows);\n\nvar _coords = __webpack_require__(56);\n\nvar _coords2 = _interopRequireDefault(_coords);\n\nvar _range = __webpack_require__(178);\n\nvar _range2 = _interopRequireDefault(_range);\n\nvar _column = __webpack_require__(179);\n\nvar _column2 = _interopRequireDefault(_column);\n\nvar _row = __webpack_require__(180);\n\nvar _row2 = _interopRequireDefault(_row);\n\nvar _debug = __webpack_require__(229);\n\nvar _debug2 = _interopRequireDefault(_debug);\n\nvar _left = __webpack_require__(230);\n\nvar _left2 = _interopRequireDefault(_left);\n\nvar _top = __webpack_require__(231);\n\nvar _top2 = _interopRequireDefault(_top);\n\nvar _topLeftCorner = __webpack_require__(232);\n\nvar _topLeftCorner2 = _interopRequireDefault(_topLeftCorner);\n\nvar _border = __webpack_require__(189);\n\nvar _border2 = _interopRequireDefault(_border);\n\nvar _core = __webpack_require__(181);\n\nvar _core2 = _interopRequireDefault(_core);\n\nvar _event = __webpack_require__(182);\n\nvar _event2 = _interopRequireDefault(_event);\n\nvar _overlays = __webpack_require__(183);\n\nvar _overlays2 = _interopRequireDefault(_overlays);\n\nvar _scroll = __webpack_require__(184);\n\nvar _scroll2 = _interopRequireDefault(_scroll);\n\nvar _selection = __webpack_require__(233);\n\nvar _selection2 = _interopRequireDefault(_selection);\n\nvar _settings = __webpack_require__(185);\n\nvar _settings2 = _interopRequireDefault(_settings);\n\nvar _table = __webpack_require__(186);\n\nvar _table2 = _interopRequireDefault(_table);\n\nvar _tableRenderer = __webpack_require__(187);\n\nvar _tableRenderer2 = _interopRequireDefault(_tableRenderer);\n\nvar _viewport = __webpack_require__(188);\n\nvar _viewport2 = _interopRequireDefault(_viewport);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.ViewportColumnsCalculator = _viewportColumns2.default;\nexports.ViewportRowsCalculator = _viewportRows2.default;\nexports.CellCoords = _coords2.default;\nexports.CellRange = _range2.default;\nexports.ColumnFilter = _column2.default;\nexports.RowFilter = _row2.default;\nexports.DebugOverlay = _debug2.default;\nexports.LeftOverlay = _left2.default;\nexports.TopOverlay = _top2.default;\nexports.TopLeftCornerOverlay = _topLeftCorner2.default;\nexports.Border = _border2.default;\nexports.default = _core2.default;\nexports.Core = _core2.default;\nexports.Event = _event2.default;\nexports.Overlays = _overlays2.default;\nexports.Scroll = _scroll2.default;\nexports.Selection = _selection2.default;\nexports.Settings = _settings2.default;\nexports.Table = _table2.default;\nexports.TableRenderer = _tableRenderer2.default;\nexports.Viewport = _viewport2.default;\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nexports.getListenersCounter = getListenersCounter;\n\nvar _element = __webpack_require__(0);\n\nvar _object = __webpack_require__(1);\n\nvar _feature = __webpack_require__(40);\n\nvar _event = __webpack_require__(13);\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * Counter which tracks unregistered listeners (useful for detecting memory leaks).\n *\n * @type {Number}\n */\nvar listenersCounter = 0;\n\n/**\n * Event DOM manager for internal use in Handsontable.\n *\n * @class EventManager\n * @util\n */\n\nvar EventManager = function () {\n  /**\n   * @param {Object} [context=null]\n   * @private\n   */\n  function EventManager() {\n    var context = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n\n    _classCallCheck(this, EventManager);\n\n    this.context = context || this;\n\n    if (!this.context.eventListeners) {\n      this.context.eventListeners = [];\n    }\n  }\n\n  /**\n   * Register specified listener (`eventName`) to the element.\n   *\n   * @param {Element} element Target element.\n   * @param {String} eventName Event name.\n   * @param {Function} callback Function which will be called after event occur.\n   * @returns {Function} Returns function which you can easily call to remove that event\n   */\n\n\n  _createClass(EventManager, [{\n    key: 'addEventListener',\n    value: function addEventListener(element, eventName, callback) {\n      var _this = this;\n\n      var context = this.context;\n\n      function callbackProxy(event) {\n        callback.call(this, extendEvent(context, event));\n      }\n\n      this.context.eventListeners.push({\n        element: element,\n        event: eventName,\n        callback: callback,\n        callbackProxy: callbackProxy\n      });\n\n      if (window.addEventListener) {\n        element.addEventListener(eventName, callbackProxy, false);\n      } else {\n        element.attachEvent('on' + eventName, callbackProxy);\n      }\n\n      listenersCounter += 1;\n\n      return function () {\n        _this.removeEventListener(element, eventName, callback);\n      };\n    }\n\n    /**\n     * Remove the event listener previously registered.\n     *\n     * @param {Element} element Target element.\n     * @param {String} eventName Event name.\n     * @param {Function} callback Function to remove from the event target. It must be the same as during registration listener.\n     */\n\n  }, {\n    key: 'removeEventListener',\n    value: function removeEventListener(element, eventName, callback) {\n      var len = this.context.eventListeners.length;\n      var tmpEvent = void 0;\n\n      while (len) {\n        len -= 1;\n        tmpEvent = this.context.eventListeners[len];\n\n        if (tmpEvent.event === eventName && tmpEvent.element === element) {\n          if (callback && callback !== tmpEvent.callback) {\n            /* eslint-disable no-continue */\n            continue;\n          }\n          this.context.eventListeners.splice(len, 1);\n\n          if (tmpEvent.element.removeEventListener) {\n            tmpEvent.element.removeEventListener(tmpEvent.event, tmpEvent.callbackProxy, false);\n          } else {\n            tmpEvent.element.detachEvent('on' + tmpEvent.event, tmpEvent.callbackProxy);\n          }\n          listenersCounter -= 1;\n        }\n      }\n    }\n\n    /**\n     * Clear all previously registered events.\n     *\n     * @private\n     * @since 0.15.0-beta3\n     */\n\n  }, {\n    key: 'clearEvents',\n    value: function clearEvents() {\n      if (!this.context) {\n        return;\n      }\n      var len = this.context.eventListeners.length;\n\n      while (len) {\n        len -= 1;\n        var event = this.context.eventListeners[len];\n\n        if (event) {\n          this.removeEventListener(event.element, event.event, event.callback);\n        }\n      }\n    }\n\n    /**\n     * Clear all previously registered events.\n     */\n\n  }, {\n    key: 'clear',\n    value: function clear() {\n      this.clearEvents();\n    }\n\n    /**\n     * Destroy instance of EventManager.\n     */\n\n  }, {\n    key: 'destroy',\n    value: function destroy() {\n      this.clearEvents();\n      this.context = null;\n    }\n\n    /**\n     * Trigger event at the specified target element.\n     *\n     * @param {Element} element Target element.\n     * @param {String} eventName Event name.\n     */\n\n  }, {\n    key: 'fireEvent',\n    value: function fireEvent(element, eventName) {\n      var options = {\n        bubbles: true,\n        cancelable: eventName !== 'mousemove',\n        view: window,\n        detail: 0,\n        screenX: 0,\n        screenY: 0,\n        clientX: 1,\n        clientY: 1,\n        ctrlKey: false,\n        altKey: false,\n        shiftKey: false,\n        metaKey: false,\n        button: 0,\n        relatedTarget: undefined\n      };\n      var event = void 0;\n\n      if (document.createEvent) {\n        event = document.createEvent('MouseEvents');\n        event.initMouseEvent(eventName, options.bubbles, options.cancelable, options.view, options.detail, options.screenX, options.screenY, options.clientX, options.clientY, options.ctrlKey, options.altKey, options.shiftKey, options.metaKey, options.button, options.relatedTarget || document.body.parentNode);\n      } else {\n        event = document.createEventObject();\n      }\n\n      if (element.dispatchEvent) {\n        element.dispatchEvent(event);\n      } else {\n        element.fireEvent('on' + eventName, event);\n      }\n    }\n  }]);\n\n  return EventManager;\n}();\n\n/**\n * @param {Object} context\n * @param {Event} event\n * @private\n * @returns {*}\n */\n\n\nfunction extendEvent(context, event) {\n  var componentName = 'HOT-TABLE';\n  var isHotTableSpotted = void 0;\n  var fromElement = void 0;\n  var realTarget = void 0;\n  var target = void 0;\n  var len = void 0;\n\n  event.isTargetWebComponent = false;\n  event.realTarget = event.target;\n\n  var nativeStopImmediatePropagation = event.stopImmediatePropagation;\n\n  event.stopImmediatePropagation = function () {\n    nativeStopImmediatePropagation.apply(this);\n    (0, _event.stopImmediatePropagation)(this);\n  };\n\n  if (!EventManager.isHotTableEnv) {\n    return event;\n  }\n  // eslint-disable-next-line no-param-reassign\n  event = (0, _element.polymerWrap)(event);\n  len = event.path ? event.path.length : 0;\n\n  while (len) {\n    len -= 1;\n\n    if (event.path[len].nodeName === componentName) {\n      isHotTableSpotted = true;\n    } else if (isHotTableSpotted && event.path[len].shadowRoot) {\n      target = event.path[len];\n\n      break;\n    }\n    if (len === 0 && !target) {\n      target = event.path[len];\n    }\n  }\n  if (!target) {\n    target = event.target;\n  }\n  event.isTargetWebComponent = true;\n\n  if ((0, _feature.isWebComponentSupportedNatively)()) {\n    event.realTarget = event.srcElement || event.toElement;\n  } else if ((0, _object.hasOwnProperty)(context, 'hot') || context.isHotTableEnv || context.wtTable) {\n    // Polymer doesn't support `event.target` property properly we must emulate it ourselves\n    if ((0, _object.hasOwnProperty)(context, 'hot')) {\n      // Custom element\n      fromElement = context.hot ? context.hot.view.wt.wtTable.TABLE : null;\n    } else if (context.isHotTableEnv) {\n      // Handsontable.Core\n      fromElement = context.view.activeWt.wtTable.TABLE.parentNode.parentNode;\n    } else if (context.wtTable) {\n      // Walkontable\n      fromElement = context.wtTable.TABLE.parentNode.parentNode;\n    }\n    realTarget = (0, _element.closest)(event.target, [componentName], fromElement);\n\n    if (realTarget) {\n      event.realTarget = fromElement.querySelector(componentName) || event.target;\n    } else {\n      event.realTarget = event.target;\n    }\n  }\n\n  Object.defineProperty(event, 'target', {\n    get: function get() {\n      return (0, _element.polymerWrap)(target);\n    },\n\n    enumerable: true,\n    configurable: true\n  });\n\n  return event;\n}\n\nexports.default = EventManager;\nfunction getListenersCounter() {\n  return listenersCounter;\n}\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\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 && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nexports.isNumeric = isNumeric;\nexports.rangeEach = rangeEach;\nexports.rangeEachReverse = rangeEachReverse;\nexports.valueAccordingPercent = valueAccordingPercent;\n/**\n * Checks if value of n is a numeric one\n * http://jsperf.com/isnan-vs-isnumeric/4\n * @param n\n * @returns {boolean}\n */\nfunction isNumeric(n) {\n  /* eslint-disable */\n  var t = typeof n === 'undefined' ? 'undefined' : _typeof(n);\n\n  return t == 'number' ? !isNaN(n) && isFinite(n) : t == 'string' ? !n.length ? false : n.length == 1 ? /\\d/.test(n) : /^\\s*[+-]?\\s*(?:(?:\\d+(?:\\.\\d+)?(?:e[+-]?\\d+)?)|(?:0x[a-f\\d]+))\\s*$/i.test(n) : t == 'object' ? !!n && typeof n.valueOf() == 'number' && !(n instanceof Date) : false;\n}\n\n/**\n * A specialized version of `.forEach` defined by ranges.\n *\n * @param {Number} rangeFrom The number from start iterate.\n * @param {Number|Function} rangeTo The number where finish iterate or function as a iteratee.\n * @param {Function} [iteratee] The function invoked per iteration.\n */\nfunction rangeEach(rangeFrom, rangeTo, iteratee) {\n  var index = -1;\n\n  if (typeof rangeTo === 'function') {\n    iteratee = rangeTo;\n    rangeTo = rangeFrom;\n  } else {\n    index = rangeFrom - 1;\n  }\n  while (++index <= rangeTo) {\n    if (iteratee(index) === false) {\n      break;\n    }\n  }\n}\n\n/**\n * A specialized version of `.forEach` defined by ranges iterable in reverse order.\n *\n * @param {Number} rangeFrom The number from start iterate.\n * @param {Number|Function} rangeTo The number where finish iterate or function as a iteratee.\n * @param {Function} [iteratee] The function invoked per iteration.\n */\nfunction rangeEachReverse(rangeFrom, rangeTo, iteratee) {\n  var index = rangeFrom + 1;\n\n  if (typeof rangeTo === 'function') {\n    iteratee = rangeTo;\n    rangeTo = 0;\n  }\n  while (--index >= rangeTo) {\n    if (iteratee(index) === false) {\n      break;\n    }\n  }\n}\n\n/**\n * Calculate value from percent.\n *\n * @param {Number} value Base value from percent will be calculated.\n * @param {String|Number} percent Can be Number or String (eq. `'33%'`).\n * @returns {Number}\n */\nfunction valueAccordingPercent(value, percent) {\n  percent = parseInt(percent.toString().replace('%', ''), 10);\n  percent = parseInt(value * percent / 100, 10);\n\n  return percent;\n}\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n/**\n * Constants for parts of translation.\n */\n\nvar CONTEXT_MENU_ITEMS_NAMESPACE = exports.CONTEXT_MENU_ITEMS_NAMESPACE = 'ContextMenu:items';\nvar CONTEXTMENU_ITEMS_ROW_ABOVE = exports.CONTEXTMENU_ITEMS_ROW_ABOVE = CONTEXT_MENU_ITEMS_NAMESPACE + '.insertRowAbove';\nvar CONTEXTMENU_ITEMS_ROW_BELOW = exports.CONTEXTMENU_ITEMS_ROW_BELOW = CONTEXT_MENU_ITEMS_NAMESPACE + '.insertRowBelow';\nvar CONTEXTMENU_ITEMS_INSERT_LEFT = exports.CONTEXTMENU_ITEMS_INSERT_LEFT = CONTEXT_MENU_ITEMS_NAMESPACE + '.insertColumnOnTheLeft';\nvar CONTEXTMENU_ITEMS_INSERT_RIGHT = exports.CONTEXTMENU_ITEMS_INSERT_RIGHT = CONTEXT_MENU_ITEMS_NAMESPACE + '.insertColumnOnTheRight';\nvar CONTEXTMENU_ITEMS_REMOVE_ROW = exports.CONTEXTMENU_ITEMS_REMOVE_ROW = CONTEXT_MENU_ITEMS_NAMESPACE + '.removeRow';\nvar CONTEXTMENU_ITEMS_REMOVE_COLUMN = exports.CONTEXTMENU_ITEMS_REMOVE_COLUMN = CONTEXT_MENU_ITEMS_NAMESPACE + '.removeColumn';\nvar CONTEXTMENU_ITEMS_UNDO = exports.CONTEXTMENU_ITEMS_UNDO = CONTEXT_MENU_ITEMS_NAMESPACE + '.undo';\nvar CONTEXTMENU_ITEMS_REDO = exports.CONTEXTMENU_ITEMS_REDO = CONTEXT_MENU_ITEMS_NAMESPACE + '.redo';\nvar CONTEXTMENU_ITEMS_READ_ONLY = exports.CONTEXTMENU_ITEMS_READ_ONLY = CONTEXT_MENU_ITEMS_NAMESPACE + '.readOnly';\nvar CONTEXTMENU_ITEMS_CLEAR_COLUMN = exports.CONTEXTMENU_ITEMS_CLEAR_COLUMN = CONTEXT_MENU_ITEMS_NAMESPACE + '.clearColumn';\n\nvar CONTEXTMENU_ITEMS_COPY = exports.CONTEXTMENU_ITEMS_COPY = CONTEXT_MENU_ITEMS_NAMESPACE + '.copy';\nvar CONTEXTMENU_ITEMS_CUT = exports.CONTEXTMENU_ITEMS_CUT = CONTEXT_MENU_ITEMS_NAMESPACE + '.cut';\n\nvar CONTEXTMENU_ITEMS_FREEZE_COLUMN = exports.CONTEXTMENU_ITEMS_FREEZE_COLUMN = CONTEXT_MENU_ITEMS_NAMESPACE + '.freezeColumn';\nvar CONTEXTMENU_ITEMS_UNFREEZE_COLUMN = exports.CONTEXTMENU_ITEMS_UNFREEZE_COLUMN = CONTEXT_MENU_ITEMS_NAMESPACE + '.unfreezeColumn';\n\nvar CONTEXTMENU_ITEMS_MERGE_CELLS = exports.CONTEXTMENU_ITEMS_MERGE_CELLS = CONTEXT_MENU_ITEMS_NAMESPACE + '.mergeCells';\nvar CONTEXTMENU_ITEMS_UNMERGE_CELLS = exports.CONTEXTMENU_ITEMS_UNMERGE_CELLS = CONTEXT_MENU_ITEMS_NAMESPACE + '.unmergeCells';\n\nvar CONTEXTMENU_ITEMS_ADD_COMMENT = exports.CONTEXTMENU_ITEMS_ADD_COMMENT = CONTEXT_MENU_ITEMS_NAMESPACE + '.addComment';\nvar CONTEXTMENU_ITEMS_EDIT_COMMENT = exports.CONTEXTMENU_ITEMS_EDIT_COMMENT = CONTEXT_MENU_ITEMS_NAMESPACE + '.editComment';\nvar CONTEXTMENU_ITEMS_REMOVE_COMMENT = exports.CONTEXTMENU_ITEMS_REMOVE_COMMENT = CONTEXT_MENU_ITEMS_NAMESPACE + '.removeComment';\nvar CONTEXTMENU_ITEMS_READ_ONLY_COMMENT = exports.CONTEXTMENU_ITEMS_READ_ONLY_COMMENT = CONTEXT_MENU_ITEMS_NAMESPACE + '.readOnlyComment';\n\nvar CONTEXTMENU_ITEMS_ALIGNMENT = exports.CONTEXTMENU_ITEMS_ALIGNMENT = CONTEXT_MENU_ITEMS_NAMESPACE + '.align';\nvar CONTEXTMENU_ITEMS_ALIGNMENT_LEFT = exports.CONTEXTMENU_ITEMS_ALIGNMENT_LEFT = CONTEXT_MENU_ITEMS_NAMESPACE + '.align.left';\nvar CONTEXTMENU_ITEMS_ALIGNMENT_CENTER = exports.CONTEXTMENU_ITEMS_ALIGNMENT_CENTER = CONTEXT_MENU_ITEMS_NAMESPACE + '.align.center';\nvar CONTEXTMENU_ITEMS_ALIGNMENT_RIGHT = exports.CONTEXTMENU_ITEMS_ALIGNMENT_RIGHT = CONTEXT_MENU_ITEMS_NAMESPACE + '.align.right';\nvar CONTEXTMENU_ITEMS_ALIGNMENT_JUSTIFY = exports.CONTEXTMENU_ITEMS_ALIGNMENT_JUSTIFY = CONTEXT_MENU_ITEMS_NAMESPACE + '.align.justify';\nvar CONTEXTMENU_ITEMS_ALIGNMENT_TOP = exports.CONTEXTMENU_ITEMS_ALIGNMENT_TOP = CONTEXT_MENU_ITEMS_NAMESPACE + '.align.top';\nvar CONTEXTMENU_ITEMS_ALIGNMENT_MIDDLE = exports.CONTEXTMENU_ITEMS_ALIGNMENT_MIDDLE = CONTEXT_MENU_ITEMS_NAMESPACE + '.align.middle';\nvar CONTEXTMENU_ITEMS_ALIGNMENT_BOTTOM = exports.CONTEXTMENU_ITEMS_ALIGNMENT_BOTTOM = CONTEXT_MENU_ITEMS_NAMESPACE + '.align.bottom';\n\nvar CONTEXTMENU_ITEMS_BORDERS = exports.CONTEXTMENU_ITEMS_BORDERS = CONTEXT_MENU_ITEMS_NAMESPACE + '.borders';\nvar CONTEXTMENU_ITEMS_BORDERS_TOP = exports.CONTEXTMENU_ITEMS_BORDERS_TOP = CONTEXT_MENU_ITEMS_NAMESPACE + '.borders.top';\nvar CONTEXTMENU_ITEMS_BORDERS_RIGHT = exports.CONTEXTMENU_ITEMS_BORDERS_RIGHT = CONTEXT_MENU_ITEMS_NAMESPACE + '.borders.right';\nvar CONTEXTMENU_ITEMS_BORDERS_BOTTOM = exports.CONTEXTMENU_ITEMS_BORDERS_BOTTOM = CONTEXT_MENU_ITEMS_NAMESPACE + '.borders.bottom';\nvar CONTEXTMENU_ITEMS_BORDERS_LEFT = exports.CONTEXTMENU_ITEMS_BORDERS_LEFT = CONTEXT_MENU_ITEMS_NAMESPACE + '.borders.left';\nvar CONTEXTMENU_ITEMS_REMOVE_BORDERS = exports.CONTEXTMENU_ITEMS_REMOVE_BORDERS = CONTEXT_MENU_ITEMS_NAMESPACE + '.borders.remove';\n\nvar CONTEXTMENU_ITEMS_NESTED_ROWS_INSERT_CHILD = exports.CONTEXTMENU_ITEMS_NESTED_ROWS_INSERT_CHILD = CONTEXT_MENU_ITEMS_NAMESPACE + '.nestedHeaders.insertChildRow';\nvar CONTEXTMENU_ITEMS_NESTED_ROWS_DETACH_CHILD = exports.CONTEXTMENU_ITEMS_NESTED_ROWS_DETACH_CHILD = CONTEXT_MENU_ITEMS_NAMESPACE + '.nestedHeaders.detachFromParent';\n\nvar CONTEXTMENU_ITEMS_HIDE_COLUMN = exports.CONTEXTMENU_ITEMS_HIDE_COLUMN = CONTEXT_MENU_ITEMS_NAMESPACE + '.hideColumn';\nvar CONTEXTMENU_ITEMS_SHOW_COLUMN = exports.CONTEXTMENU_ITEMS_SHOW_COLUMN = CONTEXT_MENU_ITEMS_NAMESPACE + '.showColumn';\n\nvar CONTEXTMENU_ITEMS_HIDE_ROW = exports.CONTEXTMENU_ITEMS_HIDE_ROW = CONTEXT_MENU_ITEMS_NAMESPACE + '.hideRow';\nvar CONTEXTMENU_ITEMS_SHOW_ROW = exports.CONTEXTMENU_ITEMS_SHOW_ROW = CONTEXT_MENU_ITEMS_NAMESPACE + '.showRow';\n\nvar FILTERS_NAMESPACE = exports.FILTERS_NAMESPACE = 'Filters:';\nvar FILTERS_CONDITIONS_NAMESPACE = exports.FILTERS_CONDITIONS_NAMESPACE = FILTERS_NAMESPACE + 'conditions';\nvar FILTERS_CONDITIONS_NONE = exports.FILTERS_CONDITIONS_NONE = FILTERS_CONDITIONS_NAMESPACE + '.none';\nvar FILTERS_CONDITIONS_EMPTY = exports.FILTERS_CONDITIONS_EMPTY = FILTERS_CONDITIONS_NAMESPACE + '.isEmpty';\nvar FILTERS_CONDITIONS_NOT_EMPTY = exports.FILTERS_CONDITIONS_NOT_EMPTY = FILTERS_CONDITIONS_NAMESPACE + '.isNotEmpty';\nvar FILTERS_CONDITIONS_EQUAL = exports.FILTERS_CONDITIONS_EQUAL = FILTERS_CONDITIONS_NAMESPACE + '.isEqualTo';\nvar FILTERS_CONDITIONS_NOT_EQUAL = exports.FILTERS_CONDITIONS_NOT_EQUAL = FILTERS_CONDITIONS_NAMESPACE + '.isNotEqualTo';\nvar FILTERS_CONDITIONS_BEGINS_WITH = exports.FILTERS_CONDITIONS_BEGINS_WITH = FILTERS_CONDITIONS_NAMESPACE + '.beginsWith';\nvar FILTERS_CONDITIONS_ENDS_WITH = exports.FILTERS_CONDITIONS_ENDS_WITH = FILTERS_CONDITIONS_NAMESPACE + '.endsWith';\nvar FILTERS_CONDITIONS_CONTAINS = exports.FILTERS_CONDITIONS_CONTAINS = FILTERS_CONDITIONS_NAMESPACE + '.contains';\nvar FILTERS_CONDITIONS_NOT_CONTAIN = exports.FILTERS_CONDITIONS_NOT_CONTAIN = FILTERS_CONDITIONS_NAMESPACE + '.doesNotContain';\nvar FILTERS_CONDITIONS_BY_VALUE = exports.FILTERS_CONDITIONS_BY_VALUE = FILTERS_CONDITIONS_NAMESPACE + '.byValue';\nvar FILTERS_CONDITIONS_GREATER_THAN = exports.FILTERS_CONDITIONS_GREATER_THAN = FILTERS_CONDITIONS_NAMESPACE + '.greaterThan';\nvar FILTERS_CONDITIONS_GREATER_THAN_OR_EQUAL = exports.FILTERS_CONDITIONS_GREATER_THAN_OR_EQUAL = FILTERS_CONDITIONS_NAMESPACE + '.greaterThanOrEqualTo';\nvar FILTERS_CONDITIONS_LESS_THAN = exports.FILTERS_CONDITIONS_LESS_THAN = FILTERS_CONDITIONS_NAMESPACE + '.lessThan';\nvar FILTERS_CONDITIONS_LESS_THAN_OR_EQUAL = exports.FILTERS_CONDITIONS_LESS_THAN_OR_EQUAL = FILTERS_CONDITIONS_NAMESPACE + '.lessThanOrEqualTo';\nvar FILTERS_CONDITIONS_BETWEEN = exports.FILTERS_CONDITIONS_BETWEEN = FILTERS_CONDITIONS_NAMESPACE + '.isBetween';\nvar FILTERS_CONDITIONS_NOT_BETWEEN = exports.FILTERS_CONDITIONS_NOT_BETWEEN = FILTERS_CONDITIONS_NAMESPACE + '.isNotBetween';\nvar FILTERS_CONDITIONS_AFTER = exports.FILTERS_CONDITIONS_AFTER = FILTERS_CONDITIONS_NAMESPACE + '.after';\nvar FILTERS_CONDITIONS_BEFORE = exports.FILTERS_CONDITIONS_BEFORE = FILTERS_CONDITIONS_NAMESPACE + '.before';\nvar FILTERS_CONDITIONS_TODAY = exports.FILTERS_CONDITIONS_TODAY = FILTERS_CONDITIONS_NAMESPACE + '.today';\nvar FILTERS_CONDITIONS_TOMORROW = exports.FILTERS_CONDITIONS_TOMORROW = FILTERS_CONDITIONS_NAMESPACE + '.tomorrow';\nvar FILTERS_CONDITIONS_YESTERDAY = exports.FILTERS_CONDITIONS_YESTERDAY = FILTERS_CONDITIONS_NAMESPACE + '.yesterday';\n\nvar FILTERS_DIVS_FILTER_BY_CONDITION = exports.FILTERS_DIVS_FILTER_BY_CONDITION = FILTERS_NAMESPACE + 'labels.filterByCondition';\nvar FILTERS_DIVS_FILTER_BY_VALUE = exports.FILTERS_DIVS_FILTER_BY_VALUE = FILTERS_NAMESPACE + 'labels.filterByValue';\n\nvar FILTERS_LABELS_CONJUNCTION = exports.FILTERS_LABELS_CONJUNCTION = FILTERS_NAMESPACE + 'labels.conjunction';\nvar FILTERS_LABELS_DISJUNCTION = exports.FILTERS_LABELS_DISJUNCTION = FILTERS_NAMESPACE + 'labels.disjunction';\n\nvar FILTERS_VALUES_BLANK_CELLS = exports.FILTERS_VALUES_BLANK_CELLS = FILTERS_NAMESPACE + 'values.blankCells';\n\nvar FILTERS_BUTTONS_SELECT_ALL = exports.FILTERS_BUTTONS_SELECT_ALL = FILTERS_NAMESPACE + 'buttons.selectAll';\nvar FILTERS_BUTTONS_CLEAR = exports.FILTERS_BUTTONS_CLEAR = FILTERS_NAMESPACE + 'buttons.clear';\nvar FILTERS_BUTTONS_OK = exports.FILTERS_BUTTONS_OK = FILTERS_NAMESPACE + 'buttons.ok';\nvar FILTERS_BUTTONS_CANCEL = exports.FILTERS_BUTTONS_CANCEL = FILTERS_NAMESPACE + 'buttons.cancel';\n\nvar FILTERS_BUTTONS_PLACEHOLDER_SEARCH = exports.FILTERS_BUTTONS_PLACEHOLDER_SEARCH = FILTERS_NAMESPACE + 'buttons.placeholder.search';\nvar FILTERS_BUTTONS_PLACEHOLDER_VALUE = exports.FILTERS_BUTTONS_PLACEHOLDER_VALUE = FILTERS_NAMESPACE + 'buttons.placeholder.value';\nvar FILTERS_BUTTONS_PLACEHOLDER_SECOND_VALUE = exports.FILTERS_BUTTONS_PLACEHOLDER_SECOND_VALUE = FILTERS_NAMESPACE + 'buttons.placeholder.secondValue';\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports.getPluginName = exports.getRegistredPluginNames = exports.getPlugin = exports.registerPlugin = undefined;\n\nvar _pluginHooks = __webpack_require__(16);\n\nvar _pluginHooks2 = _interopRequireDefault(_pluginHooks);\n\nvar _object = __webpack_require__(1);\n\nvar _string = __webpack_require__(33);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar registeredPlugins = new WeakMap();\n\n/**\n * Registers plugin under given name\n *\n * @param {String} pluginName\n * @param {Function} PluginClass\n */\n/**\n * Utility to register plugins and common namespace for keeping reference to all plugins classes\n */\nfunction registerPlugin(pluginName, PluginClass) {\n  var correctedPluginName = (0, _string.toUpperCaseFirst)(pluginName);\n\n  _pluginHooks2.default.getSingleton().add('construct', function () {\n    if (!registeredPlugins.has(this)) {\n      registeredPlugins.set(this, {});\n    }\n\n    var holder = registeredPlugins.get(this);\n\n    if (!holder[correctedPluginName]) {\n      holder[correctedPluginName] = new PluginClass(this);\n    }\n  });\n  _pluginHooks2.default.getSingleton().add('afterDestroy', function () {\n    if (registeredPlugins.has(this)) {\n      var pluginsHolder = registeredPlugins.get(this);\n\n      (0, _object.objectEach)(pluginsHolder, function (plugin) {\n        return plugin.destroy();\n      });\n      registeredPlugins.delete(this);\n    }\n  });\n}\n\n/**\n * @param {Object} instance\n * @param {String|Function} pluginName\n * @returns {Function} pluginClass Returns plugin instance if exists or `undefined` if not exists.\n */\nfunction getPlugin(instance, pluginName) {\n  if (typeof pluginName !== 'string') {\n    throw Error('Only strings can be passed as \"plugin\" parameter');\n  }\n  var _pluginName = (0, _string.toUpperCaseFirst)(pluginName);\n\n  if (!registeredPlugins.has(instance) || !registeredPlugins.get(instance)[_pluginName]) {\n    return void 0;\n  }\n\n  return registeredPlugins.get(instance)[_pluginName];\n}\n\n/**\n * Get all registred plugins names for concrete Handsontable instance.\n *\n * @param {Object} hotInstance\n * @returns {Array}\n */\nfunction getRegistredPluginNames(hotInstance) {\n  return registeredPlugins.has(hotInstance) ? Object.keys(registeredPlugins.get(hotInstance)) : [];\n}\n\n/**\n * Get plugin name.\n *\n * @param {Object} hotInstance\n * @param {Object} plugin\n * @returns {String|null}\n */\nfunction getPluginName(hotInstance, plugin) {\n  var pluginName = null;\n\n  if (registeredPlugins.has(hotInstance)) {\n    (0, _object.objectEach)(registeredPlugins.get(hotInstance), function (pluginInstance, name) {\n      if (pluginInstance === plugin) {\n        pluginName = name;\n      }\n    });\n  }\n\n  return pluginName;\n}\n\nexports.registerPlugin = registerPlugin;\nexports.getPlugin = getPlugin;\nexports.getRegistredPluginNames = getRegistredPluginNames;\nexports.getPluginName = getPluginName;\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports) {\n\nmodule.exports = function (it) {\n  return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _object = __webpack_require__(1);\n\nvar _array = __webpack_require__(2);\n\nvar _recordTranslator = __webpack_require__(195);\n\nvar _plugins = __webpack_require__(8);\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar privatePool = new WeakMap();\nvar initializedPlugins = null;\n\n/**\n * @util\n */\n\nvar BasePlugin = function () {\n  /**\n   * @param {Object} hotInstance Handsontable instance.\n   */\n  function BasePlugin(hotInstance) {\n    var _this = this;\n\n    _classCallCheck(this, BasePlugin);\n\n    /**\n     * Handsontable instance.\n     *\n     * @type {Core}\n     */\n    (0, _object.defineGetter)(this, 'hot', hotInstance, {\n      writable: false\n    });\n    (0, _object.defineGetter)(this, 't', (0, _recordTranslator.getTranslator)(hotInstance), {\n      writable: false\n    });\n\n    privatePool.set(this, { hooks: {} });\n    initializedPlugins = null;\n\n    this.pluginName = null;\n    this.pluginsInitializedCallbacks = [];\n    this.isPluginsReady = false;\n    this.enabled = false;\n    this.initialized = false;\n\n    this.hot.addHook('afterPluginsInitialized', function () {\n      return _this.onAfterPluginsInitialized();\n    });\n    this.hot.addHook('afterUpdateSettings', function () {\n      return _this.onUpdateSettings();\n    });\n    this.hot.addHook('beforeInit', function () {\n      return _this.init();\n    });\n  }\n\n  _createClass(BasePlugin, [{\n    key: 'init',\n    value: function init() {\n      this.pluginName = (0, _plugins.getPluginName)(this.hot, this);\n\n      if (this.isEnabled && this.isEnabled()) {\n        this.enablePlugin();\n      }\n      if (!initializedPlugins) {\n        initializedPlugins = (0, _plugins.getRegistredPluginNames)(this.hot);\n      }\n      if (initializedPlugins.indexOf(this.pluginName) >= 0) {\n        initializedPlugins.splice(initializedPlugins.indexOf(this.pluginName), 1);\n      }\n      if (!initializedPlugins.length) {\n        this.hot.runHooks('afterPluginsInitialized');\n      }\n      this.initialized = true;\n    }\n\n    /**\n     * Enable plugin for this Handsontable instance.\n     */\n\n  }, {\n    key: 'enablePlugin',\n    value: function enablePlugin() {\n      this.enabled = true;\n    }\n\n    /**\n     * Disable plugin for this Handsontable instance.\n     */\n\n  }, {\n    key: 'disablePlugin',\n    value: function disablePlugin() {\n      if (this.eventManager) {\n        this.eventManager.clear();\n      }\n      this.clearHooks();\n      this.enabled = false;\n    }\n\n    /**\n     * Add listener to plugin hooks system.\n     *\n     * @param {String} name\n     * @param {Function} callback\n     */\n\n  }, {\n    key: 'addHook',\n    value: function addHook(name, callback) {\n      privatePool.get(this).hooks[name] = privatePool.get(this).hooks[name] || [];\n\n      var hooks = privatePool.get(this).hooks[name];\n\n      this.hot.addHook(name, callback);\n      hooks.push(callback);\n      privatePool.get(this).hooks[name] = hooks;\n    }\n\n    /**\n     * Remove all hooks listeners by hook name.\n     *\n     * @param {String} name\n     */\n\n  }, {\n    key: 'removeHooks',\n    value: function removeHooks(name) {\n      var _this2 = this;\n\n      (0, _array.arrayEach)(privatePool.get(this).hooks[name] || [], function (callback) {\n        _this2.hot.removeHook(name, callback);\n      });\n    }\n\n    /**\n     * Clear all hooks.\n     */\n\n  }, {\n    key: 'clearHooks',\n    value: function clearHooks() {\n      var _this3 = this;\n\n      var hooks = privatePool.get(this).hooks;\n\n      (0, _object.objectEach)(hooks, function (callbacks, name) {\n        return _this3.removeHooks(name);\n      });\n      hooks.length = 0;\n    }\n\n    /**\n     * Register function which will be immediately called after all plugins initialized.\n     *\n     * @param {Function} callback\n     */\n\n  }, {\n    key: 'callOnPluginsReady',\n    value: function callOnPluginsReady(callback) {\n      if (this.isPluginsReady) {\n        callback();\n      } else {\n        this.pluginsInitializedCallbacks.push(callback);\n      }\n    }\n\n    /**\n     * On after plugins initialized listener.\n     *\n     * @private\n     */\n\n  }, {\n    key: 'onAfterPluginsInitialized',\n    value: function onAfterPluginsInitialized() {\n      (0, _array.arrayEach)(this.pluginsInitializedCallbacks, function (callback) {\n        return callback();\n      });\n      this.pluginsInitializedCallbacks.length = 0;\n      this.isPluginsReady = true;\n    }\n\n    /**\n     * On update settings listener.\n     *\n     * @private\n     */\n\n  }, {\n    key: 'onUpdateSettings',\n    value: function onUpdateSettings() {\n      if (this.isEnabled) {\n        if (this.enabled && !this.isEnabled()) {\n          this.disablePlugin();\n        }\n        if (!this.enabled && this.isEnabled()) {\n          this.enablePlugin();\n        }\n        if (this.enabled && this.isEnabled()) {\n          this.updatePlugin();\n        }\n      }\n    }\n\n    /**\n     * Updates the plugin to use the latest options you have specified.\n     *\n     * @private\n     */\n\n  }, {\n    key: 'updatePlugin',\n    value: function updatePlugin() {}\n\n    /**\n     * Destroy plugin.\n     */\n\n  }, {\n    key: 'destroy',\n    value: function destroy() {\n      var _this4 = this;\n\n      if (this.eventManager) {\n        this.eventManager.destroy();\n      }\n      this.clearHooks();\n\n      (0, _object.objectEach)(this, function (value, property) {\n        if (property !== 'hot' && property !== 't') {\n          _this4[property] = null;\n        }\n      });\n      delete this.t;\n      delete this.hot;\n    }\n  }]);\n\n  return BasePlugin;\n}();\n\nexports.default = BasePlugin;\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\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 && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _templateObject = _taggedTemplateLiteral(['\\n          Your license key of Handsontable Pro has expired.\\u200C\\u200C\\u200C\\u200C \\n          Renew your maintenance plan at https://handsontable.com or downgrade to the previous version of the software.\\n          '], ['\\n          Your license key of Handsontable Pro has expired.\\u200C\\u200C\\u200C\\u200C \\n          Renew your maintenance plan at https://handsontable.com or downgrade to the previous version of the software.\\n          ']);\n\nexports.stringify = stringify;\nexports.isDefined = isDefined;\nexports.isUndefined = isUndefined;\nexports.isEmpty = isEmpty;\nexports.isRegExp = isRegExp;\nexports._injectProductInfo = _injectProductInfo;\n\nvar _moment = __webpack_require__(57);\n\nvar _moment2 = _interopRequireDefault(_moment);\n\nvar _templateLiteralTag = __webpack_require__(42);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _taggedTemplateLiteral(strings, raw) { return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }\n\n/**\n * Converts any value to string.\n *\n * @param {*} value\n * @returns {String}\n */\nfunction stringify(value) {\n  var result = void 0;\n\n  switch (typeof value === 'undefined' ? 'undefined' : _typeof(value)) {\n    case 'string':\n    case 'number':\n      result = '' + value;\n      break;\n\n    case 'object':\n      result = value === null ? '' : value.toString();\n      break;\n    case 'undefined':\n      result = '';\n      break;\n    default:\n      result = value.toString();\n      break;\n  }\n\n  return result;\n}\n\n/**\n * Checks if given variable is defined.\n *\n * @param {*} variable Variable to check.\n * @returns {Boolean}\n */\nfunction isDefined(variable) {\n  return typeof variable !== 'undefined';\n}\n\n/**\n * Checks if given variable is undefined.\n *\n * @param {*} variable Variable to check.\n * @returns {Boolean}\n */\nfunction isUndefined(variable) {\n  return typeof variable === 'undefined';\n}\n\n/**\n * Check if given variable is null, empty string or undefined.\n *\n * @param {*} variable Variable to check.\n * @returns {Boolean}\n */\nfunction isEmpty(variable) {\n  return variable === null || variable === '' || isUndefined(variable);\n}\n\n/**\n * Check if given variable is a regular expression.\n *\n * @param {*} variable Variable to check.\n * @returns {Boolean}\n */\nfunction isRegExp(variable) {\n  return Object.prototype.toString.call(variable) === '[object RegExp]';\n}\n\n/* eslint-disable */\nvar _m = '\\x6C\\x65\\x6E\\x67\\x74\\x68';\nvar _hd = function _hd(v) {\n  return parseInt(v, 16);\n};\nvar _pi = function _pi(v) {\n  return parseInt(v, 10);\n};\nvar _ss = function _ss(v, s, l) {\n  return v['\\x73\\x75\\x62\\x73\\x74\\x72'](s, l);\n};\nvar _cp = function _cp(v) {\n  return v['\\x63\\x6F\\x64\\x65\\x50\\x6F\\x69\\x6E\\x74\\x41\\x74'](0) - 65;\n};\nvar _norm = function _norm(v) {\n  return ('' + v).replace(/\\-/g, '');\n};\nvar _extractTime = function _extractTime(v) {\n  return _hd(_ss(_norm(v), _hd('12'), _cp('\\x46'))) / (_hd(_ss(_norm(v), _cp('\\x42'), ~~![][_m])) || 9);\n};\nvar _ignored = function _ignored() {\n  return typeof location !== 'undefined' && /^([a-z0-9\\-]+\\.)?\\x68\\x61\\x6E\\x64\\x73\\x6F\\x6E\\x74\\x61\\x62\\x6C\\x65\\x2E\\x63\\x6F\\x6D$/i.test(location.host);\n};\nvar _notified = false;\n\nfunction _injectProductInfo(key, element) {\n  key = _norm(key || '');\n\n  var warningMessage = '';\n  var showDomMessage = true;\n  var schemaValidity = _checkKeySchema(key);\n  var ignored = _ignored();\n  var trial = isEmpty(key) || key === 'trial';\n\n  if (trial || schemaValidity) {\n    if (schemaValidity) {\n      var releaseTime = Math.floor((0, _moment2.default)('12/09/2018', 'DD/MM/YYYY').toDate().getTime() / 8.64e7);\n      var keyGenTime = _extractTime(key);\n\n      if (keyGenTime > 45000 || keyGenTime !== parseInt(keyGenTime, 10)) {\n        warningMessage = 'The license key provided to Handsontable Pro is invalid. Make sure you pass it correctly.';\n      }\n\n      if (!warningMessage) {\n        if (releaseTime > keyGenTime + 1) {\n          warningMessage = (0, _templateLiteralTag.toSingleLine)(_templateObject);\n        }\n        showDomMessage = releaseTime > keyGenTime + 15;\n      }\n    } else {\n      warningMessage = 'Evaluation version of Handsontable Pro. Not licensed for use in a production environment.';\n    }\n  } else {\n    warningMessage = 'The license key provided to Handsontable Pro is invalid. Make sure you pass it correctly.';\n  }\n  if (ignored) {\n    warningMessage = false;\n    showDomMessage = false;\n  }\n\n  if (warningMessage && !_notified) {\n    console[trial ? 'info' : 'warn'](warningMessage);\n    _notified = true;\n  }\n  if (showDomMessage && element.parentNode) {\n    var message = document.createElement('div');\n\n    message.id = 'hot-display-license-info';\n    message.appendChild(document.createTextNode('Evaluation version of Handsontable Pro.'));\n    message.appendChild(document.createElement('br'));\n    message.appendChild(document.createTextNode('Not licensed for production use.'));\n\n    element.parentNode.insertBefore(message, element.nextSibling);\n  }\n}\n\nfunction _checkKeySchema(v) {\n  var z = [][_m];\n  var p = z;\n\n  if (v[_m] !== _cp('\\x5A')) {\n    return false;\n  }\n\n  for (var c = '', i = '\\x42\\x3C\\x48\\x34\\x50\\x2B'.split(''), j = _cp(i.shift()); j; j = _cp(i.shift() || 'A')) {\n    --j < ''[_m] ? p = p | (_pi('' + _pi(_hd(c) + (_hd(_ss(v, Math.abs(j), 2)) + []).padStart(2, '0'))) % 97 || 2) >> 1 : c = _ss(v, j, !j ? 6 : i[_m] === 1 ? 9 : 8);\n  }\n\n  return p === z;\n}\n/* eslint-enable */\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar store = __webpack_require__(79)('wks');\nvar uid = __webpack_require__(50);\nvar Symbol = __webpack_require__(15).Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n  return store[name] || (store[name] =\n    USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports.stopImmediatePropagation = stopImmediatePropagation;\nexports.isImmediatePropagationStopped = isImmediatePropagationStopped;\nexports.stopPropagation = stopPropagation;\nexports.pageX = pageX;\nexports.pageY = pageY;\nexports.isRightClick = isRightClick;\nexports.isLeftClick = isLeftClick;\n\nvar _element = __webpack_require__(0);\n\n/**\n * Prevent other listeners of the same event from being called.\n *\n * @param {Event} event\n */\nfunction stopImmediatePropagation(event) {\n  event.isImmediatePropagationEnabled = false;\n  event.cancelBubble = true;\n}\n\n/**\n * Check if event was stopped by `stopImmediatePropagation`.\n *\n * @param event {Event}\n * @returns {Boolean}\n */\nfunction isImmediatePropagationStopped(event) {\n  return event.isImmediatePropagationEnabled === false;\n}\n\n/**\n * Prevent further propagation of the current event (prevent bubbling).\n *\n * @param event {Event}\n */\nfunction stopPropagation(event) {\n  // ie8\n  // http://msdn.microsoft.com/en-us/library/ie/ff975462(v=vs.85).aspx\n  if (typeof event.stopPropagation === 'function') {\n    event.stopPropagation();\n  } else {\n    event.cancelBubble = true;\n  }\n}\n\n/**\n * Get horizontal coordinate of the event object relative to the whole document.\n *\n * @param {Event} event\n * @returns {Number}\n */\nfunction pageX(event) {\n  if (event.pageX) {\n    return event.pageX;\n  }\n\n  return event.clientX + (0, _element.getWindowScrollLeft)();\n}\n\n/**\n * Get vertical coordinate of the event object relative to the whole document.\n *\n * @param {Event} event\n * @returns {Number}\n */\nfunction pageY(event) {\n  if (event.pageY) {\n    return event.pageY;\n  }\n\n  return event.clientY + (0, _element.getWindowScrollTop)();\n}\n\n/**\n * Check if provided event was triggered by clicking the right mouse button.\n *\n * @param {Event} event DOM Event.\n * @returns {Boolean}\n */\nfunction isRightClick(event) {\n  return event.button === 2;\n}\n\n/**\n * Check if provided event was triggered by clicking the left mouse button.\n *\n * @param {Event} event DOM Event.\n * @returns {Boolean}\n */\nfunction isLeftClick(event) {\n  return event.button === 0;\n}\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports.getRegisteredRenderers = exports.getRegisteredRendererNames = exports.hasRenderer = exports.getRenderer = exports.registerRenderer = undefined;\n\nvar _staticRegister2 = __webpack_require__(38);\n\nvar _staticRegister3 = _interopRequireDefault(_staticRegister2);\n\nvar _cellDecorator = __webpack_require__(243);\n\nvar _cellDecorator2 = _interopRequireDefault(_cellDecorator);\n\nvar _autocompleteRenderer = __webpack_require__(244);\n\nvar _autocompleteRenderer2 = _interopRequireDefault(_autocompleteRenderer);\n\nvar _checkboxRenderer = __webpack_require__(245);\n\nvar _checkboxRenderer2 = _interopRequireDefault(_checkboxRenderer);\n\nvar _htmlRenderer = __webpack_require__(246);\n\nvar _htmlRenderer2 = _interopRequireDefault(_htmlRenderer);\n\nvar _numericRenderer = __webpack_require__(247);\n\nvar _numericRenderer2 = _interopRequireDefault(_numericRenderer);\n\nvar _passwordRenderer = __webpack_require__(249);\n\nvar _passwordRenderer2 = _interopRequireDefault(_passwordRenderer);\n\nvar _textRenderer = __webpack_require__(250);\n\nvar _textRenderer2 = _interopRequireDefault(_textRenderer);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar _staticRegister = (0, _staticRegister3.default)('renderers'),\n    register = _staticRegister.register,\n    getItem = _staticRegister.getItem,\n    hasItem = _staticRegister.hasItem,\n    getNames = _staticRegister.getNames,\n    getValues = _staticRegister.getValues;\n\nregister('base', _cellDecorator2.default);\nregister('autocomplete', _autocompleteRenderer2.default);\nregister('checkbox', _checkboxRenderer2.default);\nregister('html', _htmlRenderer2.default);\nregister('numeric', _numericRenderer2.default);\nregister('password', _passwordRenderer2.default);\nregister('text', _textRenderer2.default);\n\n/**\n * Retrieve renderer function.\n *\n * @param {String} name Renderer identification.\n * @returns {Function} Returns renderer function.\n */\nfunction _getItem(name) {\n  if (typeof name === 'function') {\n    return name;\n  }\n  if (!hasItem(name)) {\n    throw Error('No registered renderer found under \"' + name + '\" name');\n  }\n\n  return getItem(name);\n}\n\nexports.registerRenderer = register;\nexports.getRenderer = _getItem;\nexports.hasRenderer = hasItem;\nexports.getRegisteredRendererNames = getNames;\nexports.getRegisteredRenderers = getValues;\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports) {\n\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\n  // eslint-disable-next-line no-new-func\n  : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _array = __webpack_require__(2);\n\nvar _object = __webpack_require__(1);\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * @description\n * Handsontable events are the common interface that function in 2 ways: as __callbacks__ and as __hooks__.\n *\n * @example\n *\n * ```js\n * // Using events as callbacks:\n * ...\n * const hot1 = new Handsontable(document.getElementById('example1'), {\n *   afterChange: function(changes, source) {\n *     $.ajax({\n *       url: \"save.php',\n *       data: change\n *     });\n *   }\n * });\n * ...\n * ```\n *\n * ```js\n * // Using events as plugin hooks:\n * ...\n * const hot1 = new Handsontable(document.getElementById('example1'), {\n *   myPlugin: true\n * });\n *\n * const hot2 = new Handsontable(document.getElementById('example2'), {\n *   myPlugin: false\n * });\n *\n * // global hook\n * Handsontable.hooks.add('afterChange', function() {\n *   // Fired twice - for hot1 and hot2\n *   if (this.getSettings().myPlugin) {\n *     // function body - will only run for hot1\n *   }\n * });\n *\n * // local hook (has same effect as a callback)\n * hot2.addHook('afterChange', function() {\n *   // function body - will only run in #example2\n * });\n * ```\n * ...\n */\n\n// @TODO: Move plugin description hooks to plugin?\nvar REGISTERED_HOOKS = [\n/**\n * Fired after resetting a cell's meta. This happens when the {@link Core#updateSettings} method is called.\n *\n * @event Hooks#afterCellMetaReset\n */\n'afterCellMetaReset',\n\n/**\n * Fired after one or more cells has been changed. The changes are triggered in any situation when the\n * value is entered using an editor or changed using API (e.q setDataAtCell)\n *\n * __Note:__ For performance reasons, the `changes` array is null for `\"loadData\"` source.\n *\n * @event Hooks#afterChange\n * @param {Array} changes 2D array containing information about each of the edited cells `[[row, prop, oldVal, newVal], ...]`.\n * @param {String} [source] String that identifies source of hook call ([list of all available sources]{@link https://docs.handsontable.com/tutorial-using-callbacks.html#page-source-definition}).\n * @example\n * ```js\n * new Handsontable(element, {\n *   afterChange: (changes) => {\n *     changes.forEach(([row, prop, oldValue, newValue]) => {\n *       // Some logic...\n *     });\n *   }\n * })\n * ```\n */\n'afterChange',\n\n/**\n * Fired by {@link ObserveChanges} plugin after detecting changes in the data source. This hook is fired when\n * {@link Options#observeChanges} option is enabled.\n *\n * @event Hooks#afterChangesObserved\n */\n'afterChangesObserved',\n\n/**\n * Fired by {@link ContextMenu} after setting up the Context Menu's default options. These options are a collection\n * which user can select by setting an array of keys or an array of objects in {@link Options#contextMenu} option.\n *\n * @event Hooks#afterContextMenuDefaultOptions\n * @param {Array} predefinedItems An array of objects containing information about the pre-defined Context Menu items.\n */\n'afterContextMenuDefaultOptions',\n\n/**\n * Fired by {@link ContextMenu} plugin before setting up the Context Menu's items but after filtering these options by\n * user (`contextMenu` option). This hook can by helpful to determine if user use specified menu item or to set up\n * one of the menu item to by always visible.\n *\n * @event Hooks#beforeContextMenuSetItems\n * @param {Object[]} menuItems An array of objects containing information about to generated Context Menu items.\n */\n'beforeContextMenuSetItems',\n\n/**\n * Fired by {@link DropdownMenu} plugin after setting up the Dropdown Menu's default options. These options are a\n * collection which user can select by setting an array of keys or an array of objects in {@link Options#dropdownMenu}\n * option.\n *\n * @pro\n * @event Hooks#afterDropdownMenuDefaultOptions\n * @param {Object[]} predefinedItems An array of objects containing information about the pre-defined Context Menu items.\n */\n'afterDropdownMenuDefaultOptions',\n\n/**\n * Fired by {@link DropdownMenu} plugin before setting up the Dropdown Menu's items but after filtering these options\n * by user (`dropdownMenu` option). This hook can by helpful to determine if user use specified menu item or to set\n * up one of the menu item to by always visible.\n *\n * @pro\n * @event Hooks#beforeDropdownMenuSetItems\n * @param {Object[]} menuItems An array of objects containing information about to generated Dropdown Menu items.\n */\n'beforeDropdownMenuSetItems',\n\n/**\n * Fired by {@link ContextMenu} plugin after hiding the Context Menu. This hook is fired when {@link Options#contextMenu}\n * option is enabled.\n *\n * @event Hooks#afterContextMenuHide\n * @param {Object} context The Context Menu plugin instance.\n */\n'afterContextMenuHide',\n\n/**\n * Fired by {@link ContextMenu} plugin before opening the Context Menu. This hook is fired when {@link Options#contextMenu}\n * option is enabled.\n *\n * @event Hooks#beforeContextMenuShow\n * @param {Object} context The Context Menu instance.\n */\n'beforeContextMenuShow',\n\n/**\n * Fired by {@link ContextMenu} plugin after opening the Context Menu. This hook is fired when {@link Options#contextMenu}\n * option is enabled.\n *\n * @event Hooks#afterContextMenuShow\n * @param {Object} context The Context Menu plugin instance.\n */\n'afterContextMenuShow',\n\n/**\n * Fired by {@link CopyPaste} plugin after reaching the copy limit while copying data. This hook is fired when\n * {@link Options#copyPaste} option is enabled.\n *\n * @event Hooks#afterCopyLimit\n * @param {Number} selectedRows Count of selected copyable rows.\n * @param {Number} selectedColumns Count of selected copyable columns.\n * @param {Number} copyRowsLimit Current copy rows limit.\n * @param {Number} copyColumnsLimit Current copy columns limit.\n */\n'afterCopyLimit',\n\n/**\n * Fired before created a new column.\n *\n * @event Hooks#beforeCreateCol\n * @param {Number} index Represents the visual index of first newly created column in the data source array.\n * @param {Number} amount Number of newly created columns in the data source array.\n * @param {String} [source] String that identifies source of hook call\n *                          ([list of all available sources]{@link http://docs.handsontable.com/tutorial-using-callbacks.html#page-source-definition}).\n */\n'beforeCreateCol',\n\n/**\n * Fired after created a new column.\n *\n * @event Hooks#afterCreateCol\n * @param {Number} index Represents the visual index of first newly created column in the data source.\n * @param {Number} amount Number of newly created columns in the data source.\n * @param {String} [source] String that identifies source of hook call\n *                          ([list of all available sources]{@link http://docs.handsontable.com/tutorial-using-callbacks.html#page-source-definition}).\n */\n'afterCreateCol',\n\n/**\n * Fired before created a new row.\n *\n * @event Hooks#beforeCreateRow\n * @param {Number} index Represents the visual index of first newly created row in the data source array.\n * @param {Number} amount Number of newly created rows in the data source array.\n * @param {String} [source] String that identifies source of hook call\n *                          ([list of all available sources]{@link http://docs.handsontable.com/tutorial-using-callbacks.html#page-source-definition}).\n */\n'beforeCreateRow',\n\n/**\n * Fired after created a new row.\n *\n * @event Hooks#afterCreateRow\n * @param {Number} index Represents the visual index of first newly created row in the data source array.\n * @param {Number} amount Number of newly created rows in the data source array.\n * @param {String} [source] String that identifies source of hook call\n *                          ([list of all available sources]{@link http://docs.handsontable.com/tutorial-using-callbacks.html#page-source-definition}).\n */\n'afterCreateRow',\n\n/**\n * Fired after the current cell is deselected.\n *\n * @event Hooks#afterDeselect\n */\n'afterDeselect',\n\n/**\n * Fired after destroying the Handsontable instance.\n *\n * @event Hooks#afterDestroy\n */\n'afterDestroy',\n\n/**\n * General hook which captures `keydown` events attached to the document body. These events are delegated to the\n * hooks system and consumed by Core and internal modules (e.g plugins, editors).\n *\n * @event Hooks#afterDocumentKeyDown\n * @param {Event} event A native `keydown` event object.\n */\n'afterDocumentKeyDown',\n\n/**\n * Fired inside the Walkontable's selection `draw` method. Can be used to add additional class names to cells, depending on the current selection.\n *\n * @event Hooks#afterDrawSelection\n * @param {Number} currentRow Row index of the currently processed cell.\n * @param {Number} currentColumn Column index of the currently cell.\n * @param {Number[]} cornersOfSelection Array of the current selection in a form of `[startRow, startColumn, endRow, endColumn]`.\n * @param {Number|undefined} layerLevel Number indicating which layer of selection is currently processed.\n * @since 0.38.1\n * @returns {String|undefined} Can return a `String`, which will act as an additional `className` to be added to the currently processed cell.\n */\n'afterDrawSelection',\n\n/**\n * Fired inside the Walkontable's `refreshSelections` method. Can be used to remove additional class names from all cells in the table.\n *\n * @event Hooks#beforeRemoveCellClassNames\n * @since 0.38.1\n * @returns {String[]|undefined} Can return an `Array` of `String`s. Each of these strings will act like class names to be removed from all the cells in the table.\n */\n'beforeRemoveCellClassNames',\n\n/**\n * Fired after getting the cell settings.\n *\n * @event Hooks#afterGetCellMeta\n * @param {Number} row Visual row index.\n * @param {Number} column Visual column index.\n * @param {Object} cellProperties Object containing the cell properties.\n */\n'afterGetCellMeta',\n\n/**\n * Fired after retrieving information about a column header and appending it to the table header.\n *\n * @event Hooks#afterGetColHeader\n * @param {Number} column Visual column index.\n * @param {HTMLTableCellElement} TH Header's TH element.\n */\n'afterGetColHeader',\n\n/**\n * Fired after retrieving information about a row header and appending it to the table header.\n *\n * @event Hooks#afterGetRowHeader\n * @param {Number} row Visual row index.\n * @param {HTMLTableCellElement} TH Header's TH element.\n */\n'afterGetRowHeader',\n\n/**\n * Fired after the Handsontable instance is initiated.\n *\n * @event Hooks#afterInit\n */\n'afterInit',\n\n/**\n * Fired after new data is loaded (by `loadData` or `updateSettings` method) into the data source array.\n *\n * @event Hooks#afterLoadData\n * @param {Boolean} initialLoad flag that determines whether the data has been loaded during the initialization.\n */\n'afterLoadData',\n\n/**\n * Fired after a scroll event, which is identified as a momentum scroll (e.g. on an iPad).\n *\n * @event Hooks#afterMomentumScroll\n */\n'afterMomentumScroll',\n\n/**\n * Fired after a `mousedown` event is triggered on the cell corner (the drag handle).\n *\n * @event Hooks#afterOnCellCornerMouseDown\n * @param {Event} event `mousedown` event object.\n */\n'afterOnCellCornerMouseDown',\n\n/**\n * Fired after a `dblclick` event is triggered on the cell corner (the drag handle).\n *\n * @event Hooks#afterOnCellCornerDblClick\n * @param {Event} event `dblclick` event object.\n */\n'afterOnCellCornerDblClick',\n\n/**\n * Fired after clicking on a cell or row/column header. In case the row/column header was clicked, the coordinate\n * indexes are negative.\n *\n * For example clicking on the row header of cell (0, 0) results with `afterOnCellMouseDown` called\n * with coordinates `{row: 0, col: -1}`.\n *\n * @event Hooks#afterOnCellMouseDown\n * @param {Event} event `mousedown` event object.\n * @param {CellCoords} coords Coordinates object containing the visual row and visual column indexes of the clicked cell.\n * @param {HTMLTableCellElement} TD Cell's TD (or TH) element.\n */\n'afterOnCellMouseDown',\n\n/**\n * Fired after clicking right mouse button on a cell or row/column header.\n *\n * For example clicking on the row header of cell (0, 0) results with `afterOnCellContextMenu` called\n * with coordinates `{row: 0, col: -1}`.\n *\n * @event Hooks#afterOnCellContextMenu\n * @since 4.1.0\n * @param {Event} event `contextmenu` event object.\n * @param {CellCoords} coords Coordinates object containing the visual row and visual column indexes of the clicked cell.\n * @param {HTMLTableCellElement} TD Cell's TD (or TH) element.\n */\n'afterOnCellContextMenu',\n\n/**\n * Fired after hovering a cell or row/column header with the mouse cursor. In case the row/column header was\n * hovered, the index is negative.\n *\n * For example, hovering over the row header of cell (0, 0) results with `afterOnCellMouseOver` called\n * with coords `{row: 0, col: -1}`.\n *\n * @event Hooks#afterOnCellMouseOver\n * @param {Event} event `mouseover` event object.\n * @param {CellCoords} coords Hovered cell's visual coordinate object.\n * @param {HTMLTableCellElement} TD Cell's TD (or TH) element.\n */\n'afterOnCellMouseOver',\n\n/**\n * Fired after leaving a cell or row/column header with the mouse cursor.\n *\n * @event Hooks#afterOnCellMouseOut\n * @param {Event} event `mouseout` event object.\n * @param {CellCoords} coords Leaved cell's visual coordinate object.\n * @param {HTMLTableCellElement} TD Cell's TD (or TH) element.\n */\n'afterOnCellMouseOut',\n\n/**\n * Fired after one or more columns are removed.\n *\n * @event Hooks#afterRemoveCol\n * @param {Number} index Visual index of starter column.\n * @param {Number} amount An amount of removed columns.\n * @param {Number[]} physicalColumns An array of physical columns removed from the data source.\n * @param {String} [source] String that identifies source of hook call ([list of all available sources]{@link https://docs.handsontable.com/tutorial-using-callbacks.html#page-source-definition}).\n */\n'afterRemoveCol',\n\n/**\n * Fired after one or more rows are removed.\n *\n * @event Hooks#afterRemoveRow\n * @param {Number} index Visual index of starter row.\n * @param {Number} amount An amount of removed rows.\n * @param {Number[]} physicalRows An array of physical rows removed from the data source.\n * @param {String} [source] String that identifies source of hook call ([list of all available sources]{@link https://docs.handsontable.com/tutorial-using-callbacks.html#page-source-definition}).\n */\n'afterRemoveRow',\n\n/**\n * Fired after the Handsontable table is rendered.\n *\n * @event Hooks#afterRender\n * @param {Boolean} isForced Is `true` if rendering was triggered by a change of settings or data; or `false` if\n *                           rendering was triggered by scrolling or moving selection.\n */\n'afterRender',\n\n/**\n * Fired before starting rendering the cell.\n *\n * @event Hooks#beforeRenderer\n * @param {HTMLTableCellElement} TD Currently rendered cell's TD element.\n * @param {Number} row Visual row index.\n * @param {Number} column Visual column index.\n * @param {String|Number} prop Column property name or a column index, if datasource is an array of arrays.\n * @param {*} value Value of the rendered cell.\n * @param {Object} cellProperties Object containing the cell's properties.\n */\n'beforeRenderer',\n\n/**\n * Fired after finishing rendering the cell (after the renderer finishes).\n *\n * @event Hooks#afterRenderer\n * @param {HTMLTableCellElement} TD Currently rendered cell's TD element.\n * @param {Number} row Visual row index.\n * @param {Number} column Visual column index.\n * @param {String|Number} prop Column property name or a column index, if datasource is an array of arrays.\n * @param {*} value Value of the rendered cell.\n * @param {Object} cellProperties Object containing the cell's properties.\n */\n'afterRenderer',\n\n/**\n * Fired after the horizontal scroll event.\n *\n * @event Hooks#afterScrollHorizontally\n */\n'afterScrollHorizontally',\n\n/**\n * Fired after the vertical scroll event.\n *\n * @event Hooks#afterScrollVertically\n */\n'afterScrollVertically',\n\n/**\n * Fired after one or more cells are selected (e.g. during mouse move).\n *\n * @event Hooks#afterSelection\n * @param {Number} row Selection start visual row index.\n * @param {Number} column Selection start visual column index.\n * @param {Number} row2 Selection end visual row index.\n * @param {Number} column2 Selection end visual column index.\n * @param {Object} preventScrolling Object with `value` property where its value change will be observed.\n * @param {Number} selectionLayerLevel The number which indicates what selection layer is currently modified.\n * @example\n * ```js\n * new Handsontable(element, {\n *   afterSelection: (row, column, row2, column2, preventScrolling, selectionLayerLevel) => {\n *     // setting if prevent scrolling after selection\n *     preventScrolling.value = true;\n *   }\n * })\n * ```\n */\n'afterSelection',\n\n/**\n * Fired after one or more cells are selected.\n *\n * The `prop` and `prop2` arguments represent the source object property name instead of the column number.\n *\n * @event Hooks#afterSelectionByProp\n * @param {Number} row Selection start visual row index.\n * @param {String} prop Selection start data source object property name.\n * @param {Number} row2 Selection end visual row index.\n * @param {String} prop2 Selection end data source object property name.\n * @param {Object} preventScrolling Object with `value` property where its value change will be observed.\n * @param {Number} selectionLayerLevel The number which indicates what selection layer is currently modified.\n * @example\n * ```js\n * new Handsontable(element, {\n *   afterSelectionByProp: (row, column, row2, column2, preventScrolling, selectionLayerLevel) => {\n *     // setting if prevent scrolling after selection\n *     preventScrolling.value = true;\n *   }\n * })\n * ```\n */\n'afterSelectionByProp',\n\n/**\n * Fired after one or more cells are selected (e.g. on mouse up).\n *\n * @event Hooks#afterSelectionEnd\n * @param {Number} row Selection start visual row index.\n * @param {Number} column Selection start visual column index.\n * @param {Number} row2 Selection end visual row index.\n * @param {Number} column2 Selection end visual column index.\n * @param {Number} selectionLayerLevel The number which indicates what selection layer is currently modified.\n */\n'afterSelectionEnd',\n\n/**\n * Fired after one or more cells are selected (e.g. on mouse up).\n *\n * The `prop` and `prop2` arguments represent the source object property name instead of the column number.\n *\n * @event Hooks#afterSelectionEndByProp\n * @param {Number} row Selection start visual row index.\n * @param {String} prop Selection start data source object property index.\n * @param {Number} row2 Selection end visual row index.\n * @param {String} prop2 Selection end data source object property index.\n * @param {Number} selectionLayerLevel The number which indicates what selection layer is currently modified.\n */\n'afterSelectionEndByProp',\n\n/**\n * Fired after cell meta is changed.\n *\n * @event Hooks#afterSetCellMeta\n * @param {Number} row Visual row index.\n * @param {Number} column Visual column index.\n * @param {String} key The updated meta key.\n * @param {*} value The updated meta value.\n */\n'afterSetCellMeta',\n\n/**\n * Fired after cell meta is removed.\n *\n * @event Hooks#afterRemoveCellMeta\n * @param {Number} row Visual row index.\n * @param {Number} column Visual column index.\n * @param {String} key The removed meta key.\n * @param {*} value Value which was under removed key of cell meta.\n */\n'afterRemoveCellMeta',\n\n/**\n * Fired after cell data was changed.\n *\n * @event Hooks#afterSetDataAtCell\n * @param {Array} changes An array of changes in format `[[row, column, oldValue, value], ...]`.\n * @param {String} [source] String that identifies source of hook call\n *                          ([list of all available sources]{@link http://docs.handsontable.com/tutorial-using-callbacks.html#page-source-definition}).\n */\n'afterSetDataAtCell',\n\n/**\n * Fired after cell data was changed.\n *\n * @event Hooks#afterSetDataAtRowProp\n * @param {Array} changes An array of changes in format `[[row, prop, oldValue, value], ...]`.\n * @param {String} [source] String that identifies source of hook call\n *                          ([list of all available sources]{@link http://docs.handsontable.com/tutorial-using-callbacks.html#page-source-definition}).\n */\n'afterSetDataAtRowProp',\n\n/**\n * Fired after calling the `updateSettings` method.\n *\n * @event Hooks#afterUpdateSettings\n * @param {Object} settings New settings object.\n */\n'afterUpdateSettings',\n\n/**\n * @description\n * A plugin hook executed after validator function, only if validator function is defined.\n * Validation result is the first parameter. This can be used to determinate if validation passed successfully or not.\n *\n * __Returning false from the callback will mark the cell as invalid.__\n *\n * @event Hooks#afterValidate\n * @param {Boolean} isValid `true` if valid, `false` if not.\n * @param {*} value The value in question.\n * @param {Number} row Visual row index.\n * @param {String|Number} prop Property name / visual column index.\n * @param {String} [source] String that identifies source of hook call\n *                          ([list of all available sources]{@link http://docs.handsontable.com/tutorial-using-callbacks.html#page-source-definition}).\n */\n'afterValidate',\n\n/**\n * Fired before successful change of language (when proper language code was set)\n *\n * @event Hooks#beforeLanguageChange\n * @since 0.35.0\n * @param {String} languageCode New language code.\n */\n'beforeLanguageChange',\n\n/**\n * Fired after successful change of language (when proper language code was set).\n *\n * @event Hooks#afterLanguageChange\n * @since 0.35.0\n * @param {String} languageCode New language code.\n */\n'afterLanguageChange',\n\n/**\n * Fired by {@link Autofill} plugin before populating the data in the autofill feature. This hook is fired when\n * {@link Options#fillHandle} option is enabled.\n *\n * @event Hooks#beforeAutofill\n * @param {CellCoords} start Object containing information about first filled cell: `{row: 2, col: 0}`.\n * @param {CellCoords} end Object containing information about last filled cell: `{row: 4, col: 1}`.\n * @param {Array[]} data 2D array containing information about fill pattern: `[[\"1\", \"Ted\"], [\"1\", \"John\"]]`.\n */\n'beforeAutofill',\n\n/**\n * Fired before aligning the cell contents.\n *\n * @event Hooks#beforeCellAlignment\n * @param {Object} stateBefore An object with class names defining the cell alignment.\n * @param {CellRange[]} range An array of CellRange coordinates where the alignment will be applied.\n * @param {String} type Type of the alignment - either `horizontal` or `vertical`.\n * @param {String} alignmentClass String defining the alignment class added to the cell.\n * Possible values:\n * * `htLeft`\n * * `htCenter`\n * * `htRight`\n * * `htJustify`\n * * `htTop`\n * * `htMiddle`\n * * `htBottom`\n */\n'beforeCellAlignment',\n\n/**\n * Fired before one or more cells is changed. Its main purpose is to alter changes silently after input and before\n * table rendering.\n *\n * @event Hooks#beforeChange\n * @param {Array[]} changes 2D array containing information about each of the edited cells.\n * @param {String} [source] String that identifies source of hook call\n *                          ([list of all available sources]{@link http://docs.handsontable.com/tutorial-using-callbacks.html#page-source-definition}).\n * @example\n * ```js\n * // To disregard a single change, set changes[i] to null or remove it from array using changes.splice(i, 1).\n * new Handsontable(element, {\n *   beforeChange: (changes, source) => {\n *     // [[row, prop, oldVal, newVal], ...]\n *     changes[0] = null;\n *   }\n * });\n * // To alter a single change, overwrite the desired value to changes[i][3].\n * new Handsontable(element, {\n *   beforeChange: (changes, source) => {\n *     // [[row, prop, oldVal, newVal], ...]\n *     changes[0][3] = 10;\n *   }\n * });\n * // To cancel all edit, return false from the callback or set array length to 0 (changes.length = 0).\n * new Handsontable(element, {\n *   beforeChange: (changes, source) => {\n *     // [[row, prop, oldVal, newVal], ...]\n *     return false;\n *   }\n * });\n * ```\n */\n'beforeChange',\n\n/**\n * Fired right before rendering the changes.\n *\n * @event Hooks#beforeChangeRender\n * @param {Array[]} changes Array in form of `[row, prop, oldValue, newValue]`.\n * @param {String} [source] String that identifies source of hook call\n *                          ([list of all available sources]{@link http://docs.handsontable.com/tutorial-using-callbacks.html#page-source-definition}).\n */\n'beforeChangeRender',\n\n/**\n * Fired before drawing the borders.\n *\n * @event Hooks#beforeDrawBorders\n * @param {Array} corners Array specifying the current selection borders.\n * @param {String} borderClassName Specifies the border class name.\n */\n'beforeDrawBorders',\n\n/**\n * Fired before getting cell settings.\n *\n * @event Hooks#beforeGetCellMeta\n * @param {Number} row Visual row index.\n * @param {Number} column Visual column index.\n * @param {Object} cellProperties Object containing the cell's properties.\n */\n'beforeGetCellMeta',\n\n/**\n * Fired before cell meta is removed.\n *\n * @event Hooks#beforeRemoveCellMeta\n * @param {Number} row Visual row index.\n * @param {Number} column Visual column index.\n * @param {String} key The removed meta key.\n * @param {*} value Value which is under removed key of cell meta.\n */\n'beforeRemoveCellMeta',\n\n/**\n * Fired before the Handsontable instance is initiated.\n *\n * @event Hooks#beforeInit\n */\n'beforeInit',\n\n/**\n * Fired before the Walkontable instance is initiated.\n *\n * @event Hooks#beforeInitWalkontable\n * @param {Object} walkontableConfig Walkontable configuration object.\n */\n'beforeInitWalkontable',\n\n/**\n * Fired before keydown event is handled. It can be used to overwrite default key bindings.\n *\n * __Note__: To prevent default behavior you need to call `event.stopImmediatePropagation()` in your `beforeKeyDown`\n * handler.\n *\n * @event Hooks#beforeKeyDown\n * @param {Event} event Original DOM event.\n */\n'beforeKeyDown',\n\n/**\n * Fired after the user clicked a cell, but before all the calculations related with it.\n *\n * @event Hooks#beforeOnCellMouseDown\n * @param {Event} event The `mousedown` event object.\n * @param {CellCoords} coords Cell coords object containing the visual coordinates of the clicked cell.\n * @param {HTMLTableCellElement} TD TD element.\n * @param {Object} controller An object with keys `row`, `column` and `cells` which contains boolean values. This\n *                            object allows or disallows changing the selection for the particular axies.\n */\n'beforeOnCellMouseDown',\n\n/**\n * Fired after the user clicked a cell, but before all the calculations related with it.\n *\n * @event Hooks#beforeOnCellContextMenu\n * @since 4.1.0\n * @param {Event} event The `contextmenu` event object.\n * @param {CellCoords} coords Cell coords object containing the visual coordinates of the clicked cell.\n * @param {HTMLTableCellElement} TD TD element.\n */\n'beforeOnCellContextMenu',\n\n/**\n * Fired after the user moved cursor over a cell, but before all the calculations related with it.\n *\n * @event Hooks#beforeOnCellMouseOver\n * @param {Event} event The `mouseover` event object.\n * @param {CellCoords} coords CellCoords object containing the visual coordinates of the clicked cell.\n * @param {HTMLTableCellElement} TD TD element.\n * @param {Object} controller An object with keys `row`, `column` and `cells` which contains boolean values. This\n *                            object allows or disallows changing the selection for the particular axies.\n */\n'beforeOnCellMouseOver',\n\n/**\n * Fired after the user moved cursor out from a cell, but before all the calculations related with it.\n *\n * @event Hooks#beforeOnCellMouseOut\n * @param {Event} event The `mouseout` event object.\n * @param {CellCoords} coords CellCoords object containing the visual coordinates of the leaved cell.\n * @param {HTMLTableCellElement} TD TD element.\n */\n'beforeOnCellMouseOut',\n\n/**\n * Fired before one or more columns are about to be removed.\n *\n * @event Hooks#beforeRemoveCol\n * @param {Number} index Visual index of starter column.\n * @param {Number} amount Amount of columns to be removed.\n * @param {Number[]} physicalColumns An array of physical columns removed from the data source.\n * @param {String} [source] String that identifies source of hook call ([list of all available sources]{@link https://docs.handsontable.com/tutorial-using-callbacks.html#page-source-definition}).\n */\n'beforeRemoveCol',\n\n/**\n * Fired when one or more rows are about to be removed.\n *\n * @event Hooks#beforeRemoveRow\n * @param {Number} index Visual index of starter column.\n * @param {Number} amount Amount of columns to be removed.\n * @param {Number[]} physicalRows An array of physical rows removed from the data source.\n * @param {String} [source] String that identifies source of hook call ([list of all available sources]{@link https://docs.handsontable.com/tutorial-using-callbacks.html#page-source-definition}).\n */\n'beforeRemoveRow',\n\n/**\n * Fired before the Handsontable table is rendered.\n *\n * @event Hooks#beforeRender\n * @param {Boolean} isForced If `true` rendering was triggered by a change of settings or data; or `false` if\n *                           rendering was triggered by scrolling or moving selection.\n */\n'beforeRender',\n\n/**\n * Fired before setting range is started but not finished yet.\n *\n * @event Hooks#beforeSetRangeStartOnly\n * @param {CellCoords} coords CellCoords instance.\n */\n'beforeSetRangeStartOnly',\n\n/**\n * Fired before setting range is started.\n *\n * @event Hooks#beforeSetRangeStart\n * @param {CellCoords} coords CellCoords instance.\n */\n'beforeSetRangeStart',\n\n/**\n * Fired before setting range is ended.\n *\n * @event Hooks#beforeSetRangeEnd\n * @param {CellCoords} coords CellCoords instance.\n */\n'beforeSetRangeEnd',\n\n/**\n * Fired before the logic of handling a touch scroll, when user started scrolling on a touch-enabled device.\n *\n * @event Hooks#beforeTouchScroll\n */\n'beforeTouchScroll',\n\n/**\n * Fired before cell validation, only if validator function is defined. This can be used to manipulate the value\n * of changed cell before it is applied to the validator function.\n *\n * __Note:__ this will not affect values of changes. This will change value *ONLY* for validation\n *\n * @event Hooks#beforeValidate\n * @param {*} value Value of the cell.\n * @param {Number} row Visual row index.\n * @param {String|Number} prop Property name / column index.\n * @param {String} [source] String that identifies source of hook call\n *                          ([list of all available sources]{@link http://docs.handsontable.com/tutorial-using-callbacks.html#page-source-definition}).\n */\n'beforeValidate',\n\n/**\n * Fired before cell value is rendered into the DOM (through renderer function). This can be used to manipulate the\n * value which is passed to the renderer without modifying the renderer itself.\n *\n * @event Hooks#beforeValueRender\n * @param {*} value Cell value to render.\n * @param {Object} cellProperties An object containing the cell properties.\n */\n'beforeValueRender',\n\n/**\n * Fired after Handsontable instance is constructed (using `new` operator).\n *\n * @event Hooks#construct\n */\n'construct',\n\n/**\n * Fired after Handsontable instance is initiated but before table is rendered.\n *\n * @event Hooks#init\n */\n'init',\n\n/**\n * Fired when a column index is about to be modified by a callback function.\n *\n * @event Hooks#modifyCol\n * @param {Number} column Visual column index.\n */\n'modifyCol',\n\n/**\n * Fired when a column index is about to be de-modified by a callback function.\n *\n * @event Hooks#unmodifyCol\n * @param {Number} column Physical column index.\n */\n'unmodifyCol',\n\n/**\n * Fired when a physical row index is about to be de-modified by a callback function.\n *\n * @event Hooks#unmodifyRow\n * @param {Number} row Physical row index.\n */\n'unmodifyRow',\n\n/**\n * Fired when a column header index is about to be modified by a callback function.\n *\n * @event Hooks#modifyColHeader\n * @param {Number} column Visual column header index.\n */\n'modifyColHeader',\n\n/**\n * Fired when a column width is about to be modified by a callback function.\n *\n * @event Hooks#modifyColWidth\n * @param {Number} width Current column width.\n * @param {Number} column Visual column index.\n */\n'modifyColWidth',\n\n/**\n * Fired when a row index is about to be modified by a callback function.\n *\n * @event Hooks#modifyRow\n * @param {Number} row Visual row index.\n */\n'modifyRow',\n\n/**\n * Fired when a row header index is about to be modified by a callback function.\n *\n * @event Hooks#modifyRowHeader\n * @param {Number} row Visual row header index.\n */\n'modifyRowHeader',\n\n/**\n * Fired when a row height is about to be modified by a callback function.\n *\n * @event Hooks#modifyRowHeight\n * @param {Number} height Row height.\n * @param {Number} row Visual row index.\n */\n'modifyRowHeight',\n\n/**\n * Fired when a data was retrieved or modified.\n *\n * @event Hooks#modifyData\n * @param {Number} row Row height.\n * @param {Number} column Column index.\n * @param {Object} valueHolder Object which contains original value which can be modified by overwriting `.value` property.\n * @param {String} ioMode String which indicates for what operation hook is fired (`get` or `set`).\n */\n'modifyData',\n\n/**\n * Fired when a data was retrieved or modified.\n *\n * @event Hooks#modifyRowData\n * @param {Number} row Physical row index.\n */\n'modifyRowData',\n\n/**\n * Used to modify the cell coordinates when using the `getCell` method.\n *\n * @event Hooks#modifyGetCellCoords\n * @since 0.36.0\n * @param {Number} row Visual row index.\n * @param {Number} column Visual column index.\n * @param {Boolean} topmost If set to `true`, it returns the TD element from the topmost overlay. For example,\n *                          if the wanted cell is in the range of fixed rows, it will return a TD element\n *                          from the `top` overlay.\n */\n'modifyGetCellCoords',\n\n/**\n * Fired by {@link PersistentState} plugin, after loading value, saved under given key, from browser local storage. This hook is fired when\n * {@link Options#persistentState} option is enabled.\n *\n * @event Hooks#persistentStateLoad\n * @param {String} key Key.\n * @param {Object} valuePlaceholder Object containing the loaded value under `valuePlaceholder.value` (if no value have been saved, `value` key will be undefined).\n */\n'persistentStateLoad',\n\n/**\n * Fired by {@link PersistentState} plugin after resetting data from local storage. If no key is given, all values associated with table will be cleared.\n * This hook is fired when {@link Options#persistentState} option is enabled.\n *\n * @event Hooks#persistentStateReset\n * @param {String} [key] Key.\n */\n'persistentStateReset',\n\n/**\n * Fired by {@link PersistentState} plugin, after saving value under given key in browser local storage. This hook is fired when\n * {@link Options#persistentState} option is enabled.\n *\n * @event Hooks#persistentStateSave\n * @param {String} key Key.\n * @param {Mixed} value Value to save.\n */\n'persistentStateSave',\n\n/**\n * Fired by {@link ColumnSorting} plugin before sorting the column. If you return `false` value then sorting\n * will be not applied by the Handsontable (useful for server-side sorting).\n *\n * This hook is fired when {@link Options#columnSorting} option is enabled.\n *\n * @event Hooks#beforeColumnSort\n * @param {Number} column Sorted visual column index.\n * @param {Boolean} order Soring order where:\n *  * `asc` means ascending order\n *  * `desc` means descending order\n *  * `none` means original order\n */\n'beforeColumnSort',\n\n/**\n * Fired by {@link ColumnSorting} plugin after sorting the column. This hook is fired when {@link Options#columnSorting}\n * option is enabled.\n *\n * @event Hooks#afterColumnSort\n * @param {Number} column Sorted visual column index.\n * @param {String} order Soring order where:\n *  * `'asc'` means ascending order\n *  * `'desc'` means descending order\n *  * `'none'` means original order\n */\n'afterColumnSort',\n\n/**\n * Fired by {@link Autofill} plugin after setting range of autofill. This hook is fired when {@link Options#fillHandle}\n * option is enabled.\n *\n * @event Hooks#modifyAutofillRange\n * @param {Array} startArea Array of visual coordinates of the starting point for the drag-down operation (`[startRow, startColumn, endRow, endColumn]`).\n * @param {Array} entireArea Array of visual coordinates of the entire area of the drag-down operation (`[startRow, startColumn, endRow, endColumn]`).\n */\n'modifyAutofillRange',\n\n/**\n * Fired to allow modifying the copyable range with a callback function.\n *\n * @event Hooks#modifyCopyableRange\n * @param {Array[]} copyableRanges Array of objects defining copyable cells.\n */\n'modifyCopyableRange',\n\n/**\n * Fired by {@link CopyPaste} plugin before copying the values into clipboard and before clearing values of\n * the selected cells. This hook is fired when {@link Options#copyPaste} option is enabled.\n *\n * @event Hooks#beforeCut\n * @param {Array[]} data An array of arrays which contains data to cut.\n * @param {Object[]} coords An array of objects with ranges of the visual indexes (`startRow`, `startCol`, `endRow`, `endCol`)\n *                       which will be cut out.\n * @returns {*} If returns `false` then operation of the cutting out is canceled.\n * @example\n * ```js\n * // To disregard a single row, remove it from the array using data.splice(i, 1).\n * new Handsontable(element, {\n *   beforeCut: function(data, coords) {\n *     // data -> [[1, 2, 3], [4, 5, 6]]\n *     data.splice(0, 1);\n *     // data -> [[4, 5, 6]]\n *     // coords -> [{startRow: 0, startCol: 0, endRow: 1, endCol: 2}]\n *   }\n * });\n * // To cancel a cutting action, just return `false`.\n * new Handsontable(element, {\n *   beforeCut: function(data, coords) {\n *     return false;\n *   }\n * });\n * ```\n */\n'beforeCut',\n\n/**\n * Fired by {@link CopyPaste} plugin after data was cut out from the table. This hook is fired when\n * {@link Options#copyPaste} option is enabled.\n *\n * @event Hooks#afterCut\n * @param {Array[]} data An array of arrays which contains the cutted out data.\n * @param {Object[]} coords An array of objects with ranges of the visual indexes (`startRow`, `startCol`, `endRow`, `endCol`)\n *                       which was cut out.\n */\n'afterCut',\n\n/**\n * Fired before values are copied into clipboard.\n *\n * @event Hooks#beforeCopy\n * @param {Array[]} data An array of arrays which contains data to copied.\n * @param {Object[]} coords An array of objects with ranges of the visual indexes (`startRow`, `startCol`, `endRow`, `endCol`)\n *                         which will copied.\n * @returns {*} If returns `false` then copying is canceled.\n *\n * @example\n * ```js\n * // To disregard a single row, remove it from array using data.splice(i, 1).\n * ...\n * new Handsontable(document.getElementById('example'), {\n *   beforeCopy: (data, coords) => {\n *     // data -> [[1, 2, 3], [4, 5, 6]]\n *     data.splice(0, 1);\n *     // data -> [[4, 5, 6]]\n *     // coords -> [{startRow: 0, startCol: 0, endRow: 1, endCol: 2}]\n *   }\n * });\n * ...\n *\n * // To cancel copying, return false from the callback.\n * ...\n * new Handsontable(document.getElementById('example'), {\n *   beforeCopy: (data, coords) => {\n *     return false;\n *   }\n * });\n * ...\n * ```\n */\n'beforeCopy',\n\n/**\n * Fired by {@link CopyPaste} plugin after data are pasted into table. This hook is fired when {@link Options#copyPaste}\n * option is enabled.\n *\n * @event Hooks#afterCopy\n * @param {Array[]} data An array of arrays which contains the copied data.\n * @param {Object[]} coords An array of objects with ranges of the visual indexes (`startRow`, `startCol`, `endRow`, `endCol`)\n *                         which was copied.\n */\n'afterCopy',\n\n/**\n * Fired by {@link CopyPaste} plugin before values are pasted into table. This hook is fired when\n * {@link Options#copyPaste} option is enabled.\n *\n * @event Hooks#beforePaste\n * @param {Array[]} data An array of arrays which contains data to paste.\n * @param {Object[]} coords An array of objects with ranges of the visual indexes (`startRow`, `startCol`, `endRow`, `endCol`)\n *                       that correspond to the previously selected area.\n * @returns {*} If returns `false` then pasting is canceled.\n * @example\n * ```js\n * // To disregard a single row, remove it from array using data.splice(i, 1).\n * new Handsontable(example, {\n *   beforePaste: (data, coords) => {\n *     // data -> [[1, 2, 3], [4, 5, 6]]\n *     data.splice(0, 1);\n *     // data -> [[4, 5, 6]]\n *     // coords -> [{startRow: 0, startCol: 0, endRow: 1, endCol: 2}]\n *   }\n * });\n * // To cancel pasting, return false from the callback.\n * new Handsontable(example, {\n *   beforePaste: (data, coords) => {\n *     return false;\n *   }\n * });\n * ```\n */\n'beforePaste',\n\n/**\n * Fired by {@link CopyPaste} plugin after values are pasted into table. This hook is fired when\n * {@link Options#copyPaste} option is enabled.\n *\n * @event Hooks#afterPaste\n * @param {Array[]} data An array of arrays which contains the pasted data.\n * @param {Object[]} coords An array of objects with ranges of the visual indexes (`startRow`, `startCol`, `endRow`, `endCol`)\n *                       that correspond to the previously selected area.\n */\n'afterPaste',\n\n/**\n * Fired by {@link ManualColumnMove} plugin before change order of the visual indexes. This hook is fired when\n * {@link Options#manualColumnMove} option is enabled.\n *\n * @event Hooks#beforeColumnMove\n * @param {Number[]} columns Array of visual column indexes to be moved.\n * @param {Number} target Visual column index being a target for moved columns.\n */\n'beforeColumnMove',\n\n/**\n * Fired by {@link ManualColumnMove} plugin after changing order of the visual indexes. This hook is fired when\n * {@link Options#manualColumnMove} option is enabled.\n *\n * @event Hooks#afterColumnMove\n * @param {Number[]} columns Array of visual column indexes that were moved.\n * @param {Number} target Visual column index being a target for moved columns.\n */\n'afterColumnMove',\n\n/**\n * Fired by {@link ManualRowMove} plugin before change order of the visual indexes. This hook is fired when\n * {@link Options#manualRowMove} option is enabled.\n *\n * @event Hooks#beforeRowMove\n * @param {Number[]} rows An array of visual row indexes to be moved.\n * @param {Number} target Visual row index being a target for moved rows.\n */\n'beforeRowMove',\n\n/**\n * Fired by {@link ManualRowMove} plugin after change order of the visual indexes. This hook is fired when\n * {@link Options#manualRowMove} option is enabled.\n *\n * @event Hooks#afterRowMove\n * @param {Number[]} rows An array of visual row indexes that were moved.\n * @param {Number} target Visual row index being a target for moved rows.\n */\n'afterRowMove',\n\n/**\n * Fired by {@link ManualColumnResize} plugin before rendering the table with modified column sizes. This hook is\n * fired when {@link Options#manualColumnResize} option is enabled.\n *\n * @event Hooks#beforeColumnResize\n * @param {Number} currentColumn Visual index of the resized column.\n * @param {Number} newSize Calculated new column width.\n * @param {Boolean} isDoubleClick Flag that determines whether there was a double-click.\n * @returns {Number} Returns a new column size or `undefined`, if column size should be calculated automatically.\n */\n'beforeColumnResize',\n\n/**\n * Fired by {@link ManualColumnResize} plugin after rendering the table with modified column sizes. This hook is\n * fired when {@link Options#manualColumnResize} option is enabled.\n *\n * @event Hooks#afterColumnResize\n * @param {Number} currentColumn Visual index of the resized column.\n * @param {Number} newSize Calculated new column width.\n * @param {Boolean} isDoubleClick Flag that determines whether there was a double-click.\n */\n'afterColumnResize',\n\n/**\n * Fired by {@link ManualRowResize} plugin before rendering the table with modified row sizes. This hook is\n * fired when {@link Options#manualRowResize} option is enabled.\n *\n * @event Hooks#beforeRowResize\n * @param {Number} currentRow Visual index of the resized row.\n * @param {Number} newSize Calculated new row height.\n * @param {Boolean} isDoubleClick Flag that determines whether there was a double-click.\n * @returns {Number} Returns the new row size or `undefined` if row size should be calculated automatically.\n */\n'beforeRowResize',\n\n/**\n * Fired by {@link ManualRowResize} plugin after rendering the table with modified row sizes. This hook is\n * fired when {@link Options#manualRowResize} option is enabled.\n *\n * @event Hooks#afterRowResize\n * @param {Number} currentRow Visual index of the resized row.\n * @param {Number} newSize Calculated new row height.\n * @param {Boolean} isDoubleClick Flag that determines whether there was a double-click.\n */\n'afterRowResize',\n\n/**\n * Fired after getting the column header renderers.\n *\n * @event Hooks#afterGetColumnHeaderRenderers\n * @param {Function[]} renderers An array of the column header renderers.\n */\n'afterGetColumnHeaderRenderers',\n\n/**\n * Fired after getting the row header renderers.\n *\n * @event Hooks#afterGetRowHeaderRenderers\n * @param {Function[]} renderers An array of the row header renderers.\n */\n'afterGetRowHeaderRenderers',\n\n/**\n * Fired before applying stretched column width to column.\n *\n * @event Hooks#beforeStretchingColumnWidth\n * @param {Number} stretchedWidth Calculated width.\n * @param {Number} column Visual column index.\n * @returns {Number} Returns new width which will be applied to the column element.\n */\n'beforeStretchingColumnWidth',\n\n/**\n * Fired by {@link Filters} plugin before applying [filtering]{@link http://docs.handsontable.com/pro/demo-filtering.html}. This hook is fired when\n * {@link Options#filters} option is enabled.\n *\n * @pro\n * @event Hooks#beforeFilter\n * @param {Object[]} conditionsStack An array of objects with added formulas.\n * ```js\n * // Example format of the conditionsStack argument:\n * [\n *   {\n *     column: 2,\n *     conditions: [\n *       {name: 'begins_with', args: [['S']]}\n *     ],\n *     operation: 'conjunction'\n *   },\n *   {\n *     column: 4,\n *     conditions: [\n *       {name: 'not_empty', args: []}\n *     ],\n *     operation: 'conjunction'\n *   },\n * ]\n * ```\n * @returns {Boolean} If hook returns `false` value then filtering won't be applied on the UI side (server-side filtering).\n */\n'beforeFilter',\n\n/**\n * Fired by {@link Filters} plugin after applying [filtering]{@link http://docs.handsontable.com/pro/demo-filtering.html}. This hook is fired when\n * {@link Options#filters} option is enabled.\n *\n * @pro\n * @event Hooks#afterFilter\n * @param {Object[]} conditionsStack An array of objects with added conditions.\n * ```js\n * // Example format of the conditionsStack argument:\n * [\n *   {\n *     column: 2,\n *     conditions: [\n *       {name: 'begins_with', args: [['S']]}\n *     ],\n *     operation: 'conjunction'\n *   },\n *   {\n *     column: 4,\n *     conditions: [\n *       {name: 'not_empty', args: []}\n *     ],\n *     operation: 'conjunction'\n *   },\n * ]\n * ```\n */\n'afterFilter',\n\n/**\n * Fired while retrieving the column header height.\n *\n * @event Hooks#modifyColumnHeaderHeight\n */\n'modifyColumnHeaderHeight',\n\n/**\n * Fired by {@link UndoRedo} plugin before the undo action. Contains information about the action that is being undone.\n * This hook is fired when {@link Options#undo} option is enabled.\n *\n * @event Hooks#beforeUndo\n * @param {Object} action The action object. Contains information about the action being undone. The `actionType`\n *                        property of the object specifies the type of the action in a String format. (e.g. `'remove_row'`).\n */\n'beforeUndo',\n\n/**\n * Fired by {@link UndoRedo} plugin after the undo action. Contains information about the action that is being undone.\n * This hook is fired when {@link Options#undo} option is enabled.\n *\n * @event Hooks#afterUndo\n * @param {Object} action The action object. Contains information about the action being undone. The `actionType`\n *                        property of the object specifies the type of the action in a String format. (e.g. `'remove_row'`).\n */\n'afterUndo',\n\n/**\n * Fired by {@link UndoRedo} plugin before the redo action. Contains information about the action that is being redone.\n * This hook is fired when {@link Options#undo} option is enabled.\n *\n * @event Hooks#beforeRedo\n * @param {Object} action The action object. Contains information about the action being redone. The `actionType`\n *                        property of the object specifies the type of the action in a String format (e.g. `'remove_row'`).\n */\n'beforeRedo',\n\n/**\n * Fired by {@link UndoRedo} plugin after the redo action. Contains information about the action that is being redone.\n * This hook is fired when {@link Options#undo} option is enabled.\n *\n * @event Hooks#afterRedo\n * @param {Object} action The action object. Contains information about the action being redone. The `actionType`\n *                        property of the object specifies the type of the action in a String format (e.g. `'remove_row'`).\n */\n'afterRedo',\n\n/**\n * Fired while retrieving the row header width.\n *\n * @event Hooks#modifyRowHeaderWidth\n * @param {Number} rowHeaderWidth Row header width.\n */\n'modifyRowHeaderWidth',\n\n/**\n * Fired from the `populateFromArray` method during the `autofill` process. Fired for each \"autofilled\" cell individually.\n *\n * @event Hooks#beforeAutofillInsidePopulate\n * @param {Object} index Object containing `row` and `col` properties, defining the number of rows/columns from the initial cell of the autofill.\n * @param {String} direction Declares the direction of the autofill. Possible values: `up`, `down`, `left`, `right`.\n * @param {Array[]} input Contains an array of rows with data being used in the autofill.\n * @param {Array} deltas The deltas array passed to the `populateFromArray` method.\n */\n'beforeAutofillInsidePopulate',\n\n/**\n * Fired when the start of the selection is being modified (e.g. moving the selection with the arrow keys).\n *\n * @event Hooks#modifyTransformStart\n * @param {CellCoords} delta Cell coords object declaring the delta of the new selection relative to the previous one.\n */\n'modifyTransformStart',\n\n/**\n * Fired when the end of the selection is being modified (e.g. moving the selection with the arrow keys).\n *\n * @event Hooks#modifyTransformEnd\n * @param {CellCoords} delta Cell coords object declaring the delta of the new selection relative to the previous one.\n */\n'modifyTransformEnd',\n\n/**\n * Fired after the start of the selection is being modified (e.g. moving the selection with the arrow keys).\n *\n * @event Hooks#afterModifyTransformStart\n * @param {CellCoords} coords Coords of the freshly selected cell.\n * @param {Number} rowTransformDir `-1` if trying to select a cell with a negative row index. `0` otherwise.\n * @param {Number} colTransformDir `-1` if trying to select a cell with a negative column index. `0` otherwise.\n */\n'afterModifyTransformStart',\n\n/**\n * Fired after the end of the selection is being modified (e.g. moving the selection with the arrow keys).\n *\n * @event Hooks#afterModifyTransformEnd\n * @param {CellCoords} coords Visual coords of the freshly selected cell.\n * @param {Number} rowTransformDir `-1` if trying to select a cell with a negative row index. `0` otherwise.\n * @param {Number} colTransformDir `-1` if trying to select a cell with a negative column index. `0` otherwise.\n */\n'afterModifyTransformEnd',\n\n/**\n * Fired inside the `viewportRowCalculatorOverride` method. Allows modifying the row calculator parameters.\n *\n * @event Hooks#afterViewportRowCalculatorOverride\n * @param {Object} calc The row calculator.\n */\n'afterViewportRowCalculatorOverride',\n\n/**\n * Fired inside the `viewportColumnCalculatorOverride` method. Allows modifying the row calculator parameters.\n *\n * @event Hooks#afterViewportColumnCalculatorOverride\n * @param {Object} calc The row calculator.\n */\n'afterViewportColumnCalculatorOverride',\n\n/**\n * Fired after initializing all the plugins.\n *\n * @event Hooks#afterPluginsInitialized\n */\n'afterPluginsInitialized',\n\n/**\n * Used to skip the length cache calculation for a defined period of time.\n *\n * @event Hooks#skipLengthCache\n * @param {Number} delay The delay in milliseconds.\n */\n'skipLengthCache',\n\n/**\n * Fired by {@link TrimRows} plugin after trimming rows. This hook is fired when {@link Options#trimRows} option is enabled.\n *\n * @pro\n * @event Hooks#afterTrimRow\n * @param {Number[]} rows Physical indexes of trimmed rows.\n */\n'afterTrimRow',\n\n/**\n * Fired by {@link TrimRows} plugin after untrimming rows. This hook is fired when {@link Options#trimRows} option is enabled.\n *\n * @pro\n * @event Hooks#afterUntrimRow\n * @param {Number[]} rows Physical indexes of untrimmed rows.\n */\n'afterUntrimRow',\n\n/**\n * Fired by {@link DropdownMenu} plugin before opening the dropdown menu. This hook is fired when {@link Options#dropdownMenu}\n * option is enabled.\n *\n * @pro\n * @event Hooks#beforeDropdownMenuShow\n * @param {DropdownMenu} dropdownMenu The DropdownMenu instance.\n */\n'beforeDropdownMenuShow',\n\n/**\n * Fired by {@link DropdownMenu} plugin after opening the Dropdown Menu. This hook is fired when {@link Options#dropdownMenu}\n * option is enabled.\n *\n * @pro\n * @event Hooks#afterDropdownMenuShow\n * @param {DropdownMenu} dropdownMenu The DropdownMenu instance.\n */\n'afterDropdownMenuShow',\n\n/**\n * Fired by {@link DropdownMenu} plugin after hiding the Dropdown Menu. This hook is fired when {@link Options#dropdownMenu}\n * option is enabled.\n *\n * @pro\n * @event Hooks#afterDropdownMenuHide\n * @param {DropdownMenu} instance The DropdownMenu instance.\n */\n'afterDropdownMenuHide',\n\n/**\n * Fired by {@link HiddenRows} plugin to check whether the provided row index is hidden. This hook is fired when\n * {@link Options#hiddenRows} option is enabled.\n *\n * @pro\n * @event Hooks#hiddenRow\n * @param {Number} row The visual row index in question.\n */\n'hiddenRow',\n\n/**\n * Fired by {@link HiddenColumns} plugin to check whether the provided column index is hidden. This hook is fired when\n * {@link Options#hiddenColumns} option is enabled.\n *\n * @pro\n * @event Hooks#hiddenColumn\n * @param {Number} column The visual column index in question.\n */\n'hiddenColumn',\n\n/**\n * Fired by {@link NestedRows} plugin before adding a children to the NestedRows structure. This hook is fired when\n * {@link Options#nestedRows} option is enabled.\n *\n * @pro\n * @event Hooks#beforeAddChild\n * @param {Object} parent The parent object.\n * @param {Object|undefined} element The element added as a child. If `undefined`, a blank child was added.\n * @param {Number|undefined} index The index within the parent where the new child was added. If `undefined`, the element was added as the last child.\n */\n'beforeAddChild',\n\n/**\n * Fired by {@link NestedRows} plugin after adding a children to the NestedRows structure. This hook is fired when\n * {@link Options#nestedRows} option is enabled.\n *\n * @pro\n * @event Hooks#afterAddChild\n * @param {Object} parent The parent object.\n * @param {Object|undefined} element The element added as a child. If `undefined`, a blank child was added.\n * @param {Number|undefined} index The index within the parent where the new child was added. If `undefined`, the element was added as the last child.\n */\n'afterAddChild',\n\n/**\n * Fired by {@link NestedRows} plugin before detaching a child from its parent. This hook is fired when\n * {@link Options#nestedRows} option is enabled.\n *\n * @pro\n * @event Hooks#beforeDetachChild\n * @param {Object} parent An object representing the parent from which the element is to be detached.\n * @param {Object} element The detached element.\n */\n'beforeDetachChild',\n\n/**\n * Fired by {@link NestedRows} plugin after detaching a child from its parent. This hook is fired when\n * {@link Options#nestedRows} option is enabled.\n *\n * @pro\n * @event Hooks#afterDetachChild\n * @param {Object} parent An object representing the parent from which the element was detached.\n * @param {Object} element The detached element.\n */\n'afterDetachChild',\n\n/**\n * Fired after the editor is opened and rendered.\n *\n * @event Hooks#afterBeginEditing\n * @param {Number} row Visual row index of the edited cell.\n * @param {Number} column Visual column index of the edited cell.\n */\n'afterBeginEditing',\n\n/**\n * Fired by {@link MergeCells} plugin before cell merging. This hook is fired when {@link Options#mergeCells}\n * option is enabled.\n *\n * @event Hooks#beforeMergeCells\n * @param {CellRange} cellRange Selection cell range.\n * @param {Boolean} [auto=false] `true` if called automatically by the plugin.\n */\n'beforeMergeCells',\n\n/**\n * Fired by {@link MergeCells} plugin after cell merging. This hook is fired when {@link Options#mergeCells}\n * option is enabled.\n *\n * @event Hooks#afterMergeCells\n * @param {CellRange} cellRange Selection cell range.\n * @param {Object} mergeParent The parent collection of the provided cell range.\n * @param {Boolean} [auto=false] `true` if called automatically by the plugin.\n */\n'afterMergeCells',\n\n/**\n * Fired by {@link MergeCells} plugin before unmerging the cells. This hook is fired when {@link Options#mergeCells}\n * option is enabled.\n *\n * @event Hooks#beforeUnmergeCells\n * @param {CellRange} cellRange Selection cell range.\n * @param {Boolean} [auto=false] `true` if called automatically by the plugin.\n */\n'beforeUnmergeCells',\n\n/**\n * Fired by {@link MergeCells} plugin after unmerging the cells. This hook is fired when {@link Options#mergeCells}\n * option is enabled.\n *\n * @event Hooks#afterUnmergeCells\n * @param {CellRange} cellRange Selection cell range.\n * @param {Boolean} [auto=false] `true` if called automatically by the plugin.\n */\n'afterUnmergeCells',\n\n/**\n * Fired after the table was switched into listening mode. This allows Handsontable to capture keyboard events and\n * respond in the right way.\n *\n * @event Hooks#afterListen\n */\n'afterListen',\n\n/**\n * Fired after the table was switched off from the listening mode. This makes the Handsontable inert for any\n * keyboard events.\n *\n * @event Hooks#afterUnlisten\n */\n'afterUnlisten'];\n\nvar Hooks = function () {\n  _createClass(Hooks, null, [{\n    key: 'getSingleton',\n    value: function getSingleton() {\n      return getGlobalSingleton();\n    }\n\n    /**\n     *\n     */\n\n  }]);\n\n  function Hooks() {\n    _classCallCheck(this, Hooks);\n\n    this.globalBucket = this.createEmptyBucket();\n  }\n\n  /**\n   * Returns a new object with empty handlers related to every registered hook name.\n   *\n   * @returns {Object} The empty bucket object.\n   *\n   * @example\n   * ```js\n   * Handsontable.hooks.createEmptyBucket();\n   * // Results:\n   * {\n   * ...\n   * afterCreateCol: [],\n   * afterCreateRow: [],\n   * beforeInit: [],\n   * ...\n   * }\n   * ```\n   */\n\n\n  _createClass(Hooks, [{\n    key: 'createEmptyBucket',\n    value: function createEmptyBucket() {\n      var bucket = Object.create(null);\n\n      // eslint-disable-next-line no-return-assign\n      (0, _array.arrayEach)(REGISTERED_HOOKS, function (hook) {\n        return bucket[hook] = [];\n      });\n\n      return bucket;\n    }\n\n    /**\n     * Get hook bucket based on the context of the object or if argument is `undefined`, get the global hook bucket.\n     *\n     * @param {Object} [context=null] A Handsontable instance.\n     * @returns {Object} Returns a global or Handsontable instance bucket.\n     */\n\n  }, {\n    key: 'getBucket',\n    value: function getBucket() {\n      var context = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n\n      if (context) {\n        if (!context.pluginHookBucket) {\n          context.pluginHookBucket = this.createEmptyBucket();\n        }\n\n        return context.pluginHookBucket;\n      }\n\n      return this.globalBucket;\n    }\n\n    /**\n     * Adds a listener (globally or locally) to a specified hook name.\n     * If the `context` parameter is provided, the hook will be added only to the instance it references.\n     * Otherwise, the callback will be used everytime the hook fires on any Handsontable instance.\n     * You can provide an array of callback functions as the `callback` argument, this way they will all be fired\n     * once the hook is triggered.\n     *\n     * @see Core#addHook\n     * @param {String} key Hook name.\n     * @param {Function|Array} callback Callback function or an array of functions.\n     * @param {Object} [context=null] The context for the hook callback to be added - a Handsontable instance or leave empty.\n     * @returns {Hooks} Instance of Hooks.\n     *\n     * @example\n     * ```js\n     * // single callback, added locally\n     * Handsontable.hooks.add('beforeInit', myCallback, hotInstance);\n     *\n     * // single callback, added globally\n     * Handsontable.hooks.add('beforeInit', myCallback);\n     *\n     * // multiple callbacks, added locally\n     * Handsontable.hooks.add('beforeInit', [myCallback, anotherCallback], hotInstance);\n     *\n     * // multiple callbacks, added globally\n     * Handsontable.hooks.add('beforeInit', [myCallback, anotherCallback]);\n     * ```\n     */\n\n  }, {\n    key: 'add',\n    value: function add(key, callback) {\n      var _this = this;\n\n      var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n\n      if (Array.isArray(callback)) {\n        (0, _array.arrayEach)(callback, function (c) {\n          return _this.add(key, c, context);\n        });\n      } else {\n        var bucket = this.getBucket(context);\n\n        if (typeof bucket[key] === 'undefined') {\n          this.register(key);\n          bucket[key] = [];\n        }\n        callback.skip = false;\n\n        if (bucket[key].indexOf(callback) === -1) {\n          // only add a hook if it has not already been added (adding the same hook twice is now silently ignored)\n          var foundInitialHook = false;\n\n          if (callback.initialHook) {\n            (0, _array.arrayEach)(bucket[key], function (cb, i) {\n              if (cb.initialHook) {\n                bucket[key][i] = callback;\n                foundInitialHook = true;\n\n                return false;\n              }\n            });\n          }\n\n          if (!foundInitialHook) {\n            bucket[key].push(callback);\n          }\n        }\n      }\n\n      return this;\n    }\n\n    /**\n     * Adds a listener to a specified hook. After the hook runs this listener will be automatically removed from the bucket.\n     *\n     * @see Core#addHookOnce\n     * @param {String} key Hook/Event name.\n     * @param {Function|Array} callback Callback function.\n     * @param {Object} [context=null] A Handsontable instance.\n     *\n     * @example\n     * ```js\n     * Handsontable.hooks.once('beforeInit', myCallback, hotInstance);\n     * ```\n     */\n\n  }, {\n    key: 'once',\n    value: function once(key, callback) {\n      var _this2 = this;\n\n      var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n\n      if (Array.isArray(callback)) {\n        (0, _array.arrayEach)(callback, function (c) {\n          return _this2.once(key, c, context);\n        });\n      } else {\n        callback.runOnce = true;\n        this.add(key, callback, context);\n      }\n    }\n\n    /**\n     * Removes a listener from a hook with a given name. If the `context` argument is provided, it removes a listener from a local hook assigned to the given Handsontable instance.\n     *\n     * @see Core#removeHook\n     * @param {String} key Hook/Event name.\n     * @param {Function} callback Callback function (needs the be the function that was previously added to the hook).\n     * @param {Object} [context=null] Handsontable instance.\n     * @return {Boolean} Returns `true` if hook was removed, `false` otherwise.\n     *\n     * @example\n     * ```js\n     * Handsontable.hooks.remove('beforeInit', myCallback);\n     * ```\n     */\n\n  }, {\n    key: 'remove',\n    value: function remove(key, callback) {\n      var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n\n      var bucket = this.getBucket(context);\n\n      if (typeof bucket[key] !== 'undefined') {\n        if (bucket[key].indexOf(callback) >= 0) {\n          callback.skip = true;\n\n          return true;\n        }\n      }\n\n      return false;\n    }\n\n    /**\n     * Checks whether there are any registered listeners for the provided hook name.\n     * If the `context` parameter is provided, it only checks for listeners assigned to the given Handsontable instance.\n     *\n     * @param {String} key Hook name.\n     * @param {Object} [context=null] A Handsontable instance.\n     * @returns {Boolean} `true` for success, `false` otherwise.\n     */\n\n  }, {\n    key: 'has',\n    value: function has(key) {\n      var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\n      var bucket = this.getBucket(context);\n\n      return !!(bucket[key] !== void 0 && bucket[key].length);\n    }\n\n    /**\n     * Runs all local and global callbacks assigned to the hook identified by the `key` parameter.\n     * It returns either a return value from the last called callback or the first parameter (`p1`) passed to the `run` function.\n     *\n     * @see Core#runHooks\n     * @param {Object} context Handsontable instance.\n     * @param {String} key Hook/Event name.\n     * @param {*} [p1] Parameter to be passed as an argument to the callback function.\n     * @param {*} [p2] Parameter to be passed as an argument to the callback function.\n     * @param {*} [p3] Parameter to be passed as an argument to the callback function.\n     * @param {*} [p4] Parameter to be passed as an argument to the callback function.\n     * @param {*} [p5] Parameter to be passed as an argument to the callback function.\n     * @param {*} [p6] Parameter to be passed as an argument to the callback function.\n     * @returns {*} Either a return value from the last called callback or `p1`.\n     *\n     * @example\n     * ```js\n     * Handsontable.hooks.run(hot, 'beforeInit');\n     * ```\n     */\n\n  }, {\n    key: 'run',\n    value: function run(context, key, p1, p2, p3, p4, p5, p6) {\n      {\n        var globalHandlers = this.globalBucket[key];\n        var length = globalHandlers ? globalHandlers.length : 0;\n        var index = 0;\n\n        if (length) {\n          // Do not optimise this loop with arrayEach or arrow function! If you do You'll decrease perf because of GC.\n          while (index < length) {\n            if (!globalHandlers[index] || globalHandlers[index].skip) {\n              index += 1;\n              /* eslint-disable no-continue */\n              continue;\n            }\n            // performance considerations - http://jsperf.com/call-vs-apply-for-a-plugin-architecture\n            var res = globalHandlers[index].call(context, p1, p2, p3, p4, p5, p6);\n\n            if (res !== void 0) {\n              // eslint-disable-next-line no-param-reassign\n              p1 = res;\n            }\n            if (globalHandlers[index] && globalHandlers[index].runOnce) {\n              this.remove(key, globalHandlers[index]);\n            }\n\n            index += 1;\n          }\n        }\n      }\n      {\n        var localHandlers = this.getBucket(context)[key];\n        var _length = localHandlers ? localHandlers.length : 0;\n        var _index = 0;\n\n        if (_length) {\n          // Do not optimise this loop with arrayEach or arrow function! If you do You'll decrease perf because of GC.\n          while (_index < _length) {\n            if (!localHandlers[_index] || localHandlers[_index].skip) {\n              _index += 1;\n              /* eslint-disable no-continue */\n              continue;\n            }\n            // performance considerations - http://jsperf.com/call-vs-apply-for-a-plugin-architecture\n            var _res = localHandlers[_index].call(context, p1, p2, p3, p4, p5, p6);\n\n            if (_res !== void 0) {\n              // eslint-disable-next-line no-param-reassign\n              p1 = _res;\n            }\n            if (localHandlers[_index] && localHandlers[_index].runOnce) {\n              this.remove(key, localHandlers[_index], context);\n            }\n\n            _index += 1;\n          }\n        }\n      }\n\n      return p1;\n    }\n\n    /**\n     * Destroy all listeners connected to the context. If no context is provided, the global listeners will be destroyed.\n     *\n     * @param {Object} [context=null] A Handsontable instance.\n     * @example\n     * ```js\n     * // destroy the global listeners\n     * Handsontable.hooks.destroy();\n     *\n     * // destroy the local listeners\n     * Handsontable.hooks.destroy(hotInstance);\n     * ```\n     */\n\n  }, {\n    key: 'destroy',\n    value: function destroy() {\n      var context = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n\n      // eslint-disable-next-line no-return-assign\n      (0, _object.objectEach)(this.getBucket(context), function (value, key, bucket) {\n        return bucket[key].length = 0;\n      });\n    }\n\n    /**\n     * Registers a hook name (adds it to the list of the known hook names). Used by plugins.\n     * It is not necessary to call register, but if you use it, your plugin hook will be used returned by\n     * the `getRegistered` method. (which itself is used in the demo http://docs.handsontable.com/tutorial-callbacks.html).\n     *\n     * @param key {String} The hook name.\n     *\n     * @example\n     * ```js\n     * Handsontable.hooks.register('myHook');\n     * ```\n     */\n\n  }, {\n    key: 'register',\n    value: function register(key) {\n      if (!this.isRegistered(key)) {\n        REGISTERED_HOOKS.push(key);\n      }\n    }\n\n    /**\n     * Deregisters a hook name (removes it from the list of known hook names).\n     *\n     * @param key {String} Hook name.\n     *\n     * @example\n     * ```js\n     * Handsontable.hooks.deregister('myHook');\n     * ```\n     */\n\n  }, {\n    key: 'deregister',\n    value: function deregister(key) {\n      if (this.isRegistered(key)) {\n        REGISTERED_HOOKS.splice(REGISTERED_HOOKS.indexOf(key), 1);\n      }\n    }\n\n    /**\n     * Returns a boolean depending on if a hook by such name has been registered.\n     *\n     * @param key {String} Hook name.\n     * @returns {Boolean} `true` for success, `false` otherwise.\n     *\n     * @example\n     * ```js\n     * Handsontable.hooks.isRegistered('beforeInit');\n     *\n     * // Results:\n     * true\n     * ```\n     */\n\n  }, {\n    key: 'isRegistered',\n    value: function isRegistered(key) {\n      return REGISTERED_HOOKS.indexOf(key) >= 0;\n    }\n\n    /**\n     * Returns an array of registered hooks.\n     *\n     * @returns {Array} An array of registered hooks.\n     *\n     * @example\n     * ```js\n     * Handsontable.hooks.getRegistered();\n     *\n     * // Results:\n     * [\n     * ...\n     *   'beforeInit',\n     *   'beforeRender',\n     *   'beforeSetRangeEnd',\n     *   'beforeDrawBorders',\n     *   'beforeChange',\n     * ...\n     * ]\n     * ```\n     */\n\n  }, {\n    key: 'getRegistered',\n    value: function getRegistered() {\n      return REGISTERED_HOOKS;\n    }\n  }]);\n\n  return Hooks;\n}();\n\nvar globalSingleton = new Hooks();\n\nfunction getGlobalSingleton() {\n  return globalSingleton;\n}\n\nexports.default = Hooks;\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports.getRegisteredEditors = exports.getRegisteredEditorNames = exports.hasEditor = exports.getEditorInstance = exports.getEditor = exports.registerEditor = undefined;\nexports.RegisteredEditor = RegisteredEditor;\nexports._getEditorInstance = _getEditorInstance;\n\nvar _staticRegister2 = __webpack_require__(38);\n\nvar _staticRegister3 = _interopRequireDefault(_staticRegister2);\n\nvar _pluginHooks = __webpack_require__(16);\n\nvar _pluginHooks2 = _interopRequireDefault(_pluginHooks);\n\nvar _baseEditor = __webpack_require__(55);\n\nvar _baseEditor2 = _interopRequireDefault(_baseEditor);\n\nvar _autocompleteEditor = __webpack_require__(190);\n\nvar _autocompleteEditor2 = _interopRequireDefault(_autocompleteEditor);\n\nvar _checkboxEditor = __webpack_require__(235);\n\nvar _checkboxEditor2 = _interopRequireDefault(_checkboxEditor);\n\nvar _dateEditor = __webpack_require__(236);\n\nvar _dateEditor2 = _interopRequireDefault(_dateEditor);\n\nvar _dropdownEditor = __webpack_require__(239);\n\nvar _dropdownEditor2 = _interopRequireDefault(_dropdownEditor);\n\nvar _handsontableEditor = __webpack_require__(191);\n\nvar _handsontableEditor2 = _interopRequireDefault(_handsontableEditor);\n\nvar _numericEditor = __webpack_require__(240);\n\nvar _numericEditor2 = _interopRequireDefault(_numericEditor);\n\nvar _passwordEditor = __webpack_require__(241);\n\nvar _passwordEditor2 = _interopRequireDefault(_passwordEditor);\n\nvar _selectEditor = __webpack_require__(242);\n\nvar _selectEditor2 = _interopRequireDefault(_selectEditor);\n\nvar _textEditor = __webpack_require__(59);\n\nvar _textEditor2 = _interopRequireDefault(_textEditor);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Utility to register editors and common namespace for keeping reference to all editor classes\n */\nvar registeredEditorClasses = new WeakMap();\n\nvar _staticRegister = (0, _staticRegister3.default)('editors'),\n    register = _staticRegister.register,\n    getItem = _staticRegister.getItem,\n    hasItem = _staticRegister.hasItem,\n    getNames = _staticRegister.getNames,\n    getValues = _staticRegister.getValues;\n\n_register('base', _baseEditor2.default);\n_register('autocomplete', _autocompleteEditor2.default);\n_register('checkbox', _checkboxEditor2.default);\n_register('date', _dateEditor2.default);\n_register('dropdown', _dropdownEditor2.default);\n_register('handsontable', _handsontableEditor2.default);\n_register('numeric', _numericEditor2.default);\n_register('password', _passwordEditor2.default);\n_register('select', _selectEditor2.default);\n_register('text', _textEditor2.default);\n\nfunction RegisteredEditor(editorClass) {\n  var instances = {};\n  var Clazz = editorClass;\n\n  this.getConstructor = function () {\n    return editorClass;\n  };\n\n  this.getInstance = function (hotInstance) {\n    if (!(hotInstance.guid in instances)) {\n      instances[hotInstance.guid] = new Clazz(hotInstance);\n    }\n\n    return instances[hotInstance.guid];\n  };\n\n  _pluginHooks2.default.getSingleton().add('afterDestroy', function () {\n    instances[this.guid] = null;\n  });\n}\n\n/**\n * Returns instance (singleton) of editor class.\n *\n * @param {String} name Name of an editor under which it has been stored.\n * @param {Object} hotInstance Instance of Handsontable.\n * @returns {Function} Returns instance of editor.\n */\nfunction _getEditorInstance(name, hotInstance) {\n  var editor = void 0;\n\n  if (typeof name === 'function') {\n    if (!registeredEditorClasses.get(name)) {\n      _register(null, name);\n    }\n    editor = registeredEditorClasses.get(name);\n  } else if (typeof name === 'string') {\n    editor = getItem(name);\n  } else {\n    throw Error('Only strings and functions can be passed as \"editor\" parameter');\n  }\n\n  if (!editor) {\n    throw Error('No editor registered under name \"' + name + '\"');\n  }\n\n  return editor.getInstance(hotInstance);\n}\n\n/**\n * Retrieve editor class.\n *\n * @param {String} name Editor identification.\n * @returns {Function} Returns editor class.\n */\nfunction _getItem(name) {\n  if (!hasItem(name)) {\n    throw Error('No registered editor found under \"' + name + '\" name');\n  }\n\n  return getItem(name).getConstructor();\n}\n\n/**\n * Register editor class under specified name.\n *\n * @param {String} name Editor identification.\n * @param {Function} editorClass Editor class.\n */\nfunction _register(name, editorClass) {\n  var editorWrapper = new RegisteredEditor(editorClass);\n\n  if (typeof name === 'string') {\n    register(name, editorWrapper);\n  }\n  registeredEditorClasses.set(editorClass, editorWrapper);\n}\n\nexports.registerEditor = _register;\nexports.getEditor = _getItem;\nexports.getEditorInstance = _getEditorInstance;\nexports.hasEditor = hasItem;\nexports.getRegisteredEditorNames = getNames;\nexports.getRegisteredEditors = getValues;\n\n/***/ }),\n/* 18 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar isObject = __webpack_require__(9);\nmodule.exports = function (it) {\n  if (!isObject(it)) throw TypeError(it + ' is not an object!');\n  return it;\n};\n\n\n/***/ }),\n/* 19 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports.normalizeSelection = normalizeSelection;\nexports.isSeparator = isSeparator;\nexports.hasSubMenu = hasSubMenu;\nexports.isDisabled = isDisabled;\nexports.isSelectionDisabled = isSelectionDisabled;\nexports.getValidSelection = getValidSelection;\nexports.prepareVerticalAlignClass = prepareVerticalAlignClass;\nexports.prepareHorizontalAlignClass = prepareHorizontalAlignClass;\nexports.getAlignmentClasses = getAlignmentClasses;\nexports.align = align;\nexports.checkSelectionConsistency = checkSelectionConsistency;\nexports.markLabelAsSelected = markLabelAsSelected;\nexports.isItemHidden = isItemHidden;\nexports.filterSeparators = filterSeparators;\n\nvar _array = __webpack_require__(2);\n\nvar _element = __webpack_require__(0);\n\nvar _separator = __webpack_require__(95);\n\nfunction normalizeSelection(selRanges) {\n  return (0, _array.arrayMap)(selRanges, function (range) {\n    return {\n      start: range.getTopLeftCorner(),\n      end: range.getBottomRightCorner()\n    };\n  });\n}\n\nfunction isSeparator(cell) {\n  return (0, _element.hasClass)(cell, 'htSeparator');\n}\n\nfunction hasSubMenu(cell) {\n  return (0, _element.hasClass)(cell, 'htSubmenu');\n}\n\nfunction isDisabled(cell) {\n  return (0, _element.hasClass)(cell, 'htDisabled');\n}\n\nfunction isSelectionDisabled(cell) {\n  return (0, _element.hasClass)(cell, 'htSelectionDisabled');\n}\n\nfunction getValidSelection(hot) {\n  var selected = hot.getSelected();\n\n  if (!selected) {\n    return null;\n  }\n  if (selected[0] < 0) {\n    return null;\n  }\n\n  return selected;\n}\n\nfunction prepareVerticalAlignClass(className, alignment) {\n  if (className.indexOf(alignment) !== -1) {\n    return className;\n  }\n\n  var replacedClassName = className.replace('htTop', '').replace('htMiddle', '').replace('htBottom', '').replace('  ', '');\n\n  return replacedClassName + ' ' + alignment;\n}\n\nfunction prepareHorizontalAlignClass(className, alignment) {\n  if (className.indexOf(alignment) !== -1) {\n    return className;\n  }\n  var replacedClassName = className.replace('htLeft', '').replace('htCenter', '').replace('htRight', '').replace('htJustify', '').replace('  ', '');\n\n  return replacedClassName + ' ' + alignment;\n}\n\nfunction getAlignmentClasses(ranges, callback) {\n  var classes = {};\n\n  (0, _array.arrayEach)(ranges, function (_ref) {\n    var from = _ref.from,\n        to = _ref.to;\n\n    for (var row = from.row; row <= to.row; row++) {\n      for (var col = from.col; col <= to.col; col++) {\n        if (!classes[row]) {\n          classes[row] = [];\n        }\n        classes[row][col] = callback(row, col);\n      }\n    }\n  });\n\n  return classes;\n}\n\nfunction align(ranges, type, alignment, cellDescriptor, propertySetter) {\n  (0, _array.arrayEach)(ranges, function (_ref2) {\n    var from = _ref2.from,\n        to = _ref2.to;\n\n    if (from.row === to.row && from.col === to.col) {\n      applyAlignClassName(from.row, from.col, type, alignment, cellDescriptor, propertySetter);\n    } else {\n      for (var row = from.row; row <= to.row; row++) {\n        for (var col = from.col; col <= to.col; col++) {\n          applyAlignClassName(row, col, type, alignment, cellDescriptor, propertySetter);\n        }\n      }\n    }\n  });\n}\n\nfunction applyAlignClassName(row, col, type, alignment, cellDescriptor, propertySetter) {\n  var cellMeta = cellDescriptor(row, col);\n  var className = alignment;\n\n  if (cellMeta.className) {\n    if (type === 'vertical') {\n      className = prepareVerticalAlignClass(cellMeta.className, alignment);\n    } else {\n      className = prepareHorizontalAlignClass(cellMeta.className, alignment);\n    }\n  }\n\n  propertySetter(row, col, 'className', className);\n}\n\nfunction checkSelectionConsistency(ranges, comparator) {\n  var result = false;\n\n  if (Array.isArray(ranges)) {\n    (0, _array.arrayEach)(ranges, function (range) {\n      range.forAll(function (row, col) {\n        if (comparator(row, col)) {\n          result = true;\n\n          return false;\n        }\n      });\n\n      return result;\n    });\n  }\n\n  return result;\n}\n\nfunction markLabelAsSelected(label) {\n  // workaround for https://github.com/handsontable/handsontable/issues/1946\n  return '<span class=\"selected\">' + String.fromCharCode(10003) + '</span>' + label;\n}\n\nfunction isItemHidden(item, instance) {\n  return !item.hidden || !(typeof item.hidden === 'function' && item.hidden.call(instance));\n}\n\nfunction shiftSeparators(items, separator) {\n  var result = items.slice(0);\n\n  for (var i = 0; i < result.length;) {\n    if (result[i].name === separator) {\n      result.shift();\n    } else {\n      break;\n    }\n  }\n  return result;\n}\n\nfunction popSeparators(items, separator) {\n  var result = items.slice(0);\n\n  result.reverse();\n  result = shiftSeparators(result, separator);\n  result.reverse();\n\n  return result;\n}\n\nfunction removeDuplicatedSeparators(items) {\n  var result = [];\n\n  (0, _array.arrayEach)(items, function (value, index) {\n    if (index > 0) {\n      if (result[result.length - 1].name !== value.name) {\n        result.push(value);\n      }\n    } else {\n      result.push(value);\n    }\n  });\n\n  return result;\n}\n\nfunction filterSeparators(items) {\n  var separator = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _separator.KEY;\n\n  var result = items.slice(0);\n\n  result = shiftSeparators(result, separator);\n  result = popSeparators(result, separator);\n  result = removeDuplicatedSeparators(result);\n\n  return result;\n}\n\n/***/ }),\n/* 20 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar anObject = __webpack_require__(18);\nvar IE8_DOM_DEFINE = __webpack_require__(100);\nvar toPrimitive = __webpack_require__(75);\nvar dP = Object.defineProperty;\n\nexports.f = __webpack_require__(22) ? 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/* 21 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports.KEY_CODES = undefined;\nexports.isPrintableChar = isPrintableChar;\nexports.isMetaKey = isMetaKey;\nexports.isCtrlKey = isCtrlKey;\nexports.isCtrlMetaKey = isCtrlMetaKey;\nexports.isKey = isKey;\n\nvar _array = __webpack_require__(2);\n\nvar KEY_CODES = exports.KEY_CODES = {\n  MOUSE_LEFT: 1,\n  MOUSE_RIGHT: 3,\n  MOUSE_MIDDLE: 2,\n  BACKSPACE: 8,\n  COMMA: 188,\n  INSERT: 45,\n  DELETE: 46,\n  END: 35,\n  ENTER: 13,\n  ESCAPE: 27,\n  CONTROL: 17,\n  COMMAND_LEFT: 91,\n  COMMAND_RIGHT: 93,\n  COMMAND_FIREFOX: 224,\n  ALT: 18,\n  HOME: 36,\n  PAGE_DOWN: 34,\n  PAGE_UP: 33,\n  PERIOD: 190,\n  SPACE: 32,\n  SHIFT: 16,\n  CAPS_LOCK: 20,\n  TAB: 9,\n  ARROW_RIGHT: 39,\n  ARROW_LEFT: 37,\n  ARROW_UP: 38,\n  ARROW_DOWN: 40,\n  F1: 112,\n  F2: 113,\n  F3: 114,\n  F4: 115,\n  F5: 116,\n  F6: 117,\n  F7: 118,\n  F8: 119,\n  F9: 120,\n  F10: 121,\n  F11: 122,\n  F12: 123,\n  A: 65,\n  X: 88,\n  C: 67,\n  V: 86\n};\n\n/**\n * Returns true if keyCode represents a printable character.\n *\n * @param {Number} keyCode\n * @returns {Boolean}\n */\nfunction isPrintableChar(keyCode) {\n  return keyCode === 32 || // space\n  keyCode >= 48 && keyCode <= 57 || // 0-9\n  keyCode >= 96 && keyCode <= 111 || // numpad\n  keyCode >= 186 && keyCode <= 192 || // ;=,-./`\n  keyCode >= 219 && keyCode <= 222 || // []{}\\|\"'\n  keyCode >= 226 || // special chars (229 for Asian chars)\n  keyCode >= 65 && keyCode <= 90; // a-z\n}\n\n/**\n * @param {Number} keyCode\n * @returns {Boolean}\n */\nfunction isMetaKey(keyCode) {\n  var metaKeys = [KEY_CODES.ARROW_DOWN, KEY_CODES.ARROW_UP, KEY_CODES.ARROW_LEFT, KEY_CODES.ARROW_RIGHT, KEY_CODES.HOME, KEY_CODES.END, KEY_CODES.DELETE, KEY_CODES.BACKSPACE, KEY_CODES.F1, KEY_CODES.F2, KEY_CODES.F3, KEY_CODES.F4, KEY_CODES.F5, KEY_CODES.F6, KEY_CODES.F7, KEY_CODES.F8, KEY_CODES.F9, KEY_CODES.F10, KEY_CODES.F11, KEY_CODES.F12, KEY_CODES.TAB, KEY_CODES.PAGE_DOWN, KEY_CODES.PAGE_UP, KEY_CODES.ENTER, KEY_CODES.ESCAPE, KEY_CODES.SHIFT, KEY_CODES.CAPS_LOCK, KEY_CODES.ALT];\n\n  return metaKeys.indexOf(keyCode) !== -1;\n}\n\n/**\n * Checks if passed key code is ctrl or cmd key. Depends on what OS the code runs it check key code based on\n * different meta key codes.\n *\n * @param {Number} keyCode Key code to check.\n * @returns {Boolean}\n */\nfunction isCtrlKey(keyCode) {\n  var keys = [];\n\n  if (window.navigator.platform.includes('Mac')) {\n    keys.push(KEY_CODES.COMMAND_LEFT, KEY_CODES.COMMAND_RIGHT, KEY_CODES.COMMAND_FIREFOX);\n  } else {\n    keys.push(KEY_CODES.CONTROL);\n  }\n\n  return keys.includes(keyCode);\n}\n\n/**\n * Checks if passed key code is ctrl or cmd key. This helper checks if the key code matches to meta keys\n * regardless of the OS on which it is running.\n *\n * @param {Number} keyCode Key code to check.\n * @returns {Boolean}\n */\nfunction isCtrlMetaKey(keyCode) {\n  return [KEY_CODES.CONTROL, KEY_CODES.COMMAND_LEFT, KEY_CODES.COMMAND_RIGHT, KEY_CODES.COMMAND_FIREFOX].includes(keyCode);\n}\n\n/**\n * @param {Number} keyCode\n * @param {String} baseCode\n * @returns {Boolean}\n */\nfunction isKey(keyCode, baseCode) {\n  var keys = baseCode.split('|');\n  var result = false;\n\n  (0, _array.arrayEach)(keys, function (key) {\n    if (keyCode === KEY_CODES[key]) {\n      result = true;\n\n      return false;\n    }\n  });\n\n  return result;\n}\n\n/***/ }),\n/* 22 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// Thank's IE8 for his funny defineProperty\nmodule.exports = !__webpack_require__(23)(function () {\n  return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n\n\n/***/ }),\n/* 23 */\n/***/ (function(module, exports) {\n\nmodule.exports = function (exec) {\n  try {\n    return !!exec();\n  } catch (e) {\n    return true;\n  }\n};\n\n\n/***/ }),\n/* 24 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = __webpack_require__(77);\nvar defined = __webpack_require__(36);\nmodule.exports = function (it) {\n  return IObject(defined(it));\n};\n\n\n/***/ }),\n/* 25 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 7.1.15 ToLength\nvar toInteger = __webpack_require__(60);\nvar min = Math.min;\nmodule.exports = function (it) {\n  return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n\n\n/***/ }),\n/* 26 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// most Object methods by ES6 should accept primitives\nvar $export = __webpack_require__(3);\nvar core = __webpack_require__(37);\nvar fails = __webpack_require__(23);\nmodule.exports = function (KEY, exec) {\n  var fn = (core.Object || {})[KEY] || Object[KEY];\n  var exp = {};\n  exp[KEY] = exec(fn);\n  $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n\n\n/***/ }),\n/* 27 */\n/***/ (function(module, exports) {\n\nvar hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n  return hasOwnProperty.call(it, key);\n};\n\n\n/***/ }),\n/* 28 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar global = __webpack_require__(15);\nvar hide = __webpack_require__(29);\nvar has = __webpack_require__(27);\nvar SRC = __webpack_require__(50)('src');\nvar TO_STRING = 'toString';\nvar $toString = Function[TO_STRING];\nvar TPL = ('' + $toString).split(TO_STRING);\n\n__webpack_require__(37).inspectSource = function (it) {\n  return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n  var isFunction = typeof val == 'function';\n  if (isFunction) has(val, 'name') || hide(val, 'name', key);\n  if (O[key] === val) return;\n  if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n  if (O === global) {\n    O[key] = val;\n  } else if (!safe) {\n    delete O[key];\n    hide(O, key, val);\n  } else if (O[key]) {\n    O[key] = val;\n  } else {\n    hide(O, key, val);\n  }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n  return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n\n\n/***/ }),\n/* 29 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar dP = __webpack_require__(20);\nvar createDesc = __webpack_require__(51);\nmodule.exports = __webpack_require__(22) ? 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/* 30 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// optional / simple context binding\nvar aFunction = __webpack_require__(63);\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/* 31 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 7.1.13 ToObject(argument)\nvar defined = __webpack_require__(36);\nmodule.exports = function (it) {\n  return Object(defined(it));\n};\n\n\n/***/ }),\n/* 32 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar META = __webpack_require__(50)('meta');\nvar isObject = __webpack_require__(9);\nvar has = __webpack_require__(27);\nvar setDesc = __webpack_require__(20).f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n  return true;\n};\nvar FREEZE = !__webpack_require__(23)(function () {\n  return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n  setDesc(it, META, { value: {\n    i: 'O' + ++id, // object ID\n    w: {}          // weak collections IDs\n  } });\n};\nvar fastKey = function (it, create) {\n  // return primitive with prefix\n  if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n  if (!has(it, META)) {\n    // can't set metadata to uncaught frozen object\n    if (!isExtensible(it)) return 'F';\n    // not necessary to add metadata\n    if (!create) return 'E';\n    // add missing metadata\n    setMeta(it);\n  // return object ID\n  } return it[META].i;\n};\nvar getWeak = function (it, create) {\n  if (!has(it, META)) {\n    // can't set metadata to uncaught frozen object\n    if (!isExtensible(it)) return true;\n    // not necessary to add metadata\n    if (!create) return false;\n    // add missing metadata\n    setMeta(it);\n  // return hash weak collections IDs\n  } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n  if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n  return it;\n};\nvar meta = module.exports = {\n  KEY: META,\n  NEED: false,\n  fastKey: fastKey,\n  getWeak: getWeak,\n  onFreeze: onFreeze\n};\n\n\n/***/ }),\n/* 33 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports.toUpperCaseFirst = toUpperCaseFirst;\nexports.equalsIgnoreCase = equalsIgnoreCase;\nexports.randomString = randomString;\nexports.isPercentValue = isPercentValue;\nexports.substitute = substitute;\nexports.stripTags = stripTags;\n\nvar _mixed = __webpack_require__(11);\n\n/**\n * Convert string to upper case first letter.\n *\n * @param {String} string String to convert.\n * @returns {String}\n */\nfunction toUpperCaseFirst(string) {\n  return string[0].toUpperCase() + string.substr(1);\n}\n\n/**\n * Compare strings case insensitively.\n *\n * @param {...String} strings Strings to compare.\n * @returns {Boolean}\n */\nfunction equalsIgnoreCase() {\n  var unique = [];\n\n  for (var _len = arguments.length, strings = Array(_len), _key = 0; _key < _len; _key++) {\n    strings[_key] = arguments[_key];\n  }\n\n  var length = strings.length;\n\n  while (length) {\n    length -= 1;\n    var string = (0, _mixed.stringify)(strings[length]).toLowerCase();\n\n    if (unique.indexOf(string) === -1) {\n      unique.push(string);\n    }\n  }\n\n  return unique.length === 1;\n}\n\n/**\n * Generates a random hex string. Used as namespace for Handsontable instance events.\n *\n * @return {String} Returns 16-long character random string (eq. `'92b1bfc74ec4'`).\n */\nfunction randomString() {\n  function s4() {\n    return Math.floor((1 + Math.random()) * 0x10000).toString(16).substring(1);\n  }\n\n  return s4() + s4() + s4() + s4();\n}\n\n/**\n * Checks if value is valid percent.\n *\n * @param {String} value\n * @returns {Boolean}\n */\nfunction isPercentValue(value) {\n  return (/^([0-9][0-9]?%$)|(^100%$)/.test(value)\n  );\n}\n\n/**\n * Substitute strings placed beetwen square brackets into value defined in `variables` object. String names defined in\n * square brackets must be the same as property name of `variables` object.\n *\n * @param {String} template Template string.\n * @param {Object} variables Object which contains all available values which can be injected into template.\n * @returns {String}\n */\nfunction substitute(template) {\n  var variables = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  return ('' + template).replace(/(?:\\\\)?\\[([^[\\]]+)]/g, function (match, name) {\n    if (match.charAt(0) === '\\\\') {\n      return match.substr(1, match.length - 1);\n    }\n\n    return variables[name] === void 0 ? '' : variables[name];\n  });\n}\n\nvar STRIP_TAGS_REGEX = /<\\/?\\w+\\/?>|<\\w+[\\s|/][^>]*>/gi;\n\n/**\n * Strip any HTML tag from the string.\n *\n * @param  {String} string String to cut HTML from.\n * @return {String}\n */\nfunction stripTags(string) {\n  return ('' + string).replace(STRIP_TAGS_REGEX, '');\n}\n\n/***/ }),\n/* 34 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports.getRegisteredValidators = exports.getRegisteredValidatorNames = exports.hasValidator = exports.getValidator = exports.registerValidator = undefined;\n\nvar _staticRegister2 = __webpack_require__(38);\n\nvar _staticRegister3 = _interopRequireDefault(_staticRegister2);\n\nvar _autocompleteValidator = __webpack_require__(251);\n\nvar _autocompleteValidator2 = _interopRequireDefault(_autocompleteValidator);\n\nvar _dateValidator = __webpack_require__(252);\n\nvar _dateValidator2 = _interopRequireDefault(_dateValidator);\n\nvar _numericValidator = __webpack_require__(253);\n\nvar _numericValidator2 = _interopRequireDefault(_numericValidator);\n\nvar _timeValidator = __webpack_require__(254);\n\nvar _timeValidator2 = _interopRequireDefault(_timeValidator);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar _staticRegister = (0, _staticRegister3.default)('validators'),\n    register = _staticRegister.register,\n    getItem = _staticRegister.getItem,\n    hasItem = _staticRegister.hasItem,\n    getNames = _staticRegister.getNames,\n    getValues = _staticRegister.getValues;\n\nregister('autocomplete', _autocompleteValidator2.default);\nregister('date', _dateValidator2.default);\nregister('numeric', _numericValidator2.default);\nregister('time', _timeValidator2.default);\n\n/**\n * Retrieve validator function.\n *\n * @param {String} name Validator identification.\n * @returns {Function} Returns validator function.\n */\nfunction _getItem(name) {\n  if (typeof name === 'function') {\n    return name;\n  }\n  if (!hasItem(name)) {\n    throw Error('No registered validator found under \"' + name + '\" name');\n  }\n\n  return getItem(name);\n}\n\nexports.registerValidator = register;\nexports.getValidator = _getItem;\nexports.hasValidator = hasItem;\nexports.getRegisteredValidatorNames = getNames;\nexports.getRegisteredValidators = getValues;\n\n/***/ }),\n/* 35 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = __webpack_require__(101);\nvar enumBugKeys = __webpack_require__(80);\n\nmodule.exports = Object.keys || function keys(O) {\n  return $keys(O, enumBugKeys);\n};\n\n\n/***/ }),\n/* 36 */\n/***/ (function(module, exports) {\n\n// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n  if (it == undefined) throw TypeError(\"Can't call method on  \" + it);\n  return it;\n};\n\n\n/***/ }),\n/* 37 */\n/***/ (function(module, exports) {\n\nvar core = module.exports = { version: '2.5.7' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n\n\n/***/ }),\n/* 38 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports.default = staticRegister;\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nvar collection = exports.collection = new Map();\n\nfunction staticRegister() {\n  var namespace = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'common';\n\n  if (!collection.has(namespace)) {\n    collection.set(namespace, new Map());\n  }\n  var subCollection = collection.get(namespace);\n\n  /**\n   * Register an item to the collection. If the item under the same was exist earlier then this item will be replaced with new one.\n   *\n   * @param {String} name Identification of the item.\n   * @param {*} item Item to save in the collection.\n   */\n  function register(name, item) {\n    subCollection.set(name, item);\n  }\n\n  /**\n   * Retrieve the item from the collection.\n   *\n   * @param {String} name Identification of the item.\n   * @returns {*} Returns item which was saved in the collection.\n   */\n  function getItem(name) {\n    return subCollection.get(name);\n  }\n\n  /**\n   * Check if item under specyfied name is exists.\n   *\n   * @param {String} name Identification of the item.\n   * @returns {Boolean} Returns `true` or `false` depends on if element exists in the collection.\n   */\n  function hasItem(name) {\n    return subCollection.has(name);\n  }\n\n  /**\n   * Retrieve list of names registered from the collection.\n   *\n   * @returns {Array} Returns an array of strings with all names under which objects are stored.\n   */\n  function getNames() {\n    return [].concat(_toConsumableArray(subCollection.keys()));\n  }\n\n  /**\n   * Retrieve all registered values from the collection.\n   *\n   * @returns {Array} Returns an array with all values stored in the collection.\n   */\n  function getValues() {\n    return [].concat(_toConsumableArray(subCollection.values()));\n  }\n\n  return {\n    register: register,\n    getItem: getItem,\n    hasItem: hasItem,\n    getNames: getNames,\n    getValues: getValues\n  };\n}\n\n/***/ }),\n/* 39 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports.setBrowserMeta = setBrowserMeta;\nexports.isChrome = isChrome;\nexports.isEdge = isEdge;\nexports.isIE = isIE;\nexports.isIE8 = isIE8;\nexports.isIE9 = isIE9;\nexports.isMSBrowser = isMSBrowser;\nexports.isMobileBrowser = isMobileBrowser;\nexports.isSafari = isSafari;\n\nvar _object = __webpack_require__(1);\n\nvar tester = function tester(testerFunc) {\n  var result = {\n    value: false\n  };\n  result.test = function (ua, vendor) {\n    result.value = testerFunc(ua, vendor);\n  };\n\n  return result;\n};\n\nvar browsers = {\n  chrome: tester(function (ua, vendor) {\n    return (/Chrome/.test(ua) && /Google/.test(vendor)\n    );\n  }),\n  edge: tester(function (ua) {\n    return (/Edge/.test(ua)\n    );\n  }),\n  ie: tester(function (ua) {\n    return (/Trident/.test(ua)\n    );\n  }),\n  ie8: tester(function () {\n    return !document.createTextNode('test').textContent;\n  }),\n  ie9: tester(function () {\n    return !!document.documentMode;\n  }),\n  mobile: tester(function (ua) {\n    return (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(ua)\n    );\n  }),\n  safari: tester(function (ua, vendor) {\n    return (/Safari/.test(ua) && /Apple Computer/.test(vendor)\n    );\n  })\n};\n\nfunction setBrowserMeta() {\n  var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n      _ref$userAgent = _ref.userAgent,\n      userAgent = _ref$userAgent === undefined ? navigator.userAgent : _ref$userAgent,\n      _ref$vendor = _ref.vendor,\n      vendor = _ref$vendor === undefined ? navigator.vendor : _ref$vendor;\n\n  (0, _object.objectEach)(browsers, function (_ref2) {\n    var test = _ref2.test;\n    return void test(userAgent, vendor);\n  });\n}\n\nsetBrowserMeta();\n\nfunction isChrome() {\n  return browsers.chrome.value;\n}\n\nfunction isEdge() {\n  return browsers.edge.value;\n}\n\nfunction isIE() {\n  return browsers.ie.value;\n}\n\nfunction isIE8() {\n  return browsers.ie8.value;\n}\n\nfunction isIE9() {\n  return browsers.ie9.value;\n}\n\nfunction isMSBrowser() {\n  return browsers.ie.value || browsers.edge.value;\n}\n\nfunction isMobileBrowser() {\n  return browsers.mobile.value;\n}\n\nfunction isSafari() {\n  return browsers.safari.value;\n}\n\n/***/ }),\n/* 40 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\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 && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nexports.requestAnimationFrame = requestAnimationFrame;\nexports.cancelAnimationFrame = cancelAnimationFrame;\nexports.isTouchSupported = isTouchSupported;\nexports.isWebComponentSupportedNatively = isWebComponentSupportedNatively;\nexports.hasCaptionProblem = hasCaptionProblem;\nexports.getComparisonFunction = getComparisonFunction;\n// https://gist.github.com/paulirish/1579671\nvar lastTime = 0;\nvar vendors = ['ms', 'moz', 'webkit', 'o'];\nvar _requestAnimationFrame = window.requestAnimationFrame;\nvar _cancelAnimationFrame = window.cancelAnimationFrame;\n\nfor (var x = 0; x < vendors.length && !_requestAnimationFrame; ++x) {\n  _requestAnimationFrame = window[vendors[x] + 'RequestAnimationFrame'];\n  _cancelAnimationFrame = window[vendors[x] + 'CancelAnimationFrame'] || window[vendors[x] + 'CancelRequestAnimationFrame'];\n}\n\nif (!_requestAnimationFrame) {\n  _requestAnimationFrame = function _requestAnimationFrame(callback) {\n    var currTime = new Date().getTime();\n    var timeToCall = Math.max(0, 16 - (currTime - lastTime));\n    var id = window.setTimeout(function () {\n      callback(currTime + timeToCall);\n    }, timeToCall);\n    lastTime = currTime + timeToCall;\n\n    return id;\n  };\n}\n\nif (!_cancelAnimationFrame) {\n  _cancelAnimationFrame = function _cancelAnimationFrame(id) {\n    clearTimeout(id);\n  };\n}\n\n/**\n * Polyfill for requestAnimationFrame\n *\n * @param {Function} callback\n * @returns {Number}\n */\nfunction requestAnimationFrame(callback) {\n  return _requestAnimationFrame.call(window, callback);\n}\n\n/**\n * Polyfill for cancelAnimationFrame\n *\n * @param {Number} id\n */\nfunction cancelAnimationFrame(id) {\n  _cancelAnimationFrame.call(window, id);\n}\n\nfunction isTouchSupported() {\n  return 'ontouchstart' in window;\n}\n\n/**\n * Checks if browser is support web components natively\n *\n * @returns {Boolean}\n */\nfunction isWebComponentSupportedNatively() {\n  var test = document.createElement('div');\n\n  return !!(test.createShadowRoot && test.createShadowRoot.toString().match(/\\[native code\\]/));\n}\n\nvar _hasCaptionProblem = void 0;\n\nfunction detectCaptionProblem() {\n  var TABLE = document.createElement('TABLE');\n  TABLE.style.borderSpacing = 0;\n  TABLE.style.borderWidth = 0;\n  TABLE.style.padding = 0;\n  var TBODY = document.createElement('TBODY');\n  TABLE.appendChild(TBODY);\n  TBODY.appendChild(document.createElement('TR'));\n  TBODY.firstChild.appendChild(document.createElement('TD'));\n  TBODY.firstChild.firstChild.innerHTML = '<tr><td>t<br>t</td></tr>';\n\n  var CAPTION = document.createElement('CAPTION');\n  CAPTION.innerHTML = 'c<br>c<br>c<br>c';\n  CAPTION.style.padding = 0;\n  CAPTION.style.margin = 0;\n  TABLE.insertBefore(CAPTION, TBODY);\n\n  document.body.appendChild(TABLE);\n  _hasCaptionProblem = TABLE.offsetHeight < 2 * TABLE.lastChild.offsetHeight; // boolean\n  document.body.removeChild(TABLE);\n}\n\nfunction hasCaptionProblem() {\n  if (_hasCaptionProblem === void 0) {\n    detectCaptionProblem();\n  }\n\n  return _hasCaptionProblem;\n}\n\nvar comparisonFunction = void 0;\n\n/**\n * Get string comparison function for sorting purposes. It supports multilingual string comparison base on Internationalization API.\n *\n * @param {String} [language]\n * @param {Object} [options]\n * @returns {*}\n */\nfunction getComparisonFunction(language) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  if (comparisonFunction) {\n    return comparisonFunction;\n  }\n\n  if ((typeof Intl === 'undefined' ? 'undefined' : _typeof(Intl)) === 'object') {\n    comparisonFunction = new Intl.Collator(language, options).compare;\n  } else if (typeof String.prototype.localeCompare === 'function') {\n    comparisonFunction = function comparisonFunction(a, b) {\n      return ('' + a).localeCompare(b);\n    };\n  } else {\n    comparisonFunction = function comparisonFunction(a, b) {\n      if (a === b) {\n        return 0;\n      }\n\n      return a > b ? -1 : 1;\n    };\n  }\n\n  return comparisonFunction;\n}\n\n/***/ }),\n/* 41 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _element = __webpack_require__(0);\n\nvar _object = __webpack_require__(1);\n\nvar _array = __webpack_require__(2);\n\nvar _eventManager = __webpack_require__(5);\n\nvar _eventManager2 = _interopRequireDefault(_eventManager);\n\nvar _core = __webpack_require__(181);\n\nvar _core2 = _interopRequireDefault(_core);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar registeredOverlays = {};\n\n/**\n * Creates an overlay over the original Walkontable instance. The overlay renders the clone of the original Walkontable\n * and (optionally) implements behavior needed for native horizontal and vertical scrolling.\n *\n * @class Overlay\n */\n\nvar Overlay = function () {\n  _createClass(Overlay, null, [{\n    key: 'registerOverlay',\n\n\n    /**\n     * Register overlay class.\n     *\n     * @param {String} type Overlay type, one of the CLONE_TYPES value\n     * @param {Overlay} overlayClass Overlay class extended from base overlay class {@link Overlay}\n     */\n    value: function registerOverlay(type, overlayClass) {\n      if (Overlay.CLONE_TYPES.indexOf(type) === -1) {\n        throw new Error('Unsupported overlay (' + type + ').');\n      }\n      registeredOverlays[type] = overlayClass;\n    }\n\n    /**\n     * Create new instance of overlay type.\n     *\n     * @param {String} type Overlay type, one of the CLONE_TYPES value\n     * @param {Walkontable} wot Walkontable instance\n     */\n\n  }, {\n    key: 'createOverlay',\n    value: function createOverlay(type, wot) {\n      return new registeredOverlays[type](wot);\n    }\n\n    /**\n     * Check if specified overlay was registered.\n     *\n     * @param {String} type Overlay type, one of the CLONE_TYPES value\n     * @returns {Boolean}\n     */\n\n  }, {\n    key: 'hasOverlay',\n    value: function hasOverlay(type) {\n      return registeredOverlays[type] !== void 0;\n    }\n\n    /**\n     * Checks if overlay object (`overlay`) is instance of overlay type (`type`).\n     *\n     * @param {Overlay} overlay Overlay object\n     * @param {String} type Overlay type, one of the CLONE_TYPES value\n     * @returns {Boolean}\n     */\n\n  }, {\n    key: 'isOverlayTypeOf',\n    value: function isOverlayTypeOf(overlay, type) {\n      if (!overlay || !registeredOverlays[type]) {\n        return false;\n      }\n\n      return overlay instanceof registeredOverlays[type];\n    }\n\n    /**\n     * @param {Walkontable} wotInstance\n     */\n\n  }, {\n    key: 'CLONE_TOP',\n\n    /**\n     * @type {String}\n     */\n    get: function get() {\n      return 'top';\n    }\n\n    /**\n     * @type {String}\n     */\n\n  }, {\n    key: 'CLONE_BOTTOM',\n    get: function get() {\n      return 'bottom';\n    }\n\n    /**\n     * @type {String}\n     */\n\n  }, {\n    key: 'CLONE_LEFT',\n    get: function get() {\n      return 'left';\n    }\n\n    /**\n     * @type {String}\n     */\n\n  }, {\n    key: 'CLONE_TOP_LEFT_CORNER',\n    get: function get() {\n      return 'top_left_corner';\n    }\n\n    /**\n     * @type {String}\n     */\n\n  }, {\n    key: 'CLONE_BOTTOM_LEFT_CORNER',\n    get: function get() {\n      return 'bottom_left_corner';\n    }\n\n    /**\n     * @type {String}\n     */\n\n  }, {\n    key: 'CLONE_DEBUG',\n    get: function get() {\n      return 'debug';\n    }\n\n    /**\n     * List of all availables clone types\n     *\n     * @type {Array}\n     */\n\n  }, {\n    key: 'CLONE_TYPES',\n    get: function get() {\n      return [Overlay.CLONE_TOP, Overlay.CLONE_BOTTOM, Overlay.CLONE_LEFT, Overlay.CLONE_TOP_LEFT_CORNER, Overlay.CLONE_BOTTOM_LEFT_CORNER, Overlay.CLONE_DEBUG];\n    }\n  }]);\n\n  function Overlay(wotInstance) {\n    _classCallCheck(this, Overlay);\n\n    (0, _object.defineGetter)(this, 'wot', wotInstance, {\n      writable: false\n    });\n\n    // legacy support, deprecated in the future\n    this.instance = this.wot;\n\n    this.type = '';\n    this.mainTableScrollableElement = null;\n    this.TABLE = this.wot.wtTable.TABLE;\n    this.hider = this.wot.wtTable.hider;\n    this.spreader = this.wot.wtTable.spreader;\n    this.holder = this.wot.wtTable.holder;\n    this.wtRootElement = this.wot.wtTable.wtRootElement;\n    this.trimmingContainer = (0, _element.getTrimmingContainer)(this.hider.parentNode.parentNode);\n    this.areElementSizesAdjusted = false;\n    this.updateStateOfRendering();\n  }\n\n  /**\n   * Update internal state of object with an information about the need of full rendering of the overlay.\n   *\n   * @returns {Boolean} Returns `true` if the state has changed since the last check.\n   */\n\n\n  _createClass(Overlay, [{\n    key: 'updateStateOfRendering',\n    value: function updateStateOfRendering() {\n      var previousState = this.needFullRender;\n\n      this.needFullRender = this.shouldBeRendered();\n\n      var changed = previousState !== this.needFullRender;\n\n      if (changed && !this.needFullRender) {\n        this.reset();\n      }\n\n      return changed;\n    }\n\n    /**\n     * Checks if overlay should be fully rendered\n     *\n     * @returns {Boolean}\n     */\n\n  }, {\n    key: 'shouldBeRendered',\n    value: function shouldBeRendered() {\n      return true;\n    }\n\n    /**\n     * Update the trimming container.\n     */\n\n  }, {\n    key: 'updateTrimmingContainer',\n    value: function updateTrimmingContainer() {\n      this.trimmingContainer = (0, _element.getTrimmingContainer)(this.hider.parentNode.parentNode);\n    }\n\n    /**\n     * Update the main scrollable element.\n     */\n\n  }, {\n    key: 'updateMainScrollableElement',\n    value: function updateMainScrollableElement() {\n      this.mainTableScrollableElement = (0, _element.getScrollableElement)(this.wot.wtTable.TABLE);\n    }\n\n    /**\n     * Make a clone of table for overlay\n     *\n     * @param {String} direction Can be `Overlay.CLONE_TOP`, `Overlay.CLONE_LEFT`,\n     *                           `Overlay.CLONE_TOP_LEFT_CORNER`, `Overlay.CLONE_DEBUG`\n     * @returns {Walkontable}\n     */\n\n  }, {\n    key: 'makeClone',\n    value: function makeClone(direction) {\n      if (Overlay.CLONE_TYPES.indexOf(direction) === -1) {\n        throw new Error('Clone type \"' + direction + '\" is not supported.');\n      }\n      var clone = document.createElement('DIV');\n      var clonedTable = document.createElement('TABLE');\n\n      clone.className = 'ht_clone_' + direction + ' handsontable';\n      clone.style.position = 'absolute';\n      clone.style.top = 0;\n      clone.style.left = 0;\n      clone.style.overflow = 'hidden';\n\n      clonedTable.className = this.wot.wtTable.TABLE.className;\n      clone.appendChild(clonedTable);\n\n      this.type = direction;\n      this.wot.wtTable.wtRootElement.parentNode.appendChild(clone);\n\n      var preventOverflow = this.wot.getSetting('preventOverflow');\n\n      if (preventOverflow === true || preventOverflow === 'horizontal' && this.type === Overlay.CLONE_TOP || preventOverflow === 'vertical' && this.type === Overlay.CLONE_LEFT) {\n        this.mainTableScrollableElement = window;\n      } else {\n        this.mainTableScrollableElement = (0, _element.getScrollableElement)(this.wot.wtTable.TABLE);\n      }\n\n      return new _core2.default({\n        cloneSource: this.wot,\n        cloneOverlay: this,\n        table: clonedTable\n      });\n    }\n\n    /**\n     * Refresh/Redraw overlay\n     *\n     * @param {Boolean} [fastDraw=false]\n     */\n\n  }, {\n    key: 'refresh',\n    value: function refresh() {\n      var fastDraw = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n      // When hot settings are changed we allow to refresh overlay once before blocking\n      var nextCycleRenderFlag = this.shouldBeRendered();\n\n      if (this.clone && (this.needFullRender || nextCycleRenderFlag)) {\n        this.clone.draw(fastDraw);\n      }\n      this.needFullRender = nextCycleRenderFlag;\n    }\n\n    /**\n     * Reset overlay styles to initial values.\n     */\n\n  }, {\n    key: 'reset',\n    value: function reset() {\n      if (!this.clone) {\n        return;\n      }\n      var holder = this.clone.wtTable.holder;\n      var hider = this.clone.wtTable.hider;\n      var holderStyle = holder.style;\n      var hidderStyle = hider.style;\n      var rootStyle = holder.parentNode.style;\n\n      (0, _array.arrayEach)([holderStyle, hidderStyle, rootStyle], function (style) {\n        style.width = '';\n        style.height = '';\n      });\n    }\n\n    /**\n     * Destroy overlay instance\n     */\n\n  }, {\n    key: 'destroy',\n    value: function destroy() {\n      new _eventManager2.default(this.clone).destroy();\n    }\n  }]);\n\n  return Overlay;\n}();\n\nexports.default = Overlay;\n\n/***/ }),\n/* 42 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports.toSingleLine = toSingleLine;\n\nvar _array = __webpack_require__(2);\n\n/**\n * Tags a multiline string and return new one without line break characters and following spaces.\n *\n * @param {Array} strings Parts of the entire string without expressions.\n * @param {...String} expressions Expressions converted to strings, which are added to the entire string.\n * @returns {String}\n */\nfunction toSingleLine(strings) {\n  for (var _len = arguments.length, expressions = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n    expressions[_key - 1] = arguments[_key];\n  }\n\n  var result = (0, _array.arrayReduce)(strings, function (previousValue, currentValue, index) {\n\n    var valueWithoutWhiteSpaces = currentValue.replace(/(?:\\r?\\n\\s+)/g, '');\n    var expressionForIndex = expressions[index] ? expressions[index] : '';\n\n    return previousValue + valueWithoutWhiteSpaces + expressionForIndex;\n  }, '');\n\n  return result.trim();\n} /* eslint-disable import/prefer-default-export */\n\n/***/ }),\n/* 43 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports.isFunction = isFunction;\nexports.throttle = throttle;\nexports.throttleAfterHits = throttleAfterHits;\nexports.debounce = debounce;\nexports.pipe = pipe;\nexports.partial = partial;\nexports.curry = curry;\nexports.curryRight = curryRight;\n\nvar _array = __webpack_require__(2);\n\n/**\n * Checks if given variable is function.\n *\n * @param {*} func Variable to check.\n * @returns {Boolean}\n */\nfunction isFunction(func) {\n  return typeof func === 'function';\n}\n\n/**\n * Creates throttle function that enforces a maximum number of times a function (`func`) can be called over time (`wait`).\n *\n * @param {Function} func Function to invoke.\n * @param {Number} wait Delay in miliseconds.\n * @returns {Function}\n */\nfunction throttle(func) {\n  var wait = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 200;\n\n  var lastCalled = 0;\n  var result = {\n    lastCallThrottled: true\n  };\n  var lastTimer = null;\n\n  function _throttle() {\n    var _this = this;\n\n    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    var stamp = Date.now();\n    var needCall = false;\n\n    result.lastCallThrottled = true;\n\n    if (!lastCalled) {\n      lastCalled = stamp;\n      needCall = true;\n    }\n    var remaining = wait - (stamp - lastCalled);\n\n    if (needCall) {\n      result.lastCallThrottled = false;\n      func.apply(this, args);\n    } else {\n      if (lastTimer) {\n        clearTimeout(lastTimer);\n      }\n      lastTimer = setTimeout(function () {\n        result.lastCallThrottled = false;\n        func.apply(_this, args);\n        lastCalled = 0;\n        lastTimer = void 0;\n      }, remaining);\n    }\n\n    return result;\n  }\n\n  return _throttle;\n}\n\n/**\n * Creates throttle function that enforces a maximum number of times a function (`func`) can be called over\n * time (`wait`) after specified hits.\n *\n * @param {Function} func Function to invoke.\n * @param {Number} wait Delay in miliseconds.\n * @param {Number} hits Number of hits after throttling will be applied.\n * @returns {Function}\n */\nfunction throttleAfterHits(func) {\n  var wait = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 200;\n  var hits = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 10;\n\n  var funcThrottle = throttle(func, wait);\n  var remainHits = hits;\n\n  function _clearHits() {\n    remainHits = hits;\n  }\n  function _throttleAfterHits() {\n    for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n      args[_key2] = arguments[_key2];\n    }\n\n    if (remainHits) {\n      remainHits -= 1;\n\n      return func.apply(this, args);\n    }\n\n    return funcThrottle.apply(this, args);\n  }\n  _throttleAfterHits.clearHits = _clearHits;\n\n  return _throttleAfterHits;\n}\n\n/**\n * Creates debounce function that enforces a function (`func`) not be called again until a certain amount of time (`wait`)\n * has passed without it being called.\n *\n * @param {Function} func Function to invoke.\n * @param {Number} wait Delay in milliseconds.\n * @returns {Function}\n */\nfunction debounce(func) {\n  var wait = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 200;\n\n  var lastTimer = null;\n  var result = void 0;\n\n  function _debounce() {\n    var _this2 = this;\n\n    for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n      args[_key3] = arguments[_key3];\n    }\n\n    if (lastTimer) {\n      clearTimeout(lastTimer);\n    }\n    lastTimer = setTimeout(function () {\n      result = func.apply(_this2, args);\n    }, wait);\n\n    return result;\n  }\n\n  return _debounce;\n}\n\n/**\n * Creates the function that returns the result of calling the given functions. Result of the first function is passed to\n * the second as an argument and so on. Only first function in the chain can handle multiple arguments.\n *\n * @param {Function} functions Functions to compose.\n * @returns {Function}\n */\nfunction pipe() {\n  for (var _len4 = arguments.length, functions = Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n    functions[_key4] = arguments[_key4];\n  }\n\n  var firstFunc = functions[0],\n      restFunc = functions.slice(1);\n\n\n  return function _pipe() {\n    for (var _len5 = arguments.length, args = Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {\n      args[_key5] = arguments[_key5];\n    }\n\n    return (0, _array.arrayReduce)(restFunc, function (acc, fn) {\n      return fn(acc);\n    }, firstFunc.apply(this, args));\n  };\n}\n\n/**\n * Creates the function that returns the function with cached arguments.\n *\n * @param {Function} func Function to partialization.\n * @param {Array} params Function arguments to cache.\n * @returns {Function}\n */\nfunction partial(func) {\n  for (var _len6 = arguments.length, params = Array(_len6 > 1 ? _len6 - 1 : 0), _key6 = 1; _key6 < _len6; _key6++) {\n    params[_key6 - 1] = arguments[_key6];\n  }\n\n  return function _partial() {\n    for (var _len7 = arguments.length, restParams = Array(_len7), _key7 = 0; _key7 < _len7; _key7++) {\n      restParams[_key7] = arguments[_key7];\n    }\n\n    return func.apply(this, params.concat(restParams));\n  };\n}\n\n/**\n * Creates the functions that returns the function with cached arguments. If count if passed arguments will be matched\n * to the arguments defined in `func` then function will be invoked.\n * Arguments are added to the stack in direction from the left to the right.\n *\n * @example\n * ```\n * var replace = curry(function(find, replace, string) {\n *   return string.replace(find, replace);\n * });\n *\n * // returns function with bounded first argument\n * var replace = replace('foo')\n *\n * // returns replaced string - all arguments was passed so function was invoked\n * replace('bar', 'Some test with foo...');\n *\n * ```\n *\n * @param {Function} func Function to currying.\n * @returns {Function}\n */\nfunction curry(func) {\n  var argsLength = func.length;\n\n  function given(argsSoFar) {\n    return function _curry() {\n      for (var _len8 = arguments.length, params = Array(_len8), _key8 = 0; _key8 < _len8; _key8++) {\n        params[_key8] = arguments[_key8];\n      }\n\n      var passedArgsSoFar = argsSoFar.concat(params);\n      var result = void 0;\n\n      if (passedArgsSoFar.length >= argsLength) {\n        result = func.apply(this, passedArgsSoFar);\n      } else {\n        result = given(passedArgsSoFar);\n      }\n\n      return result;\n    };\n  }\n\n  return given([]);\n}\n\n/**\n * Creates the functions that returns the function with cached arguments. If count if passed arguments will be matched\n * to the arguments defined in `func` then function will be invoked.\n * Arguments are added to the stack in direction from the right to the left.\n *\n * @example\n * ```\n * var replace = curry(function(find, replace, string) {\n *   return string.replace(find, replace);\n * });\n *\n * // returns function with bounded first argument\n * var replace = replace('Some test with foo...')\n *\n * // returns replaced string - all arguments was passed so function was invoked\n * replace('bar', 'foo');\n *\n * ```\n *\n * @param {Function} func Function to currying.\n * @returns {Function}\n */\nfunction curryRight(func) {\n  var argsLength = func.length;\n\n  function given(argsSoFar) {\n    return function _curry() {\n      for (var _len9 = arguments.length, params = Array(_len9), _key9 = 0; _key9 < _len9; _key9++) {\n        params[_key9] = arguments[_key9];\n      }\n\n      var passedArgsSoFar = argsSoFar.concat(params.reverse());\n      var result = void 0;\n\n      if (passedArgsSoFar.length >= argsLength) {\n        result = func.apply(this, passedArgsSoFar);\n      } else {\n        result = given(passedArgsSoFar);\n      }\n\n      return result;\n    };\n  }\n\n  return given([]);\n}\n\n/***/ }),\n/* 44 */\n/***/ (function(module, exports) {\n\nvar toString = {}.toString;\n\nmodule.exports = function (it) {\n  return toString.call(it).slice(8, -1);\n};\n\n\n/***/ }),\n/* 45 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar isObject = __webpack_require__(9);\nmodule.exports = function (it, TYPE) {\n  if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');\n  return it;\n};\n\n\n/***/ }),\n/* 46 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = __webpack_require__(12)('unscopables');\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) __webpack_require__(29)(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function (key) {\n  ArrayProto[UNSCOPABLES][key] = true;\n};\n\n\n/***/ }),\n/* 47 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _array = __webpack_require__(2);\n\nvar _object = __webpack_require__(1);\n\nvar MIXIN_NAME = 'localHooks';\n\n/**\n * Mixin object to extend objects functionality for local hooks.\n *\n * @type {Object}\n */\nvar localHooks = {\n  /**\n   * Internal hooks storage.\n   */\n  _localHooks: Object.create(null),\n\n  /**\n   * Add hook to the collection.\n   *\n   * @param {String} key Hook name.\n   * @param {Function} callback Hook callback\n   * @returns {Object}\n   */\n  addLocalHook: function addLocalHook(key, callback) {\n    if (!this._localHooks[key]) {\n      this._localHooks[key] = [];\n    }\n    this._localHooks[key].push(callback);\n\n    return this;\n  },\n\n\n  /**\n   * Run hooks.\n   *\n   * @param {String} key Hook name.\n   * @param {*} params\n   */\n  runLocalHooks: function runLocalHooks(key) {\n    var _this = this;\n\n    for (var _len = arguments.length, params = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n      params[_key - 1] = arguments[_key];\n    }\n\n    if (this._localHooks[key]) {\n      (0, _array.arrayEach)(this._localHooks[key], function (callback) {\n        return callback.apply(_this, params);\n      });\n    }\n  },\n\n\n  /**\n   * Clear all added hooks.\n   *\n   * @returns {Object}\n   */\n  clearLocalHooks: function clearLocalHooks() {\n    this._localHooks = {};\n\n    return this;\n  }\n};\n\n(0, _object.defineGetter)(localHooks, 'MIXIN_NAME', MIXIN_NAME, {\n  writable: false,\n  enumerable: false\n});\n\nexports.default = localHooks;\n\n/***/ }),\n/* 48 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports.createId = createId;\nexports.createDefaultCustomBorder = createDefaultCustomBorder;\nexports.createSingleEmptyBorder = createSingleEmptyBorder;\nexports.createDefaultHtBorder = createDefaultHtBorder;\nexports.createEmptyBorders = createEmptyBorders;\nexports.extendDefaultBorder = extendDefaultBorder;\nexports.checkSelectionBorders = checkSelectionBorders;\nexports.markSelected = markSelected;\n\nvar _object = __webpack_require__(1);\n\nvar _array = __webpack_require__(2);\n\n/**\n * Create separated id for borders for each cell.\n *\n * @param {Number} row Visual row index.\n * @param {Number} col Visual column index.\n * @returns {String}\n */\nfunction createId(row, col) {\n  return 'border_row' + row + 'col' + col;\n}\n\n/**\n * Create default single border for each position (top/right/bottom/left).\n *\n * @returns {Object} `{{width: number, color: string}}`\n */\nfunction createDefaultCustomBorder() {\n  return {\n    width: 1,\n    color: '#000'\n  };\n}\n\n/**\n * Create default object for empty border.\n *\n * @returns {Object} `{{hide: boolean}}`\n */\nfunction createSingleEmptyBorder() {\n  return { hide: true };\n}\n\n/**\n * Create default Handsontable border object.\n *\n * @returns {Object} `{{width: number, color: string, cornerVisible: boolean}}`\n */\nfunction createDefaultHtBorder() {\n  return {\n    width: 1,\n    color: '#000',\n    cornerVisible: false\n  };\n}\n\n/**\n * Prepare empty border for each cell with all custom borders hidden.\n *\n * @param {Number} row Visual row index.\n * @param {Number} col Visual column index.\n * @returns {Object} `{{id: *, border: *, row: *, col: *, top: {hide: boolean}, right: {hide: boolean}, bottom: {hide: boolean}, left: {hide: boolean}}}`\n */\nfunction createEmptyBorders(row, col) {\n  return {\n    id: createId(row, col),\n    border: createDefaultHtBorder(),\n    row: row,\n    col: col,\n    top: createSingleEmptyBorder(),\n    right: createSingleEmptyBorder(),\n    bottom: createSingleEmptyBorder(),\n    left: createSingleEmptyBorder()\n  };\n}\n\nfunction extendDefaultBorder(defaultBorder, customBorder) {\n  if ((0, _object.hasOwnProperty)(customBorder, 'border')) {\n    defaultBorder.border = customBorder.border;\n  }\n\n  if ((0, _object.hasOwnProperty)(customBorder, 'top')) {\n    if (customBorder.top) {\n      if (!(0, _object.isObject)(customBorder.top)) {\n        customBorder.top = createDefaultCustomBorder();\n      }\n\n      defaultBorder.top = customBorder.top;\n    } else {\n      customBorder.top = createSingleEmptyBorder();\n      defaultBorder.top = customBorder.top;\n    }\n  }\n\n  if ((0, _object.hasOwnProperty)(customBorder, 'right')) {\n    if (customBorder.right) {\n      if (!(0, _object.isObject)(customBorder.right)) {\n        customBorder.right = createDefaultCustomBorder();\n      }\n\n      defaultBorder.right = customBorder.right;\n    } else {\n      customBorder.right = createSingleEmptyBorder();\n      defaultBorder.right = customBorder.right;\n    }\n  }\n\n  if ((0, _object.hasOwnProperty)(customBorder, 'bottom')) {\n    if (customBorder.bottom) {\n      if (!(0, _object.isObject)(customBorder.bottom)) {\n        customBorder.bottom = createDefaultCustomBorder();\n      }\n\n      defaultBorder.bottom = customBorder.bottom;\n    } else {\n      customBorder.bottom = createSingleEmptyBorder();\n      defaultBorder.bottom = customBorder.bottom;\n    }\n  }\n\n  if ((0, _object.hasOwnProperty)(customBorder, 'left')) {\n    if (customBorder.left) {\n      if (!(0, _object.isObject)(customBorder.left)) {\n        customBorder.left = createDefaultCustomBorder();\n      }\n\n      defaultBorder.left = customBorder.left;\n    } else {\n      customBorder.left = createSingleEmptyBorder();\n      defaultBorder.left = customBorder.left;\n    }\n  }\n\n  return defaultBorder;\n}\n\n/**\n * Check if selection has border.\n *\n * @param hot\n * @param direction\n */\nfunction checkSelectionBorders(hot, direction) {\n  var atLeastOneHasBorder = false;\n\n  (0, _array.arrayEach)(hot.getSelectedRange(), function (range) {\n    range.forAll(function (r, c) {\n      var metaBorders = hot.getCellMeta(r, c).borders;\n\n      if (metaBorders) {\n        if (direction) {\n          if (!(0, _object.hasOwnProperty)(metaBorders[direction], 'hide') || metaBorders[direction].hide === false) {\n            atLeastOneHasBorder = true;\n            return false; // breaks forAll\n          }\n        } else {\n          atLeastOneHasBorder = true;\n          return false; // breaks forAll\n        }\n      }\n    });\n  });\n\n  return atLeastOneHasBorder;\n}\n\n/**\n * Mark label in contextMenu as selected.\n *\n * @param label\n * @returns {string}\n */\nfunction markSelected(label) {\n  return '<span class=\"selected\">' + String.fromCharCode(10003) + '</span>' + label; // workaround for https://github.com/handsontable/handsontable/issues/1946\n}\n\n/***/ }),\n/* 49 */\n/***/ (function(module, exports) {\n\nmodule.exports = false;\n\n\n/***/ }),\n/* 50 */\n/***/ (function(module, exports) {\n\nvar id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n  return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n\n\n/***/ }),\n/* 51 */\n/***/ (function(module, exports) {\n\nmodule.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/* 52 */\n/***/ (function(module, exports) {\n\nmodule.exports = {};\n\n\n/***/ }),\n/* 53 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar def = __webpack_require__(20).f;\nvar has = __webpack_require__(27);\nvar TAG = __webpack_require__(12)('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n  if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n\n\n/***/ }),\n/* 54 */\n/***/ (function(module, exports) {\n\nexports.f = {}.propertyIsEnumerable;\n\n\n/***/ }),\n/* 55 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports.EditorState = undefined;\n\nvar _src = __webpack_require__(4);\n\nvar _mixed = __webpack_require__(11);\n\nvar EditorState = exports.EditorState = {\n  VIRGIN: 'STATE_VIRGIN', // before editing\n  EDITING: 'STATE_EDITING',\n  WAITING: 'STATE_WAITING', // waiting for async validation\n  FINISHED: 'STATE_FINISHED'\n};\n\n/**\n * @util\n * @class BaseEditor\n */\nfunction BaseEditor(instance) {\n  this.instance = instance;\n  this.state = EditorState.VIRGIN;\n\n  this._opened = false;\n  this._fullEditMode = false;\n  this._closeCallback = null;\n\n  this.init();\n}\n\nBaseEditor.prototype._fireCallbacks = function (result) {\n  if (this._closeCallback) {\n    this._closeCallback(result);\n    this._closeCallback = null;\n  }\n};\n\nBaseEditor.prototype.init = function () {};\n\nBaseEditor.prototype.getValue = function () {\n  throw Error('Editor getValue() method unimplemented');\n};\n\nBaseEditor.prototype.setValue = function () {\n  throw Error('Editor setValue() method unimplemented');\n};\n\nBaseEditor.prototype.open = function () {\n  throw Error('Editor open() method unimplemented');\n};\n\nBaseEditor.prototype.close = function () {\n  throw Error('Editor close() method unimplemented');\n};\n\nBaseEditor.prototype.prepare = function (row, col, prop, td, originalValue, cellProperties) {\n  this.TD = td;\n  this.row = row;\n  this.col = col;\n  this.prop = prop;\n  this.originalValue = originalValue;\n  this.cellProperties = cellProperties;\n  this.state = EditorState.VIRGIN;\n};\n\nBaseEditor.prototype.extend = function () {\n  var baseClass = this.constructor;\n\n  function Editor() {\n    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    baseClass.apply(this, args);\n  }\n\n  function inherit(Child, Parent) {\n    function Bridge() {}\n    Bridge.prototype = Parent.prototype;\n    Child.prototype = new Bridge();\n    Child.prototype.constructor = Child;\n\n    return Child;\n  }\n\n  return inherit(Editor, baseClass);\n};\n\nBaseEditor.prototype.saveValue = function (value, ctrlDown) {\n  var selection = void 0;\n  var tmp = void 0;\n\n  // if ctrl+enter and multiple cells selected, behave like Excel (finish editing and apply to all cells)\n  if (ctrlDown) {\n    selection = this.instance.getSelectedLast();\n\n    if (selection[0] > selection[2]) {\n      tmp = selection[0];\n      selection[0] = selection[2];\n      selection[2] = tmp;\n    }\n    if (selection[1] > selection[3]) {\n      tmp = selection[1];\n      selection[1] = selection[3];\n      selection[3] = tmp;\n    }\n  } else {\n    selection = [this.row, this.col, null, null];\n  }\n\n  this.instance.populateFromArray(selection[0], selection[1], value, selection[2], selection[3], 'edit');\n};\n\nBaseEditor.prototype.beginEditing = function (newInitialValue, event) {\n  if (this.state !== EditorState.VIRGIN) {\n    return;\n  }\n  this.instance.view.scrollViewport(new _src.CellCoords(this.row, this.col));\n  this.state = EditorState.EDITING;\n\n  // Set the editor value only in the full edit mode. In other mode the focusable element has to be empty,\n  // otherwise IME (editor for Asia users) doesn't work.\n  if (this.isInFullEditMode()) {\n    var stringifiedInitialValue = typeof newInitialValue === 'string' ? newInitialValue : (0, _mixed.stringify)(this.originalValue);\n\n    this.setValue(stringifiedInitialValue);\n  }\n\n  this.open(event);\n  this._opened = true;\n  this.focus();\n\n  // only rerender the selections (FillHandle should disappear when beginediting is triggered)\n  this.instance.view.render();\n\n  this.instance.runHooks('afterBeginEditing', this.row, this.col);\n};\n\nBaseEditor.prototype.finishEditing = function (restoreOriginalValue, ctrlDown, callback) {\n  var _this = this;\n  var val = void 0;\n\n  if (callback) {\n    var previousCloseCallback = this._closeCallback;\n\n    this._closeCallback = function (result) {\n      if (previousCloseCallback) {\n        previousCloseCallback(result);\n      }\n\n      callback(result);\n      _this.instance.view.render();\n    };\n  }\n\n  if (this.isWaiting()) {\n    return;\n  }\n\n  if (this.state === EditorState.VIRGIN) {\n    this.instance._registerTimeout(function () {\n      _this._fireCallbacks(true);\n    });\n\n    return;\n  }\n\n  if (this.state === EditorState.EDITING) {\n    if (restoreOriginalValue) {\n      this.cancelChanges();\n      this.instance.view.render();\n\n      return;\n    }\n\n    var value = this.getValue();\n\n    if (this.instance.getSettings().trimWhitespace) {\n      // We trim only string values\n      val = [[typeof value === 'string' ? String.prototype.trim.call(value || '') : value]];\n    } else {\n      val = [[value]];\n    }\n\n    this.state = EditorState.WAITING;\n    this.saveValue(val, ctrlDown);\n\n    if (this.instance.getCellValidator(this.cellProperties)) {\n      this.instance.addHookOnce('postAfterValidate', function (result) {\n        _this.state = EditorState.FINISHED;\n        _this.discardEditor(result);\n      });\n    } else {\n      this.state = EditorState.FINISHED;\n      this.discardEditor(true);\n    }\n  }\n};\n\nBaseEditor.prototype.cancelChanges = function () {\n  this.state = EditorState.FINISHED;\n  this.discardEditor();\n};\n\nBaseEditor.prototype.discardEditor = function (result) {\n  if (this.state !== EditorState.FINISHED) {\n    return;\n  }\n\n  // validator was defined and failed\n  if (result === false && this.cellProperties.allowInvalid !== true) {\n    this.instance.selectCell(this.row, this.col);\n    this.focus();\n    this.state = EditorState.EDITING;\n    this._fireCallbacks(false);\n  } else {\n    this.close();\n    this._opened = false;\n    this._fullEditMode = false;\n    this.state = EditorState.VIRGIN;\n    this._fireCallbacks(true);\n  }\n};\n\n/**\n * Switch editor into full edit mode. In this state navigation keys don't close editor. This mode is activated\n * automatically after hit ENTER or F2 key on the cell or while editing cell press F2 key.\n */\nBaseEditor.prototype.enableFullEditMode = function () {\n  this._fullEditMode = true;\n};\n\n/**\n * Checks if editor is in full edit mode.\n *\n * @returns {Boolean}\n */\nBaseEditor.prototype.isInFullEditMode = function () {\n  return this._fullEditMode;\n};\n\nBaseEditor.prototype.isOpened = function () {\n  return this._opened;\n};\n\nBaseEditor.prototype.isWaiting = function () {\n  return this.state === EditorState.WAITING;\n};\n\nBaseEditor.prototype.checkEditorSection = function () {\n  var totalRows = this.instance.countRows();\n  var section = '';\n\n  if (this.row < this.instance.getSettings().fixedRowsTop) {\n    if (this.col < this.instance.getSettings().fixedColumnsLeft) {\n      section = 'top-left-corner';\n    } else {\n      section = 'top';\n    }\n  } else if (this.instance.getSettings().fixedRowsBottom && this.row >= totalRows - this.instance.getSettings().fixedRowsBottom) {\n    if (this.col < this.instance.getSettings().fixedColumnsLeft) {\n      section = 'bottom-left-corner';\n    } else {\n      section = 'bottom';\n    }\n  } else if (this.col < this.instance.getSettings().fixedColumnsLeft) {\n    section = 'left';\n  }\n\n  return section;\n};\n\nexports.default = BaseEditor;\n\n/***/ }),\n/* 56 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * CellCoords holds cell coordinates (row, column) and few method to validate them and retrieve as an array or an object.\n *\n * @util\n */\nvar CellCoords = function () {\n  function CellCoords(row, column) {\n    _classCallCheck(this, CellCoords);\n\n    /**\n     * Row index.\n     *\n     * @type {Number}\n     */\n    this.row = null;\n    /**\n     * Column index.\n     *\n     * @type {Number}\n     */\n    this.col = null;\n\n    if (typeof row !== 'undefined' && typeof column !== 'undefined') {\n      this.row = row;\n      this.col = column;\n    }\n  }\n\n  /**\n   * Checks if given set of coordinates is valid in context of a given Walkontable instance.\n   *\n   * @param {Walkontable} wot A Walkontable instance.\n   * @returns {Boolean}\n   */\n\n\n  _createClass(CellCoords, [{\n    key: 'isValid',\n    value: function isValid(wot) {\n      // is it a valid cell index (0 or higher)\n      if (this.row < 0 || this.col < 0) {\n        return false;\n      }\n      // is selection within total rows and columns\n      if (this.row >= wot.getSetting('totalRows') || this.col >= wot.getSetting('totalColumns')) {\n        return false;\n      }\n\n      return true;\n    }\n\n    /**\n     * Checks if this cell coordinates are the same as cell coordinates given as an argument.\n     *\n     * @param {CellCoords} cellCoords Cell coordinates to equal.\n     * @returns {Boolean}\n     */\n\n  }, {\n    key: 'isEqual',\n    value: function isEqual(cellCoords) {\n      if (cellCoords === this) {\n        return true;\n      }\n\n      return this.row === cellCoords.row && this.col === cellCoords.col;\n    }\n\n    /**\n     * Checks if tested coordinates are positioned in south-east from this cell coordinates.\n     *\n     * @param {Object} testedCoords Cell coordinates to check.\n     * @returns {Boolean}\n     */\n\n  }, {\n    key: 'isSouthEastOf',\n    value: function isSouthEastOf(testedCoords) {\n      return this.row >= testedCoords.row && this.col >= testedCoords.col;\n    }\n\n    /**\n     * Checks if tested coordinates are positioned in north-east from this cell coordinates.\n     *\n     * @param {Object} testedCoords Cell coordinates to check.\n     * @returns {Boolean}\n     */\n\n  }, {\n    key: 'isNorthWestOf',\n    value: function isNorthWestOf(testedCoords) {\n      return this.row <= testedCoords.row && this.col <= testedCoords.col;\n    }\n\n    /**\n     * Checks if tested coordinates are positioned in south-west from this cell coordinates.\n     *\n     * @param {Object} testedCoords Cell coordinates to check.\n     * @returns {Boolean}\n     */\n\n  }, {\n    key: 'isSouthWestOf',\n    value: function isSouthWestOf(testedCoords) {\n      return this.row >= testedCoords.row && this.col <= testedCoords.col;\n    }\n\n    /**\n     * Checks if tested coordinates are positioned in north-east from this cell coordinates.\n     *\n     * @param {Object} testedCoords Cell coordinates to check.\n     * @returns {Boolean}\n     */\n\n  }, {\n    key: 'isNorthEastOf',\n    value: function isNorthEastOf(testedCoords) {\n      return this.row <= testedCoords.row && this.col >= testedCoords.col;\n    }\n\n    /**\n     * Converts CellCoords to literal object with `row` and `col` properties.\n     *\n     * @return {Object} Returns a literal object with `row` and `col` properties.\n     */\n\n  }, {\n    key: 'toObject',\n    value: function toObject() {\n      return {\n        row: this.row,\n        col: this.col\n      };\n    }\n  }]);\n\n  return CellCoords;\n}();\n\nexports.default = CellCoords;\n\n/***/ }),\n/* 57 */\n/***/ (function(module, exports) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE_57__;\n\n/***/ }),\n/* 58 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports.log = log;\nexports.warn = warn;\nexports.info = info;\nexports.error = error;\n\nvar _mixed = __webpack_require__(11);\n\n/**\n * Logs message to the console if the `console` object is exposed.\n *\n * @param {...*} args Values which will be logged.\n */\nfunction log() {\n  if ((0, _mixed.isDefined)(console)) {\n    var _console;\n\n    (_console = console).log.apply(_console, arguments);\n  }\n}\n\n/**\n * Logs warn to the console if the `console` object is exposed.\n *\n * @param {...*} args Values which will be logged.\n */\n/* eslint-disable no-console */\n/* eslint-disable no-restricted-globals */\n\n/**\n * \"In Internet Explorer 9 (and 8), the console object is only exposed when the developer tools are opened\n * for a particular tab.\"\n *\n * Source: https://stackoverflow.com/a/5473193\n */\n\nfunction warn() {\n  if ((0, _mixed.isDefined)(console)) {\n    var _console2;\n\n    (_console2 = console).warn.apply(_console2, arguments);\n  }\n}\n\n/**\n * Logs info to the console if the `console` object is exposed.\n *\n * @param {...*} args Values which will be logged.\n */\nfunction info() {\n  if ((0, _mixed.isDefined)(console)) {\n    var _console3;\n\n    (_console3 = console).info.apply(_console3, arguments);\n  }\n}\n\n/**\n * Logs error to the console if the `console` object is exposed.\n *\n * @param {...*} args Values which will be logged.\n */\nfunction error() {\n  if ((0, _mixed.isDefined)(console)) {\n    var _console4;\n\n    (_console4 = console).error.apply(_console4, arguments);\n  }\n}\n\n/***/ }),\n/* 59 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _element = __webpack_require__(0);\n\nvar _autoResize = __webpack_require__(234);\n\nvar _autoResize2 = _interopRequireDefault(_autoResize);\n\nvar _baseEditor = __webpack_require__(55);\n\nvar _baseEditor2 = _interopRequireDefault(_baseEditor);\n\nvar _eventManager = __webpack_require__(5);\n\nvar _eventManager2 = _interopRequireDefault(_eventManager);\n\nvar _unicode = __webpack_require__(21);\n\nvar _event = __webpack_require__(13);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar TextEditor = _baseEditor2.default.prototype.extend();\n\n/**\n * @private\n * @editor TextEditor\n * @class TextEditor\n * @dependencies autoResize\n */\nTextEditor.prototype.init = function () {\n  var that = this;\n  this.createElements();\n  this.eventManager = new _eventManager2.default(this);\n  this.bindEvents();\n  this.autoResize = (0, _autoResize2.default)();\n  this.holderZIndex = -1;\n\n  this.instance.addHook('afterDestroy', function () {\n    that.destroy();\n  });\n};\n\nTextEditor.prototype.prepare = function (row, col, prop, td, originalValue, cellProperties) {\n  var _this = this;\n\n  var previousState = this.state;\n\n  for (var _len = arguments.length, args = Array(_len > 6 ? _len - 6 : 0), _key = 6; _key < _len; _key++) {\n    args[_key - 6] = arguments[_key];\n  }\n\n  _baseEditor2.default.prototype.prepare.apply(this, [row, col, prop, td, originalValue, cellProperties].concat(args));\n\n  if (!cellProperties.readOnly) {\n    this.refreshDimensions(true);\n\n    var allowInvalid = cellProperties.allowInvalid,\n        fragmentSelection = cellProperties.fragmentSelection;\n\n\n    if (allowInvalid) {\n      this.TEXTAREA.value = ''; // Remove an empty space from texarea (added by copyPaste plugin to make copy/paste functionality work with IME)\n    }\n\n    if (previousState !== _baseEditor.EditorState.FINISHED) {\n      this.hideEditableElement();\n    }\n\n    // @TODO: The fragmentSelection functionality is conflicted with IME. For this feature refocus has to\n    // be disabled (to make IME working).\n    var restoreFocus = !fragmentSelection;\n\n    if (restoreFocus) {\n      this.instance._registerImmediate(function () {\n        return _this.focus();\n      });\n    }\n  }\n};\n\nTextEditor.prototype.hideEditableElement = function () {\n  this.textareaParentStyle.top = '-9999px';\n  this.textareaParentStyle.left = '-9999px';\n  this.textareaParentStyle.zIndex = '-1';\n  this.textareaParentStyle.position = 'fixed';\n};\n\nTextEditor.prototype.showEditableElement = function () {\n  this.textareaParentStyle.zIndex = this.holderZIndex >= 0 ? this.holderZIndex : '';\n  this.textareaParentStyle.position = '';\n};\n\nTextEditor.prototype.getValue = function () {\n  return this.TEXTAREA.value;\n};\n\nTextEditor.prototype.setValue = function (newValue) {\n  this.TEXTAREA.value = newValue;\n};\n\nTextEditor.prototype.beginEditing = function () {\n  if (this.state !== _baseEditor.EditorState.VIRGIN) {\n    return;\n  }\n\n  this.TEXTAREA.value = ''; // Remove an empty space from texarea (added by copyPaste plugin to make copy/paste functionality work with IME).\n\n  for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n    args[_key2] = arguments[_key2];\n  }\n\n  _baseEditor2.default.prototype.beginEditing.apply(this, args);\n};\n\nvar onBeforeKeyDown = function onBeforeKeyDown(event) {\n  var instance = this;\n  var that = instance.getActiveEditor();\n\n  // catch CTRL but not right ALT (which in some systems triggers ALT+CTRL)\n  var ctrlDown = (event.ctrlKey || event.metaKey) && !event.altKey;\n\n  // Process only events that have been fired in the editor\n  if (event.target !== that.TEXTAREA || (0, _event.isImmediatePropagationStopped)(event)) {\n    return;\n  }\n\n  if (event.keyCode === 17 || event.keyCode === 224 || event.keyCode === 91 || event.keyCode === 93) {\n    // when CTRL or its equivalent is pressed and cell is edited, don't prepare selectable text in textarea\n    (0, _event.stopImmediatePropagation)(event);\n    return;\n  }\n\n  switch (event.keyCode) {\n    case _unicode.KEY_CODES.ARROW_RIGHT:\n      if (that.isInFullEditMode()) {\n        if (!that.isWaiting() && !that.allowKeyEventPropagation || !that.isWaiting() && that.allowKeyEventPropagation && !that.allowKeyEventPropagation(event.keyCode)) {\n          (0, _event.stopImmediatePropagation)(event);\n        }\n      }\n      break;\n    case _unicode.KEY_CODES.ARROW_LEFT:\n      if (that.isInFullEditMode()) {\n        if (!that.isWaiting() && !that.allowKeyEventPropagation || !that.isWaiting() && that.allowKeyEventPropagation && !that.allowKeyEventPropagation(event.keyCode)) {\n          (0, _event.stopImmediatePropagation)(event);\n        }\n      }\n      break;\n    case _unicode.KEY_CODES.ARROW_UP:\n    case _unicode.KEY_CODES.ARROW_DOWN:\n      if (that.isInFullEditMode()) {\n        if (!that.isWaiting() && !that.allowKeyEventPropagation || !that.isWaiting() && that.allowKeyEventPropagation && !that.allowKeyEventPropagation(event.keyCode)) {\n          (0, _event.stopImmediatePropagation)(event);\n        }\n      }\n      break;\n\n    case _unicode.KEY_CODES.ENTER:\n      {\n        var isMultipleSelection = this.selection.isMultiple();\n\n        if (ctrlDown && !isMultipleSelection || event.altKey) {\n          // if ctrl+enter or alt+enter, add new line\n          if (that.isOpened()) {\n            var caretPosition = (0, _element.getCaretPosition)(that.TEXTAREA);\n            var value = that.getValue();\n            var newValue = value.slice(0, caretPosition) + '\\n' + value.slice(caretPosition);\n\n            that.setValue(newValue);\n\n            (0, _element.setCaretPosition)(that.TEXTAREA, caretPosition + 1);\n          } else {\n            that.beginEditing(that.originalValue + '\\n');\n          }\n          (0, _event.stopImmediatePropagation)(event);\n        }\n        event.preventDefault(); // don't add newline to field\n        break;\n      }\n    case _unicode.KEY_CODES.A:\n    case _unicode.KEY_CODES.X:\n    case _unicode.KEY_CODES.C:\n    case _unicode.KEY_CODES.V:\n      if (ctrlDown) {\n        (0, _event.stopImmediatePropagation)(event); // CTRL+A, CTRL+C, CTRL+V, CTRL+X should only work locally when cell is edited (not in table context)\n      }\n      break;\n\n    case _unicode.KEY_CODES.BACKSPACE:\n    case _unicode.KEY_CODES.DELETE:\n    case _unicode.KEY_CODES.HOME:\n    case _unicode.KEY_CODES.END:\n      (0, _event.stopImmediatePropagation)(event); // backspace, delete, home, end should only work locally when cell is edited (not in table context)\n      break;\n    default:\n      break;\n  }\n\n  if ([_unicode.KEY_CODES.ARROW_UP, _unicode.KEY_CODES.ARROW_RIGHT, _unicode.KEY_CODES.ARROW_DOWN, _unicode.KEY_CODES.ARROW_LEFT].indexOf(event.keyCode) === -1) {\n    that.autoResize.resize(String.fromCharCode(event.keyCode));\n  }\n};\n\nTextEditor.prototype.open = function () {\n  this.refreshDimensions(); // need it instantly, to prevent https://github.com/handsontable/handsontable/issues/348\n  this.showEditableElement();\n\n  this.instance.addHook('beforeKeyDown', onBeforeKeyDown);\n};\n\nTextEditor.prototype.close = function () {\n  this.autoResize.unObserve();\n\n  if (document.activeElement === this.TEXTAREA) {\n    this.instance.listen(); // don't refocus the table if user focused some cell outside of HT on purpose\n  }\n\n  this.hideEditableElement();\n  this.instance.removeHook('beforeKeyDown', onBeforeKeyDown);\n};\n\nTextEditor.prototype.focus = function () {\n  // For IME editor textarea element must be focused using \".select\" method. Using \".focus\" browser automatically scroll into\n  // the focused element which is undesire effect.\n  this.TEXTAREA.select();\n  (0, _element.setCaretPosition)(this.TEXTAREA, this.TEXTAREA.value.length);\n};\n\nTextEditor.prototype.createElements = function () {\n  this.TEXTAREA = document.createElement('TEXTAREA');\n  this.TEXTAREA.tabIndex = -1;\n\n  (0, _element.addClass)(this.TEXTAREA, 'handsontableInput');\n\n  this.textareaStyle = this.TEXTAREA.style;\n  this.textareaStyle.width = 0;\n  this.textareaStyle.height = 0;\n\n  this.TEXTAREA_PARENT = document.createElement('DIV');\n  (0, _element.addClass)(this.TEXTAREA_PARENT, 'handsontableInputHolder');\n\n  this.textareaParentStyle = this.TEXTAREA_PARENT.style;\n  this.textareaParentStyle.zIndex = '-1';\n\n  this.TEXTAREA_PARENT.appendChild(this.TEXTAREA);\n\n  this.instance.rootElement.appendChild(this.TEXTAREA_PARENT);\n};\n\nTextEditor.prototype.getEditedCell = function () {\n  var editorSection = this.checkEditorSection();\n  var editedCell = void 0;\n\n  switch (editorSection) {\n    case 'top':\n      editedCell = this.instance.view.wt.wtOverlays.topOverlay.clone.wtTable.getCell({\n        row: this.row,\n        col: this.col\n      });\n      this.holderZIndex = 101;\n      break;\n    case 'top-left-corner':\n      editedCell = this.instance.view.wt.wtOverlays.topLeftCornerOverlay.clone.wtTable.getCell({\n        row: this.row,\n        col: this.col\n      });\n      this.holderZIndex = 103;\n      break;\n    case 'bottom-left-corner':\n      editedCell = this.instance.view.wt.wtOverlays.bottomLeftCornerOverlay.clone.wtTable.getCell({\n        row: this.row,\n        col: this.col\n      });\n      this.holderZIndex = 103;\n      break;\n    case 'left':\n      editedCell = this.instance.view.wt.wtOverlays.leftOverlay.clone.wtTable.getCell({\n        row: this.row,\n        col: this.col\n      });\n      this.holderZIndex = 102;\n      break;\n    case 'bottom':\n      editedCell = this.instance.view.wt.wtOverlays.bottomOverlay.clone.wtTable.getCell({\n        row: this.row,\n        col: this.col\n      });\n      this.holderZIndex = 102;\n      break;\n    default:\n      editedCell = this.instance.getCell(this.row, this.col);\n      this.holderZIndex = -1;\n      break;\n  }\n\n  return editedCell !== -1 && editedCell !== -2 ? editedCell : void 0;\n};\n\nTextEditor.prototype.refreshValue = function () {\n  var physicalRow = this.instance.toPhysicalRow(this.row);\n  var sourceData = this.instance.getSourceDataAtCell(physicalRow, this.col);\n  this.originalValue = sourceData;\n\n  this.setValue(sourceData);\n  this.refreshDimensions();\n};\n\nTextEditor.prototype.refreshDimensions = function () {\n  var force = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n  if (this.state !== _baseEditor.EditorState.EDITING && !force) {\n    return;\n  }\n  this.TD = this.getEditedCell();\n\n  // TD is outside of the viewport.\n  if (!this.TD) {\n    if (!force) {\n      this.close(true);\n    }\n\n    return;\n  }\n\n  var currentOffset = (0, _element.offset)(this.TD);\n  var containerOffset = (0, _element.offset)(this.instance.rootElement);\n  var scrollableContainer = this.instance.view.wt.wtOverlays.topOverlay.mainTableScrollableElement;\n  var totalRowsCount = this.instance.countRows();\n  var containerScrollTop = scrollableContainer !== window ? scrollableContainer.scrollTop : 0;\n  var containerScrollLeft = scrollableContainer !== window ? scrollableContainer.scrollLeft : 0;\n\n  var editorSection = this.checkEditorSection();\n\n  var scrollTop = ['', 'left'].includes(editorSection) ? containerScrollTop : 0;\n  var scrollLeft = ['', 'top', 'bottom'].includes(editorSection) ? containerScrollLeft : 0;\n\n  // If colHeaders is disabled, cells in the first row have border-top\n  var editTopModifier = currentOffset.top === containerOffset.top ? 0 : 1;\n\n  var settings = this.instance.getSettings();\n  var colHeadersCount = this.instance.hasColHeaders();\n  var backgroundColor = this.TD.style.backgroundColor;\n\n  var editTop = currentOffset.top - containerOffset.top - editTopModifier - scrollTop;\n  var editLeft = currentOffset.left - containerOffset.left - 1 - scrollLeft;\n  var cssTransformOffset = void 0;\n\n  // TODO: Refactor this to the new instance.getCell method (from #ply-59), after 0.12.1 is released\n  switch (editorSection) {\n    case 'top':\n      cssTransformOffset = (0, _element.getCssTransform)(this.instance.view.wt.wtOverlays.topOverlay.clone.wtTable.holder.parentNode);\n      break;\n    case 'left':\n      cssTransformOffset = (0, _element.getCssTransform)(this.instance.view.wt.wtOverlays.leftOverlay.clone.wtTable.holder.parentNode);\n      break;\n    case 'top-left-corner':\n      cssTransformOffset = (0, _element.getCssTransform)(this.instance.view.wt.wtOverlays.topLeftCornerOverlay.clone.wtTable.holder.parentNode);\n      break;\n    case 'bottom-left-corner':\n      cssTransformOffset = (0, _element.getCssTransform)(this.instance.view.wt.wtOverlays.bottomLeftCornerOverlay.clone.wtTable.holder.parentNode);\n      break;\n    case 'bottom':\n      cssTransformOffset = (0, _element.getCssTransform)(this.instance.view.wt.wtOverlays.bottomOverlay.clone.wtTable.holder.parentNode);\n      break;\n    default:\n      break;\n  }\n\n  if (colHeadersCount && this.instance.getSelectedLast()[0] === 0 || settings.fixedRowsBottom && this.instance.getSelectedLast()[0] === totalRowsCount - settings.fixedRowsBottom) {\n    editTop += 1;\n  }\n\n  if (this.instance.getSelectedLast()[1] === 0) {\n    editLeft += 1;\n  }\n\n  if (cssTransformOffset && cssTransformOffset !== -1) {\n    this.textareaParentStyle[cssTransformOffset[0]] = cssTransformOffset[1];\n  } else {\n    (0, _element.resetCssTransform)(this.TEXTAREA_PARENT);\n  }\n\n  this.textareaParentStyle.top = editTop + 'px';\n  this.textareaParentStyle.left = editLeft + 'px';\n  this.showEditableElement();\n\n  var firstRowOffset = this.instance.view.wt.wtViewport.rowsRenderCalculator.startPosition;\n  var firstColumnOffset = this.instance.view.wt.wtViewport.columnsRenderCalculator.startPosition;\n  var horizontalScrollPosition = this.instance.view.wt.wtOverlays.leftOverlay.getScrollPosition();\n  var verticalScrollPosition = this.instance.view.wt.wtOverlays.topOverlay.getScrollPosition();\n  var scrollbarWidth = (0, _element.getScrollbarWidth)();\n\n  var cellTopOffset = this.TD.offsetTop + firstRowOffset - verticalScrollPosition;\n  var cellLeftOffset = this.TD.offsetLeft + firstColumnOffset - horizontalScrollPosition;\n\n  var width = (0, _element.innerWidth)(this.TD) - 8;\n  var actualVerticalScrollbarWidth = (0, _element.hasVerticalScrollbar)(scrollableContainer) ? scrollbarWidth : 0;\n  var actualHorizontalScrollbarWidth = (0, _element.hasHorizontalScrollbar)(scrollableContainer) ? scrollbarWidth : 0;\n  var maxWidth = this.instance.view.maximumVisibleElementWidth(cellLeftOffset) - 9 - actualVerticalScrollbarWidth;\n  var height = this.TD.scrollHeight + 1;\n  var maxHeight = Math.max(this.instance.view.maximumVisibleElementHeight(cellTopOffset) - actualHorizontalScrollbarWidth, 23);\n\n  var cellComputedStyle = (0, _element.getComputedStyle)(this.TD);\n\n  this.TEXTAREA.style.fontSize = cellComputedStyle.fontSize;\n  this.TEXTAREA.style.fontFamily = cellComputedStyle.fontFamily;\n  this.TEXTAREA.style.backgroundColor = backgroundColor || (0, _element.getComputedStyle)(this.TEXTAREA).backgroundColor;\n\n  this.autoResize.init(this.TEXTAREA, {\n    minHeight: Math.min(height, maxHeight),\n    maxHeight: maxHeight, // TEXTAREA should never be wider than visible part of the viewport (should not cover the scrollbar)\n    minWidth: Math.min(width, maxWidth),\n    maxWidth: maxWidth // TEXTAREA should never be wider than visible part of the viewport (should not cover the scrollbar)\n  }, true);\n};\n\nTextEditor.prototype.bindEvents = function () {\n  var editor = this;\n\n  this.eventManager.addEventListener(this.TEXTAREA, 'cut', function (event) {\n    (0, _event.stopPropagation)(event);\n  });\n  this.eventManager.addEventListener(this.TEXTAREA, 'paste', function (event) {\n    (0, _event.stopPropagation)(event);\n  });\n\n  this.instance.addHook('afterScrollHorizontally', function () {\n    editor.refreshDimensions();\n  });\n\n  this.instance.addHook('afterScrollVertically', function () {\n    editor.refreshDimensions();\n  });\n\n  this.instance.addHook('afterColumnResize', function () {\n    editor.refreshDimensions();\n    editor.focus();\n  });\n\n  this.instance.addHook('afterRowResize', function () {\n    editor.refreshDimensions();\n    editor.focus();\n  });\n\n  this.instance.addHook('afterDestroy', function () {\n    editor.eventManager.destroy();\n  });\n};\n\nTextEditor.prototype.destroy = function () {\n  this.eventManager.destroy();\n};\n\nexports.default = TextEditor;\n\n/***/ }),\n/* 60 */\n/***/ (function(module, exports) {\n\n// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n  return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n\n\n/***/ }),\n/* 61 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar toInteger = __webpack_require__(60);\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n  index = toInteger(index);\n  return index < 0 ? max(index + length, 0) : min(index, length);\n};\n\n\n/***/ }),\n/* 62 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar redefine = __webpack_require__(28);\nmodule.exports = function (target, src, safe) {\n  for (var key in src) redefine(target, key, src[key], safe);\n  return target;\n};\n\n\n/***/ }),\n/* 63 */\n/***/ (function(module, exports) {\n\nmodule.exports = function (it) {\n  if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n  return it;\n};\n\n\n/***/ }),\n/* 64 */\n/***/ (function(module, exports) {\n\nmodule.exports = function (it, Constructor, name, forbiddenField) {\n  if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n    throw TypeError(name + ': incorrect invocation!');\n  } return it;\n};\n\n\n/***/ }),\n/* 65 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar ctx = __webpack_require__(30);\nvar call = __webpack_require__(104);\nvar isArrayIter = __webpack_require__(105);\nvar anObject = __webpack_require__(18);\nvar toLength = __webpack_require__(25);\nvar getIterFn = __webpack_require__(106);\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n  var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n  var f = ctx(fn, that, entries ? 2 : 1);\n  var index = 0;\n  var length, step, iterator, result;\n  if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n  // fast case for arrays with default iterator\n  if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n    result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n    if (result === BREAK || result === RETURN) return result;\n  } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n    result = call(iterator, f, step.value, entries);\n    if (result === BREAK || result === RETURN) return result;\n  }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n\n\n/***/ }),\n/* 66 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar global = __webpack_require__(15);\nvar $export = __webpack_require__(3);\nvar redefine = __webpack_require__(28);\nvar redefineAll = __webpack_require__(62);\nvar meta = __webpack_require__(32);\nvar forOf = __webpack_require__(65);\nvar anInstance = __webpack_require__(64);\nvar isObject = __webpack_require__(9);\nvar fails = __webpack_require__(23);\nvar $iterDetect = __webpack_require__(81);\nvar setToStringTag = __webpack_require__(53);\nvar inheritIfRequired = __webpack_require__(210);\n\nmodule.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {\n  var Base = global[NAME];\n  var C = Base;\n  var ADDER = IS_MAP ? 'set' : 'add';\n  var proto = C && C.prototype;\n  var O = {};\n  var fixMethod = function (KEY) {\n    var fn = proto[KEY];\n    redefine(proto, KEY,\n      KEY == 'delete' ? function (a) {\n        return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n      } : KEY == 'has' ? function has(a) {\n        return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n      } : KEY == 'get' ? function get(a) {\n        return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);\n      } : KEY == 'add' ? function add(a) { fn.call(this, a === 0 ? 0 : a); return this; }\n        : function set(a, b) { fn.call(this, a === 0 ? 0 : a, b); return this; }\n    );\n  };\n  if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {\n    new C().entries().next();\n  }))) {\n    // create collection constructor\n    C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n    redefineAll(C.prototype, methods);\n    meta.NEED = true;\n  } else {\n    var instance = new C();\n    // early implementations not supports chaining\n    var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n    // V8 ~  Chromium 40- weak-collections throws on primitives, but should return false\n    var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n    // most early implementations doesn't supports iterables, most modern - not close it correctly\n    var ACCEPT_ITERABLES = $iterDetect(function (iter) { new C(iter); }); // eslint-disable-line no-new\n    // for early implementations -0 and +0 not the same\n    var BUGGY_ZERO = !IS_WEAK && fails(function () {\n      // V8 ~ Chromium 42- fails only with 5+ elements\n      var $instance = new C();\n      var index = 5;\n      while (index--) $instance[ADDER](index, index);\n      return !$instance.has(-0);\n    });\n    if (!ACCEPT_ITERABLES) {\n      C = wrapper(function (target, iterable) {\n        anInstance(target, C, NAME);\n        var that = inheritIfRequired(new Base(), target, C);\n        if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n        return that;\n      });\n      C.prototype = proto;\n      proto.constructor = C;\n    }\n    if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n      fixMethod('delete');\n      fixMethod('has');\n      IS_MAP && fixMethod('get');\n    }\n    if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n    // weak collections should not contains .clear method\n    if (IS_WEAK && proto.clear) delete proto.clear;\n  }\n\n  setToStringTag(C, NAME);\n\n  O[NAME] = C;\n  $export($export.G + $export.W + $export.F * (C != Base), O);\n\n  if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);\n\n  return C;\n};\n\n\n/***/ }),\n/* 67 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar pIE = __webpack_require__(54);\nvar createDesc = __webpack_require__(51);\nvar toIObject = __webpack_require__(24);\nvar toPrimitive = __webpack_require__(75);\nvar has = __webpack_require__(27);\nvar IE8_DOM_DEFINE = __webpack_require__(100);\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = __webpack_require__(22) ? gOPD : function getOwnPropertyDescriptor(O, P) {\n  O = toIObject(O);\n  P = toPrimitive(P, true);\n  if (IE8_DOM_DEFINE) try {\n    return gOPD(O, P);\n  } catch (e) { /* empty */ }\n  if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n\n\n/***/ }),\n/* 68 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = __webpack_require__(30);\nvar IObject = __webpack_require__(77);\nvar toObject = __webpack_require__(31);\nvar toLength = __webpack_require__(25);\nvar asc = __webpack_require__(211);\nmodule.exports = function (TYPE, $create) {\n  var IS_MAP = TYPE == 1;\n  var IS_FILTER = TYPE == 2;\n  var IS_SOME = TYPE == 3;\n  var IS_EVERY = TYPE == 4;\n  var IS_FIND_INDEX = TYPE == 6;\n  var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n  var create = $create || asc;\n  return function ($this, callbackfn, that) {\n    var O = toObject($this);\n    var self = IObject(O);\n    var f = ctx(callbackfn, that, 3);\n    var length = toLength(self.length);\n    var index = 0;\n    var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n    var val, res;\n    for (;length > index; index++) if (NO_HOLES || index in self) {\n      val = self[index];\n      res = f(val, index, O);\n      if (TYPE) {\n        if (IS_MAP) result[index] = res;   // map\n        else if (res) switch (TYPE) {\n          case 3: return true;             // some\n          case 5: return val;              // find\n          case 6: return index;            // findIndex\n          case 2: result.push(val);        // filter\n        } else if (IS_EVERY) return false; // every\n      }\n    }\n    return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n  };\n};\n\n\n/***/ }),\n/* 69 */\n/***/ (function(module, exports) {\n\nexports.f = Object.getOwnPropertySymbols;\n\n\n/***/ }),\n/* 70 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar hide = __webpack_require__(29);\nvar redefine = __webpack_require__(28);\nvar fails = __webpack_require__(23);\nvar defined = __webpack_require__(36);\nvar wks = __webpack_require__(12);\n\nmodule.exports = function (KEY, length, exec) {\n  var SYMBOL = wks(KEY);\n  var fns = exec(defined, SYMBOL, ''[KEY]);\n  var strfn = fns[0];\n  var rxfn = fns[1];\n  if (fails(function () {\n    var O = {};\n    O[SYMBOL] = function () { return 7; };\n    return ''[KEY](O) != 7;\n  })) {\n    redefine(String.prototype, KEY, strfn);\n    hide(RegExp.prototype, SYMBOL, length == 2\n      // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n      // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n      ? function (string, arg) { return rxfn.call(string, this, arg); }\n      // 21.2.5.6 RegExp.prototype[@@match](string)\n      // 21.2.5.9 RegExp.prototype[@@search](string)\n      : function (string) { return rxfn.call(string, this); }\n    );\n  }\n};\n\n\n/***/ }),\n/* 71 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports.DEFAULT_LANGUAGE_CODE = exports.getLanguagesDictionaries = exports.getDefaultLanguageDictionary = exports.hasLanguageDictionary = exports.getLanguageDictionary = exports.registerLanguageDictionary = undefined;\n\nvar _object = __webpack_require__(1);\n\nvar _utils = __webpack_require__(199);\n\nvar _staticRegister2 = __webpack_require__(38);\n\nvar _staticRegister3 = _interopRequireDefault(_staticRegister2);\n\nvar _enUS = __webpack_require__(270);\n\nvar _enUS2 = _interopRequireDefault(_enUS);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar DEFAULT_LANGUAGE_CODE = _enUS2.default.languageCode;\n\nvar _staticRegister = (0, _staticRegister3.default)('languagesDictionaries'),\n    registerGloballyLanguageDictionary = _staticRegister.register,\n    getGlobalLanguageDictionary = _staticRegister.getItem,\n    hasGlobalLanguageDictionary = _staticRegister.hasItem,\n    getGlobalLanguagesDictionaries = _staticRegister.getValues;\n\n/**\n * Register language dictionary for specific language code.\n *\n * @param {String|Object} languageCodeOrDictionary Language code for specific language i.e. 'en-US', 'pt-BR', 'de-DE' or object representing dictionary.\n * @param {Object} dictionary Dictionary for specific language (optional if first parameter has already dictionary).\n */\n\n\nfunction registerLanguage(languageCodeOrDictionary, dictionary) {\n  var languageCode = languageCodeOrDictionary;\n  var dictionaryObject = dictionary;\n\n  // Dictionary passed as first argument.\n  if ((0, _object.isObject)(languageCodeOrDictionary)) {\n    dictionaryObject = languageCodeOrDictionary;\n    languageCode = dictionaryObject.languageCode;\n  }\n\n  extendLanguageDictionary(languageCode, dictionaryObject);\n  registerGloballyLanguageDictionary(languageCode, (0, _object.deepClone)(dictionaryObject));\n\n  // We do not allow user to work with dictionary by reference, it can cause lot of bugs.\n  return (0, _object.deepClone)(dictionaryObject);\n}\n\n/**\n * Get language dictionary for specific language code.\n *\n * @param {String} languageCode Language code.\n * @returns {Object} Object with constants representing identifiers for translation (as keys) and corresponding translation phrases (as values).\n */\nfunction getLanguage(languageCode) {\n  if (!hasLanguage(languageCode)) {\n    return null;\n  }\n\n  return (0, _object.deepClone)(getGlobalLanguageDictionary(languageCode));\n}\n\n/**\n *\n * Get if language with specified language code was registered.\n *\n * @param {String} languageCode Language code for specific language i.e. 'en-US', 'pt-BR', 'de-DE'.\n * @returns {Boolean}\n */\nfunction hasLanguage(languageCode) {\n  return hasGlobalLanguageDictionary(languageCode);\n}\n\n/**\n * Get default language dictionary.\n *\n * @returns {Object} Object with constants representing identifiers for translation (as keys) and corresponding translation phrases (as values).\n */\nfunction getDefaultLanguage() {\n  return _enUS2.default;\n}\n\n/**\n * Extend handled dictionary by default language dictionary. As result, if any dictionary key isn't defined for specific language, it will be filled with default language value (\"dictionary gaps\" are supplemented).\n *\n * @private\n * @param {String} languageCode Language code.\n * @param {Object} dictionary Dictionary which is extended.\n */\nfunction extendLanguageDictionary(languageCode, dictionary) {\n  if (languageCode !== DEFAULT_LANGUAGE_CODE) {\n    (0, _utils.extendNotExistingKeys)(dictionary, getGlobalLanguageDictionary(DEFAULT_LANGUAGE_CODE));\n  }\n}\n\n/**\n * Get registered language dictionaries.\n *\n * @returns {Array}\n */\nfunction getLanguages() {\n  return getGlobalLanguagesDictionaries();\n}\n\nexports.registerLanguageDictionary = registerLanguage;\nexports.getLanguageDictionary = getLanguage;\nexports.hasLanguageDictionary = hasLanguage;\nexports.getDefaultLanguageDictionary = getDefaultLanguage;\nexports.getLanguagesDictionaries = getLanguages;\nexports.DEFAULT_LANGUAGE_CODE = DEFAULT_LANGUAGE_CODE;\n\n/**\n * Automatically registers default dictionary.\n */\n\nregisterLanguage(_enUS2.default);\n\n/***/ }),\n/* 72 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports.SELECTION_TYPES = exports.SELECTION_TYPE_OBJECT = exports.SELECTION_TYPE_ARRAY = exports.SELECTION_TYPE_EMPTY = exports.SELECTION_TYPE_UNRECOGNIZED = undefined;\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\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 && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nexports.detectSelectionType = detectSelectionType;\nexports.normalizeSelectionFactory = normalizeSelectionFactory;\nexports.transformSelectionToColumnDistance = transformSelectionToColumnDistance;\nexports.transformSelectionToRowDistance = transformSelectionToRowDistance;\nexports.isValidCoord = isValidCoord;\n\nvar _src = __webpack_require__(4);\n\nvar _array = __webpack_require__(2);\n\nvar _mixed = __webpack_require__(11);\n\nvar SELECTION_TYPE_UNRECOGNIZED = exports.SELECTION_TYPE_UNRECOGNIZED = 0;\nvar SELECTION_TYPE_EMPTY = exports.SELECTION_TYPE_EMPTY = 1;\nvar SELECTION_TYPE_ARRAY = exports.SELECTION_TYPE_ARRAY = 2;\nvar SELECTION_TYPE_OBJECT = exports.SELECTION_TYPE_OBJECT = 3;\nvar SELECTION_TYPES = exports.SELECTION_TYPES = [SELECTION_TYPE_OBJECT, SELECTION_TYPE_ARRAY];\nvar ARRAY_TYPE_PATTERN = [['number'], ['number', 'string'], ['number', 'undefined'], ['number', 'string', 'undefined']];\nvar rootCall = Symbol('root');\nvar childCall = Symbol('child');\n\n/**\n * Detect selection schema structure.\n *\n * @param {*} selectionRanges The selected range or and array of selected ranges. This type of data is produced by\n *                            `hot.getSelected()`, `hot.getSelectedLast()`, `hot.getSelectedRange()`\n *                            and `hot.getSelectedRangeLast()` methods.\n * @returns {Number} Returns a number that specifies the type of detected selection schema. If selection schema type\n *                   is unrecognized than it returns `0`.\n */\nfunction detectSelectionType(selectionRanges) {\n  var _callSymbol = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : rootCall;\n\n  if (_callSymbol !== rootCall && _callSymbol !== childCall) {\n    throw new Error('The second argument is used internally only and cannot be overwritten.');\n  }\n\n  var isArray = Array.isArray(selectionRanges);\n  var isRootCall = _callSymbol === rootCall;\n  var result = SELECTION_TYPE_UNRECOGNIZED;\n\n  if (isArray) {\n    var firstItem = selectionRanges[0];\n\n    if (selectionRanges.length === 0) {\n      result = SELECTION_TYPE_EMPTY;\n    } else if (isRootCall && firstItem instanceof _src.CellRange) {\n      result = SELECTION_TYPE_OBJECT;\n    } else if (isRootCall && Array.isArray(firstItem)) {\n      result = detectSelectionType(firstItem, childCall);\n    } else if (selectionRanges.length >= 2 && selectionRanges.length <= 4) {\n      var isArrayType = !selectionRanges.some(function (value, index) {\n        return !ARRAY_TYPE_PATTERN[index].includes(typeof value === 'undefined' ? 'undefined' : _typeof(value));\n      });\n\n      if (isArrayType) {\n        result = SELECTION_TYPE_ARRAY;\n      }\n    }\n  }\n\n  return result;\n}\n\n/**\n * Factory function designed for normalization data schema from different data structures of the selection ranges.\n *\n * @param {String} type Selection type which will be processed.\n * @param {Object} [options]\n * @param {Boolean} [options.keepDirection=false] If `true`, the coordinates which contain the direction of the\n *                                                selected cells won't be changed. Otherwise, the selection will be\n *                                                normalized to values starting from top-left to bottom-right.\n * @param {Function} [options.propToCol] Pass the converting function (usually `datamap.propToCol`) if the column\n *                                       defined as props should be normalized to the numeric values.\n * @returns {Number[]} Returns normalized data about selected range as an array (`[rowStart, columnStart, rowEnd, columnEnd]`).\n */\nfunction normalizeSelectionFactory(type) {\n  var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n      _ref$keepDirection = _ref.keepDirection,\n      keepDirection = _ref$keepDirection === undefined ? false : _ref$keepDirection,\n      propToCol = _ref.propToCol;\n\n  if (!SELECTION_TYPES.includes(type)) {\n    throw new Error('Unsupported selection ranges schema type was provided.');\n  }\n\n  return function (selection) {\n    var isObjectType = type === SELECTION_TYPE_OBJECT;\n    var rowStart = isObjectType ? selection.from.row : selection[0];\n    var columnStart = isObjectType ? selection.from.col : selection[1];\n    var rowEnd = isObjectType ? selection.to.row : selection[2];\n    var columnEnd = isObjectType ? selection.to.col : selection[3];\n\n    if (typeof propToCol === 'function') {\n      if (typeof columnStart === 'string') {\n        columnStart = propToCol(columnStart);\n      }\n      if (typeof columnEnd === 'string') {\n        columnEnd = propToCol(columnEnd);\n      }\n    }\n\n    if ((0, _mixed.isUndefined)(rowEnd)) {\n      rowEnd = rowStart;\n    }\n    if ((0, _mixed.isUndefined)(columnEnd)) {\n      columnEnd = columnStart;\n    }\n\n    if (!keepDirection) {\n      var origRowStart = rowStart;\n      var origColumnStart = columnStart;\n      var origRowEnd = rowEnd;\n      var origColumnEnd = columnEnd;\n\n      rowStart = Math.min(origRowStart, origRowEnd);\n      columnStart = Math.min(origColumnStart, origColumnEnd);\n      rowEnd = Math.max(origRowStart, origRowEnd);\n      columnEnd = Math.max(origColumnStart, origColumnEnd);\n    }\n\n    return [rowStart, columnStart, rowEnd, columnEnd];\n  };\n}\n\n/**\n * Function transform selection ranges (produced by `hot.getSelected()` and `hot.getSelectedRange()`) to normalized\n * data structure. It merges repeated ranges into consecutive coordinates. The returned structure\n * contains an array of arrays. The single item contains at index 0 visual column index from the selection was\n * started and at index 1 distance as a count of selected columns.\n *\n * @param {Array[]|CellRange[]} selectionRanges Selection ranges produced by Handsontable.\n * @return {Array[]} Returns an array of arrays with ranges defines in that schema:\n *                   `[[visualColumnStart, distance], [visualColumnStart, distance], ...]`.\n *                   The column distances are always created starting from the left (zero index) to the\n *                   right (the latest column index).\n */\nfunction transformSelectionToColumnDistance(selectionRanges) {\n  var selectionType = detectSelectionType(selectionRanges);\n\n  if (selectionType === SELECTION_TYPE_UNRECOGNIZED || selectionType === SELECTION_TYPE_EMPTY) {\n    return [];\n  }\n\n  var selectionSchemaNormalizer = normalizeSelectionFactory(selectionType);\n  var unorderedIndexes = new Set();\n\n  // Iterate through all ranges and collect all column indexes which are not saved yet.\n  (0, _array.arrayEach)(selectionRanges, function (selection) {\n    var _selectionSchemaNorma = selectionSchemaNormalizer(selection),\n        _selectionSchemaNorma2 = _slicedToArray(_selectionSchemaNorma, 4),\n        columnStart = _selectionSchemaNorma2[1],\n        columnEnd = _selectionSchemaNorma2[3];\n\n    var amount = columnEnd - columnStart + 1;\n\n    (0, _array.arrayEach)(Array.from(new Array(amount), function (_, i) {\n      return columnStart + i;\n    }), function (index) {\n      if (!unorderedIndexes.has(index)) {\n        unorderedIndexes.add(index);\n      }\n    });\n  });\n\n  // Sort indexes in ascending order to easily detecting non-consecutive columns.\n  var orderedIndexes = Array.from(unorderedIndexes).sort(function (a, b) {\n    return a - b;\n  });\n  var normalizedColumnRanges = (0, _array.arrayReduce)(orderedIndexes, function (acc, visualColumnIndex, index, array) {\n    if (index !== 0 && visualColumnIndex === array[index - 1] + 1) {\n      acc[acc.length - 1][1] += 1;\n    } else {\n      acc.push([visualColumnIndex, 1]);\n    }\n\n    return acc;\n  }, []);\n\n  return normalizedColumnRanges;\n}\n\n/**\n * Function transform selection ranges (produced by `hot.getSelected()` and `hot.getSelectedRange()`) to normalized\n * data structure. It merges repeated ranges into consecutive coordinates. The returned structure\n * contains an array of arrays. The single item contains at index 0 visual column index from the selection was\n * started and at index 1 distance as a count of selected columns.\n *\n * @param {Array[]|CellRange[]} selectionRanges Selection ranges produced by Handsontable.\n * @return {Array[]} Returns an array of arrays with ranges defines in that schema:\n *                   `[[visualColumnStart, distance], [visualColumnStart, distance], ...]`.\n *                   The column distances are always created starting from the left (zero index) to the\n *                   right (the latest column index).\n */\nfunction transformSelectionToRowDistance(selectionRanges) {\n  var selectionType = detectSelectionType(selectionRanges);\n\n  if (selectionType === SELECTION_TYPE_UNRECOGNIZED || selectionType === SELECTION_TYPE_EMPTY) {\n    return [];\n  }\n\n  var selectionSchemaNormalizer = normalizeSelectionFactory(selectionType);\n  var unorderedIndexes = new Set();\n\n  // Iterate through all ranges and collect all column indexes which are not saved yet.\n  (0, _array.arrayEach)(selectionRanges, function (selection) {\n    var _selectionSchemaNorma3 = selectionSchemaNormalizer(selection),\n        _selectionSchemaNorma4 = _slicedToArray(_selectionSchemaNorma3, 3),\n        rowStart = _selectionSchemaNorma4[0],\n        rowEnd = _selectionSchemaNorma4[2];\n\n    var amount = rowEnd - rowStart + 1;\n\n    (0, _array.arrayEach)(Array.from(new Array(amount), function (_, i) {\n      return rowStart + i;\n    }), function (index) {\n      if (!unorderedIndexes.has(index)) {\n        unorderedIndexes.add(index);\n      }\n    });\n  });\n\n  // Sort indexes in ascending order to easily detecting non-consecutive columns.\n  var orderedIndexes = Array.from(unorderedIndexes).sort(function (a, b) {\n    return a - b;\n  });\n  var normalizedRowRanges = (0, _array.arrayReduce)(orderedIndexes, function (acc, rowIndex, index, array) {\n    if (index !== 0 && rowIndex === array[index - 1] + 1) {\n      acc[acc.length - 1][1] += 1;\n    } else {\n      acc.push([rowIndex, 1]);\n    }\n\n    return acc;\n  }, []);\n\n  return normalizedRowRanges;\n}\n\n/**\n * Check if passed value can be treated as valid cell coordinate. The second argument is\n * used to check if the value doesn't exceed the defined max table rows/columns count.\n *\n * @param {*} coord\n * @param {Number} maxTableItemsCount The value that declares the maximum coordinate that is still validatable.\n * @return {Boolean}\n */\nfunction isValidCoord(coord) {\n  var maxTableItemsCount = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Infinity;\n\n  return typeof coord === 'number' && coord >= 0 && coord < maxTableItemsCount;\n}\n\n/***/ }),\n/* 73 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports.FIRST_AFTER_SECOND = exports.FIRST_BEFORE_SECOND = exports.DO_NOT_SWAP = undefined;\nexports.getSortFunctionForColumn = getSortFunctionForColumn;\n\nvar _date = __webpack_require__(292);\n\nvar _date2 = _interopRequireDefault(_date);\n\nvar _default = __webpack_require__(293);\n\nvar _default2 = _interopRequireDefault(_default);\n\nvar _numeric = __webpack_require__(294);\n\nvar _numeric2 = _interopRequireDefault(_numeric);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar DO_NOT_SWAP = exports.DO_NOT_SWAP = 0;\nvar FIRST_BEFORE_SECOND = exports.FIRST_BEFORE_SECOND = -1;\nvar FIRST_AFTER_SECOND = exports.FIRST_AFTER_SECOND = 1;\n\n/**\n * Gets sort function for the particular column basing on its column meta.\n *\n * @private\n * @param {Object} columnMeta\n * @returns {Function}\n */\nfunction getSortFunctionForColumn(columnMeta) {\n  if (columnMeta.sortFunction) {\n    return columnMeta.sortFunction;\n  } else if (columnMeta.type === 'date') {\n    return _date2.default;\n  } else if (columnMeta.type === 'numeric') {\n    return _numeric2.default;\n  }\n\n  return _default2.default;\n}\n\n/***/ }),\n/* 74 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar isObject = __webpack_require__(9);\nvar document = __webpack_require__(15).document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n  return is ? document.createElement(it) : {};\n};\n\n\n/***/ }),\n/* 75 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = __webpack_require__(9);\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/* 76 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = __webpack_require__(18);\nvar dPs = __webpack_require__(208);\nvar enumBugKeys = __webpack_require__(80);\nvar IE_PROTO = __webpack_require__(78)('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n  // Thrash, waste and sodomy: IE GC bug\n  var iframe = __webpack_require__(74)('iframe');\n  var i = enumBugKeys.length;\n  var lt = '<';\n  var gt = '>';\n  var iframeDocument;\n  iframe.style.display = 'none';\n  __webpack_require__(103).appendChild(iframe);\n  iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n  // createDict = iframe.contentWindow.Object;\n  // html.removeChild(iframe);\n  iframeDocument = iframe.contentWindow.document;\n  iframeDocument.open();\n  iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n  iframeDocument.close();\n  createDict = iframeDocument.F;\n  while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n  return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n  var result;\n  if (O !== null) {\n    Empty[PROTOTYPE] = anObject(O);\n    result = new Empty();\n    Empty[PROTOTYPE] = null;\n    // add \"__proto__\" for Object.getPrototypeOf polyfill\n    result[IE_PROTO] = O;\n  } else result = createDict();\n  return Properties === undefined ? result : dPs(result, Properties);\n};\n\n\n/***/ }),\n/* 77 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = __webpack_require__(44);\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n  return cof(it) == 'String' ? it.split('') : Object(it);\n};\n\n\n/***/ }),\n/* 78 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar shared = __webpack_require__(79)('keys');\nvar uid = __webpack_require__(50);\nmodule.exports = function (key) {\n  return shared[key] || (shared[key] = uid(key));\n};\n\n\n/***/ }),\n/* 79 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar core = __webpack_require__(37);\nvar global = __webpack_require__(15);\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\n\n(module.exports = function (key, value) {\n  return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n  version: core.version,\n  mode: __webpack_require__(49) ? 'pure' : 'global',\n  copyright: '© 2018 Denis Pushkarev (zloirock.ru)'\n});\n\n\n/***/ }),\n/* 80 */\n/***/ (function(module, exports) {\n\n// IE 8- don't enum bug keys\nmodule.exports = (\n  'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n\n\n/***/ }),\n/* 81 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar ITERATOR = __webpack_require__(12)('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n  var riter = [7][ITERATOR]();\n  riter['return'] = function () { SAFE_CLOSING = true; };\n  // eslint-disable-next-line no-throw-literal\n  Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n  if (!skipClosing && !SAFE_CLOSING) return false;\n  var safe = false;\n  try {\n    var arr = [7];\n    var iter = arr[ITERATOR]();\n    iter.next = function () { return { done: safe = true }; };\n    arr[ITERATOR] = function () { return iter; };\n    exec(arr);\n  } catch (e) { /* empty */ }\n  return safe;\n};\n\n\n/***/ }),\n/* 82 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar ctx = __webpack_require__(30);\nvar invoke = __webpack_require__(214);\nvar html = __webpack_require__(103);\nvar cel = __webpack_require__(74);\nvar global = __webpack_require__(15);\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n  var id = +this;\n  // eslint-disable-next-line no-prototype-builtins\n  if (queue.hasOwnProperty(id)) {\n    var fn = queue[id];\n    delete queue[id];\n    fn();\n  }\n};\nvar listener = function (event) {\n  run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n  setTask = function setImmediate(fn) {\n    var args = [];\n    var i = 1;\n    while (arguments.length > i) args.push(arguments[i++]);\n    queue[++counter] = function () {\n      // eslint-disable-next-line no-new-func\n      invoke(typeof fn == 'function' ? fn : Function(fn), args);\n    };\n    defer(counter);\n    return counter;\n  };\n  clearTask = function clearImmediate(id) {\n    delete queue[id];\n  };\n  // Node.js 0.8-\n  if (__webpack_require__(44)(process) == 'process') {\n    defer = function (id) {\n      process.nextTick(ctx(run, id, 1));\n    };\n  // Sphere (JS game engine) Dispatch API\n  } else if (Dispatch && Dispatch.now) {\n    defer = function (id) {\n      Dispatch.now(ctx(run, id, 1));\n    };\n  // Browsers with MessageChannel, includes WebWorkers\n  } else if (MessageChannel) {\n    channel = new MessageChannel();\n    port = channel.port2;\n    channel.port1.onmessage = listener;\n    defer = ctx(port.postMessage, port, 1);\n  // Browsers with postMessage, skip WebWorkers\n  // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n  } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n    defer = function (id) {\n      global.postMessage(id + '', '*');\n    };\n    global.addEventListener('message', listener, false);\n  // IE8-\n  } else if (ONREADYSTATECHANGE in cel('script')) {\n    defer = function (id) {\n      html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n        html.removeChild(this);\n        run.call(id);\n      };\n    };\n  // Rest old browsers\n  } else {\n    defer = function (id) {\n      setTimeout(ctx(run, id, 1), 0);\n    };\n  }\n}\nmodule.exports = {\n  set: setTask,\n  clear: clearTask\n};\n\n\n/***/ }),\n/* 83 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar global = __webpack_require__(15);\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\n\n\n/***/ }),\n/* 84 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = __webpack_require__(101);\nvar hiddenKeys = __webpack_require__(80).concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n  return $keys(O, hiddenKeys);\n};\n\n\n/***/ }),\n/* 85 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = __webpack_require__(144);\nvar defined = __webpack_require__(36);\n\nmodule.exports = function (that, searchString, NAME) {\n  if (isRegExp(searchString)) throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n  return String(defined(that));\n};\n\n\n/***/ }),\n/* 86 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar MATCH = __webpack_require__(12)('match');\nmodule.exports = function (KEY) {\n  var re = /./;\n  try {\n    '/./'[KEY](re);\n  } catch (e) {\n    try {\n      re[MATCH] = false;\n      return !'/./'[KEY](re);\n    } catch (f) { /* empty */ }\n  } return true;\n};\n\n\n/***/ }),\n/* 87 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $defineProperty = __webpack_require__(20);\nvar createDesc = __webpack_require__(51);\n\nmodule.exports = function (object, index, value) {\n  if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n  else object[index] = value;\n};\n\n\n/***/ }),\n/* 88 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar addToUnscopables = __webpack_require__(46);\nvar step = __webpack_require__(110);\nvar Iterators = __webpack_require__(52);\nvar toIObject = __webpack_require__(24);\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = __webpack_require__(108)(Array, 'Array', function (iterated, kind) {\n  this._t = toIObject(iterated); // target\n  this._i = 0;                   // next index\n  this._k = kind;                // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n  var O = this._t;\n  var kind = this._k;\n  var index = this._i++;\n  if (!O || index >= O.length) {\n    this._t = undefined;\n    return step(1);\n  }\n  if (kind == 'keys') return step(0, index);\n  if (kind == 'values') return step(0, O[index]);\n  return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n\n\n/***/ }),\n/* 89 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports.getRegisteredCellTypes = exports.getRegisteredCellTypeNames = exports.hasCellType = exports.getCellType = exports.registerCellType = undefined;\n\nvar _staticRegister2 = __webpack_require__(38);\n\nvar _staticRegister3 = _interopRequireDefault(_staticRegister2);\n\nvar _editors = __webpack_require__(17);\n\nvar _renderers = __webpack_require__(14);\n\nvar _validators = __webpack_require__(34);\n\nvar _autocompleteType = __webpack_require__(255);\n\nvar _autocompleteType2 = _interopRequireDefault(_autocompleteType);\n\nvar _checkboxType = __webpack_require__(256);\n\nvar _checkboxType2 = _interopRequireDefault(_checkboxType);\n\nvar _dateType = __webpack_require__(257);\n\nvar _dateType2 = _interopRequireDefault(_dateType);\n\nvar _dropdownType = __webpack_require__(258);\n\nvar _dropdownType2 = _interopRequireDefault(_dropdownType);\n\nvar _handsontableType = __webpack_require__(259);\n\nvar _handsontableType2 = _interopRequireDefault(_handsontableType);\n\nvar _numericType = __webpack_require__(260);\n\nvar _numericType2 = _interopRequireDefault(_numericType);\n\nvar _passwordType = __webpack_require__(261);\n\nvar _passwordType2 = _interopRequireDefault(_passwordType);\n\nvar _textType = __webpack_require__(262);\n\nvar _textType2 = _interopRequireDefault(_textType);\n\nvar _timeType = __webpack_require__(263);\n\nvar _timeType2 = _interopRequireDefault(_timeType);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar _staticRegister = (0, _staticRegister3.default)('cellTypes'),\n    register = _staticRegister.register,\n    getItem = _staticRegister.getItem,\n    hasItem = _staticRegister.hasItem,\n    getNames = _staticRegister.getNames,\n    getValues = _staticRegister.getValues;\n\n_register('autocomplete', _autocompleteType2.default);\n_register('checkbox', _checkboxType2.default);\n_register('date', _dateType2.default);\n_register('dropdown', _dropdownType2.default);\n_register('handsontable', _handsontableType2.default);\n_register('numeric', _numericType2.default);\n_register('password', _passwordType2.default);\n_register('text', _textType2.default);\n_register('time', _timeType2.default);\n\n/**\n * Retrieve cell type object.\n *\n * @param {String} name Cell type identification.\n * @returns {Object} Returns cell type object.\n */\nfunction _getItem(name) {\n  if (!hasItem(name)) {\n    throw Error('You declared cell type \"' + name + '\" as a string that is not mapped to a known object.\\n                 Cell type must be an object or a string mapped to an object registered by \"Handsontable.cellTypes.registerCellType\" method');\n  }\n\n  return getItem(name);\n}\n\n/**\n * Register cell type under specified name.\n *\n * @param {String} name Cell type identification.\n * @param {Object} type An object with contains keys (eq: `editor`, `renderer`, `validator`) which describes specified behaviour of the cell.\n */\nfunction _register(name, type) {\n  var editor = type.editor,\n      renderer = type.renderer,\n      validator = type.validator;\n\n\n  if (editor) {\n    (0, _editors.registerEditor)(name, editor);\n  }\n  if (renderer) {\n    (0, _renderers.registerRenderer)(name, renderer);\n  }\n  if (validator) {\n    (0, _validators.registerValidator)(name, validator);\n  }\n\n  register(name, type);\n}\n\nexports.registerCellType = _register;\nexports.getCellType = _getItem;\nexports.hasCellType = hasItem;\nexports.getRegisteredCellTypeNames = getNames;\nexports.getRegisteredCellTypes = getValues;\n\n/***/ }),\n/* 90 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\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 && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar _templateObject = _taggedTemplateLiteral(['Deprecation warning: This method is going to be removed in the next release.\\n      If you want to select a cell using props, please use the `selectCell` method.'], ['Deprecation warning: This method is going to be removed in the next release.\\n      If you want to select a cell using props, please use the \\\\`selectCell\\\\` method.']);\n\nexports.default = Core;\n\nvar _element = __webpack_require__(0);\n\nvar _setting = __webpack_require__(91);\n\nvar _function = __webpack_require__(43);\n\nvar _console = __webpack_require__(58);\n\nvar _mixed = __webpack_require__(11);\n\nvar _browser = __webpack_require__(39);\n\nvar _dataMap = __webpack_require__(264);\n\nvar _dataMap2 = _interopRequireDefault(_dataMap);\n\nvar _editorManager = __webpack_require__(267);\n\nvar _editorManager2 = _interopRequireDefault(_editorManager);\n\nvar _eventManager = __webpack_require__(5);\n\nvar _eventManager2 = _interopRequireDefault(_eventManager);\n\nvar _object = __webpack_require__(1);\n\nvar _array = __webpack_require__(2);\n\nvar _templateLiteralTag = __webpack_require__(42);\n\nvar _plugins = __webpack_require__(8);\n\nvar _renderers = __webpack_require__(14);\n\nvar _validators = __webpack_require__(34);\n\nvar _string = __webpack_require__(33);\n\nvar _number = __webpack_require__(6);\n\nvar _tableView = __webpack_require__(268);\n\nvar _tableView2 = _interopRequireDefault(_tableView);\n\nvar _dataSource = __webpack_require__(269);\n\nvar _dataSource2 = _interopRequireDefault(_dataSource);\n\nvar _data = __webpack_require__(92);\n\nvar _recordTranslator = __webpack_require__(195);\n\nvar _rootInstance = __webpack_require__(196);\n\nvar _src = __webpack_require__(4);\n\nvar _pluginHooks = __webpack_require__(16);\n\nvar _pluginHooks2 = _interopRequireDefault(_pluginHooks);\n\nvar _defaultSettings = __webpack_require__(197);\n\nvar _defaultSettings2 = _interopRequireDefault(_defaultSettings);\n\nvar _cellTypes = __webpack_require__(89);\n\nvar _i18n = __webpack_require__(198);\n\nvar _dictionariesManager = __webpack_require__(71);\n\nvar _utils = __webpack_require__(199);\n\nvar _keyStateObserver = __webpack_require__(200);\n\nvar _selection = __webpack_require__(201);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _taggedTemplateLiteral(strings, raw) { return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nvar activeGuid = null;\n\n/**\n * Handsontable constructor\n *\n * @core\n * @constructor Core\n * @description\n *\n * After Handsontable is constructed, you can modify the grid behavior using the available public methods.\n *\n * ---\n * ## How to call methods\n *\n * These are 2 equal ways to call a Handsontable method:\n *\n * ```js\n * // all following examples assume that you constructed Handsontable like this\n * const hot = new Handsontable(document.getElementById('example1'), options);\n *\n * // now, to use setDataAtCell method, you can either:\n * ht.setDataAtCell(0, 0, 'new value');\n * ```\n *\n * Alternatively, you can call the method using jQuery wrapper (__obsolete__, requires initialization using our jQuery guide\n * ```js\n *   $('#example1').handsontable('setDataAtCell', 0, 0, 'new value');\n * ```\n * ---\n */\nfunction Core(rootElement, userSettings) {\n  var _this = this;\n\n  var rootInstanceSymbol = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n  var preventScrollingToCell = false;\n  var instance = this;\n  var GridSettings = function GridSettings() {};\n  var eventManager = new _eventManager2.default(instance);\n  var priv = void 0;\n  var datamap = void 0;\n  var dataSource = void 0;\n  var grid = void 0;\n  var editorManager = void 0;\n\n  (0, _object.extend)(GridSettings.prototype, _defaultSettings2.default.prototype); // create grid settings as a copy of default settings\n  (0, _object.extend)(GridSettings.prototype, userSettings); // overwrite defaults with user settings\n  (0, _object.extend)(GridSettings.prototype, expandType(userSettings));\n\n  (0, _utils.applyLanguageSetting)(GridSettings.prototype, userSettings.language);\n\n  if ((0, _rootInstance.hasValidParameter)(rootInstanceSymbol)) {\n    (0, _rootInstance.registerAsRootInstance)(this);\n  }\n\n  (0, _keyStateObserver.startObserving)();\n\n  this.isDestroyed = false;\n  this.rootElement = rootElement;\n  this.isHotTableEnv = (0, _element.isChildOfWebComponentTable)(this.rootElement);\n  _eventManager2.default.isHotTableEnv = this.isHotTableEnv;\n\n  this.container = document.createElement('div');\n  this.renderCall = false;\n\n  rootElement.insertBefore(this.container, rootElement.firstChild);\n\n  if (false) {}\n\n  this.guid = 'ht_' + (0, _string.randomString)(); // this is the namespace for global events\n\n  var recordTranslator = (0, _recordTranslator.getTranslator)(instance);\n\n  dataSource = new _dataSource2.default(instance);\n\n  if (!this.rootElement.id || this.rootElement.id.substring(0, 3) === 'ht_') {\n    this.rootElement.id = this.guid; // if root element does not have an id, assign a random id\n  }\n  priv = {\n    cellSettings: [],\n    columnSettings: [],\n    columnsSettingConflicts: ['data', 'width', 'language'],\n    settings: new GridSettings(), // current settings instance\n    selRange: null, // exposed by public method `getSelectedRange`\n    isPopulated: null,\n    scrollable: null,\n    firstRun: true\n  };\n\n  var selection = new _selection.Selection(priv.settings, {\n    countCols: function countCols() {\n      return instance.countCols();\n    },\n    countRows: function countRows() {\n      return instance.countRows();\n    },\n    propToCol: function propToCol(prop) {\n      return datamap.propToCol(prop);\n    },\n    isEditorOpened: function isEditorOpened() {\n      return instance.getActiveEditor() ? instance.getActiveEditor().isOpened() : false;\n    }\n  });\n\n  this.selection = selection;\n\n  this.selection.addLocalHook('beforeSetRangeStart', function (cellCoords) {\n    _this.runHooks('beforeSetRangeStart', cellCoords);\n  });\n\n  this.selection.addLocalHook('beforeSetRangeStartOnly', function (cellCoords) {\n    _this.runHooks('beforeSetRangeStartOnly', cellCoords);\n  });\n\n  this.selection.addLocalHook('beforeSetRangeEnd', function (cellCoords) {\n    _this.runHooks('beforeSetRangeEnd', cellCoords);\n\n    if (cellCoords.row < 0) {\n      cellCoords.row = _this.view.wt.wtTable.getFirstVisibleRow();\n    }\n    if (cellCoords.col < 0) {\n      cellCoords.col = _this.view.wt.wtTable.getFirstVisibleColumn();\n    }\n  });\n\n  this.selection.addLocalHook('afterSetRangeEnd', function (cellCoords) {\n    var preventScrolling = (0, _object.createObjectPropListener)(false);\n    var selectionRange = _this.selection.getSelectedRange();\n\n    var _selectionRange$curre = selectionRange.current(),\n        from = _selectionRange$curre.from,\n        to = _selectionRange$curre.to;\n\n    var selectionLayerLevel = selectionRange.size() - 1;\n\n    _this.runHooks('afterSelection', from.row, from.col, to.row, to.col, preventScrolling, selectionLayerLevel);\n    _this.runHooks('afterSelectionByProp', from.row, instance.colToProp(from.col), to.row, instance.colToProp(to.col), preventScrolling, selectionLayerLevel);\n\n    var isSelectedByAnyHeader = _this.selection.isSelectedByAnyHeader();\n    var currentSelectedRange = _this.selection.selectedRange.current();\n\n    var scrollToCell = true;\n\n    if (preventScrollingToCell) {\n      scrollToCell = false;\n    }\n\n    if (preventScrolling.isTouched()) {\n      scrollToCell = !preventScrolling.value;\n    }\n\n    var isSelectedByRowHeader = _this.selection.isSelectedByRowHeader();\n    var isSelectedByColumnHeader = _this.selection.isSelectedByColumnHeader();\n\n    if (scrollToCell !== false) {\n      if (!isSelectedByAnyHeader) {\n        if (currentSelectedRange && !_this.selection.isMultiple()) {\n          _this.view.scrollViewport(currentSelectedRange.from);\n        } else {\n          _this.view.scrollViewport(cellCoords);\n        }\n      } else if (isSelectedByRowHeader) {\n        _this.view.scrollViewportVertically(cellCoords.row);\n      } else if (isSelectedByColumnHeader) {\n        _this.view.scrollViewportHorizontally(cellCoords.col);\n      }\n    }\n\n    // @TODO: These CSS classes are no longer needed anymore. They are used only as a indicator of the selected\n    // rows/columns in the MergedCells plugin (via border.js#L520 in the walkontable module). After fixing\n    // the Border class this should be removed.\n    if (isSelectedByRowHeader && isSelectedByColumnHeader) {\n      (0, _element.addClass)(_this.rootElement, ['ht__selection--rows', 'ht__selection--columns']);\n    } else if (isSelectedByRowHeader) {\n      (0, _element.removeClass)(_this.rootElement, 'ht__selection--columns');\n      (0, _element.addClass)(_this.rootElement, 'ht__selection--rows');\n    } else if (isSelectedByColumnHeader) {\n      (0, _element.removeClass)(_this.rootElement, 'ht__selection--rows');\n      (0, _element.addClass)(_this.rootElement, 'ht__selection--columns');\n    } else {\n      (0, _element.removeClass)(_this.rootElement, ['ht__selection--rows', 'ht__selection--columns']);\n    }\n\n    _this._refreshBorders(null);\n  });\n\n  this.selection.addLocalHook('afterSelectionFinished', function (cellRanges) {\n    var selectionLayerLevel = cellRanges.length - 1;\n    var _cellRanges$selection = cellRanges[selectionLayerLevel],\n        from = _cellRanges$selection.from,\n        to = _cellRanges$selection.to;\n\n\n    _this.runHooks('afterSelectionEnd', from.row, from.col, to.row, to.col, selectionLayerLevel);\n    _this.runHooks('afterSelectionEndByProp', from.row, instance.colToProp(from.col), to.row, instance.colToProp(to.col), selectionLayerLevel);\n  });\n\n  this.selection.addLocalHook('afterIsMultipleSelection', function (isMultiple) {\n    var changedIsMultiple = _this.runHooks('afterIsMultipleSelection', isMultiple.value);\n\n    if (isMultiple.value) {\n      isMultiple.value = changedIsMultiple;\n    }\n  });\n\n  this.selection.addLocalHook('beforeModifyTransformStart', function (cellCoordsDelta) {\n    _this.runHooks('modifyTransformStart', cellCoordsDelta);\n  });\n  this.selection.addLocalHook('afterModifyTransformStart', function (coords, rowTransformDir, colTransformDir) {\n    _this.runHooks('afterModifyTransformStart', coords, rowTransformDir, colTransformDir);\n  });\n  this.selection.addLocalHook('beforeModifyTransformEnd', function (cellCoordsDelta) {\n    _this.runHooks('modifyTransformEnd', cellCoordsDelta);\n  });\n  this.selection.addLocalHook('afterModifyTransformEnd', function (coords, rowTransformDir, colTransformDir) {\n    _this.runHooks('afterModifyTransformEnd', coords, rowTransformDir, colTransformDir);\n  });\n  this.selection.addLocalHook('afterDeselect', function () {\n    editorManager.destroyEditor();\n\n    _this._refreshBorders();\n    (0, _element.removeClass)(_this.rootElement, ['ht__selection--rows', 'ht__selection--columns']);\n\n    _this.runHooks('afterDeselect');\n  });\n  this.selection.addLocalHook('insertRowRequire', function (totalRows) {\n    _this.alter('insert_row', totalRows, 1, 'auto');\n  });\n  this.selection.addLocalHook('insertColRequire', function (totalCols) {\n    _this.alter('insert_col', totalCols, 1, 'auto');\n  });\n\n  grid = {\n    /**\n     * Inserts or removes rows and columns.\n     *\n     * @memberof Core#\n     * @function alter\n     * @private\n     * @param {String} action Possible values: \"insert_row\", \"insert_col\", \"remove_row\", \"remove_col\".\n     * @param {Number|Array} index Row or column visual index which from the alter action will be triggered.\n     *                             Alter actions such as \"remove_row\" and \"remove_col\" support array indexes in the\n     *                             format `[[index, amount], [index, amount]...]` this can be used to remove\n     *                             non-consecutive columns or rows in one call.\n     * @param {Number} [amount=1] Ammount rows or columns to remove.\n     * @param {String} [source] Optional. Source of hook runner.\n     * @param {Boolean} [keepEmptyRows] Optional. Flag for preventing deletion of empty rows.\n     */\n    alter: function alter(action, index) {\n      var amount = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;\n      var source = arguments[3];\n      var keepEmptyRows = arguments[4];\n\n      var delta = void 0;\n\n      function spliceWith(data, startIndex, count, toInject) {\n        var valueFactory = function valueFactory() {\n          var result = void 0;\n\n          if (toInject === 'array') {\n            result = [];\n          } else if (toInject === 'object') {\n            result = {};\n          }\n\n          return result;\n        };\n        var spliceArgs = (0, _array.arrayMap)(new Array(count), function () {\n          return valueFactory();\n        });\n\n        spliceArgs.unshift(startIndex, 0);\n        data.splice.apply(data, _toConsumableArray(spliceArgs));\n      }\n\n      var normalizeIndexesGroup = function normalizeIndexesGroup(indexes) {\n        if (indexes.length === 0) {\n          return [];\n        }\n\n        var sortedIndexes = [].concat(_toConsumableArray(indexes));\n\n        // Sort the indexes in ascending order.\n        sortedIndexes.sort(function (_ref, _ref2) {\n          var _ref4 = _slicedToArray(_ref, 1),\n              indexA = _ref4[0];\n\n          var _ref3 = _slicedToArray(_ref2, 1),\n              indexB = _ref3[0];\n\n          if (indexA === indexB) {\n            return 0;\n          }\n\n          return indexA > indexB ? 1 : -1;\n        });\n\n        // Normalize the {index, amount} groups into bigger groups.\n        var normalizedIndexes = (0, _array.arrayReduce)(sortedIndexes, function (acc, _ref5) {\n          var _ref6 = _slicedToArray(_ref5, 2),\n              groupIndex = _ref6[0],\n              groupAmount = _ref6[1];\n\n          var previousItem = acc[acc.length - 1];\n\n          var _previousItem = _slicedToArray(previousItem, 2),\n              prevIndex = _previousItem[0],\n              prevAmount = _previousItem[1];\n\n          var prevLastIndex = prevIndex + prevAmount;\n\n          if (groupIndex <= prevLastIndex) {\n            var amountToAdd = Math.max(groupAmount - (prevLastIndex - groupIndex), 0);\n\n            previousItem[1] += amountToAdd;\n          } else {\n            acc.push([groupIndex, groupAmount]);\n          }\n\n          return acc;\n        }, [sortedIndexes[0]]);\n\n        return normalizedIndexes;\n      };\n\n      /* eslint-disable no-case-declarations */\n      switch (action) {\n        case 'insert_row':\n\n          var numberOfSourceRows = instance.countSourceRows();\n\n          if (instance.getSettings().maxRows === numberOfSourceRows) {\n            return;\n          }\n          // eslint-disable-next-line no-param-reassign\n          index = (0, _mixed.isDefined)(index) ? index : numberOfSourceRows;\n\n          delta = datamap.createRow(index, amount, source);\n          spliceWith(priv.cellSettings, index, amount, 'array');\n\n          if (delta) {\n            if (selection.isSelected() && selection.selectedRange.current().from.row >= index) {\n              selection.selectedRange.current().from.row += delta;\n              selection.transformEnd(delta, 0); // will call render() internally\n            } else {\n              instance._refreshBorders(); // it will call render and prepare methods\n            }\n          }\n          break;\n\n        case 'insert_col':\n          delta = datamap.createCol(index, amount, source);\n\n          for (var row = 0, len = instance.countSourceRows(); row < len; row++) {\n            if (priv.cellSettings[row]) {\n              spliceWith(priv.cellSettings[row], index, amount);\n            }\n          }\n\n          if (delta) {\n            if (Array.isArray(instance.getSettings().colHeaders)) {\n              var spliceArray = [index, 0];\n              spliceArray.length += delta; // inserts empty (undefined) elements at the end of an array\n              Array.prototype.splice.apply(instance.getSettings().colHeaders, spliceArray); // inserts empty (undefined) elements into the colHeader array\n            }\n\n            if (selection.isSelected() && selection.selectedRange.current().from.col >= index) {\n              selection.selectedRange.current().from.col += delta;\n              selection.transformEnd(0, delta); // will call render() internally\n            } else {\n              instance._refreshBorders(); // it will call render and prepare methods\n            }\n          }\n          break;\n\n        case 'remove_row':\n\n          var removeRow = function removeRow(indexes) {\n            var offset = 0;\n\n            // Normalize the {index, amount} groups into bigger groups.\n            (0, _array.arrayEach)(indexes, function (_ref7) {\n              var _ref8 = _slicedToArray(_ref7, 2),\n                  groupIndex = _ref8[0],\n                  groupAmount = _ref8[1];\n\n              var calcIndex = (0, _mixed.isEmpty)(groupIndex) ? instance.countRows() - 1 : Math.max(groupIndex - offset, 0);\n\n              // If the 'index' is an integer decrease it by 'offset' otherwise pass it through to make the value\n              // compatible with datamap.removeCol method.\n              if (Number.isInteger(groupIndex)) {\n                // eslint-disable-next-line no-param-reassign\n                groupIndex = Math.max(groupIndex - offset, 0);\n              }\n\n              // TODO: for datamap.removeRow index should be passed as it is (with undefined and null values). If not, the logic\n              // inside the datamap.removeRow breaks the removing functionality.\n              datamap.removeRow(groupIndex, groupAmount, source);\n              priv.cellSettings.splice(calcIndex, amount);\n\n              var totalRows = instance.countRows();\n              var fixedRowsTop = instance.getSettings().fixedRowsTop;\n\n              if (fixedRowsTop >= calcIndex + 1) {\n                instance.getSettings().fixedRowsTop -= Math.min(groupAmount, fixedRowsTop - calcIndex);\n              }\n\n              var fixedRowsBottom = instance.getSettings().fixedRowsBottom;\n\n              if (fixedRowsBottom && calcIndex >= totalRows - fixedRowsBottom) {\n                instance.getSettings().fixedRowsBottom -= Math.min(groupAmount, fixedRowsBottom);\n              }\n\n              offset += groupAmount;\n            });\n          };\n\n          if (Array.isArray(index)) {\n            removeRow(normalizeIndexesGroup(index));\n          } else {\n            removeRow([[index, amount]]);\n          }\n\n          grid.adjustRowsAndCols();\n          instance._refreshBorders(); // it will call render and prepare methods\n          break;\n\n        case 'remove_col':\n\n          var removeCol = function removeCol(indexes) {\n            var offset = 0;\n\n            // Normalize the {index, amount} groups into bigger groups.\n            (0, _array.arrayEach)(indexes, function (_ref9) {\n              var _ref10 = _slicedToArray(_ref9, 2),\n                  groupIndex = _ref10[0],\n                  groupAmount = _ref10[1];\n\n              var calcIndex = (0, _mixed.isEmpty)(groupIndex) ? instance.countCols() - 1 : Math.max(groupIndex - offset, 0);\n\n              var visualColumnIndex = recordTranslator.toPhysicalColumn(calcIndex);\n\n              // If the 'index' is an integer decrease it by 'offset' otherwise pass it through to make the value\n              // compatible with datamap.removeCol method.\n              if (Number.isInteger(groupIndex)) {\n                // eslint-disable-next-line no-param-reassign\n                groupIndex = Math.max(groupIndex - offset, 0);\n              }\n\n              // TODO: for datamap.removeCol index should be passed as it is (with undefined and null values). If not, the logic\n              // inside the datamap.removeCol breaks the removing functionality.\n              datamap.removeCol(groupIndex, groupAmount, source);\n\n              for (var _row = 0, _len = instance.countSourceRows(); _row < _len; _row++) {\n                if (priv.cellSettings[_row]) {\n                  // if row hasn't been rendered it wouldn't have cellSettings\n                  priv.cellSettings[_row].splice(visualColumnIndex, groupAmount);\n                }\n              }\n              var fixedColumnsLeft = instance.getSettings().fixedColumnsLeft;\n\n              if (fixedColumnsLeft >= calcIndex + 1) {\n                instance.getSettings().fixedColumnsLeft -= Math.min(groupAmount, fixedColumnsLeft - calcIndex);\n              }\n\n              if (Array.isArray(instance.getSettings().colHeaders)) {\n                if (typeof visualColumnIndex === 'undefined') {\n                  visualColumnIndex = -1;\n                }\n                instance.getSettings().colHeaders.splice(visualColumnIndex, groupAmount);\n              }\n\n              offset += groupAmount;\n            });\n          };\n\n          if (Array.isArray(index)) {\n            removeCol(normalizeIndexesGroup(index));\n          } else {\n            removeCol([[index, amount]]);\n          }\n\n          grid.adjustRowsAndCols();\n          instance._refreshBorders(); // it will call render and prepare methods\n\n          break;\n        default:\n          throw new Error('There is no such action \"' + action + '\"');\n      }\n\n      if (!keepEmptyRows) {\n        grid.adjustRowsAndCols(); // makes sure that we did not add rows that will be removed in next refresh\n      }\n    },\n\n\n    /**\n     * Makes sure there are empty rows at the bottom of the table\n     */\n    adjustRowsAndCols: function adjustRowsAndCols() {\n      if (priv.settings.minRows) {\n        // should I add empty rows to data source to meet minRows?\n        var rows = instance.countRows();\n\n        if (rows < priv.settings.minRows) {\n          for (var r = 0, minRows = priv.settings.minRows; r < minRows - rows; r++) {\n            datamap.createRow(instance.countRows(), 1, 'auto');\n          }\n        }\n      }\n      if (priv.settings.minSpareRows) {\n        var emptyRows = instance.countEmptyRows(true);\n\n        // should I add empty rows to meet minSpareRows?\n        if (emptyRows < priv.settings.minSpareRows) {\n          for (; emptyRows < priv.settings.minSpareRows && instance.countSourceRows() < priv.settings.maxRows; emptyRows++) {\n            datamap.createRow(instance.countRows(), 1, 'auto');\n          }\n        }\n      }\n      {\n        var emptyCols = void 0;\n\n        // count currently empty cols\n        if (priv.settings.minCols || priv.settings.minSpareCols) {\n          emptyCols = instance.countEmptyCols(true);\n        }\n\n        // should I add empty cols to meet minCols?\n        if (priv.settings.minCols && !priv.settings.columns && instance.countCols() < priv.settings.minCols) {\n          for (; instance.countCols() < priv.settings.minCols; emptyCols++) {\n            datamap.createCol(instance.countCols(), 1, 'auto');\n          }\n        }\n        // should I add empty cols to meet minSpareCols?\n        if (priv.settings.minSpareCols && !priv.settings.columns && instance.dataType === 'array' && emptyCols < priv.settings.minSpareCols) {\n          for (; emptyCols < priv.settings.minSpareCols && instance.countCols() < priv.settings.maxCols; emptyCols++) {\n            datamap.createCol(instance.countCols(), 1, 'auto');\n          }\n        }\n      }\n      var rowCount = instance.countRows();\n      var colCount = instance.countCols();\n\n      if (rowCount === 0 || colCount === 0) {\n        selection.deselect();\n      }\n\n      if (selection.isSelected()) {\n        (0, _array.arrayEach)(selection.selectedRange, function (range) {\n          var selectionChanged = false;\n          var fromRow = range.from.row;\n          var fromCol = range.from.col;\n          var toRow = range.to.row;\n          var toCol = range.to.col;\n\n          // if selection is outside, move selection to last row\n          if (fromRow > rowCount - 1) {\n            fromRow = rowCount - 1;\n            selectionChanged = true;\n\n            if (toRow > fromRow) {\n              toRow = fromRow;\n            }\n          } else if (toRow > rowCount - 1) {\n            toRow = rowCount - 1;\n            selectionChanged = true;\n\n            if (fromRow > toRow) {\n              fromRow = toRow;\n            }\n          }\n          // if selection is outside, move selection to last row\n          if (fromCol > colCount - 1) {\n            fromCol = colCount - 1;\n            selectionChanged = true;\n\n            if (toCol > fromCol) {\n              toCol = fromCol;\n            }\n          } else if (toCol > colCount - 1) {\n            toCol = colCount - 1;\n            selectionChanged = true;\n\n            if (fromCol > toCol) {\n              fromCol = toCol;\n            }\n          }\n\n          if (selectionChanged) {\n            instance.selectCell(fromRow, fromCol, toRow, toCol);\n          }\n        });\n      }\n      if (instance.view) {\n        instance.view.wt.wtOverlays.adjustElementsSize();\n      }\n    },\n\n\n    /**\n     * Populate the data from the provided 2d array from the given cell coordinates.\n     *\n     * @private\n     * @param {Object} start Start selection position. Visual indexes.\n     * @param {Array} input 2d data array.\n     * @param {Object} [end] End selection position (only for drag-down mode). Visual indexes.\n     * @param {String} [source=\"populateFromArray\"] Source information string.\n     * @param {String} [method=\"overwrite\"] Populate method. Possible options: `shift_down`, `shift_right`, `overwrite`.\n     * @param {String} direction (left|right|up|down) String specifying the direction.\n     * @param {Array} deltas The deltas array. A difference between values of adjacent cells.\n     *                       Useful **only** when the type of handled cells is `numeric`.\n     * @returns {Object|undefined} ending td in pasted area (only if any cell was changed).\n     */\n    populateFromArray: function populateFromArray(start, input, end, source, method, direction, deltas) {\n      // TODO: either remove or implement the `direction` argument. Currently it's not working at all.\n      var r = void 0;\n      var rlen = void 0;\n      var c = void 0;\n      var clen = void 0;\n      var setData = [];\n      var current = {};\n\n      rlen = input.length;\n\n      if (rlen === 0) {\n        return false;\n      }\n\n      var repeatCol = void 0;\n      var repeatRow = void 0;\n      var cmax = void 0;\n      var rmax = void 0;\n\n      /* eslint-disable no-case-declarations */\n      // insert data with specified pasteMode method\n      switch (method) {\n        case 'shift_down':\n          repeatCol = end ? end.col - start.col + 1 : 0;\n          repeatRow = end ? end.row - start.row + 1 : 0;\n          // eslint-disable-next-line no-param-reassign\n          input = (0, _data.translateRowsToColumns)(input);\n          for (c = 0, clen = input.length, cmax = Math.max(clen, repeatCol); c < cmax; c++) {\n            if (c < clen) {\n              var _instance;\n\n              for (r = 0, rlen = input[c].length; r < repeatRow - rlen; r++) {\n                input[c].push(input[c][r % rlen]);\n              }\n              input[c].unshift(start.col + c, start.row, 0);\n              (_instance = instance).spliceCol.apply(_instance, _toConsumableArray(input[c]));\n            } else {\n              var _instance2;\n\n              input[c % clen][0] = start.col + c;\n              (_instance2 = instance).spliceCol.apply(_instance2, _toConsumableArray(input[c % clen]));\n            }\n          }\n          break;\n\n        case 'shift_right':\n          repeatCol = end ? end.col - start.col + 1 : 0;\n          repeatRow = end ? end.row - start.row + 1 : 0;\n          for (r = 0, rlen = input.length, rmax = Math.max(rlen, repeatRow); r < rmax; r++) {\n            if (r < rlen) {\n              var _instance3;\n\n              for (c = 0, clen = input[r].length; c < repeatCol - clen; c++) {\n                input[r].push(input[r][c % clen]);\n              }\n              input[r].unshift(start.row + r, start.col, 0);\n              (_instance3 = instance).spliceRow.apply(_instance3, _toConsumableArray(input[r]));\n            } else {\n              var _instance4;\n\n              input[r % rlen][0] = start.row + r;\n              (_instance4 = instance).spliceRow.apply(_instance4, _toConsumableArray(input[r % rlen]));\n            }\n          }\n          break;\n\n        case 'overwrite':\n        default:\n          // overwrite and other not specified options\n          current.row = start.row;\n          current.col = start.col;\n\n          var selected = { // selected range\n            row: end && start ? end.row - start.row + 1 : 1,\n            col: end && start ? end.col - start.col + 1 : 1\n          };\n          var skippedRow = 0;\n          var skippedColumn = 0;\n          var pushData = true;\n          var cellMeta = void 0;\n\n          var getInputValue = function getInputValue(row) {\n            var col = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\n            var rowValue = input[row % input.length];\n\n            if (col !== null) {\n              return rowValue[col % rowValue.length];\n            }\n\n            return rowValue;\n          };\n          var rowInputLength = input.length;\n          var rowSelectionLength = end ? end.row - start.row + 1 : 0;\n\n          if (end) {\n            rlen = rowSelectionLength;\n          } else {\n            rlen = Math.max(rowInputLength, rowSelectionLength);\n          }\n          for (r = 0; r < rlen; r++) {\n            if (end && current.row > end.row && rowSelectionLength > rowInputLength || !priv.settings.allowInsertRow && current.row > instance.countRows() - 1 || current.row >= priv.settings.maxRows) {\n              break;\n            }\n            var visualRow = r - skippedRow;\n            var colInputLength = getInputValue(visualRow).length;\n            var colSelectionLength = end ? end.col - start.col + 1 : 0;\n\n            if (end) {\n              clen = colSelectionLength;\n            } else {\n              clen = Math.max(colInputLength, colSelectionLength);\n            }\n            current.col = start.col;\n            cellMeta = instance.getCellMeta(current.row, current.col);\n\n            if ((source === 'CopyPaste.paste' || source === 'Autofill.autofill') && cellMeta.skipRowOnPaste) {\n              skippedRow += 1;\n              current.row += 1;\n              rlen += 1;\n              /* eslint-disable no-continue */\n              continue;\n            }\n            skippedColumn = 0;\n\n            for (c = 0; c < clen; c++) {\n              if (end && current.col > end.col && colSelectionLength > colInputLength || !priv.settings.allowInsertColumn && current.col > instance.countCols() - 1 || current.col >= priv.settings.maxCols) {\n                break;\n              }\n              cellMeta = instance.getCellMeta(current.row, current.col);\n\n              if ((source === 'CopyPaste.paste' || source === 'Autofill.fill') && cellMeta.skipColumnOnPaste) {\n                skippedColumn += 1;\n                current.col += 1;\n                clen += 1;\n                continue;\n              }\n              if (cellMeta.readOnly) {\n                current.col += 1;\n                /* eslint-disable no-continue */\n                continue;\n              }\n              var visualColumn = c - skippedColumn;\n              var value = getInputValue(visualRow, visualColumn);\n              var orgValue = instance.getDataAtCell(current.row, current.col);\n              var index = {\n                row: visualRow,\n                col: visualColumn\n              };\n\n              if (source === 'Autofill.fill') {\n                var result = instance.runHooks('beforeAutofillInsidePopulate', index, direction, input, deltas, {}, selected);\n\n                if (result) {\n                  value = (0, _mixed.isUndefined)(result.value) ? value : result.value;\n                }\n              }\n              if (value !== null && (typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object') {\n                if (orgValue === null || (typeof orgValue === 'undefined' ? 'undefined' : _typeof(orgValue)) !== 'object') {\n                  pushData = false;\n                } else {\n                  var orgValueSchema = (0, _object.duckSchema)(orgValue[0] || orgValue);\n                  var valueSchema = (0, _object.duckSchema)(value[0] || value);\n\n                  /* eslint-disable max-depth */\n                  if ((0, _object.isObjectEqual)(orgValueSchema, valueSchema)) {\n                    value = (0, _object.deepClone)(value);\n                  } else {\n                    pushData = false;\n                  }\n                }\n              } else if (orgValue !== null && (typeof orgValue === 'undefined' ? 'undefined' : _typeof(orgValue)) === 'object') {\n                pushData = false;\n              }\n              if (pushData) {\n                setData.push([current.row, current.col, value]);\n              }\n              pushData = true;\n              current.col += 1;\n            }\n            current.row += 1;\n          }\n          instance.setDataAtCell(setData, null, null, source || 'populateFromArray');\n          break;\n      }\n    }\n  };\n\n  /**\n   * Internal function to set `language` key of settings.\n   *\n   * @private\n   * @param {String} languageCode Language code for specific language i.e. 'en-US', 'pt-BR', 'de-DE'\n   * @fires Hooks#afterLanguageChange\n   */\n  function setLanguage(languageCode) {\n    var normalizedLanguageCode = (0, _utils.normalizeLanguageCode)(languageCode);\n\n    if ((0, _dictionariesManager.hasLanguageDictionary)(normalizedLanguageCode)) {\n      instance.runHooks('beforeLanguageChange', normalizedLanguageCode);\n\n      GridSettings.prototype.language = normalizedLanguageCode;\n\n      instance.runHooks('afterLanguageChange', normalizedLanguageCode);\n    } else {\n      (0, _utils.warnUserAboutLanguageRegistration)(languageCode);\n    }\n  }\n\n  this.init = function () {\n    dataSource.setData(priv.settings.data);\n    instance.runHooks('beforeInit');\n\n    if ((0, _browser.isMobileBrowser)()) {\n      (0, _element.addClass)(instance.rootElement, 'mobile');\n    }\n\n    this.updateSettings(priv.settings, true);\n\n    this.view = new _tableView2.default(this);\n    editorManager = _editorManager2.default.getInstance(instance, priv, selection, datamap);\n\n    this.forceFullRender = true; // used when data was changed\n\n    instance.runHooks('init');\n    this.view.render();\n\n    if (_typeof(priv.firstRun) === 'object') {\n      instance.runHooks('afterChange', priv.firstRun[0], priv.firstRun[1]);\n      priv.firstRun = false;\n    }\n    instance.runHooks('afterInit');\n  };\n\n  function ValidatorsQueue() {\n    // moved this one level up so it can be used in any function here. Probably this should be moved to a separate file\n    var resolved = false;\n\n    return {\n      validatorsInQueue: 0,\n      valid: true,\n      addValidatorToQueue: function addValidatorToQueue() {\n        this.validatorsInQueue += 1;\n        resolved = false;\n      },\n      removeValidatorFormQueue: function removeValidatorFormQueue() {\n        this.validatorsInQueue = this.validatorsInQueue - 1 < 0 ? 0 : this.validatorsInQueue - 1;\n        this.checkIfQueueIsEmpty();\n      },\n      onQueueEmpty: function onQueueEmpty() {},\n      checkIfQueueIsEmpty: function checkIfQueueIsEmpty() {\n        if (this.validatorsInQueue === 0 && resolved === false) {\n          resolved = true;\n          this.onQueueEmpty(this.valid);\n        }\n      }\n    };\n  }\n\n  /**\n   * Get parsed number from numeric string.\n   *\n   * @private\n   * @param {String} numericData Float (separated by a dot or a comma) or integer.\n   * @returns {Number} Number if we get data in parsable format, not changed value otherwise.\n   */\n  function getParsedNumber(numericData) {\n    // Unifying \"float like\" string. Change from value with comma determiner to value with dot determiner,\n    // for example from `450,65` to `450.65`.\n    var unifiedNumericData = numericData.replace(',', '.');\n\n    if (isNaN(parseFloat(unifiedNumericData)) === false) {\n      return parseFloat(unifiedNumericData);\n    }\n\n    return numericData;\n  }\n\n  function validateChanges(changes, source, callback) {\n    var waitingForValidator = new ValidatorsQueue();\n    var isNumericData = function isNumericData(value) {\n      return value.length > 0 && /^-?[\\d\\s]*(\\.|,)?\\d*$/.test(value);\n    };\n\n    waitingForValidator.onQueueEmpty = resolve;\n\n    for (var i = changes.length - 1; i >= 0; i--) {\n      if (changes[i] === null) {\n        changes.splice(i, 1);\n      } else {\n        var _changes$i = _slicedToArray(changes[i], 4),\n            row = _changes$i[0],\n            prop = _changes$i[1],\n            newValue = _changes$i[3];\n\n        var col = datamap.propToCol(prop);\n        var cellProperties = instance.getCellMeta(row, col);\n\n        if (cellProperties.type === 'numeric' && typeof newValue === 'string' && isNumericData(newValue)) {\n          changes[i][3] = getParsedNumber(newValue);\n        }\n\n        /* eslint-disable no-loop-func */\n        if (instance.getCellValidator(cellProperties)) {\n          waitingForValidator.addValidatorToQueue();\n          instance.validateCell(changes[i][3], cellProperties, function (index, cellPropertiesReference) {\n            return function (result) {\n              if (typeof result !== 'boolean') {\n                throw new Error('Validation error: result is not boolean');\n              }\n              if (result === false && cellPropertiesReference.allowInvalid === false) {\n                changes.splice(index, 1); // cancel the change\n                cellPropertiesReference.valid = true; // we cancelled the change, so cell value is still valid\n                var cell = instance.getCell(cellPropertiesReference.visualRow, cellPropertiesReference.visualCol);\n                (0, _element.removeClass)(cell, instance.getSettings().invalidCellClassName);\n                // index -= 1;\n              }\n              waitingForValidator.removeValidatorFormQueue();\n            };\n          }(i, cellProperties), source);\n        }\n      }\n    }\n    waitingForValidator.checkIfQueueIsEmpty();\n\n    function resolve() {\n      var beforeChangeResult = void 0;\n\n      if (changes.length) {\n        beforeChangeResult = instance.runHooks('beforeChange', changes, source || 'edit');\n        if ((0, _function.isFunction)(beforeChangeResult)) {\n          (0, _console.warn)('Your beforeChange callback returns a function. It\\'s not supported since Handsontable 0.12.1 (and the returned function will not be executed).');\n        } else if (beforeChangeResult === false) {\n          changes.splice(0, changes.length); // invalidate all changes (remove everything from array)\n        }\n      }\n      callback(); // called when async validators are resolved and beforeChange was not async\n    }\n  }\n\n  /**\n   * Internal function to apply changes. Called after validateChanges\n   *\n   * @private\n   * @param {Array} changes Array in form of [row, prop, oldValue, newValue]\n   * @param {String} source String that identifies how this change will be described in changes array (useful in onChange callback)\n   * @fires Hooks#beforeChangeRender\n   * @fires Hooks#afterChange\n   */\n  function applyChanges(changes, source) {\n    var i = changes.length - 1;\n\n    if (i < 0) {\n      return;\n    }\n\n    for (; i >= 0; i--) {\n      var skipThisChange = false;\n\n      if (changes[i] === null) {\n        changes.splice(i, 1);\n        /* eslint-disable no-continue */\n        continue;\n      }\n\n      if ((changes[i][2] === null || changes[i][2] === void 0) && (changes[i][3] === null || changes[i][3] === void 0)) {\n        /* eslint-disable no-continue */\n        continue;\n      }\n\n      if (priv.settings.allowInsertRow) {\n        while (changes[i][0] > instance.countRows() - 1) {\n          var numberOfCreatedRows = datamap.createRow(void 0, void 0, source);\n\n          if (numberOfCreatedRows === 0) {\n            skipThisChange = true;\n            break;\n          }\n        }\n      }\n\n      if (skipThisChange) {\n        /* eslint-disable no-continue */\n        continue;\n      }\n\n      if (instance.dataType === 'array' && (!priv.settings.columns || priv.settings.columns.length === 0) && priv.settings.allowInsertColumn) {\n        while (datamap.propToCol(changes[i][1]) > instance.countCols() - 1) {\n          datamap.createCol(void 0, void 0, source);\n        }\n      }\n\n      datamap.set(changes[i][0], changes[i][1], changes[i][3]);\n    }\n\n    instance.forceFullRender = true; // used when data was changed\n    grid.adjustRowsAndCols();\n    instance.runHooks('beforeChangeRender', changes, source);\n    editorManager.lockEditor();\n    instance._refreshBorders(null);\n    editorManager.unlockEditor();\n    instance.view.wt.wtOverlays.adjustElementsSize();\n    instance.runHooks('afterChange', changes, source || 'edit');\n\n    var activeEditor = instance.getActiveEditor();\n\n    if (activeEditor && (0, _mixed.isDefined)(activeEditor.refreshValue)) {\n      activeEditor.refreshValue();\n    }\n  }\n\n  /**\n   * Validate a single cell.\n   *\n   * @param {String|Number} value\n   * @param cellProperties\n   * @param callback\n   * @param source\n   */\n  this.validateCell = function (value, cellProperties, callback, source) {\n    var validator = instance.getCellValidator(cellProperties);\n\n    // the `canBeValidated = false` argument suggests, that the cell passes validation by default.\n    function done(valid) {\n      var canBeValidated = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n      // Fixes GH#3903\n      if (!canBeValidated || cellProperties.hidden === true) {\n        callback(valid);\n        return;\n      }\n\n      var col = cellProperties.visualCol;\n      var row = cellProperties.visualRow;\n      var td = instance.getCell(row, col, true);\n\n      if (td && td.nodeName !== 'TH') {\n        instance.view.wt.wtSettings.settings.cellRenderer(row, col, td);\n      }\n      callback(valid);\n    }\n\n    if ((0, _mixed.isRegExp)(validator)) {\n      validator = function (expression) {\n        return function (cellValue, validatorCallback) {\n          validatorCallback(expression.test(cellValue));\n        };\n      }(validator);\n    }\n\n    if ((0, _function.isFunction)(validator)) {\n      // eslint-disable-next-line no-param-reassign\n      value = instance.runHooks('beforeValidate', value, cellProperties.visualRow, cellProperties.prop, source);\n\n      // To provide consistent behaviour, validation should be always asynchronous\n      instance._registerTimeout(setTimeout(function () {\n        validator.call(cellProperties, value, function (valid) {\n          // eslint-disable-next-line no-param-reassign\n          valid = instance.runHooks('afterValidate', valid, value, cellProperties.visualRow, cellProperties.prop, source);\n          cellProperties.valid = valid;\n\n          done(valid);\n          instance.runHooks('postAfterValidate', valid, value, cellProperties.visualRow, cellProperties.prop, source);\n        });\n      }, 0));\n    } else {\n      // resolve callback even if validator function was not found\n      instance._registerTimeout(setTimeout(function () {\n        cellProperties.valid = true;\n        done(cellProperties.valid, false);\n      }, 0));\n    }\n  };\n\n  function setDataInputToArray(row, propOrCol, value) {\n    if ((typeof row === 'undefined' ? 'undefined' : _typeof(row)) === 'object') {\n      // is it an array of changes\n      return row;\n    }\n    return [[row, propOrCol, value]];\n  }\n\n  /**\n   * @description\n   * Set new value to a cell. To change many cells at once (recommended way), pass an array of `changes` in format\n   * `[[row, col, value],...]` as the first argument.\n   *\n   * @memberof Core#\n   * @function setDataAtCell\n   * @param {Number|Array} row Visual row index or array of changes in format `[[row, col, value],...]`.\n   * @param {Number} [column] Visual column index.\n   * @param {String} [value] New value.\n   * @param {String} [source] String that identifies how this change will be described in the changes array (useful in onAfterChange or onBeforeChange callback).\n   */\n  this.setDataAtCell = function (row, column, value, source) {\n    var input = setDataInputToArray(row, column, value);\n    var changes = [];\n    var changeSource = source;\n    var i = void 0;\n    var ilen = void 0;\n    var prop = void 0;\n\n    for (i = 0, ilen = input.length; i < ilen; i++) {\n      if (_typeof(input[i]) !== 'object') {\n        throw new Error('Method `setDataAtCell` accepts row number or changes array of arrays as its first parameter');\n      }\n      if (typeof input[i][1] !== 'number') {\n        throw new Error('Method `setDataAtCell` accepts row and column number as its parameters. If you want to use object property name, use method `setDataAtRowProp`');\n      }\n      prop = datamap.colToProp(input[i][1]);\n      changes.push([input[i][0], prop, dataSource.getAtCell(recordTranslator.toPhysicalRow(input[i][0]), input[i][1]), input[i][2]]);\n    }\n\n    if (!changeSource && (typeof row === 'undefined' ? 'undefined' : _typeof(row)) === 'object') {\n      changeSource = column;\n    }\n\n    instance.runHooks('afterSetDataAtCell', changes, changeSource);\n\n    validateChanges(changes, changeSource, function () {\n      applyChanges(changes, changeSource);\n    });\n  };\n\n  /**\n   * @description\n   * Set new value to a cell. To change many cells at once (recommended way), pass an array of `changes` in format\n   * `[[row, prop, value],...]` as the first argument.\n   *\n   * @memberof Core#\n   * @function setDataAtRowProp\n   * @param {Number|Array} row Visual row index or array of changes in format `[[row, prop, value], ...]`.\n   * @param {String} prop Property name or the source string (e.g. `'first.name'` or `'0'`).\n   * @param {String} value Value to be set.\n   * @param {String} [source] String that identifies how this change will be described in changes array (useful in onChange callback).\n   */\n  this.setDataAtRowProp = function (row, prop, value, source) {\n    var input = setDataInputToArray(row, prop, value);\n    var changes = [];\n    var changeSource = source;\n    var i = void 0;\n    var ilen = void 0;\n\n    for (i = 0, ilen = input.length; i < ilen; i++) {\n      changes.push([input[i][0], input[i][1], dataSource.getAtCell(recordTranslator.toPhysicalRow(input[i][0]), input[i][1]), input[i][2]]);\n    }\n\n    if (!changeSource && (typeof row === 'undefined' ? 'undefined' : _typeof(row)) === 'object') {\n      changeSource = prop;\n    }\n\n    instance.runHooks('afterSetDataAtRowProp', changes, changeSource);\n\n    validateChanges(changes, changeSource, function () {\n      applyChanges(changes, changeSource);\n    });\n  };\n\n  /**\n   * Listen to the keyboard input on document body. This allows Handsontable to capture keyboard events and respond\n   * in the right way.\n   *\n   * @memberof Core#\n   * @function listen\n   * @param {Boolean} [modifyDocumentFocus=true] If `true`, currently focused element will be blured (which returns focus\n   *                                             to the document.body). Otherwise the active element does not lose its focus.\n   * @fires Hooks#afterListen\n   */\n  this.listen = function () {\n    var modifyDocumentFocus = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n\n    if (modifyDocumentFocus) {\n      var invalidActiveElement = !document.activeElement || document.activeElement && document.activeElement.nodeName === void 0;\n\n      if (document.activeElement && document.activeElement !== document.body && !invalidActiveElement) {\n        document.activeElement.blur();\n      } else if (invalidActiveElement) {\n        // IE\n        document.body.focus();\n      }\n    }\n\n    if (instance && !instance.isListening()) {\n      activeGuid = instance.guid;\n      instance.runHooks('afterListen');\n    }\n  };\n\n  /**\n   * Stop listening to keyboard input on the document body. Calling this method makes the Handsontable inactive for\n   * any keyboard events.\n   *\n   * @memberof Core#\n   * @function unlisten\n   */\n  this.unlisten = function () {\n    if (this.isListening()) {\n      activeGuid = null;\n      instance.runHooks('afterUnlisten');\n    }\n  };\n\n  /**\n   * Returns `true` if the current Handsontable instance is listening to keyboard input on document body.\n   *\n   * @memberof Core#\n   * @function isListening\n   * @returns {Boolean} `true` if the instance is listening, `false` otherwise.\n   */\n  this.isListening = function () {\n    return activeGuid === instance.guid;\n  };\n\n  /**\n   * Destroys the current editor, render the table and prepares the editor of the newly selected cell.\n   *\n   * @memberof Core#\n   * @function destroyEditor\n   * @param {Boolean} [revertOriginal=false] If `true`, the previous value will be restored. Otherwise, the edited value will be saved.\n   * @param {Boolean} [prepareEditorIfNeeded=true] If `true` the editor under the selected cell will be prepared to open.\n   */\n  this.destroyEditor = function () {\n    var revertOriginal = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n    var prepareEditorIfNeeded = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n    instance._refreshBorders(revertOriginal, prepareEditorIfNeeded);\n  };\n\n  /**\n   * Populate cells at position with 2D input array (e.g. `[[1, 2], [3, 4]]`). Use `endRow`, `endCol` when you\n   * want to cut input when a certain row is reached.\n   *\n   * Optional `method` argument has the same effect as pasteMode option (see {@link Options#pasteMode}).\n   *\n   * @memberof Core#\n   * @function populateFromArray\n   * @param {Number} row Start visual row index.\n   * @param {Number} column Start visual column index.\n   * @param {Array} input 2d array\n   * @param {Number} [endRow] End visual row index (use when you want to cut input when certain row is reached).\n   * @param {Number} [endCol] End visual column index (use when you want to cut input when certain column is reached).\n   * @param {String} [source=populateFromArray] Used to identify this call in the resulting events (beforeChange, afterChange).\n   * @param {String} [method=overwrite] Populate method, possible values: `'shift_down'`, `'shift_right'`, `'overwrite'`.\n   * @param {String} direction Populate direction, possible values: `'left'`, `'right'`, `'up'`, `'down'`.\n   * @param {Array} deltas The deltas array. A difference between values of adjacent cells.\n   *                       Useful **only** when the type of handled cells is `numeric`.\n   */\n  this.populateFromArray = function (row, column, input, endRow, endCol, source, method, direction, deltas) {\n    if (!((typeof input === 'undefined' ? 'undefined' : _typeof(input)) === 'object' && _typeof(input[0]) === 'object')) {\n      throw new Error('populateFromArray parameter `input` must be an array of arrays'); // API changed in 0.9-beta2, let's check if you use it correctly\n    }\n\n    var c = typeof endRow === 'number' ? new _src.CellCoords(endRow, endCol) : null;\n\n    return grid.populateFromArray(new _src.CellCoords(row, column), input, c, source, method, direction, deltas);\n  };\n\n  /**\n   * Adds/removes data from the column. This method works the same as Array.splice for arrays (see {@link DataMap#spliceCol}).\n   *\n   * @memberof Core#\n   * @function spliceCol\n   * @param {Number} column Index of the column in which do you want to do splice.\n   * @param {Number} index Index at which to start changing the array. If negative, will begin that many elements from the end.\n   * @param {Number} amount An integer indicating the number of old array elements to remove. If amount is 0, no elements are removed.\n   * @param {...Number} [elements] The elements to add to the array. If you don't specify any elements, spliceCol simply removes elements from the array.\n   */\n  this.spliceCol = function (column, index, amount) {\n    var _datamap;\n\n    for (var _len2 = arguments.length, elements = Array(_len2 > 3 ? _len2 - 3 : 0), _key = 3; _key < _len2; _key++) {\n      elements[_key - 3] = arguments[_key];\n    }\n\n    return (_datamap = datamap).spliceCol.apply(_datamap, [column, index, amount].concat(elements));\n  };\n\n  /**\n   * Adds/removes data from the row. This method works the same as Array.splice for arrays (see {@link DataMap#spliceRow}).\n   *\n   * @memberof Core#\n   * @function spliceRow\n   * @param {Number} row Index of column in which do you want to do splice.\n   * @param {Number} index Index at which to start changing the array. If negative, will begin that many elements from the end.\n   * @param {Number} amount An integer indicating the number of old array elements to remove. If amount is 0, no elements are removed.\n   * @param {...Number} [elements] The elements to add to the array. If you don't specify any elements, spliceCol simply removes elements from the array.\n   */\n  this.spliceRow = function (row, index, amount) {\n    var _datamap2;\n\n    for (var _len3 = arguments.length, elements = Array(_len3 > 3 ? _len3 - 3 : 0), _key2 = 3; _key2 < _len3; _key2++) {\n      elements[_key2 - 3] = arguments[_key2];\n    }\n\n    return (_datamap2 = datamap).spliceRow.apply(_datamap2, [row, index, amount].concat(elements));\n  };\n\n  /**\n   * Returns indexes of the currently selected cells as an array of arrays `[[startRow, startCol, endRow, endCol],...]`.\n   *\n   * Start row and start column are the coordinates of the active cell (where the selection was started).\n   *\n   * The version 0.36.0 adds a non-consecutive selection feature. Since this version, the method returns an array of arrays.\n   * Additionally to collect the coordinates of the currently selected area (as it was previously done by the method)\n   * you need to use `getSelectedLast` method.\n   *\n   * @memberof Core#\n   * @function getSelected\n   * @returns {Array[]|undefined} An array of arrays of the selection's coordinates.\n   */\n  this.getSelected = function () {\n    // https://github.com/handsontable/handsontable/issues/44  //cjl\n    if (selection.isSelected()) {\n      return (0, _array.arrayMap)(selection.getSelectedRange(), function (_ref11) {\n        var from = _ref11.from,\n            to = _ref11.to;\n        return [from.row, from.col, to.row, to.col];\n      });\n    }\n  };\n\n  /**\n   * Returns the last coordinates applied to the table as a an array `[startRow, startCol, endRow, endCol]`.\n   *\n   * @since 0.36.0\n   * @memberof Core#\n   * @function getSelectedLast\n   * @returns {Array|undefined} An array of the selection's coordinates.\n   */\n  this.getSelectedLast = function () {\n    var selected = this.getSelected();\n    var result = void 0;\n\n    if (selected && selected.length > 0) {\n      result = selected[selected.length - 1];\n    }\n\n    return result;\n  };\n\n  /**\n   * Returns the current selection as an array of CellRange objects.\n   *\n   * The version 0.36.0 adds a non-consecutive selection feature. Since this version, the method returns an array of arrays.\n   * Additionally to collect the coordinates of the currently selected area (as it was previously done by the method)\n   * you need to use `getSelectedRangeLast` method.\n   *\n   * @memberof Core#\n   * @function getSelectedRange\n   * @returns {CellRange[]|undefined} Selected range object or undefined if there is no selection.\n   */\n  this.getSelectedRange = function () {\n    // https://github.com/handsontable/handsontable/issues/44  //cjl\n    if (selection.isSelected()) {\n      return Array.from(selection.getSelectedRange());\n    }\n  };\n\n  /**\n  * Returns the last coordinates applied to the table as a CellRange object.\n  *\n  * @memberof Core#\n  * @function getSelectedRangeLast\n  * @since 0.36.0\n  * @returns {CellRange|undefined} Selected range object or undefined` if there is no selection.\n   */\n  this.getSelectedRangeLast = function () {\n    var selectedRange = this.getSelectedRange();\n    var result = void 0;\n\n    if (selectedRange && selectedRange.length > 0) {\n      result = selectedRange[selectedRange.length - 1];\n    }\n\n    return result;\n  };\n\n  /**\n   * Erases content from cells that have been selected in the table.\n   *\n   * @memberof Core#\n   * @function emptySelectedCells\n   * @since 0.36.0\n   */\n  this.emptySelectedCells = function () {\n    var _this2 = this;\n\n    if (!selection.isSelected()) {\n      return;\n    }\n    var changes = [];\n\n    (0, _array.arrayEach)(selection.getSelectedRange(), function (cellRange) {\n      var topLeft = cellRange.getTopLeftCorner();\n      var bottomRight = cellRange.getBottomRightCorner();\n\n      (0, _number.rangeEach)(topLeft.row, bottomRight.row, function (row) {\n        (0, _number.rangeEach)(topLeft.col, bottomRight.col, function (column) {\n          if (!_this2.getCellMeta(row, column).readOnly) {\n            changes.push([row, column, '']);\n          }\n        });\n      });\n    });\n\n    if (changes.length > 0) {\n      this.setDataAtCell(changes);\n    }\n  };\n\n  /**\n   * Rerender the table. Calling this method starts the process of recalculating, redrawing and applying the changes\n   * to the DOM. While rendering the table all cell renderers are recalled.\n   *\n   * Calling this method manually is not recommended. Handsontable tries to render itself by choosing the most\n   * optimal moments in its lifecycle.\n   *\n   * @memberof Core#\n   * @function render\n   */\n  this.render = function () {\n    if (instance.view) {\n      instance.renderCall = true;\n      instance.forceFullRender = true; // used when data was changed\n      editorManager.lockEditor();\n      instance._refreshBorders(null);\n      editorManager.unlockEditor();\n    }\n  };\n\n  /**\n   * Loads new data to Handsontable. Loading new data resets the cell meta.\n   *\n   * @memberof Core#\n   * @function loadData\n   * @param {Array} data Array of arrays or array of objects containing data.\n   * @fires Hooks#afterLoadData\n   * @fires Hooks#afterChange\n   */\n  this.loadData = function (data) {\n    if (Array.isArray(priv.settings.dataSchema)) {\n      instance.dataType = 'array';\n    } else if ((0, _function.isFunction)(priv.settings.dataSchema)) {\n      instance.dataType = 'function';\n    } else {\n      instance.dataType = 'object';\n    }\n\n    if (datamap) {\n      datamap.destroy();\n    }\n    datamap = new _dataMap2.default(instance, priv, GridSettings);\n\n    if ((typeof data === 'undefined' ? 'undefined' : _typeof(data)) === 'object' && data !== null) {\n      if (!(data.push && data.splice)) {\n        // check if data is array. Must use duck-type check so Backbone Collections also pass it\n        // when data is not an array, attempt to make a single-row array of it\n        // eslint-disable-next-line no-param-reassign\n        data = [data];\n      }\n    } else if (data === null) {\n      var dataSchema = datamap.getSchema();\n      // eslint-disable-next-line no-param-reassign\n      data = [];\n      var row = void 0;\n      var r = 0;\n      var rlen = 0;\n\n      for (r = 0, rlen = priv.settings.startRows; r < rlen; r++) {\n        if ((instance.dataType === 'object' || instance.dataType === 'function') && priv.settings.dataSchema) {\n          row = (0, _object.deepClone)(dataSchema);\n          data.push(row);\n        } else if (instance.dataType === 'array') {\n          row = (0, _object.deepClone)(dataSchema[0]);\n          data.push(row);\n        } else {\n          row = [];\n\n          for (var c = 0, clen = priv.settings.startCols; c < clen; c++) {\n            row.push(null);\n          }\n\n          data.push(row);\n        }\n      }\n    } else {\n      throw new Error('loadData only accepts array of objects or array of arrays (' + (typeof data === 'undefined' ? 'undefined' : _typeof(data)) + ' given)');\n    }\n\n    priv.isPopulated = false;\n    GridSettings.prototype.data = data;\n\n    if (Array.isArray(data[0])) {\n      instance.dataType = 'array';\n    }\n\n    datamap.dataSource = data;\n    dataSource.data = data;\n    dataSource.dataType = instance.dataType;\n    dataSource.colToProp = datamap.colToProp.bind(datamap);\n    dataSource.propToCol = datamap.propToCol.bind(datamap);\n\n    clearCellSettingCache();\n\n    grid.adjustRowsAndCols();\n    instance.runHooks('afterLoadData', priv.firstRun);\n\n    if (priv.firstRun) {\n      priv.firstRun = [null, 'loadData'];\n    } else {\n      instance.runHooks('afterChange', null, 'loadData');\n      instance.render();\n    }\n    priv.isPopulated = true;\n\n    function clearCellSettingCache() {\n      priv.cellSettings.length = 0;\n    }\n  };\n\n  /**\n   * Returns the current data object (the same one that was passed by `data` configuration option or `loadData` method,\n   * unless the `modifyRow` hook was used to trim some of the rows. If that's the case - use the {@link Core#getSourceData} method.).\n   *\n   * Optionally you can provide cell range by defining `row`, `column`, `row2`, `column2` to get only a fragment of table data.\n   *\n   * @memberof Core#\n   * @function getData\n   * @param {Number} [row] From visual row index.\n   * @param {Number} [column] From visual column index.\n   * @param {Number} [row2] To visual row index.\n   * @param {Number} [column2] To visual column index.\n   * @returns {Array[]} Array with the data.\n   * @example\n   * ```js\n   * // Get all data (in order how it is rendered in the table).\n   * hot.getData();\n   * // Get data fragment (from top-left 0, 0 to bottom-right 3, 3).\n   * hot.getData(3, 3);\n   * // Get data fragment (from top-left 2, 1 to bottom-right 3, 3).\n   * hot.getData(2, 1, 3, 3);\n   * ```\n   */\n  this.getData = function (row, column, row2, column2) {\n    if ((0, _mixed.isUndefined)(row)) {\n      return datamap.getAll();\n    }\n\n    return datamap.getRange(new _src.CellCoords(row, column), new _src.CellCoords(row2, column2), datamap.DESTINATION_RENDERER);\n  };\n\n  /**\n   * Returns a string value of the selected range. Each column is separated by tab, each row is separated by a new\n   * line character (see {@link DataMap#getCopyableText}).\n   *\n   * @memberof Core#\n   * @function getCopyableText\n   * @param {Number} startRow From visual row index.\n   * @param {Number} startCol From visual column index.\n   * @param {Number} endRow To visual row index.\n   * @param {Number} endCol To visual column index.\n   * @returns {String}\n   */\n  this.getCopyableText = function (startRow, startCol, endRow, endCol) {\n    return datamap.getCopyableText(new _src.CellCoords(startRow, startCol), new _src.CellCoords(endRow, endCol));\n  };\n\n  /**\n   * Returns the data's copyable value at specified `row` and `column` index (see {@link DataMap#getCopyable}).\n   *\n   * @memberof Core#\n   * @function getCopyableData\n   * @param {Number} row Visual row index.\n   * @param {Number} column Visual column index.\n   * @returns {String}\n   */\n  this.getCopyableData = function (row, column) {\n    return datamap.getCopyable(row, datamap.colToProp(column));\n  };\n\n  /**\n   * Returns schema provided by constructor settings. If it doesn't exist then it returns the schema based on the data\n   * structure in the first row.\n   *\n   * @memberof Core#\n   * @function getSchema\n   * @returns {Object} Schema object.\n   */\n  this.getSchema = function () {\n    return datamap.getSchema();\n  };\n\n  /**\n   * Use it if you need to change configuration after initialization. The `settings` argument is an object containing the new\n   * settings, declared the same way as in the initial settings object.\n   *\n   * __Note__, that although the `updateSettings` method doesn't overwrite the previously declared settings, it might reset\n   * the settings made post-initialization. (for example - ignore changes made using the columnResize feature).\n   *\n   * @memberof Core#\n   * @function updateSettings\n   * @param {Object} settings New settings object (see {@link Options}).\n   * @param {Boolean} [init=false] Internally used for in initialization mode.\n   * @example\n   * ```js\n   * hot.updateSettings({\n   *    contextMenu: true,\n   *    colHeaders: true,\n   *    fixedRowsTop: 2\n   * });\n   * ```\n   * @fires Hooks#afterCellMetaReset\n   * @fires Hooks#afterUpdateSettings\n   */\n  this.updateSettings = function (settings) {\n    var init = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n    var columnsAsFunc = false;\n    var i = void 0;\n    var j = void 0;\n    var clen = void 0;\n\n    if ((0, _mixed.isDefined)(settings.rows)) {\n      throw new Error('\"rows\" setting is no longer supported. do you mean startRows, minRows or maxRows?');\n    }\n    if ((0, _mixed.isDefined)(settings.cols)) {\n      throw new Error('\"cols\" setting is no longer supported. do you mean startCols, minCols or maxCols?');\n    }\n\n    // eslint-disable-next-line no-restricted-syntax\n    for (i in settings) {\n      if (i === 'data') {\n        /* eslint-disable-next-line no-continue */\n        continue; // loadData will be triggered later\n      } else if (i === 'language') {\n        setLanguage(settings.language);\n\n        /* eslint-disable-next-line no-continue */\n        continue;\n      } else if (_pluginHooks2.default.getSingleton().getRegistered().indexOf(i) > -1) {\n        if ((0, _function.isFunction)(settings[i]) || Array.isArray(settings[i])) {\n          settings[i].initialHook = true;\n          instance.addHook(i, settings[i]);\n        }\n      } else if (!init && (0, _object.hasOwnProperty)(settings, i)) {\n        // Update settings\n        GridSettings.prototype[i] = settings[i];\n      }\n    }\n\n    // Load data or create data map\n    if (settings.data === void 0 && priv.settings.data === void 0) {\n      instance.loadData(null); // data source created just now\n    } else if (settings.data !== void 0) {\n      instance.loadData(settings.data); // data source given as option\n    } else if (settings.columns !== void 0) {\n      datamap.createMap();\n    }\n\n    clen = instance.countCols();\n\n    var columnSetting = settings.columns || GridSettings.prototype.columns;\n\n    // Init columns constructors configuration\n    if (columnSetting && (0, _function.isFunction)(columnSetting)) {\n      clen = instance.countSourceCols();\n      columnsAsFunc = true;\n    }\n\n    // Clear cellSettings cache\n    if (settings.cell !== void 0 || settings.cells !== void 0 || settings.columns !== void 0) {\n      priv.cellSettings.length = 0;\n    }\n\n    if (clen > 0) {\n      var proto = void 0;\n      var column = void 0;\n\n      for (i = 0, j = 0; i < clen; i++) {\n        if (columnsAsFunc && !columnSetting(i)) {\n          /* eslint-disable no-continue */\n          continue;\n        }\n        priv.columnSettings[j] = (0, _setting.columnFactory)(GridSettings, priv.columnsSettingConflicts);\n\n        // shortcut for prototype\n        proto = priv.columnSettings[j].prototype;\n\n        // Use settings provided by user\n        if (columnSetting) {\n          if (columnsAsFunc) {\n            column = columnSetting(i);\n          } else {\n            column = columnSetting[j];\n          }\n\n          if (column) {\n            (0, _object.extend)(proto, column);\n            (0, _object.extend)(proto, expandType(column));\n          }\n        }\n\n        j += 1;\n      }\n    }\n\n    if ((0, _mixed.isDefined)(settings.cell)) {\n      (0, _object.objectEach)(settings.cell, function (cell) {\n        instance.setCellMetaObject(cell.row, cell.col, cell);\n      });\n    }\n\n    instance.runHooks('afterCellMetaReset');\n\n    if ((0, _mixed.isDefined)(settings.className)) {\n      if (GridSettings.prototype.className) {\n        (0, _element.removeClass)(instance.rootElement, GridSettings.prototype.className);\n      }\n      if (settings.className) {\n        (0, _element.addClass)(instance.rootElement, settings.className);\n      }\n    }\n\n    var currentHeight = instance.rootElement.style.height;\n    if (currentHeight !== '') {\n      currentHeight = parseInt(instance.rootElement.style.height, 10);\n    }\n\n    var height = settings.height;\n    if ((0, _function.isFunction)(height)) {\n      height = height();\n    }\n\n    if (init) {\n      var initialStyle = instance.rootElement.getAttribute('style');\n\n      if (initialStyle) {\n        instance.rootElement.setAttribute('data-initialstyle', instance.rootElement.getAttribute('style'));\n      }\n    }\n\n    if (height === null) {\n      var _initialStyle = instance.rootElement.getAttribute('data-initialstyle');\n\n      if (_initialStyle && (_initialStyle.indexOf('height') > -1 || _initialStyle.indexOf('overflow') > -1)) {\n        instance.rootElement.setAttribute('style', _initialStyle);\n      } else {\n        instance.rootElement.style.height = '';\n        instance.rootElement.style.overflow = '';\n      }\n    } else if (height !== void 0) {\n      instance.rootElement.style.height = height + 'px';\n      instance.rootElement.style.overflow = 'hidden';\n    }\n\n    if (typeof settings.width !== 'undefined') {\n      var width = settings.width;\n\n      if ((0, _function.isFunction)(width)) {\n        width = width();\n      }\n\n      instance.rootElement.style.width = width + 'px';\n    }\n\n    if (!init) {\n      datamap.clearLengthCache(); // force clear cache length on updateSettings() #3416\n\n      if (instance.view) {\n        instance.view.wt.wtViewport.resetHasOversizedColumnHeadersMarked();\n      }\n\n      instance.runHooks('afterUpdateSettings', settings);\n    }\n\n    grid.adjustRowsAndCols();\n    if (instance.view && !priv.firstRun) {\n      instance.forceFullRender = true; // used when data was changed\n      editorManager.lockEditor();\n      instance._refreshBorders(null);\n      editorManager.unlockEditor();\n    }\n\n    if (!init && instance.view && (currentHeight === '' || height === '' || height === void 0) && currentHeight !== height) {\n      instance.view.wt.wtOverlays.updateMainScrollableElements();\n    }\n  };\n\n  /**\n   * Get value from the selected cell.\n   *\n   * @memberof Core#\n   * @function getValue\n   * @returns {*} Value of selected cell.\n   */\n  this.getValue = function () {\n    var sel = instance.getSelectedLast();\n\n    if (GridSettings.prototype.getValue) {\n      if ((0, _function.isFunction)(GridSettings.prototype.getValue)) {\n        return GridSettings.prototype.getValue.call(instance);\n      } else if (sel) {\n        return instance.getData()[sel[0][0]][GridSettings.prototype.getValue];\n      }\n    } else if (sel) {\n      return instance.getDataAtCell(sel[0], sel[1]);\n    }\n  };\n\n  function expandType(obj) {\n    if (!(0, _object.hasOwnProperty)(obj, 'type')) {\n      // ignore obj.prototype.type\n      return;\n    }\n\n    var expandedType = {};\n    var type = void 0;\n\n    if (_typeof(obj.type) === 'object') {\n      type = obj.type;\n    } else if (typeof obj.type === 'string') {\n      type = (0, _cellTypes.getCellType)(obj.type);\n    }\n\n    // eslint-disable-next-line no-restricted-syntax\n    for (var i in type) {\n      if ((0, _object.hasOwnProperty)(type, i) && !(0, _object.hasOwnProperty)(obj, i)) {\n        expandedType[i] = type[i];\n      }\n    }\n\n    return expandedType;\n  }\n\n  /**\n   * Returns the object settings.\n   *\n   * @memberof Core#\n   * @function getSettings\n   * @returns {Object} Object containing the current table settings.\n   */\n  this.getSettings = function () {\n    return priv.settings;\n  };\n\n  /**\n   * Clears the data from the table (the table settings remain intact).\n   *\n   * @memberof Core#\n   * @function clear\n   */\n  this.clear = function () {\n    this.selectAll();\n    this.emptySelectedCells();\n  };\n\n  /**\n   * Allows altering the table structure by either inserting/removing rows or columns.\n   *\n   * @memberof Core#\n   * @function alter\n   * @param {String} action Possible alter operations:\n   *  * `'insert_row'`\n   *  * `'insert_col'`\n   *  * `'remove_row'`\n   *  * `'remove_col'`\n   * @param {Number|Number[]} index Visual index of the row/column before which the new row/column will be\n   *                                inserted/removed or an array of arrays in format `[[index, amount],...]`.\n   * @param {Number} [amount=1] Amount of rows/columns to be inserted or removed.\n   * @param {String} [source] Source indicator.\n   * @param {Boolean} [keepEmptyRows] Flag for preventing deletion of empty rows.\n   * @example\n   * ```js\n   * // Insert new row above the row at given visual index.\n   * hot.alter('insert_row', 10);\n   * // Insert 3 new columns before 10th column.\n   * hot.alter('insert_col', 10, 3);\n   * // Remove 2 rows starting from 10th row.\n   * hot.alter('remove_row', 10, 2);\n   * // Remove 5 non-contiquous rows (it removes 3 rows from visual index 1 and 2 rows from visual index 5).\n   * hot.alter('remove_row', [[1, 3], [5, 2]]);\n   * ```\n   */\n  this.alter = function (action, index, amount, source, keepEmptyRows) {\n    grid.alter(action, index, amount, source, keepEmptyRows);\n  };\n\n  /**\n   * Returns a TD element for the given `row` and `column` arguments, if it is rendered on screen.\n   * Returns `null` if the TD is not rendered on screen (probably because that part of the table is not visible).\n   *\n   * @memberof Core#\n   * @function getCell\n   * @param {Number} row Visual row index.\n   * @param {Number} column Visual column index.\n   * @param {Boolean} [topmost=false] If set to `true`, it returns the TD element from the topmost overlay. For example,\n   * if the wanted cell is in the range of fixed rows, it will return a TD element from the `top` overlay.\n   * @returns {HTMLTableCellElement|null} The cell's TD element.\n   */\n  this.getCell = function (row, column) {\n    var topmost = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n    return instance.view.getCellAtCoords(new _src.CellCoords(row, column), topmost);\n  };\n\n  /**\n   * Returns the coordinates of the cell, provided as a HTML table cell element.\n   *\n   * @memberof Core#\n   * @function getCoords\n   * @param {HTMLTableCellElement} element The HTML Element representing the cell.\n   * @returns {CellCoords} Visual coordinates object.\n   * @example\n   * ```js\n   * hot.getCoords(hot.getCell(1, 1));\n   * // it returns CellCoords object instance with props row: 1 and col: 1.\n   * ```\n   */\n  this.getCoords = function (element) {\n    return this.view.wt.wtTable.getCoords.call(this.view.wt.wtTable, element);\n  };\n\n  /**\n   * Returns the property name that corresponds with the given column index (see {@link DataMap#colToProp}).\n   * If the data source is an array of arrays, it returns the columns index.\n   *\n   * @memberof Core#\n   * @function colToProp\n   * @param {Number} column Visual column index.\n   * @returns {String|Number} Column property or physical column index.\n   */\n  this.colToProp = function (column) {\n    return datamap.colToProp(column);\n  };\n\n  /**\n   * Returns column index that corresponds with the given property (see {@link DataMap#propToCol}).\n   *\n   * @memberof Core#\n   * @function propToCol\n   * @param {String|Number} prop Property name or physical column index.\n   * @returns {Number} Visual column index.\n   */\n  this.propToCol = function (prop) {\n    return datamap.propToCol(prop);\n  };\n\n  /**\n   * Translate physical row index into visual.\n   *\n   * This method is useful when you want to retrieve visual row index which can be reordered, moved or trimmed\n   * based on a physical index\n   *\n   * @memberof Core#\n   * @function toVisualRow\n   * @param {Number} row Physical row index.\n   * @returns {Number} Returns visual row index.\n   */\n  this.toVisualRow = function (row) {\n    return recordTranslator.toVisualRow(row);\n  };\n\n  /**\n   * Translate physical column index into visual.\n   *\n   * This method is useful when you want to retrieve visual column index which can be reordered, moved or trimmed\n   * based on a physical index\n   *\n   * @memberof Core#\n   * @function toVisualColumn\n   * @param {Number} column Physical column index.\n   * @returns {Number} Returns visual column index.\n   */\n  this.toVisualColumn = function (column) {\n    return recordTranslator.toVisualColumn(column);\n  };\n\n  /**\n   * Translate visual row index into physical.\n   *\n   * This method is useful when you want to retrieve physical row index based on a visual index which can be\n   * reordered, moved or trimmed.\n   *\n   * @memberof Core#\n   * @function toPhysicalRow\n   * @param {Number} row Visual row index.\n   * @returns {Number} Returns physical row index.\n   */\n  this.toPhysicalRow = function (row) {\n    return recordTranslator.toPhysicalRow(row);\n  };\n\n  /**\n   * Translate visual column index into physical.\n   *\n   * This method is useful when you want to retrieve physical column index based on a visual index which can be\n   * reordered, moved or trimmed.\n   *\n   * @memberof Core#\n   * @function toPhysicalColumn\n   * @param {Number} column Visual column index.\n   * @returns {Number} Returns physical column index.\n   */\n  this.toPhysicalColumn = function (column) {\n    return recordTranslator.toPhysicalColumn(column);\n  };\n\n  /**\n   * @description\n   * Returns the cell value at `row`, `column`.\n   *\n   * __Note__: If data is reordered, sorted or trimmed, the currently visible order will be used.\n   *\n   * @memberof Core#\n   * @function getDataAtCell\n   * @param {Number} row Visual row index.\n   * @param {Number} column Visual column index.\n   * @returns {*} Data at cell.\n   */\n  this.getDataAtCell = function (row, column) {\n    return datamap.get(row, datamap.colToProp(column));\n  };\n\n  /**\n   * Returns value at visual `row` and `prop` indexes (see {@link DataMap#get}).\n   *\n   * __Note__: If data is reordered, sorted or trimmed, the currently visible order will be used.\n   *\n   * @memberof Core#\n   * @function getDataAtRowProp\n   * @param {Number} row Visual row index.\n   * @param {String} prop Property name.\n   * @returns {*} Cell value.\n   */\n  this.getDataAtRowProp = function (row, prop) {\n    return datamap.get(row, prop);\n  };\n\n  /**\n   * @description\n   * Returns array of column values from the data source.\n   *\n   * __Note__: If columns were reordered or sorted, the currently visible order will be used.\n   *\n   * @memberof Core#\n   * @function getDataAtCol\n   * @param {Number} column Visual column index.\n   * @returns {Array} Array of cell values.\n   */\n  this.getDataAtCol = function (column) {\n    var _ref12;\n\n    return (_ref12 = []).concat.apply(_ref12, _toConsumableArray(datamap.getRange(new _src.CellCoords(0, column), new _src.CellCoords(priv.settings.data.length - 1, column), datamap.DESTINATION_RENDERER)));\n  };\n\n  /**\n   * Given the object property name (e.g. `'first.name'` or `'0'`), returns an array of column's values from the table data.\n   * You can also provide a column index as the first argument.\n   *\n   * @memberof Core#\n   * @function getDataAtProp\n   * @param {String|Number} prop Property name or physical column index.\n   * @returns {Array} Array of cell values.\n   */\n  // TODO: Getting data from `datamap` should work on visual indexes.\n  this.getDataAtProp = function (prop) {\n    var _ref13;\n\n    var range = datamap.getRange(new _src.CellCoords(0, datamap.propToCol(prop)), new _src.CellCoords(priv.settings.data.length - 1, datamap.propToCol(prop)), datamap.DESTINATION_RENDERER);\n\n    return (_ref13 = []).concat.apply(_ref13, _toConsumableArray(range));\n  };\n\n  /**\n   * Returns the source data object (the same that was passed by `data` configuration option or `loadData` method).\n   * Optionally you can provide a cell range by using the `row`, `column`, `row2`, `column2` arguments, to get only a\n   * fragment of the table data.\n   *\n   * __Note__: This method does not participate in data transformation. If the visual data of the table is reordered,\n   * sorted or trimmed only physical indexes are correct.\n   *\n   * @memberof Core#\n   * @function getSourceData\n   * @param {Number} [row] From physical row index.\n   * @param {Number} [column] From physical column index (or visual index, if data type is an array of objects).\n   * @param {Number} [row2] To physical row index.\n   * @param {Number} [column2] To physical column index (or visual index, if data type is an array of objects).\n   * @returns {Array[]|Object[]} The table data.\n   */\n  this.getSourceData = function (row, column, row2, column2) {\n    var data = void 0;\n\n    if (row === void 0) {\n      data = dataSource.getData();\n    } else {\n      data = dataSource.getByRange(new _src.CellCoords(row, column), new _src.CellCoords(row2, column2));\n    }\n\n    return data;\n  };\n\n  /**\n   * Returns the source data object as an arrays of arrays format even when source data was provided in another format.\n   * Optionally you can provide a cell range by using the `row`, `column`, `row2`, `column2` arguments, to get only a\n   * fragment of the table data.\n   *\n   * __Note__: This method does not participate in data transformation. If the visual data of the table is reordered,\n   * sorted or trimmed only physical indexes are correct.\n   *\n   * @memberof Core#\n   * @function getSourceDataArray\n   * @param {Number} [row] From physical row index.\n   * @param {Number} [column] From physical column index (or visual index, if data type is an array of objects).\n   * @param {Number} [row2] To physical row index.\n   * @param {Number} [column2] To physical column index (or visual index, if data type is an array of objects).\n   * @returns {Array} An array of arrays.\n   */\n  this.getSourceDataArray = function (row, column, row2, column2) {\n    var data = void 0;\n\n    if (row === void 0) {\n      data = dataSource.getData(true);\n    } else {\n      data = dataSource.getByRange(new _src.CellCoords(row, column), new _src.CellCoords(row2, column2), true);\n    }\n\n    return data;\n  };\n\n  /**\n   * Returns an array of column values from the data source.\n   *\n   * @memberof Core#\n   * @function getSourceDataAtCol\n   * @param {Number} column Visual column index.\n   * @returns {Array} Array of the column's cell values.\n   */\n  // TODO: Getting data from `sourceData` should work always on physical indexes.\n  this.getSourceDataAtCol = function (column) {\n    return dataSource.getAtColumn(column);\n  };\n\n  /**\n   * Returns a single row of the data (array or object, depending on what data format you use).\n   *\n   * __Note__: This method does not participate in data transformation. If the visual data of the table is reordered,\n   * sorted or trimmed only physical indexes are correct.\n   *\n   * @memberof Core#\n   * @function getSourceDataAtRow\n   * @param {Number} row Physical row index.\n   * @returns {Array|Object} Single row of data.\n   */\n  this.getSourceDataAtRow = function (row) {\n    return dataSource.getAtRow(row);\n  };\n\n  /**\n   * Returns a single value from the data source.\n   *\n   * @memberof Core#\n   * @function getSourceDataAtCell\n   * @param {Number} row Physical row index.\n   * @param {Number} column Visual column index.\n   * @returns {*} Cell data.\n   */\n  // TODO: Getting data from `sourceData` should work always on physical indexes.\n  this.getSourceDataAtCell = function (row, column) {\n    return dataSource.getAtCell(row, column);\n  };\n\n  /**\n   * @description\n   * Returns a single row of the data.\n   *\n   * __Note__: If rows were reordered, sorted or trimmed, the currently visible order will be used.\n   *\n   * @memberof Core#\n   * @function getDataAtRow\n   * @param {Number} row Visual row index.\n   * @returns {Array} Array of row's cell data.\n   */\n  this.getDataAtRow = function (row) {\n    var data = datamap.getRange(new _src.CellCoords(row, 0), new _src.CellCoords(row, this.countCols() - 1), datamap.DESTINATION_RENDERER);\n\n    return data[0] || [];\n  };\n\n  /**\n   * @description\n   * Returns a data type defined in the Handsontable settings under the `type` key ([Options#type](http://docs.handsontable.com/Options.html#type)).\n   * If there are cells with different types in the selected range, it returns `'mixed'`.\n   *\n   * __Note__: If data is reordered, sorted or trimmed, the currently visible order will be used.\n   *\n   * @memberof Core#\n   * @function getDataType\n   * @param {Number} rowFrom From visual row index.\n   * @param {Number} columnFrom From visual column index.\n   * @param {Number} rowTo To visual row index.\n   * @param {Number} columnTo To visual column index.\n   * @returns {String} Cell type (e.q: `'mixed'`, `'text'`, `'numeric'`, `'autocomplete'`).\n   */\n  this.getDataType = function (rowFrom, columnFrom, rowTo, columnTo) {\n    var _this3 = this;\n\n    var coords = rowFrom === void 0 ? [0, 0, this.countRows(), this.countCols()] : [rowFrom, columnFrom, rowTo, columnTo];\n    var rowStart = coords[0],\n        columnStart = coords[1];\n    var rowEnd = coords[2],\n        columnEnd = coords[3];\n\n    var previousType = null;\n    var currentType = null;\n\n    if (rowEnd === void 0) {\n      rowEnd = rowStart;\n    }\n    if (columnEnd === void 0) {\n      columnEnd = columnStart;\n    }\n    var type = 'mixed';\n\n    (0, _number.rangeEach)(Math.min(rowStart, rowEnd), Math.max(rowStart, rowEnd), function (row) {\n      var isTypeEqual = true;\n\n      (0, _number.rangeEach)(Math.min(columnStart, columnEnd), Math.max(columnStart, columnEnd), function (column) {\n        var cellType = _this3.getCellMeta(row, column);\n\n        currentType = cellType.type;\n\n        if (previousType) {\n          isTypeEqual = previousType === currentType;\n        } else {\n          previousType = currentType;\n        }\n\n        return isTypeEqual;\n      });\n      type = isTypeEqual ? currentType : 'mixed';\n\n      return isTypeEqual;\n    });\n\n    return type;\n  };\n\n  /**\n   * Remove a property defined by the `key` argument from the cell meta object for the provided `row` and `column` coordinates.\n   *\n   * @memberof Core#\n   * @function removeCellMeta\n   * @param {Number} row Visual row index.\n   * @param {Number} column Visual column index.\n   * @param {String} key Property name.\n   * @fires Hooks#beforeRemoveCellMeta\n   * @fires Hooks#afterRemoveCellMeta\n   */\n  this.removeCellMeta = function (row, column, key) {\n    var _recordTranslator$toP = recordTranslator.toPhysical(row, column),\n        _recordTranslator$toP2 = _slicedToArray(_recordTranslator$toP, 2),\n        physicalRow = _recordTranslator$toP2[0],\n        physicalColumn = _recordTranslator$toP2[1];\n\n    var cachedValue = priv.cellSettings[physicalRow][physicalColumn][key];\n\n    var hookResult = instance.runHooks('beforeRemoveCellMeta', row, column, key, cachedValue);\n\n    if (hookResult !== false) {\n      delete priv.cellSettings[physicalRow][physicalColumn][key];\n\n      instance.runHooks('afterRemoveCellMeta', row, column, key, cachedValue);\n    }\n\n    cachedValue = null;\n  };\n\n  /**\n   * Remove one or more rows from the cell meta object.\n   *\n   * @since 0.30.0\n   * @param {Number} index An integer that specifies at what position to add/remove items, Use negative values to specify the position from the end of the array.\n   * @param {Number} deleteAmount The number of items to be removed. If set to 0, no items will be removed.\n   * @param {Array} items The new items to be added to the array.\n   */\n  this.spliceCellsMeta = function (index, deleteAmount) {\n    var _priv$cellSettings;\n\n    for (var _len4 = arguments.length, items = Array(_len4 > 2 ? _len4 - 2 : 0), _key3 = 2; _key3 < _len4; _key3++) {\n      items[_key3 - 2] = arguments[_key3];\n    }\n\n    (_priv$cellSettings = priv.cellSettings).splice.apply(_priv$cellSettings, [index, deleteAmount].concat(items));\n  };\n\n  /**\n   * Set cell meta data object defined by `prop` to the corresponding params `row` and `column`.\n   *\n   * @memberof Core#\n   * @function setCellMetaObject\n   * @param {Number} row Visual row index.\n   * @param {Number} column Visual column index.\n   * @param {Object} prop Meta object.\n   */\n  this.setCellMetaObject = function (row, column, prop) {\n    var _this4 = this;\n\n    if ((typeof prop === 'undefined' ? 'undefined' : _typeof(prop)) === 'object') {\n      (0, _object.objectEach)(prop, function (value, key) {\n        _this4.setCellMeta(row, column, key, value);\n      });\n    }\n  };\n\n  /**\n   * Sets a property defined by the `key` property to the meta object of a cell corresponding to params `row` and `column`.\n   *\n   * @memberof Core#\n   * @function setCellMeta\n   * @param {Number} row Visual row index.\n   * @param {Number} column Visual column index.\n   * @param {String} key Property name.\n   * @param {String} value Property value.\n   * @fires Hooks#afterSetCellMeta\n   */\n  this.setCellMeta = function (row, column, key, value) {\n    var _recordTranslator$toP3 = recordTranslator.toPhysical(row, column),\n        _recordTranslator$toP4 = _slicedToArray(_recordTranslator$toP3, 2),\n        physicalRow = _recordTranslator$toP4[0],\n        physicalColumn = _recordTranslator$toP4[1];\n\n    if (!priv.columnSettings[physicalColumn]) {\n      priv.columnSettings[physicalColumn] = (0, _setting.columnFactory)(GridSettings, priv.columnsSettingConflicts);\n    }\n\n    if (!priv.cellSettings[physicalRow]) {\n      priv.cellSettings[physicalRow] = [];\n    }\n    if (!priv.cellSettings[physicalRow][physicalColumn]) {\n      priv.cellSettings[physicalRow][physicalColumn] = new priv.columnSettings[physicalColumn]();\n    }\n    priv.cellSettings[physicalRow][physicalColumn][key] = value;\n    instance.runHooks('afterSetCellMeta', row, column, key, value);\n  };\n\n  /**\n   * Get all the cells meta settings at least once generated in the table (in order of cell initialization).\n   *\n   * @memberof Core#\n   * @function getCellsMeta\n   * @returns {Array} Returns an array of ColumnSettings object instances.\n   */\n  this.getCellsMeta = function () {\n    return (0, _array.arrayFlatten)(priv.cellSettings);\n  };\n\n  /**\n   * Returns the cell properties object for the given `row` and `column` coordinates.\n   *\n   * @memberof Core#\n   * @function getCellMeta\n   * @param {Number} row Visual row index.\n   * @param {Number} column Visual column index.\n   * @returns {Object} The cell properties object.\n   * @fires Hooks#beforeGetCellMeta\n   * @fires Hooks#afterGetCellMeta\n   */\n  this.getCellMeta = function (row, column) {\n    var prop = datamap.colToProp(column);\n\n    var _recordTranslator$toP5 = recordTranslator.toPhysical(row, column),\n        _recordTranslator$toP6 = _slicedToArray(_recordTranslator$toP5, 2),\n        potentialPhysicalRow = _recordTranslator$toP6[0],\n        physicalColumn = _recordTranslator$toP6[1];\n\n    var physicalRow = potentialPhysicalRow;\n\n    // Workaround for #11. Connected also with #3849. It should be fixed within #4497.\n    if (physicalRow === null) {\n      physicalRow = row;\n    }\n\n    if (!priv.columnSettings[physicalColumn]) {\n      priv.columnSettings[physicalColumn] = (0, _setting.columnFactory)(GridSettings, priv.columnsSettingConflicts);\n    }\n\n    if (!priv.cellSettings[physicalRow]) {\n      priv.cellSettings[physicalRow] = [];\n    }\n    if (!priv.cellSettings[physicalRow][physicalColumn]) {\n      priv.cellSettings[physicalRow][physicalColumn] = new priv.columnSettings[physicalColumn]();\n    }\n\n    var cellProperties = priv.cellSettings[physicalRow][physicalColumn]; // retrieve cellProperties from cache\n\n    cellProperties.row = physicalRow;\n    cellProperties.col = physicalColumn;\n    cellProperties.visualRow = row;\n    cellProperties.visualCol = column;\n    cellProperties.prop = prop;\n    cellProperties.instance = instance;\n\n    instance.runHooks('beforeGetCellMeta', row, column, cellProperties);\n    (0, _object.extend)(cellProperties, expandType(cellProperties)); // for `type` added in beforeGetCellMeta\n\n    if (cellProperties.cells) {\n      var settings = cellProperties.cells.call(cellProperties, physicalRow, physicalColumn, prop);\n\n      if (settings) {\n        (0, _object.extend)(cellProperties, settings);\n        (0, _object.extend)(cellProperties, expandType(settings)); // for `type` added in cells\n      }\n    }\n\n    instance.runHooks('afterGetCellMeta', row, column, cellProperties);\n\n    return cellProperties;\n  };\n\n  /**\n   * Returns an array of cell meta objects for specyfied physical row index.\n   *\n   * @memberof Core#\n   * @function getCellMetaAtRow\n   * @param {Number} row Physical row index.\n   * @returns {Array}\n   */\n  this.getCellMetaAtRow = function (row) {\n    return priv.cellSettings[row];\n  };\n\n  /**\n   * Checks if the data format and config allows user to modify the column structure.\n   *\n   * @memberof Core#\n   * @function isColumnModificationAllowed\n   * @returns {Boolean}\n   */\n  this.isColumnModificationAllowed = function () {\n    return !(instance.dataType === 'object' || instance.getSettings().columns);\n  };\n\n  var rendererLookup = (0, _data.cellMethodLookupFactory)('renderer');\n\n  /**\n   * Returns the cell renderer function by given `row` and `column` arguments.\n   *\n   * @memberof Core#\n   * @function getCellRenderer\n   * @param {Number|Object} row Visual row index or cell meta object (see {@link Core#getCellMeta}).\n   * @param {Number} column Visual column index.\n   * @returns {Function} The renderer function.\n   * @example\n   * ```js\n   * // Get cell renderer using `row` and `column` coordinates.\n   * hot.getCellRenderer(1, 1);\n   * // Get cell renderer using cell meta object.\n   * hot.getCellRenderer(hot.getCellMeta(1, 1));\n   * ```\n   */\n  this.getCellRenderer = function (row, column) {\n    return (0, _renderers.getRenderer)(rendererLookup.call(this, row, column));\n  };\n\n  /**\n   * Returns the cell editor class by the provided `row` and `column` arguments.\n   *\n   * @memberof Core#\n   * @function getCellEditor\n   * @param {Number} row Visual row index or cell meta object (see {@link Core#getCellMeta}).\n   * @param {Number} column Visual column index.\n   * @returns {Function} The editor class.\n   * @example\n   * ```js\n   * // Get cell editor class using `row` and `column` coordinates.\n   * hot.getCellEditor(1, 1);\n   * // Get cell editor class using cell meta object.\n   * hot.getCellEditor(hot.getCellMeta(1, 1));\n   * ```\n   */\n  this.getCellEditor = (0, _data.cellMethodLookupFactory)('editor');\n\n  var validatorLookup = (0, _data.cellMethodLookupFactory)('validator');\n\n  /**\n   * Returns the cell validator by `row` and `column`.\n   *\n   * @memberof Core#\n   * @function getCellValidator\n   * @param {Number|Object} row Visual row index or cell meta object (see {@link Core#getCellMeta}).\n   * @param {Number} column Visual column index.\n   * @returns {Function|RegExp|undefined} The validator function.\n   * @example\n   * ```js\n   * // Get cell valiator using `row` and `column` coordinates.\n   * hot.getCellValidator(1, 1);\n   * // Get cell valiator using cell meta object.\n   * hot.getCellValidator(hot.getCellMeta(1, 1));\n   * ```\n   */\n  this.getCellValidator = function (row, column) {\n    var validator = validatorLookup.call(this, row, column);\n\n    if (typeof validator === 'string') {\n      validator = (0, _validators.getValidator)(validator);\n    }\n\n    return validator;\n  };\n\n  /**\n   * Validates all cells using their validator functions and calls callback when finished.\n   *\n   * If one of the cells is invalid, the callback will be fired with `'valid'` arguments as `false` - otherwise it\n   * would equal `true`.\n   *\n   * @memberof Core#\n   * @function validateCells\n   * @param {Function} [callback] The callback function.\n   * @example\n   * ```js\n   * hot.validateCells((valid) => {\n   *   if (valid) {\n   *     // ... code for validated cells\n   *   }\n   * })\n   * ```\n   */\n  this.validateCells = function (callback) {\n    this._validateCells(callback);\n  };\n\n  /**\n   * Validates rows using their validator functions and calls callback when finished.\n   *\n   * If one of the cells is invalid, the callback will be fired with `'valid'` arguments as `false` - otherwise it\n   *  would equal `true`.\n   *\n   * @memberof Core#\n   * @function validateRows\n   * @param {Array} [rows] Array of validation target visual row indexes.\n   * @param {Function} [callback] The callback function.\n   * @example\n   * ```js\n   * hot.validateRows([3, 4, 5], (valid) => {\n   *   if (valid) {\n   *     // ... code for validated rows\n   *   }\n   * })\n   * ```\n   */\n  this.validateRows = function (rows, callback) {\n    if (!Array.isArray(rows)) {\n      throw new Error('validateRows parameter `rows` must be an array');\n    }\n    this._validateCells(callback, rows);\n  };\n\n  /**\n   * Validates columns using their validator functions and calls callback when finished.\n   *\n   * If one of the cells is invalid, the callback will be fired with `'valid'` arguments as `false` - otherwise it\n   *  would equal `true`.\n   *\n   * @memberof Core#\n   * @function validateColumns\n   * @param {Array} [columns] Array of validation target visual columns indexes.\n   * @param {Function} [callback] The callback function.\n   * @example\n   * ```js\n   * hot.validateColumns([3, 4, 5], (valid) => {\n   *   if (valid) {\n   *     // ... code for validated columns\n   *   }\n   * })\n   * ```\n   */\n  this.validateColumns = function (columns, callback) {\n    if (!Array.isArray(columns)) {\n      throw new Error('validateColumns parameter `columns` must be an array');\n    }\n    this._validateCells(callback, undefined, columns);\n  };\n\n  /**\n   * Validates all cells using their validator functions and calls callback when finished.\n   *\n   * If one of the cells is invalid, the callback will be fired with `'valid'` arguments as `false` - otherwise it would equal `true`.\n   *\n   * Private use intended.\n   *\n   * @private\n   * @memberof Core#\n   * @function _validateCells\n   * @param {Function} [callback] The callback function.\n   * @param {Array} [rows] An array of validation target visual row indexes.\n   * @param {Array} [columns] An array of validation target visual column indexes.\n   */\n  this._validateCells = function (callback, rows, columns) {\n    var waitingForValidator = new ValidatorsQueue();\n\n    if (callback) {\n      waitingForValidator.onQueueEmpty = callback;\n    }\n\n    var i = instance.countRows() - 1;\n\n    while (i >= 0) {\n      if (rows !== undefined && rows.indexOf(i) === -1) {\n        i -= 1;\n        continue;\n      }\n      var j = instance.countCols() - 1;\n\n      while (j >= 0) {\n        if (columns !== undefined && columns.indexOf(j) === -1) {\n          j -= 1;\n          continue;\n        }\n        waitingForValidator.addValidatorToQueue();\n\n        instance.validateCell(instance.getDataAtCell(i, j), instance.getCellMeta(i, j), function (result) {\n          if (typeof result !== 'boolean') {\n            throw new Error('Validation error: result is not boolean');\n          }\n          if (result === false) {\n            waitingForValidator.valid = false;\n          }\n          waitingForValidator.removeValidatorFormQueue();\n        }, 'validateCells');\n        j -= 1;\n      }\n      i -= 1;\n    }\n    waitingForValidator.checkIfQueueIsEmpty();\n  };\n\n  /**\n   * Returns an array of row headers' values (if they are enabled). If param `row` was given, it returns the header of the given row as a string.\n   *\n   * @memberof Core#\n   * @function getRowHeader\n   * @param {Number} [row] Visual row index.\n   * @fires Hooks#modifyRowHeader\n   * @returns {Array|String|Number} Array of header values / single header value.\n   */\n  this.getRowHeader = function (row) {\n    var rowHeader = priv.settings.rowHeaders;\n    var physicalRow = row;\n\n    if (physicalRow !== void 0) {\n      physicalRow = instance.runHooks('modifyRowHeader', physicalRow);\n    }\n    if (physicalRow === void 0) {\n      rowHeader = [];\n      (0, _number.rangeEach)(instance.countRows() - 1, function (i) {\n        rowHeader.push(instance.getRowHeader(i));\n      });\n    } else if (Array.isArray(rowHeader) && rowHeader[physicalRow] !== void 0) {\n      rowHeader = rowHeader[physicalRow];\n    } else if ((0, _function.isFunction)(rowHeader)) {\n      rowHeader = rowHeader(physicalRow);\n    } else if (rowHeader && typeof rowHeader !== 'string' && typeof rowHeader !== 'number') {\n      rowHeader = physicalRow + 1;\n    }\n\n    return rowHeader;\n  };\n\n  /**\n   * Returns information about if this table is configured to display row headers.\n   *\n   * @memberof Core#\n   * @function hasRowHeaders\n   * @returns {Boolean} `true` if the instance has the row headers enabled, `false` otherwise.\n   */\n  this.hasRowHeaders = function () {\n    return !!priv.settings.rowHeaders;\n  };\n\n  /**\n   * Returns information about if this table is configured to display column headers.\n   *\n   * @memberof Core#\n   * @function hasColHeaders\n   * @returns {Boolean} `true` if the instance has the column headers enabled, `false` otherwise.\n   */\n  this.hasColHeaders = function () {\n    if (priv.settings.colHeaders !== void 0 && priv.settings.colHeaders !== null) {\n      // Polymer has empty value = null\n      return !!priv.settings.colHeaders;\n    }\n    for (var i = 0, ilen = instance.countCols(); i < ilen; i++) {\n      if (instance.getColHeader(i)) {\n        return true;\n      }\n    }\n\n    return false;\n  };\n\n  /**\n   * Returns an array of column headers (in string format, if they are enabled). If param `column` is given, it\n   * returns the header at the given column.\n   *\n   * @memberof Core#\n   * @function getColHeader\n   * @param {Number} [column] Visual column index.\n   * @fires Hooks#modifyColHeader\n   * @returns {Array|String|Number} The column header(s).\n   */\n  this.getColHeader = function (column) {\n    var columnsAsFunc = priv.settings.columns && (0, _function.isFunction)(priv.settings.columns);\n    var columnIndex = instance.runHooks('modifyColHeader', column);\n    var result = priv.settings.colHeaders;\n\n    if (columnIndex === void 0) {\n      var out = [];\n      var ilen = columnsAsFunc ? instance.countSourceCols() : instance.countCols();\n\n      for (var i = 0; i < ilen; i++) {\n        out.push(instance.getColHeader(i));\n      }\n\n      result = out;\n    } else {\n      var translateVisualIndexToColumns = function translateVisualIndexToColumns(visualColumnIndex) {\n        var arr = [];\n        var columnsLen = instance.countSourceCols();\n        var index = 0;\n\n        for (; index < columnsLen; index++) {\n          if ((0, _function.isFunction)(instance.getSettings().columns) && instance.getSettings().columns(index)) {\n            arr.push(index);\n          }\n        }\n\n        return arr[visualColumnIndex];\n      };\n      var baseCol = columnIndex;\n      var physicalColumn = instance.runHooks('modifyCol', baseCol);\n\n      var prop = translateVisualIndexToColumns(physicalColumn);\n\n      if (priv.settings.columns && (0, _function.isFunction)(priv.settings.columns) && priv.settings.columns(prop) && priv.settings.columns(prop).title) {\n        result = priv.settings.columns(prop).title;\n      } else if (priv.settings.columns && priv.settings.columns[physicalColumn] && priv.settings.columns[physicalColumn].title) {\n        result = priv.settings.columns[physicalColumn].title;\n      } else if (Array.isArray(priv.settings.colHeaders) && priv.settings.colHeaders[physicalColumn] !== void 0) {\n        result = priv.settings.colHeaders[physicalColumn];\n      } else if ((0, _function.isFunction)(priv.settings.colHeaders)) {\n        result = priv.settings.colHeaders(physicalColumn);\n      } else if (priv.settings.colHeaders && typeof priv.settings.colHeaders !== 'string' && typeof priv.settings.colHeaders !== 'number') {\n        result = (0, _data.spreadsheetColumnLabel)(baseCol); // see #1458\n      }\n    }\n\n    return result;\n  };\n\n  /**\n   * Return column width from settings (no guessing). Private use intended.\n   *\n   * @private\n   * @memberof Core#\n   * @function _getColWidthFromSettings\n   * @param {Number} col Visual col index.\n   * @returns {Number}\n   */\n  this._getColWidthFromSettings = function (col) {\n    var cellProperties = instance.getCellMeta(0, col);\n    var width = cellProperties.width;\n\n    if (width === void 0 || width === priv.settings.width) {\n      width = cellProperties.colWidths;\n    }\n    if (width !== void 0 && width !== null) {\n      switch (typeof width === 'undefined' ? 'undefined' : _typeof(width)) {\n        case 'object':\n          // array\n          width = width[col];\n          break;\n\n        case 'function':\n          width = width(col);\n          break;\n        default:\n          break;\n      }\n      if (typeof width === 'string') {\n        width = parseInt(width, 10);\n      }\n    }\n\n    return width;\n  };\n\n  /**\n   * Returns the width of the requested column.\n   *\n   * @memberof Core#\n   * @function getColWidth\n   * @param {Number} column Visual column index.\n   * @returns {Number} Column width.\n   * @fires Hooks#modifyColWidth\n   */\n  this.getColWidth = function (column) {\n    var width = instance._getColWidthFromSettings(column);\n\n    width = instance.runHooks('modifyColWidth', width, column);\n\n    if (width === void 0) {\n      width = _src.ViewportColumnsCalculator.DEFAULT_WIDTH;\n    }\n\n    return width;\n  };\n\n  /**\n   * Return row height from settings (no guessing). Private use intended.\n   *\n   * @private\n   * @memberof Core#\n   * @function _getRowHeightFromSettings\n   * @param {Number} row Visual row index.\n   * @returns {Number}\n   */\n  this._getRowHeightFromSettings = function (row) {\n    // let cellProperties = instance.getCellMeta(row, 0);\n    // let height = cellProperties.height;\n    //\n    // if (height === void 0 || height === priv.settings.height) {\n    //  height = cellProperties.rowHeights;\n    // }\n    var height = priv.settings.rowHeights;\n\n    if (height !== void 0 && height !== null) {\n      switch (typeof height === 'undefined' ? 'undefined' : _typeof(height)) {\n        case 'object':\n          // array\n          height = height[row];\n          break;\n\n        case 'function':\n          height = height(row);\n          break;\n        default:\n          break;\n      }\n      if (typeof height === 'string') {\n        height = parseInt(height, 10);\n      }\n    }\n\n    return height;\n  };\n\n  /**\n   * Returns the row height.\n   *\n   * @memberof Core#\n   * @function getRowHeight\n   * @param {Number} row Visual row index.\n   * @returns {Number} The given row's height.\n   * @fires Hooks#modifyRowHeight\n   */\n  this.getRowHeight = function (row) {\n    var height = instance._getRowHeightFromSettings(row);\n\n    height = instance.runHooks('modifyRowHeight', height, row);\n\n    return height;\n  };\n\n  /**\n   * Returns the total number of rows in the data source.\n   *\n   * @memberof Core#\n   * @function countSourceRows\n   * @returns {Number} Total number of rows.\n   */\n  this.countSourceRows = function () {\n    var sourceLength = instance.runHooks('modifySourceLength');\n    return sourceLength || (instance.getSourceData() ? instance.getSourceData().length : 0);\n  };\n\n  /**\n   * Returns the total number of columns in the data source.\n   *\n   * @memberof Core#\n   * @function countSourceCols\n   * @returns {Number} Total number of columns.\n   */\n  this.countSourceCols = function () {\n    var len = 0;\n    var obj = instance.getSourceData() && instance.getSourceData()[0] ? instance.getSourceData()[0] : [];\n\n    if ((0, _object.isObject)(obj)) {\n      len = (0, _object.deepObjectSize)(obj);\n    } else {\n      len = obj.length || 0;\n    }\n\n    return len;\n  };\n\n  /**\n   * Returns the total number of visual rows in the table.\n   *\n   * @memberof Core#\n   * @function countRows\n   * @returns {Number} Total number of rows.\n   */\n  this.countRows = function () {\n    return datamap.getLength();\n  };\n\n  /**\n   * Returns the total number of visible columns in the table.\n   *\n   * @memberof Core#\n   * @function countCols\n   * @returns {Number} Total number of columns.\n   */\n  this.countCols = function () {\n    var maxCols = this.getSettings().maxCols;\n    var dataHasLength = false;\n    var dataLen = 0;\n\n    if (instance.dataType === 'array') {\n      dataHasLength = priv.settings.data && priv.settings.data[0] && priv.settings.data[0].length;\n    }\n\n    if (dataHasLength) {\n      dataLen = priv.settings.data[0].length;\n    }\n\n    if (priv.settings.columns) {\n      var columnsIsFunction = (0, _function.isFunction)(priv.settings.columns);\n\n      if (columnsIsFunction) {\n        if (instance.dataType === 'array') {\n          var columnLen = 0;\n\n          for (var i = 0; i < dataLen; i++) {\n            if (priv.settings.columns(i)) {\n              columnLen += 1;\n            }\n          }\n\n          dataLen = columnLen;\n        } else if (instance.dataType === 'object' || instance.dataType === 'function') {\n          dataLen = datamap.colToPropCache.length;\n        }\n      } else {\n        dataLen = priv.settings.columns.length;\n      }\n    } else if (instance.dataType === 'object' || instance.dataType === 'function') {\n      dataLen = datamap.colToPropCache.length;\n    }\n\n    return Math.min(maxCols, dataLen);\n  };\n\n  /**\n   * Returns an visual index of the first rendered row.\n   *\n   * @memberof Core#\n   * @function rowOffset\n   * @returns {Number} Visual index of first rendered row.\n   */\n  this.rowOffset = function () {\n    return instance.view.wt.wtTable.getFirstRenderedRow();\n  };\n\n  /**\n   * Returns the visual index of the first rendered column.\n   *\n   * @memberof Core#\n   * @function colOffset\n   * @returns {Number} Visual index of the first visible column.\n   */\n  this.colOffset = function () {\n    return instance.view.wt.wtTable.getFirstRenderedColumn();\n  };\n\n  /**\n   * Returns the number of rendered rows (including rows partially or fully rendered outside viewport).\n   *\n   * @memberof Core#\n   * @function countRenderedRows\n   * @returns {Number} Returns -1 if table is not visible.\n   */\n  this.countRenderedRows = function () {\n    return instance.view.wt.drawn ? instance.view.wt.wtTable.getRenderedRowsCount() : -1;\n  };\n\n  /**\n   * Returns the number of visible rows (rendered rows that fully fit inside viewport).\n   *\n   * @memberof Core#\n   * @function countVisibleRows\n   * @returns {Number} Number of visible rows or -1.\n   */\n  this.countVisibleRows = function () {\n    return instance.view.wt.drawn ? instance.view.wt.wtTable.getVisibleRowsCount() : -1;\n  };\n\n  /**\n   * Returns the number of rendered columns (including columns partially or fully rendered outside viewport).\n   *\n   * @memberof Core#\n   * @function countRenderedCols\n   * @returns {Number} Returns -1 if table is not visible.\n   */\n  this.countRenderedCols = function () {\n    return instance.view.wt.drawn ? instance.view.wt.wtTable.getRenderedColumnsCount() : -1;\n  };\n\n  /**\n   * Returns the number of visible columns. Returns -1 if table is not visible\n   *\n   * @memberof Core#\n   * @function countVisibleCols\n   * @return {Number} Number of visible columns or -1.\n   */\n  this.countVisibleCols = function () {\n    return instance.view.wt.drawn ? instance.view.wt.wtTable.getVisibleColumnsCount() : -1;\n  };\n\n  /**\n   * Returns the number of empty rows. If the optional ending parameter is `true`, returns the\n   * number of empty rows at the bottom of the table.\n   *\n   * @memberof Core#\n   * @function countEmptyRows\n   * @param {Boolean} [ending=false] If `true`, will only count empty rows at the end of the data source.\n   * @returns {Number} Count empty rows.\n   */\n  this.countEmptyRows = function () {\n    var ending = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n    var emptyRows = 0;\n\n    (0, _number.rangeEachReverse)(instance.countRows() - 1, function (visualIndex) {\n      if (instance.isEmptyRow(visualIndex)) {\n        emptyRows += 1;\n      } else if (ending === true) {\n        return false;\n      }\n    });\n\n    return emptyRows;\n  };\n\n  /**\n   * Returns the number of empty columns. If the optional ending parameter is `true`, returns the number of empty\n   * columns at right hand edge of the table.\n   *\n   * @memberof Core#\n   * @function countEmptyCols\n   * @param {Boolean} [ending=false] If `true`, will only count empty columns at the end of the data source row.\n   * @returns {Number} Count empty cols.\n   */\n  this.countEmptyCols = function () {\n    var ending = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n    if (instance.countRows() < 1) {\n      return 0;\n    }\n\n    var emptyColumns = 0;\n\n    (0, _number.rangeEachReverse)(instance.countCols() - 1, function (visualIndex) {\n      if (instance.isEmptyCol(visualIndex)) {\n        emptyColumns += 1;\n      } else if (ending === true) {\n        return false;\n      }\n    });\n\n    return emptyColumns;\n  };\n\n  /**\n   * Check if all cells in the row declared by the `row` argument are empty.\n   *\n   * @memberof Core#\n   * @function isEmptyRow\n   * @param {Number} row Visual row index.\n   * @returns {Boolean} `true` if the row at the given `row` is empty, `false` otherwise.\n   */\n  this.isEmptyRow = function (row) {\n    return priv.settings.isEmptyRow.call(instance, row);\n  };\n\n  /**\n   * Check if all cells in the the column declared by the `column` argument are empty.\n   *\n   * @memberof Core#\n   * @function isEmptyCol\n   * @param {Number} column Column index.\n   * @returns {Boolean} `true` if the column at the given `col` is empty, `false` otherwise.\n   */\n  this.isEmptyCol = function (column) {\n    return priv.settings.isEmptyCol.call(instance, column);\n  };\n\n  /**\n   * Select cell specified by `row` and `column` values or a range of cells finishing at `endRow`, `endCol`. If the table\n   * was configured to support data column properties that properties can be used to making a selection.\n   *\n   * By default, viewport will be scrolled to the selection. After the `selectCell` method had finished, the instance\n   * will be listening to keyboard input on the document.\n   *\n   * @example\n   * ```js\n   * // select a single cell\n   * hot.selectCell(2, 4);\n   * // select a single cell using column property\n   * hot.selectCell(2, 'address');\n   * // select a range of cells\n   * hot.selectCell(2, 4, 3, 5);\n   * // select a range of cells using column properties\n   * hot.selectCell(2, 'address', 3, 'phone_number');\n   * // select a range of cells without scrolling to them\n   * hot.selectCell(2, 'address', 3, 'phone_number', false);\n   * ```\n   *\n   * @memberof Core#\n   * @function selectCell\n   * @param {Number} row Visual row index.\n   * @param {Number|String} column Visual column index or column property.\n   * @param {Number} [endRow] Visual end row index (if selecting a range).\n   * @param {Number|String} [endColumn] Visual end column index or column property (if selecting a range).\n   * @param {Boolean} [scrollToCell=true] If `true`, the viewport will be scrolled to the selection.\n   * @param {Boolean} [changeListener=true] If `false`, Handsontable will not change keyboard events listener to himself.\n   * @returns {Boolean} `true` if selection was successful, `false` otherwise.\n   */\n  this.selectCell = function (row, column, endRow, endColumn) {\n    var scrollToCell = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true;\n    var changeListener = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : true;\n\n    if ((0, _mixed.isUndefined)(row) || (0, _mixed.isUndefined)(column)) {\n      return false;\n    }\n\n    return this.selectCells([[row, column, endRow, endColumn]], scrollToCell, changeListener);\n  };\n\n  /**\n   * Make multiple, non-contiguous selection specified by `row` and `column` values or a range of cells\n   * finishing at `endRow`, `endColumn`. The method supports two input formats which are the same as that\n   * produces by `getSelected` and `getSelectedRange` methods.\n   *\n   * By default, viewport will be scrolled to selection. After the `selectCells` method had finished, the instance\n   * will be listening to keyboard input on the document.\n   *\n   * @example\n   * ```js\n   * // Using an array of arrays.\n   * hot.selectCells([[1, 1, 2, 2], [3, 3], [6, 2, 0, 2]]);\n   * // Using an array of arrays with defined columns as props.\n   * hot.selectCells([[1, 'id', 2, 'first_name'], [3, 'full_name'], [6, 'last_name', 0, 'first_name']]);\n   * // Using an array of CellRange objects (produced by `.getSelectedRange()` method).\n   * const selected = hot.getSelectedRange();\n   *\n   * selected[0].from.row = 0;\n   * selected[0].from.col = 0;\n   *\n   * hot.selectCells(selected);\n   * ```\n   *\n   * @memberof Core#\n   * @since 0.38.0\n   * @function selectCells\n   * @param {Array[]|CellRange[]} coords Visual coords passed as an array of array (`[[rowStart, columnStart, rowEnd, columnEnd], ...]`)\n   *                                     the same format as `getSelected` method returns or as an CellRange objects\n   *                                     which is the same format what `getSelectedRange` method returns.\n   * @param {Boolean} [scrollToCell=true] If `true`, the viewport will be scrolled to the selection.\n   * @param {Boolean} [changeListener=true] If `false`, Handsontable will not change keyboard events listener to himself.\n   * @returns {Boolean} `true` if selection was successful, `false` otherwise.\n   */\n  this.selectCells = function () {\n    var coords = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [[]];\n    var scrollToCell = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n    var changeListener = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n\n    if (scrollToCell === false) {\n      preventScrollingToCell = true;\n    }\n\n    var wasSelected = selection.selectCells(coords);\n\n    if (wasSelected && changeListener) {\n      instance.listen();\n    }\n    preventScrollingToCell = false;\n\n    return wasSelected;\n  };\n\n  /**\n   * Select the cell specified by the `row` and `prop` arguments, or a range finishing at `endRow`, `endProp`.\n   * By default, viewport will be scrolled to selection.\n   *\n   * @deprecated\n   * @memberof Core#\n   * @function selectCellByProp\n   * @param {Number} row Visual row index.\n   * @param {String} prop Property name.\n   * @param {Number} [endRow] visual end row index (if selecting a range).\n   * @param {String} [endProp] End property name (if selecting a range).\n   * @param {Boolean} [scrollToCell=true] If `true`, viewport will be scrolled to the selection.\n   * @param {Boolean} [changeListener=true] If `false`, Handsontable will not change keyboard events listener to himself.\n   * @returns {Boolean} `true` if selection was successful, `false` otherwise.\n   */\n  this.selectCellByProp = function (row, prop, endRow, endProp) {\n    var scrollToCell = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true;\n    var changeListener = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : true;\n\n    (0, _console.warn)((0, _templateLiteralTag.toSingleLine)(_templateObject));\n\n    return this.selectCells([[row, prop, endRow, endProp]], scrollToCell, changeListener);\n  };\n\n  /**\n   * Select column specified by `startColumn` visual index, column property or a range of columns finishing at `endColumn`.\n   *\n   * @example\n   * ```js\n   * // Select column using visual index.\n   * hot.selectColumns(1);\n   * // Select column using column property.\n   * hot.selectColumns('id');\n   * // Select range of columns using visual indexes.\n   * hot.selectColumns(1, 4);\n   * // Select range of columns using column properties.\n   * hot.selectColumns('id', 'last_name');\n   * ```\n   *\n   * @memberof Core#\n   * @since 0.38.0\n   * @function selectColumns\n   * @param {Number} startColumn The visual column index from which the selection starts.\n   * @param {Number} [endColumn=startColumn] The visual column index to which the selection finishes. If `endColumn`\n   *                                         is not defined the column defined by `startColumn` will be selected.\n   * @returns {Boolean} `true` if selection was successful, `false` otherwise.\n   */\n  this.selectColumns = function (startColumn) {\n    var endColumn = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : startColumn;\n\n    return selection.selectColumns(startColumn, endColumn);\n  };\n\n  /**\n   * Select row specified by `startRow` visual index or a range of rows finishing at `endRow`.\n   *\n   * @example\n   * ```js\n   * // Select row using visual index.\n   * hot.selectRows(1);\n   * // Select range of rows using visual indexes.\n   * hot.selectRows(1, 4);\n   * ```\n   *\n   * @memberof Core#\n   * @since 0.38.0\n   * @function selectRows\n   * @param {Number} startRow The visual row index from which the selection starts.\n   * @param {Number} [endRow=startRow] The visual row index to which the selection finishes. If `endRow`\n   *                                   is not defined the row defined by `startRow` will be selected.\n   * @returns {Boolean} `true` if selection was successful, `false` otherwise.\n   */\n  this.selectRows = function (startRow) {\n    var endRow = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : startRow;\n\n    return selection.selectRows(startRow, endRow);\n  };\n\n  /**\n   * Deselects the current cell selection on the table.\n   *\n   * @memberof Core#\n   * @function deselectCell\n   */\n  this.deselectCell = function () {\n    selection.deselect();\n  };\n\n  /**\n   * Select the whole table. The previous selection will be overwritten.\n   *\n   * @since 0.38.2\n   * @memberof Core#\n   * @function selectAll\n   */\n  this.selectAll = function () {\n    preventScrollingToCell = true;\n    selection.selectAll();\n    preventScrollingToCell = false;\n  };\n\n  /**\n   * Scroll viewport to coordinates specified by the `row` and `column` arguments.\n   *\n   * @memberof Core#\n   * @function scrollViewportTo\n   * @param {Number} [row] Visual row index.\n   * @param {Number} [column] Visual column index.\n   * @param {Boolean} [snapToBottom = false] If `true`, viewport is scrolled to show the cell on the bottom of the table.\n   * @param {Boolean} [snapToRight = false] If `true`, viewport is scrolled to show the cell on the right side of the table.\n   * @returns {Boolean} `true` if scroll was successful, `false` otherwise.\n   */\n  this.scrollViewportTo = function (row, column) {\n    var snapToBottom = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n    var snapToRight = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n\n    var snapToTop = !snapToBottom;\n    var snapToLeft = !snapToRight;\n    var result = false;\n\n    if (row !== void 0 && column !== void 0) {\n      result = instance.view.scrollViewport(new _src.CellCoords(row, column), snapToTop, snapToRight, snapToBottom, snapToLeft);\n    }\n    if (typeof row === 'number' && typeof column !== 'number') {\n      result = instance.view.scrollViewportVertically(row, snapToTop, snapToBottom);\n    }\n    if (typeof column === 'number' && typeof row !== 'number') {\n      result = instance.view.scrollViewportHorizontally(column, snapToRight, snapToLeft);\n    }\n\n    return result;\n  };\n\n  /**\n   * Removes the table from the DOM and destroys the instance of the Handsontable.\n   *\n   * @memberof Core#\n   * @function destroy\n   * @fires Hooks#afterDestroy\n   */\n  this.destroy = function () {\n    instance._clearTimeouts();\n    instance._clearImmediates();\n\n    if (instance.view) {\n      // in case HT is destroyed before initialization has finished\n      instance.view.destroy();\n    }\n    if (dataSource) {\n      dataSource.destroy();\n    }\n    dataSource = null;\n\n    (0, _keyStateObserver.stopObserving)();\n\n    if (false) { var licenseInfo; }\n    (0, _element.empty)(instance.rootElement);\n    eventManager.destroy();\n\n    if (editorManager) {\n      editorManager.destroy();\n    }\n\n    instance.runHooks('afterDestroy');\n    _pluginHooks2.default.getSingleton().destroy(instance);\n\n    (0, _object.objectEach)(instance, function (property, key, obj) {\n      // replace instance methods with post mortem\n      if ((0, _function.isFunction)(property)) {\n        obj[key] = postMortem(key);\n      } else if (key !== 'guid') {\n        // replace instance properties with null (restores memory)\n        // it should not be necessary but this prevents a memory leak side effects that show itself in Jasmine tests\n        obj[key] = null;\n      }\n    });\n\n    instance.isDestroyed = true;\n\n    // replace private properties with null (restores memory)\n    // it should not be necessary but this prevents a memory leak side effects that show itself in Jasmine tests\n    if (datamap) {\n      datamap.destroy();\n    }\n    datamap = null;\n    priv = null;\n    grid = null;\n    selection = null;\n    editorManager = null;\n    instance = null;\n    GridSettings = null;\n  };\n\n  /**\n   * Replacement for all methods after Handsotnable was destroyed.\n   *\n   * @private\n   */\n  function postMortem(method) {\n    return function () {\n      throw new Error('The \"' + method + '\" method cannot be called because this Handsontable instance has been destroyed');\n    };\n  }\n\n  /**\n   * Returns the active editor class instance.\n   *\n   * @memberof Core#\n   * @function getActiveEditor\n   * @returns {BaseEditor} The active editor instance.\n   */\n  this.getActiveEditor = function () {\n    return editorManager.getActiveEditor();\n  };\n\n  /**\n   * Returns plugin instance by provided its name.\n   *\n   * @memberof Core#\n   * @function getPlugin\n   * @param {String} pluginName The plugin name.\n   * @returns {BasePlugin} The plugin instance.\n   */\n  this.getPlugin = function (pluginName) {\n    return (0, _plugins.getPlugin)(this, pluginName);\n  };\n\n  /**\n   * Returns the Handsontable instance.\n   *\n   * @memberof Core#\n   * @function getInstance\n   * @returns {Handsontable} The Handsontable instance.\n   */\n  this.getInstance = function () {\n    return instance;\n  };\n\n  /**\n   * Adds listener to the specified hook name (only for this Handsontable instance).\n   *\n   * @memberof Core#\n   * @function addHook\n   * @see Hooks#add\n   * @param {String} key Hook name (see {@link Hooks}).\n   * @param {Function|Array} callback Function or array of functions.\n   * @example\n   * ```js\n   * hot.addHook('beforeInit', myCallback);\n   * ```\n   */\n  this.addHook = function (key, callback) {\n    _pluginHooks2.default.getSingleton().add(key, callback, instance);\n  };\n\n  /**\n   * Check if for a specified hook name there are added listeners (only for this Handsontable instance). All available\n   * hooks you will find {@link Hooks}.\n   *\n   * @memberof Core#\n   * @function hasHook\n   * @see Hooks#has\n   * @param {String} key Hook name\n   * @return {Boolean}\n   *\n   * @example\n   * ```js\n   * const hasBeforeInitListeners = hot.hasHook('beforeInit');\n   * ```\n   */\n  this.hasHook = function (key) {\n    return _pluginHooks2.default.getSingleton().has(key, instance);\n  };\n\n  /**\n   * Adds listener to specified hook name (only for this Handsontable instance). After the listener is triggered,\n   * it will be automatically removed.\n   *\n   * @memberof Core#\n   * @function addHookOnce\n   * @see Hooks#once\n   * @param {String} key Hook name (see {@link Hooks}).\n   * @param {Function|Array} callback Function or array of functions.\n   * @example\n   * ```js\n   * hot.addHookOnce('beforeInit', myCallback);\n   * ```\n   */\n  this.addHookOnce = function (key, callback) {\n    _pluginHooks2.default.getSingleton().once(key, callback, instance);\n  };\n\n  /**\n   * Removes the hook listener previously registered with {@link Core#addHook}.\n   *\n   * @memberof Core#\n   * @function removeHook\n   * @see Hooks#remove\n   * @param {String} key Hook name.\n   * @param {Function} callback Reference to the function which has been registered using {@link Core#addHook}.\n   *\n   * @example\n   * ```js\n   * hot.removeHook('beforeInit', myCallback);\n   * ```\n   */\n  this.removeHook = function (key, callback) {\n    _pluginHooks2.default.getSingleton().remove(key, callback, instance);\n  };\n\n  /**\n   * Run the callbacks for the hook provided in the `key` argument using the parameters given in the other arguments.\n   *\n   * @memberof Core#\n   * @function runHooks\n   * @see Hooks#run\n   * @param {String} key Hook name.\n   * @param {*} [p1] Argument passed to the callback.\n   * @param {*} [p2] Argument passed to the callback.\n   * @param {*} [p3] Argument passed to the callback.\n   * @param {*} [p4] Argument passed to the callback.\n   * @param {*} [p5] Argument passed to the callback.\n   * @param {*} [p6] Argument passed to the callback.\n   * @returns {*}\n   *\n   * @example\n   * ```js\n   * // Run built-in hook\n   * hot.runHooks('beforeInit');\n   * // Run custom hook\n   * hot.runHooks('customAction', 10, 'foo');\n   * ```\n   */\n  this.runHooks = function (key, p1, p2, p3, p4, p5, p6) {\n    return _pluginHooks2.default.getSingleton().run(instance, key, p1, p2, p3, p4, p5, p6);\n  };\n\n  /**\n   * Get language phrase for specified dictionary key.\n   *\n   * @memberof Core#\n   * @function getTranslatedPhrase\n   * @since 0.35.0\n   * @param {String} dictionaryKey Constant which is dictionary key.\n   * @param {*} extraArguments Arguments which will be handled by formatters.\n   * @returns {String}\n   */\n  this.getTranslatedPhrase = function (dictionaryKey, extraArguments) {\n    return (0, _i18n.getTranslatedPhrase)(priv.settings.language, dictionaryKey, extraArguments);\n  };\n\n  this.timeouts = [];\n\n  /**\n   * Sets timeout. Purpose of this method is to clear all known timeouts when `destroy` method is called.\n   *\n   * @param {Number|Function} handle Handler returned from setTimeout or function to execute (it will be automatically wraped\n   *                                 by setTimeout function).\n   * @param {Number} [delay=0] If first argument is passed as a function this argument set delay of the execution of that function.\n   * @private\n   */\n  this._registerTimeout = function (handle) {\n    var delay = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n    var handleFunc = handle;\n\n    if (typeof handleFunc === 'function') {\n      handleFunc = setTimeout(handleFunc, delay);\n    }\n\n    this.timeouts.push(handleFunc);\n  };\n\n  /**\n   * Clears all known timeouts.\n   *\n   * @private\n   */\n  this._clearTimeouts = function () {\n    (0, _array.arrayEach)(this.timeouts, function (handler) {\n      clearTimeout(handler);\n    });\n  };\n\n  this.immediates = [];\n\n  /**\n   * Execute function execution to the next event loop cycle. Purpose of this method is to clear all known timeouts when `destroy` method is called.\n   *\n   * @param {Function} callback Function to be delayed in execution.\n   * @private\n   */\n  this._registerImmediate = function (callback) {\n    this.immediates.push(setImmediate(callback));\n  };\n\n  /**\n   * Clears all known timeouts.\n   *\n   * @private\n   */\n  this._clearImmediates = function () {\n    (0, _array.arrayEach)(this.immediates, function (handler) {\n      clearImmediate(handler);\n    });\n  };\n\n  /**\n   * Refresh selection borders. This is temporary method relic after selection rewrite.\n   *\n   * @private\n   * @param {Boolean} [revertOriginal=false] If `true`, the previous value will be restored. Otherwise, the edited value will be saved.\n   * @param {Boolean} [prepareEditorIfNeeded=true] If `true` the editor under the selected cell will be prepared to open.\n   */\n  this._refreshBorders = function () {\n    var revertOriginal = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n    var prepareEditorIfNeeded = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n    editorManager.destroyEditor(revertOriginal);\n    instance.view.render();\n\n    if (prepareEditorIfNeeded && selection.isSelected()) {\n      editorManager.prepareEditor();\n    }\n  };\n\n  _pluginHooks2.default.getSingleton().run(instance, 'construct');\n}\n\n/***/ }),\n/* 91 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports.columnFactory = columnFactory;\n\nvar _object = __webpack_require__(1);\n\n/* eslint-disable import/prefer-default-export */\n/**\n * Factory for columns constructors.\n *\n * @param {Object} GridSettings\n * @param {Array} conflictList\n * @return {Object} ColumnSettings\n */\nfunction columnFactory(GridSettings, conflictList) {\n  function ColumnSettings() {}\n\n  (0, _object.inherit)(ColumnSettings, GridSettings);\n\n  // Clear conflict settings\n  for (var i = 0, len = conflictList.length; i < len; i++) {\n    ColumnSettings.prototype[conflictList[i]] = void 0;\n  }\n\n  return ColumnSettings;\n}\n\n/***/ }),\n/* 92 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports.spreadsheetColumnLabel = spreadsheetColumnLabel;\nexports.spreadsheetColumnIndex = spreadsheetColumnIndex;\nexports.createSpreadsheetData = createSpreadsheetData;\nexports.createSpreadsheetObjectData = createSpreadsheetObjectData;\nexports.createEmptySpreadsheetData = createEmptySpreadsheetData;\nexports.translateRowsToColumns = translateRowsToColumns;\nexports.cellMethodLookupFactory = cellMethodLookupFactory;\n\nvar _cellTypes = __webpack_require__(89);\n\nvar _object = __webpack_require__(1);\n\nvar COLUMN_LABEL_BASE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';\nvar COLUMN_LABEL_BASE_LENGTH = COLUMN_LABEL_BASE.length;\n\n/**\n * Generates spreadsheet-like column names: A, B, C, ..., Z, AA, AB, etc.\n *\n * @param {Number} index Column index.\n * @returns {String}\n */\nfunction spreadsheetColumnLabel(index) {\n  var dividend = index + 1;\n  var columnLabel = '';\n  var modulo = void 0;\n\n  while (dividend > 0) {\n    modulo = (dividend - 1) % COLUMN_LABEL_BASE_LENGTH;\n    columnLabel = String.fromCharCode(65 + modulo) + columnLabel;\n    dividend = parseInt((dividend - modulo) / COLUMN_LABEL_BASE_LENGTH, 10);\n  }\n\n  return columnLabel;\n}\n\n/**\n * Generates spreadsheet-like column index from theirs labels: A, B, C ...., Z, AA, AB, etc.\n *\n * @param {String} label Column label.\n * @returns {Number}\n */\nfunction spreadsheetColumnIndex(label) {\n  var result = 0;\n\n  if (label) {\n    for (var i = 0, j = label.length - 1; i < label.length; i += 1, j -= 1) {\n      result += Math.pow(COLUMN_LABEL_BASE_LENGTH, j) * (COLUMN_LABEL_BASE.indexOf(label[i]) + 1);\n    }\n  }\n  result -= 1;\n\n  return result;\n}\n\n/**\n * Creates 2D array of Excel-like values \"A1\", \"A2\", ...\n *\n * @param {Number} rows Number of rows to generate.\n * @param {Number} columns Number of columns to generate.\n * @returns {Array}\n */\nfunction createSpreadsheetData() {\n  var rows = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 100;\n  var columns = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 4;\n\n  var _rows = [];\n  var i = void 0;\n  var j = void 0;\n\n  for (i = 0; i < rows; i++) {\n    var row = [];\n\n    for (j = 0; j < columns; j++) {\n      row.push(spreadsheetColumnLabel(j) + (i + 1));\n    }\n    _rows.push(row);\n  }\n\n  return _rows;\n}\n\n/**\n * Creates 2D array of Excel-like values \"A1\", \"A2\", as an array of objects.\n *\n * @param {Number} rows Number of rows to generate.\n * @param {Number} colCount Number of columns to generate.\n * @returns {Array}\n */\nfunction createSpreadsheetObjectData() {\n  var rows = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 100;\n  var colCount = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 4;\n\n  var _rows = [];\n  var i = void 0;\n  var j = void 0;\n\n  for (i = 0; i < rows; i++) {\n    var row = {};\n\n    for (j = 0; j < colCount; j++) {\n      row['prop' + j] = spreadsheetColumnLabel(j) + (i + 1);\n    }\n    _rows.push(row);\n  }\n\n  return _rows;\n}\n\n/**\n * Generates an empty data object.\n *\n * @param {Number} rows Number of rows to generate.\n * @param {Number} columns Number of columns to generate\n * @returns {Array}\n */\nfunction createEmptySpreadsheetData(rows, columns) {\n  var data = [];\n  var row = void 0;\n\n  for (var i = 0; i < rows; i++) {\n    row = [];\n    for (var j = 0; j < columns; j++) {\n      row.push('');\n    }\n    data.push(row);\n  }\n\n  return data;\n}\n\nfunction translateRowsToColumns(input) {\n  var output = [];\n  var i = void 0;\n  var ilen = void 0;\n  var j = void 0;\n  var jlen = void 0;\n  var olen = 0;\n\n  for (i = 0, ilen = input.length; i < ilen; i++) {\n    for (j = 0, jlen = input[i].length; j < jlen; j++) {\n      if (j === olen) {\n        output.push([]);\n        olen += 1;\n      }\n      output[j].push(input[i][j]);\n    }\n  }\n\n  return output;\n}\n\n/**\n * Factory that produces a function for searching methods (or any properties) which could be defined directly in\n * table configuration or implicitly, within cell type definition.\n *\n * For example: renderer can be defined explicitly using \"renderer\" property in column configuration or it can be\n * defined implicitly using \"type\" property.\n *\n * Methods/properties defined explicitly always takes precedence over those defined through \"type\".\n *\n * If the method/property is not found in an object, searching is continued recursively through prototype chain, until\n * it reaches the Object.prototype.\n *\n *\n * @param methodName {String} name of the method/property to search (i.e. 'renderer', 'validator', 'copyable')\n * @param allowUndefined {Boolean} [optional] if false, the search is continued if methodName has not been found in cell \"type\"\n * @returns {Function}\n */\nfunction cellMethodLookupFactory(methodName, allowUndefined) {\n  var isUndefinedAllowed = typeof allowUndefined === 'undefined' ? true : allowUndefined;\n\n  return function cellMethodLookup(row, col) {\n    return function getMethodFromProperties(properties) {\n\n      if (!properties) {\n        return; // method not found\n      } else if ((0, _object.hasOwnProperty)(properties, methodName) && properties[methodName] !== void 0) {\n        // check if it is own and is not empty\n        return properties[methodName]; // method defined directly\n      } else if ((0, _object.hasOwnProperty)(properties, 'type') && properties.type) {\n        // check if it is own and is not empty\n        if (typeof properties.type !== 'string') {\n          throw new Error('Cell type must be a string ');\n        }\n\n        var type = (0, _cellTypes.getCellType)(properties.type);\n\n        if ((0, _object.hasOwnProperty)(type, methodName)) {\n          return type[methodName]; // method defined in type.\n        } else if (isUndefinedAllowed) {\n          return; // method does not defined in type (eg. validator), returns undefined\n        }\n      }\n\n      return getMethodFromProperties(Object.getPrototypeOf(properties));\n    }(typeof row === 'number' ? this.getCellMeta(row, col) : row);\n  };\n}\n\n/***/ }),\n/* 93 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _element = __webpack_require__(0);\n\nvar _array = __webpack_require__(2);\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * @class GhostTable\n * @util\n */\nvar GhostTable = function () {\n  function GhostTable(hotInstance) {\n    _classCallCheck(this, GhostTable);\n\n    /**\n     * Handsontable instance.\n     *\n     * @type {Core}\n     */\n    this.hot = hotInstance;\n    /**\n     * Container element where every table will be injected.\n     *\n     * @type {HTMLElement|null}\n     */\n    this.container = null;\n    /**\n     * Flag which determine is table was injected to DOM.\n     *\n     * @type {Boolean}\n     */\n    this.injected = false;\n    /**\n     * Added rows collection.\n     *\n     * @type {Array}\n     */\n    this.rows = [];\n    /**\n     * Added columns collection.\n     *\n     * @type {Array}\n     */\n    this.columns = [];\n    /**\n     * Samples prepared for calculations.\n     *\n     * @type {Map}\n     * @default {null}\n     */\n    this.samples = null;\n    /**\n     * Ghost table settings.\n     *\n     * @type {Object}\n     * @default {Object}\n     */\n    this.settings = {\n      useHeaders: true\n    };\n  }\n\n  /**\n   * Add row.\n   *\n   * @param {Number} row Row index.\n   * @param {Map} samples Samples Map object.\n   */\n\n\n  _createClass(GhostTable, [{\n    key: 'addRow',\n    value: function addRow(row, samples) {\n      if (this.columns.length) {\n        throw new Error('Doesn\\'t support multi-dimensional table');\n      }\n      if (!this.rows.length) {\n        this.container = this.createContainer(this.hot.rootElement.className);\n      }\n      var rowObject = { row: row };\n      this.rows.push(rowObject);\n\n      this.samples = samples;\n      this.table = this.createTable(this.hot.table.className);\n      this.table.colGroup.appendChild(this.createColGroupsCol());\n      this.table.tr.appendChild(this.createRow(row));\n      this.container.container.appendChild(this.table.fragment);\n\n      rowObject.table = this.table.table;\n    }\n\n    /**\n     * Add a row consisting of the column headers.\n     */\n\n  }, {\n    key: 'addColumnHeadersRow',\n    value: function addColumnHeadersRow(samples) {\n      var colHeader = this.hot.getColHeader(0);\n\n      if (colHeader !== null && colHeader !== void 0) {\n        var rowObject = { row: -1 };\n\n        this.rows.push(rowObject);\n\n        this.container = this.createContainer(this.hot.rootElement.className);\n        this.samples = samples;\n        this.table = this.createTable(this.hot.table.className);\n\n        this.table.colGroup.appendChild(this.createColGroupsCol());\n        this.table.tHead.appendChild(this.createColumnHeadersRow());\n        this.container.container.appendChild(this.table.fragment);\n\n        rowObject.table = this.table.table;\n      }\n    }\n\n    /**\n     * Add column.\n     *\n     * @param {Number} column Column index.\n     * @param {Map} samples Samples Map object.\n     */\n\n  }, {\n    key: 'addColumn',\n    value: function addColumn(column, samples) {\n      if (this.rows.length) {\n        throw new Error('Doesn\\'t support multi-dimensional table');\n      }\n      if (!this.columns.length) {\n        this.container = this.createContainer(this.hot.rootElement.className);\n      }\n      var columnObject = { col: column };\n      this.columns.push(columnObject);\n\n      this.samples = samples;\n      this.table = this.createTable(this.hot.table.className);\n\n      if (this.getSetting('useHeaders') && this.hot.getColHeader(column) !== null) {\n        this.hot.view.appendColHeader(column, this.table.th);\n      }\n      this.table.tBody.appendChild(this.createCol(column));\n      this.container.container.appendChild(this.table.fragment);\n\n      columnObject.table = this.table.table;\n    }\n\n    /**\n     * Get calculated heights.\n     *\n     * @param {Function} callback Callback which will be fired for each calculated row.\n     */\n\n  }, {\n    key: 'getHeights',\n    value: function getHeights(callback) {\n      if (!this.injected) {\n        this.injectTable();\n      }\n      (0, _array.arrayEach)(this.rows, function (row) {\n        // -1 <- reduce border-top from table\n        callback(row.row, (0, _element.outerHeight)(row.table) - 1);\n      });\n    }\n\n    /**\n     * Get calculated widths.\n     *\n     * @param {Function} callback Callback which will be fired for each calculated column.\n     */\n\n  }, {\n    key: 'getWidths',\n    value: function getWidths(callback) {\n      if (!this.injected) {\n        this.injectTable();\n      }\n      (0, _array.arrayEach)(this.columns, function (column) {\n        callback(column.col, (0, _element.outerWidth)(column.table));\n      });\n    }\n\n    /**\n     * Set the Ghost Table settings to the provided object.\n     *\n     * @param {Object} settings New Ghost Table Settings\n     */\n\n  }, {\n    key: 'setSettings',\n    value: function setSettings(settings) {\n      this.settings = settings;\n    }\n\n    /**\n     * Set a single setting of the Ghost Table.\n     *\n     * @param {String} name Setting name.\n     * @param {*} value Setting value.\n     */\n\n  }, {\n    key: 'setSetting',\n    value: function setSetting(name, value) {\n      if (!this.settings) {\n        this.settings = {};\n      }\n\n      this.settings[name] = value;\n    }\n\n    /**\n     * Get the Ghost Table settings.\n     *\n     * @returns {Object|null}\n     */\n\n  }, {\n    key: 'getSettings',\n    value: function getSettings() {\n      return this.settings;\n    }\n\n    /**\n     * Get a single Ghost Table setting.\n     *\n     * @param {String} name\n     * @returns {Boolean|null}\n     */\n\n  }, {\n    key: 'getSetting',\n    value: function getSetting(name) {\n      if (this.settings) {\n        return this.settings[name];\n      }\n      return null;\n    }\n\n    /**\n     * Create colgroup col elements.\n     *\n     * @returns {DocumentFragment}\n     */\n\n  }, {\n    key: 'createColGroupsCol',\n    value: function createColGroupsCol() {\n      var _this = this;\n\n      var d = document;\n      var fragment = d.createDocumentFragment();\n\n      if (this.hot.hasRowHeaders()) {\n        fragment.appendChild(this.createColElement(-1));\n      }\n\n      this.samples.forEach(function (sample) {\n        (0, _array.arrayEach)(sample.strings, function (string) {\n          fragment.appendChild(_this.createColElement(string.col));\n        });\n      });\n\n      return fragment;\n    }\n\n    /**\n     * Create table row element.\n     *\n     * @param {Number} row Row index.\n     * @returns {DocumentFragment} Returns created table row elements.\n     */\n\n  }, {\n    key: 'createRow',\n    value: function createRow(row) {\n      var _this2 = this;\n\n      var d = document;\n      var fragment = d.createDocumentFragment();\n      var th = d.createElement('th');\n\n      if (this.hot.hasRowHeaders()) {\n        this.hot.view.appendRowHeader(row, th);\n\n        fragment.appendChild(th);\n      }\n\n      this.samples.forEach(function (sample) {\n        (0, _array.arrayEach)(sample.strings, function (string) {\n          var column = string.col;\n          var cellProperties = _this2.hot.getCellMeta(row, column);\n\n          cellProperties.col = column;\n          cellProperties.row = row;\n\n          var renderer = _this2.hot.getCellRenderer(cellProperties);\n          var td = d.createElement('td');\n\n          renderer(_this2.hot, td, row, column, _this2.hot.colToProp(column), string.value, cellProperties);\n          fragment.appendChild(td);\n        });\n      });\n\n      return fragment;\n    }\n  }, {\n    key: 'createColumnHeadersRow',\n    value: function createColumnHeadersRow() {\n      var _this3 = this;\n\n      var d = document;\n      var fragment = d.createDocumentFragment();\n\n      if (this.hot.hasRowHeaders()) {\n        var th = d.createElement('th');\n        this.hot.view.appendColHeader(-1, th);\n        fragment.appendChild(th);\n      }\n\n      this.samples.forEach(function (sample) {\n        (0, _array.arrayEach)(sample.strings, function (string) {\n          var column = string.col;\n\n          var th = d.createElement('th');\n\n          _this3.hot.view.appendColHeader(column, th);\n          fragment.appendChild(th);\n        });\n      });\n\n      return fragment;\n    }\n\n    /**\n     * Create table column elements.\n     *\n     * @param {Number} column Column index.\n     * @returns {DocumentFragment} Returns created column table column elements.\n     */\n\n  }, {\n    key: 'createCol',\n    value: function createCol(column) {\n      var _this4 = this;\n\n      var d = document;\n      var fragment = d.createDocumentFragment();\n\n      this.samples.forEach(function (sample) {\n        (0, _array.arrayEach)(sample.strings, function (string) {\n          var row = string.row;\n          var cellProperties = _this4.hot.getCellMeta(row, column);\n\n          cellProperties.col = column;\n          cellProperties.row = row;\n\n          var renderer = _this4.hot.getCellRenderer(cellProperties);\n          var td = d.createElement('td');\n          var tr = d.createElement('tr');\n\n          renderer(_this4.hot, td, row, column, _this4.hot.colToProp(column), string.value, cellProperties);\n          tr.appendChild(td);\n          fragment.appendChild(tr);\n        });\n      });\n\n      return fragment;\n    }\n\n    /**\n     * Remove table from document and reset internal state.\n     */\n\n  }, {\n    key: 'clean',\n    value: function clean() {\n      this.rows.length = 0;\n      this.rows[-1] = void 0;\n      this.columns.length = 0;\n\n      if (this.samples) {\n        this.samples.clear();\n      }\n      this.samples = null;\n      this.removeTable();\n    }\n\n    /**\n     * Inject generated table into document.\n     *\n     * @param {HTMLElement} [parent=null]\n     */\n\n  }, {\n    key: 'injectTable',\n    value: function injectTable() {\n      var parent = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n\n      if (!this.injected) {\n        (parent || this.hot.rootElement).appendChild(this.container.fragment);\n        this.injected = true;\n      }\n    }\n\n    /**\n     * Remove table from document.\n     */\n\n  }, {\n    key: 'removeTable',\n    value: function removeTable() {\n      if (this.injected && this.container.container.parentNode) {\n        this.container.container.parentNode.removeChild(this.container.container);\n        this.container = null;\n        this.injected = false;\n      }\n    }\n\n    /**\n     * Create col element.\n     *\n     * @param {Number} column Column index.\n     * @returns {HTMLElement}\n     */\n\n  }, {\n    key: 'createColElement',\n    value: function createColElement(column) {\n      var d = document;\n      var col = d.createElement('col');\n\n      col.style.width = this.hot.view.wt.wtTable.getStretchedColumnWidth(column) + 'px';\n\n      return col;\n    }\n\n    /**\n     * Create table element.\n     *\n     * @param {String} className\n     * @returns {Object}\n     */\n\n  }, {\n    key: 'createTable',\n    value: function createTable() {\n      var className = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n\n      var d = document;\n      var fragment = d.createDocumentFragment();\n      var table = d.createElement('table');\n      var tHead = d.createElement('thead');\n      var tBody = d.createElement('tbody');\n      var colGroup = d.createElement('colgroup');\n      var tr = d.createElement('tr');\n      var th = d.createElement('th');\n\n      if (this.isVertical()) {\n        table.appendChild(colGroup);\n      }\n      if (this.isHorizontal()) {\n        tr.appendChild(th);\n        tHead.appendChild(tr);\n        table.style.tableLayout = 'auto';\n        table.style.width = 'auto';\n      }\n      table.appendChild(tHead);\n\n      if (this.isVertical()) {\n        tBody.appendChild(tr);\n      }\n      table.appendChild(tBody);\n      (0, _element.addClass)(table, className);\n      fragment.appendChild(table);\n\n      return { fragment: fragment, table: table, tHead: tHead, tBody: tBody, colGroup: colGroup, tr: tr, th: th };\n    }\n\n    /**\n     * Create container for tables.\n     *\n     * @param {String} className\n     * @returns {Object}\n     */\n\n  }, {\n    key: 'createContainer',\n    value: function createContainer() {\n      var className = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n\n      var d = document;\n      var fragment = d.createDocumentFragment();\n      var container = d.createElement('div');\n      var containerClassName = 'htGhostTable htAutoSize ' + className.trim();\n\n      (0, _element.addClass)(container, containerClassName);\n      fragment.appendChild(container);\n\n      return { fragment: fragment, container: container };\n    }\n\n    /**\n     * Checks if table is raised vertically (checking rows).\n     *\n     * @returns {Boolean}\n     */\n\n  }, {\n    key: 'isVertical',\n    value: function isVertical() {\n      return !!(this.rows.length && !this.columns.length);\n    }\n\n    /**\n     * Checks if table is raised horizontally (checking columns).\n     *\n     * @returns {Boolean}\n     */\n\n  }, {\n    key: 'isHorizontal',\n    value: function isHorizontal() {\n      return !!(this.columns.length && !this.rows.length);\n    }\n  }]);\n\n  return GhostTable;\n}();\n\nexports.default = GhostTable;\n\n/***/ }),\n/* 94 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _array = __webpack_require__(2);\n\nvar _object = __webpack_require__(1);\n\nvar _number = __webpack_require__(6);\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nvar MIXIN_NAME = 'arrayMapper';\n\n/**\n * @type {Object}\n */\nvar arrayMapper = {\n  _arrayMap: [],\n\n  /**\n   * Get translated index by its physical index.\n   *\n   * @param {Number} physicalIndex Physical index.\n   * @return {Number|null} Returns translated index mapped by passed physical index.\n   */\n  getValueByIndex: function getValueByIndex(physicalIndex) {\n    var length = this._arrayMap.length;\n    var translatedIndex = null;\n\n    if (physicalIndex < length) {\n      translatedIndex = this._arrayMap[physicalIndex];\n    }\n\n    return translatedIndex;\n  },\n\n\n  /**\n   * Get physical index by its translated index.\n   *\n   * @param {*} translatedIndex Value to search.\n   * @returns {Number|null} Returns a physical index of the array mapper.\n   */\n  getIndexByValue: function getIndexByValue(translatedIndex) {\n    var physicalIndex = void 0;\n\n    // eslint-disable-next-line no-cond-assign, no-return-assign\n    return (physicalIndex = this._arrayMap.indexOf(translatedIndex)) === -1 ? null : physicalIndex;\n  },\n\n\n  /**\n   * Insert new items to array mapper starting at passed index. New entries will be a continuation of last value in the array.\n   *\n   * @param {Number} physicalIndex Array index.\n   * @param {Number} [amount=1] Defines how many items will be created to an array.\n   * @returns {Array} Returns added items.\n   */\n  insertItems: function insertItems(physicalIndex) {\n    var _this = this;\n\n    var amount = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n\n    var newIndex = (0, _array.arrayMax)(this._arrayMap) + 1;\n    var addedItems = [];\n\n    (0, _number.rangeEach)(amount - 1, function (count) {\n      addedItems.push(_this._arrayMap.splice(physicalIndex + count, 0, newIndex + count));\n    });\n\n    return addedItems;\n  },\n\n\n  /**\n   * Remove items from array mapper.\n   *\n   * @param {Number} physicalIndex Array index.\n   * @param {Number} [amount=1] Defines how many items will be created to an array.\n   * @returns {Array} Returns removed items.\n   */\n  removeItems: function removeItems(physicalIndex) {\n    var _this2 = this;\n\n    var amount = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n\n    var removedItems = [];\n\n    if (Array.isArray(physicalIndex)) {\n      var mapCopy = [].concat(this._arrayMap);\n\n      // Sort descending\n      physicalIndex.sort(function (a, b) {\n        return b - a;\n      });\n\n      removedItems = (0, _array.arrayReduce)(physicalIndex, function (acc, item) {\n        _this2._arrayMap.splice(item, 1);\n\n        return acc.concat(mapCopy.slice(item, item + 1));\n      }, []);\n    } else {\n      removedItems = this._arrayMap.splice(physicalIndex, amount);\n    }\n\n    return removedItems;\n  },\n\n\n  /**\n   * Unshift items (remove and shift chunk of array to the left).\n   *\n   * @param {Number|Array} physicalIndex Array index or Array of indexes to unshift.\n   * @param {Number} [amount=1] Defines how many items will be removed from an array (when index is passed as number).\n   */\n  unshiftItems: function unshiftItems(physicalIndex) {\n    var amount = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n\n    var removedItems = this.removeItems(physicalIndex, amount);\n\n    function countRowShift(logicalRow) {\n      // Todo: compare perf between reduce vs sort->each->brake\n      return (0, _array.arrayReduce)(removedItems, function (count, removedLogicalRow) {\n        var result = count;\n\n        if (logicalRow > removedLogicalRow) {\n          result += 1;\n        }\n\n        return result;\n      }, 0);\n    }\n\n    this._arrayMap = (0, _array.arrayMap)(this._arrayMap, function (logicalRow) {\n      var logicalRowIndex = logicalRow;\n      var rowShift = countRowShift(logicalRowIndex);\n\n      if (rowShift) {\n        logicalRowIndex -= rowShift;\n      }\n\n      return logicalRowIndex;\n    });\n  },\n\n\n  /**\n   * Shift (right shifting) items starting at passed index.\n   *\n   * @param {Number} physicalIndex Array index.\n   * @param {Number} [amount=1] Defines how many items will be created to an array.\n   */\n  shiftItems: function shiftItems(physicalIndex) {\n    var _this3 = this;\n\n    var amount = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n\n    this._arrayMap = (0, _array.arrayMap)(this._arrayMap, function (row) {\n      var physicalRowIndex = row;\n\n      if (physicalRowIndex >= physicalIndex) {\n        physicalRowIndex += amount;\n      }\n\n      return physicalRowIndex;\n    });\n\n    (0, _number.rangeEach)(amount - 1, function (count) {\n      _this3._arrayMap.splice(physicalIndex + count, 0, physicalIndex + count);\n    });\n  },\n\n\n  /**\n   * Swap indexes in arrayMapper.\n   *\n   * @param {Number} physicalIndexFrom index to move.\n   * @param {Number} physicalIndexTo index to.\n   */\n  swapIndexes: function swapIndexes(physicalIndexFrom, physicalIndexTo) {\n    var _arrayMap;\n\n    (_arrayMap = this._arrayMap).splice.apply(_arrayMap, [physicalIndexTo, 0].concat(_toConsumableArray(this._arrayMap.splice(physicalIndexFrom, 1))));\n  },\n\n\n  /**\n   * Clear all stored index<->value information from an array.\n   */\n  clearMap: function clearMap() {\n    this._arrayMap.length = 0;\n  }\n};\n\n(0, _object.defineGetter)(arrayMapper, 'MIXIN_NAME', MIXIN_NAME, {\n  writable: false,\n  enumerable: false\n});\n\nexports.default = arrayMapper;\n\n/***/ }),\n/* 95 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports.default = separatorItem;\nvar KEY = exports.KEY = '---------';\n\nfunction separatorItem() {\n  return {\n    name: KEY\n  };\n}\n\n/***/ }),\n/* 96 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports.ITEMS = exports.UNDO = exports.SEPARATOR = exports.ROW_BELOW = exports.ROW_ABOVE = exports.REMOVE_ROW = exports.REMOVE_COLUMN = exports.REDO = exports.READ_ONLY = exports.COLUMN_RIGHT = exports.COLUMN_LEFT = exports.CLEAR_COLUMN = exports.ALIGNMENT = undefined;\n\nvar _predefinedItems2;\n\nvar _alignment = __webpack_require__(305);\n\nObject.defineProperty(exports, 'ALIGNMENT', {\n  enumerable: true,\n  get: function get() {\n    return _alignment.KEY;\n  }\n});\n\nvar _clearColumn = __webpack_require__(306);\n\nObject.defineProperty(exports, 'CLEAR_COLUMN', {\n  enumerable: true,\n  get: function get() {\n    return _clearColumn.KEY;\n  }\n});\n\nvar _columnLeft = __webpack_require__(307);\n\nObject.defineProperty(exports, 'COLUMN_LEFT', {\n  enumerable: true,\n  get: function get() {\n    return _columnLeft.KEY;\n  }\n});\n\nvar _columnRight = __webpack_require__(308);\n\nObject.defineProperty(exports, 'COLUMN_RIGHT', {\n  enumerable: true,\n  get: function get() {\n    return _columnRight.KEY;\n  }\n});\n\nvar _readOnly = __webpack_require__(309);\n\nObject.defineProperty(exports, 'READ_ONLY', {\n  enumerable: true,\n  get: function get() {\n    return _readOnly.KEY;\n  }\n});\n\nvar _redo = __webpack_require__(310);\n\nObject.defineProperty(exports, 'REDO', {\n  enumerable: true,\n  get: function get() {\n    return _redo.KEY;\n  }\n});\n\nvar _removeColumn = __webpack_require__(311);\n\nObject.defineProperty(exports, 'REMOVE_COLUMN', {\n  enumerable: true,\n  get: function get() {\n    return _removeColumn.KEY;\n  }\n});\n\nvar _removeRow = __webpack_require__(312);\n\nObject.defineProperty(exports, 'REMOVE_ROW', {\n  enumerable: true,\n  get: function get() {\n    return _removeRow.KEY;\n  }\n});\n\nvar _rowAbove = __webpack_require__(313);\n\nObject.defineProperty(exports, 'ROW_ABOVE', {\n  enumerable: true,\n  get: function get() {\n    return _rowAbove.KEY;\n  }\n});\n\nvar _rowBelow = __webpack_require__(314);\n\nObject.defineProperty(exports, 'ROW_BELOW', {\n  enumerable: true,\n  get: function get() {\n    return _rowBelow.KEY;\n  }\n});\n\nvar _separator = __webpack_require__(95);\n\nObject.defineProperty(exports, 'SEPARATOR', {\n  enumerable: true,\n  get: function get() {\n    return _separator.KEY;\n  }\n});\n\nvar _undo = __webpack_require__(315);\n\nObject.defineProperty(exports, 'UNDO', {\n  enumerable: true,\n  get: function get() {\n    return _undo.KEY;\n  }\n});\nexports.predefinedItems = predefinedItems;\nexports.addItem = addItem;\n\nvar _object = __webpack_require__(1);\n\nvar _alignment2 = _interopRequireDefault(_alignment);\n\nvar _clearColumn2 = _interopRequireDefault(_clearColumn);\n\nvar _columnLeft2 = _interopRequireDefault(_columnLeft);\n\nvar _columnRight2 = _interopRequireDefault(_columnRight);\n\nvar _readOnly2 = _interopRequireDefault(_readOnly);\n\nvar _redo2 = _interopRequireDefault(_redo);\n\nvar _removeColumn2 = _interopRequireDefault(_removeColumn);\n\nvar _removeRow2 = _interopRequireDefault(_removeRow);\n\nvar _rowAbove2 = _interopRequireDefault(_rowAbove);\n\nvar _rowBelow2 = _interopRequireDefault(_rowBelow);\n\nvar _separator2 = _interopRequireDefault(_separator);\n\nvar _undo2 = _interopRequireDefault(_undo);\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 ITEMS = exports.ITEMS = [_rowAbove.KEY, _rowBelow.KEY, _columnLeft.KEY, _columnRight.KEY, _clearColumn.KEY, _removeRow.KEY, _removeColumn.KEY, _undo.KEY, _redo.KEY, _readOnly.KEY, _alignment.KEY, _separator.KEY];\n\nvar _predefinedItems = (_predefinedItems2 = {}, _defineProperty(_predefinedItems2, _separator.KEY, _separator2.default), _defineProperty(_predefinedItems2, _rowAbove.KEY, _rowAbove2.default), _defineProperty(_predefinedItems2, _rowBelow.KEY, _rowBelow2.default), _defineProperty(_predefinedItems2, _columnLeft.KEY, _columnLeft2.default), _defineProperty(_predefinedItems2, _columnRight.KEY, _columnRight2.default), _defineProperty(_predefinedItems2, _clearColumn.KEY, _clearColumn2.default), _defineProperty(_predefinedItems2, _removeRow.KEY, _removeRow2.default), _defineProperty(_predefinedItems2, _removeColumn.KEY, _removeColumn2.default), _defineProperty(_predefinedItems2, _undo.KEY, _undo2.default), _defineProperty(_predefinedItems2, _redo.KEY, _redo2.default), _defineProperty(_predefinedItems2, _readOnly.KEY, _readOnly2.default), _defineProperty(_predefinedItems2, _alignment.KEY, _alignment2.default), _predefinedItems2);\n\n/**\n * Gets new object with all predefined menu items.\n *\n * @returns {Object}\n */\nfunction predefinedItems() {\n  var items = {};\n\n  (0, _object.objectEach)(_predefinedItems, function (itemFactory, key) {\n    items[key] = itemFactory();\n  });\n\n  return items;\n}\n\n/**\n * Add new predefined menu item to the collection.\n *\n * @param {String} key Menu command id.\n * @param {Object} item Object command descriptor.\n */\nfunction addItem(key, item) {\n  if (ITEMS.indexOf(key) === -1) {\n    _predefinedItems[key] = item;\n  }\n}\n\n/***/ }),\n/* 97 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _templateObject = _taggedTemplateLiteral(['The merged cell declared with {row: ', ', col: ', ', rowspan: \\n    ', ', colspan: ', '} contains negative values, which is not supported. It \\n    will not be added to the collection.'], ['The merged cell declared with {row: ', ', col: ', ', rowspan: \\n    ', ', colspan: ', '} contains negative values, which is not supported. It \\n    will not be added to the collection.']),\n    _templateObject2 = _taggedTemplateLiteral(['The merged cell declared at [', ', ', '] is positioned (or positioned partially) \\n       outside of the table range. It was not added to the table, please fix your setup.'], ['The merged cell declared at [', ', ', '] is positioned (or positioned partially) \\n       outside of the table range. It was not added to the table, please fix your setup.']),\n    _templateObject3 = _taggedTemplateLiteral(['The merged cell declared at [', ', ', '] has both \"rowspan\" \\n     and \"colspan\" declared as \"1\", which makes it a single cell. It cannot be added to the collection.'], ['The merged cell declared at [', ', ', '] has both \"rowspan\" \\n     and \"colspan\" declared as \"1\", which makes it a single cell. It cannot be added to the collection.']),\n    _templateObject4 = _taggedTemplateLiteral(['The merged cell declared at [', ', ', '] has \"rowspan\" or \"colspan\" declared as \\n      \"0\", which is not supported. It cannot be added to the collection.'], ['The merged cell declared at [', ', ', '] has \"rowspan\" or \"colspan\" declared as \\n      \"0\", which is not supported. It cannot be added to the collection.']);\n\nvar _index = __webpack_require__(4);\n\nvar _templateLiteralTag = __webpack_require__(42);\n\nfunction _taggedTemplateLiteral(strings, raw) { return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * The `MergedCellCoords` class represents a single merged cell.\n *\n * @class MergedCellCoords\n * @plugin MergeCells\n */\nvar MergedCellCoords = function () {\n  function MergedCellCoords(row, column, rowspan, colspan) {\n    _classCallCheck(this, MergedCellCoords);\n\n    /**\n     * The index of the topmost merged cell row.\n     *\n     * @type {Number}\n     */\n    this.row = row;\n    /**\n     * The index of the leftmost column.\n     *\n     * @type {Number}\n     */\n    this.col = column;\n    /**\n     * The `rowspan` value of the merged cell.\n     *\n     * @type {Number}\n     */\n    this.rowspan = rowspan;\n    /**\n     * The `colspan` value of the merged cell.\n     *\n     * @type {Number}\n     */\n    this.colspan = colspan;\n    /**\n     * `true` only if the merged cell is bound to be removed.\n     *\n     * @type {Boolean}\n     */\n    this.removed = false;\n  }\n\n  /**\n   * Get a warning message for when the declared merged cell data contains negative values.\n   *\n   * @param {Object} newMergedCell Object containg information about the merged cells that was about to be added.\n   * @return {String}\n   */\n\n\n  _createClass(MergedCellCoords, [{\n    key: 'normalize',\n\n\n    /**\n     * Sanitize (prevent from going outside the boundaries) the merged cell.\n     *\n     * @param hotInstance\n     */\n    value: function normalize(hotInstance) {\n      var totalRows = hotInstance.countRows();\n      var totalColumns = hotInstance.countCols();\n\n      if (this.row < 0) {\n        this.row = 0;\n      } else if (this.row > totalRows - 1) {\n        this.row = totalRows - 1;\n      }\n\n      if (this.col < 0) {\n        this.col = 0;\n      } else if (this.col > totalColumns - 1) {\n        this.col = totalColumns - 1;\n      }\n\n      if (this.row + this.rowspan > totalRows - 1) {\n        this.rowspan = totalRows - this.row;\n      }\n\n      if (this.col + this.colspan > totalColumns - 1) {\n        this.colspan = totalColumns - this.col;\n      }\n    }\n\n    /**\n     * Returns `true` if the provided coordinates are inside the merged cell.\n     *\n     * @param {Number} row The row index.\n     * @param {Number} column The column index.\n     * @return {Boolean}\n     */\n\n  }, {\n    key: 'includes',\n    value: function includes(row, column) {\n      return this.row <= row && this.col <= column && this.row + this.rowspan - 1 >= row && this.col + this.colspan - 1 >= column;\n    }\n\n    /**\n     * Returns `true` if the provided `column` property is within the column span of the merged cell.\n     *\n     * @param {Number} column The column index.\n     * @return {Boolean}\n     */\n\n  }, {\n    key: 'includesHorizontally',\n    value: function includesHorizontally(column) {\n      return this.col <= column && this.col + this.colspan - 1 >= column;\n    }\n\n    /**\n     * Returns `true` if the provided `row` property is within the row span of the merged cell.\n     *\n     * @param {Number} row Row index.\n     * @return {Boolean}\n     */\n\n  }, {\n    key: 'includesVertically',\n    value: function includesVertically(row) {\n      return this.row <= row && this.row + this.rowspan - 1 >= row;\n    }\n\n    /**\n     * Shift (and possibly resize, if needed) the merged cell.\n     *\n     * @param {Array} shiftVector 2-element array containing the information on the shifting in the `x` and `y` axis.\n     * @param {Number} indexOfChange Index of the preceding change.\n     * @returns {Boolean} Returns `false` if the whole merged cell was removed.\n     */\n\n  }, {\n    key: 'shift',\n    value: function shift(shiftVector, indexOfChange) {\n      var shiftValue = shiftVector[0] || shiftVector[1];\n      var shiftedIndex = indexOfChange + Math.abs(shiftVector[0] || shiftVector[1]) - 1;\n      var span = shiftVector[0] ? 'colspan' : 'rowspan';\n      var index = shiftVector[0] ? 'col' : 'row';\n      var changeStart = Math.min(indexOfChange, shiftedIndex);\n      var changeEnd = Math.max(indexOfChange, shiftedIndex);\n      var mergeStart = this[index];\n      var mergeEnd = this[index] + this[span] - 1;\n\n      if (mergeStart >= indexOfChange) {\n        this[index] += shiftValue;\n      }\n\n      // adding rows/columns\n      if (shiftValue > 0) {\n        if (indexOfChange <= mergeEnd && indexOfChange > mergeStart) {\n          this[span] += shiftValue;\n        }\n\n        // removing rows/columns\n      } else if (shiftValue < 0) {\n\n        // removing the whole merge\n        if (changeStart <= mergeStart && changeEnd >= mergeEnd) {\n          this.removed = true;\n          return false;\n\n          // removing the merge partially, including the beginning\n        } else if (mergeStart >= changeStart && mergeStart <= changeEnd) {\n          var removedOffset = changeEnd - mergeStart + 1;\n          var preRemovedOffset = Math.abs(shiftValue) - removedOffset;\n\n          this[index] -= preRemovedOffset + shiftValue;\n          this[span] -= removedOffset;\n\n          // removing the middle part of the merge\n        } else if (mergeStart <= changeStart && mergeEnd >= changeEnd) {\n          this[span] += shiftValue;\n\n          // removing the end part of the merge\n        } else if (mergeStart <= changeStart && mergeEnd >= changeStart && mergeEnd < changeEnd) {\n          var removedPart = mergeEnd - changeStart + 1;\n\n          this[span] -= removedPart;\n        }\n      }\n\n      return true;\n    }\n\n    /**\n     * Check if the second provided merged cell is \"farther\" in the provided direction.\n     *\n     * @param {MergedCellCoords} mergedCell The merged cell to check.\n     * @param {String} direction Drag direction.\n     * @return {Boolean|null} `true` if the second provided merged cell is \"farther\".\n     */\n\n  }, {\n    key: 'isFarther',\n    value: function isFarther(mergedCell, direction) {\n      if (!mergedCell) {\n        return true;\n      }\n\n      if (direction === 'down') {\n        return mergedCell.row + mergedCell.rowspan - 1 < this.row + this.rowspan - 1;\n      } else if (direction === 'up') {\n        return mergedCell.row > this.row;\n      } else if (direction === 'right') {\n        return mergedCell.col + mergedCell.colspan - 1 < this.col + this.colspan - 1;\n      } else if (direction === 'left') {\n        return mergedCell.col > this.col;\n      }\n      return null;\n    }\n\n    /**\n     * Get the bottom row index of the merged cell.\n     *\n     * @returns {Number}\n     */\n\n  }, {\n    key: 'getLastRow',\n    value: function getLastRow() {\n      return this.row + this.rowspan - 1;\n    }\n\n    /**\n     * Get the rightmost column index of the merged cell.\n     *\n     * @returns {Number}\n     */\n\n  }, {\n    key: 'getLastColumn',\n    value: function getLastColumn() {\n      return this.col + this.colspan - 1;\n    }\n\n    /**\n     * Get the range coordinates of the merged cell.\n     *\n     * @return {CellRange}\n     */\n\n  }, {\n    key: 'getRange',\n    value: function getRange() {\n      return new _index.CellRange(new _index.CellCoords(this.row, this.col), new _index.CellCoords(this.row, this.col), new _index.CellCoords(this.getLastRow(), this.getLastColumn()));\n    }\n  }], [{\n    key: 'NEGATIVE_VALUES_WARNING',\n    value: function NEGATIVE_VALUES_WARNING(newMergedCell) {\n      return (0, _templateLiteralTag.toSingleLine)(_templateObject, newMergedCell.row, newMergedCell.col, newMergedCell.rowspan, newMergedCell.colspan);\n    }\n\n    /**\n     * Get a warning message for when the declared merged cell data contains values exceeding the table limits.\n     *\n     * @param {Object} newMergedCell Object containg information about the merged cells that was about to be added.\n     * @return {String}\n     */\n\n  }, {\n    key: 'IS_OUT_OF_BOUNDS_WARNING',\n    value: function IS_OUT_OF_BOUNDS_WARNING(newMergedCell) {\n      return (0, _templateLiteralTag.toSingleLine)(_templateObject2, newMergedCell.row, newMergedCell.col);\n    }\n\n    /**\n     * Get a warning message for when the declared merged cell data represents a single cell.\n     *\n     * @param {Object} newMergedCell Object containg information about the merged cells that was about to be added.\n     * @return {String}\n     */\n\n  }, {\n    key: 'IS_SINGLE_CELL',\n    value: function IS_SINGLE_CELL(newMergedCell) {\n      return (0, _templateLiteralTag.toSingleLine)(_templateObject3, newMergedCell.row, newMergedCell.col);\n    }\n\n    /**\n     * Get a warning message for when the declared merged cell data contains \"colspan\" or \"rowspan\", that equals 0.\n     *\n     * @param {Object} newMergedCell Object containg information about the merged cells that was about to be added.\n     * @return {String}\n     */\n\n  }, {\n    key: 'ZERO_SPAN_WARNING',\n    value: function ZERO_SPAN_WARNING(newMergedCell) {\n      return (0, _templateLiteralTag.toSingleLine)(_templateObject4, newMergedCell.row, newMergedCell.col);\n    }\n\n    /**\n     * Check whether the values provided for a merged cell contain any negative values.\n     *\n     * @param {Object} mergedCellInfo Object containing the `row`, `col`, `rowspan` and `colspan` properties.\n     * @return {Boolean}\n     */\n\n  }, {\n    key: 'containsNegativeValues',\n    value: function containsNegativeValues(mergedCellInfo) {\n      return mergedCellInfo.row < 0 || mergedCellInfo.col < 0 || mergedCellInfo.rowspan < 0 || mergedCellInfo.colspan < 0;\n    }\n\n    /**\n     * Check whether the provided merged cell information object represents a single cell.\n     *\n     * @private\n     * @param {Object} mergedCellInfo An object with `row`, `col`, `rowspan` and `colspan` properties.\n     * @return {Boolean}\n     */\n\n  }, {\n    key: 'isSingleCell',\n    value: function isSingleCell(mergedCellInfo) {\n      return mergedCellInfo.colspan === 1 && mergedCellInfo.rowspan === 1;\n    }\n\n    /**\n     * Check whether the provided merged cell information object contains a rowspan or colspan of 0.\n     *\n     * @private\n     * @param {Object} mergedCellInfo An object with `row`, `col`, `rowspan` and `colspan` properties.\n     * @return {Boolean}\n     */\n\n  }, {\n    key: 'containsZeroSpan',\n    value: function containsZeroSpan(mergedCellInfo) {\n      return mergedCellInfo.colspan === 0 || mergedCellInfo.rowspan === 0;\n    }\n\n    /**\n     * Check whether the provided merged cell object is to be declared out of bounds of the table.\n     *\n     * @param {Object} mergeCell Object containing the `row`, `col`, `rowspan` and `colspan` properties.\n     * @param {Number} rowCount Number of rows in the table.\n     * @param {Number} columnCount Number of rows in the table.\n     * @return {Boolean}\n     */\n\n  }, {\n    key: 'isOutOfBounds',\n    value: function isOutOfBounds(mergeCell, rowCount, columnCount) {\n      return mergeCell.row < 0 || mergeCell.col < 0 || mergeCell.row >= rowCount || mergeCell.row + mergeCell.rowspan - 1 >= rowCount || mergeCell.col >= columnCount || mergeCell.col + mergeCell.colspan - 1 >= columnCount;\n    }\n  }]);\n\n  return MergedCellCoords;\n}();\n\nexports.default = MergedCellCoords;\n\n/***/ }),\n/* 98 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar strong = __webpack_require__(99);\nvar validate = __webpack_require__(45);\nvar MAP = 'Map';\n\n// 23.1 Map Objects\nmodule.exports = __webpack_require__(66)(MAP, function (get) {\n  return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n  // 23.1.3.6 Map.prototype.get(key)\n  get: function get(key) {\n    var entry = strong.getEntry(validate(this, MAP), key);\n    return entry && entry.v;\n  },\n  // 23.1.3.9 Map.prototype.set(key, value)\n  set: function set(key, value) {\n    return strong.def(validate(this, MAP), key === 0 ? 0 : key, value);\n  }\n}, strong, true);\n\n\n/***/ }),\n/* 99 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar dP = __webpack_require__(20).f;\nvar create = __webpack_require__(76);\nvar redefineAll = __webpack_require__(62);\nvar ctx = __webpack_require__(30);\nvar anInstance = __webpack_require__(64);\nvar forOf = __webpack_require__(65);\nvar $iterDefine = __webpack_require__(108);\nvar step = __webpack_require__(110);\nvar setSpecies = __webpack_require__(111);\nvar DESCRIPTORS = __webpack_require__(22);\nvar fastKey = __webpack_require__(32).fastKey;\nvar validate = __webpack_require__(45);\nvar SIZE = DESCRIPTORS ? '_s' : 'size';\n\nvar getEntry = function (that, key) {\n  // fast case\n  var index = fastKey(key);\n  var entry;\n  if (index !== 'F') return that._i[index];\n  // frozen object case\n  for (entry = that._f; entry; entry = entry.n) {\n    if (entry.k == key) return entry;\n  }\n};\n\nmodule.exports = {\n  getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n    var C = wrapper(function (that, iterable) {\n      anInstance(that, C, NAME, '_i');\n      that._t = NAME;         // collection type\n      that._i = create(null); // index\n      that._f = undefined;    // first entry\n      that._l = undefined;    // last entry\n      that[SIZE] = 0;         // size\n      if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n    });\n    redefineAll(C.prototype, {\n      // 23.1.3.1 Map.prototype.clear()\n      // 23.2.3.2 Set.prototype.clear()\n      clear: function clear() {\n        for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {\n          entry.r = true;\n          if (entry.p) entry.p = entry.p.n = undefined;\n          delete data[entry.i];\n        }\n        that._f = that._l = undefined;\n        that[SIZE] = 0;\n      },\n      // 23.1.3.3 Map.prototype.delete(key)\n      // 23.2.3.4 Set.prototype.delete(value)\n      'delete': function (key) {\n        var that = validate(this, NAME);\n        var entry = getEntry(that, key);\n        if (entry) {\n          var next = entry.n;\n          var prev = entry.p;\n          delete that._i[entry.i];\n          entry.r = true;\n          if (prev) prev.n = next;\n          if (next) next.p = prev;\n          if (that._f == entry) that._f = next;\n          if (that._l == entry) that._l = prev;\n          that[SIZE]--;\n        } return !!entry;\n      },\n      // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n      // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n      forEach: function forEach(callbackfn /* , that = undefined */) {\n        validate(this, NAME);\n        var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n        var entry;\n        while (entry = entry ? entry.n : this._f) {\n          f(entry.v, entry.k, this);\n          // revert to the last existing entry\n          while (entry && entry.r) entry = entry.p;\n        }\n      },\n      // 23.1.3.7 Map.prototype.has(key)\n      // 23.2.3.7 Set.prototype.has(value)\n      has: function has(key) {\n        return !!getEntry(validate(this, NAME), key);\n      }\n    });\n    if (DESCRIPTORS) dP(C.prototype, 'size', {\n      get: function () {\n        return validate(this, NAME)[SIZE];\n      }\n    });\n    return C;\n  },\n  def: function (that, key, value) {\n    var entry = getEntry(that, key);\n    var prev, index;\n    // change existing entry\n    if (entry) {\n      entry.v = value;\n    // create new entry\n    } else {\n      that._l = entry = {\n        i: index = fastKey(key, true), // <- index\n        k: key,                        // <- key\n        v: value,                      // <- value\n        p: prev = that._l,             // <- previous entry\n        n: undefined,                  // <- next entry\n        r: false                       // <- removed\n      };\n      if (!that._f) that._f = entry;\n      if (prev) prev.n = entry;\n      that[SIZE]++;\n      // add to index\n      if (index !== 'F') that._i[index] = entry;\n    } return that;\n  },\n  getEntry: getEntry,\n  setStrong: function (C, NAME, IS_MAP) {\n    // add .keys, .values, .entries, [@@iterator]\n    // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n    $iterDefine(C, NAME, function (iterated, kind) {\n      this._t = validate(iterated, NAME); // target\n      this._k = kind;                     // kind\n      this._l = undefined;                // previous\n    }, function () {\n      var that = this;\n      var kind = that._k;\n      var entry = that._l;\n      // revert to the last existing entry\n      while (entry && entry.r) entry = entry.p;\n      // get next entry\n      if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {\n        // or finish the iteration\n        that._t = undefined;\n        return step(1);\n      }\n      // return step by kind\n      if (kind == 'keys') return step(0, entry.k);\n      if (kind == 'values') return step(0, entry.v);\n      return step(0, [entry.k, entry.v]);\n    }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n    // add [@@species], 23.1.2.2, 23.2.2.2\n    setSpecies(NAME);\n  }\n};\n\n\n/***/ }),\n/* 100 */\n/***/ (function(module, exports, __webpack_require__) {\n\nmodule.exports = !__webpack_require__(22) && !__webpack_require__(23)(function () {\n  return Object.defineProperty(__webpack_require__(74)('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n\n\n/***/ }),\n/* 101 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar has = __webpack_require__(27);\nvar toIObject = __webpack_require__(24);\nvar arrayIndexOf = __webpack_require__(102)(false);\nvar IE_PROTO = __webpack_require__(78)('IE_PROTO');\n\nmodule.exports = function (object, names) {\n  var O = toIObject(object);\n  var i = 0;\n  var result = [];\n  var key;\n  for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n  // Don't enum bug & hidden keys\n  while (names.length > i) if (has(O, key = names[i++])) {\n    ~arrayIndexOf(result, key) || result.push(key);\n  }\n  return result;\n};\n\n\n/***/ }),\n/* 102 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// false -> Array#indexOf\n// true  -> Array#includes\nvar toIObject = __webpack_require__(24);\nvar toLength = __webpack_require__(25);\nvar toAbsoluteIndex = __webpack_require__(61);\nmodule.exports = function (IS_INCLUDES) {\n  return function ($this, el, fromIndex) {\n    var O = toIObject($this);\n    var length = toLength(O.length);\n    var index = toAbsoluteIndex(fromIndex, length);\n    var value;\n    // Array#includes uses SameValueZero equality algorithm\n    // eslint-disable-next-line no-self-compare\n    if (IS_INCLUDES && el != el) while (length > index) {\n      value = O[index++];\n      // eslint-disable-next-line no-self-compare\n      if (value != value) return true;\n    // Array#indexOf ignores holes, Array#includes - not\n    } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n      if (O[index] === el) return IS_INCLUDES || index || 0;\n    } return !IS_INCLUDES && -1;\n  };\n};\n\n\n/***/ }),\n/* 103 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar document = __webpack_require__(15).document;\nmodule.exports = document && document.documentElement;\n\n\n/***/ }),\n/* 104 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// call something on iterator step with safe closing on error\nvar anObject = __webpack_require__(18);\nmodule.exports = function (iterator, fn, value, entries) {\n  try {\n    return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n  // 7.4.6 IteratorClose(iterator, completion)\n  } catch (e) {\n    var ret = iterator['return'];\n    if (ret !== undefined) anObject(ret.call(iterator));\n    throw e;\n  }\n};\n\n\n/***/ }),\n/* 105 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// check on default Array iterator\nvar Iterators = __webpack_require__(52);\nvar ITERATOR = __webpack_require__(12)('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n  return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n\n\n/***/ }),\n/* 106 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar classof = __webpack_require__(107);\nvar ITERATOR = __webpack_require__(12)('iterator');\nvar Iterators = __webpack_require__(52);\nmodule.exports = __webpack_require__(37).getIteratorMethod = function (it) {\n  if (it != undefined) return it[ITERATOR]\n    || it['@@iterator']\n    || Iterators[classof(it)];\n};\n\n\n/***/ }),\n/* 107 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = __webpack_require__(44);\nvar TAG = __webpack_require__(12)('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n  try {\n    return it[key];\n  } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n  var O, T, B;\n  return it === undefined ? 'Undefined' : it === null ? 'Null'\n    // @@toStringTag case\n    : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n    // builtinTag case\n    : ARG ? cof(O)\n    // ES3 arguments fallback\n    : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n\n\n/***/ }),\n/* 108 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar LIBRARY = __webpack_require__(49);\nvar $export = __webpack_require__(3);\nvar redefine = __webpack_require__(28);\nvar hide = __webpack_require__(29);\nvar Iterators = __webpack_require__(52);\nvar $iterCreate = __webpack_require__(209);\nvar setToStringTag = __webpack_require__(53);\nvar getPrototypeOf = __webpack_require__(109);\nvar ITERATOR = __webpack_require__(12)('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n  $iterCreate(Constructor, NAME, next);\n  var getMethod = function (kind) {\n    if (!BUGGY && kind in proto) return proto[kind];\n    switch (kind) {\n      case KEYS: return function keys() { return new Constructor(this, kind); };\n      case VALUES: return function values() { return new Constructor(this, kind); };\n    } return function entries() { return new Constructor(this, kind); };\n  };\n  var TAG = NAME + ' Iterator';\n  var DEF_VALUES = DEFAULT == VALUES;\n  var VALUES_BUG = false;\n  var proto = Base.prototype;\n  var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n  var $default = $native || getMethod(DEFAULT);\n  var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n  var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n  var methods, key, IteratorPrototype;\n  // Fix native\n  if ($anyNative) {\n    IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n    if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n      // Set @@toStringTag to native iterators\n      setToStringTag(IteratorPrototype, TAG, true);\n      // fix for some old engines\n      if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);\n    }\n  }\n  // fix Array#{values, @@iterator}.name in V8 / FF\n  if (DEF_VALUES && $native && $native.name !== VALUES) {\n    VALUES_BUG = true;\n    $default = function values() { return $native.call(this); };\n  }\n  // Define iterator\n  if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n    hide(proto, ITERATOR, $default);\n  }\n  // Plug for library\n  Iterators[NAME] = $default;\n  Iterators[TAG] = returnThis;\n  if (DEFAULT) {\n    methods = {\n      values: DEF_VALUES ? $default : getMethod(VALUES),\n      keys: IS_SET ? $default : getMethod(KEYS),\n      entries: $entries\n    };\n    if (FORCED) for (key in methods) {\n      if (!(key in proto)) redefine(proto, key, methods[key]);\n    } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n  }\n  return methods;\n};\n\n\n/***/ }),\n/* 109 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = __webpack_require__(27);\nvar toObject = __webpack_require__(31);\nvar IE_PROTO = __webpack_require__(78)('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n  O = toObject(O);\n  if (has(O, IE_PROTO)) return O[IE_PROTO];\n  if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n    return O.constructor.prototype;\n  } return O instanceof Object ? ObjectProto : null;\n};\n\n\n/***/ }),\n/* 110 */\n/***/ (function(module, exports) {\n\nmodule.exports = function (done, value) {\n  return { value: value, done: !!done };\n};\n\n\n/***/ }),\n/* 111 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar global = __webpack_require__(15);\nvar dP = __webpack_require__(20);\nvar DESCRIPTORS = __webpack_require__(22);\nvar SPECIES = __webpack_require__(12)('species');\n\nmodule.exports = function (KEY) {\n  var C = global[KEY];\n  if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n    configurable: true,\n    get: function () { return this; }\n  });\n};\n\n\n/***/ }),\n/* 112 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = __webpack_require__(9);\nvar anObject = __webpack_require__(18);\nvar check = function (O, proto) {\n  anObject(O);\n  if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n  set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n    function (test, buggy, set) {\n      try {\n        set = __webpack_require__(30)(Function.call, __webpack_require__(67).f(Object.prototype, '__proto__').set, 2);\n        set(test, []);\n        buggy = !(test instanceof Array);\n      } catch (e) { buggy = true; }\n      return function setPrototypeOf(O, proto) {\n        check(O, proto);\n        if (buggy) O.__proto__ = proto;\n        else set(O, proto);\n        return O;\n      };\n    }({}, false) : undefined),\n  check: check\n};\n\n\n/***/ }),\n/* 113 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar strong = __webpack_require__(99);\nvar validate = __webpack_require__(45);\nvar SET = 'Set';\n\n// 23.2 Set Objects\nmodule.exports = __webpack_require__(66)(SET, function (get) {\n  return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n  // 23.2.3.1 Set.prototype.add(value)\n  add: function add(value) {\n    return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value);\n  }\n}, strong);\n\n\n/***/ }),\n/* 114 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar each = __webpack_require__(68)(0);\nvar redefine = __webpack_require__(28);\nvar meta = __webpack_require__(32);\nvar assign = __webpack_require__(116);\nvar weak = __webpack_require__(117);\nvar isObject = __webpack_require__(9);\nvar fails = __webpack_require__(23);\nvar validate = __webpack_require__(45);\nvar WEAK_MAP = 'WeakMap';\nvar getWeak = meta.getWeak;\nvar isExtensible = Object.isExtensible;\nvar uncaughtFrozenStore = weak.ufstore;\nvar tmp = {};\nvar InternalMap;\n\nvar wrapper = function (get) {\n  return function WeakMap() {\n    return get(this, arguments.length > 0 ? arguments[0] : undefined);\n  };\n};\n\nvar methods = {\n  // 23.3.3.3 WeakMap.prototype.get(key)\n  get: function get(key) {\n    if (isObject(key)) {\n      var data = getWeak(key);\n      if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key);\n      return data ? data[this._i] : undefined;\n    }\n  },\n  // 23.3.3.5 WeakMap.prototype.set(key, value)\n  set: function set(key, value) {\n    return weak.def(validate(this, WEAK_MAP), key, value);\n  }\n};\n\n// 23.3 WeakMap Objects\nvar $WeakMap = module.exports = __webpack_require__(66)(WEAK_MAP, wrapper, methods, weak, true, true);\n\n// IE11 WeakMap frozen keys fix\nif (fails(function () { return new $WeakMap().set((Object.freeze || Object)(tmp), 7).get(tmp) != 7; })) {\n  InternalMap = weak.getConstructor(wrapper, WEAK_MAP);\n  assign(InternalMap.prototype, methods);\n  meta.NEED = true;\n  each(['delete', 'has', 'get', 'set'], function (key) {\n    var proto = $WeakMap.prototype;\n    var method = proto[key];\n    redefine(proto, key, function (a, b) {\n      // store frozen objects on internal weakmap shim\n      if (isObject(a) && !isExtensible(a)) {\n        if (!this._f) this._f = new InternalMap();\n        var result = this._f[key](a, b);\n        return key == 'set' ? this : result;\n      // store all the rest on native weakmap\n      } return method.call(this, a, b);\n    });\n  });\n}\n\n\n/***/ }),\n/* 115 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 7.2.2 IsArray(argument)\nvar cof = __webpack_require__(44);\nmodule.exports = Array.isArray || function isArray(arg) {\n  return cof(arg) == 'Array';\n};\n\n\n/***/ }),\n/* 116 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n// 19.1.2.1 Object.assign(target, source, ...)\nvar getKeys = __webpack_require__(35);\nvar gOPS = __webpack_require__(69);\nvar pIE = __webpack_require__(54);\nvar toObject = __webpack_require__(31);\nvar IObject = __webpack_require__(77);\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || __webpack_require__(23)(function () {\n  var A = {};\n  var B = {};\n  // eslint-disable-next-line no-undef\n  var S = Symbol();\n  var K = 'abcdefghijklmnopqrst';\n  A[S] = 7;\n  K.split('').forEach(function (k) { B[k] = k; });\n  return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n  var T = toObject(target);\n  var aLen = arguments.length;\n  var index = 1;\n  var getSymbols = gOPS.f;\n  var isEnum = pIE.f;\n  while (aLen > index) {\n    var S = IObject(arguments[index++]);\n    var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n    var length = keys.length;\n    var j = 0;\n    var key;\n    while (length > j) if (isEnum.call(S, key = keys[j++])) T[key] = S[key];\n  } return T;\n} : $assign;\n\n\n/***/ }),\n/* 117 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar redefineAll = __webpack_require__(62);\nvar getWeak = __webpack_require__(32).getWeak;\nvar anObject = __webpack_require__(18);\nvar isObject = __webpack_require__(9);\nvar anInstance = __webpack_require__(64);\nvar forOf = __webpack_require__(65);\nvar createArrayMethod = __webpack_require__(68);\nvar $has = __webpack_require__(27);\nvar validate = __webpack_require__(45);\nvar arrayFind = createArrayMethod(5);\nvar arrayFindIndex = createArrayMethod(6);\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (that) {\n  return that._l || (that._l = new UncaughtFrozenStore());\n};\nvar UncaughtFrozenStore = function () {\n  this.a = [];\n};\nvar findUncaughtFrozen = function (store, key) {\n  return arrayFind(store.a, function (it) {\n    return it[0] === key;\n  });\n};\nUncaughtFrozenStore.prototype = {\n  get: function (key) {\n    var entry = findUncaughtFrozen(this, key);\n    if (entry) return entry[1];\n  },\n  has: function (key) {\n    return !!findUncaughtFrozen(this, key);\n  },\n  set: function (key, value) {\n    var entry = findUncaughtFrozen(this, key);\n    if (entry) entry[1] = value;\n    else this.a.push([key, value]);\n  },\n  'delete': function (key) {\n    var index = arrayFindIndex(this.a, function (it) {\n      return it[0] === key;\n    });\n    if (~index) this.a.splice(index, 1);\n    return !!~index;\n  }\n};\n\nmodule.exports = {\n  getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n    var C = wrapper(function (that, iterable) {\n      anInstance(that, C, NAME, '_i');\n      that._t = NAME;      // collection type\n      that._i = id++;      // collection id\n      that._l = undefined; // leak store for uncaught frozen objects\n      if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n    });\n    redefineAll(C.prototype, {\n      // 23.3.3.2 WeakMap.prototype.delete(key)\n      // 23.4.3.3 WeakSet.prototype.delete(value)\n      'delete': function (key) {\n        if (!isObject(key)) return false;\n        var data = getWeak(key);\n        if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key);\n        return data && $has(data, this._i) && delete data[this._i];\n      },\n      // 23.3.3.4 WeakMap.prototype.has(key)\n      // 23.4.3.4 WeakSet.prototype.has(value)\n      has: function has(key) {\n        if (!isObject(key)) return false;\n        var data = getWeak(key);\n        if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key);\n        return data && $has(data, this._i);\n      }\n    });\n    return C;\n  },\n  def: function (that, key, value) {\n    var data = getWeak(anObject(key), true);\n    if (data === true) uncaughtFrozenStore(that).set(key, value);\n    else data[that._i] = value;\n    return that;\n  },\n  ufstore: uncaughtFrozenStore\n};\n\n\n/***/ }),\n/* 118 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar weak = __webpack_require__(117);\nvar validate = __webpack_require__(45);\nvar WEAK_SET = 'WeakSet';\n\n// 23.4 WeakSet Objects\n__webpack_require__(66)(WEAK_SET, function (get) {\n  return function WeakSet() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n  // 23.4.3.1 WeakSet.prototype.add(value)\n  add: function add(value) {\n    return weak.def(validate(this, WEAK_SET), value, true);\n  }\n}, weak, false, true);\n\n\n/***/ }),\n/* 119 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar LIBRARY = __webpack_require__(49);\nvar global = __webpack_require__(15);\nvar ctx = __webpack_require__(30);\nvar classof = __webpack_require__(107);\nvar $export = __webpack_require__(3);\nvar isObject = __webpack_require__(9);\nvar aFunction = __webpack_require__(63);\nvar anInstance = __webpack_require__(64);\nvar forOf = __webpack_require__(65);\nvar speciesConstructor = __webpack_require__(213);\nvar task = __webpack_require__(82).set;\nvar microtask = __webpack_require__(215)();\nvar newPromiseCapabilityModule = __webpack_require__(120);\nvar perform = __webpack_require__(216);\nvar userAgent = __webpack_require__(83);\nvar promiseResolve = __webpack_require__(217);\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar versions = process && process.versions;\nvar v8 = versions && versions.v8 || '';\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n  try {\n    // correct subclassing with @@species support\n    var promise = $Promise.resolve(1);\n    var FakePromise = (promise.constructor = {})[__webpack_require__(12)('species')] = function (exec) {\n      exec(empty, empty);\n    };\n    // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n    return (isNode || typeof PromiseRejectionEvent == 'function')\n      && promise.then(empty) instanceof FakePromise\n      // v8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables\n      // https://bugs.chromium.org/p/chromium/issues/detail?id=830565\n      // we can't detect it synchronously, so just check versions\n      && v8.indexOf('6.6') !== 0\n      && userAgent.indexOf('Chrome/66') === -1;\n  } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n  var then;\n  return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n  if (promise._n) return;\n  promise._n = true;\n  var chain = promise._c;\n  microtask(function () {\n    var value = promise._v;\n    var ok = promise._s == 1;\n    var i = 0;\n    var run = function (reaction) {\n      var handler = ok ? reaction.ok : reaction.fail;\n      var resolve = reaction.resolve;\n      var reject = reaction.reject;\n      var domain = reaction.domain;\n      var result, then, exited;\n      try {\n        if (handler) {\n          if (!ok) {\n            if (promise._h == 2) onHandleUnhandled(promise);\n            promise._h = 1;\n          }\n          if (handler === true) result = value;\n          else {\n            if (domain) domain.enter();\n            result = handler(value); // may throw\n            if (domain) {\n              domain.exit();\n              exited = true;\n            }\n          }\n          if (result === reaction.promise) {\n            reject(TypeError('Promise-chain cycle'));\n          } else if (then = isThenable(result)) {\n            then.call(result, resolve, reject);\n          } else resolve(result);\n        } else reject(value);\n      } catch (e) {\n        if (domain && !exited) domain.exit();\n        reject(e);\n      }\n    };\n    while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n    promise._c = [];\n    promise._n = false;\n    if (isReject && !promise._h) onUnhandled(promise);\n  });\n};\nvar onUnhandled = function (promise) {\n  task.call(global, function () {\n    var value = promise._v;\n    var unhandled = isUnhandled(promise);\n    var result, handler, console;\n    if (unhandled) {\n      result = perform(function () {\n        if (isNode) {\n          process.emit('unhandledRejection', value, promise);\n        } else if (handler = global.onunhandledrejection) {\n          handler({ promise: promise, reason: value });\n        } else if ((console = global.console) && console.error) {\n          console.error('Unhandled promise rejection', value);\n        }\n      });\n      // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n      promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n    } promise._a = undefined;\n    if (unhandled && result.e) throw result.v;\n  });\n};\nvar isUnhandled = function (promise) {\n  return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n  task.call(global, function () {\n    var handler;\n    if (isNode) {\n      process.emit('rejectionHandled', promise);\n    } else if (handler = global.onrejectionhandled) {\n      handler({ promise: promise, reason: promise._v });\n    }\n  });\n};\nvar $reject = function (value) {\n  var promise = this;\n  if (promise._d) return;\n  promise._d = true;\n  promise = promise._w || promise; // unwrap\n  promise._v = value;\n  promise._s = 2;\n  if (!promise._a) promise._a = promise._c.slice();\n  notify(promise, true);\n};\nvar $resolve = function (value) {\n  var promise = this;\n  var then;\n  if (promise._d) return;\n  promise._d = true;\n  promise = promise._w || promise; // unwrap\n  try {\n    if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n    if (then = isThenable(value)) {\n      microtask(function () {\n        var wrapper = { _w: promise, _d: false }; // wrap\n        try {\n          then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n        } catch (e) {\n          $reject.call(wrapper, e);\n        }\n      });\n    } else {\n      promise._v = value;\n      promise._s = 1;\n      notify(promise, false);\n    }\n  } catch (e) {\n    $reject.call({ _w: promise, _d: false }, e); // wrap\n  }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n  // 25.4.3.1 Promise(executor)\n  $Promise = function Promise(executor) {\n    anInstance(this, $Promise, PROMISE, '_h');\n    aFunction(executor);\n    Internal.call(this);\n    try {\n      executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n    } catch (err) {\n      $reject.call(this, err);\n    }\n  };\n  // eslint-disable-next-line no-unused-vars\n  Internal = function Promise(executor) {\n    this._c = [];             // <- awaiting reactions\n    this._a = undefined;      // <- checked in isUnhandled reactions\n    this._s = 0;              // <- state\n    this._d = false;          // <- done\n    this._v = undefined;      // <- value\n    this._h = 0;              // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n    this._n = false;          // <- notify\n  };\n  Internal.prototype = __webpack_require__(62)($Promise.prototype, {\n    // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n    then: function then(onFulfilled, onRejected) {\n      var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n      reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n      reaction.fail = typeof onRejected == 'function' && onRejected;\n      reaction.domain = isNode ? process.domain : undefined;\n      this._c.push(reaction);\n      if (this._a) this._a.push(reaction);\n      if (this._s) notify(this, false);\n      return reaction.promise;\n    },\n    // 25.4.5.1 Promise.prototype.catch(onRejected)\n    'catch': function (onRejected) {\n      return this.then(undefined, onRejected);\n    }\n  });\n  OwnPromiseCapability = function () {\n    var promise = new Internal();\n    this.promise = promise;\n    this.resolve = ctx($resolve, promise, 1);\n    this.reject = ctx($reject, promise, 1);\n  };\n  newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n    return C === $Promise || C === Wrapper\n      ? new OwnPromiseCapability(C)\n      : newGenericPromiseCapability(C);\n  };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\n__webpack_require__(53)($Promise, PROMISE);\n__webpack_require__(111)(PROMISE);\nWrapper = __webpack_require__(37)[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n  // 25.4.4.5 Promise.reject(r)\n  reject: function reject(r) {\n    var capability = newPromiseCapability(this);\n    var $$reject = capability.reject;\n    $$reject(r);\n    return capability.promise;\n  }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n  // 25.4.4.6 Promise.resolve(x)\n  resolve: function resolve(x) {\n    return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n  }\n});\n$export($export.S + $export.F * !(USE_NATIVE && __webpack_require__(81)(function (iter) {\n  $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n  // 25.4.4.1 Promise.all(iterable)\n  all: function all(iterable) {\n    var C = this;\n    var capability = newPromiseCapability(C);\n    var resolve = capability.resolve;\n    var reject = capability.reject;\n    var result = perform(function () {\n      var values = [];\n      var index = 0;\n      var remaining = 1;\n      forOf(iterable, false, function (promise) {\n        var $index = index++;\n        var alreadyCalled = false;\n        values.push(undefined);\n        remaining++;\n        C.resolve(promise).then(function (value) {\n          if (alreadyCalled) return;\n          alreadyCalled = true;\n          values[$index] = value;\n          --remaining || resolve(values);\n        }, reject);\n      });\n      --remaining || resolve(values);\n    });\n    if (result.e) reject(result.v);\n    return capability.promise;\n  },\n  // 25.4.4.4 Promise.race(iterable)\n  race: function race(iterable) {\n    var C = this;\n    var capability = newPromiseCapability(C);\n    var reject = capability.reject;\n    var result = perform(function () {\n      forOf(iterable, false, function (promise) {\n        C.resolve(promise).then(capability.resolve, reject);\n      });\n    });\n    if (result.e) reject(result.v);\n    return capability.promise;\n  }\n});\n\n\n/***/ }),\n/* 120 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = __webpack_require__(63);\n\nfunction PromiseCapability(C) {\n  var resolve, reject;\n  this.promise = new C(function ($$resolve, $$reject) {\n    if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n    resolve = $$resolve;\n    reject = $$reject;\n  });\n  this.resolve = aFunction(resolve);\n  this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n  return new PromiseCapability(C);\n};\n\n\n/***/ }),\n/* 121 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n// ECMAScript 6 symbols shim\nvar global = __webpack_require__(15);\nvar has = __webpack_require__(27);\nvar DESCRIPTORS = __webpack_require__(22);\nvar $export = __webpack_require__(3);\nvar redefine = __webpack_require__(28);\nvar META = __webpack_require__(32).KEY;\nvar $fails = __webpack_require__(23);\nvar shared = __webpack_require__(79);\nvar setToStringTag = __webpack_require__(53);\nvar uid = __webpack_require__(50);\nvar wks = __webpack_require__(12);\nvar wksExt = __webpack_require__(122);\nvar wksDefine = __webpack_require__(218);\nvar enumKeys = __webpack_require__(219);\nvar isArray = __webpack_require__(115);\nvar anObject = __webpack_require__(18);\nvar isObject = __webpack_require__(9);\nvar toIObject = __webpack_require__(24);\nvar toPrimitive = __webpack_require__(75);\nvar createDesc = __webpack_require__(51);\nvar _create = __webpack_require__(76);\nvar gOPNExt = __webpack_require__(123);\nvar $GOPD = __webpack_require__(67);\nvar $DP = __webpack_require__(20);\nvar $keys = __webpack_require__(35);\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function';\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n  return _create(dP({}, 'a', {\n    get: function () { return dP(this, 'a', { value: 7 }).a; }\n  })).a != 7;\n}) ? function (it, key, D) {\n  var protoDesc = gOPD(ObjectProto, key);\n  if (protoDesc) delete ObjectProto[key];\n  dP(it, key, D);\n  if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n  var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n  sym._k = tag;\n  return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n  return typeof it == 'symbol';\n} : function (it) {\n  return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n  if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n  anObject(it);\n  key = toPrimitive(key, true);\n  anObject(D);\n  if (has(AllSymbols, key)) {\n    if (!D.enumerable) {\n      if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n      it[HIDDEN][key] = true;\n    } else {\n      if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n      D = _create(D, { enumerable: createDesc(0, false) });\n    } return setSymbolDesc(it, key, D);\n  } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n  anObject(it);\n  var keys = enumKeys(P = toIObject(P));\n  var i = 0;\n  var l = keys.length;\n  var key;\n  while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n  return it;\n};\nvar $create = function create(it, P) {\n  return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n  var E = isEnum.call(this, key = toPrimitive(key, true));\n  if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n  return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n  it = toIObject(it);\n  key = toPrimitive(key, true);\n  if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n  var D = gOPD(it, key);\n  if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n  return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n  var names = gOPN(toIObject(it));\n  var result = [];\n  var i = 0;\n  var key;\n  while (names.length > i) {\n    if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n  } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n  var IS_OP = it === ObjectProto;\n  var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n  var result = [];\n  var i = 0;\n  var key;\n  while (names.length > i) {\n    if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n  } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n  $Symbol = function Symbol() {\n    if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n    var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n    var $set = function (value) {\n      if (this === ObjectProto) $set.call(OPSymbols, value);\n      if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n      setSymbolDesc(this, tag, createDesc(1, value));\n    };\n    if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n    return wrap(tag);\n  };\n  redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n    return this._k;\n  });\n\n  $GOPD.f = $getOwnPropertyDescriptor;\n  $DP.f = $defineProperty;\n  __webpack_require__(84).f = gOPNExt.f = $getOwnPropertyNames;\n  __webpack_require__(54).f = $propertyIsEnumerable;\n  __webpack_require__(69).f = $getOwnPropertySymbols;\n\n  if (DESCRIPTORS && !__webpack_require__(49)) {\n    redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n  }\n\n  wksExt.f = function (name) {\n    return wrap(wks(name));\n  };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n  // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n  'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n  // 19.4.2.1 Symbol.for(key)\n  'for': function (key) {\n    return has(SymbolRegistry, key += '')\n      ? SymbolRegistry[key]\n      : SymbolRegistry[key] = $Symbol(key);\n  },\n  // 19.4.2.5 Symbol.keyFor(sym)\n  keyFor: function keyFor(sym) {\n    if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n    for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n  },\n  useSetter: function () { setter = true; },\n  useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n  // 19.1.2.2 Object.create(O [, Properties])\n  create: $create,\n  // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n  defineProperty: $defineProperty,\n  // 19.1.2.3 Object.defineProperties(O, Properties)\n  defineProperties: $defineProperties,\n  // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n  getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n  // 19.1.2.7 Object.getOwnPropertyNames(O)\n  getOwnPropertyNames: $getOwnPropertyNames,\n  // 19.1.2.8 Object.getOwnPropertySymbols(O)\n  getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n  var S = $Symbol();\n  // MS Edge converts symbol values to JSON as {}\n  // WebKit converts symbol values to JSON as null\n  // V8 throws on boxed symbols\n  return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n  stringify: function stringify(it) {\n    var args = [it];\n    var i = 1;\n    var replacer, $replacer;\n    while (arguments.length > i) args.push(arguments[i++]);\n    $replacer = replacer = args[1];\n    if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n    if (!isArray(replacer)) replacer = function (key, value) {\n      if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n      if (!isSymbol(value)) return value;\n    };\n    args[1] = replacer;\n    return _stringify.apply($JSON, args);\n  }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || __webpack_require__(29)($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n\n\n/***/ }),\n/* 122 */\n/***/ (function(module, exports, __webpack_require__) {\n\nexports.f = __webpack_require__(12);\n\n\n/***/ }),\n/* 123 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = __webpack_require__(24);\nvar gOPN = __webpack_require__(84).f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n  ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n  try {\n    return gOPN(it);\n  } catch (e) {\n    return windowNames.slice();\n  }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n  return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n\n\n/***/ }),\n/* 124 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 19.1.2.5 Object.freeze(O)\nvar isObject = __webpack_require__(9);\nvar meta = __webpack_require__(32).onFreeze;\n\n__webpack_require__(26)('freeze', function ($freeze) {\n  return function freeze(it) {\n    return $freeze && isObject(it) ? $freeze(meta(it)) : it;\n  };\n});\n\n\n/***/ }),\n/* 125 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 19.1.2.17 Object.seal(O)\nvar isObject = __webpack_require__(9);\nvar meta = __webpack_require__(32).onFreeze;\n\n__webpack_require__(26)('seal', function ($seal) {\n  return function seal(it) {\n    return $seal && isObject(it) ? $seal(meta(it)) : it;\n  };\n});\n\n\n/***/ }),\n/* 126 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 19.1.2.15 Object.preventExtensions(O)\nvar isObject = __webpack_require__(9);\nvar meta = __webpack_require__(32).onFreeze;\n\n__webpack_require__(26)('preventExtensions', function ($preventExtensions) {\n  return function preventExtensions(it) {\n    return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it;\n  };\n});\n\n\n/***/ }),\n/* 127 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 19.1.2.12 Object.isFrozen(O)\nvar isObject = __webpack_require__(9);\n\n__webpack_require__(26)('isFrozen', function ($isFrozen) {\n  return function isFrozen(it) {\n    return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;\n  };\n});\n\n\n/***/ }),\n/* 128 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 19.1.2.13 Object.isSealed(O)\nvar isObject = __webpack_require__(9);\n\n__webpack_require__(26)('isSealed', function ($isSealed) {\n  return function isSealed(it) {\n    return isObject(it) ? $isSealed ? $isSealed(it) : false : true;\n  };\n});\n\n\n/***/ }),\n/* 129 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 19.1.2.11 Object.isExtensible(O)\nvar isObject = __webpack_require__(9);\n\n__webpack_require__(26)('isExtensible', function ($isExtensible) {\n  return function isExtensible(it) {\n    return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;\n  };\n});\n\n\n/***/ }),\n/* 130 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\nvar toIObject = __webpack_require__(24);\nvar $getOwnPropertyDescriptor = __webpack_require__(67).f;\n\n__webpack_require__(26)('getOwnPropertyDescriptor', function () {\n  return function getOwnPropertyDescriptor(it, key) {\n    return $getOwnPropertyDescriptor(toIObject(it), key);\n  };\n});\n\n\n/***/ }),\n/* 131 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject = __webpack_require__(31);\nvar $getPrototypeOf = __webpack_require__(109);\n\n__webpack_require__(26)('getPrototypeOf', function () {\n  return function getPrototypeOf(it) {\n    return $getPrototypeOf(toObject(it));\n  };\n});\n\n\n/***/ }),\n/* 132 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 19.1.2.14 Object.keys(O)\nvar toObject = __webpack_require__(31);\nvar $keys = __webpack_require__(35);\n\n__webpack_require__(26)('keys', function () {\n  return function keys(it) {\n    return $keys(toObject(it));\n  };\n});\n\n\n/***/ }),\n/* 133 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 19.1.2.7 Object.getOwnPropertyNames(O)\n__webpack_require__(26)('getOwnPropertyNames', function () {\n  return __webpack_require__(123).f;\n});\n\n\n/***/ }),\n/* 134 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 19.1.3.1 Object.assign(target, source)\nvar $export = __webpack_require__(3);\n\n$export($export.S + $export.F, 'Object', { assign: __webpack_require__(116) });\n\n\n/***/ }),\n/* 135 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 19.1.3.10 Object.is(value1, value2)\nvar $export = __webpack_require__(3);\n$export($export.S, 'Object', { is: __webpack_require__(220) });\n\n\n/***/ }),\n/* 136 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 19.1.3.19 Object.setPrototypeOf(O, proto)\nvar $export = __webpack_require__(3);\n$export($export.S, 'Object', { setPrototypeOf: __webpack_require__(112).set });\n\n\n/***/ }),\n/* 137 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar dP = __webpack_require__(20).f;\nvar FProto = Function.prototype;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// 19.2.4.2 name\nNAME in FProto || __webpack_require__(22) && dP(FProto, NAME, {\n  configurable: true,\n  get: function () {\n    try {\n      return ('' + this).match(nameRE)[1];\n    } catch (e) {\n      return '';\n    }\n  }\n});\n\n\n/***/ }),\n/* 138 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar $export = __webpack_require__(3);\nvar toIObject = __webpack_require__(24);\nvar toLength = __webpack_require__(25);\n\n$export($export.S, 'String', {\n  // 21.1.2.4 String.raw(callSite, ...substitutions)\n  raw: function raw(callSite) {\n    var tpl = toIObject(callSite.raw);\n    var len = toLength(tpl.length);\n    var aLen = arguments.length;\n    var res = [];\n    var i = 0;\n    while (len > i) {\n      res.push(String(tpl[i++]));\n      if (i < aLen) res.push(String(arguments[i]));\n    } return res.join('');\n  }\n});\n\n\n/***/ }),\n/* 139 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar $export = __webpack_require__(3);\nvar toAbsoluteIndex = __webpack_require__(61);\nvar fromCharCode = String.fromCharCode;\nvar $fromCodePoint = String.fromCodePoint;\n\n// length should be 1, old FF problem\n$export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {\n  // 21.1.2.2 String.fromCodePoint(...codePoints)\n  fromCodePoint: function fromCodePoint(x) { // eslint-disable-line no-unused-vars\n    var res = [];\n    var aLen = arguments.length;\n    var i = 0;\n    var code;\n    while (aLen > i) {\n      code = +arguments[i++];\n      if (toAbsoluteIndex(code, 0x10ffff) !== code) throw RangeError(code + ' is not a valid code point');\n      res.push(code < 0x10000\n        ? fromCharCode(code)\n        : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)\n      );\n    } return res.join('');\n  }\n});\n\n\n/***/ }),\n/* 140 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $export = __webpack_require__(3);\nvar $at = __webpack_require__(221)(false);\n$export($export.P, 'String', {\n  // 21.1.3.3 String.prototype.codePointAt(pos)\n  codePointAt: function codePointAt(pos) {\n    return $at(this, pos);\n  }\n});\n\n\n/***/ }),\n/* 141 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar $export = __webpack_require__(3);\n\n$export($export.P, 'String', {\n  // 21.1.3.13 String.prototype.repeat(count)\n  repeat: __webpack_require__(142)\n});\n\n\n/***/ }),\n/* 142 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar toInteger = __webpack_require__(60);\nvar defined = __webpack_require__(36);\n\nmodule.exports = function repeat(count) {\n  var str = String(defined(this));\n  var res = '';\n  var n = toInteger(count);\n  if (n < 0 || n == Infinity) throw RangeError(\"Count can't be negative\");\n  for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) res += str;\n  return res;\n};\n\n\n/***/ }),\n/* 143 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n// 21.1.3.18 String.prototype.startsWith(searchString [, position ])\n\nvar $export = __webpack_require__(3);\nvar toLength = __webpack_require__(25);\nvar context = __webpack_require__(85);\nvar STARTS_WITH = 'startsWith';\nvar $startsWith = ''[STARTS_WITH];\n\n$export($export.P + $export.F * __webpack_require__(86)(STARTS_WITH), 'String', {\n  startsWith: function startsWith(searchString /* , position = 0 */) {\n    var that = context(this, searchString, STARTS_WITH);\n    var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n    var search = String(searchString);\n    return $startsWith\n      ? $startsWith.call(that, search, index)\n      : that.slice(index, index + search.length) === search;\n  }\n});\n\n\n/***/ }),\n/* 144 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 7.2.8 IsRegExp(argument)\nvar isObject = __webpack_require__(9);\nvar cof = __webpack_require__(44);\nvar MATCH = __webpack_require__(12)('match');\nmodule.exports = function (it) {\n  var isRegExp;\n  return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};\n\n\n/***/ }),\n/* 145 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n// 21.1.3.6 String.prototype.endsWith(searchString [, endPosition])\n\nvar $export = __webpack_require__(3);\nvar toLength = __webpack_require__(25);\nvar context = __webpack_require__(85);\nvar ENDS_WITH = 'endsWith';\nvar $endsWith = ''[ENDS_WITH];\n\n$export($export.P + $export.F * __webpack_require__(86)(ENDS_WITH), 'String', {\n  endsWith: function endsWith(searchString /* , endPosition = @length */) {\n    var that = context(this, searchString, ENDS_WITH);\n    var endPosition = arguments.length > 1 ? arguments[1] : undefined;\n    var len = toLength(that.length);\n    var end = endPosition === undefined ? len : Math.min(toLength(endPosition), len);\n    var search = String(searchString);\n    return $endsWith\n      ? $endsWith.call(that, search, end)\n      : that.slice(end - search.length, end) === search;\n  }\n});\n\n\n/***/ }),\n/* 146 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n\nvar $export = __webpack_require__(3);\nvar context = __webpack_require__(85);\nvar INCLUDES = 'includes';\n\n$export($export.P + $export.F * __webpack_require__(86)(INCLUDES), 'String', {\n  includes: function includes(searchString /* , position = 0 */) {\n    return !!~context(this, searchString, INCLUDES)\n      .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\n\n\n/***/ }),\n/* 147 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 21.2.5.3 get RegExp.prototype.flags()\nif (__webpack_require__(22) && /./g.flags != 'g') __webpack_require__(20).f(RegExp.prototype, 'flags', {\n  configurable: true,\n  get: __webpack_require__(222)\n});\n\n\n/***/ }),\n/* 148 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// @@match logic\n__webpack_require__(70)('match', 1, function (defined, MATCH, $match) {\n  // 21.1.3.11 String.prototype.match(regexp)\n  return [function match(regexp) {\n    'use strict';\n    var O = defined(this);\n    var fn = regexp == undefined ? undefined : regexp[MATCH];\n    return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n  }, $match];\n});\n\n\n/***/ }),\n/* 149 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// @@replace logic\n__webpack_require__(70)('replace', 2, function (defined, REPLACE, $replace) {\n  // 21.1.3.14 String.prototype.replace(searchValue, replaceValue)\n  return [function replace(searchValue, replaceValue) {\n    'use strict';\n    var O = defined(this);\n    var fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n    return fn !== undefined\n      ? fn.call(searchValue, O, replaceValue)\n      : $replace.call(String(O), searchValue, replaceValue);\n  }, $replace];\n});\n\n\n/***/ }),\n/* 150 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// @@split logic\n__webpack_require__(70)('split', 2, function (defined, SPLIT, $split) {\n  'use strict';\n  var isRegExp = __webpack_require__(144);\n  var _split = $split;\n  var $push = [].push;\n  var $SPLIT = 'split';\n  var LENGTH = 'length';\n  var LAST_INDEX = 'lastIndex';\n  if (\n    'abbc'[$SPLIT](/(b)*/)[1] == 'c' ||\n    'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 ||\n    'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 ||\n    '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 ||\n    '.'[$SPLIT](/()()/)[LENGTH] > 1 ||\n    ''[$SPLIT](/.?/)[LENGTH]\n  ) {\n    var NPCG = /()??/.exec('')[1] === undefined; // nonparticipating capturing group\n    // based on es5-shim implementation, need to rework it\n    $split = function (separator, limit) {\n      var string = String(this);\n      if (separator === undefined && limit === 0) return [];\n      // If `separator` is not a regex, use native split\n      if (!isRegExp(separator)) return _split.call(string, separator, limit);\n      var output = [];\n      var flags = (separator.ignoreCase ? 'i' : '') +\n                  (separator.multiline ? 'm' : '') +\n                  (separator.unicode ? 'u' : '') +\n                  (separator.sticky ? 'y' : '');\n      var lastLastIndex = 0;\n      var splitLimit = limit === undefined ? 4294967295 : limit >>> 0;\n      // Make `global` and avoid `lastIndex` issues by working with a copy\n      var separatorCopy = new RegExp(separator.source, flags + 'g');\n      var separator2, match, lastIndex, lastLength, i;\n      // Doesn't need flags gy, but they don't hurt\n      if (!NPCG) separator2 = new RegExp('^' + separatorCopy.source + '$(?!\\\\s)', flags);\n      while (match = separatorCopy.exec(string)) {\n        // `separatorCopy.lastIndex` is not reliable cross-browser\n        lastIndex = match.index + match[0][LENGTH];\n        if (lastIndex > lastLastIndex) {\n          output.push(string.slice(lastLastIndex, match.index));\n          // Fix browsers whose `exec` methods don't consistently return `undefined` for NPCG\n          // eslint-disable-next-line no-loop-func\n          if (!NPCG && match[LENGTH] > 1) match[0].replace(separator2, function () {\n            for (i = 1; i < arguments[LENGTH] - 2; i++) if (arguments[i] === undefined) match[i] = undefined;\n          });\n          if (match[LENGTH] > 1 && match.index < string[LENGTH]) $push.apply(output, match.slice(1));\n          lastLength = match[0][LENGTH];\n          lastLastIndex = lastIndex;\n          if (output[LENGTH] >= splitLimit) break;\n        }\n        if (separatorCopy[LAST_INDEX] === match.index) separatorCopy[LAST_INDEX]++; // Avoid an infinite loop\n      }\n      if (lastLastIndex === string[LENGTH]) {\n        if (lastLength || !separatorCopy.test('')) output.push('');\n      } else output.push(string.slice(lastLastIndex));\n      return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;\n    };\n  // Chakra, V8\n  } else if ('0'[$SPLIT](undefined, 0)[LENGTH]) {\n    $split = function (separator, limit) {\n      return separator === undefined && limit === 0 ? [] : _split.call(this, separator, limit);\n    };\n  }\n  // 21.1.3.17 String.prototype.split(separator, limit)\n  return [function split(separator, limit) {\n    var O = defined(this);\n    var fn = separator == undefined ? undefined : separator[SPLIT];\n    return fn !== undefined ? fn.call(separator, O, limit) : $split.call(String(O), separator, limit);\n  }, $split];\n});\n\n\n/***/ }),\n/* 151 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// @@search logic\n__webpack_require__(70)('search', 1, function (defined, SEARCH, $search) {\n  // 21.1.3.15 String.prototype.search(regexp)\n  return [function search(regexp) {\n    'use strict';\n    var O = defined(this);\n    var fn = regexp == undefined ? undefined : regexp[SEARCH];\n    return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));\n  }, $search];\n});\n\n\n/***/ }),\n/* 152 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar ctx = __webpack_require__(30);\nvar $export = __webpack_require__(3);\nvar toObject = __webpack_require__(31);\nvar call = __webpack_require__(104);\nvar isArrayIter = __webpack_require__(105);\nvar toLength = __webpack_require__(25);\nvar createProperty = __webpack_require__(87);\nvar getIterFn = __webpack_require__(106);\n\n$export($export.S + $export.F * !__webpack_require__(81)(function (iter) { Array.from(iter); }), 'Array', {\n  // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n  from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n    var O = toObject(arrayLike);\n    var C = typeof this == 'function' ? this : Array;\n    var aLen = arguments.length;\n    var mapfn = aLen > 1 ? arguments[1] : undefined;\n    var mapping = mapfn !== undefined;\n    var index = 0;\n    var iterFn = getIterFn(O);\n    var length, result, step, iterator;\n    if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n    // if object isn't iterable or it's array with default iterator - use simple case\n    if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n      for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n        createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n      }\n    } else {\n      length = toLength(O.length);\n      for (result = new C(length); length > index; index++) {\n        createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n      }\n    }\n    result.length = index;\n    return result;\n  }\n});\n\n\n/***/ }),\n/* 153 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $export = __webpack_require__(3);\nvar createProperty = __webpack_require__(87);\n\n// WebKit Array.of isn't generic\n$export($export.S + $export.F * __webpack_require__(23)(function () {\n  function F() { /* empty */ }\n  return !(Array.of.call(F) instanceof F);\n}), 'Array', {\n  // 22.1.2.3 Array.of( ...items)\n  of: function of(/* ...args */) {\n    var index = 0;\n    var aLen = arguments.length;\n    var result = new (typeof this == 'function' ? this : Array)(aLen);\n    while (aLen > index) createProperty(result, index, arguments[index++]);\n    result.length = aLen;\n    return result;\n  }\n});\n\n\n/***/ }),\n/* 154 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\nvar $export = __webpack_require__(3);\n\n$export($export.P, 'Array', { copyWithin: __webpack_require__(223) });\n\n__webpack_require__(46)('copyWithin');\n\n\n/***/ }),\n/* 155 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\nvar $export = __webpack_require__(3);\nvar $find = __webpack_require__(68)(5);\nvar KEY = 'find';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n  find: function find(callbackfn /* , that = undefined */) {\n    return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\n__webpack_require__(46)(KEY);\n\n\n/***/ }),\n/* 156 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)\nvar $export = __webpack_require__(3);\nvar $find = __webpack_require__(68)(6);\nvar KEY = 'findIndex';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n  findIndex: function findIndex(callbackfn /* , that = undefined */) {\n    return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\n__webpack_require__(46)(KEY);\n\n\n/***/ }),\n/* 157 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\nvar $export = __webpack_require__(3);\n\n$export($export.P, 'Array', { fill: __webpack_require__(224) });\n\n__webpack_require__(46)('fill');\n\n\n/***/ }),\n/* 158 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 20.1.2.2 Number.isFinite(number)\nvar $export = __webpack_require__(3);\nvar _isFinite = __webpack_require__(15).isFinite;\n\n$export($export.S, 'Number', {\n  isFinite: function isFinite(it) {\n    return typeof it == 'number' && _isFinite(it);\n  }\n});\n\n\n/***/ }),\n/* 159 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 20.1.2.3 Number.isInteger(number)\nvar $export = __webpack_require__(3);\n\n$export($export.S, 'Number', { isInteger: __webpack_require__(160) });\n\n\n/***/ }),\n/* 160 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 20.1.2.3 Number.isInteger(number)\nvar isObject = __webpack_require__(9);\nvar floor = Math.floor;\nmodule.exports = function isInteger(it) {\n  return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n\n\n/***/ }),\n/* 161 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 20.1.2.5 Number.isSafeInteger(number)\nvar $export = __webpack_require__(3);\nvar isInteger = __webpack_require__(160);\nvar abs = Math.abs;\n\n$export($export.S, 'Number', {\n  isSafeInteger: function isSafeInteger(number) {\n    return isInteger(number) && abs(number) <= 0x1fffffffffffff;\n  }\n});\n\n\n/***/ }),\n/* 162 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 20.1.2.4 Number.isNaN(number)\nvar $export = __webpack_require__(3);\n\n$export($export.S, 'Number', {\n  isNaN: function isNaN(number) {\n    // eslint-disable-next-line no-self-compare\n    return number != number;\n  }\n});\n\n\n/***/ }),\n/* 163 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 20.1.2.1 Number.EPSILON\nvar $export = __webpack_require__(3);\n\n$export($export.S, 'Number', { EPSILON: Math.pow(2, -52) });\n\n\n/***/ }),\n/* 164 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 20.1.2.10 Number.MIN_SAFE_INTEGER\nvar $export = __webpack_require__(3);\n\n$export($export.S, 'Number', { MIN_SAFE_INTEGER: -0x1fffffffffffff });\n\n\n/***/ }),\n/* 165 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 20.1.2.6 Number.MAX_SAFE_INTEGER\nvar $export = __webpack_require__(3);\n\n$export($export.S, 'Number', { MAX_SAFE_INTEGER: 0x1fffffffffffff });\n\n\n/***/ }),\n/* 166 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n// https://github.com/tc39/Array.prototype.includes\nvar $export = __webpack_require__(3);\nvar $includes = __webpack_require__(102)(true);\n\n$export($export.P, 'Array', {\n  includes: function includes(el /* , fromIndex = 0 */) {\n    return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\n\n__webpack_require__(46)('includes');\n\n\n/***/ }),\n/* 167 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// https://github.com/tc39/proposal-object-values-entries\nvar $export = __webpack_require__(3);\nvar $values = __webpack_require__(168)(false);\n\n$export($export.S, 'Object', {\n  values: function values(it) {\n    return $values(it);\n  }\n});\n\n\n/***/ }),\n/* 168 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar getKeys = __webpack_require__(35);\nvar toIObject = __webpack_require__(24);\nvar isEnum = __webpack_require__(54).f;\nmodule.exports = function (isEntries) {\n  return function (it) {\n    var O = toIObject(it);\n    var keys = getKeys(O);\n    var length = keys.length;\n    var i = 0;\n    var result = [];\n    var key;\n    while (length > i) if (isEnum.call(O, key = keys[i++])) {\n      result.push(isEntries ? [key, O[key]] : O[key]);\n    } return result;\n  };\n};\n\n\n/***/ }),\n/* 169 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// https://github.com/tc39/proposal-object-values-entries\nvar $export = __webpack_require__(3);\nvar $entries = __webpack_require__(168)(true);\n\n$export($export.S, 'Object', {\n  entries: function entries(it) {\n    return $entries(it);\n  }\n});\n\n\n/***/ }),\n/* 170 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// https://github.com/tc39/proposal-object-getownpropertydescriptors\nvar $export = __webpack_require__(3);\nvar ownKeys = __webpack_require__(225);\nvar toIObject = __webpack_require__(24);\nvar gOPD = __webpack_require__(67);\nvar createProperty = __webpack_require__(87);\n\n$export($export.S, 'Object', {\n  getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n    var O = toIObject(object);\n    var getDesc = gOPD.f;\n    var keys = ownKeys(O);\n    var result = {};\n    var i = 0;\n    var key, desc;\n    while (keys.length > i) {\n      desc = getDesc(O, key = keys[i++]);\n      if (desc !== undefined) createProperty(result, key, desc);\n    }\n    return result;\n  }\n});\n\n\n/***/ }),\n/* 171 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = __webpack_require__(3);\nvar $pad = __webpack_require__(172);\nvar userAgent = __webpack_require__(83);\n\n// https://github.com/zloirock/core-js/issues/280\n$export($export.P + $export.F * /Version\\/10\\.\\d+(\\.\\d+)? Safari\\//.test(userAgent), 'String', {\n  padStart: function padStart(maxLength /* , fillString = ' ' */) {\n    return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);\n  }\n});\n\n\n/***/ }),\n/* 172 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// https://github.com/tc39/proposal-string-pad-start-end\nvar toLength = __webpack_require__(25);\nvar repeat = __webpack_require__(142);\nvar defined = __webpack_require__(36);\n\nmodule.exports = function (that, maxLength, fillString, left) {\n  var S = String(defined(that));\n  var stringLength = S.length;\n  var fillStr = fillString === undefined ? ' ' : String(fillString);\n  var intMaxLength = toLength(maxLength);\n  if (intMaxLength <= stringLength || fillStr == '') return S;\n  var fillLen = intMaxLength - stringLength;\n  var stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length));\n  if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);\n  return left ? stringFiller + S : S + stringFiller;\n};\n\n\n/***/ }),\n/* 173 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = __webpack_require__(3);\nvar $pad = __webpack_require__(172);\nvar userAgent = __webpack_require__(83);\n\n// https://github.com/zloirock/core-js/issues/280\n$export($export.P + $export.F * /Version\\/10\\.\\d+(\\.\\d+)? Safari\\//.test(userAgent), 'String', {\n  padEnd: function padEnd(maxLength /* , fillString = ' ' */) {\n    return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false);\n  }\n});\n\n\n/***/ }),\n/* 174 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar $export = __webpack_require__(3);\nvar $task = __webpack_require__(82);\n$export($export.G + $export.B, {\n  setImmediate: $task.set,\n  clearImmediate: $task.clear\n});\n\n\n/***/ }),\n/* 175 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar $iterators = __webpack_require__(88);\nvar getKeys = __webpack_require__(35);\nvar redefine = __webpack_require__(28);\nvar global = __webpack_require__(15);\nvar hide = __webpack_require__(29);\nvar Iterators = __webpack_require__(52);\nvar wks = __webpack_require__(12);\nvar ITERATOR = wks('iterator');\nvar TO_STRING_TAG = wks('toStringTag');\nvar ArrayValues = Iterators.Array;\n\nvar DOMIterables = {\n  CSSRuleList: true, // TODO: Not spec compliant, should be false.\n  CSSStyleDeclaration: false,\n  CSSValueList: false,\n  ClientRectList: false,\n  DOMRectList: false,\n  DOMStringList: false,\n  DOMTokenList: true,\n  DataTransferItemList: false,\n  FileList: false,\n  HTMLAllCollection: false,\n  HTMLCollection: false,\n  HTMLFormElement: false,\n  HTMLSelectElement: false,\n  MediaList: true, // TODO: Not spec compliant, should be false.\n  MimeTypeArray: false,\n  NamedNodeMap: false,\n  NodeList: true,\n  PaintRequestList: false,\n  Plugin: false,\n  PluginArray: false,\n  SVGLengthList: false,\n  SVGNumberList: false,\n  SVGPathSegList: false,\n  SVGPointList: false,\n  SVGStringList: false,\n  SVGTransformList: false,\n  SourceBufferList: false,\n  StyleSheetList: true, // TODO: Not spec compliant, should be false.\n  TextTrackCueList: false,\n  TextTrackList: false,\n  TouchList: false\n};\n\nfor (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {\n  var NAME = collections[i];\n  var explicit = DOMIterables[NAME];\n  var Collection = global[NAME];\n  var proto = Collection && Collection.prototype;\n  var key;\n  if (proto) {\n    if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);\n    if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n    Iterators[NAME] = ArrayValues;\n    if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);\n  }\n}\n\n\n/***/ }),\n/* 176 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar privatePool = new WeakMap();\n\n/**\n * Calculates indexes of columns to render OR columns that are visible.\n * To redo the calculation, you need to create a new calculator.\n *\n * @class ViewportColumnsCalculator\n */\n\nvar ViewportColumnsCalculator = function () {\n  _createClass(ViewportColumnsCalculator, null, [{\n    key: 'DEFAULT_WIDTH',\n\n    /**\n     * Default column width\n     *\n     * @type {Number}\n     */\n    get: function get() {\n      return 50;\n    }\n\n    /**\n     * @param {Number} viewportWidth Width of the viewport\n     * @param {Number} scrollOffset Current horizontal scroll position of the viewport\n     * @param {Number} totalColumns Total number of rows\n     * @param {Function} columnWidthFn Function that returns the width of the column at a given index (in px)\n     * @param {Function} overrideFn Function that changes calculated this.startRow, this.endRow (used by MergeCells plugin)\n     * @param {Boolean} onlyFullyVisible if `true`, only startRow and endRow will be indexes of rows that are fully in viewport\n     * @param {Boolean} stretchH\n     * @param {Function} [stretchingColumnWidthFn] Function that returns the new width of the stretched column.\n     */\n\n  }]);\n\n  function ViewportColumnsCalculator(viewportWidth, scrollOffset, totalColumns, columnWidthFn, overrideFn, onlyFullyVisible, stretchH) {\n    var stretchingColumnWidthFn = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : function (width) {\n      return width;\n    };\n\n    _classCallCheck(this, ViewportColumnsCalculator);\n\n    privatePool.set(this, {\n      viewportWidth: viewportWidth,\n      scrollOffset: scrollOffset,\n      totalColumns: totalColumns,\n      columnWidthFn: columnWidthFn,\n      overrideFn: overrideFn,\n      onlyFullyVisible: onlyFullyVisible,\n      stretchingColumnWidthFn: stretchingColumnWidthFn\n    });\n\n    /**\n     * Number of rendered/visible columns\n     *\n     * @type {Number}\n     */\n    this.count = 0;\n\n    /**\n     * Index of the first rendered/visible column (can be overwritten using overrideFn)\n     *\n     * @type {Number|null}\n     */\n    this.startColumn = null;\n\n    /**\n     * Index of the last rendered/visible column (can be overwritten using overrideFn)\n     *\n     * @type {null}\n     */\n    this.endColumn = null;\n\n    /**\n     * Position of the first rendered/visible column (in px)\n     *\n     * @type {Number|null}\n     */\n    this.startPosition = null;\n\n    this.stretchAllRatio = 0;\n    this.stretchLastWidth = 0;\n    this.stretch = stretchH;\n    this.totalTargetWidth = 0;\n    this.needVerifyLastColumnWidth = true;\n    this.stretchAllColumnsWidth = [];\n\n    this.calculate();\n  }\n\n  /**\n   * Calculates viewport\n   */\n\n\n  _createClass(ViewportColumnsCalculator, [{\n    key: 'calculate',\n    value: function calculate() {\n      var sum = 0;\n      var needReverse = true;\n      var startPositions = [];\n      var columnWidth = void 0;\n\n      var priv = privatePool.get(this);\n      var onlyFullyVisible = priv.onlyFullyVisible;\n      var overrideFn = priv.overrideFn;\n      var scrollOffset = priv.scrollOffset;\n      var totalColumns = priv.totalColumns;\n      var viewportWidth = priv.viewportWidth;\n\n      for (var i = 0; i < totalColumns; i++) {\n        columnWidth = this._getColumnWidth(i);\n\n        if (sum <= scrollOffset && !onlyFullyVisible) {\n          this.startColumn = i;\n        }\n\n        // +1 pixel for row header width compensation for horizontal scroll > 0\n        var compensatedViewportWidth = scrollOffset > 0 ? viewportWidth + 1 : viewportWidth;\n\n        if (sum >= scrollOffset && sum + columnWidth <= scrollOffset + compensatedViewportWidth) {\n          if (this.startColumn === null || this.startColumn === void 0) {\n            this.startColumn = i;\n          }\n          this.endColumn = i;\n        }\n        startPositions.push(sum);\n        sum += columnWidth;\n\n        if (!onlyFullyVisible) {\n          this.endColumn = i;\n        }\n        if (sum >= scrollOffset + viewportWidth) {\n          needReverse = false;\n          break;\n        }\n      }\n\n      if (this.endColumn === totalColumns - 1 && needReverse) {\n        this.startColumn = this.endColumn;\n\n        while (this.startColumn > 0) {\n          var viewportSum = startPositions[this.endColumn] + columnWidth - startPositions[this.startColumn - 1];\n\n          if (viewportSum <= viewportWidth || !onlyFullyVisible) {\n            this.startColumn -= 1;\n          }\n          if (viewportSum > viewportWidth) {\n            break;\n          }\n        }\n      }\n\n      if (this.startColumn !== null && overrideFn) {\n        overrideFn(this);\n      }\n      this.startPosition = startPositions[this.startColumn];\n\n      if (this.startPosition === void 0) {\n        this.startPosition = null;\n      }\n      if (this.startColumn !== null) {\n        this.count = this.endColumn - this.startColumn + 1;\n      }\n    }\n\n    /**\n     * Recalculate columns stretching.\n     *\n     * @param {Number} totalWidth\n     */\n\n  }, {\n    key: 'refreshStretching',\n    value: function refreshStretching(totalWidth) {\n      if (this.stretch === 'none') {\n        return;\n      }\n      var totalColumnsWidth = totalWidth;\n      this.totalTargetWidth = totalColumnsWidth;\n\n      var priv = privatePool.get(this);\n      var totalColumns = priv.totalColumns;\n      var sumAll = 0;\n\n      for (var i = 0; i < totalColumns; i++) {\n        var columnWidth = this._getColumnWidth(i);\n        var permanentColumnWidth = priv.stretchingColumnWidthFn(void 0, i);\n\n        if (typeof permanentColumnWidth === 'number') {\n          totalColumnsWidth -= permanentColumnWidth;\n        } else {\n          sumAll += columnWidth;\n        }\n      }\n      var remainingSize = totalColumnsWidth - sumAll;\n\n      if (this.stretch === 'all' && remainingSize > 0) {\n        this.stretchAllRatio = totalColumnsWidth / sumAll;\n        this.stretchAllColumnsWidth = [];\n        this.needVerifyLastColumnWidth = true;\n      } else if (this.stretch === 'last' && totalColumnsWidth !== Infinity) {\n        var _columnWidth = this._getColumnWidth(totalColumns - 1);\n        var lastColumnWidth = remainingSize + _columnWidth;\n\n        this.stretchLastWidth = lastColumnWidth >= 0 ? lastColumnWidth : _columnWidth;\n      }\n    }\n\n    /**\n     * Get stretched column width based on stretchH (all or last) setting passed in handsontable instance.\n     *\n     * @param {Number} column\n     * @param {Number} baseWidth\n     * @returns {Number|null}\n     */\n\n  }, {\n    key: 'getStretchedColumnWidth',\n    value: function getStretchedColumnWidth(column, baseWidth) {\n      var result = null;\n\n      if (this.stretch === 'all' && this.stretchAllRatio !== 0) {\n        result = this._getStretchedAllColumnWidth(column, baseWidth);\n      } else if (this.stretch === 'last' && this.stretchLastWidth !== 0) {\n        result = this._getStretchedLastColumnWidth(column);\n      }\n\n      return result;\n    }\n\n    /**\n     * @param {Number} column\n     * @param {Number} baseWidth\n     * @returns {Number}\n     * @private\n     */\n\n  }, {\n    key: '_getStretchedAllColumnWidth',\n    value: function _getStretchedAllColumnWidth(column, baseWidth) {\n      var sumRatioWidth = 0;\n      var priv = privatePool.get(this);\n      var totalColumns = priv.totalColumns;\n\n      if (!this.stretchAllColumnsWidth[column]) {\n        var stretchedWidth = Math.round(baseWidth * this.stretchAllRatio);\n        var newStretchedWidth = priv.stretchingColumnWidthFn(stretchedWidth, column);\n\n        if (newStretchedWidth === void 0) {\n          this.stretchAllColumnsWidth[column] = stretchedWidth;\n        } else {\n          this.stretchAllColumnsWidth[column] = isNaN(newStretchedWidth) ? this._getColumnWidth(column) : newStretchedWidth;\n        }\n      }\n\n      if (this.stretchAllColumnsWidth.length === totalColumns && this.needVerifyLastColumnWidth) {\n        this.needVerifyLastColumnWidth = false;\n\n        for (var i = 0; i < this.stretchAllColumnsWidth.length; i++) {\n          sumRatioWidth += this.stretchAllColumnsWidth[i];\n        }\n        if (sumRatioWidth !== this.totalTargetWidth) {\n          this.stretchAllColumnsWidth[this.stretchAllColumnsWidth.length - 1] += this.totalTargetWidth - sumRatioWidth;\n        }\n      }\n\n      return this.stretchAllColumnsWidth[column];\n    }\n\n    /**\n     * @param {Number} column\n     * @returns {Number|null}\n     * @private\n     */\n\n  }, {\n    key: '_getStretchedLastColumnWidth',\n    value: function _getStretchedLastColumnWidth(column) {\n      var priv = privatePool.get(this);\n      var totalColumns = priv.totalColumns;\n\n      if (column === totalColumns - 1) {\n        return this.stretchLastWidth;\n      }\n\n      return null;\n    }\n\n    /**\n     * @param {Number} column Column index.\n     * @returns {Number}\n     * @private\n     */\n\n  }, {\n    key: '_getColumnWidth',\n    value: function _getColumnWidth(column) {\n      var width = privatePool.get(this).columnWidthFn(column);\n\n      if (isNaN(width)) {\n        width = ViewportColumnsCalculator.DEFAULT_WIDTH;\n      }\n\n      return width;\n    }\n  }]);\n\n  return ViewportColumnsCalculator;\n}();\n\nexports.default = ViewportColumnsCalculator;\n\n/***/ }),\n/* 177 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar privatePool = new WeakMap();\n\n/**\n * Calculates indexes of rows to render OR rows that are visible.\n * To redo the calculation, you need to create a new calculator.\n *\n * @class ViewportRowsCalculator\n */\n\nvar ViewportRowsCalculator = function () {\n  _createClass(ViewportRowsCalculator, null, [{\n    key: \"DEFAULT_HEIGHT\",\n\n    /**\n     * Default row height\n     *\n     * @type {Number}\n     */\n    get: function get() {\n      return 23;\n    }\n\n    /**\n     * @param {Number} viewportHeight Height of the viewport\n     * @param {Number} scrollOffset Current vertical scroll position of the viewport\n     * @param {Number} totalRows Total number of rows\n     * @param {Function} rowHeightFn Function that returns the height of the row at a given index (in px)\n     * @param {Function} overrideFn Function that changes calculated this.startRow, this.endRow (used by MergeCells plugin)\n     * @param {Boolean} onlyFullyVisible if `true`, only startRow and endRow will be indexes of rows that are fully in viewport\n     * @param {Number} horizontalScrollbarHeight\n     */\n\n  }]);\n\n  function ViewportRowsCalculator(viewportHeight, scrollOffset, totalRows, rowHeightFn, overrideFn, onlyFullyVisible, horizontalScrollbarHeight) {\n    _classCallCheck(this, ViewportRowsCalculator);\n\n    privatePool.set(this, {\n      viewportHeight: viewportHeight,\n      scrollOffset: scrollOffset,\n      totalRows: totalRows,\n      rowHeightFn: rowHeightFn,\n      overrideFn: overrideFn,\n      onlyFullyVisible: onlyFullyVisible,\n      horizontalScrollbarHeight: horizontalScrollbarHeight\n    });\n\n    /**\n     * Number of rendered/visible rows\n     *\n     * @type {Number}\n     */\n    this.count = 0;\n\n    /**\n     * Index of the first rendered/visible row (can be overwritten using overrideFn)\n     *\n     * @type {Number|null}\n     */\n    this.startRow = null;\n\n    /**\n     * Index of the last rendered/visible row (can be overwritten using overrideFn)\n     *\n     * @type {null}\n     */\n    this.endRow = null;\n\n    /**\n     * Position of the first rendered/visible row (in px)\n     *\n     * @type {Number|null}\n     */\n    this.startPosition = null;\n\n    this.calculate();\n  }\n\n  /**\n   * Calculates viewport\n   */\n\n\n  _createClass(ViewportRowsCalculator, [{\n    key: \"calculate\",\n    value: function calculate() {\n      var sum = 0;\n      var needReverse = true;\n      var startPositions = [];\n\n      var priv = privatePool.get(this);\n      var onlyFullyVisible = priv.onlyFullyVisible;\n      var overrideFn = priv.overrideFn;\n      var rowHeightFn = priv.rowHeightFn;\n      var scrollOffset = priv.scrollOffset;\n      var totalRows = priv.totalRows;\n      var viewportHeight = priv.viewportHeight;\n      var horizontalScrollbarHeight = priv.horizontalScrollbarHeight || 0;\n      var rowHeight = void 0;\n\n      // Calculate the number (start and end index) of rows needed\n      for (var i = 0; i < totalRows; i++) {\n        rowHeight = rowHeightFn(i);\n\n        if (isNaN(rowHeight)) {\n          rowHeight = ViewportRowsCalculator.DEFAULT_HEIGHT;\n        }\n        if (sum <= scrollOffset && !onlyFullyVisible) {\n          this.startRow = i;\n        }\n\n        // the row is within the \"visible range\"\n        if (sum >= scrollOffset && sum + rowHeight <= scrollOffset + viewportHeight - horizontalScrollbarHeight) {\n          if (this.startRow === null) {\n            this.startRow = i;\n          }\n          this.endRow = i;\n        }\n        startPositions.push(sum);\n        sum += rowHeight;\n\n        if (!onlyFullyVisible) {\n          this.endRow = i;\n        }\n        if (sum >= scrollOffset + viewportHeight - horizontalScrollbarHeight) {\n          needReverse = false;\n          break;\n        }\n      }\n\n      // If the estimation has reached the last row and there is still some space available in the viewport,\n      // we need to render in reverse in order to fill the whole viewport with rows\n      if (this.endRow === totalRows - 1 && needReverse) {\n        this.startRow = this.endRow;\n\n        while (this.startRow > 0) {\n          // rowHeight is the height of the last row\n          var viewportSum = startPositions[this.endRow] + rowHeight - startPositions[this.startRow - 1];\n\n          if (viewportSum <= viewportHeight - horizontalScrollbarHeight || !onlyFullyVisible) {\n            this.startRow -= 1;\n          }\n          if (viewportSum >= viewportHeight - horizontalScrollbarHeight) {\n            break;\n          }\n        }\n      }\n\n      if (this.startRow !== null && overrideFn) {\n        overrideFn(this);\n      }\n      this.startPosition = startPositions[this.startRow];\n\n      if (this.startPosition === void 0) {\n        this.startPosition = null;\n      }\n      if (this.startRow !== null) {\n        this.count = this.endRow - this.startRow + 1;\n      }\n    }\n  }]);\n\n  return ViewportRowsCalculator;\n}();\n\nexports.default = ViewportRowsCalculator;\n\n/***/ }),\n/* 178 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _coords = __webpack_require__(56);\n\nvar _coords2 = _interopRequireDefault(_coords);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * CellRange holds cell coordinates as {@link CellCoords} instances. This object represent unit of the selection layer which\n * can contains multiple contiquous cells or single cell.\n *\n * @util\n */\nvar CellRange = function () {\n  function CellRange(highlight) {\n    var from = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : highlight;\n    var to = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : highlight;\n\n    _classCallCheck(this, CellRange);\n\n    /**\n     * Used to draw bold border around a cell where selection was started and to edit the cell when you press Enter.\n     *\n     * @type {CellCoords}\n     */\n    this.highlight = highlight;\n    /**\n     * Usually the same as highlight, but in Excel there is distinction - one can change highlight within a selection.\n     *\n     * @type {CellCoords}\n     */\n    this.from = from;\n    /**\n     * End selection.\n     *\n     * @type {CellCoords}\n     */\n    this.to = to;\n  }\n\n  /**\n   * Set the new coordinates for highlighting selection.\n   *\n   * @param {CellCoords} coords Coordinates to use.\n   */\n\n\n  _createClass(CellRange, [{\n    key: 'setHighlight',\n    value: function setHighlight(coords) {\n      this.highlight = coords;\n\n      return this;\n    }\n\n    /**\n     * Set the new coordinates where selection starts from.\n     *\n     * @param {CellCoords} coords Coordinates to use.\n     */\n\n  }, {\n    key: 'setFrom',\n    value: function setFrom(coords) {\n      this.from = coords;\n\n      return this;\n    }\n\n    /**\n     * Set new coordinates where selection ends from.\n     *\n     * @param {CellCoords} coords Coordinates to use.\n     */\n\n  }, {\n    key: 'setTo',\n    value: function setTo(coords) {\n      this.to = coords;\n\n      return this;\n    }\n\n    /**\n     * Checks if given coordinates are valid in context of a given Walkontable instance.\n     *\n     * @param {Walkontable} wot The Walkontable instance.\n     * @returns {Boolean}\n     */\n\n  }, {\n    key: 'isValid',\n    value: function isValid(wot) {\n      return this.from.isValid(wot) && this.to.isValid(wot);\n    }\n\n    /**\n     * Checks if this cell range is restricted to one cell\n     *\n     * @returns {Boolean}\n     */\n\n  }, {\n    key: 'isSingle',\n    value: function isSingle() {\n      return this.from.row === this.to.row && this.from.col === this.to.col;\n    }\n\n    /**\n     * Returns selected range height (in number of rows).\n     *\n     * @returns {Number}\n     */\n\n  }, {\n    key: 'getHeight',\n    value: function getHeight() {\n      return Math.max(this.from.row, this.to.row) - Math.min(this.from.row, this.to.row) + 1;\n    }\n\n    /**\n     * Returns selected range width (in number of columns).\n     *\n     * @returns {Number}\n     */\n\n  }, {\n    key: 'getWidth',\n    value: function getWidth() {\n      return Math.max(this.from.col, this.to.col) - Math.min(this.from.col, this.to.col) + 1;\n    }\n\n    /**\n     * Checks if given cell coordinates are within `from` and `to` cell coordinates of this range.\n     *\n     * @param {CellCoords} cellCoords The cell coordinates to check.\n     * @returns {Boolean}\n     */\n\n  }, {\n    key: 'includes',\n    value: function includes(cellCoords) {\n      var row = cellCoords.row,\n          col = cellCoords.col;\n\n      var topLeft = this.getTopLeftCorner();\n      var bottomRight = this.getBottomRightCorner();\n\n      return topLeft.row <= row && bottomRight.row >= row && topLeft.col <= col && bottomRight.col >= col;\n    }\n\n    /**\n     * Checks if given range is within of this range.\n     *\n     * @param {CellRange} cellRange The cells range to check.\n     * @returns {Boolean}\n     */\n\n  }, {\n    key: 'includesRange',\n    value: function includesRange(cellRange) {\n      return this.includes(cellRange.getTopLeftCorner()) && this.includes(cellRange.getBottomRightCorner());\n    }\n\n    /**\n     * Checks if given range is equal to this range.\n     *\n     * @param {CellRange} cellRange The cells range to check.\n     * @returns {Boolean}\n     */\n\n  }, {\n    key: 'isEqual',\n    value: function isEqual(cellRange) {\n      return Math.min(this.from.row, this.to.row) === Math.min(cellRange.from.row, cellRange.to.row) && Math.max(this.from.row, this.to.row) === Math.max(cellRange.from.row, cellRange.to.row) && Math.min(this.from.col, this.to.col) === Math.min(cellRange.from.col, cellRange.to.col) && Math.max(this.from.col, this.to.col) === Math.max(cellRange.from.col, cellRange.to.col);\n    }\n\n    /**\n     * Checks if tested range overlaps with the range. Range A is considered to to be overlapping with range B\n     * if intersection of A and B or B and A is not empty.\n     *\n     * @param {CellRange} cellRange The cells range to check.\n     * @returns {Boolean}\n     */\n\n  }, {\n    key: 'overlaps',\n    value: function overlaps(cellRange) {\n      return cellRange.isSouthEastOf(this.getTopLeftCorner()) && cellRange.isNorthWestOf(this.getBottomRightCorner());\n    }\n\n    /**\n     * Checks if tested coordinates are positioned in south-east from this cell range.\n     *\n     * @param {CellRange} cellRange The cells range to check.\n     * @returns {Boolean}\n     */\n\n  }, {\n    key: 'isSouthEastOf',\n    value: function isSouthEastOf(cellRange) {\n      return this.getTopLeftCorner().isSouthEastOf(cellRange) || this.getBottomRightCorner().isSouthEastOf(cellRange);\n    }\n\n    /**\n     * Checks if tested coordinates are positioned in north-west from this cell range.\n     *\n     * @param {CellRange} cellRange The cells range to check.\n     * @returns {Boolean}\n     */\n\n  }, {\n    key: 'isNorthWestOf',\n    value: function isNorthWestOf(cellRange) {\n      return this.getTopLeftCorner().isNorthWestOf(cellRange) || this.getBottomRightCorner().isNorthWestOf(cellRange);\n    }\n\n    /**\n     * Returns `true` if the provided range is overlapping the current range horizontally (e.g. the current range's last\n     * column is 5 and the provided range's first column is 3).\n     *\n     * @param {CellRange} cellRange The cells range to check.\n     * @returns {Boolean}\n     */\n\n  }, {\n    key: 'isOverlappingHorizontally',\n    value: function isOverlappingHorizontally(cellRange) {\n      return this.getTopRightCorner().col >= cellRange.getTopLeftCorner().col && this.getTopRightCorner().col <= cellRange.getTopRightCorner().col || this.getTopLeftCorner().col <= cellRange.getTopRightCorner().col && this.getTopLeftCorner().col >= cellRange.getTopLeftCorner().col;\n    }\n\n    /**\n     * Returns `true` if the provided range is overlapping the current range vertically (e.g. the current range's last\n     *  row is 5 and the provided range's first row is 3).\n     *\n     * @param {CellRange} cellRange The cells range to check.\n     * @returns {Boolean}\n     */\n\n  }, {\n    key: 'isOverlappingVertically',\n    value: function isOverlappingVertically(cellRange) {\n      return this.getBottomRightCorner().row >= cellRange.getTopRightCorner().row && this.getBottomRightCorner().row <= cellRange.getBottomRightCorner().row || this.getTopRightCorner().row <= cellRange.getBottomRightCorner().row && this.getTopRightCorner().row >= cellRange.getTopRightCorner().row;\n    }\n\n    /**\n     * Adds a cell to a range (only if exceeds corners of the range). Returns information if range was expanded.\n     *\n     * @param {CellCoords} cellCoords\n     * @returns {Boolean}\n     */\n\n  }, {\n    key: 'expand',\n    value: function expand(cellCoords) {\n      var topLeft = this.getTopLeftCorner();\n      var bottomRight = this.getBottomRightCorner();\n\n      if (cellCoords.row < topLeft.row || cellCoords.col < topLeft.col || cellCoords.row > bottomRight.row || cellCoords.col > bottomRight.col) {\n        this.from = new _coords2.default(Math.min(topLeft.row, cellCoords.row), Math.min(topLeft.col, cellCoords.col));\n        this.to = new _coords2.default(Math.max(bottomRight.row, cellCoords.row), Math.max(bottomRight.col, cellCoords.col));\n\n        return true;\n      }\n\n      return false;\n    }\n\n    /**\n     * Expand the current object by the range passed in the first argument.\n     *\n     * @param {CellRange} expandingRange Object extending the range.\n     * @returns {Boolean}\n     */\n\n  }, {\n    key: 'expandByRange',\n    value: function expandByRange(expandingRange) {\n      if (this.includesRange(expandingRange) || !this.overlaps(expandingRange)) {\n        return false;\n      }\n\n      var topLeft = this.getTopLeftCorner();\n      var bottomRight = this.getBottomRightCorner();\n      var initialDirection = this.getDirection();\n\n      var expandingTopLeft = expandingRange.getTopLeftCorner();\n      var expandingBottomRight = expandingRange.getBottomRightCorner();\n\n      var resultTopRow = Math.min(topLeft.row, expandingTopLeft.row);\n      var resultTopCol = Math.min(topLeft.col, expandingTopLeft.col);\n      var resultBottomRow = Math.max(bottomRight.row, expandingBottomRight.row);\n      var resultBottomCol = Math.max(bottomRight.col, expandingBottomRight.col);\n\n      var finalFrom = new _coords2.default(resultTopRow, resultTopCol);\n      var finalTo = new _coords2.default(resultBottomRow, resultBottomCol);\n\n      this.from = finalFrom;\n      this.to = finalTo;\n\n      this.setDirection(initialDirection);\n\n      if (this.highlight.row === this.getBottomRightCorner().row && this.getVerticalDirection() === 'N-S') {\n        this.flipDirectionVertically();\n      }\n\n      if (this.highlight.col === this.getTopRightCorner().col && this.getHorizontalDirection() === 'W-E') {\n        this.flipDirectionHorizontally();\n      }\n\n      return true;\n    }\n\n    /**\n     * Gets the direction of the selection.\n     *\n     * @returns {String} Returns one of the values: `'NW-SE'`, `'NE-SW'`, `'SE-NW'`, `'SW-NE'`.\n     */\n\n  }, {\n    key: 'getDirection',\n    value: function getDirection() {\n      if (this.from.isNorthWestOf(this.to)) {\n        // NorthWest - SouthEast\n        return 'NW-SE';\n      } else if (this.from.isNorthEastOf(this.to)) {\n        // NorthEast - SouthWest\n        return 'NE-SW';\n      } else if (this.from.isSouthEastOf(this.to)) {\n        // SouthEast - NorthWest\n        return 'SE-NW';\n      } else if (this.from.isSouthWestOf(this.to)) {\n        // SouthWest - NorthEast\n        return 'SW-NE';\n      }\n    }\n\n    /**\n     * Sets the direction of the selection.\n     *\n     * @param {String} direction One of the values: `'NW-SE'`, `'NE-SW'`, `'SE-NW'`, `'SW-NE'`.\n     */\n\n  }, {\n    key: 'setDirection',\n    value: function setDirection(direction) {\n      switch (direction) {\n        case 'NW-SE':\n          var _ref = [this.getTopLeftCorner(), this.getBottomRightCorner()];\n          this.from = _ref[0];\n          this.to = _ref[1];\n\n          break;\n        case 'NE-SW':\n          var _ref2 = [this.getTopRightCorner(), this.getBottomLeftCorner()];\n          this.from = _ref2[0];\n          this.to = _ref2[1];\n\n          break;\n        case 'SE-NW':\n          var _ref3 = [this.getBottomRightCorner(), this.getTopLeftCorner()];\n          this.from = _ref3[0];\n          this.to = _ref3[1];\n\n          break;\n        case 'SW-NE':\n          var _ref4 = [this.getBottomLeftCorner(), this.getTopRightCorner()];\n          this.from = _ref4[0];\n          this.to = _ref4[1];\n\n          break;\n        default:\n          break;\n      }\n    }\n\n    /**\n     * Gets the vertical direction of the range.\n     *\n     * @returns {String} Returns one of the values: `N-S` (north->south), `S-N` (south->north).\n     */\n\n  }, {\n    key: 'getVerticalDirection',\n    value: function getVerticalDirection() {\n      return ['NE-SW', 'NW-SE'].indexOf(this.getDirection()) > -1 ? 'N-S' : 'S-N';\n    }\n\n    /**\n     * Gets the horizontal direction of the range.\n     *\n     * @returns {String} Returns one of the values: `W-E` (west->east), `E-W` (east->west).\n     */\n\n  }, {\n    key: 'getHorizontalDirection',\n    value: function getHorizontalDirection() {\n      return ['NW-SE', 'SW-NE'].indexOf(this.getDirection()) > -1 ? 'W-E' : 'E-W';\n    }\n\n    /**\n     * Flip the direction vertically. (e.g. `NW-SE` changes to `SW-NE`).\n     */\n\n  }, {\n    key: 'flipDirectionVertically',\n    value: function flipDirectionVertically() {\n      var direction = this.getDirection();\n      switch (direction) {\n        case 'NW-SE':\n          this.setDirection('SW-NE');\n          break;\n        case 'NE-SW':\n          this.setDirection('SE-NW');\n          break;\n        case 'SE-NW':\n          this.setDirection('NE-SW');\n          break;\n        case 'SW-NE':\n          this.setDirection('NW-SE');\n          break;\n        default:\n          break;\n      }\n    }\n\n    /**\n     * Flip the direction horizontally. (e.g. `NW-SE` changes to `NE-SW`).\n     */\n\n  }, {\n    key: 'flipDirectionHorizontally',\n    value: function flipDirectionHorizontally() {\n      var direction = this.getDirection();\n      switch (direction) {\n        case 'NW-SE':\n          this.setDirection('NE-SW');\n          break;\n        case 'NE-SW':\n          this.setDirection('NW-SE');\n          break;\n        case 'SE-NW':\n          this.setDirection('SW-NE');\n          break;\n        case 'SW-NE':\n          this.setDirection('SE-NW');\n          break;\n        default:\n          break;\n      }\n    }\n\n    /**\n     * Gets the top left corner of this range.\n     *\n     * @returns {CellCoords}\n     */\n\n  }, {\n    key: 'getTopLeftCorner',\n    value: function getTopLeftCorner() {\n      return new _coords2.default(Math.min(this.from.row, this.to.row), Math.min(this.from.col, this.to.col));\n    }\n\n    /**\n     * Gets the bottom right corner of this range.\n     *\n     * @returns {CellCoords}\n     */\n\n  }, {\n    key: 'getBottomRightCorner',\n    value: function getBottomRightCorner() {\n      return new _coords2.default(Math.max(this.from.row, this.to.row), Math.max(this.from.col, this.to.col));\n    }\n\n    /**\n     * Gets the top right corner of this range.\n     *\n     * @returns {CellCoords}\n     */\n\n  }, {\n    key: 'getTopRightCorner',\n    value: function getTopRightCorner() {\n      return new _coords2.default(Math.min(this.from.row, this.to.row), Math.max(this.from.col, this.to.col));\n    }\n\n    /**\n     * Gets the bottom left corner of this range.\n     *\n     * @returns {CellCoords}\n     */\n\n  }, {\n    key: 'getBottomLeftCorner',\n    value: function getBottomLeftCorner() {\n      return new _coords2.default(Math.max(this.from.row, this.to.row), Math.min(this.from.col, this.to.col));\n    }\n\n    /**\n     * Checks if coordinates match to one of the 4th corners of this range.\n     *\n     * @param {CellCoords} coords Cell coordinates to check.\n     * @param {CellRange} [expandedRange]\n     * @returns {Boolean}\n     */\n\n  }, {\n    key: 'isCorner',\n    value: function isCorner(coords, expandedRange) {\n      if (expandedRange && expandedRange.includes(coords) && (this.getTopLeftCorner().isEqual(new _coords2.default(expandedRange.from.row, expandedRange.from.col)) || this.getTopRightCorner().isEqual(new _coords2.default(expandedRange.from.row, expandedRange.to.col)) || this.getBottomLeftCorner().isEqual(new _coords2.default(expandedRange.to.row, expandedRange.from.col)) || this.getBottomRightCorner().isEqual(new _coords2.default(expandedRange.to.row, expandedRange.to.col)))) {\n        return true;\n      }\n\n      return coords.isEqual(this.getTopLeftCorner()) || coords.isEqual(this.getTopRightCorner()) || coords.isEqual(this.getBottomLeftCorner()) || coords.isEqual(this.getBottomRightCorner());\n    }\n\n    /**\n     * Gets coordinates of the corner which is opposite to the matched. When the passed coordinates matched to the\n     * bottom-right corner of this range then the coordinates for top-left will be returned.\n     *\n     * @param {CellCoords} coords Cell coordinates to check.\n     * @param {CellRange} [expandedRange]\n     * @returns {CellCoords}\n     */\n\n  }, {\n    key: 'getOppositeCorner',\n    value: function getOppositeCorner(coords, expandedRange) {\n      if (!(coords instanceof _coords2.default)) {\n        return false;\n      }\n\n      if (expandedRange) {\n        if (expandedRange.includes(coords)) {\n          if (this.getTopLeftCorner().isEqual(new _coords2.default(expandedRange.from.row, expandedRange.from.col))) {\n            return this.getBottomRightCorner();\n          }\n          if (this.getTopRightCorner().isEqual(new _coords2.default(expandedRange.from.row, expandedRange.to.col))) {\n            return this.getBottomLeftCorner();\n          }\n          if (this.getBottomLeftCorner().isEqual(new _coords2.default(expandedRange.to.row, expandedRange.from.col))) {\n            return this.getTopRightCorner();\n          }\n          if (this.getBottomRightCorner().isEqual(new _coords2.default(expandedRange.to.row, expandedRange.to.col))) {\n            return this.getTopLeftCorner();\n          }\n        }\n      }\n\n      if (coords.isEqual(this.getBottomRightCorner())) {\n        return this.getTopLeftCorner();\n      } else if (coords.isEqual(this.getTopLeftCorner())) {\n        return this.getBottomRightCorner();\n      } else if (coords.isEqual(this.getTopRightCorner())) {\n        return this.getBottomLeftCorner();\n      } else if (coords.isEqual(this.getBottomLeftCorner())) {\n        return this.getTopRightCorner();\n      }\n    }\n\n    /**\n     * @param {CellRange} range\n     * @returns {Array}\n     */\n\n  }, {\n    key: 'getBordersSharedWith',\n    value: function getBordersSharedWith(range) {\n      if (!this.includesRange(range)) {\n        return [];\n      }\n\n      var thisBorders = {\n        top: Math.min(this.from.row, this.to.row),\n        bottom: Math.max(this.from.row, this.to.row),\n        left: Math.min(this.from.col, this.to.col),\n        right: Math.max(this.from.col, this.to.col)\n      };\n      var rangeBorders = {\n        top: Math.min(range.from.row, range.to.row),\n        bottom: Math.max(range.from.row, range.to.row),\n        left: Math.min(range.from.col, range.to.col),\n        right: Math.max(range.from.col, range.to.col)\n      };\n      var result = [];\n\n      if (thisBorders.top === rangeBorders.top) {\n        result.push('top');\n      }\n      if (thisBorders.right === rangeBorders.right) {\n        result.push('right');\n      }\n      if (thisBorders.bottom === rangeBorders.bottom) {\n        result.push('bottom');\n      }\n      if (thisBorders.left === rangeBorders.left) {\n        result.push('left');\n      }\n\n      return result;\n    }\n\n    /**\n     * Get inner selected cell coords defined by this range\n     *\n     * @returns {Array}\n     */\n\n  }, {\n    key: 'getInner',\n    value: function getInner() {\n      var topLeft = this.getTopLeftCorner();\n      var bottomRight = this.getBottomRightCorner();\n      var out = [];\n\n      for (var r = topLeft.row; r <= bottomRight.row; r++) {\n        for (var c = topLeft.col; c <= bottomRight.col; c++) {\n          if (!(this.from.row === r && this.from.col === c) && !(this.to.row === r && this.to.col === c)) {\n            out.push(new _coords2.default(r, c));\n          }\n        }\n      }\n      return out;\n    }\n\n    /**\n     * Get all selected cell coords defined by this range\n     *\n     * @returns {Array}\n     */\n\n  }, {\n    key: 'getAll',\n    value: function getAll() {\n      var topLeft = this.getTopLeftCorner();\n      var bottomRight = this.getBottomRightCorner();\n      var out = [];\n\n      for (var r = topLeft.row; r <= bottomRight.row; r++) {\n        for (var c = topLeft.col; c <= bottomRight.col; c++) {\n          if (topLeft.row === r && topLeft.col === c) {\n            out.push(topLeft);\n          } else if (bottomRight.row === r && bottomRight.col === c) {\n            out.push(bottomRight);\n          } else {\n            out.push(new _coords2.default(r, c));\n          }\n        }\n      }\n\n      return out;\n    }\n\n    /**\n     * Runs a callback function against all cells in the range. You can break the iteration by returning\n     * `false` in the callback function\n     *\n     * @param callback {Function}\n     */\n\n  }, {\n    key: 'forAll',\n    value: function forAll(callback) {\n      var topLeft = this.getTopLeftCorner();\n      var bottomRight = this.getBottomRightCorner();\n\n      for (var r = topLeft.row; r <= bottomRight.row; r++) {\n        for (var c = topLeft.col; c <= bottomRight.col; c++) {\n          var breakIteration = callback(r, c);\n\n          if (breakIteration === false) {\n            return;\n          }\n        }\n      }\n    }\n\n    /**\n     * Convert CellRange to literal object.\n     *\n     * @return {Object} Returns a literal object with `from` and `to` properties which each of that object\n     *                  contains `row` and `col` keys.\n     */\n\n  }, {\n    key: 'toObject',\n    value: function toObject() {\n      return {\n        from: this.from.toObject(),\n        to: this.to.toObject()\n      };\n    }\n  }]);\n\n  return CellRange;\n}();\n\nexports.default = CellRange;\n\n/***/ }),\n/* 179 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * @class ColumnFilter\n */\nvar ColumnFilter = function () {\n  /**\n   * @param {Number} offset\n   * @param {Number} total\n   * @param {Number} countTH\n   */\n  function ColumnFilter(offset, total, countTH) {\n    _classCallCheck(this, ColumnFilter);\n\n    this.offset = offset;\n    this.total = total;\n    this.countTH = countTH;\n  }\n\n  /**\n   * @param index\n   * @returns {Number}\n   */\n\n\n  _createClass(ColumnFilter, [{\n    key: \"offsetted\",\n    value: function offsetted(index) {\n      return index + this.offset;\n    }\n\n    /**\n     * @param index\n     * @returns {Number}\n     */\n\n  }, {\n    key: \"unOffsetted\",\n    value: function unOffsetted(index) {\n      return index - this.offset;\n    }\n\n    /**\n     * @param index\n     * @returns {Number}\n     */\n\n  }, {\n    key: \"renderedToSource\",\n    value: function renderedToSource(index) {\n      return this.offsetted(index);\n    }\n\n    /**\n     * @param index\n     * @returns {Number}\n     */\n\n  }, {\n    key: \"sourceToRendered\",\n    value: function sourceToRendered(index) {\n      return this.unOffsetted(index);\n    }\n\n    /**\n     * @param index\n     * @returns {Number}\n     */\n\n  }, {\n    key: \"offsettedTH\",\n    value: function offsettedTH(index) {\n      return index - this.countTH;\n    }\n\n    /**\n     * @param index\n     * @returns {Number}\n     */\n\n  }, {\n    key: \"unOffsettedTH\",\n    value: function unOffsettedTH(index) {\n      return index + this.countTH;\n    }\n\n    /**\n     * @param index\n     * @returns {Number}\n     */\n\n  }, {\n    key: \"visibleRowHeadedColumnToSourceColumn\",\n    value: function visibleRowHeadedColumnToSourceColumn(index) {\n      return this.renderedToSource(this.offsettedTH(index));\n    }\n\n    /**\n     * @param index\n     * @returns {Number}\n     */\n\n  }, {\n    key: \"sourceColumnToVisibleRowHeadedColumn\",\n    value: function sourceColumnToVisibleRowHeadedColumn(index) {\n      return this.unOffsettedTH(this.sourceToRendered(index));\n    }\n  }]);\n\n  return ColumnFilter;\n}();\n\nexports.default = ColumnFilter;\n\n/***/ }),\n/* 180 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * @class RowFilter\n */\nvar RowFilter = function () {\n  /**\n   * @param {Number} offset\n   * @param {Number} total\n   * @param {Number} countTH\n   */\n  function RowFilter(offset, total, countTH) {\n    _classCallCheck(this, RowFilter);\n\n    this.offset = offset;\n    this.total = total;\n    this.countTH = countTH;\n  }\n\n  /**\n   * @param index\n   * @returns {Number}\n   */\n\n\n  _createClass(RowFilter, [{\n    key: \"offsetted\",\n    value: function offsetted(index) {\n      return index + this.offset;\n    }\n\n    /**\n     * @param index\n     * @returns {Number}\n     */\n\n  }, {\n    key: \"unOffsetted\",\n    value: function unOffsetted(index) {\n      return index - this.offset;\n    }\n\n    /**\n     * @param index\n     * @returns {Number}\n     */\n\n  }, {\n    key: \"renderedToSource\",\n    value: function renderedToSource(index) {\n      return this.offsetted(index);\n    }\n\n    /**\n     * @param index\n     * @returns {Number}\n     */\n\n  }, {\n    key: \"sourceToRendered\",\n    value: function sourceToRendered(index) {\n      return this.unOffsetted(index);\n    }\n\n    /**\n     * @param index\n     * @returns {Number}\n     */\n\n  }, {\n    key: \"offsettedTH\",\n    value: function offsettedTH(index) {\n      return index - this.countTH;\n    }\n\n    /**\n     * @param index\n     * @returns {Number}\n     */\n\n  }, {\n    key: \"unOffsettedTH\",\n    value: function unOffsettedTH(index) {\n      return index + this.countTH;\n    }\n\n    /**\n     * @param index\n     * @returns {Number}\n     */\n\n  }, {\n    key: \"visibleColHeadedRowToSourceRow\",\n    value: function visibleColHeadedRowToSourceRow(index) {\n      return this.renderedToSource(this.offsettedTH(index));\n    }\n\n    /**\n     * @param index\n     * @returns {Number}\n     */\n\n  }, {\n    key: \"sourceRowToVisibleColHeadedRow\",\n    value: function sourceRowToVisibleColHeadedRow(index) {\n      return this.unOffsettedTH(this.sourceToRendered(index));\n    }\n  }]);\n\n  return RowFilter;\n}();\n\nexports.default = RowFilter;\n\n/***/ }),\n/* 181 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _element = __webpack_require__(0);\n\nvar _object = __webpack_require__(1);\n\nvar _string = __webpack_require__(33);\n\nvar _event = __webpack_require__(182);\n\nvar _event2 = _interopRequireDefault(_event);\n\nvar _overlays = __webpack_require__(183);\n\nvar _overlays2 = _interopRequireDefault(_overlays);\n\nvar _scroll = __webpack_require__(184);\n\nvar _scroll2 = _interopRequireDefault(_scroll);\n\nvar _settings = __webpack_require__(185);\n\nvar _settings2 = _interopRequireDefault(_settings);\n\nvar _table = __webpack_require__(186);\n\nvar _table2 = _interopRequireDefault(_table);\n\nvar _viewport = __webpack_require__(188);\n\nvar _viewport2 = _interopRequireDefault(_viewport);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * @class Walkontable\n */\nvar Walkontable = function () {\n  /**\n   * @param {Object} settings\n   */\n  function Walkontable(settings) {\n    _classCallCheck(this, Walkontable);\n\n    var originalHeaders = [];\n\n    // this is the namespace for global events\n    this.guid = 'wt_' + (0, _string.randomString)();\n\n    // bootstrap from settings\n    if (settings.cloneSource) {\n      this.cloneSource = settings.cloneSource;\n      this.cloneOverlay = settings.cloneOverlay;\n      this.wtSettings = settings.cloneSource.wtSettings;\n      this.wtTable = new _table2.default(this, settings.table, settings.wtRootElement);\n      this.wtScroll = new _scroll2.default(this);\n      this.wtViewport = settings.cloneSource.wtViewport;\n      this.wtEvent = new _event2.default(this);\n      this.selections = this.cloneSource.selections;\n    } else {\n      this.wtSettings = new _settings2.default(this, settings);\n      this.wtTable = new _table2.default(this, settings.table);\n      this.wtScroll = new _scroll2.default(this);\n      this.wtViewport = new _viewport2.default(this);\n      this.wtEvent = new _event2.default(this);\n      this.selections = this.getSetting('selections');\n      this.wtOverlays = new _overlays2.default(this);\n      this.exportSettingsAsClassNames();\n    }\n\n    // find original headers\n    if (this.wtTable.THEAD.childNodes.length && this.wtTable.THEAD.childNodes[0].childNodes.length) {\n      for (var c = 0, clen = this.wtTable.THEAD.childNodes[0].childNodes.length; c < clen; c++) {\n        originalHeaders.push(this.wtTable.THEAD.childNodes[0].childNodes[c].innerHTML);\n      }\n      if (!this.getSetting('columnHeaders').length) {\n        this.update('columnHeaders', [function (column, TH) {\n          (0, _element.fastInnerText)(TH, originalHeaders[column]);\n        }]);\n      }\n    }\n    this.drawn = false;\n    this.drawInterrupted = false;\n  }\n\n  /**\n   * Force rerender of Walkontable\n   *\n   * @param {Boolean} [fastDraw=false] When `true`, try to refresh only the positions of borders without rerendering\n   *                                   the data. It will only work if Table.draw() does not force\n   *                                   rendering anyway\n   * @returns {Walkontable}\n   */\n\n\n  _createClass(Walkontable, [{\n    key: 'draw',\n    value: function draw() {\n      var fastDraw = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n      this.drawInterrupted = false;\n\n      if (!fastDraw && !(0, _element.isVisible)(this.wtTable.TABLE)) {\n        // draw interrupted because TABLE is not visible\n        this.drawInterrupted = true;\n      } else {\n        this.wtTable.draw(fastDraw);\n      }\n\n      return this;\n    }\n\n    /**\n     * Returns the TD at coords. If topmost is set to true, returns TD from the topmost overlay layer,\n     * if not set or set to false, returns TD from the master table.\n     *\n     * @param {CellCoords} coords\n     * @param {Boolean} [topmost=false]\n     * @returns {Object}\n     */\n\n  }, {\n    key: 'getCell',\n    value: function getCell(coords) {\n      var topmost = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n      if (!topmost) {\n        return this.wtTable.getCell(coords);\n      }\n\n      var totalRows = this.wtSettings.getSetting('totalRows');\n      var fixedRowsTop = this.wtSettings.getSetting('fixedRowsTop');\n      var fixedRowsBottom = this.wtSettings.getSetting('fixedRowsBottom');\n      var fixedColumns = this.wtSettings.getSetting('fixedColumnsLeft');\n\n      if (coords.row < fixedRowsTop && coords.col < fixedColumns) {\n        return this.wtOverlays.topLeftCornerOverlay.clone.wtTable.getCell(coords);\n      } else if (coords.row < fixedRowsTop) {\n        return this.wtOverlays.topOverlay.clone.wtTable.getCell(coords);\n      } else if (coords.col < fixedColumns && coords.row >= totalRows - fixedRowsBottom) {\n        if (this.wtOverlays.bottomLeftCornerOverlay && this.wtOverlays.bottomLeftCornerOverlay.clone) {\n          return this.wtOverlays.bottomLeftCornerOverlay.clone.wtTable.getCell(coords);\n        }\n      } else if (coords.col < fixedColumns) {\n        return this.wtOverlays.leftOverlay.clone.wtTable.getCell(coords);\n      } else if (coords.row < totalRows && coords.row > totalRows - fixedRowsBottom) {\n        if (this.wtOverlays.bottomOverlay && this.wtOverlays.bottomOverlay.clone) {\n          return this.wtOverlays.bottomOverlay.clone.wtTable.getCell(coords);\n        }\n      }\n\n      return this.wtTable.getCell(coords);\n    }\n\n    /**\n     * @param {Object} settings\n     * @param {*} value\n     * @returns {Walkontable}\n     */\n\n  }, {\n    key: 'update',\n    value: function update(settings, value) {\n      return this.wtSettings.update(settings, value);\n    }\n\n    /**\n     * Scrolls the viewport to a cell (rerenders if needed).\n     *\n     * @param {CellCoords} coords\n     * @param {Boolean} [snapToTop]\n     * @param {Boolean} [snapToRight]\n     * @param {Boolean} [snapToBottom]\n     * @param {Boolean} [snapToLeft]\n     * @returns {Boolean}\n     */\n\n  }, {\n    key: 'scrollViewport',\n    value: function scrollViewport(coords, snapToTop, snapToRight, snapToBottom, snapToLeft) {\n      return this.wtScroll.scrollViewport(coords, snapToTop, snapToRight, snapToBottom, snapToLeft);\n    }\n\n    /**\n     * Scrolls the viewport to a column (rerenders if needed).\n     *\n     * @param {Number} column Visual column index.\n     * @param {Boolean} [snapToRight]\n     * @param {Boolean} [snapToLeft]\n     * @returns {Boolean}\n     */\n\n  }, {\n    key: 'scrollViewportHorizontally',\n    value: function scrollViewportHorizontally(column, snapToRight, snapToLeft) {\n      return this.wtScroll.scrollViewportHorizontally(column, snapToRight, snapToLeft);\n    }\n\n    /**\n     * Scrolls the viewport to a row (rerenders if needed).\n     *\n     * @param {Number} row Visual row index.\n     * @param {Boolean} [snapToTop]\n     * @param {Boolean} [snapToBottom]\n     * @returns {Boolean}\n     */\n\n  }, {\n    key: 'scrollViewportVertically',\n    value: function scrollViewportVertically(row, snapToTop, snapToBottom) {\n      return this.wtScroll.scrollViewportVertically(row, snapToTop, snapToBottom);\n    }\n\n    /**\n     * @returns {Array}\n     */\n\n  }, {\n    key: 'getViewport',\n    value: function getViewport() {\n      return [this.wtTable.getFirstVisibleRow(), this.wtTable.getFirstVisibleColumn(), this.wtTable.getLastVisibleRow(), this.wtTable.getLastVisibleColumn()];\n    }\n\n    /**\n     * Get overlay name\n     *\n     * @returns {String}\n     */\n\n  }, {\n    key: 'getOverlayName',\n    value: function getOverlayName() {\n      return this.cloneOverlay ? this.cloneOverlay.type : 'master';\n    }\n\n    /**\n     * Check overlay type of this Walkontable instance.\n     *\n     * @param {String} name Clone type @see {Overlay.CLONE_TYPES}.\n     * @returns {Boolean}\n     */\n\n  }, {\n    key: 'isOverlayName',\n    value: function isOverlayName(name) {\n      if (this.cloneOverlay) {\n        return this.cloneOverlay.type === name;\n      }\n\n      return false;\n    }\n\n    /**\n     * Export settings as class names added to the parent element of the table.\n     */\n\n  }, {\n    key: 'exportSettingsAsClassNames',\n    value: function exportSettingsAsClassNames() {\n      var _this = this;\n\n      var toExport = {\n        rowHeaders: ['array'],\n        columnHeaders: ['array']\n      };\n      var allClassNames = [];\n      var newClassNames = [];\n\n      (0, _object.objectEach)(toExport, function (optionType, key) {\n        if (optionType.indexOf('array') > -1 && _this.getSetting(key).length) {\n          newClassNames.push('ht' + (0, _string.toUpperCaseFirst)(key));\n        }\n        allClassNames.push('ht' + (0, _string.toUpperCaseFirst)(key));\n      });\n      (0, _element.removeClass)(this.wtTable.wtRootElement.parentNode, allClassNames);\n      (0, _element.addClass)(this.wtTable.wtRootElement.parentNode, newClassNames);\n    }\n\n    /**\n     * Get/Set Walkontable instance setting\n     *\n     * @param {String} key\n     * @param {*} [param1]\n     * @param {*} [param2]\n     * @param {*} [param3]\n     * @param {*} [param4]\n     * @returns {*}\n     */\n\n  }, {\n    key: 'getSetting',\n    value: function getSetting(key, param1, param2, param3, param4) {\n      // this is faster than .apply - https://github.com/handsontable/handsontable/wiki/JavaScript-&-DOM-performance-tips\n      return this.wtSettings.getSetting(key, param1, param2, param3, param4);\n    }\n\n    /**\n     * Checks if setting exists\n     *\n     * @param {String} key\n     * @returns {Boolean}\n     */\n\n  }, {\n    key: 'hasSetting',\n    value: function hasSetting(key) {\n      return this.wtSettings.has(key);\n    }\n\n    /**\n     * Destroy instance\n     */\n\n  }, {\n    key: 'destroy',\n    value: function destroy() {\n      this.wtOverlays.destroy();\n      this.wtEvent.destroy();\n    }\n  }]);\n\n  return Walkontable;\n}();\n\nexports.default = Walkontable;\n\n/***/ }),\n/* 182 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _element = __webpack_require__(0);\n\nvar _function = __webpack_require__(43);\n\nvar _browser = __webpack_require__(39);\n\nvar _eventManager = __webpack_require__(5);\n\nvar _eventManager2 = _interopRequireDefault(_eventManager);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n *\n */\nfunction Event(instance) {\n  var that = this;\n  var eventManager = new _eventManager2.default(instance);\n  var selectedCellBeforeTouchEnd = void 0;\n\n  this.instance = instance;\n\n  var dblClickOrigin = [null, null];\n  this.dblClickTimeout = [null, null];\n\n  var onMouseDown = function onMouseDown(event) {\n    var activeElement = document.activeElement;\n    var getParentNode = (0, _function.partial)(_element.getParent, event.realTarget);\n    var realTarget = event.realTarget;\n\n    // ignore focusable element from mouse down processing (https://github.com/handsontable/handsontable/issues/3555)\n    if (realTarget === activeElement || getParentNode(0) === activeElement || getParentNode(1) === activeElement) {\n      return;\n    }\n\n    var cell = that.parentCell(realTarget);\n\n    if ((0, _element.hasClass)(realTarget, 'corner')) {\n      that.instance.getSetting('onCellCornerMouseDown', event, realTarget);\n    } else if (cell.TD) {\n      if (that.instance.hasSetting('onCellMouseDown')) {\n        that.instance.getSetting('onCellMouseDown', event, cell.coords, cell.TD, that.instance);\n      }\n    }\n\n    if (event.button !== 2) {\n      // if not right mouse button\n      if (cell.TD) {\n        dblClickOrigin[0] = cell.TD;\n        clearTimeout(that.dblClickTimeout[0]);\n        that.dblClickTimeout[0] = setTimeout(function () {\n          dblClickOrigin[0] = null;\n        }, 1000);\n      }\n    }\n  };\n\n  var onContextMenu = function onContextMenu(event) {\n    if (that.instance.hasSetting('onCellContextMenu')) {\n      var cell = that.parentCell(event.realTarget);\n\n      if (cell.TD) {\n        that.instance.getSetting('onCellContextMenu', event, cell.coords, cell.TD, that.instance);\n      }\n    }\n  };\n\n  var onTouchMove = function onTouchMove() {\n    that.instance.touchMoving = true;\n  };\n\n  var onTouchStart = function onTouchStart(event) {\n    eventManager.addEventListener(this, 'touchmove', onTouchMove);\n\n    // Prevent cell selection when scrolling with touch event - not the best solution performance-wise\n    that.checkIfTouchMove = setTimeout(function () {\n      if (that.instance.touchMoving === true) {\n        that.instance.touchMoving = void 0;\n\n        eventManager.removeEventListener('touchmove', onTouchMove, false);\n      }\n\n      onMouseDown(event);\n    }, 30);\n  };\n\n  var onMouseOver = function onMouseOver(event) {\n    var table = void 0;\n    var td = void 0;\n    var mainWOT = void 0;\n\n    if (that.instance.hasSetting('onCellMouseOver')) {\n      table = that.instance.wtTable.TABLE;\n      td = (0, _element.closestDown)(event.realTarget, ['TD', 'TH'], table);\n      mainWOT = that.instance.cloneSource || that.instance;\n\n      if (td && td !== mainWOT.lastMouseOver && (0, _element.isChildOf)(td, table)) {\n        mainWOT.lastMouseOver = td;\n\n        that.instance.getSetting('onCellMouseOver', event, that.instance.wtTable.getCoords(td), td, that.instance);\n      }\n    }\n  };\n\n  var onMouseOut = function onMouseOut(event) {\n    var table = void 0;\n    var lastTD = void 0;\n    var nextTD = void 0;\n\n    if (that.instance.hasSetting('onCellMouseOut')) {\n      table = that.instance.wtTable.TABLE;\n      lastTD = (0, _element.closestDown)(event.realTarget, ['TD', 'TH'], table);\n      nextTD = (0, _element.closestDown)(event.relatedTarget, ['TD', 'TH'], table);\n\n      if (lastTD && lastTD !== nextTD && (0, _element.isChildOf)(lastTD, table)) {\n        that.instance.getSetting('onCellMouseOut', event, that.instance.wtTable.getCoords(lastTD), lastTD, that.instance);\n      }\n    }\n  };\n\n  var onMouseUp = function onMouseUp(event) {\n    if (event.button !== 2) {\n      // if not right mouse button\n      var cell = that.parentCell(event.realTarget);\n\n      if (cell.TD === dblClickOrigin[0] && cell.TD === dblClickOrigin[1]) {\n        if ((0, _element.hasClass)(event.realTarget, 'corner')) {\n          that.instance.getSetting('onCellCornerDblClick', event, cell.coords, cell.TD, that.instance);\n        } else {\n          that.instance.getSetting('onCellDblClick', event, cell.coords, cell.TD, that.instance);\n        }\n\n        dblClickOrigin[0] = null;\n        dblClickOrigin[1] = null;\n      } else if (cell.TD === dblClickOrigin[0]) {\n        that.instance.getSetting('onCellMouseUp', event, cell.coords, cell.TD, that.instance);\n\n        dblClickOrigin[1] = cell.TD;\n        clearTimeout(that.dblClickTimeout[1]);\n        that.dblClickTimeout[1] = setTimeout(function () {\n          dblClickOrigin[1] = null;\n        }, 500);\n      } else if (cell.TD && that.instance.hasSetting('onCellMouseUp')) {\n        that.instance.getSetting('onCellMouseUp', event, cell.coords, cell.TD, that.instance);\n      }\n    }\n  };\n\n  var selectedCellWasTouched = function selectedCellWasTouched(touchTarget) {\n    var cellUnderFinger = that.parentCell(touchTarget);\n    var coordsOfCellUnderFinger = cellUnderFinger.coords;\n\n    if (selectedCellBeforeTouchEnd && coordsOfCellUnderFinger) {\n      var _ref = [coordsOfCellUnderFinger.row, selectedCellBeforeTouchEnd.from.row],\n          rowTouched = _ref[0],\n          rowSelected = _ref[1];\n      var _ref2 = [coordsOfCellUnderFinger.col, selectedCellBeforeTouchEnd.from.col],\n          colTouched = _ref2[0],\n          colSelected = _ref2[1];\n\n\n      return rowTouched === rowSelected && colTouched === colSelected;\n    }\n\n    return false;\n  };\n\n  var onTouchEnd = function onTouchEnd(event) {\n    var excludeTags = ['A', 'BUTTON', 'INPUT'];\n    var target = event.target;\n\n    // touched link which was placed inside a cell (a cell with DOM `a` element) WILL NOT trigger the below function calls\n    // and as consequence will behave as standard (open the link).\n    if (selectedCellWasTouched(target) === false || excludeTags.includes(target.tagName) === false) {\n      event.preventDefault();\n      onMouseUp(event);\n    }\n  };\n\n  eventManager.addEventListener(this.instance.wtTable.holder, 'mousedown', onMouseDown);\n  eventManager.addEventListener(this.instance.wtTable.holder, 'contextmenu', onContextMenu);\n  eventManager.addEventListener(this.instance.wtTable.TABLE, 'mouseover', onMouseOver);\n  eventManager.addEventListener(this.instance.wtTable.TABLE, 'mouseout', onMouseOut);\n  eventManager.addEventListener(this.instance.wtTable.holder, 'mouseup', onMouseUp);\n\n  // check if full HOT instance, or detached WOT AND run on mobile device\n  if (this.instance.wtTable.holder.parentNode.parentNode && (0, _browser.isMobileBrowser)() && !that.instance.wtTable.isWorkingOnClone()) {\n    var classSelector = '.' + this.instance.wtTable.holder.parentNode.className.split(' ').join('.');\n\n    eventManager.addEventListener(this.instance.wtTable.holder, 'touchstart', function (event) {\n      selectedCellBeforeTouchEnd = instance.selections.getCell().cellRange;\n\n      that.instance.touchApplied = true;\n      if ((0, _element.isChildOf)(event.target, classSelector)) {\n        onTouchStart.call(event.target, event);\n      }\n    });\n    eventManager.addEventListener(this.instance.wtTable.holder, 'touchend', function (event) {\n      that.instance.touchApplied = false;\n      if ((0, _element.isChildOf)(event.target, classSelector)) {\n        onTouchEnd.call(event.target, event);\n      }\n    });\n\n    if (!that.instance.momentumScrolling) {\n      that.instance.momentumScrolling = {};\n    }\n    eventManager.addEventListener(this.instance.wtTable.holder, 'scroll', function () {\n      clearTimeout(that.instance.momentumScrolling._timeout);\n\n      if (!that.instance.momentumScrolling.ongoing) {\n        that.instance.getSetting('onBeforeTouchScroll');\n      }\n      that.instance.momentumScrolling.ongoing = true;\n\n      that.instance.momentumScrolling._timeout = setTimeout(function () {\n        if (!that.instance.touchApplied) {\n          that.instance.momentumScrolling.ongoing = false;\n\n          that.instance.getSetting('onAfterMomentumScroll');\n        }\n      }, 200);\n    });\n  }\n\n  eventManager.addEventListener(window, 'resize', function () {\n    if (that.instance.getSetting('stretchH') !== 'none') {\n      that.instance.draw();\n    }\n  });\n\n  this.destroy = function () {\n    clearTimeout(this.dblClickTimeout[0]);\n    clearTimeout(this.dblClickTimeout[1]);\n\n    eventManager.destroy();\n  };\n}\n\nEvent.prototype.parentCell = function (elem) {\n  var cell = {};\n  var TABLE = this.instance.wtTable.TABLE;\n  var TD = (0, _element.closestDown)(elem, ['TD', 'TH'], TABLE);\n\n  if (TD) {\n    cell.coords = this.instance.wtTable.getCoords(TD);\n    cell.TD = TD;\n  } else if ((0, _element.hasClass)(elem, 'wtBorder') && (0, _element.hasClass)(elem, 'current')) {\n    cell.coords = this.instance.selections.getCell().cellRange.highlight;\n    cell.TD = this.instance.wtTable.getCell(cell.coords);\n  } else if ((0, _element.hasClass)(elem, 'wtBorder') && (0, _element.hasClass)(elem, 'area')) {\n    if (this.instance.selections.createOrGetArea().cellRange) {\n      cell.coords = this.instance.selections.createOrGetArea().cellRange.to;\n      cell.TD = this.instance.wtTable.getCell(cell.coords);\n    }\n  }\n\n  return cell;\n};\n\nexports.default = Event;\n\n/***/ }),\n/* 183 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _element = __webpack_require__(0);\n\nvar _array = __webpack_require__(2);\n\nvar _unicode = __webpack_require__(21);\n\nvar _browser = __webpack_require__(39);\n\nvar _eventManager = __webpack_require__(5);\n\nvar _eventManager2 = _interopRequireDefault(_eventManager);\n\nvar _base = __webpack_require__(41);\n\nvar _base2 = _interopRequireDefault(_base);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * @class Overlays\n */\nvar Overlays = function () {\n  /**\n   * @param {Walkontable} wotInstance\n   */\n  function Overlays(wotInstance) {\n    _classCallCheck(this, Overlays);\n\n    /**\n     * Sometimes `line-height` might be set to 'normal'. In that case, a default `font-size` should be multiplied by roughly 1.2.\n     * https://developer.mozilla.org/pl/docs/Web/CSS/line-height#Values\n     */\n    var BODY_LINE_HEIGHT = parseInt(getComputedStyle(document.body).lineHeight, 10);\n    var FALLBACK_BODY_LINE_HEIGHT = parseInt(getComputedStyle(document.body).fontSize, 10) * 1.2;\n\n    this.wot = wotInstance;\n\n    // legacy support\n    this.instance = this.wot;\n    this.eventManager = new _eventManager2.default(this.wot);\n\n    this.wot.update('scrollbarWidth', (0, _element.getScrollbarWidth)());\n    this.wot.update('scrollbarHeight', (0, _element.getScrollbarWidth)());\n\n    this.scrollableElement = (0, _element.getScrollableElement)(this.wot.wtTable.TABLE);\n\n    this.prepareOverlays();\n\n    this.destroyed = false;\n    this.keyPressed = false;\n    this.spreaderLastSize = {\n      width: null,\n      height: null\n    };\n    this.overlayScrollPositions = {\n      master: {\n        top: 0,\n        left: 0\n      },\n      top: {\n        top: null,\n        left: 0\n      },\n      bottom: {\n        top: null,\n        left: 0\n      },\n      left: {\n        top: 0,\n        left: null\n      }\n    };\n\n    this.pendingScrollCallbacks = {\n      master: {\n        top: 0,\n        left: 0\n      },\n      top: {\n        left: 0\n      },\n      bottom: {\n        left: 0\n      },\n      left: {\n        top: 0\n      }\n    };\n\n    this.verticalScrolling = false;\n    this.horizontalScrolling = false;\n    this.delegatedScrollCallback = false;\n\n    this.registeredListeners = [];\n\n    this.browserLineHeight = BODY_LINE_HEIGHT || FALLBACK_BODY_LINE_HEIGHT;\n\n    this.registerListeners();\n  }\n\n  /**\n   * Prepare overlays based on user settings.\n   *\n   * @returns {Boolean} Returns `true` if changes applied to overlay needs scroll synchronization.\n   */\n\n\n  _createClass(Overlays, [{\n    key: 'prepareOverlays',\n    value: function prepareOverlays() {\n      var syncScroll = false;\n\n      if (this.topOverlay) {\n        syncScroll = this.topOverlay.updateStateOfRendering() || syncScroll;\n      } else {\n        this.topOverlay = _base2.default.createOverlay(_base2.default.CLONE_TOP, this.wot);\n      }\n\n      if (!_base2.default.hasOverlay(_base2.default.CLONE_BOTTOM)) {\n        this.bottomOverlay = {\n          needFullRender: false,\n          updateStateOfRendering: function updateStateOfRendering() {\n            return false;\n          }\n        };\n      }\n      if (!_base2.default.hasOverlay(_base2.default.CLONE_BOTTOM_LEFT_CORNER)) {\n        this.bottomLeftCornerOverlay = {\n          needFullRender: false,\n          updateStateOfRendering: function updateStateOfRendering() {\n            return false;\n          }\n        };\n      }\n\n      if (this.bottomOverlay) {\n        syncScroll = this.bottomOverlay.updateStateOfRendering() || syncScroll;\n      } else {\n        this.bottomOverlay = _base2.default.createOverlay(_base2.default.CLONE_BOTTOM, this.wot);\n      }\n\n      if (this.leftOverlay) {\n        syncScroll = this.leftOverlay.updateStateOfRendering() || syncScroll;\n      } else {\n        this.leftOverlay = _base2.default.createOverlay(_base2.default.CLONE_LEFT, this.wot);\n      }\n\n      if (this.topOverlay.needFullRender && this.leftOverlay.needFullRender) {\n        if (this.topLeftCornerOverlay) {\n          syncScroll = this.topLeftCornerOverlay.updateStateOfRendering() || syncScroll;\n        } else {\n          this.topLeftCornerOverlay = _base2.default.createOverlay(_base2.default.CLONE_TOP_LEFT_CORNER, this.wot);\n        }\n      }\n\n      if (this.bottomOverlay.needFullRender && this.leftOverlay.needFullRender) {\n        if (this.bottomLeftCornerOverlay) {\n          syncScroll = this.bottomLeftCornerOverlay.updateStateOfRendering() || syncScroll;\n        } else {\n          this.bottomLeftCornerOverlay = _base2.default.createOverlay(_base2.default.CLONE_BOTTOM_LEFT_CORNER, this.wot);\n        }\n      }\n\n      if (this.wot.getSetting('debug') && !this.debug) {\n        this.debug = _base2.default.createOverlay(_base2.default.CLONE_DEBUG, this.wot);\n      }\n\n      return syncScroll;\n    }\n\n    /**\n     * Refresh and redraw table\n     */\n\n  }, {\n    key: 'refreshAll',\n    value: function refreshAll() {\n      if (!this.wot.drawn) {\n        return;\n      }\n      if (!this.wot.wtTable.holder.parentNode) {\n        // Walkontable was detached from DOM, but this handler was not removed\n        this.destroy();\n\n        return;\n      }\n      this.wot.draw(true);\n\n      if (this.verticalScrolling) {\n        this.leftOverlay.onScroll();\n      }\n\n      if (this.horizontalScrolling) {\n        this.topOverlay.onScroll();\n      }\n\n      this.verticalScrolling = false;\n      this.horizontalScrolling = false;\n    }\n\n    /**\n     * Register all necessary event listeners.\n     */\n\n  }, {\n    key: 'registerListeners',\n    value: function registerListeners() {\n      var _this = this;\n\n      var topOverlayScrollable = this.topOverlay.mainTableScrollableElement;\n      var leftOverlayScrollable = this.leftOverlay.mainTableScrollableElement;\n\n      var listenersToRegister = [];\n      listenersToRegister.push([document.documentElement, 'keydown', function (event) {\n        return _this.onKeyDown(event);\n      }]);\n      listenersToRegister.push([document.documentElement, 'keyup', function () {\n        return _this.onKeyUp();\n      }]);\n      listenersToRegister.push([document, 'visibilitychange', function () {\n        return _this.onKeyUp();\n      }]);\n      listenersToRegister.push([topOverlayScrollable, 'scroll', function (event) {\n        return _this.onTableScroll(event);\n      }]);\n\n      if (topOverlayScrollable !== leftOverlayScrollable) {\n        listenersToRegister.push([leftOverlayScrollable, 'scroll', function (event) {\n          return _this.onTableScroll(event);\n        }]);\n      }\n\n      var isHighPixelRatio = window.devicePixelRatio && window.devicePixelRatio > 1;\n\n      if (isHighPixelRatio || !(0, _browser.isChrome)()) {\n        listenersToRegister.push([this.instance.wtTable.wtRootElement.parentNode, 'wheel', function (event) {\n          return _this.onCloneWheel(event);\n        }]);\n      } else {\n        if (this.topOverlay.needFullRender) {\n          listenersToRegister.push([this.topOverlay.clone.wtTable.holder, 'wheel', function (event) {\n            return _this.onCloneWheel(event);\n          }]);\n        }\n\n        if (this.bottomOverlay.needFullRender) {\n          listenersToRegister.push([this.bottomOverlay.clone.wtTable.holder, 'wheel', function (event) {\n            return _this.onCloneWheel(event);\n          }]);\n        }\n\n        if (this.leftOverlay.needFullRender) {\n          listenersToRegister.push([this.leftOverlay.clone.wtTable.holder, 'wheel', function (event) {\n            return _this.onCloneWheel(event);\n          }]);\n        }\n\n        if (this.topLeftCornerOverlay && this.topLeftCornerOverlay.needFullRender) {\n          listenersToRegister.push([this.topLeftCornerOverlay.clone.wtTable.holder, 'wheel', function (event) {\n            return _this.onCloneWheel(event);\n          }]);\n        }\n\n        if (this.bottomLeftCornerOverlay && this.bottomLeftCornerOverlay.needFullRender) {\n          listenersToRegister.push([this.bottomLeftCornerOverlay.clone.wtTable.holder, 'wheel', function (event) {\n            return _this.onCloneWheel(event);\n          }]);\n        }\n      }\n\n      if (this.topOverlay.trimmingContainer !== window && this.leftOverlay.trimmingContainer !== window) {\n        // This is necessary?\n        // eventManager.addEventListener(window, 'scroll', (event) => this.refreshAll(event));\n        listenersToRegister.push([window, 'wheel', function (event) {\n          var overlay = void 0;\n          var deltaY = event.wheelDeltaY || event.deltaY;\n          var deltaX = event.wheelDeltaX || event.deltaX;\n\n          if (_this.topOverlay.clone.wtTable.holder.contains(event.realTarget)) {\n            overlay = 'top';\n          } else if (_this.bottomOverlay.clone && _this.bottomOverlay.clone.wtTable.holder.contains(event.realTarget)) {\n            overlay = 'bottom';\n          } else if (_this.leftOverlay.clone.wtTable.holder.contains(event.realTarget)) {\n            overlay = 'left';\n          } else if (_this.topLeftCornerOverlay && _this.topLeftCornerOverlay.clone && _this.topLeftCornerOverlay.clone.wtTable.holder.contains(event.realTarget)) {\n            overlay = 'topLeft';\n          } else if (_this.bottomLeftCornerOverlay && _this.bottomLeftCornerOverlay.clone && _this.bottomLeftCornerOverlay.clone.wtTable.holder.contains(event.realTarget)) {\n            overlay = 'bottomLeft';\n          }\n\n          if (overlay === 'top' && deltaY !== 0 || overlay === 'left' && deltaX !== 0 || overlay === 'bottom' && deltaY !== 0 || (overlay === 'topLeft' || overlay === 'bottomLeft') && (deltaY !== 0 || deltaX !== 0)) {\n\n            event.preventDefault();\n          }\n        }]);\n      }\n\n      while (listenersToRegister.length) {\n        var listener = listenersToRegister.pop();\n        this.eventManager.addEventListener(listener[0], listener[1], listener[2]);\n\n        this.registeredListeners.push(listener);\n      }\n    }\n\n    /**\n     * Deregister all previously registered listeners.\n     */\n\n  }, {\n    key: 'deregisterListeners',\n    value: function deregisterListeners() {\n      while (this.registeredListeners.length) {\n        var listener = this.registeredListeners.pop();\n        this.eventManager.removeEventListener(listener[0], listener[1], listener[2]);\n      }\n    }\n\n    /**\n     * Scroll listener\n     *\n     * @param {Event} event\n     */\n\n  }, {\n    key: 'onTableScroll',\n    value: function onTableScroll(event) {\n      // There was if statement which controlled flow of this function. It avoided the execution of the next lines\n      // on mobile devices. It was changed. Broader description of this case is included within issue #4856.\n\n      var masterHorizontal = this.leftOverlay.mainTableScrollableElement;\n      var masterVertical = this.topOverlay.mainTableScrollableElement;\n      var target = event.target;\n\n      // For key press, sync only master -> overlay position because while pressing Walkontable.render is triggered\n      // by hot.refreshBorder\n      if (this.keyPressed) {\n        if (masterVertical !== window && target !== window && !event.target.contains(masterVertical) || masterHorizontal !== window && target !== window && !event.target.contains(masterHorizontal)) {\n          return;\n        }\n      }\n\n      this.syncScrollPositions(event);\n    }\n\n    /**\n     * Wheel listener for cloned overlays.\n     *\n     * @param {Event} event\n     */\n\n  }, {\n    key: 'onCloneWheel',\n    value: function onCloneWheel(event) {\n      if (this.scrollableElement !== window) {\n        event.preventDefault();\n      }\n      // There was if statement which controlled flow of this function. It avoided the execution of the next lines\n      // on mobile devices. It was changed. Broader description of this case is included within issue #4856.\n\n      var masterHorizontal = this.leftOverlay.mainTableScrollableElement;\n      var masterVertical = this.topOverlay.mainTableScrollableElement;\n      var target = event.target;\n\n      // For key press, sync only master -> overlay position because while pressing Walkontable.render is triggered\n      // by hot.refreshBorder\n      var shouldNotWheelVertically = masterVertical !== window && target !== window && !event.target.contains(masterVertical);\n      var shouldNotWheelHorizontally = masterHorizontal !== window && target !== window && !event.target.contains(masterHorizontal);\n\n      if (this.keyPressed && (shouldNotWheelVertically || shouldNotWheelHorizontally)) {\n        return;\n      }\n\n      this.translateMouseWheelToScroll(event);\n    }\n\n    /**\n     * Key down listener\n     */\n\n  }, {\n    key: 'onKeyDown',\n    value: function onKeyDown(event) {\n      this.keyPressed = (0, _unicode.isKey)(event.keyCode, 'ARROW_UP|ARROW_RIGHT|ARROW_DOWN|ARROW_LEFT');\n    }\n\n    /**\n     * Key up listener\n     */\n\n  }, {\n    key: 'onKeyUp',\n    value: function onKeyUp() {\n      this.keyPressed = false;\n    }\n\n    /**\n     * Translate wheel event into scroll event and sync scroll overlays position\n     *\n     * @private\n     * @param {Event} event\n     * @returns {Boolean}\n     */\n\n  }, {\n    key: 'translateMouseWheelToScroll',\n    value: function translateMouseWheelToScroll(event) {\n      var deltaY = isNaN(event.deltaY) ? -1 * event.wheelDeltaY : event.deltaY;\n      var deltaX = isNaN(event.deltaX) ? -1 * event.wheelDeltaX : event.deltaX;\n\n      if (event.deltaMode === 1) {\n        deltaX += deltaX * this.browserLineHeight;\n        deltaY += deltaY * this.browserLineHeight;\n      }\n\n      this.scrollVertically(deltaY);\n      this.scrollHorizontally(deltaX);\n\n      return false;\n    }\n  }, {\n    key: 'scrollVertically',\n    value: function scrollVertically(distance) {\n      if (distance === 0) {\n        return 0;\n      }\n      this.scrollableElement.scrollTop += distance;\n    }\n  }, {\n    key: 'scrollHorizontally',\n    value: function scrollHorizontally(distance) {\n      if (distance === 0) {\n        return 0;\n      }\n      this.scrollableElement.scrollLeft += distance;\n    }\n\n    /**\n     * Synchronize scroll position between master table and overlay table.\n     *\n     * @private\n     * @param {Event|Object} event\n     */\n\n  }, {\n    key: 'syncScrollPositions',\n    value: function syncScrollPositions() {\n      if (this.destroyed) {\n        return;\n      }\n\n      var topHolder = this.topOverlay.clone.wtTable.holder;\n      var leftHolder = this.leftOverlay.clone.wtTable.holder;\n\n      var _ref = [this.scrollableElement.scrollLeft, this.scrollableElement.scrollTop],\n          scrollLeft = _ref[0],\n          scrollTop = _ref[1];\n\n\n      this.horizontalScrolling = topHolder.scrollLeft !== scrollLeft;\n      this.verticalScrolling = leftHolder.scrollTop !== scrollTop;\n\n      if (this.horizontalScrolling) {\n        topHolder.scrollLeft = scrollLeft;\n\n        var bottomHolder = this.bottomOverlay.needFullRender ? this.bottomOverlay.clone.wtTable.holder : null;\n\n        if (bottomHolder) {\n          bottomHolder.scrollLeft = scrollLeft;\n        }\n      }\n\n      if (this.verticalScrolling) {\n        leftHolder.scrollTop = scrollTop;\n      }\n\n      this.refreshAll();\n    }\n\n    /**\n     * Synchronize overlay scrollbars with the master scrollbar\n     */\n\n  }, {\n    key: 'syncScrollWithMaster',\n    value: function syncScrollWithMaster() {\n      var master = this.topOverlay.mainTableScrollableElement;\n      var scrollLeft = master.scrollLeft,\n          scrollTop = master.scrollTop;\n\n\n      if (this.topOverlay.needFullRender) {\n        this.topOverlay.clone.wtTable.holder.scrollLeft = scrollLeft;\n      }\n      if (this.bottomOverlay.needFullRender) {\n        this.bottomOverlay.clone.wtTable.holder.scrollLeft = scrollLeft;\n      }\n      if (this.leftOverlay.needFullRender) {\n        this.leftOverlay.clone.wtTable.holder.scrollTop = scrollTop;\n      }\n    }\n\n    /**\n     * Update the main scrollable elements for all the overlays.\n     */\n\n  }, {\n    key: 'updateMainScrollableElements',\n    value: function updateMainScrollableElements() {\n      this.deregisterListeners();\n\n      this.leftOverlay.updateMainScrollableElement();\n      this.topOverlay.updateMainScrollableElement();\n\n      if (this.bottomOverlay.needFullRender) {\n        this.bottomOverlay.updateMainScrollableElement();\n      }\n\n      this.scrollableElement = (0, _element.getScrollableElement)(this.wot.wtTable.TABLE);\n\n      this.registerListeners();\n    }\n\n    /**\n     *\n     */\n\n  }, {\n    key: 'destroy',\n    value: function destroy() {\n      this.eventManager.destroy();\n      this.topOverlay.destroy();\n\n      if (this.bottomOverlay.clone) {\n        this.bottomOverlay.destroy();\n      }\n      this.leftOverlay.destroy();\n\n      if (this.topLeftCornerOverlay) {\n        this.topLeftCornerOverlay.destroy();\n      }\n\n      if (this.bottomLeftCornerOverlay && this.bottomLeftCornerOverlay.clone) {\n        this.bottomLeftCornerOverlay.destroy();\n      }\n\n      if (this.debug) {\n        this.debug.destroy();\n      }\n      this.destroyed = true;\n    }\n\n    /**\n     * @param {Boolean} [fastDraw=false]\n     */\n\n  }, {\n    key: 'refresh',\n    value: function refresh() {\n      var fastDraw = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n      if (this.topOverlay.areElementSizesAdjusted && this.leftOverlay.areElementSizesAdjusted) {\n        var container = this.wot.wtTable.wtRootElement.parentNode || this.wot.wtTable.wtRootElement;\n        var width = container.clientWidth;\n        var height = container.clientHeight;\n\n        if (width !== this.spreaderLastSize.width || height !== this.spreaderLastSize.height) {\n          this.spreaderLastSize.width = width;\n          this.spreaderLastSize.height = height;\n          this.adjustElementsSize();\n        }\n      }\n\n      if (this.bottomOverlay.clone) {\n        this.bottomOverlay.refresh(fastDraw);\n      }\n\n      this.leftOverlay.refresh(fastDraw);\n      this.topOverlay.refresh(fastDraw);\n\n      if (this.topLeftCornerOverlay) {\n        this.topLeftCornerOverlay.refresh(fastDraw);\n      }\n\n      if (this.bottomLeftCornerOverlay && this.bottomLeftCornerOverlay.clone) {\n        this.bottomLeftCornerOverlay.refresh(fastDraw);\n      }\n\n      if (this.debug) {\n        this.debug.refresh(fastDraw);\n      }\n    }\n\n    /**\n     * Adjust overlays elements size and master table size\n     *\n     * @param {Boolean} [force=false]\n     */\n\n  }, {\n    key: 'adjustElementsSize',\n    value: function adjustElementsSize() {\n      var force = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n      var totalColumns = this.wot.getSetting('totalColumns');\n      var totalRows = this.wot.getSetting('totalRows');\n      var headerRowSize = this.wot.wtViewport.getRowHeaderWidth();\n      var headerColumnSize = this.wot.wtViewport.getColumnHeaderHeight();\n      var hiderStyle = this.wot.wtTable.hider.style;\n\n      hiderStyle.width = headerRowSize + this.leftOverlay.sumCellSizes(0, totalColumns) + 'px';\n      hiderStyle.height = headerColumnSize + this.topOverlay.sumCellSizes(0, totalRows) + 1 + 'px';\n\n      this.topOverlay.adjustElementsSize(force);\n      this.leftOverlay.adjustElementsSize(force);\n\n      if (this.bottomOverlay.clone) {\n        this.bottomOverlay.adjustElementsSize(force);\n      }\n    }\n\n    /**\n     *\n     */\n\n  }, {\n    key: 'applyToDOM',\n    value: function applyToDOM() {\n      if (!this.topOverlay.areElementSizesAdjusted || !this.leftOverlay.areElementSizesAdjusted) {\n        this.adjustElementsSize();\n      }\n      this.topOverlay.applyToDOM();\n\n      if (this.bottomOverlay.clone) {\n        this.bottomOverlay.applyToDOM();\n      }\n\n      this.leftOverlay.applyToDOM();\n    }\n\n    /**\n     * Get the parent overlay of the provided element.\n     *\n     * @param {HTMLElement} element\n     * @returns {Object|null}\n     */\n\n  }, {\n    key: 'getParentOverlay',\n    value: function getParentOverlay(element) {\n      if (!element) {\n        return null;\n      }\n\n      var overlays = [this.topOverlay, this.leftOverlay, this.bottomOverlay, this.topLeftCornerOverlay, this.bottomLeftCornerOverlay];\n      var result = null;\n\n      (0, _array.arrayEach)(overlays, function (elem) {\n        if (!elem) {\n          return;\n        }\n\n        if (elem.clone && elem.clone.wtTable.TABLE.contains(element)) {\n          result = elem.clone;\n        }\n      });\n\n      return result;\n    }\n  }]);\n\n  return Overlays;\n}();\n\nexports.default = Overlays;\n\n/***/ }),\n/* 184 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _element = __webpack_require__(0);\n\nvar _number = __webpack_require__(6);\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * @class Scroll\n */\nvar Scroll = function () {\n  /**\n   * @param {Walkontable} wotInstance\n   */\n  function Scroll(wotInstance) {\n    _classCallCheck(this, Scroll);\n\n    this.wot = wotInstance;\n\n    // legacy support\n    this.instance = wotInstance;\n  }\n\n  /**\n   * Scrolls viewport to a cell.\n   *\n   * @param {CellCoords} coords\n   * @param {Boolean} [snapToTop]\n   * @param {Boolean} [snapToRight]\n   * @param {Boolean} [snapToBottom]\n   * @param {Boolean} [snapToLeft]\n   * @returns {Boolean}\n   */\n\n\n  _createClass(Scroll, [{\n    key: 'scrollViewport',\n    value: function scrollViewport(coords, snapToTop, snapToRight, snapToBottom, snapToLeft) {\n      var scrolledHorizontally = this.scrollViewportHorizontally(coords.col, snapToRight, snapToLeft);\n      var scrolledVertically = this.scrollViewportVertically(coords.row, snapToTop, snapToBottom);\n\n      return scrolledHorizontally || scrolledVertically;\n    }\n\n    /**\n     * Scrolls viewport to a column.\n     *\n     * @param {Number} column Visual column index.\n     * @param {Boolean} [snapToRight]\n     * @param {Boolean} [snapToLeft]\n     * @returns {Boolean}\n     */\n\n  }, {\n    key: 'scrollViewportHorizontally',\n    value: function scrollViewportHorizontally(column, snapToRight, snapToLeft) {\n      if (!this.wot.drawn) {\n        return false;\n      }\n\n      var _getVariables2 = this._getVariables(),\n          fixedColumnsLeft = _getVariables2.fixedColumnsLeft,\n          leftOverlay = _getVariables2.leftOverlay,\n          totalColumns = _getVariables2.totalColumns;\n\n      var result = false;\n\n      if (column >= 0 && column <= Math.max(totalColumns - 1, 0)) {\n        if (column >= fixedColumnsLeft && (column < this.getFirstVisibleColumn() || snapToLeft)) {\n          result = leftOverlay.scrollTo(column);\n        } else if (column > this.getLastVisibleColumn() || snapToRight) {\n          result = leftOverlay.scrollTo(column, true);\n        }\n      }\n\n      return result;\n    }\n\n    /**\n     * Scrolls viewport to a row.\n     *\n     * @param {Number} row Visual row index.\n     * @param {Boolean} [snapToTop]\n     * @param {Boolean} [snapToBottom]\n     * @returns {Boolean}\n     */\n\n  }, {\n    key: 'scrollViewportVertically',\n    value: function scrollViewportVertically(row, snapToTop, snapToBottom) {\n      if (!this.wot.drawn) {\n        return false;\n      }\n\n      var _getVariables3 = this._getVariables(),\n          fixedRowsBottom = _getVariables3.fixedRowsBottom,\n          fixedRowsTop = _getVariables3.fixedRowsTop,\n          topOverlay = _getVariables3.topOverlay,\n          totalRows = _getVariables3.totalRows;\n\n      var result = false;\n\n      if (row >= 0 && row <= Math.max(totalRows - 1, 0)) {\n        if (row >= fixedRowsTop && (row < this.getFirstVisibleRow() || snapToTop)) {\n          result = topOverlay.scrollTo(row);\n        } else if (row > this.getLastVisibleRow() && row < totalRows - fixedRowsBottom || snapToBottom) {\n          result = topOverlay.scrollTo(row, true);\n        }\n      }\n\n      return result;\n    }\n\n    /**\n     * Get first visible row based on virtual dom and how table is visible in browser window viewport.\n     *\n     * @returns {Number}\n     */\n\n  }, {\n    key: 'getFirstVisibleRow',\n    value: function getFirstVisibleRow() {\n      var _getVariables4 = this._getVariables(),\n          topOverlay = _getVariables4.topOverlay,\n          wtTable = _getVariables4.wtTable,\n          wtViewport = _getVariables4.wtViewport,\n          totalRows = _getVariables4.totalRows,\n          fixedRowsTop = _getVariables4.fixedRowsTop;\n\n      var firstVisibleRow = wtTable.getFirstVisibleRow();\n\n      if (topOverlay.mainTableScrollableElement === window) {\n        var rootElementOffset = (0, _element.offset)(wtTable.wtRootElement);\n        var totalTableHeight = (0, _element.innerHeight)(wtTable.hider);\n        var windowHeight = (0, _element.innerHeight)(window);\n        var windowScrollTop = (0, _element.getScrollTop)(window);\n\n        // Only calculate firstVisibleRow when table didn't filled (from up) whole viewport space\n        if (rootElementOffset.top + totalTableHeight - windowHeight <= windowScrollTop) {\n          var rowsHeight = wtViewport.getColumnHeaderHeight();\n\n          rowsHeight += topOverlay.sumCellSizes(0, fixedRowsTop);\n\n          (0, _number.rangeEachReverse)(totalRows, 1, function (row) {\n            rowsHeight += topOverlay.sumCellSizes(row - 1, row);\n\n            if (rootElementOffset.top + totalTableHeight - rowsHeight <= windowScrollTop) {\n              // Return physical row + 1\n              firstVisibleRow = row;\n\n              return false;\n            }\n          });\n        }\n      }\n\n      return firstVisibleRow;\n    }\n\n    /**\n     * Get last visible row based on virtual dom and how table is visible in browser window viewport.\n     *\n     * @returns {Number}\n     */\n\n  }, {\n    key: 'getLastVisibleRow',\n    value: function getLastVisibleRow() {\n      var _getVariables5 = this._getVariables(),\n          topOverlay = _getVariables5.topOverlay,\n          wtTable = _getVariables5.wtTable,\n          wtViewport = _getVariables5.wtViewport,\n          totalRows = _getVariables5.totalRows;\n\n      var lastVisibleRow = wtTable.getLastVisibleRow();\n\n      if (topOverlay.mainTableScrollableElement === window) {\n        var rootElementOffset = (0, _element.offset)(wtTable.wtRootElement);\n        var windowHeight = (0, _element.innerHeight)(window);\n        var windowScrollTop = (0, _element.getScrollTop)(window);\n\n        // Only calculate lastVisibleRow when table didn't filled (from bottom) whole viewport space\n        if (rootElementOffset.top > windowScrollTop) {\n          var rowsHeight = wtViewport.getColumnHeaderHeight();\n\n          (0, _number.rangeEach)(1, totalRows, function (row) {\n            rowsHeight += topOverlay.sumCellSizes(row - 1, row);\n\n            if (rootElementOffset.top + rowsHeight - windowScrollTop >= windowHeight) {\n              // Return physical row - 1 (-2 because rangeEach gives row index + 1 - sumCellSizes requirements)\n              lastVisibleRow = row - 2;\n\n              return false;\n            }\n          });\n        }\n      }\n\n      return lastVisibleRow;\n    }\n\n    /**\n     * Get first visible column based on virtual dom and how table is visible in browser window viewport.\n     *\n     * @returns {Number}\n     */\n\n  }, {\n    key: 'getFirstVisibleColumn',\n    value: function getFirstVisibleColumn() {\n      var _getVariables6 = this._getVariables(),\n          leftOverlay = _getVariables6.leftOverlay,\n          wtTable = _getVariables6.wtTable,\n          wtViewport = _getVariables6.wtViewport,\n          totalColumns = _getVariables6.totalColumns;\n\n      var firstVisibleColumn = wtTable.getFirstVisibleColumn();\n\n      if (leftOverlay.mainTableScrollableElement === window) {\n        var rootElementOffset = (0, _element.offset)(wtTable.wtRootElement);\n        var totalTableWidth = (0, _element.innerWidth)(wtTable.hider);\n        var windowWidth = (0, _element.innerWidth)(window);\n        var windowScrollLeft = (0, _element.getScrollLeft)(window);\n\n        // Only calculate firstVisibleColumn when table didn't filled (from left) whole viewport space\n        if (rootElementOffset.left + totalTableWidth - windowWidth <= windowScrollLeft) {\n          var columnsWidth = wtViewport.getRowHeaderWidth();\n\n          (0, _number.rangeEachReverse)(totalColumns, 1, function (column) {\n            columnsWidth += leftOverlay.sumCellSizes(column - 1, column);\n\n            if (rootElementOffset.left + totalTableWidth - columnsWidth <= windowScrollLeft) {\n              // Return physical column + 1\n              firstVisibleColumn = column;\n\n              return false;\n            }\n          });\n        }\n      }\n\n      return firstVisibleColumn;\n    }\n\n    /**\n     * Get last visible column based on virtual dom and how table is visible in browser window viewport.\n     *\n     * @returns {Number}\n     */\n\n  }, {\n    key: 'getLastVisibleColumn',\n    value: function getLastVisibleColumn() {\n      var _getVariables7 = this._getVariables(),\n          leftOverlay = _getVariables7.leftOverlay,\n          wtTable = _getVariables7.wtTable,\n          wtViewport = _getVariables7.wtViewport,\n          totalColumns = _getVariables7.totalColumns;\n\n      var lastVisibleColumn = wtTable.getLastVisibleColumn();\n\n      if (leftOverlay.mainTableScrollableElement === window) {\n        var rootElementOffset = (0, _element.offset)(wtTable.wtRootElement);\n        var windowWidth = (0, _element.innerWidth)(window);\n        var windowScrollLeft = (0, _element.getScrollLeft)(window);\n\n        // Only calculate lastVisibleColumn when table didn't filled (from right) whole viewport space\n        if (rootElementOffset.left > windowScrollLeft) {\n          var columnsWidth = wtViewport.getRowHeaderWidth();\n\n          (0, _number.rangeEach)(1, totalColumns, function (column) {\n            columnsWidth += leftOverlay.sumCellSizes(column - 1, column);\n\n            if (rootElementOffset.left + columnsWidth - windowScrollLeft >= windowWidth) {\n              // Return physical column - 1 (-2 because rangeEach gives column index + 1 - sumCellSizes requirements)\n              lastVisibleColumn = column - 2;\n\n              return false;\n            }\n          });\n        }\n      }\n\n      return lastVisibleColumn;\n    }\n\n    /**\n     * Returns collection of variables used to rows and columns visibility calculations.\n     *\n     * @returns {Object}\n     * @private\n     */\n\n  }, {\n    key: '_getVariables',\n    value: function _getVariables() {\n      var wot = this.wot;\n      var topOverlay = wot.wtOverlays.topOverlay;\n      var leftOverlay = wot.wtOverlays.leftOverlay;\n      var wtTable = wot.wtTable;\n      var wtViewport = wot.wtViewport;\n      var totalRows = wot.getSetting('totalRows');\n      var totalColumns = wot.getSetting('totalColumns');\n      var fixedRowsTop = wot.getSetting('fixedRowsTop');\n      var fixedRowsBottom = wot.getSetting('fixedRowsBottom');\n      var fixedColumnsLeft = wot.getSetting('fixedColumnsLeft');\n\n      return {\n        topOverlay: topOverlay,\n        leftOverlay: leftOverlay,\n        wtTable: wtTable,\n        wtViewport: wtViewport,\n        totalRows: totalRows,\n        totalColumns: totalColumns,\n        fixedRowsTop: fixedRowsTop,\n        fixedRowsBottom: fixedRowsBottom,\n        fixedColumnsLeft: fixedColumnsLeft\n      };\n    }\n  }]);\n\n  return Scroll;\n}();\n\nexports.default = Scroll;\n\n/***/ }),\n/* 185 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _element = __webpack_require__(0);\n\nvar _object = __webpack_require__(1);\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * @class Settings\n */\nvar Settings = function () {\n  /**\n   * @param {Walkontable} wotInstance\n   * @param {Object} settings\n   */\n  function Settings(wotInstance, settings) {\n    var _this = this;\n\n    _classCallCheck(this, Settings);\n\n    this.wot = wotInstance;\n\n    // legacy support\n    this.instance = wotInstance;\n\n    // default settings. void 0 means it is required, null means it can be empty\n    this.defaults = {\n      table: void 0,\n      debug: false, // shows WalkontableDebugOverlay\n\n      // presentation mode\n      externalRowCalculator: false,\n      stretchH: 'none', // values: all, last, none\n      currentRowClassName: null,\n      currentColumnClassName: null,\n      preventOverflow: function preventOverflow() {\n        return false;\n      },\n\n\n      // data source\n      data: void 0,\n      freezeOverlays: false,\n      fixedColumnsLeft: 0,\n      fixedRowsTop: 0,\n      fixedRowsBottom: 0,\n      minSpareRows: 0,\n\n      // this must be array of functions: [function (row, TH) {}]\n      rowHeaders: function rowHeaders() {\n        return [];\n      },\n\n\n      // this must be array of functions: [function (column, TH) {}]\n      columnHeaders: function columnHeaders() {\n        return [];\n      },\n\n      totalRows: void 0,\n      totalColumns: void 0,\n      cellRenderer: function cellRenderer(row, column, TD) {\n        var cellData = _this.getSetting('data', row, column);\n\n        (0, _element.fastInnerText)(TD, cellData === void 0 || cellData === null ? '' : cellData);\n      },\n\n      // columnWidth: 50,\n      columnWidth: function columnWidth() {\n        // return undefined means use default size for the rendered cell content\n      },\n      rowHeight: function rowHeight() {\n        // return undefined means use default size for the rendered cell content\n      },\n\n      defaultRowHeight: 23,\n      defaultColumnWidth: 50,\n      selections: null,\n      hideBorderOnMouseDownOver: false,\n      viewportRowCalculatorOverride: null,\n      viewportColumnCalculatorOverride: null,\n\n      // callbacks\n      onCellMouseDown: null,\n      onCellContextMenu: null,\n      onCellMouseOver: null,\n      onCellMouseOut: null,\n      onCellMouseUp: null,\n\n      //    onCellMouseOut: null,\n      onCellDblClick: null,\n      onCellCornerMouseDown: null,\n      onCellCornerDblClick: null,\n      beforeDraw: null,\n      onDraw: null,\n      onBeforeRemoveCellClassNames: null,\n      onAfterDrawSelection: null,\n      onBeforeDrawBorders: null,\n      onScrollVertically: null,\n      onScrollHorizontally: null,\n      onBeforeTouchScroll: null,\n      onAfterMomentumScroll: null,\n      onBeforeStretchingColumnWidth: function onBeforeStretchingColumnWidth(width) {\n        return width;\n      },\n      onModifyRowHeaderWidth: null,\n      onModifyGetCellCoords: null,\n\n      // constants\n      scrollbarWidth: 10,\n      scrollbarHeight: 10,\n\n      renderAllRows: false,\n      groups: false,\n      rowHeaderWidth: null,\n      columnHeaderHeight: null,\n      headerClassName: null\n    };\n\n    // reference to settings\n    this.settings = {};\n\n    (0, _object.objectEach)(this.defaults, function (value, key) {\n      if (settings[key] !== void 0) {\n        _this.settings[key] = settings[key];\n      } else if (value === void 0) {\n        throw new Error('A required setting \"' + key + '\" was not provided');\n      } else {\n        _this.settings[key] = value;\n      }\n    });\n  }\n\n  /**\n   * Update settings\n   *\n   * @param {Object} settings\n   * @param {*} value\n   * @returns {Walkontable}\n   */\n\n\n  _createClass(Settings, [{\n    key: 'update',\n    value: function update(settings, value) {\n      var _this2 = this;\n\n      if (value === void 0) {\n        // settings is object\n        (0, _object.objectEach)(settings, function (settingValue, key) {\n          _this2.settings[key] = settingValue;\n        });\n      } else {\n        // if value is defined then settings is the key\n        this.settings[settings] = value;\n      }\n      return this.wot;\n    }\n\n    /**\n     * Get setting by name\n     *\n     * @param {String} key\n     * @param {*} param1\n     * @param {*} param2\n     * @param {*} param3\n     * @param {*} param4\n     * @returns {*}\n     */\n\n  }, {\n    key: 'getSetting',\n    value: function getSetting(key, param1, param2, param3, param4) {\n      if (typeof this.settings[key] === 'function') {\n        // this is faster than .apply - https://github.com/handsontable/handsontable/wiki/JavaScript-&-DOM-performance-tips\n        return this.settings[key](param1, param2, param3, param4);\n      } else if (param1 !== void 0 && Array.isArray(this.settings[key])) {\n        // perhaps this can be removed, it is only used in tests\n        return this.settings[key][param1];\n      }\n\n      return this.settings[key];\n    }\n\n    /**\n     * Checks if setting exists\n     *\n     * @param {Boolean} key\n     * @returns {Boolean}\n     */\n\n  }, {\n    key: 'has',\n    value: function has(key) {\n      return !!this.settings[key];\n    }\n  }]);\n\n  return Settings;\n}();\n\nexports.default = Settings;\n\n/***/ }),\n/* 186 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\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 && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _element = __webpack_require__(0);\n\nvar _function = __webpack_require__(43);\n\nvar _coords = __webpack_require__(56);\n\nvar _coords2 = _interopRequireDefault(_coords);\n\nvar _column = __webpack_require__(179);\n\nvar _column2 = _interopRequireDefault(_column);\n\nvar _row = __webpack_require__(180);\n\nvar _row2 = _interopRequireDefault(_row);\n\nvar _tableRenderer = __webpack_require__(187);\n\nvar _tableRenderer2 = _interopRequireDefault(_tableRenderer);\n\nvar _base = __webpack_require__(41);\n\nvar _base2 = _interopRequireDefault(_base);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n *\n */\nvar Table = function () {\n  /**\n   * @param {Walkontable} wotInstance\n   * @param {HTMLTableElement} table\n   */\n  function Table(wotInstance, table) {\n    var _this = this;\n\n    _classCallCheck(this, Table);\n\n    this.wot = wotInstance;\n\n    // legacy support\n    this.instance = this.wot;\n    this.TABLE = table;\n    this.TBODY = null;\n    this.THEAD = null;\n    this.COLGROUP = null;\n    this.tableOffset = 0;\n    this.holderOffset = 0;\n\n    (0, _element.removeTextNodes)(this.TABLE);\n\n    this.spreader = this.createSpreader(this.TABLE);\n    this.hider = this.createHider(this.spreader);\n    this.holder = this.createHolder(this.hider);\n\n    this.wtRootElement = this.holder.parentNode;\n    this.alignOverlaysWithTrimmingContainer();\n    this.fixTableDomTree();\n\n    this.colgroupChildrenLength = this.COLGROUP.childNodes.length;\n    this.theadChildrenLength = this.THEAD.firstChild ? this.THEAD.firstChild.childNodes.length : 0;\n    this.tbodyChildrenLength = this.TBODY.childNodes.length;\n\n    this.rowFilter = null;\n    this.columnFilter = null;\n    this.correctHeaderWidth = false;\n\n    var origRowHeaderWidth = this.wot.wtSettings.settings.rowHeaderWidth;\n\n    // Fix for jumping row headers (https://github.com/handsontable/handsontable/issues/3850)\n    this.wot.wtSettings.settings.rowHeaderWidth = function () {\n      return _this._modifyRowHeaderWidth(origRowHeaderWidth);\n    };\n  }\n\n  /**\n   *\n   */\n\n\n  _createClass(Table, [{\n    key: 'fixTableDomTree',\n    value: function fixTableDomTree() {\n      this.TBODY = this.TABLE.querySelector('tbody');\n\n      if (!this.TBODY) {\n        this.TBODY = document.createElement('tbody');\n        this.TABLE.appendChild(this.TBODY);\n      }\n      this.THEAD = this.TABLE.querySelector('thead');\n\n      if (!this.THEAD) {\n        this.THEAD = document.createElement('thead');\n        this.TABLE.insertBefore(this.THEAD, this.TBODY);\n      }\n      this.COLGROUP = this.TABLE.querySelector('colgroup');\n\n      if (!this.COLGROUP) {\n        this.COLGROUP = document.createElement('colgroup');\n        this.TABLE.insertBefore(this.COLGROUP, this.THEAD);\n      }\n\n      if (this.wot.getSetting('columnHeaders').length && !this.THEAD.childNodes.length) {\n        this.THEAD.appendChild(document.createElement('TR'));\n      }\n    }\n\n    /**\n     * @param table\n     * @returns {HTMLElement}\n     */\n\n  }, {\n    key: 'createSpreader',\n    value: function createSpreader(table) {\n      var parent = table.parentNode;\n      var spreader = void 0;\n\n      if (!parent || parent.nodeType !== 1 || !(0, _element.hasClass)(parent, 'wtHolder')) {\n        spreader = document.createElement('div');\n        spreader.className = 'wtSpreader';\n\n        if (parent) {\n          // if TABLE is detached (e.g. in Jasmine test), it has no parentNode so we cannot attach holder to it\n          parent.insertBefore(spreader, table);\n        }\n        spreader.appendChild(table);\n      }\n      spreader.style.position = 'relative';\n\n      return spreader;\n    }\n\n    /**\n     * @param spreader\n     * @returns {HTMLElement}\n     */\n\n  }, {\n    key: 'createHider',\n    value: function createHider(spreader) {\n      var parent = spreader.parentNode;\n      var hider = void 0;\n\n      if (!parent || parent.nodeType !== 1 || !(0, _element.hasClass)(parent, 'wtHolder')) {\n        hider = document.createElement('div');\n        hider.className = 'wtHider';\n\n        if (parent) {\n          // if TABLE is detached (e.g. in Jasmine test), it has no parentNode so we cannot attach holder to it\n          parent.insertBefore(hider, spreader);\n        }\n        hider.appendChild(spreader);\n      }\n\n      return hider;\n    }\n\n    /**\n     *\n     * @param hider\n     * @returns {HTMLElement}\n     */\n\n  }, {\n    key: 'createHolder',\n    value: function createHolder(hider) {\n      var parent = hider.parentNode;\n      var holder = void 0;\n\n      if (!parent || parent.nodeType !== 1 || !(0, _element.hasClass)(parent, 'wtHolder')) {\n        holder = document.createElement('div');\n        holder.style.position = 'relative';\n        holder.className = 'wtHolder';\n\n        if (parent) {\n          // if TABLE is detached (e.g. in Jasmine test), it has no parentNode so we cannot attach holder to it\n          parent.insertBefore(holder, hider);\n        }\n        if (!this.isWorkingOnClone()) {\n          holder.parentNode.className += 'ht_master handsontable';\n        }\n        holder.appendChild(hider);\n      }\n\n      return holder;\n    }\n  }, {\n    key: 'alignOverlaysWithTrimmingContainer',\n    value: function alignOverlaysWithTrimmingContainer() {\n      var trimmingElement = (0, _element.getTrimmingContainer)(this.wtRootElement);\n\n      if (!this.isWorkingOnClone()) {\n        this.holder.parentNode.style.position = 'relative';\n\n        if (trimmingElement === window) {\n          var preventOverflow = this.wot.getSetting('preventOverflow');\n\n          if (!preventOverflow) {\n            this.holder.style.overflow = 'visible';\n            this.wtRootElement.style.overflow = 'visible';\n          }\n        } else {\n          this.holder.style.width = (0, _element.getStyle)(trimmingElement, 'width');\n          this.holder.style.height = (0, _element.getStyle)(trimmingElement, 'height');\n          this.holder.style.overflow = '';\n        }\n      }\n    }\n  }, {\n    key: 'isWorkingOnClone',\n    value: function isWorkingOnClone() {\n      return !!this.wot.cloneSource;\n    }\n\n    /**\n     * Redraws the table\n     *\n     * @param {Boolean} fastDraw If TRUE, will try to avoid full redraw and only update the border positions. If FALSE or UNDEFINED, will perform a full redraw\n     * @returns {Table}\n     */\n\n  }, {\n    key: 'draw',\n    value: function draw(fastDraw) {\n      var _wot = this.wot,\n          wtOverlays = _wot.wtOverlays,\n          wtViewport = _wot.wtViewport;\n\n      var totalRows = this.instance.getSetting('totalRows');\n      var rowHeaders = this.wot.getSetting('rowHeaders').length;\n      var columnHeaders = this.wot.getSetting('columnHeaders').length;\n      var syncScroll = false;\n      var runFastDraw = fastDraw;\n\n      if (!this.isWorkingOnClone()) {\n        this.holderOffset = (0, _element.offset)(this.holder);\n        runFastDraw = wtViewport.createRenderCalculators(runFastDraw);\n\n        if (rowHeaders && !this.wot.getSetting('fixedColumnsLeft')) {\n          var leftScrollPos = wtOverlays.leftOverlay.getScrollPosition();\n          var previousState = this.correctHeaderWidth;\n\n          this.correctHeaderWidth = leftScrollPos > 0;\n\n          if (previousState !== this.correctHeaderWidth) {\n            runFastDraw = false;\n          }\n        }\n      }\n\n      if (!this.isWorkingOnClone()) {\n        syncScroll = wtOverlays.prepareOverlays();\n      }\n\n      if (runFastDraw) {\n        if (!this.isWorkingOnClone()) {\n          // in case we only scrolled without redraw, update visible rows information in oldRowsCalculator\n          wtViewport.createVisibleCalculators();\n        }\n        if (wtOverlays) {\n          wtOverlays.refresh(true);\n        }\n      } else {\n        if (this.isWorkingOnClone()) {\n          this.tableOffset = this.wot.cloneSource.wtTable.tableOffset;\n        } else {\n          this.tableOffset = (0, _element.offset)(this.TABLE);\n        }\n        var startRow = void 0;\n\n        if (_base2.default.isOverlayTypeOf(this.wot.cloneOverlay, _base2.default.CLONE_DEBUG) || _base2.default.isOverlayTypeOf(this.wot.cloneOverlay, _base2.default.CLONE_TOP) || _base2.default.isOverlayTypeOf(this.wot.cloneOverlay, _base2.default.CLONE_TOP_LEFT_CORNER)) {\n          startRow = 0;\n        } else if (_base2.default.isOverlayTypeOf(this.instance.cloneOverlay, _base2.default.CLONE_BOTTOM) || _base2.default.isOverlayTypeOf(this.instance.cloneOverlay, _base2.default.CLONE_BOTTOM_LEFT_CORNER)) {\n          startRow = Math.max(totalRows - this.wot.getSetting('fixedRowsBottom'), 0);\n        } else {\n          startRow = wtViewport.rowsRenderCalculator.startRow;\n        }\n        var startColumn = void 0;\n\n        if (_base2.default.isOverlayTypeOf(this.wot.cloneOverlay, _base2.default.CLONE_DEBUG) || _base2.default.isOverlayTypeOf(this.wot.cloneOverlay, _base2.default.CLONE_LEFT) || _base2.default.isOverlayTypeOf(this.wot.cloneOverlay, _base2.default.CLONE_TOP_LEFT_CORNER) || _base2.default.isOverlayTypeOf(this.wot.cloneOverlay, _base2.default.CLONE_BOTTOM_LEFT_CORNER)) {\n          startColumn = 0;\n        } else {\n          startColumn = wtViewport.columnsRenderCalculator.startColumn;\n        }\n        this.rowFilter = new _row2.default(startRow, totalRows, columnHeaders);\n        this.columnFilter = new _column2.default(startColumn, this.wot.getSetting('totalColumns'), rowHeaders);\n\n        this.alignOverlaysWithTrimmingContainer();\n        this._doDraw(); // creates calculator after draw\n      }\n      this.refreshSelections(runFastDraw);\n\n      if (!this.isWorkingOnClone()) {\n        wtOverlays.topOverlay.resetFixedPosition();\n\n        if (wtOverlays.bottomOverlay.clone) {\n          wtOverlays.bottomOverlay.resetFixedPosition();\n        }\n\n        wtOverlays.leftOverlay.resetFixedPosition();\n\n        if (wtOverlays.topLeftCornerOverlay) {\n          wtOverlays.topLeftCornerOverlay.resetFixedPosition();\n        }\n\n        if (wtOverlays.bottomLeftCornerOverlay && wtOverlays.bottomLeftCornerOverlay.clone) {\n          wtOverlays.bottomLeftCornerOverlay.resetFixedPosition();\n        }\n      }\n      if (syncScroll) {\n        wtOverlays.syncScrollWithMaster();\n      }\n      this.wot.drawn = true;\n\n      return this;\n    }\n  }, {\n    key: '_doDraw',\n    value: function _doDraw() {\n      var wtRenderer = new _tableRenderer2.default(this);\n\n      wtRenderer.render();\n    }\n  }, {\n    key: 'removeClassFromCells',\n    value: function removeClassFromCells(className) {\n      var nodes = this.TABLE.querySelectorAll('.' + className);\n\n      for (var i = 0, len = nodes.length; i < len; i++) {\n        (0, _element.removeClass)(nodes[i], className);\n      }\n    }\n\n    /**\n     * Refresh the table selection by re-rendering Selection instances connected with that instance.\n     *\n     * @param {Boolean} fastDraw If fast drawing is enabled than additionally className clearing is applied.\n     */\n\n  }, {\n    key: 'refreshSelections',\n    value: function refreshSelections(fastDraw) {\n      if (!this.wot.selections) {\n        return;\n      }\n      var highlights = Array.from(this.wot.selections);\n      var len = highlights.length;\n\n      if (fastDraw) {\n        var classesToRemove = [];\n\n        for (var i = 0; i < len; i++) {\n          var _highlights$i$setting = highlights[i].settings,\n              highlightHeaderClassName = _highlights$i$setting.highlightHeaderClassName,\n              highlightRowClassName = _highlights$i$setting.highlightRowClassName,\n              highlightColumnClassName = _highlights$i$setting.highlightColumnClassName;\n\n          var classNames = highlights[i].classNames;\n          var classNamesLength = classNames.length;\n\n          for (var j = 0; j < classNamesLength; j++) {\n            if (!classesToRemove.includes(classNames[j])) {\n              classesToRemove.push(classNames[j]);\n            }\n          }\n\n          if (highlightHeaderClassName && !classesToRemove.includes(highlightHeaderClassName)) {\n            classesToRemove.push(highlightHeaderClassName);\n          }\n          if (highlightRowClassName && !classesToRemove.includes(highlightRowClassName)) {\n            classesToRemove.push(highlightRowClassName);\n          }\n          if (highlightColumnClassName && !classesToRemove.includes(highlightColumnClassName)) {\n            classesToRemove.push(highlightColumnClassName);\n          }\n        }\n\n        var additionalClassesToRemove = this.wot.getSetting('onBeforeRemoveCellClassNames');\n\n        if (Array.isArray(additionalClassesToRemove)) {\n          for (var _i = 0; _i < additionalClassesToRemove.length; _i++) {\n            classesToRemove.push(additionalClassesToRemove[_i]);\n          }\n        }\n\n        var classesToRemoveLength = classesToRemove.length;\n\n        for (var _i2 = 0; _i2 < classesToRemoveLength; _i2++) {\n          // there was no rerender, so we need to remove classNames by ourselves\n          this.removeClassFromCells(classesToRemove[_i2]);\n        }\n      }\n\n      for (var _i3 = 0; _i3 < len; _i3++) {\n        highlights[_i3].draw(this.wot, fastDraw);\n      }\n    }\n\n    /**\n     * Get cell element at coords.\n     *\n     * @param {CellCoords} coords\n     * @returns {HTMLElement|Number} HTMLElement on success or Number one of the exit codes on error:\n     *  -1 row before viewport\n     *  -2 row after viewport\n     */\n\n  }, {\n    key: 'getCell',\n    value: function getCell(coords) {\n      var row = coords.row;\n      var column = coords.col;\n      var hookResult = this.wot.getSetting('onModifyGetCellCoords', row, column);\n\n      if (hookResult && Array.isArray(hookResult)) {\n        var _hookResult = _slicedToArray(hookResult, 2);\n\n        row = _hookResult[0];\n        column = _hookResult[1];\n      }\n\n      if (this.isRowBeforeRenderedRows(row)) {\n        // row before rendered rows\n        return -1;\n      } else if (this.isRowAfterRenderedRows(row)) {\n        // row after rendered rows\n        return -2;\n      }\n\n      var TR = this.TBODY.childNodes[this.rowFilter.sourceToRendered(row)];\n\n      if (TR) {\n        return TR.childNodes[this.columnFilter.sourceColumnToVisibleRowHeadedColumn(column)];\n      }\n    }\n\n    /**\n     * getColumnHeader\n     *\n     * @param {Number} col Column index\n     * @param {Number} [level=0] Header level (0 = most distant to the table)\n     * @returns {Object} HTMLElement on success or undefined on error\n     */\n\n  }, {\n    key: 'getColumnHeader',\n    value: function getColumnHeader(col) {\n      var level = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n      var TR = this.THEAD.childNodes[level];\n\n      if (TR) {\n        return TR.childNodes[this.columnFilter.sourceColumnToVisibleRowHeadedColumn(col)];\n      }\n    }\n\n    /**\n     * getRowHeader\n     *\n     * @param {Number} row Row index\n     * @returns {HTMLElement} HTMLElement on success or Number one of the exit codes on error: `null table doesn't have row headers`\n     */\n\n  }, {\n    key: 'getRowHeader',\n    value: function getRowHeader(row) {\n      if (this.columnFilter.sourceColumnToVisibleRowHeadedColumn(0) === 0) {\n        return null;\n      }\n      var TR = this.TBODY.childNodes[this.rowFilter.sourceToRendered(row)];\n\n      if (TR) {\n        return TR.childNodes[0];\n      }\n    }\n\n    /**\n     * Returns cell coords object for a given TD (or a child element of a TD element).\n     *\n     * @param {HTMLTableCellElement} TD A cell DOM element (or a child of one).\n     * @returns {CellCoords|null} The coordinates of the provided TD element (or the closest TD element) or null, if the provided element is not applicable.\n     */\n\n  }, {\n    key: 'getCoords',\n    value: function getCoords(TD) {\n      var cellElement = TD;\n\n      if (cellElement.nodeName !== 'TD' && cellElement.nodeName !== 'TH') {\n        cellElement = (0, _element.closest)(cellElement, ['TD', 'TH']);\n      }\n\n      if (cellElement === null) {\n        return null;\n      }\n\n      var TR = cellElement.parentNode;\n      var CONTAINER = TR.parentNode;\n      var row = (0, _element.index)(TR);\n      var col = cellElement.cellIndex;\n\n      if ((0, _element.overlayContainsElement)(_base2.default.CLONE_TOP_LEFT_CORNER, cellElement) || (0, _element.overlayContainsElement)(_base2.default.CLONE_TOP, cellElement)) {\n        if (CONTAINER.nodeName === 'THEAD') {\n          row -= CONTAINER.childNodes.length;\n        }\n      } else if (CONTAINER === this.THEAD) {\n        row = this.rowFilter.visibleColHeadedRowToSourceRow(row);\n      } else {\n        row = this.rowFilter.renderedToSource(row);\n      }\n\n      if ((0, _element.overlayContainsElement)(_base2.default.CLONE_TOP_LEFT_CORNER, cellElement) || (0, _element.overlayContainsElement)(_base2.default.CLONE_LEFT, cellElement)) {\n        col = this.columnFilter.offsettedTH(col);\n      } else {\n        col = this.columnFilter.visibleRowHeadedColumnToSourceColumn(col);\n      }\n\n      return new _coords2.default(row, col);\n    }\n  }, {\n    key: 'getTrForRow',\n    value: function getTrForRow(row) {\n      return this.TBODY.childNodes[this.rowFilter.sourceToRendered(row)];\n    }\n  }, {\n    key: 'getFirstRenderedRow',\n    value: function getFirstRenderedRow() {\n      return this.wot.wtViewport.rowsRenderCalculator.startRow;\n    }\n  }, {\n    key: 'getFirstVisibleRow',\n    value: function getFirstVisibleRow() {\n      return this.wot.wtViewport.rowsVisibleCalculator.startRow;\n    }\n  }, {\n    key: 'getFirstRenderedColumn',\n    value: function getFirstRenderedColumn() {\n      return this.wot.wtViewport.columnsRenderCalculator.startColumn;\n    }\n\n    /**\n     * @returns {Number} Returns -1 if no row is visible\n     */\n\n  }, {\n    key: 'getFirstVisibleColumn',\n    value: function getFirstVisibleColumn() {\n      return this.wot.wtViewport.columnsVisibleCalculator.startColumn;\n    }\n\n    /**\n     * @returns {Number} Returns -1 if no row is visible\n     */\n\n  }, {\n    key: 'getLastRenderedRow',\n    value: function getLastRenderedRow() {\n      return this.wot.wtViewport.rowsRenderCalculator.endRow;\n    }\n  }, {\n    key: 'getLastVisibleRow',\n    value: function getLastVisibleRow() {\n      return this.wot.wtViewport.rowsVisibleCalculator.endRow;\n    }\n  }, {\n    key: 'getLastRenderedColumn',\n    value: function getLastRenderedColumn() {\n      return this.wot.wtViewport.columnsRenderCalculator.endColumn;\n    }\n\n    /**\n     * @returns {Number} Returns -1 if no column is visible\n     */\n\n  }, {\n    key: 'getLastVisibleColumn',\n    value: function getLastVisibleColumn() {\n      return this.wot.wtViewport.columnsVisibleCalculator.endColumn;\n    }\n  }, {\n    key: 'isRowBeforeRenderedRows',\n    value: function isRowBeforeRenderedRows(row) {\n      return this.rowFilter && this.rowFilter.sourceToRendered(row) < 0 && row >= 0;\n    }\n  }, {\n    key: 'isRowAfterViewport',\n    value: function isRowAfterViewport(row) {\n      return this.rowFilter && this.rowFilter.sourceToRendered(row) > this.getLastVisibleRow();\n    }\n  }, {\n    key: 'isRowAfterRenderedRows',\n    value: function isRowAfterRenderedRows(row) {\n      return this.rowFilter && this.rowFilter.sourceToRendered(row) > this.getLastRenderedRow();\n    }\n  }, {\n    key: 'isColumnBeforeViewport',\n    value: function isColumnBeforeViewport(column) {\n      return this.columnFilter && this.columnFilter.sourceToRendered(column) < 0 && column >= 0;\n    }\n  }, {\n    key: 'isColumnAfterViewport',\n    value: function isColumnAfterViewport(column) {\n      return this.columnFilter && this.columnFilter.sourceToRendered(column) > this.getLastVisibleColumn();\n    }\n  }, {\n    key: 'isLastRowFullyVisible',\n    value: function isLastRowFullyVisible() {\n      return this.getLastVisibleRow() === this.getLastRenderedRow();\n    }\n  }, {\n    key: 'isLastColumnFullyVisible',\n    value: function isLastColumnFullyVisible() {\n      return this.getLastVisibleColumn() === this.getLastRenderedColumn();\n    }\n  }, {\n    key: 'getRenderedColumnsCount',\n    value: function getRenderedColumnsCount() {\n      var columnsCount = this.wot.wtViewport.columnsRenderCalculator.count;\n      var totalColumns = this.wot.getSetting('totalColumns');\n\n      if (this.wot.isOverlayName(_base2.default.CLONE_DEBUG)) {\n        columnsCount = totalColumns;\n      } else if (this.wot.isOverlayName(_base2.default.CLONE_LEFT) || this.wot.isOverlayName(_base2.default.CLONE_TOP_LEFT_CORNER) || this.wot.isOverlayName(_base2.default.CLONE_BOTTOM_LEFT_CORNER)) {\n        return Math.min(this.wot.getSetting('fixedColumnsLeft'), totalColumns);\n      }\n\n      return columnsCount;\n    }\n  }, {\n    key: 'getRenderedRowsCount',\n    value: function getRenderedRowsCount() {\n      var rowsCount = this.wot.wtViewport.rowsRenderCalculator.count;\n      var totalRows = this.wot.getSetting('totalRows');\n\n      if (this.wot.isOverlayName(_base2.default.CLONE_DEBUG)) {\n        rowsCount = totalRows;\n      } else if (this.wot.isOverlayName(_base2.default.CLONE_TOP) || this.wot.isOverlayName(_base2.default.CLONE_TOP_LEFT_CORNER)) {\n        rowsCount = Math.min(this.wot.getSetting('fixedRowsTop'), totalRows);\n      } else if (this.wot.isOverlayName(_base2.default.CLONE_BOTTOM) || this.wot.isOverlayName(_base2.default.CLONE_BOTTOM_LEFT_CORNER)) {\n        rowsCount = Math.min(this.wot.getSetting('fixedRowsBottom'), totalRows);\n      }\n\n      return rowsCount;\n    }\n  }, {\n    key: 'getVisibleRowsCount',\n    value: function getVisibleRowsCount() {\n      return this.wot.wtViewport.rowsVisibleCalculator.count;\n    }\n  }, {\n    key: 'allRowsInViewport',\n    value: function allRowsInViewport() {\n      return this.wot.getSetting('totalRows') === this.getVisibleRowsCount();\n    }\n\n    /**\n     * Checks if any of the row's cells content exceeds its initial height, and if so, returns the oversized height\n     *\n     * @param {Number} sourceRow\n     * @returns {Number}\n     */\n\n  }, {\n    key: 'getRowHeight',\n    value: function getRowHeight(sourceRow) {\n      var height = this.wot.wtSettings.settings.rowHeight(sourceRow);\n      var oversizedHeight = this.wot.wtViewport.oversizedRows[sourceRow];\n\n      if (oversizedHeight !== void 0) {\n        height = height === void 0 ? oversizedHeight : Math.max(height, oversizedHeight);\n      }\n\n      return height;\n    }\n  }, {\n    key: 'getColumnHeaderHeight',\n    value: function getColumnHeaderHeight(level) {\n      var height = this.wot.wtSettings.settings.defaultRowHeight;\n      var oversizedHeight = this.wot.wtViewport.oversizedColumnHeaders[level];\n\n      if (oversizedHeight !== void 0) {\n        height = height ? Math.max(height, oversizedHeight) : oversizedHeight;\n      }\n\n      return height;\n    }\n  }, {\n    key: 'getVisibleColumnsCount',\n    value: function getVisibleColumnsCount() {\n      return this.wot.wtViewport.columnsVisibleCalculator.count;\n    }\n  }, {\n    key: 'allColumnsInViewport',\n    value: function allColumnsInViewport() {\n      return this.wot.getSetting('totalColumns') === this.getVisibleColumnsCount();\n    }\n  }, {\n    key: 'getColumnWidth',\n    value: function getColumnWidth(sourceColumn) {\n      var width = this.wot.wtSettings.settings.columnWidth;\n\n      if (typeof width === 'function') {\n        width = width(sourceColumn);\n      } else if ((typeof width === 'undefined' ? 'undefined' : _typeof(width)) === 'object') {\n        width = width[sourceColumn];\n      }\n\n      return width || this.wot.wtSettings.settings.defaultColumnWidth;\n    }\n  }, {\n    key: 'getStretchedColumnWidth',\n    value: function getStretchedColumnWidth(sourceColumn) {\n      var columnWidth = this.getColumnWidth(sourceColumn);\n      var width = columnWidth === null || columnWidth === void 0 ? this.instance.wtSettings.settings.defaultColumnWidth : columnWidth;\n      var calculator = this.wot.wtViewport.columnsRenderCalculator;\n\n      if (calculator) {\n        var stretchedWidth = calculator.getStretchedColumnWidth(sourceColumn, width);\n\n        if (stretchedWidth) {\n          width = stretchedWidth;\n        }\n      }\n\n      return width;\n    }\n\n    /**\n     * Modify row header widths provided by user in class contructor.\n     *\n     * @private\n     */\n\n  }, {\n    key: '_modifyRowHeaderWidth',\n    value: function _modifyRowHeaderWidth(rowHeaderWidthFactory) {\n      var widths = (0, _function.isFunction)(rowHeaderWidthFactory) ? rowHeaderWidthFactory() : null;\n\n      if (Array.isArray(widths)) {\n        widths = [].concat(_toConsumableArray(widths));\n        widths[widths.length - 1] = this._correctRowHeaderWidth(widths[widths.length - 1]);\n      } else {\n        widths = this._correctRowHeaderWidth(widths);\n      }\n\n      return widths;\n    }\n\n    /**\n     * Correct row header width if necessary.\n     *\n     * @private\n     */\n\n  }, {\n    key: '_correctRowHeaderWidth',\n    value: function _correctRowHeaderWidth(width) {\n      var rowHeaderWidth = width;\n\n      if (typeof width !== 'number') {\n        rowHeaderWidth = this.wot.getSetting('defaultColumnWidth');\n      }\n      if (this.correctHeaderWidth) {\n        rowHeaderWidth += 1;\n      }\n\n      return rowHeaderWidth;\n    }\n  }]);\n\n  return Table;\n}();\n\nexports.default = Table;\n\n/***/ }),\n/* 187 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _templateObject = _taggedTemplateLiteral(['Performance tip: Handsontable rendered more than 1000 visible rows. Consider limiting the number \\n          of rendered rows by specifying the table height and/or turning off the \"renderAllRows\" option.'], ['Performance tip: Handsontable rendered more than 1000 visible rows. Consider limiting the number \\n          of rendered rows by specifying the table height and/or turning off the \"renderAllRows\" option.']);\n\nvar _element = __webpack_require__(0);\n\nvar _console = __webpack_require__(58);\n\nvar _templateLiteralTag = __webpack_require__(42);\n\nvar _base = __webpack_require__(41);\n\nvar _base2 = _interopRequireDefault(_base);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _taggedTemplateLiteral(strings, raw) { return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar performanceWarningAppeared = false;\n\n/**\n * @class TableRenderer\n */\n\nvar TableRenderer = function () {\n  /**\n   * @param {WalkontableTable} wtTable\n   */\n  function TableRenderer(wtTable) {\n    _classCallCheck(this, TableRenderer);\n\n    this.wtTable = wtTable;\n    this.wot = wtTable.instance;\n\n    // legacy support\n    this.instance = wtTable.instance;\n\n    this.rowFilter = wtTable.rowFilter;\n    this.columnFilter = wtTable.columnFilter;\n\n    this.TABLE = wtTable.TABLE;\n    this.THEAD = wtTable.THEAD;\n    this.TBODY = wtTable.TBODY;\n    this.COLGROUP = wtTable.COLGROUP;\n\n    this.rowHeaders = [];\n    this.rowHeaderCount = 0;\n    this.columnHeaders = [];\n    this.columnHeaderCount = 0;\n    this.fixedRowsTop = 0;\n    this.fixedRowsBottom = 0;\n  }\n\n  /**\n   *\n   */\n\n\n  _createClass(TableRenderer, [{\n    key: 'render',\n    value: function render() {\n      if (!this.wtTable.isWorkingOnClone()) {\n        var skipRender = {};\n        this.wot.getSetting('beforeDraw', true, skipRender);\n\n        if (skipRender.skipRender === true) {\n          return;\n        }\n      }\n\n      this.rowHeaders = this.wot.getSetting('rowHeaders');\n      this.rowHeaderCount = this.rowHeaders.length;\n      this.fixedRowsTop = this.wot.getSetting('fixedRowsTop');\n      this.fixedRowsBottom = this.wot.getSetting('fixedRowsBottom');\n      this.columnHeaders = this.wot.getSetting('columnHeaders');\n      this.columnHeaderCount = this.columnHeaders.length;\n\n      var columnsToRender = this.wtTable.getRenderedColumnsCount();\n      var rowsToRender = this.wtTable.getRenderedRowsCount();\n      var totalColumns = this.wot.getSetting('totalColumns');\n      var totalRows = this.wot.getSetting('totalRows');\n      var workspaceWidth = void 0;\n      var adjusted = false;\n\n      if (_base2.default.isOverlayTypeOf(this.wot.cloneOverlay, _base2.default.CLONE_BOTTOM) || _base2.default.isOverlayTypeOf(this.wot.cloneOverlay, _base2.default.CLONE_BOTTOM_LEFT_CORNER)) {\n\n        // do NOT render headers on the bottom or bottom-left corner overlay\n        this.columnHeaders = [];\n        this.columnHeaderCount = 0;\n      }\n\n      if (totalColumns >= 0) {\n        // prepare COL and TH elements for rendering\n        this.adjustAvailableNodes();\n        adjusted = true;\n\n        // adjust column widths according to user widths settings\n        this.renderColumnHeaders();\n\n        // Render table rows\n        this.renderRows(totalRows, rowsToRender, columnsToRender);\n\n        if (!this.wtTable.isWorkingOnClone()) {\n          workspaceWidth = this.wot.wtViewport.getWorkspaceWidth();\n          this.wot.wtViewport.containerWidth = null;\n        }\n\n        this.adjustColumnWidths(columnsToRender);\n        this.markOversizedColumnHeaders();\n        this.adjustColumnHeaderHeights();\n      }\n\n      if (!adjusted) {\n        this.adjustAvailableNodes();\n      }\n      this.removeRedundantRows(rowsToRender);\n\n      if (!this.wtTable.isWorkingOnClone() || this.wot.isOverlayName(_base2.default.CLONE_BOTTOM)) {\n        this.markOversizedRows();\n      }\n      if (!this.wtTable.isWorkingOnClone()) {\n        this.wot.wtViewport.createVisibleCalculators();\n        this.wot.wtOverlays.refresh(false);\n\n        this.wot.wtOverlays.applyToDOM();\n\n        var hiderWidth = (0, _element.outerWidth)(this.wtTable.hider);\n        var tableWidth = (0, _element.outerWidth)(this.wtTable.TABLE);\n\n        if (hiderWidth !== 0 && tableWidth !== hiderWidth) {\n          // Recalculate the column widths, if width changes made in the overlays removed the scrollbar, thus changing the viewport width.\n          this.adjustColumnWidths(columnsToRender);\n        }\n\n        if (workspaceWidth !== this.wot.wtViewport.getWorkspaceWidth()) {\n          // workspace width changed though to shown/hidden vertical scrollbar. Let's reapply stretching\n          this.wot.wtViewport.containerWidth = null;\n\n          var firstRendered = this.wtTable.getFirstRenderedColumn();\n          var lastRendered = this.wtTable.getLastRenderedColumn();\n          var defaultColumnWidth = this.wot.getSetting('defaultColumnWidth');\n          var rowHeaderWidthSetting = this.wot.getSetting('rowHeaderWidth');\n\n          rowHeaderWidthSetting = this.instance.getSetting('onModifyRowHeaderWidth', rowHeaderWidthSetting);\n\n          if (rowHeaderWidthSetting !== null && rowHeaderWidthSetting !== void 0) {\n            for (var i = 0; i < this.rowHeaderCount; i++) {\n              var width = Array.isArray(rowHeaderWidthSetting) ? rowHeaderWidthSetting[i] : rowHeaderWidthSetting;\n\n              width = width === null || width === void 0 ? defaultColumnWidth : width;\n\n              this.COLGROUP.childNodes[i].style.width = width + 'px';\n            }\n          }\n\n          for (var _i = firstRendered; _i < lastRendered; _i++) {\n            var _width = this.wtTable.getStretchedColumnWidth(_i);\n            var renderedIndex = this.columnFilter.sourceToRendered(_i);\n\n            this.COLGROUP.childNodes[renderedIndex + this.rowHeaderCount].style.width = _width + 'px';\n          }\n        }\n\n        this.wot.getSetting('onDraw', true);\n      } else if (this.wot.isOverlayName(_base2.default.CLONE_BOTTOM)) {\n        this.wot.cloneSource.wtOverlays.adjustElementsSize();\n      }\n    }\n\n    /**\n     * @param {Number} renderedRowsCount\n     */\n\n  }, {\n    key: 'removeRedundantRows',\n    value: function removeRedundantRows(renderedRowsCount) {\n      while (this.wtTable.tbodyChildrenLength > renderedRowsCount) {\n        this.TBODY.removeChild(this.TBODY.lastChild);\n        this.wtTable.tbodyChildrenLength -= 1;\n      }\n    }\n\n    /**\n     * @param {Number} totalRows\n     * @param {Number} rowsToRender\n     * @param {Number} columnsToRender\n     */\n\n  }, {\n    key: 'renderRows',\n    value: function renderRows(totalRows, rowsToRender, columnsToRender) {\n      var TR = void 0;\n      var visibleRowIndex = 0;\n      var sourceRowIndex = this.rowFilter.renderedToSource(visibleRowIndex);\n      var isWorkingOnClone = this.wtTable.isWorkingOnClone();\n\n      while (sourceRowIndex < totalRows && sourceRowIndex >= 0) {\n        if (!performanceWarningAppeared && visibleRowIndex > 1000) {\n          performanceWarningAppeared = true;\n          (0, _console.warn)((0, _templateLiteralTag.toSingleLine)(_templateObject));\n        }\n        if (rowsToRender !== void 0 && visibleRowIndex === rowsToRender) {\n          // We have as much rows as needed for this clone\n          break;\n        }\n        TR = this.getOrCreateTrForRow(visibleRowIndex, TR);\n\n        // Render row headers\n        this.renderRowHeaders(sourceRowIndex, TR);\n        // Add and/or remove TDs to TR to match the desired number\n        this.adjustColumns(TR, columnsToRender + this.rowHeaderCount);\n        // Render cells\n        this.renderCells(sourceRowIndex, TR, columnsToRender);\n\n        if (!isWorkingOnClone ||\n        // Necessary to refresh oversized row heights after editing cell in overlays\n        this.wot.isOverlayName(_base2.default.CLONE_BOTTOM)) {\n          // Reset the oversized row cache for this row\n          this.resetOversizedRow(sourceRowIndex);\n        }\n\n        if (TR.firstChild) {\n          // if I have 2 fixed columns with one-line content and the 3rd column has a multiline content, this is\n          // the way to make sure that the overlay will has same row height\n          var height = this.wot.wtTable.getRowHeight(sourceRowIndex);\n\n          if (height) {\n            // Decrease height. 1 pixel will be \"replaced\" by 1px border top\n            height -= 1;\n            TR.firstChild.style.height = height + 'px';\n          } else {\n            TR.firstChild.style.height = '';\n          }\n        }\n        visibleRowIndex += 1;\n        sourceRowIndex = this.rowFilter.renderedToSource(visibleRowIndex);\n      }\n    }\n\n    /**\n     * Reset the oversized row cache for the provided index\n     *\n     * @param {Number} sourceRow Row index\n     */\n\n  }, {\n    key: 'resetOversizedRow',\n    value: function resetOversizedRow(sourceRow) {\n      if (this.wot.getSetting('externalRowCalculator')) {\n        return;\n      }\n      if (this.wot.wtViewport.oversizedRows && this.wot.wtViewport.oversizedRows[sourceRow]) {\n        this.wot.wtViewport.oversizedRows[sourceRow] = void 0;\n      }\n    }\n\n    /**\n     * Check if any of the rendered rows is higher than expected, and if so, cache them\n     */\n\n  }, {\n    key: 'markOversizedRows',\n    value: function markOversizedRows() {\n      if (this.wot.getSetting('externalRowCalculator')) {\n        return;\n      }\n      var rowCount = this.instance.wtTable.TBODY.childNodes.length;\n      var expectedTableHeight = rowCount * this.instance.wtSettings.settings.defaultRowHeight;\n      var actualTableHeight = (0, _element.innerHeight)(this.instance.wtTable.TBODY) - 1;\n      var previousRowHeight = void 0;\n      var rowInnerHeight = void 0;\n      var sourceRowIndex = void 0;\n      var currentTr = void 0;\n      var rowHeader = void 0;\n\n      if (expectedTableHeight === actualTableHeight && !this.instance.getSetting('fixedRowsBottom')) {\n        // If the actual table height equals rowCount * default single row height, no row is oversized -> no need to iterate over them\n        return;\n      }\n\n      while (rowCount) {\n        rowCount -= 1;\n        sourceRowIndex = this.instance.wtTable.rowFilter.renderedToSource(rowCount);\n        previousRowHeight = this.instance.wtTable.getRowHeight(sourceRowIndex);\n        currentTr = this.instance.wtTable.getTrForRow(sourceRowIndex);\n        rowHeader = currentTr.querySelector('th');\n\n        if (rowHeader) {\n          rowInnerHeight = (0, _element.innerHeight)(rowHeader);\n        } else {\n          rowInnerHeight = (0, _element.innerHeight)(currentTr) - 1;\n        }\n\n        if (!previousRowHeight && this.instance.wtSettings.settings.defaultRowHeight < rowInnerHeight || previousRowHeight < rowInnerHeight) {\n          rowInnerHeight += 1;\n          this.instance.wtViewport.oversizedRows[sourceRowIndex] = rowInnerHeight;\n        }\n      }\n    }\n\n    /**\n     * Check if any of the rendered columns is higher than expected, and if so, cache them.\n     */\n\n  }, {\n    key: 'markOversizedColumnHeaders',\n    value: function markOversizedColumnHeaders() {\n      var overlayName = this.wot.getOverlayName();\n\n      if (!this.columnHeaderCount || this.wot.wtViewport.hasOversizedColumnHeadersMarked[overlayName] || this.wtTable.isWorkingOnClone()) {\n        return;\n      }\n      var columnCount = this.wtTable.getRenderedColumnsCount();\n\n      for (var i = 0; i < this.columnHeaderCount; i++) {\n        for (var renderedColumnIndex = -1 * this.rowHeaderCount; renderedColumnIndex < columnCount; renderedColumnIndex++) {\n          this.markIfOversizedColumnHeader(renderedColumnIndex);\n        }\n      }\n      this.wot.wtViewport.hasOversizedColumnHeadersMarked[overlayName] = true;\n    }\n\n    /**\n     *\n     */\n\n  }, {\n    key: 'adjustColumnHeaderHeights',\n    value: function adjustColumnHeaderHeights() {\n      var columnHeaders = this.wot.getSetting('columnHeaders');\n      var children = this.wot.wtTable.THEAD.childNodes;\n      var oversizedColumnHeaders = this.wot.wtViewport.oversizedColumnHeaders;\n\n      for (var i = 0, len = columnHeaders.length; i < len; i++) {\n        if (oversizedColumnHeaders[i]) {\n          if (!children[i] || children[i].childNodes.length === 0) {\n            return;\n          }\n          children[i].childNodes[0].style.height = oversizedColumnHeaders[i] + 'px';\n        }\n      }\n    }\n\n    /**\n     * Check if column header for the specified column is higher than expected, and if so, cache it\n     *\n     * @param {Number} col Index of column\n     */\n\n  }, {\n    key: 'markIfOversizedColumnHeader',\n    value: function markIfOversizedColumnHeader(col) {\n      var sourceColIndex = this.wot.wtTable.columnFilter.renderedToSource(col);\n      var level = this.columnHeaderCount;\n      var defaultRowHeight = this.wot.wtSettings.settings.defaultRowHeight;\n      var previousColHeaderHeight = void 0;\n      var currentHeader = void 0;\n      var currentHeaderHeight = void 0;\n      var columnHeaderHeightSetting = this.wot.getSetting('columnHeaderHeight') || [];\n\n      while (level) {\n        level -= 1;\n\n        previousColHeaderHeight = this.wot.wtTable.getColumnHeaderHeight(level);\n        currentHeader = this.wot.wtTable.getColumnHeader(sourceColIndex, level);\n\n        if (!currentHeader) {\n          /* eslint-disable no-continue */\n          continue;\n        }\n        currentHeaderHeight = (0, _element.innerHeight)(currentHeader);\n\n        if (!previousColHeaderHeight && defaultRowHeight < currentHeaderHeight || previousColHeaderHeight < currentHeaderHeight) {\n          this.wot.wtViewport.oversizedColumnHeaders[level] = currentHeaderHeight;\n        }\n\n        if (Array.isArray(columnHeaderHeightSetting)) {\n          if (columnHeaderHeightSetting[level] !== null && columnHeaderHeightSetting[level] !== void 0) {\n            this.wot.wtViewport.oversizedColumnHeaders[level] = columnHeaderHeightSetting[level];\n          }\n        } else if (!isNaN(columnHeaderHeightSetting)) {\n          this.wot.wtViewport.oversizedColumnHeaders[level] = columnHeaderHeightSetting;\n        }\n\n        if (this.wot.wtViewport.oversizedColumnHeaders[level] < (columnHeaderHeightSetting[level] || columnHeaderHeightSetting)) {\n          this.wot.wtViewport.oversizedColumnHeaders[level] = columnHeaderHeightSetting[level] || columnHeaderHeightSetting;\n        }\n      }\n    }\n\n    /**\n     * @param {Number} sourceRowIndex\n     * @param {HTMLTableRowElement} TR\n     * @param {Number} columnsToRender\n     * @returns {HTMLTableCellElement}\n     */\n\n  }, {\n    key: 'renderCells',\n    value: function renderCells(sourceRowIndex, TR, columnsToRender) {\n      var TD = void 0;\n      var sourceColIndex = void 0;\n\n      for (var visibleColIndex = 0; visibleColIndex < columnsToRender; visibleColIndex++) {\n        sourceColIndex = this.columnFilter.renderedToSource(visibleColIndex);\n\n        if (visibleColIndex === 0) {\n          TD = TR.childNodes[this.columnFilter.sourceColumnToVisibleRowHeadedColumn(sourceColIndex)];\n        } else {\n          TD = TD.nextSibling; // http://jsperf.com/nextsibling-vs-indexed-childnodes\n        }\n        // If the number of headers has been reduced, we need to replace excess TH with TD\n        if (TD.nodeName === 'TH') {\n          TD = replaceThWithTd(TD, TR);\n        }\n        if (!(0, _element.hasClass)(TD, 'hide')) {\n          TD.className = '';\n        }\n        TD.removeAttribute('style');\n        this.wot.wtSettings.settings.cellRenderer(sourceRowIndex, sourceColIndex, TD);\n      }\n\n      return TD;\n    }\n\n    /**\n     * @param {Number} columnsToRender Number of columns to render.\n     */\n\n  }, {\n    key: 'adjustColumnWidths',\n    value: function adjustColumnWidths(columnsToRender) {\n      var scrollbarCompensation = 0;\n      var sourceInstance = this.wot.cloneSource ? this.wot.cloneSource : this.wot;\n      var mainHolder = sourceInstance.wtTable.holder;\n      var defaultColumnWidth = this.wot.getSetting('defaultColumnWidth');\n      var rowHeaderWidthSetting = this.wot.getSetting('rowHeaderWidth');\n\n      if (mainHolder.offsetHeight < mainHolder.scrollHeight) {\n        scrollbarCompensation = (0, _element.getScrollbarWidth)();\n      }\n      this.wot.wtViewport.columnsRenderCalculator.refreshStretching(this.wot.wtViewport.getViewportWidth() - scrollbarCompensation);\n\n      rowHeaderWidthSetting = this.instance.getSetting('onModifyRowHeaderWidth', rowHeaderWidthSetting);\n\n      if (rowHeaderWidthSetting !== null && rowHeaderWidthSetting !== void 0) {\n        for (var i = 0; i < this.rowHeaderCount; i++) {\n          var width = Array.isArray(rowHeaderWidthSetting) ? rowHeaderWidthSetting[i] : rowHeaderWidthSetting;\n\n          width = width === null || width === void 0 ? defaultColumnWidth : width;\n\n          this.COLGROUP.childNodes[i].style.width = width + 'px';\n        }\n      }\n\n      for (var renderedColIndex = 0; renderedColIndex < columnsToRender; renderedColIndex++) {\n        var _width2 = this.wtTable.getStretchedColumnWidth(this.columnFilter.renderedToSource(renderedColIndex));\n\n        this.COLGROUP.childNodes[renderedColIndex + this.rowHeaderCount].style.width = _width2 + 'px';\n      }\n    }\n\n    /**\n     * @param {HTMLTableCellElement} TR\n     */\n\n  }, {\n    key: 'appendToTbody',\n    value: function appendToTbody(TR) {\n      this.TBODY.appendChild(TR);\n      this.wtTable.tbodyChildrenLength += 1;\n    }\n\n    /**\n     * @param {Number} rowIndex\n     * @param {HTMLTableRowElement} currentTr\n     * @returns {HTMLTableCellElement}\n     */\n\n  }, {\n    key: 'getOrCreateTrForRow',\n    value: function getOrCreateTrForRow(rowIndex, currentTr) {\n      var TR = void 0;\n\n      if (rowIndex >= this.wtTable.tbodyChildrenLength) {\n        TR = this.createRow();\n        this.appendToTbody(TR);\n      } else if (rowIndex === 0) {\n        TR = this.TBODY.firstChild;\n      } else {\n        // http://jsperf.com/nextsibling-vs-indexed-childnodes\n        TR = currentTr.nextSibling;\n      }\n      if (TR.className) {\n        TR.removeAttribute('class');\n      }\n\n      return TR;\n    }\n\n    /**\n     * @returns {HTMLTableCellElement}\n     */\n\n  }, {\n    key: 'createRow',\n    value: function createRow() {\n      var TR = document.createElement('TR');\n\n      for (var visibleColIndex = 0; visibleColIndex < this.rowHeaderCount; visibleColIndex++) {\n        TR.appendChild(document.createElement('TH'));\n      }\n\n      return TR;\n    }\n\n    /**\n     * @param {Number} row\n     * @param {Number} col\n     * @param {HTMLTableCellElement} TH\n     */\n\n  }, {\n    key: 'renderRowHeader',\n    value: function renderRowHeader(row, col, TH) {\n      TH.className = '';\n      TH.removeAttribute('style');\n      this.rowHeaders[col](row, TH, col);\n    }\n\n    /**\n     * @param {Number} row\n     * @param {HTMLTableCellElement} TR\n     */\n\n  }, {\n    key: 'renderRowHeaders',\n    value: function renderRowHeaders(row, TR) {\n      for (var TH = TR.firstChild, visibleColIndex = 0; visibleColIndex < this.rowHeaderCount; visibleColIndex++) {\n        // If the number of row headers increased we need to create TH or replace an existing TD node with TH\n        if (!TH) {\n          TH = document.createElement('TH');\n          TR.appendChild(TH);\n        } else if (TH.nodeName === 'TD') {\n          TH = replaceTdWithTh(TH, TR);\n        }\n        this.renderRowHeader(row, visibleColIndex, TH);\n        // http://jsperf.com/nextsibling-vs-indexed-childnodes\n        TH = TH.nextSibling;\n      }\n    }\n\n    /**\n     * Adjust the number of COL and TH elements to match the number of columns and headers that need to be rendered\n     */\n\n  }, {\n    key: 'adjustAvailableNodes',\n    value: function adjustAvailableNodes() {\n      this.adjustColGroups();\n      this.adjustThead();\n    }\n\n    /**\n     * Renders the column headers\n     */\n\n  }, {\n    key: 'renderColumnHeaders',\n    value: function renderColumnHeaders() {\n      if (!this.columnHeaderCount) {\n        return;\n      }\n      var columnCount = this.wtTable.getRenderedColumnsCount();\n\n      for (var i = 0; i < this.columnHeaderCount; i++) {\n        var TR = this.getTrForColumnHeaders(i);\n\n        for (var renderedColumnIndex = -1 * this.rowHeaderCount; renderedColumnIndex < columnCount; renderedColumnIndex++) {\n          var sourceCol = this.columnFilter.renderedToSource(renderedColumnIndex);\n\n          this.renderColumnHeader(i, sourceCol, TR.childNodes[renderedColumnIndex + this.rowHeaderCount]);\n        }\n      }\n    }\n\n    /**\n     * Adjusts the number of COL elements to match the number of columns that need to be rendered\n     */\n\n  }, {\n    key: 'adjustColGroups',\n    value: function adjustColGroups() {\n      var columnCount = this.wtTable.getRenderedColumnsCount();\n\n      while (this.wtTable.colgroupChildrenLength < columnCount + this.rowHeaderCount) {\n        this.COLGROUP.appendChild(document.createElement('COL'));\n        this.wtTable.colgroupChildrenLength += 1;\n      }\n      while (this.wtTable.colgroupChildrenLength > columnCount + this.rowHeaderCount) {\n        this.COLGROUP.removeChild(this.COLGROUP.lastChild);\n        this.wtTable.colgroupChildrenLength -= 1;\n      }\n      if (this.rowHeaderCount) {\n        (0, _element.addClass)(this.COLGROUP.childNodes[0], 'rowHeader');\n      }\n    }\n\n    /**\n     * Adjusts the number of TH elements in THEAD to match the number of headers and columns that need to be rendered\n     */\n\n  }, {\n    key: 'adjustThead',\n    value: function adjustThead() {\n      var columnCount = this.wtTable.getRenderedColumnsCount();\n      var TR = this.THEAD.firstChild;\n\n      if (this.columnHeaders.length) {\n        for (var i = 0, len = this.columnHeaders.length; i < len; i++) {\n          TR = this.THEAD.childNodes[i];\n\n          if (!TR) {\n            TR = document.createElement('TR');\n            this.THEAD.appendChild(TR);\n          }\n          this.theadChildrenLength = TR.childNodes.length;\n\n          while (this.theadChildrenLength < columnCount + this.rowHeaderCount) {\n            TR.appendChild(document.createElement('TH'));\n            this.theadChildrenLength += 1;\n          }\n          while (this.theadChildrenLength > columnCount + this.rowHeaderCount) {\n            TR.removeChild(TR.lastChild);\n            this.theadChildrenLength -= 1;\n          }\n        }\n        var theadChildrenLength = this.THEAD.childNodes.length;\n\n        if (theadChildrenLength > this.columnHeaders.length) {\n          for (var _i2 = this.columnHeaders.length; _i2 < theadChildrenLength; _i2++) {\n            this.THEAD.removeChild(this.THEAD.lastChild);\n          }\n        }\n      } else if (TR) {\n        (0, _element.empty)(TR);\n      }\n    }\n\n    /**\n     * @param {Number} index\n     * @returns {HTMLTableCellElement}\n     */\n\n  }, {\n    key: 'getTrForColumnHeaders',\n    value: function getTrForColumnHeaders(index) {\n      return this.THEAD.childNodes[index];\n    }\n\n    /**\n     * @param {Number} row\n     * @param {Number} col\n     * @param {HTMLTableCellElement} TH\n     * @returns {*}\n     */\n\n  }, {\n    key: 'renderColumnHeader',\n    value: function renderColumnHeader(row, col, TH) {\n      TH.className = '';\n      TH.removeAttribute('style');\n\n      return this.columnHeaders[row](col, TH, row);\n    }\n\n    /**\n     * Add and/or remove the TDs to match the desired number\n     *\n     * @param {HTMLTableCellElement} TR Table row in question\n     * @param {Number} desiredCount The desired number of TDs in the TR\n     */\n\n  }, {\n    key: 'adjustColumns',\n    value: function adjustColumns(TR, desiredCount) {\n      var count = TR.childNodes.length;\n\n      while (count < desiredCount) {\n        var TD = document.createElement('TD');\n\n        TR.appendChild(TD);\n        count += 1;\n      }\n      while (count > desiredCount) {\n        TR.removeChild(TR.lastChild);\n        count -= 1;\n      }\n    }\n\n    /**\n     * @param {Number} columnsToRender\n     */\n\n  }, {\n    key: 'removeRedundantColumns',\n    value: function removeRedundantColumns(columnsToRender) {\n      while (this.wtTable.tbodyChildrenLength > columnsToRender) {\n        this.TBODY.removeChild(this.TBODY.lastChild);\n        this.wtTable.tbodyChildrenLength -= 1;\n      }\n    }\n  }]);\n\n  return TableRenderer;\n}();\n\nfunction replaceTdWithTh(TD, TR) {\n  var TH = document.createElement('TH');\n\n  TR.insertBefore(TH, TD);\n  TR.removeChild(TD);\n\n  return TH;\n}\n\nfunction replaceThWithTd(TH, TR) {\n  var TD = document.createElement('TD');\n\n  TR.insertBefore(TD, TH);\n  TR.removeChild(TH);\n\n  return TD;\n}\n\nexports.default = TableRenderer;\n\n/***/ }),\n/* 188 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _element = __webpack_require__(0);\n\nvar _object = __webpack_require__(1);\n\nvar _eventManager = __webpack_require__(5);\n\nvar _eventManager2 = _interopRequireDefault(_eventManager);\n\nvar _viewportColumns = __webpack_require__(176);\n\nvar _viewportColumns2 = _interopRequireDefault(_viewportColumns);\n\nvar _viewportRows = __webpack_require__(177);\n\nvar _viewportRows2 = _interopRequireDefault(_viewportRows);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * @class Viewport\n */\nvar Viewport = function () {\n  /**\n   * @param wotInstance\n   */\n  function Viewport(wotInstance) {\n    var _this = this;\n\n    _classCallCheck(this, Viewport);\n\n    this.wot = wotInstance;\n    // legacy support\n    this.instance = this.wot;\n\n    this.oversizedRows = [];\n    this.oversizedColumnHeaders = [];\n    this.hasOversizedColumnHeadersMarked = {};\n    this.clientHeight = 0;\n    this.containerWidth = NaN;\n    this.rowHeaderWidth = NaN;\n    this.rowsVisibleCalculator = null;\n    this.columnsVisibleCalculator = null;\n\n    this.eventManager = new _eventManager2.default(this.wot);\n    this.eventManager.addEventListener(window, 'resize', function () {\n      _this.clientHeight = _this.getWorkspaceHeight();\n    });\n  }\n\n  /**\n   * @returns {number}\n   */\n\n\n  _createClass(Viewport, [{\n    key: 'getWorkspaceHeight',\n    value: function getWorkspaceHeight() {\n      var trimmingContainer = this.instance.wtOverlays.topOverlay.trimmingContainer;\n      var elemHeight = void 0;\n      var height = 0;\n\n      if (trimmingContainer === window) {\n        height = document.documentElement.clientHeight;\n      } else {\n        elemHeight = (0, _element.outerHeight)(trimmingContainer);\n        // returns height without DIV scrollbar\n        height = elemHeight > 0 && trimmingContainer.clientHeight > 0 ? trimmingContainer.clientHeight : Infinity;\n      }\n\n      return height;\n    }\n  }, {\n    key: 'getWorkspaceWidth',\n    value: function getWorkspaceWidth() {\n      var width = void 0;\n      var totalColumns = this.wot.getSetting('totalColumns');\n      var trimmingContainer = this.instance.wtOverlays.leftOverlay.trimmingContainer;\n      var overflow = void 0;\n      var stretchSetting = this.wot.getSetting('stretchH');\n      var docOffsetWidth = document.documentElement.offsetWidth;\n      var preventOverflow = this.wot.getSetting('preventOverflow');\n\n      if (preventOverflow) {\n        return (0, _element.outerWidth)(this.instance.wtTable.wtRootElement);\n      }\n\n      if (this.wot.getSetting('freezeOverlays')) {\n        width = Math.min(docOffsetWidth - this.getWorkspaceOffset().left, docOffsetWidth);\n      } else {\n        width = Math.min(this.getContainerFillWidth(), docOffsetWidth - this.getWorkspaceOffset().left, docOffsetWidth);\n      }\n\n      if (trimmingContainer === window && totalColumns > 0 && this.sumColumnWidths(0, totalColumns - 1) > width) {\n        // in case sum of column widths is higher than available stylesheet width, let's assume using the whole window\n        // otherwise continue below, which will allow stretching\n        // this is used in `scroll_window.html`\n        // TODO test me\n        return document.documentElement.clientWidth;\n      }\n\n      if (trimmingContainer !== window) {\n        overflow = (0, _element.getStyle)(this.instance.wtOverlays.leftOverlay.trimmingContainer, 'overflow');\n\n        if (overflow === 'scroll' || overflow === 'hidden' || overflow === 'auto') {\n          // this is used in `scroll.html`\n          // TODO test me\n          return Math.max(width, trimmingContainer.clientWidth);\n        }\n      }\n\n      if (stretchSetting === 'none' || !stretchSetting) {\n        // if no stretching is used, return the maximum used workspace width\n        return Math.max(width, (0, _element.outerWidth)(this.instance.wtTable.TABLE));\n      }\n\n      // if stretching is used, return the actual container width, so the columns can fit inside it\n      return width;\n    }\n\n    /**\n     * Checks if viewport has vertical scroll\n     *\n     * @returns {Boolean}\n     */\n\n  }, {\n    key: 'hasVerticalScroll',\n    value: function hasVerticalScroll() {\n      return this.getWorkspaceActualHeight() > this.getWorkspaceHeight();\n    }\n\n    /**\n     * Checks if viewport has horizontal scroll\n     *\n     * @returns {Boolean}\n     */\n\n  }, {\n    key: 'hasHorizontalScroll',\n    value: function hasHorizontalScroll() {\n      return this.getWorkspaceActualWidth() > this.getWorkspaceWidth();\n    }\n\n    /**\n     * @param from\n     * @param length\n     * @returns {Number}\n     */\n\n  }, {\n    key: 'sumColumnWidths',\n    value: function sumColumnWidths(from, length) {\n      var wtTable = this.wot.wtTable;\n      var sum = 0;\n      var column = from;\n\n      while (column < length) {\n        sum += wtTable.getColumnWidth(column);\n        column += 1;\n      }\n\n      return sum;\n    }\n\n    /**\n     * @returns {Number}\n     */\n\n  }, {\n    key: 'getContainerFillWidth',\n    value: function getContainerFillWidth() {\n      if (this.containerWidth) {\n        return this.containerWidth;\n      }\n\n      var mainContainer = this.instance.wtTable.holder;\n      var dummyElement = document.createElement('div');\n\n      dummyElement.style.width = '100%';\n      dummyElement.style.height = '1px';\n      mainContainer.appendChild(dummyElement);\n\n      var fillWidth = dummyElement.offsetWidth;\n\n      this.containerWidth = fillWidth;\n      mainContainer.removeChild(dummyElement);\n\n      return fillWidth;\n    }\n\n    /**\n     * @returns {Number}\n     */\n\n  }, {\n    key: 'getWorkspaceOffset',\n    value: function getWorkspaceOffset() {\n      return (0, _element.offset)(this.wot.wtTable.TABLE);\n    }\n\n    /**\n     * @returns {Number}\n     */\n\n  }, {\n    key: 'getWorkspaceActualHeight',\n    value: function getWorkspaceActualHeight() {\n      return (0, _element.outerHeight)(this.wot.wtTable.TABLE);\n    }\n\n    /**\n     * @returns {Number}\n     */\n\n  }, {\n    key: 'getWorkspaceActualWidth',\n    value: function getWorkspaceActualWidth() {\n      return (0, _element.outerWidth)(this.wot.wtTable.TABLE) || (0, _element.outerWidth)(this.wot.wtTable.TBODY) || (0, _element.outerWidth)(this.wot.wtTable.THEAD); // IE8 reports 0 as <table> offsetWidth;\n    }\n\n    /**\n     * @returns {Number}\n     */\n\n  }, {\n    key: 'getColumnHeaderHeight',\n    value: function getColumnHeaderHeight() {\n      if (isNaN(this.columnHeaderHeight)) {\n        this.columnHeaderHeight = (0, _element.outerHeight)(this.wot.wtTable.THEAD);\n      }\n\n      return this.columnHeaderHeight;\n    }\n\n    /**\n     * @returns {Number}\n     */\n\n  }, {\n    key: 'getViewportHeight',\n    value: function getViewportHeight() {\n      var containerHeight = this.getWorkspaceHeight();\n\n      if (containerHeight === Infinity) {\n        return containerHeight;\n      }\n\n      var columnHeaderHeight = this.getColumnHeaderHeight();\n\n      if (columnHeaderHeight > 0) {\n        containerHeight -= columnHeaderHeight;\n      }\n\n      return containerHeight;\n    }\n\n    /**\n     * @returns {Number}\n     */\n\n  }, {\n    key: 'getRowHeaderWidth',\n    value: function getRowHeaderWidth() {\n      var rowHeadersHeightSetting = this.instance.getSetting('rowHeaderWidth');\n      var rowHeaders = this.instance.getSetting('rowHeaders');\n\n      if (rowHeadersHeightSetting) {\n        this.rowHeaderWidth = 0;\n\n        for (var i = 0, len = rowHeaders.length; i < len; i++) {\n          this.rowHeaderWidth += rowHeadersHeightSetting[i] || rowHeadersHeightSetting;\n        }\n      }\n\n      if (this.wot.cloneSource) {\n        return this.wot.cloneSource.wtViewport.getRowHeaderWidth();\n      }\n\n      if (isNaN(this.rowHeaderWidth)) {\n\n        if (rowHeaders.length) {\n          var TH = this.instance.wtTable.TABLE.querySelector('TH');\n          this.rowHeaderWidth = 0;\n\n          for (var _i = 0, _len = rowHeaders.length; _i < _len; _i++) {\n            if (TH) {\n              this.rowHeaderWidth += (0, _element.outerWidth)(TH);\n              TH = TH.nextSibling;\n            } else {\n              // yes this is a cheat but it worked like that before, just taking assumption from CSS instead of measuring.\n              // TODO: proper fix\n              this.rowHeaderWidth += 50;\n            }\n          }\n        } else {\n          this.rowHeaderWidth = 0;\n        }\n      }\n\n      this.rowHeaderWidth = this.instance.getSetting('onModifyRowHeaderWidth', this.rowHeaderWidth) || this.rowHeaderWidth;\n\n      return this.rowHeaderWidth;\n    }\n\n    /**\n     * @returns {Number}\n     */\n\n  }, {\n    key: 'getViewportWidth',\n    value: function getViewportWidth() {\n      var containerWidth = this.getWorkspaceWidth();\n\n      if (containerWidth === Infinity) {\n        return containerWidth;\n      }\n\n      var rowHeaderWidth = this.getRowHeaderWidth();\n\n      if (rowHeaderWidth > 0) {\n        return containerWidth - rowHeaderWidth;\n      }\n\n      return containerWidth;\n    }\n\n    /**\n     * Creates:\n     *  - rowsRenderCalculator (before draw, to qualify rows for rendering)\n     *  - rowsVisibleCalculator (after draw, to measure which rows are actually visible)\n     *\n     * @returns {ViewportRowsCalculator}\n     */\n\n  }, {\n    key: 'createRowsCalculator',\n    value: function createRowsCalculator() {\n      var _this2 = this;\n\n      var visible = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n      var height = void 0;\n      var scrollbarHeight = void 0;\n      var fixedRowsHeight = void 0;\n\n      this.rowHeaderWidth = NaN;\n\n      if (this.wot.wtSettings.settings.renderAllRows && !visible) {\n        height = Infinity;\n      } else {\n        height = this.getViewportHeight();\n      }\n\n      var pos = this.wot.wtOverlays.topOverlay.getScrollPosition() - this.wot.wtOverlays.topOverlay.getTableParentOffset();\n\n      if (pos < 0) {\n        pos = 0;\n      }\n\n      var fixedRowsTop = this.wot.getSetting('fixedRowsTop');\n      var fixedRowsBottom = this.wot.getSetting('fixedRowsBottom');\n      var totalRows = this.wot.getSetting('totalRows');\n\n      if (fixedRowsTop) {\n        fixedRowsHeight = this.wot.wtOverlays.topOverlay.sumCellSizes(0, fixedRowsTop);\n        pos += fixedRowsHeight;\n        height -= fixedRowsHeight;\n      }\n\n      if (fixedRowsBottom && this.wot.wtOverlays.bottomOverlay.clone) {\n        fixedRowsHeight = this.wot.wtOverlays.bottomOverlay.sumCellSizes(totalRows - fixedRowsBottom, totalRows);\n\n        height -= fixedRowsHeight;\n      }\n\n      if (this.wot.wtTable.holder.clientHeight === this.wot.wtTable.holder.offsetHeight) {\n        scrollbarHeight = 0;\n      } else {\n        scrollbarHeight = (0, _element.getScrollbarWidth)();\n      }\n\n      return new _viewportRows2.default(height, pos, this.wot.getSetting('totalRows'), function (sourceRow) {\n        return _this2.wot.wtTable.getRowHeight(sourceRow);\n      }, visible ? null : this.wot.wtSettings.settings.viewportRowCalculatorOverride, visible, scrollbarHeight);\n    }\n\n    /**\n     * Creates:\n     *  - columnsRenderCalculator (before draw, to qualify columns for rendering)\n     *  - columnsVisibleCalculator (after draw, to measure which columns are actually visible)\n     *\n     * @returns {ViewportRowsCalculator}\n     */\n\n  }, {\n    key: 'createColumnsCalculator',\n    value: function createColumnsCalculator() {\n      var _this3 = this;\n\n      var visible = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n      var width = this.getViewportWidth();\n      var pos = this.wot.wtOverlays.leftOverlay.getScrollPosition() - this.wot.wtOverlays.leftOverlay.getTableParentOffset();\n\n      this.columnHeaderHeight = NaN;\n\n      if (pos < 0) {\n        pos = 0;\n      }\n\n      var fixedColumnsLeft = this.wot.getSetting('fixedColumnsLeft');\n\n      if (fixedColumnsLeft) {\n        var fixedColumnsWidth = this.wot.wtOverlays.leftOverlay.sumCellSizes(0, fixedColumnsLeft);\n        pos += fixedColumnsWidth;\n        width -= fixedColumnsWidth;\n      }\n      if (this.wot.wtTable.holder.clientWidth !== this.wot.wtTable.holder.offsetWidth) {\n        width -= (0, _element.getScrollbarWidth)();\n      }\n\n      return new _viewportColumns2.default(width, pos, this.wot.getSetting('totalColumns'), function (sourceCol) {\n        return _this3.wot.wtTable.getColumnWidth(sourceCol);\n      }, visible ? null : this.wot.wtSettings.settings.viewportColumnCalculatorOverride, visible, this.wot.getSetting('stretchH'), function (stretchedWidth, column) {\n        return _this3.wot.getSetting('onBeforeStretchingColumnWidth', stretchedWidth, column);\n      });\n    }\n\n    /**\n     * Creates rowsRenderCalculator and columnsRenderCalculator (before draw, to determine what rows and\n     * cols should be rendered)\n     *\n     * @param fastDraw {Boolean} If `true`, will try to avoid full redraw and only update the border positions.\n     *                           If `false` or `undefined`, will perform a full redraw\n     * @returns fastDraw {Boolean} The fastDraw value, possibly modified\n     */\n\n  }, {\n    key: 'createRenderCalculators',\n    value: function createRenderCalculators() {\n      var fastDraw = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n      var runFastDraw = fastDraw;\n\n      if (runFastDraw) {\n        var proposedRowsVisibleCalculator = this.createRowsCalculator(true);\n        var proposedColumnsVisibleCalculator = this.createColumnsCalculator(true);\n\n        if (!(this.areAllProposedVisibleRowsAlreadyRendered(proposedRowsVisibleCalculator) && this.areAllProposedVisibleColumnsAlreadyRendered(proposedColumnsVisibleCalculator))) {\n          runFastDraw = false;\n        }\n      }\n\n      if (!runFastDraw) {\n        this.rowsRenderCalculator = this.createRowsCalculator();\n        this.columnsRenderCalculator = this.createColumnsCalculator();\n      }\n      // delete temporarily to make sure that renderers always use rowsRenderCalculator, not rowsVisibleCalculator\n      this.rowsVisibleCalculator = null;\n      this.columnsVisibleCalculator = null;\n\n      return runFastDraw;\n    }\n\n    /**\n     * Creates rowsVisibleCalculator and columnsVisibleCalculator (after draw, to determine what are\n     * the actually visible rows and columns)\n     */\n\n  }, {\n    key: 'createVisibleCalculators',\n    value: function createVisibleCalculators() {\n      this.rowsVisibleCalculator = this.createRowsCalculator(true);\n      this.columnsVisibleCalculator = this.createColumnsCalculator(true);\n    }\n\n    /**\n     * Returns information whether proposedRowsVisibleCalculator viewport\n     * is contained inside rows rendered in previous draw (cached in rowsRenderCalculator)\n     *\n     * @param {Object} proposedRowsVisibleCalculator\n     * @returns {Boolean} Returns `true` if all proposed visible rows are already rendered (meaning: redraw is not needed).\n     *                    Returns `false` if at least one proposed visible row is not already rendered (meaning: redraw is needed)\n     */\n\n  }, {\n    key: 'areAllProposedVisibleRowsAlreadyRendered',\n    value: function areAllProposedVisibleRowsAlreadyRendered(proposedRowsVisibleCalculator) {\n      if (this.rowsVisibleCalculator) {\n        if (proposedRowsVisibleCalculator.startRow < this.rowsRenderCalculator.startRow || proposedRowsVisibleCalculator.startRow === this.rowsRenderCalculator.startRow && proposedRowsVisibleCalculator.startRow > 0) {\n          return false;\n        } else if (proposedRowsVisibleCalculator.endRow > this.rowsRenderCalculator.endRow || proposedRowsVisibleCalculator.endRow === this.rowsRenderCalculator.endRow && proposedRowsVisibleCalculator.endRow < this.wot.getSetting('totalRows') - 1) {\n          return false;\n        }\n        return true;\n      }\n\n      return false;\n    }\n\n    /**\n     * Returns information whether proposedColumnsVisibleCalculator viewport\n     * is contained inside column rendered in previous draw (cached in columnsRenderCalculator)\n     *\n     * @param {Object} proposedColumnsVisibleCalculator\n     * @returns {Boolean} Returns `true` if all proposed visible columns are already rendered (meaning: redraw is not needed).\n     *                    Returns `false` if at least one proposed visible column is not already rendered (meaning: redraw is needed)\n     */\n\n  }, {\n    key: 'areAllProposedVisibleColumnsAlreadyRendered',\n    value: function areAllProposedVisibleColumnsAlreadyRendered(proposedColumnsVisibleCalculator) {\n      if (this.columnsVisibleCalculator) {\n        if (proposedColumnsVisibleCalculator.startColumn < this.columnsRenderCalculator.startColumn || proposedColumnsVisibleCalculator.startColumn === this.columnsRenderCalculator.startColumn && proposedColumnsVisibleCalculator.startColumn > 0) {\n          return false;\n        } else if (proposedColumnsVisibleCalculator.endColumn > this.columnsRenderCalculator.endColumn || proposedColumnsVisibleCalculator.endColumn === this.columnsRenderCalculator.endColumn && proposedColumnsVisibleCalculator.endColumn < this.wot.getSetting('totalColumns') - 1) {\n          return false;\n        }\n        return true;\n      }\n\n      return false;\n    }\n\n    /**\n     * Resets values in keys of the hasOversizedColumnHeadersMarked object after updateSettings.\n     */\n\n  }, {\n    key: 'resetHasOversizedColumnHeadersMarked',\n    value: function resetHasOversizedColumnHeadersMarked() {\n      (0, _object.objectEach)(this.hasOversizedColumnHeadersMarked, function (value, key, object) {\n        object[key] = void 0;\n      });\n    }\n  }]);\n\n  return Viewport;\n}();\n\nexports.default = Viewport;\n\n/***/ }),\n/* 189 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _element = __webpack_require__(0);\n\nvar _event = __webpack_require__(13);\n\nvar _object = __webpack_require__(1);\n\nvar _browser = __webpack_require__(39);\n\nvar _eventManager = __webpack_require__(5);\n\nvar _eventManager2 = _interopRequireDefault(_eventManager);\n\nvar _coords = __webpack_require__(56);\n\nvar _coords2 = _interopRequireDefault(_coords);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n *\n */\nvar Border = function () {\n  /**\n   * @param {Walkontable} wotInstance\n   * @param {Object} settings\n   */\n  function Border(wotInstance, settings) {\n    _classCallCheck(this, Border);\n\n    if (!settings) {\n      return;\n    }\n    this.eventManager = new _eventManager2.default(wotInstance);\n    this.instance = wotInstance;\n    this.wot = wotInstance;\n    this.settings = settings;\n    this.mouseDown = false;\n    this.main = null;\n\n    this.top = null;\n    this.left = null;\n    this.bottom = null;\n    this.right = null;\n\n    this.topStyle = null;\n    this.leftStyle = null;\n    this.bottomStyle = null;\n    this.rightStyle = null;\n\n    this.cornerDefaultStyle = {\n      width: '6px',\n      height: '6px',\n      borderWidth: '1px',\n      borderStyle: 'solid',\n      borderColor: '#FFF'\n    };\n    this.corner = null;\n    this.cornerStyle = null;\n\n    this.createBorders(settings);\n    this.registerListeners();\n  }\n\n  /**\n   * Register all necessary events\n   */\n\n\n  _createClass(Border, [{\n    key: 'registerListeners',\n    value: function registerListeners() {\n      var _this2 = this;\n\n      this.eventManager.addEventListener(document.body, 'mousedown', function () {\n        return _this2.onMouseDown();\n      });\n      this.eventManager.addEventListener(document.body, 'mouseup', function () {\n        return _this2.onMouseUp();\n      });\n\n      var _loop = function _loop(c, len) {\n        _this2.eventManager.addEventListener(_this2.main.childNodes[c], 'mouseenter', function (event) {\n          return _this2.onMouseEnter(event, _this2.main.childNodes[c]);\n        });\n      };\n\n      for (var c = 0, len = this.main.childNodes.length; c < len; c++) {\n        _loop(c, len);\n      }\n    }\n\n    /**\n     * Mouse down listener\n     *\n     * @private\n     */\n\n  }, {\n    key: 'onMouseDown',\n    value: function onMouseDown() {\n      this.mouseDown = true;\n    }\n\n    /**\n     * Mouse up listener\n     *\n     * @private\n     */\n\n  }, {\n    key: 'onMouseUp',\n    value: function onMouseUp() {\n      this.mouseDown = false;\n    }\n\n    /**\n     * Mouse enter listener for fragment selection functionality.\n     *\n     * @private\n     * @param {Event} event Dom event\n     * @param {HTMLElement} parentElement Part of border element.\n     */\n\n  }, {\n    key: 'onMouseEnter',\n    value: function onMouseEnter(event, parentElement) {\n      if (!this.mouseDown || !this.wot.getSetting('hideBorderOnMouseDownOver')) {\n        return;\n      }\n      event.preventDefault();\n      (0, _event.stopImmediatePropagation)(event);\n\n      var _this = this;\n      var bounds = parentElement.getBoundingClientRect();\n      // Hide border to prevents selection jumping when fragmentSelection is enabled.\n      parentElement.style.display = 'none';\n\n      function isOutside(mouseEvent) {\n        if (mouseEvent.clientY < Math.floor(bounds.top)) {\n          return true;\n        }\n        if (mouseEvent.clientY > Math.ceil(bounds.top + bounds.height)) {\n          return true;\n        }\n        if (mouseEvent.clientX < Math.floor(bounds.left)) {\n          return true;\n        }\n        if (mouseEvent.clientX > Math.ceil(bounds.left + bounds.width)) {\n          return true;\n        }\n      }\n\n      function handler(handlerEvent) {\n        if (isOutside(handlerEvent)) {\n          _this.eventManager.removeEventListener(document.body, 'mousemove', handler);\n          parentElement.style.display = 'block';\n        }\n      }\n\n      this.eventManager.addEventListener(document.body, 'mousemove', handler);\n    }\n\n    /**\n     * Create border elements\n     *\n     * @param {Object} settings\n     */\n\n  }, {\n    key: 'createBorders',\n    value: function createBorders(settings) {\n      this.main = document.createElement('div');\n\n      var borderDivs = ['top', 'left', 'bottom', 'right', 'corner'];\n      var style = this.main.style;\n      style.position = 'absolute';\n      style.top = 0;\n      style.left = 0;\n\n      for (var i = 0; i < 5; i++) {\n        var position = borderDivs[i];\n        var div = document.createElement('div');\n\n        div.className = 'wtBorder ' + (this.settings.className || ''); // + borderDivs[i];\n\n        if (this.settings[position] && this.settings[position].hide) {\n          div.className += ' hidden';\n        }\n        style = div.style;\n        style.backgroundColor = this.settings[position] && this.settings[position].color ? this.settings[position].color : settings.border.color;\n        style.height = this.settings[position] && this.settings[position].width ? this.settings[position].width + 'px' : settings.border.width + 'px';\n        style.width = this.settings[position] && this.settings[position].width ? this.settings[position].width + 'px' : settings.border.width + 'px';\n\n        this.main.appendChild(div);\n      }\n      this.top = this.main.childNodes[0];\n      this.left = this.main.childNodes[1];\n      this.bottom = this.main.childNodes[2];\n      this.right = this.main.childNodes[3];\n\n      this.topStyle = this.top.style;\n      this.leftStyle = this.left.style;\n      this.bottomStyle = this.bottom.style;\n      this.rightStyle = this.right.style;\n\n      this.corner = this.main.childNodes[4];\n      this.corner.className += ' corner';\n      this.cornerStyle = this.corner.style;\n      this.cornerStyle.width = this.cornerDefaultStyle.width;\n      this.cornerStyle.height = this.cornerDefaultStyle.height;\n      this.cornerStyle.border = [this.cornerDefaultStyle.borderWidth, this.cornerDefaultStyle.borderStyle, this.cornerDefaultStyle.borderColor].join(' ');\n\n      if ((0, _browser.isMobileBrowser)()) {\n        this.createMultipleSelectorHandles();\n      }\n      this.disappear();\n\n      var bordersHolder = this.wot.wtTable.bordersHolder;\n\n      if (!bordersHolder) {\n        bordersHolder = document.createElement('div');\n        bordersHolder.className = 'htBorders';\n        this.wot.wtTable.bordersHolder = bordersHolder;\n        this.wot.wtTable.spreader.appendChild(bordersHolder);\n      }\n      bordersHolder.appendChild(this.main);\n    }\n\n    /**\n     * Create multiple selector handler for mobile devices\n     */\n\n  }, {\n    key: 'createMultipleSelectorHandles',\n    value: function createMultipleSelectorHandles() {\n      var _this3 = this;\n\n      this.selectionHandles = {\n        topLeft: document.createElement('DIV'),\n        topLeftHitArea: document.createElement('DIV'),\n        bottomRight: document.createElement('DIV'),\n        bottomRightHitArea: document.createElement('DIV')\n      };\n      var width = 10;\n      var hitAreaWidth = 40;\n\n      this.selectionHandles.topLeft.className = 'topLeftSelectionHandle';\n      this.selectionHandles.topLeftHitArea.className = 'topLeftSelectionHandle-HitArea';\n      this.selectionHandles.bottomRight.className = 'bottomRightSelectionHandle';\n      this.selectionHandles.bottomRightHitArea.className = 'bottomRightSelectionHandle-HitArea';\n\n      this.selectionHandles.styles = {\n        topLeft: this.selectionHandles.topLeft.style,\n        topLeftHitArea: this.selectionHandles.topLeftHitArea.style,\n        bottomRight: this.selectionHandles.bottomRight.style,\n        bottomRightHitArea: this.selectionHandles.bottomRightHitArea.style\n      };\n\n      var hitAreaStyle = {\n        position: 'absolute',\n        height: hitAreaWidth + 'px',\n        width: hitAreaWidth + 'px',\n        'border-radius': parseInt(hitAreaWidth / 1.5, 10) + 'px'\n      };\n\n      (0, _object.objectEach)(hitAreaStyle, function (value, key) {\n        _this3.selectionHandles.styles.bottomRightHitArea[key] = value;\n        _this3.selectionHandles.styles.topLeftHitArea[key] = value;\n      });\n\n      var handleStyle = {\n        position: 'absolute',\n        height: width + 'px',\n        width: width + 'px',\n        'border-radius': parseInt(width / 1.5, 10) + 'px',\n        background: '#F5F5FF',\n        border: '1px solid #4285c8'\n      };\n\n      (0, _object.objectEach)(handleStyle, function (value, key) {\n        _this3.selectionHandles.styles.bottomRight[key] = value;\n        _this3.selectionHandles.styles.topLeft[key] = value;\n      });\n\n      this.main.appendChild(this.selectionHandles.topLeft);\n      this.main.appendChild(this.selectionHandles.bottomRight);\n      this.main.appendChild(this.selectionHandles.topLeftHitArea);\n      this.main.appendChild(this.selectionHandles.bottomRightHitArea);\n    }\n  }, {\n    key: 'isPartRange',\n    value: function isPartRange(row, col) {\n      var areaSelection = this.wot.selections.createOrGetArea();\n\n      if (areaSelection.cellRange) {\n        if (row !== areaSelection.cellRange.to.row || col !== areaSelection.cellRange.to.col) {\n          return true;\n        }\n      }\n\n      return false;\n    }\n  }, {\n    key: 'updateMultipleSelectionHandlesPosition',\n    value: function updateMultipleSelectionHandlesPosition(row, col, top, left, width, height) {\n      var handleWidth = parseInt(this.selectionHandles.styles.topLeft.width, 10);\n      var hitAreaWidth = parseInt(this.selectionHandles.styles.topLeftHitArea.width, 10);\n\n      this.selectionHandles.styles.topLeft.top = parseInt(top - handleWidth, 10) + 'px';\n      this.selectionHandles.styles.topLeft.left = parseInt(left - handleWidth, 10) + 'px';\n\n      this.selectionHandles.styles.topLeftHitArea.top = parseInt(top - hitAreaWidth / 4 * 3, 10) + 'px';\n      this.selectionHandles.styles.topLeftHitArea.left = parseInt(left - hitAreaWidth / 4 * 3, 10) + 'px';\n\n      this.selectionHandles.styles.bottomRight.top = parseInt(top + height, 10) + 'px';\n      this.selectionHandles.styles.bottomRight.left = parseInt(left + width, 10) + 'px';\n\n      this.selectionHandles.styles.bottomRightHitArea.top = parseInt(top + height - hitAreaWidth / 4, 10) + 'px';\n      this.selectionHandles.styles.bottomRightHitArea.left = parseInt(left + width - hitAreaWidth / 4, 10) + 'px';\n\n      if (this.settings.border.cornerVisible && this.settings.border.cornerVisible()) {\n        this.selectionHandles.styles.topLeft.display = 'block';\n        this.selectionHandles.styles.topLeftHitArea.display = 'block';\n\n        if (this.isPartRange(row, col)) {\n          this.selectionHandles.styles.bottomRight.display = 'none';\n          this.selectionHandles.styles.bottomRightHitArea.display = 'none';\n        } else {\n          this.selectionHandles.styles.bottomRight.display = 'block';\n          this.selectionHandles.styles.bottomRightHitArea.display = 'block';\n        }\n      } else {\n        this.selectionHandles.styles.topLeft.display = 'none';\n        this.selectionHandles.styles.bottomRight.display = 'none';\n        this.selectionHandles.styles.topLeftHitArea.display = 'none';\n        this.selectionHandles.styles.bottomRightHitArea.display = 'none';\n      }\n\n      if (row === this.wot.wtSettings.getSetting('fixedRowsTop') || col === this.wot.wtSettings.getSetting('fixedColumnsLeft')) {\n        this.selectionHandles.styles.topLeft.zIndex = '9999';\n        this.selectionHandles.styles.topLeftHitArea.zIndex = '9999';\n      } else {\n        this.selectionHandles.styles.topLeft.zIndex = '';\n        this.selectionHandles.styles.topLeftHitArea.zIndex = '';\n      }\n    }\n\n    /**\n     * Show border around one or many cells\n     *\n     * @param {Array} corners\n     */\n\n  }, {\n    key: 'appear',\n    value: function appear(corners) {\n      if (this.disabled) {\n        return;\n      }\n\n      var fromRow = void 0;\n      var toRow = void 0;\n      var fromColumn = void 0;\n      var toColumn = void 0;\n\n      var rowsCount = this.wot.wtTable.getRenderedRowsCount();\n\n      for (var i = 0; i < rowsCount; i += 1) {\n        var s = this.wot.wtTable.rowFilter.renderedToSource(i);\n\n        if (s >= corners[0] && s <= corners[2]) {\n          fromRow = s;\n          break;\n        }\n      }\n\n      for (var _i = rowsCount - 1; _i >= 0; _i -= 1) {\n        var _s = this.wot.wtTable.rowFilter.renderedToSource(_i);\n\n        if (_s >= corners[0] && _s <= corners[2]) {\n          toRow = _s;\n          break;\n        }\n      }\n\n      var columnsCount = this.wot.wtTable.getRenderedColumnsCount();\n\n      for (var _i2 = 0; _i2 < columnsCount; _i2 += 1) {\n        var _s2 = this.wot.wtTable.columnFilter.renderedToSource(_i2);\n\n        if (_s2 >= corners[1] && _s2 <= corners[3]) {\n          fromColumn = _s2;\n          break;\n        }\n      }\n\n      for (var _i3 = columnsCount - 1; _i3 >= 0; _i3 -= 1) {\n        var _s3 = this.wot.wtTable.columnFilter.renderedToSource(_i3);\n\n        if (_s3 >= corners[1] && _s3 <= corners[3]) {\n          toColumn = _s3;\n          break;\n        }\n      }\n      if (fromRow === void 0 || fromColumn === void 0) {\n        this.disappear();\n\n        return;\n      }\n      var fromTD = this.wot.wtTable.getCell(new _coords2.default(fromRow, fromColumn));\n      var isMultiple = fromRow !== toRow || fromColumn !== toColumn;\n      var toTD = isMultiple ? this.wot.wtTable.getCell(new _coords2.default(toRow, toColumn)) : fromTD;\n      var fromOffset = (0, _element.offset)(fromTD);\n      var toOffset = isMultiple ? (0, _element.offset)(toTD) : fromOffset;\n      var containerOffset = (0, _element.offset)(this.wot.wtTable.TABLE);\n      var minTop = fromOffset.top;\n      var minLeft = fromOffset.left;\n\n      var left = minLeft - containerOffset.left - 1;\n      var width = toOffset.left + (0, _element.outerWidth)(toTD) - minLeft;\n\n      if (this.isEntireColumnSelected(fromRow, toRow)) {\n        var modifiedValues = this.getDimensionsFromHeader('columns', fromColumn, toColumn, containerOffset);\n        var fromTH = null;\n\n        if (modifiedValues) {\n          var _modifiedValues = _slicedToArray(modifiedValues, 3);\n\n          fromTH = _modifiedValues[0];\n          left = _modifiedValues[1];\n          width = _modifiedValues[2];\n        }\n\n        if (fromTH) {\n          fromTD = fromTH;\n        }\n      }\n\n      var top = minTop - containerOffset.top - 1;\n      var height = toOffset.top + (0, _element.outerHeight)(toTD) - minTop;\n\n      if (this.isEntireRowSelected(fromColumn, toColumn)) {\n        var _modifiedValues2 = this.getDimensionsFromHeader('rows', fromRow, toRow, containerOffset);\n        var _fromTH = null;\n\n        if (_modifiedValues2) {\n          var _modifiedValues3 = _slicedToArray(_modifiedValues2, 3);\n\n          _fromTH = _modifiedValues3[0];\n          top = _modifiedValues3[1];\n          height = _modifiedValues3[2];\n        }\n\n        if (_fromTH) {\n          fromTD = _fromTH;\n        }\n      }\n\n      var style = (0, _element.getComputedStyle)(fromTD);\n\n      if (parseInt(style.borderTopWidth, 10) > 0) {\n        top += 1;\n        height = height > 0 ? height - 1 : 0;\n      }\n      if (parseInt(style.borderLeftWidth, 10) > 0) {\n        left += 1;\n        width = width > 0 ? width - 1 : 0;\n      }\n\n      this.topStyle.top = top + 'px';\n      this.topStyle.left = left + 'px';\n      this.topStyle.width = width + 'px';\n      this.topStyle.display = 'block';\n\n      this.leftStyle.top = top + 'px';\n      this.leftStyle.left = left + 'px';\n      this.leftStyle.height = height + 'px';\n      this.leftStyle.display = 'block';\n\n      var delta = Math.floor(this.settings.border.width / 2);\n\n      this.bottomStyle.top = top + height - delta + 'px';\n      this.bottomStyle.left = left + 'px';\n      this.bottomStyle.width = width + 'px';\n      this.bottomStyle.display = 'block';\n\n      this.rightStyle.top = top + 'px';\n      this.rightStyle.left = left + width - delta + 'px';\n      this.rightStyle.height = height + 1 + 'px';\n      this.rightStyle.display = 'block';\n\n      var cornerVisibleSetting = this.settings.border.cornerVisible;\n      cornerVisibleSetting = typeof cornerVisibleSetting === 'function' ? cornerVisibleSetting(this.settings.layerLevel) : cornerVisibleSetting;\n\n      var hookResult = this.wot.getSetting('onModifyGetCellCoords', toRow, toColumn);\n      var checkRow = toRow,\n          checkCol = toColumn;\n\n\n      if (hookResult && Array.isArray(hookResult)) {\n        var _hookResult = _slicedToArray(hookResult, 4);\n\n        checkRow = _hookResult[2];\n        checkCol = _hookResult[3];\n      }\n\n      if ((0, _browser.isMobileBrowser)() || !cornerVisibleSetting || this.isPartRange(checkRow, checkCol)) {\n        this.cornerStyle.display = 'none';\n      } else {\n        this.cornerStyle.top = top + height - 4 + 'px';\n        this.cornerStyle.left = left + width - 4 + 'px';\n        this.cornerStyle.borderRightWidth = this.cornerDefaultStyle.borderWidth;\n        this.cornerStyle.width = this.cornerDefaultStyle.width;\n\n        // Hide the fill handle, so the possible further adjustments won't force unneeded scrollbars.\n        this.cornerStyle.display = 'none';\n\n        var trimmingContainer = (0, _element.getTrimmingContainer)(this.wot.wtTable.TABLE);\n        var trimToWindow = trimmingContainer === window;\n\n        if (trimToWindow) {\n          trimmingContainer = document.documentElement;\n        }\n\n        if (toColumn === this.wot.getSetting('totalColumns') - 1) {\n          var toTdOffsetLeft = trimToWindow ? toTD.getBoundingClientRect().left : toTD.offsetLeft;\n          var cornerRightEdge = toTdOffsetLeft + (0, _element.outerWidth)(toTD) + parseInt(this.cornerDefaultStyle.width, 10) / 2;\n          var cornerOverlappingContainer = cornerRightEdge >= (0, _element.innerWidth)(trimmingContainer);\n\n          if (cornerOverlappingContainer) {\n            this.cornerStyle.left = Math.floor(left + width - 3 - parseInt(this.cornerDefaultStyle.width, 10) / 2) + 'px';\n            this.cornerStyle.borderRightWidth = 0;\n          }\n        }\n\n        if (toRow === this.wot.getSetting('totalRows') - 1) {\n          var toTdOffsetTop = trimToWindow ? toTD.getBoundingClientRect().top : toTD.offsetTop;\n          var cornerBottomEdge = toTdOffsetTop + (0, _element.outerHeight)(toTD) + parseInt(this.cornerDefaultStyle.height, 10) / 2;\n          var _cornerOverlappingContainer = cornerBottomEdge >= (0, _element.innerHeight)(trimmingContainer);\n\n          if (_cornerOverlappingContainer) {\n            this.cornerStyle.top = Math.floor(top + height - 3 - parseInt(this.cornerDefaultStyle.height, 10) / 2) + 'px';\n            this.cornerStyle.borderBottomWidth = 0;\n          }\n        }\n\n        this.cornerStyle.display = 'block';\n      }\n\n      if ((0, _browser.isMobileBrowser)()) {\n        this.updateMultipleSelectionHandlesPosition(toRow, toColumn, top, left, width, height);\n      }\n    }\n\n    /**\n     * Check whether an entire column of cells is selected.\n     *\n     * @private\n     * @param {Number} startRowIndex Start row index.\n     * @param {Number} endRowIndex End row index.\n     */\n\n  }, {\n    key: 'isEntireColumnSelected',\n    value: function isEntireColumnSelected(startRowIndex, endRowIndex) {\n      return startRowIndex === this.wot.wtTable.getFirstRenderedRow() && endRowIndex === this.wot.wtTable.getLastRenderedRow();\n    }\n\n    /**\n     * Check whether an entire row of cells is selected.\n     *\n     * @private\n     * @param {Number} startColumnIndex Start column index.\n     * @param {Number} endColumnIndex End column index.\n     */\n\n  }, {\n    key: 'isEntireRowSelected',\n    value: function isEntireRowSelected(startColumnIndex, endColumnIndex) {\n      return startColumnIndex === this.wot.wtTable.getFirstRenderedColumn() && endColumnIndex === this.wot.wtTable.getLastRenderedColumn();\n    }\n\n    /**\n     * Get left/top index and width/height depending on the `direction` provided.\n     *\n     * @private\n     * @param {String} direction `rows` or `columns`, defines if an entire column or row is selected.\n     * @param {Number} fromIndex Start index of the selection.\n     * @param {Number} toIndex End index of the selection.\n     * @param {Number} containerOffset offset of the container.\n     * @return {Array|Boolean} Returns an array of [headerElement, left, width] or [headerElement, top, height], depending on `direction` (`false` in case of an error getting the headers).\n     */\n\n  }, {\n    key: 'getDimensionsFromHeader',\n    value: function getDimensionsFromHeader(direction, fromIndex, toIndex, containerOffset) {\n      var _this4 = this;\n\n      var rootHotElement = this.wot.wtTable.wtRootElement.parentNode;\n      var getHeaderFn = null;\n      var dimensionFn = null;\n      var entireSelectionClassname = null;\n      var index = null;\n      var dimension = null;\n      var dimensionProperty = null;\n      var startHeader = null;\n      var endHeader = null;\n\n      switch (direction) {\n        case 'rows':\n          getHeaderFn = function getHeaderFn() {\n            var _wot$wtTable;\n\n            return (_wot$wtTable = _this4.wot.wtTable).getRowHeader.apply(_wot$wtTable, arguments);\n          };\n          dimensionFn = function dimensionFn() {\n            return _element.outerHeight.apply(undefined, arguments);\n          };\n          entireSelectionClassname = 'ht__selection--rows';\n          dimensionProperty = 'top';\n\n          break;\n\n        case 'columns':\n          getHeaderFn = function getHeaderFn() {\n            var _wot$wtTable2;\n\n            return (_wot$wtTable2 = _this4.wot.wtTable).getColumnHeader.apply(_wot$wtTable2, arguments);\n          };\n          dimensionFn = function dimensionFn() {\n            return _element.outerWidth.apply(undefined, arguments);\n          };\n          entireSelectionClassname = 'ht__selection--columns';\n          dimensionProperty = 'left';\n          break;\n        default:\n      }\n\n      if (rootHotElement.className.includes(entireSelectionClassname)) {\n        var columnHeaderLevelCount = this.wot.getSetting('columnHeaders').length;\n\n        startHeader = getHeaderFn(fromIndex, columnHeaderLevelCount - 1);\n        endHeader = getHeaderFn(toIndex, columnHeaderLevelCount - 1);\n\n        if (!startHeader || !endHeader) {\n          return false;\n        }\n\n        var startHeaderOffset = (0, _element.offset)(startHeader);\n        var endOffset = (0, _element.offset)(endHeader);\n\n        if (startHeader && endHeader) {\n          index = startHeaderOffset[dimensionProperty] - containerOffset[dimensionProperty] - 1;\n          dimension = endOffset[dimensionProperty] + dimensionFn(endHeader) - startHeaderOffset[dimensionProperty];\n        }\n\n        return [startHeader, index, dimension];\n      }\n\n      return false;\n    }\n\n    /**\n     * Change border style.\n     *\n     * @private\n     * @param {String} borderElement Coordinate where add/remove border: top, right, bottom, left.\n     */\n\n  }, {\n    key: 'changeBorderStyle',\n    value: function changeBorderStyle(borderElement, border) {\n      var style = this[borderElement].style;\n      var borderStyle = border[borderElement];\n\n      if (!borderStyle || borderStyle.hide) {\n        (0, _element.addClass)(this[borderElement], 'hidden');\n      } else {\n        if ((0, _element.hasClass)(this[borderElement], 'hidden')) {\n          (0, _element.removeClass)(this[borderElement], 'hidden');\n        }\n\n        style.backgroundColor = borderStyle.color;\n\n        if (borderElement === 'top' || borderElement === 'bottom') {\n          style.height = borderStyle.width + 'px';\n        }\n\n        if (borderElement === 'right' || borderElement === 'left') {\n          style.width = borderStyle.width + 'px';\n        }\n      }\n    }\n\n    /**\n     * Change border style to default.\n     *\n     * @private\n     * @param {HTMLElement} position\n     */\n\n  }, {\n    key: 'changeBorderToDefaultStyle',\n    value: function changeBorderToDefaultStyle(position) {\n      var defaultBorder = {\n        width: 1,\n        color: '#000'\n      };\n      var style = this[position].style;\n\n      style.backgroundColor = defaultBorder.color;\n      style.width = defaultBorder.width + 'px';\n      style.height = defaultBorder.width + 'px';\n    }\n\n    /**\n     * Toggle class 'hidden' to element.\n     *\n     * @private\n     * @param {String} borderElement Coordinate where add/remove border: top, right, bottom, left.\n     * @return {Boolean}\n     */\n\n  }, {\n    key: 'toggleHiddenClass',\n    value: function toggleHiddenClass(borderElement, remove) {\n      this.changeBorderToDefaultStyle(borderElement);\n\n      if (remove) {\n        (0, _element.addClass)(this[borderElement], 'hidden');\n      } else {\n        (0, _element.removeClass)(this[borderElement], 'hidden');\n      }\n    }\n\n    /**\n     * Hide border\n     */\n\n  }, {\n    key: 'disappear',\n    value: function disappear() {\n      this.topStyle.display = 'none';\n      this.leftStyle.display = 'none';\n      this.bottomStyle.display = 'none';\n      this.rightStyle.display = 'none';\n      this.cornerStyle.display = 'none';\n\n      if ((0, _browser.isMobileBrowser)()) {\n        this.selectionHandles.styles.topLeft.display = 'none';\n        this.selectionHandles.styles.bottomRight.display = 'none';\n      }\n    }\n  }]);\n\n  return Border;\n}();\n\nexports.default = Border;\n\n/***/ }),\n/* 190 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _unicode = __webpack_require__(21);\n\nvar _mixed = __webpack_require__(11);\n\nvar _string = __webpack_require__(33);\n\nvar _array = __webpack_require__(2);\n\nvar _element = __webpack_require__(0);\n\nvar _handsontableEditor = __webpack_require__(191);\n\nvar _handsontableEditor2 = _interopRequireDefault(_handsontableEditor);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar AutocompleteEditor = _handsontableEditor2.default.prototype.extend();\n\n/**\n * @private\n * @editor AutocompleteEditor\n * @class AutocompleteEditor\n * @dependencies HandsontableEditor\n */\nAutocompleteEditor.prototype.init = function () {\n  for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n    args[_key] = arguments[_key];\n  }\n\n  _handsontableEditor2.default.prototype.init.apply(this, args);\n  this.query = null;\n  this.strippedChoices = [];\n  this.rawChoices = [];\n};\n\nAutocompleteEditor.prototype.getValue = function () {\n  var _this2 = this;\n\n  var selectedValue = this.rawChoices.find(function (value) {\n    var strippedValue = _this2.stripValueIfNeeded(value);\n\n    return strippedValue === _this2.TEXTAREA.value;\n  });\n\n  if ((0, _mixed.isDefined)(selectedValue)) {\n    return selectedValue;\n  }\n\n  return this.TEXTAREA.value;\n};\n\nAutocompleteEditor.prototype.createElements = function () {\n  for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n    args[_key2] = arguments[_key2];\n  }\n\n  _handsontableEditor2.default.prototype.createElements.apply(this, args);\n\n  (0, _element.addClass)(this.htContainer, 'autocompleteEditor');\n  (0, _element.addClass)(this.htContainer, window.navigator.platform.indexOf('Mac') === -1 ? '' : 'htMacScroll');\n};\n\nvar skipOne = false;\nfunction onBeforeKeyDown(event) {\n  skipOne = false;\n  var editor = this.getActiveEditor();\n\n  if ((0, _unicode.isPrintableChar)(event.keyCode) || event.keyCode === _unicode.KEY_CODES.BACKSPACE || event.keyCode === _unicode.KEY_CODES.DELETE || event.keyCode === _unicode.KEY_CODES.INSERT) {\n    var timeOffset = 0;\n\n    // on ctl+c / cmd+c don't update suggestion list\n    if (event.keyCode === _unicode.KEY_CODES.C && (event.ctrlKey || event.metaKey)) {\n      return;\n    }\n    if (!editor.isOpened()) {\n      timeOffset += 10;\n    }\n\n    if (editor.htEditor) {\n      editor.instance._registerTimeout(function () {\n        editor.queryChoices(editor.TEXTAREA.value);\n        skipOne = true;\n      }, timeOffset);\n    }\n  }\n}\n\nAutocompleteEditor.prototype.prepare = function () {\n  for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n    args[_key3] = arguments[_key3];\n  }\n\n  _handsontableEditor2.default.prototype.prepare.apply(this, args);\n};\n\nAutocompleteEditor.prototype.open = function () {\n  this.instance.addHook('beforeKeyDown', onBeforeKeyDown);\n  // Ugly fix for handsontable which grab window object for autocomplete scroll listener instead table element.\n  this.TEXTAREA_PARENT.style.overflow = 'auto';\n\n  for (var _len4 = arguments.length, args = Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n    args[_key4] = arguments[_key4];\n  }\n\n  _handsontableEditor2.default.prototype.open.apply(this, args);\n  this.TEXTAREA_PARENT.style.overflow = '';\n\n  var choicesListHot = this.htEditor.getInstance();\n  var _this = this;\n  var trimDropdown = this.cellProperties.trimDropdown === void 0 ? true : this.cellProperties.trimDropdown;\n\n  this.showEditableElement();\n  this.focus();\n\n  choicesListHot.updateSettings({\n    colWidths: trimDropdown ? [(0, _element.outerWidth)(this.TEXTAREA) - 2] : void 0,\n    width: trimDropdown ? (0, _element.outerWidth)(this.TEXTAREA) + (0, _element.getScrollbarWidth)() + 2 : void 0,\n    afterRenderer: function afterRenderer(TD, row, col, prop, value) {\n      var _this$cellProperties = _this.cellProperties,\n          filteringCaseSensitive = _this$cellProperties.filteringCaseSensitive,\n          allowHtml = _this$cellProperties.allowHtml;\n\n      var cellValue = (0, _mixed.stringify)(value);\n      var indexOfMatch = void 0;\n      var match = void 0;\n\n      if (cellValue && !allowHtml) {\n        indexOfMatch = filteringCaseSensitive === true ? cellValue.indexOf(this.query) : cellValue.toLowerCase().indexOf(_this.query.toLowerCase());\n\n        if (indexOfMatch !== -1) {\n          match = cellValue.substr(indexOfMatch, _this.query.length);\n          cellValue = cellValue.replace(match, '<strong>' + match + '</strong>');\n        }\n      }\n      TD.innerHTML = cellValue;\n    },\n\n    autoColumnSize: true,\n    modifyColWidth: function modifyColWidth(width, col) {\n      // workaround for <strong> text overlapping the dropdown, not really accurate\n      var autoWidths = this.getPlugin('autoColumnSize').widths;\n      var columnWidth = width;\n\n      if (autoWidths[col]) {\n        columnWidth = autoWidths[col];\n      }\n\n      return trimDropdown ? columnWidth : columnWidth + 15;\n    }\n  });\n\n  // Add additional space for autocomplete holder\n  this.htEditor.view.wt.wtTable.holder.parentNode.style['padding-right'] = (0, _element.getScrollbarWidth)() + 2 + 'px';\n\n  if (skipOne) {\n    skipOne = false;\n  }\n\n  _this.instance._registerTimeout(function () {\n    _this.queryChoices(_this.TEXTAREA.value);\n  });\n};\n\nAutocompleteEditor.prototype.queryChoices = function (query) {\n  var _this3 = this;\n\n  this.query = query;\n  var source = this.cellProperties.source;\n\n  if (typeof source === 'function') {\n    source.call(this.cellProperties, query, function (choices) {\n      _this3.rawChoices = choices;\n      _this3.updateChoicesList(_this3.stripValuesIfNeeded(choices));\n    });\n  } else if (Array.isArray(source)) {\n    this.rawChoices = source;\n    this.updateChoicesList(this.stripValuesIfNeeded(source));\n  } else {\n    this.updateChoicesList([]);\n  }\n};\n\nAutocompleteEditor.prototype.updateChoicesList = function (choicesList) {\n  var pos = (0, _element.getCaretPosition)(this.TEXTAREA);\n  var endPos = (0, _element.getSelectionEndPosition)(this.TEXTAREA);\n  var sortByRelevanceSetting = this.cellProperties.sortByRelevance;\n  var filterSetting = this.cellProperties.filter;\n  var orderByRelevance = null;\n  var highlightIndex = null;\n  var choices = choicesList;\n\n  if (sortByRelevanceSetting) {\n    orderByRelevance = AutocompleteEditor.sortByRelevance(this.stripValueIfNeeded(this.getValue()), choices, this.cellProperties.filteringCaseSensitive);\n  }\n  var orderByRelevanceLength = Array.isArray(orderByRelevance) ? orderByRelevance.length : 0;\n\n  if (filterSetting === false) {\n    if (orderByRelevanceLength) {\n      highlightIndex = orderByRelevance[0];\n    }\n  } else {\n    var sorted = [];\n\n    for (var i = 0, choicesCount = choices.length; i < choicesCount; i++) {\n      if (sortByRelevanceSetting && orderByRelevanceLength <= i) {\n        break;\n      }\n      if (orderByRelevanceLength) {\n        sorted.push(choices[orderByRelevance[i]]);\n      } else {\n        sorted.push(choices[i]);\n      }\n    }\n\n    highlightIndex = 0;\n    choices = sorted;\n  }\n\n  this.strippedChoices = choices;\n  this.htEditor.loadData((0, _array.pivot)([choices]));\n\n  this.updateDropdownHeight();\n\n  this.flipDropdownIfNeeded();\n\n  if (this.cellProperties.strict === true) {\n    this.highlightBestMatchingChoice(highlightIndex);\n  }\n\n  this.instance.listen(false);\n\n  (0, _element.setCaretPosition)(this.TEXTAREA, pos, pos === endPos ? void 0 : endPos);\n};\n\nAutocompleteEditor.prototype.flipDropdownIfNeeded = function () {\n  var textareaOffset = (0, _element.offset)(this.TEXTAREA);\n  var textareaHeight = (0, _element.outerHeight)(this.TEXTAREA);\n  var dropdownHeight = this.getDropdownHeight();\n  var trimmingContainer = (0, _element.getTrimmingContainer)(this.instance.view.wt.wtTable.TABLE);\n  var trimmingContainerScrollTop = trimmingContainer.scrollTop;\n  var headersHeight = (0, _element.outerHeight)(this.instance.view.wt.wtTable.THEAD);\n  var containerOffset = {\n    row: 0,\n    col: 0\n  };\n\n  if (trimmingContainer !== window) {\n    containerOffset = (0, _element.offset)(trimmingContainer);\n  }\n\n  var spaceAbove = textareaOffset.top - containerOffset.top - headersHeight + trimmingContainerScrollTop;\n  var spaceBelow = trimmingContainer.scrollHeight - spaceAbove - headersHeight - textareaHeight;\n  var flipNeeded = dropdownHeight > spaceBelow && spaceAbove > spaceBelow;\n\n  if (flipNeeded) {\n    this.flipDropdown(dropdownHeight);\n  } else {\n    this.unflipDropdown();\n  }\n\n  this.limitDropdownIfNeeded(flipNeeded ? spaceAbove : spaceBelow, dropdownHeight);\n\n  return flipNeeded;\n};\n\nAutocompleteEditor.prototype.limitDropdownIfNeeded = function (spaceAvailable, dropdownHeight) {\n  if (dropdownHeight > spaceAvailable) {\n    var tempHeight = 0;\n    var i = 0;\n    var lastRowHeight = 0;\n    var height = null;\n\n    do {\n      lastRowHeight = this.htEditor.getRowHeight(i) || this.htEditor.view.wt.wtSettings.settings.defaultRowHeight;\n      tempHeight += lastRowHeight;\n      i += 1;\n    } while (tempHeight < spaceAvailable);\n\n    height = tempHeight - lastRowHeight;\n\n    if (this.htEditor.flipped) {\n      this.htEditor.rootElement.style.top = parseInt(this.htEditor.rootElement.style.top, 10) + dropdownHeight - height + 'px';\n    }\n\n    this.setDropdownHeight(tempHeight - lastRowHeight);\n  }\n};\n\nAutocompleteEditor.prototype.flipDropdown = function (dropdownHeight) {\n  var dropdownStyle = this.htEditor.rootElement.style;\n\n  dropdownStyle.position = 'absolute';\n  dropdownStyle.top = -dropdownHeight + 'px';\n\n  this.htEditor.flipped = true;\n};\n\nAutocompleteEditor.prototype.unflipDropdown = function () {\n  var dropdownStyle = this.htEditor.rootElement.style;\n\n  if (dropdownStyle.position === 'absolute') {\n    dropdownStyle.position = '';\n    dropdownStyle.top = '';\n  }\n\n  this.htEditor.flipped = void 0;\n};\n\nAutocompleteEditor.prototype.updateDropdownHeight = function () {\n  var currentDropdownWidth = this.htEditor.getColWidth(0) + (0, _element.getScrollbarWidth)() + 2;\n  var trimDropdown = this.cellProperties.trimDropdown;\n\n  this.htEditor.updateSettings({\n    height: this.getDropdownHeight(),\n    width: trimDropdown ? void 0 : currentDropdownWidth\n  });\n\n  this.htEditor.view.wt.wtTable.alignOverlaysWithTrimmingContainer();\n};\n\nAutocompleteEditor.prototype.setDropdownHeight = function (height) {\n  this.htEditor.updateSettings({\n    height: height\n  });\n};\n\nAutocompleteEditor.prototype.finishEditing = function (restoreOriginalValue) {\n  for (var _len5 = arguments.length, args = Array(_len5 > 1 ? _len5 - 1 : 0), _key5 = 1; _key5 < _len5; _key5++) {\n    args[_key5 - 1] = arguments[_key5];\n  }\n\n  _handsontableEditor2.default.prototype.finishEditing.apply(this, [restoreOriginalValue].concat(args));\n};\n\nAutocompleteEditor.prototype.highlightBestMatchingChoice = function (index) {\n  if (typeof index === 'number') {\n    this.htEditor.selectCell(index, 0, void 0, void 0, void 0, false);\n  } else {\n    this.htEditor.deselectCell();\n  }\n};\n\n/**\n * Filters and sorts by relevance\n * @param value\n * @param choices\n * @param caseSensitive\n * @returns {Array} array of indexes in original choices array\n */\nAutocompleteEditor.sortByRelevance = function (value, choices, caseSensitive) {\n  var choicesRelevance = [];\n  var currentItem = void 0;\n  var valueLength = value.length;\n  var valueIndex = void 0;\n  var charsLeft = void 0;\n  var result = [];\n  var i = void 0;\n  var choicesCount = choices.length;\n\n  if (valueLength === 0) {\n    for (i = 0; i < choicesCount; i++) {\n      result.push(i);\n    }\n    return result;\n  }\n\n  for (i = 0; i < choicesCount; i++) {\n    currentItem = (0, _string.stripTags)((0, _mixed.stringify)(choices[i]));\n\n    if (caseSensitive) {\n      valueIndex = currentItem.indexOf(value);\n    } else {\n      valueIndex = currentItem.toLowerCase().indexOf(value.toLowerCase());\n    }\n\n    if (valueIndex !== -1) {\n      charsLeft = currentItem.length - valueIndex - valueLength;\n\n      choicesRelevance.push({\n        baseIndex: i,\n        index: valueIndex,\n        charsLeft: charsLeft,\n        value: currentItem\n      });\n    }\n  }\n\n  choicesRelevance.sort(function (a, b) {\n\n    if (b.index === -1) {\n      return -1;\n    }\n    if (a.index === -1) {\n      return 1;\n    }\n\n    if (a.index < b.index) {\n      return -1;\n    } else if (b.index < a.index) {\n      return 1;\n    } else if (a.index === b.index) {\n      if (a.charsLeft < b.charsLeft) {\n        return -1;\n      } else if (a.charsLeft > b.charsLeft) {\n        return 1;\n      }\n    }\n\n    return 0;\n  });\n\n  for (i = 0, choicesCount = choicesRelevance.length; i < choicesCount; i++) {\n    result.push(choicesRelevance[i].baseIndex);\n  }\n\n  return result;\n};\n\nAutocompleteEditor.prototype.getDropdownHeight = function () {\n  var firstRowHeight = this.htEditor.getInstance().getRowHeight(0) || 23;\n  var visibleRows = this.cellProperties.visibleRows;\n\n  return this.strippedChoices.length >= visibleRows ? visibleRows * firstRowHeight : this.strippedChoices.length * firstRowHeight + 8;\n};\n\nAutocompleteEditor.prototype.stripValueIfNeeded = function (value) {\n  return this.stripValuesIfNeeded([value])[0];\n};\n\nAutocompleteEditor.prototype.stripValuesIfNeeded = function (values) {\n  var allowHtml = this.cellProperties.allowHtml;\n\n\n  var stringifiedValues = (0, _array.arrayMap)(values, function (value) {\n    return (0, _mixed.stringify)(value);\n  });\n  var strippedValues = (0, _array.arrayMap)(stringifiedValues, function (value) {\n    return allowHtml ? value : (0, _string.stripTags)(value);\n  });\n\n  return strippedValues;\n};\n\nAutocompleteEditor.prototype.allowKeyEventPropagation = function (keyCode) {\n  var selectedRange = this.htEditor.getSelectedRangeLast();\n  var selected = { row: selectedRange ? selectedRange.from.row : -1 };\n  var allowed = false;\n\n  if (keyCode === _unicode.KEY_CODES.ARROW_DOWN && selected.row > 0 && selected.row < this.htEditor.countRows() - 1) {\n    allowed = true;\n  }\n  if (keyCode === _unicode.KEY_CODES.ARROW_UP && selected.row > -1) {\n    allowed = true;\n  }\n\n  return allowed;\n};\n\nAutocompleteEditor.prototype.close = function () {\n  this.instance.removeHook('beforeKeyDown', onBeforeKeyDown);\n\n  for (var _len6 = arguments.length, args = Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {\n    args[_key6] = arguments[_key6];\n  }\n\n  _handsontableEditor2.default.prototype.close.apply(this, args);\n};\n\nAutocompleteEditor.prototype.discardEditor = function () {\n  for (var _len7 = arguments.length, args = Array(_len7), _key7 = 0; _key7 < _len7; _key7++) {\n    args[_key7] = arguments[_key7];\n  }\n\n  _handsontableEditor2.default.prototype.discardEditor.apply(this, args);\n\n  this.instance.view.render();\n};\n\nexports.default = AutocompleteEditor;\n\n/***/ }),\n/* 191 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _unicode = __webpack_require__(21);\n\nvar _object = __webpack_require__(1);\n\nvar _element = __webpack_require__(0);\n\nvar _event = __webpack_require__(13);\n\nvar _textEditor = __webpack_require__(59);\n\nvar _textEditor2 = _interopRequireDefault(_textEditor);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar HandsontableEditor = _textEditor2.default.prototype.extend();\n\n/**\n * @private\n * @editor HandsontableEditor\n * @class HandsontableEditor\n * @dependencies TextEditor\n */\nHandsontableEditor.prototype.createElements = function () {\n  for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n    args[_key] = arguments[_key];\n  }\n\n  _textEditor2.default.prototype.createElements.apply(this, args);\n\n  var DIV = document.createElement('DIV');\n  DIV.className = 'handsontableEditor';\n  this.TEXTAREA_PARENT.appendChild(DIV);\n\n  this.htContainer = DIV;\n  this.assignHooks();\n};\n\nHandsontableEditor.prototype.prepare = function (td, row, col, prop, value, cellProperties) {\n  for (var _len2 = arguments.length, args = Array(_len2 > 6 ? _len2 - 6 : 0), _key2 = 6; _key2 < _len2; _key2++) {\n    args[_key2 - 6] = arguments[_key2];\n  }\n\n  _textEditor2.default.prototype.prepare.apply(this, [td, row, col, prop, value, cellProperties].concat(args));\n\n  var parent = this;\n  var options = {\n    startRows: 0,\n    startCols: 0,\n    minRows: 0,\n    minCols: 0,\n    className: 'listbox',\n    copyPaste: false,\n    autoColumnSize: false,\n    autoRowSize: false,\n    readOnly: true,\n    fillHandle: false,\n    autoWrapCol: false,\n    autoWrapRow: false,\n    afterOnCellMouseDown: function afterOnCellMouseDown(_, coords) {\n      var sourceValue = this.getSourceData(coords.row, coords.col);\n\n      // if the value is undefined then it means we don't want to set the value\n      if (sourceValue !== void 0) {\n        parent.setValue(sourceValue);\n      }\n      parent.instance.destroyEditor();\n    }\n  };\n\n  if (this.cellProperties.handsontable) {\n    (0, _object.extend)(options, cellProperties.handsontable);\n  }\n  this.htOptions = options;\n};\n\nvar onBeforeKeyDown = function onBeforeKeyDown(event) {\n  if ((0, _event.isImmediatePropagationStopped)(event)) {\n    return;\n  }\n  var editor = this.getActiveEditor();\n\n  var innerHOT = editor.htEditor.getInstance();\n\n  var rowToSelect = void 0;\n  var selectedRow = void 0;\n\n  if (event.keyCode === _unicode.KEY_CODES.ARROW_DOWN) {\n    if (!innerHOT.getSelectedLast() && !innerHOT.flipped) {\n      rowToSelect = 0;\n    } else if (innerHOT.getSelectedLast()) {\n      if (innerHOT.flipped) {\n        rowToSelect = innerHOT.getSelectedLast()[0] + 1;\n      } else if (!innerHOT.flipped) {\n        var lastRow = innerHOT.countRows() - 1;\n        selectedRow = innerHOT.getSelectedLast()[0];\n        rowToSelect = Math.min(lastRow, selectedRow + 1);\n      }\n    }\n  } else if (event.keyCode === _unicode.KEY_CODES.ARROW_UP) {\n    if (!innerHOT.getSelectedLast() && innerHOT.flipped) {\n      rowToSelect = innerHOT.countRows() - 1;\n    } else if (innerHOT.getSelectedLast()) {\n      if (innerHOT.flipped) {\n        selectedRow = innerHOT.getSelectedLast()[0];\n        rowToSelect = Math.max(0, selectedRow - 1);\n      } else {\n        selectedRow = innerHOT.getSelectedLast()[0];\n        rowToSelect = selectedRow - 1;\n      }\n    }\n  }\n\n  if (rowToSelect !== void 0) {\n    if (rowToSelect < 0 || innerHOT.flipped && rowToSelect > innerHOT.countRows() - 1) {\n      innerHOT.deselectCell();\n    } else {\n      innerHOT.selectCell(rowToSelect, 0);\n    }\n    if (innerHOT.getData().length) {\n      event.preventDefault();\n      (0, _event.stopImmediatePropagation)(event);\n\n      editor.instance.listen();\n      editor.TEXTAREA.focus();\n    }\n  }\n};\n\nHandsontableEditor.prototype.open = function () {\n  this.instance.addHook('beforeKeyDown', onBeforeKeyDown);\n\n  for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n    args[_key3] = arguments[_key3];\n  }\n\n  _textEditor2.default.prototype.open.apply(this, args);\n\n  if (this.htEditor) {\n    this.htEditor.destroy();\n  }\n\n  if (this.htContainer.style.display === 'none') {\n    this.htContainer.style.display = '';\n  }\n\n  // Construct and initialise a new Handsontable\n  this.htEditor = new this.instance.constructor(this.htContainer, this.htOptions);\n  this.htEditor.init();\n  this.htEditor.rootElement.style.display = '';\n\n  if (this.cellProperties.strict) {\n    this.htEditor.selectCell(0, 0);\n  } else {\n    this.htEditor.deselectCell();\n  }\n\n  (0, _element.setCaretPosition)(this.TEXTAREA, 0, this.TEXTAREA.value.length);\n};\n\nHandsontableEditor.prototype.close = function () {\n  this.htEditor.rootElement.style.display = 'none';\n  this.instance.removeHook('beforeKeyDown', onBeforeKeyDown);\n\n  for (var _len4 = arguments.length, args = Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n    args[_key4] = arguments[_key4];\n  }\n\n  _textEditor2.default.prototype.close.apply(this, args);\n};\n\nHandsontableEditor.prototype.focus = function () {\n  for (var _len5 = arguments.length, args = Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {\n    args[_key5] = arguments[_key5];\n  }\n\n  _textEditor2.default.prototype.focus.apply(this, args);\n};\n\nHandsontableEditor.prototype.beginEditing = function () {\n  var onBeginEditing = this.instance.getSettings().onBeginEditing;\n\n  if (onBeginEditing && onBeginEditing() === false) {\n    return;\n  }\n\n  for (var _len6 = arguments.length, args = Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {\n    args[_key6] = arguments[_key6];\n  }\n\n  _textEditor2.default.prototype.beginEditing.apply(this, args);\n};\n\nHandsontableEditor.prototype.finishEditing = function () {\n  if (this.htEditor && this.htEditor.isListening()) {\n    // if focus is still in the HOT editor\n    this.instance.listen(); // return the focus to the parent HOT instance\n  }\n\n  if (this.htEditor && this.htEditor.getSelectedLast()) {\n    var value = this.htEditor.getInstance().getValue();\n\n    if (value !== void 0) {\n      // if the value is undefined then it means we don't want to set the value\n      this.setValue(value);\n    }\n  }\n\n  for (var _len7 = arguments.length, args = Array(_len7), _key7 = 0; _key7 < _len7; _key7++) {\n    args[_key7] = arguments[_key7];\n  }\n\n  return _textEditor2.default.prototype.finishEditing.apply(this, args);\n};\n\nHandsontableEditor.prototype.assignHooks = function () {\n  var _this = this;\n\n  this.instance.addHook('afterDestroy', function () {\n    if (_this.htEditor) {\n      _this.htEditor.destroy();\n    }\n  });\n};\n\nexports.default = HandsontableEditor;\n\n/***/ }),\n/* 192 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports.getNormalizedDate = getNormalizedDate;\n/* eslint-disable import/prefer-default-export */\n\n/**\n * Get normalized Date object for the ISO formatted date strings.\n * Natively, the date object parsed from a ISO 8601 string will be offsetted by the timezone difference, which may result in returning a wrong date.\n * See: Github issue #3338.\n *\n * @param {String} dateString String representing the date.\n * @returns {Date} The proper Date object.\n */\nfunction getNormalizedDate(dateString) {\n  var nativeDate = new Date(dateString);\n\n  // NaN if dateString is not in ISO format\n  if (!isNaN(new Date(dateString + \"T00:00\").getDate())) {\n\n    // Compensate timezone offset\n    return new Date(nativeDate.getTime() + nativeDate.getTimezoneOffset() * 60000);\n  }\n\n  return nativeDate;\n}\n\n/***/ }),\n/* 193 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n/**\n * SheetClip - Spreadsheet Clipboard Parser\n * version 0.2\n *\n * This tiny library transforms JavaScript arrays to strings that are pasteable by LibreOffice, OpenOffice,\n * Google Docs and Microsoft Excel.\n *\n * Copyright 2012, Marcin Warpechowski\n * Licensed under the MIT license.\n * http://github.com/warpech/sheetclip/\n */\n/*jslint white: true*/\n(function (global) {\n  \"use strict\";\n\n  function countQuotes(str) {\n    return str.split('\"').length - 1;\n  }\n\n  var SheetClip = {\n    /**\n     * Decode spreadsheet string into array\n     *\n     * @param {String} str\n     * @returns {Array}\n     */\n    parse: function parse(str) {\n      var r,\n          rLen,\n          rows,\n          arr = [],\n          a = 0,\n          c,\n          cLen,\n          multiline,\n          last;\n\n      rows = str.split('\\n');\n\n      if (rows.length > 1 && rows[rows.length - 1] === '') {\n        rows.pop();\n      }\n      for (r = 0, rLen = rows.length; r < rLen; r += 1) {\n        rows[r] = rows[r].split('\\t');\n\n        for (c = 0, cLen = rows[r].length; c < cLen; c += 1) {\n          if (!arr[a]) {\n            arr[a] = [];\n          }\n          if (multiline && c === 0) {\n            last = arr[a].length - 1;\n            arr[a][last] = arr[a][last] + '\\n' + rows[r][0];\n\n            if (multiline && countQuotes(rows[r][0]) & 1) {\n              //& 1 is a bitwise way of performing mod 2\n              multiline = false;\n              arr[a][last] = arr[a][last].substring(0, arr[a][last].length - 1).replace(/\"\"/g, '\"');\n            }\n          } else {\n            if (c === cLen - 1 && rows[r][c].indexOf('\"') === 0 && countQuotes(rows[r][c]) & 1) {\n              arr[a].push(rows[r][c].substring(1).replace(/\"\"/g, '\"'));\n              multiline = true;\n            } else {\n              arr[a].push(rows[r][c].replace(/\"\"/g, '\"'));\n              multiline = false;\n            }\n          }\n        }\n        if (!multiline) {\n          a += 1;\n        }\n      }\n\n      return arr;\n    },\n\n    /**\n     * Encode array into valid spreadsheet string\n     *\n     * @param arr\n     * @returns {String}\n     */\n    stringify: function stringify(arr) {\n      var r,\n          rLen,\n          c,\n          cLen,\n          str = '',\n          val;\n\n      for (r = 0, rLen = arr.length; r < rLen; r += 1) {\n        cLen = arr[r].length;\n\n        for (c = 0; c < cLen; c += 1) {\n          if (c > 0) {\n            str += '\\t';\n          }\n          val = arr[r][c];\n\n          if (typeof val === 'string') {\n            if (val.indexOf('\\n') > -1) {\n              str += '\"' + val.replace(/\"/g, '\"\"') + '\"';\n            } else {\n              str += val;\n            }\n          } else if (val === null || val === void 0) {\n            // void 0 resolves to undefined\n            str += '';\n          } else {\n            str += val;\n          }\n        }\n\n        if (r !== rLen - 1) {\n          str += '\\n';\n        }\n      }\n\n      return str;\n    }\n  };\n\n  if (true) {\n    exports.parse = SheetClip.parse;\n    exports.stringify = SheetClip.stringify;\n  } else {}\n})(window);\n\n/***/ }),\n/* 194 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports.mouseDown = mouseDown;\nexports.mouseOver = mouseOver;\nexports.handleMouseEvent = handleMouseEvent;\n\nvar _event = __webpack_require__(13);\n\nvar _src = __webpack_require__(4);\n\n/**\n * MouseDown handler.\n *\n * @param {Object} options\n * @param {Boolean} options.isShiftKey The flag which indicates if the shift key is pressed.\n * @param {Boolean} options.isLeftClick The flag which indicates if the left mouse button is pressed.\n * @param {Boolean} options.isRightClick The flag which indicates if the right mouse button is pressed.\n * @param {CellRange} options.coords The CellCoords object with defined visual coordinates.\n * @param {Selection} options.selection The Selection class instance.\n * @param {Object} options.controller An object with keys `row`, `column`, `cell` which indicate what\n *                                    operation will be performed in later selection stages.\n */\nfunction mouseDown(_ref) {\n  var isShiftKey = _ref.isShiftKey,\n      isLeftClick = _ref.isLeftClick,\n      isRightClick = _ref.isRightClick,\n      coords = _ref.coords,\n      selection = _ref.selection,\n      controller = _ref.controller;\n\n  var currentSelection = selection.isSelected() ? selection.getSelectedRange().current() : null;\n  var selectedCorner = selection.isSelectedByCorner();\n  var selectedRow = selection.isSelectedByRowHeader();\n\n  if (isShiftKey && currentSelection) {\n    if (coords.row >= 0 && coords.col >= 0 && !controller.cells) {\n      selection.setRangeEnd(coords);\n    } else if ((selectedCorner || selectedRow) && coords.row >= 0 && coords.col >= 0 && !controller.cells) {\n      selection.setRangeEnd(new _src.CellCoords(coords.row, coords.col));\n    } else if (selectedCorner && coords.row < 0 && !controller.column) {\n      selection.setRangeEnd(new _src.CellCoords(currentSelection.to.row, coords.col));\n    } else if (selectedRow && coords.col < 0 && !controller.row) {\n      selection.setRangeEnd(new _src.CellCoords(coords.row, currentSelection.to.col));\n    } else if ((!selectedCorner && !selectedRow && coords.col < 0 || selectedCorner && coords.col < 0) && !controller.row) {\n      selection.selectRows(currentSelection.from.row, coords.row);\n    } else if ((!selectedCorner && !selectedRow && coords.row < 0 || selectedRow && coords.row < 0) && !controller.column) {\n      selection.selectColumns(currentSelection.from.col, coords.col);\n    }\n  } else {\n    var newCoord = new _src.CellCoords(coords.row, coords.col);\n\n    if (newCoord.row < 0) {\n      newCoord.row = 0;\n    }\n    if (newCoord.col < 0) {\n      newCoord.col = 0;\n    }\n\n    var allowRightClickSelection = !selection.inInSelection(newCoord);\n    var performSelection = isLeftClick || isRightClick && allowRightClickSelection;\n\n    // clicked row header and when some column was selected\n    if (coords.row < 0 && coords.col >= 0 && !controller.column) {\n      if (performSelection) {\n        selection.selectColumns(coords.col);\n      }\n\n      // clicked column header and when some row was selected\n    } else if (coords.col < 0 && coords.row >= 0 && !controller.row) {\n      if (performSelection) {\n        selection.selectRows(coords.row);\n      }\n    } else if (coords.col >= 0 && coords.row >= 0 && !controller.cells) {\n      if (performSelection) {\n        selection.setRangeStart(coords);\n      }\n    } else if (coords.col < 0 && coords.row < 0) {\n      selection.setRangeStart(coords);\n    }\n  }\n}\n\n/**\n * MouseOver handler.\n *\n * @param {Object} options\n * @param {Boolean} options.isLeftClick\n * @param {CellRange} options.coords The CellCoords object with defined visual coordinates.\n * @param {Selection} options.selection The Selection class instance.\n * @param {Object} options.controller An object with keys `row`, `column`, `cell` which indicate what\n *                                    operation will be performed in later selection stages.\n */\nfunction mouseOver(_ref2) {\n  var isLeftClick = _ref2.isLeftClick,\n      coords = _ref2.coords,\n      selection = _ref2.selection,\n      controller = _ref2.controller;\n\n  if (!isLeftClick) {\n    return;\n  }\n\n  var selectedRow = selection.isSelectedByRowHeader();\n  var selectedColumn = selection.isSelectedByColumnHeader();\n  var countCols = selection.tableProps.countCols();\n  var countRows = selection.tableProps.countRows();\n\n  if (selectedColumn && !controller.column) {\n    selection.setRangeEnd(new _src.CellCoords(countRows - 1, coords.col));\n  } else if (selectedRow && !controller.row) {\n    selection.setRangeEnd(new _src.CellCoords(coords.row, countCols - 1));\n  } else if (!controller.cell) {\n    selection.setRangeEnd(coords);\n  }\n}\n\nvar handlers = new Map([['mousedown', mouseDown], ['mouseover', mouseOver], ['touchstart', mouseDown]]);\n\n/**\n * Mouse handler for selection functionality.\n *\n * @param {Event} event An native event to handle.\n * @param {Object} options\n * @param {CellRange} options.coords The CellCoords object with defined visual coordinates.\n * @param {Selection} options.selection The Selection class instance.\n * @param {Object} options.controller An object with keys `row`, `column`, `cell` which indicate what\n *                                    operation will be performed in later selection stages.\n */\nfunction handleMouseEvent(event, _ref3) {\n  var coords = _ref3.coords,\n      selection = _ref3.selection,\n      controller = _ref3.controller;\n\n  handlers.get(event.type)({\n    coords: coords,\n    selection: selection,\n    controller: controller,\n    isShiftKey: event.shiftKey,\n    isLeftClick: (0, _event.isLeftClick)(event) || event.type === 'touchstart',\n    isRightClick: (0, _event.isRightClick)(event)\n  });\n}\n\n/***/ }),\n/* 195 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports.RecordTranslator = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nexports.registerIdentity = registerIdentity;\nexports.getTranslator = getTranslator;\nexports.getIdentity = getIdentity;\n\nvar _core = __webpack_require__(90);\n\nvar _core2 = _interopRequireDefault(_core);\n\nvar _object = __webpack_require__(1);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * @class RecordTranslator\n * @util\n */\nvar RecordTranslator = exports.RecordTranslator = function () {\n  function RecordTranslator(hot) {\n    _classCallCheck(this, RecordTranslator);\n\n    this.hot = hot;\n  }\n\n  /**\n   * Translate physical row index into visual.\n   *\n   * @param {Number} row Physical row index.\n   * @returns {Number} Returns visual row index.\n   */\n\n\n  _createClass(RecordTranslator, [{\n    key: 'toVisualRow',\n    value: function toVisualRow(row) {\n      return this.hot.runHooks('unmodifyRow', row);\n    }\n\n    /**\n     * Translate physical column index into visual.\n     *\n     * @param {Number} column Physical column index.\n     * @returns {Number} Returns visual column index.\n     */\n\n  }, {\n    key: 'toVisualColumn',\n    value: function toVisualColumn(column) {\n      return this.hot.runHooks('unmodifyCol', column);\n    }\n\n    /**\n     * Translate physical coordinates into visual. Can be passed as separate 2 arguments (row, column) or as an object in first\n     * argument with `row` and `column` keys.\n     *\n     * @param {Number|Object} row Physical coordinates or row index.\n     * @param {Number} [column] Physical column index.\n     * @returns {Object|Array} Returns an object with visual records or an array if coordinates passed as separate arguments.\n     */\n\n  }, {\n    key: 'toVisual',\n    value: function toVisual(row, column) {\n      var result = void 0;\n\n      if ((0, _object.isObject)(row)) {\n        result = {\n          row: this.toVisualRow(row.row),\n          column: this.toVisualColumn(row.column)\n        };\n      } else {\n        result = [this.toVisualRow(row), this.toVisualColumn(column)];\n      }\n\n      return result;\n    }\n\n    /**\n     * Translate visual row index into physical.\n     *\n     * @param {Number} row Visual row index.\n     * @returns {Number} Returns physical row index.\n     */\n\n  }, {\n    key: 'toPhysicalRow',\n    value: function toPhysicalRow(row) {\n      return this.hot.runHooks('modifyRow', row);\n    }\n\n    /**\n     * Translate visual column index into physical.\n     *\n     * @param {Number} column Visual column index.\n     * @returns {Number} Returns physical column index.\n     */\n\n  }, {\n    key: 'toPhysicalColumn',\n    value: function toPhysicalColumn(column) {\n      return this.hot.runHooks('modifyCol', column);\n    }\n\n    /**\n     * Translate visual coordinates into physical. Can be passed as separate 2 arguments (row, column) or as an object in first\n     * argument with `row` and `column` keys.\n     *\n     * @param {Number|Object} row Visual coordinates or row index.\n     * @param {Number} [column] Visual column index.\n     * @returns {Object|Array} Returns an object with physical records or an array if coordinates passed as separate arguments.\n     */\n\n  }, {\n    key: 'toPhysical',\n    value: function toPhysical(row, column) {\n      var result = void 0;\n\n      if ((0, _object.isObject)(row)) {\n        result = {\n          row: this.toPhysicalRow(row.row),\n          column: this.toPhysicalColumn(row.column)\n        };\n      } else {\n        result = [this.toPhysicalRow(row), this.toPhysicalColumn(column)];\n      }\n\n      return result;\n    }\n  }]);\n\n  return RecordTranslator;\n}();\n\nvar identities = new WeakMap();\nvar translatorSingletons = new WeakMap();\n\n/**\n * Allows to register custom identity manually.\n *\n * @param {*} identity\n * @param {*} hot\n */\nfunction registerIdentity(identity, hot) {\n  identities.set(identity, hot);\n}\n\n/**\n * Returns a cached instance of RecordTranslator or create the new one for given identity.\n *\n * @param {*} identity\n * @returns {RecordTranslator}\n */\nfunction getTranslator(identity) {\n  var instance = identity instanceof _core2.default ? identity : getIdentity(identity);\n  var singleton = void 0;\n\n  if (translatorSingletons.has(instance)) {\n    singleton = translatorSingletons.get(instance);\n  } else {\n    singleton = new RecordTranslator(instance);\n    translatorSingletons.set(instance, singleton);\n  }\n\n  return singleton;\n}\n\n/**\n * Returns mapped identity.\n *\n * @param {*} identity\n * @returns {*}\n */\nfunction getIdentity(identity) {\n  if (!identities.has(identity)) {\n    throw Error('Record translator was not registered for this object identity');\n  }\n\n  return identities.get(identity);\n}\n\n/***/ }),\n/* 196 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports.registerAsRootInstance = registerAsRootInstance;\nexports.hasValidParameter = hasValidParameter;\nexports.isRootInstance = isRootInstance;\nvar holder = exports.holder = new WeakMap();\n\nvar rootInstanceSymbol = exports.rootInstanceSymbol = Symbol('rootInstance');\n\n/**\n * Register an object as a root instance.\n *\n * @param  {Object} object An object to associate with root instance flag.\n */\nfunction registerAsRootInstance(object) {\n  holder.set(object, true);\n}\n\n/**\n * Check if the source of the root indication call is valid.\n *\n * @param  {Symbol} rootSymbol A symbol as a source of truth.\n * @return {Boolean}\n */\nfunction hasValidParameter(rootSymbol) {\n  return rootSymbol === rootInstanceSymbol;\n}\n\n/**\n * Check if passed an object was flagged as a root instance.\n *\n * @param  {Object} object An object to check.\n * @return {Boolean}\n */\nfunction isRootInstance(object) {\n  return holder.has(object);\n}\n\n/***/ }),\n/* 197 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\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 && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _mixed = __webpack_require__(11);\n\nvar _object = __webpack_require__(1);\n\n/**\n * @alias Options\n * @constructor\n * @description\n\n * ## Constructor options\n *\n * Constructor options are applied using an object literal passed as a second argument to the Handsontable constructor.\n *\n * ```js\n * const container = document.getElementById('example');\n * const hot = new Handsontable(container, {\n *   data: myArray,\n *   width: 400,\n *   height: 300\n * });\n * ```\n *\n * ---\n * ## Cascading configuration\n *\n * Handsontable is using *Cascading Configuration*, which is a fast way to provide configuration options\n * for the entire table, including its columns and particular cells.\n *\n * Consider the following example:\n * ```js\n * const container = document.getElementById('example');\n * const hot = new Handsontable(container, {\n *   readOnly: true,\n *   columns: [\n *     {readOnly: false},\n *     {},\n *     {}\n *   ],\n *   cells: function(row, col, prop) {\n *     var cellProperties = {};\n *\n *     if (row === 0 && col === 0) {\n *       cellProperties.readOnly = true;\n *     }\n *\n *     return cellProperties;\n *   }\n * });\n * ```\n *\n * The above notation will result in all TDs being *read only*, except for first column TDs which will be *editable*, except for the TD in top left corner which will still be *read only*.\n *\n * ### The Cascading Configuration model\n *\n * ##### 1. Constructor\n *\n * Configuration options that are provided using first-level `handsontable(container, {option: \"value\"})` and `updateSettings` method.\n *\n * ##### 2. Columns\n *\n * Configuration options that are provided using second-level object `handsontable(container, {columns: {option: \"value\"}]})`\n *\n * ##### 3. Cells\n *\n * Configuration options that are provided using third-level function `handsontable(container, {cells: function: (row, col, prop){ }})`\n *\n * ---\n * ## Architecture performance\n *\n * The Cascading Configuration model is based on prototypical inheritance. It is much faster and memory efficient\n * compared to the previous model that used jQuery extend. See: [http://jsperf.com/extending-settings](http://jsperf.com/extending-settings).\n *\n * ---\n * __Important notice:__ In order for the data separation to work properly, make sure that each instance of Handsontable has a unique `id`.\n */\nfunction DefaultSettings() {}\n\nDefaultSettings.prototype = {\n  /**\n   * License key for commercial version of Handsontable.\n   *\n   * @pro\n   * @type {String}\n   * @default 'trial'\n   * @example\n   * ```js\n   * licenseKey: '00000-00000-00000-00000-00000',\n   * ```\n   */\n  licenseKey: 'trial',\n\n  /**\n   * @description\n   * Initial data source that will be bound to the data grid __by reference__ (editing data grid alters the data source).\n   * Can be declared as an array of arrays, array of objects or a function.\n   *\n   * See [Understanding binding as reference](https://docs.handsontable.com/tutorial-data-binding.html#page-reference).\n   *\n   * @type {Array[]|Object[]|Function}\n   * @default undefined\n   * @example\n   * ```js\n   * // as an array of arrays\n   * data: [\n   *   ['A', 'B', 'C'],\n   *   ['D', 'E', 'F'],\n   *   ['G', 'H', 'J']\n   * ]\n   *\n   * // as an array of objects\n   * data: [\n   *   {id: 1, name: 'Ted Right'},\n   *   {id: 2, name: 'Frank Honest'},\n   *   {id: 3, name: 'Joan Well'},\n   *   {id: 4, name: 'Gail Polite'},\n   *   {id: 5, name: 'Michael Fair'},\n   * ]\n   * ```\n   */\n  data: void 0,\n\n  /**\n   * @description\n   * Defines the structure of a new row when data source is an array of objects.\n   *\n   * See [data-schema](https://docs.handsontable.com/tutorial-data-sources.html#page-data-schema) for more options.\n   *\n   * @type {Object}\n   * @default undefined\n   *\n   * @example\n   * ```\n   * // with data schema we can start with an empty table\n   * data: null,\n   * dataSchema: {id: null, name: {first: null, last: null}, address: null},\n   * colHeaders: ['ID', 'First Name', 'Last Name', 'Address'],\n   * columns: [\n   *   {data: 'id'},\n   *   {data: 'name.first'},\n   *   {data: 'name.last'},\n   *   {data: 'address'}\n   * ],\n   * startRows: 5,\n   * minSpareRows: 1\n   * ```\n   */\n  dataSchema: void 0,\n\n  /**\n   * Width of the grid. Can be a value or a function that returns a value.\n   *\n   * @type {Number|Function}\n   * @default undefined\n   *\n   * @example\n   * ```\n   * // as a number\n   * width: 500,\n   *\n   * // as a function\n   * width: function() {\n   *   return 500;\n   * },\n   * ```\n   */\n  width: void 0,\n\n  /**\n   * Height of the grid. Can be a number or a function that returns a number.\n   *\n   * @type {Number|Function}\n   * @default undefined\n   *\n   * @example\n   * ```js\n   * // as a number\n   * height: 500,\n   *\n   * // as a function\n   * height: function() {\n   *   return 500;\n   * },\n   * ```\n   */\n  height: void 0,\n\n  /**\n   * @description\n   * Initial number of rows.\n   *\n   * __Note:__ This option only has effect in Handsontable constructor and only if `data` option is not provided\n   *\n   * @type {Number}\n   * @default 5\n   *\n   * @example\n   * ```js\n   * // start with 15 empty rows\n   * startRows: 15,\n   * ```\n   */\n  startRows: 5,\n\n  /**\n   * @description\n   * Initial number of columns.\n   *\n   * __Note:__ This option only has effect in Handsontable constructor and only if `data` option is not provided\n   *\n   * @type {Number}\n   * @default 5\n   *\n   * @example\n   * ```js\n   * // start with 15 empty columns\n   * startCols: 15,\n   * ```\n   */\n  startCols: 5,\n\n  /**\n   * Setting `true` or `false` will enable or disable the default row headers (1, 2, 3).\n   * You can also define an array `['One', 'Two', 'Three', ...]` or a function to define the headers.\n   * If a function is set the index of the row is passed as a parameter.\n   *\n   * @type {Boolean|String[]|Function}\n   * @default undefined\n   *\n   * @example\n   * ```js\n   * // as a boolean\n   * rowHeaders: true,\n   *\n   * // as an array\n   * rowHeaders: ['1', '2', '3'],\n   *\n   * // as a function\n   * rowHeaders: function(index) {\n   *   return index + ': AB';\n   * },\n   * ```\n   */\n  rowHeaders: void 0,\n\n  /**\n   * Setting `true` or `false` will enable or disable the default column headers (A, B, C).\n   * You can also define an array `['One', 'Two', 'Three', ...]` or a function to define the headers.\n   * If a function is set, then the index of the column is passed as a parameter.\n   *\n   * @type {Boolean|String[]|Function}\n   * @default null\n   *\n   * @example\n   * ```js\n   * // as a boolean\n   * colHeaders: true,\n   *\n   * // as an array\n   * colHeaders: ['A', 'B', 'C'],\n   *\n   * // as a function\n   * colHeaders: function(index) {\n   *   return index + ': AB';\n   * },\n   * ```\n   */\n  colHeaders: null,\n\n  /**\n   * Defines column widths in pixels. Accepts number, string (that will be converted to a number), array of numbers\n   * (if you want to define column width separately for each column) or a function (if you want to set column width\n   * dynamically on each render).\n   *\n   * @type {Number|Number[]|String|String[]|Function}\n   * @default undefined\n   *\n   * @example\n   * ```js\n   * // as a number, for each column.\n   * colWidths: 100,\n   *\n   * // as a string, for each column.\n   * colWidths: '100px',\n   *\n   * // as an array, based on visual indexes. The rest of the columns have a default width.\n   * colWidths: [100, 120, 90],\n   *\n   * // as a function, based on visual indexes.\n   * colWidths: function(index) {\n   *   return index * 10;\n   * },\n   * ```\n   */\n  colWidths: void 0,\n\n  /**\n   * Defines row heights in pixels. Accepts numbers, strings (that will be converted into a number), array of numbers\n   * (if you want to define row height separately for each row) or a function (if you want to set row height dynamically\n   * on each render).\n   *\n   * If the {@link ManualRowResize} or {@link AutoRowSize} plugins are enabled, this is also the minimum height that can\n   * be set via either of those two plugins.\n   *\n   * Height should be equal or greater than 23px. Table is rendered incorrectly if height is less than 23px.\n   *\n   * @type {Number|Number[]|String|String[]|Function}\n   * @default undefined\n   *\n   * @example\n   * ```js\n   * // as a number, the same for all rows\n   * rowHeights: 100,\n   *\n   * // as a string, the same for all row\n   * rowHeights: '100px',\n   *\n   * // as an array, based on visual indexes. The rest of the rows have a default height\n   * rowHeights: [100, 120, 90],\n   *\n   * // as a function, based on visual indexes\n   * rowHeights: function(index) {\n   *   return index * 10;\n   * },\n   * ```\n   */\n  rowHeights: void 0,\n\n  /**\n   * @description\n   * Defines the cell properties and data binding for certain columns.\n   *\n   * __Note:__ Using this option sets a fixed number of columns (options `startCols`, `minCols`, `maxCols` will be ignored).\n   *\n   * See [documentation -> datasources.html](https://docs.handsontable.com/tutorial-data-sources.html#page-nested) for examples.\n   *\n   * @type {Object[]|Function}\n   * @default undefined\n   *\n   * @example\n   * ```js\n   * // as an array of objects\n   * // order of the objects in array is representation of physical indexes.\n   * columns: [\n   *   {\n   *     // column options for the first column\n   *     type: 'numeric',\n   *     numericFormat: {\n   *       pattern: '0,0.00 $'\n   *     }\n   *   },\n   *   {\n   *     // column options for the second column\n   *     type: 'text',\n   *     readOnly: true\n   *   }\n   * ],\n   *\n   * // or as a function, based on physical indexes\n   * columns: function(index) {\n   *   return {\n   *     type: index > 0 ? 'numeric' : 'text',\n   *     readOnly: index < 1\n   *   }\n   * }\n   * ```\n   */\n  columns: void 0,\n\n  /**\n   * @description\n   * Defines the cell properties for given `row`, `col`, `prop` coordinates. Any constructor or column option may be\n   * overwritten for a particular cell (row/column combination) using the `cells` property in the Handsontable constructor.\n   *\n   * __Note:__ Parameters `row` and `col` always represent __physical indexes__. Example below show how to execute\n   * operations based on the __visual__ representation of Handsontable.\n   *\n   * Possible values of `prop`:\n   * - property name for column's data source object, when dataset is an [array of objects](/tutorial-data-sources.html#page-object)\n   * - the same number as `col`, when dataset is an [array of arrays](/tutorial-data-sources.html#page-array)\n   *\n   * @type {Function}\n   * @default undefined\n   *\n   * @example\n   * ```js\n   * cells: function(row, column, prop) {\n   *   const cellProperties = {};\n   *   const visualRowIndex = this.instance.toVisualRow(row);\n   *   const visualColIndex = this.instance.toVisualColumn(column);\n   *\n   *   if (visualRowIndex === 0 && visualColIndex === 0) {\n   *     cellProperties.readOnly = true;\n   *   }\n   *\n   *   return cellProperties;\n   * },\n   * ```\n   */\n  cells: void 0,\n\n  /**\n   * Any constructor or column option may be overwritten for a particular cell (row/column combination), using `cell`\n   * array passed to the Handsontable constructor.\n   *\n   * @type {Array[]}\n   * @default []\n   *\n   * @example\n   * ```js\n   * // make cell with coordinates (0, 0) read only\n   * cell: [\n   *   {\n   *     row: 0,\n   *     col: 0,\n   *     readOnly: true\n   *   }\n   * ],\n   * ```\n   */\n  cell: [],\n\n  /**\n   * @description\n   * If `true`, enables the {@link Comments} plugin, which enables an option to apply cell comments through the context menu\n   * (configurable with context menu keys `commentsAddEdit`, `commentsRemove`).\n   *\n   * To initialize Handsontable with predefined comments, provide cell coordinates and comment text values in a form of\n   * an array.\n   *\n   * See [Comments](https://docs.handsontable.com/demo-comments_.html) demo for examples.\n   *\n   * @type {Boolean|Object[]}\n   * @default false\n   *\n   * @example\n   * ```js\n   * // enable comments plugin\n   * comments: true,\n   *\n   * // or\n   * // enable comments plugin and add predefined comments\n   * comments: [\n   *   {\n   *     row: 1,\n   *     col: 1,\n   *     comment: {\n   *       value: \"Test comment\"\n   *     }\n   *   }\n   * ],\n   * ```\n   */\n  comments: false,\n\n  /**\n   * @description\n   * If `true`, enables the {@link CustomBorders} plugin, which enables an option to apply custom borders through the context\n   * menu (configurable with context menu key `borders`). To initialize Handsontable with predefined custom borders,\n   * provide cell coordinates and border styles in a form of an array.\n   *\n   * See [Custom Borders](https://docs.handsontable.com/demo-custom-borders.html) demo for examples.\n   *\n   * @type {Boolean|Object[]}\n   * @default false\n   *\n   * @example\n   * ```js\n   * // enable custom borders\n   * customBorders: true,\n   *\n   * // or\n   * // enable custom borders and start with predefined left border\n   * customBorders: [\n   *   {\n   *     range: {\n   *       from: {\n   *         row: 1,\n   *         col: 1\n   *       },\n   *       to: {\n   *         row: 3,\n   *         col: 4\n   *       }\n   *     },\n   *     left: {\n   *       width: 2,\n   *       color: 'red'\n   *     },\n   *     right: {},\n   *     top: {},\n   *     bottom: {}\n   *   }\n   * ],\n   *\n   * // or\n   * customBorders: [\n   *   {\n   *     row: 2,\n   *     col: 2,\n   *     left: {\n   *       width: 2,\n   *       color: 'red'\n   *     },\n   *     right: {\n   *       width: 1,\n   *       color: 'green'\n   *     },\n   *     top: '',\n   *     bottom: ''\n   *   }\n   * ],\n   * ```\n   */\n  customBorders: false,\n\n  /**\n   * Minimum number of rows. At least that number of rows will be created during initialization.\n   *\n   * @type {Number}\n   * @default 0\n   *\n   * @example\n   * ```js\n   * // set minimum table size to 10 rows\n   * minRows: 10,\n   * ```\n   */\n  minRows: 0,\n\n  /**\n   * Minimum number of columns. At least that number of columns will be created during initialization.\n   *\n   * @type {Number}\n   * @default 0\n   *\n   * @example\n   * ```js\n   * // set minimum table size to 10 columns\n   * minCols: 10,\n   * ```\n   */\n  minCols: 0,\n\n  /**\n   * Maximum number of rows. If set to a value lower than the initial row count, the data will be trimmed to the provided\n   * value as the number of rows.\n   *\n   * @type {Number}\n   * @default Infinity\n   *\n   * @example\n   * ```js\n   * // limit table size to maximum 300 rows\n   * maxRows: 300,\n   * ```\n   */\n  maxRows: Infinity,\n\n  /**\n   * Maximum number of cols. If set to a value lower than the initial col count, the data will be trimmed to the provided\n   * value as the number of cols.\n   *\n   * @type {Number}\n   * @default Infinity\n   *\n   * @example\n   * ```js\n   * // limit table size to maximum 300 columns\n   * maxCols: 300,\n   * ```\n   */\n  maxCols: Infinity,\n\n  /**\n   * When set to 1 (or more), Handsontable will add a new row at the end of grid if there are no more empty rows.\n   * (unless the number of rows exceeds the one set in the `maxRows` property)\n   *\n   * @type {Number}\n   * @default 0\n   *\n   * @example\n   * ```js\n   * // always add 3 empty rows at the table end\n   * minSpareRows: 3,\n   * ```\n   */\n  minSpareRows: 0,\n\n  /**\n   * When set to 1 (or more), Handsontable will add a new column at the end of grid if there are no more empty columns.\n   * (unless the number of rows exceeds the one set in the `maxCols` property)\n   *\n   * @type {Number}\n   * @default 0\n   *\n   * @example\n   * ```js\n   * // always add 3 empty columns at the table end\n   * minSpareCols: 3,\n   * ```\n   */\n  minSpareCols: 0,\n\n  /**\n   * If set to `false`, there won't be an option to insert new rows in the Context Menu.\n   *\n   * @type {Boolean}\n   * @default true\n   *\n   * @example\n   * ```js\n   * // hide \"Insert row above\" and \"Insert row below\" options from the Context Menu\n   * allowInsertRow: false,\n   * ```\n   */\n  allowInsertRow: true,\n\n  /**\n   * If set to `false`, there won't be an option to insert new columns in the Context Menu.\n   *\n   * @type {Boolean}\n   * @default true\n   *\n   * @example\n   * ```js\n   * // hide \"Insert column left\" and \"Insert column right\" options from the Context Menu\n   * allowInsertColumn: false,\n   * ```\n   */\n  allowInsertColumn: true,\n\n  /**\n   * If set to `false`, there won't be an option to remove rows in the Context Menu.\n   *\n   * @type {Boolean}\n   * @default true\n   *\n   * @example\n   * ```js\n   * // hide \"Remove row\" option from the Context Menu\n   * allowRemoveRow: false,\n   * ```\n   */\n  allowRemoveRow: true,\n\n  /**\n   * If set to `false`, there won't be an option to remove columns in the Context Menu.\n   *\n   * @type {Boolean}\n   * @default true\n   *\n   * @example\n   * ```js\n   * // hide \"Remove column\" option from the Context Menu\n   * allowRemoveColumn: false,\n   * ```\n   */\n  allowRemoveColumn: true,\n\n  /**\n   * @description\n   * Defines how the table selection reacts. The selection support three different behaviors defined as:\n   *  * `'single'` Only a single cell can be selected.\n   *  * `'range'` Multiple cells within a single range can be selected.\n   *  * `'multiple'` Multiple ranges of cells can be selected.\n   *\n   * To see how to interact with selection by getting selected data or change styles of the selected cells go to\n   * [https://docs.handsontable.com/demo-selecting-ranges.html](https://docs.handsontable.com/demo-selecting-ranges.html).\n   *\n   * @type {String}\n   * @default 'multiple'\n   *\n   * @example\n   * ```js\n   * // only one cell can be selected at a time\n   * selectionMode: 'single',\n   * ```\n   */\n  selectionMode: 'multiple',\n\n  /**\n   * Enables the fill handle (drag-down and copy-down) functionality, which shows a small rectangle in bottom\n   * right corner of the selected area, that let's you expand values to the adjacent cells.\n   *\n   * Setting to `true` enables the fillHandle plugin. Possible values: `true` (to enable in all directions),\n   * `'vertical'` or `'horizontal'` (to enable in one direction), `false` (to disable completely), an object with\n   * options: `autoInsertRow`, `direction`.\n   *\n   * If `autoInsertRow` option is `true`, fill-handler will create new rows till it reaches the last row.\n   * It is enabled by default.\n   *\n   * @type {Boolean|String|Object}\n   * @default true\n   *\n   * @example\n   * ```js\n   * // enable plugin in all directions and with autoInsertRow as true\n   * fillHandle: true,\n   *\n   * // or\n   * // enable plugin in vertical direction and with autoInsertRow as true\n   * fillHandle: 'vertical',\n   *\n   * // or\n   * fillHandle: {\n   *   // enable plugin in both directions and with autoInsertRow as false\n   *   autoInsertRow: false,\n   * },\n   *\n   * // or\n   * fillHandle: {\n   *   // enable plugin in vertical direction and with autoInsertRow as false\n   *   autoInsertRow: false,\n   *   direction: 'vertical'\n   * },\n   * ```\n   */\n  fillHandle: {\n    autoInsertRow: false\n  },\n\n  /**\n   * Allows to specify the number of fixed (or *frozen*) rows at the top of the table.\n   *\n   * @type {Number}\n   * @default 0\n   *\n   * @example\n   * ```js\n   * // freeze the first 3 rows of the table.\n   * fixedRowsTop: 3,\n   * ```\n   */\n  fixedRowsTop: 0,\n\n  /**\n   * Allows to specify the number of fixed (or *frozen*) rows at the bottom of the table.\n   *\n   * @pro\n   * @type {Number}\n   * @default 0\n   *\n   * @example\n   * ```js\n   * // freeze the last 3 rows of the table.\n   * fixedRowsBottom: 3,\n   * ```\n   */\n  fixedRowsBottom: 0,\n\n  /**\n   * Allows to specify the number of fixed (or *frozen*) columns on the left of the table.\n   *\n   * @type {Number}\n   * @default 0\n   *\n   * @example\n   * ```js\n   * // freeze first 3 columns of the table.\n   * fixedColumnsLeft: 3,\n   * ```\n   */\n  fixedColumnsLeft: 0,\n\n  /**\n   * If `true`, mouse click outside the grid will deselect the current selection. Can be a function that takes the\n   * click event target and returns a boolean.\n   *\n   * @type {Boolean|Function}\n   * @default true\n   *\n   * @example\n   * ```js\n   * // don't clear current selection when mouse click was outside the grid\n   * outsideClickDeselects: false,\n   *\n   * // or\n   * outsideClickDeselects: function(event) {\n   *   return false;\n   * }\n   * ```\n   */\n  outsideClickDeselects: true,\n\n  /**\n   * If `true`, <kbd>ENTER</kbd> begins editing mode (like in Google Docs). If `false`, <kbd>ENTER</kbd> moves to next\n   * row (like Excel) and adds a new row if necessary. <kbd>TAB</kbd> adds new column if necessary.\n   *\n   * @type {Boolean}\n   * @default true\n   *\n   * @example\n   * ```js\n   * enterBeginsEditing: false,\n   * ```\n   */\n  enterBeginsEditing: true,\n\n  /**\n   * Defines the cursor movement after <kbd>ENTER</kbd> was pressed (<kbd>SHIFT</kbd> + <kbd>ENTER</kbd> uses a negative vector). Can\n   * be an object or a function that returns an object. The event argument passed to the function is a DOM Event object\n   * received after the <kbd>ENTER</kbd> key has been pressed. This event object can be used to check whether user pressed\n   * <kbd>ENTER</kbd> or <kbd>SHIFT</kbd> + <kbd>ENTER</kbd>.\n   *\n   * @type {Object|Function}\n   * @default {row: 1, col: 0}\n   *\n   * @example\n   * ```js\n   * // move selection diagonal by 1 cell in x and y axis\n   * enterMoves: {row: 1, col: 1},\n   * // or as a function\n   * enterMoves: function(event) {\n   *   return {row: 1, col: 1};\n   * },\n   * ```\n   */\n  enterMoves: { row: 1, col: 0 },\n\n  /**\n   * Defines the cursor movement after <kbd>TAB</kbd> is pressed (<kbd>SHIFT</kbd> + <kbd>TAB</kbd> uses a negative vector). Can\n   * be an object or a function that returns an object. The event argument passed to the function is a DOM Event object\n   * received after the <kbd>TAB</kbd> key has been pressed. This event object can be used to check whether user pressed\n   * <kbd>TAB</kbd> or <kbd>SHIFT</kbd> + <kbd>TAB</kbd>.\n   *\n   * @type {Object|Function}\n   * @default {row: 0, col: 1}\n   *\n   * @example\n   * ```js\n   * // move selection 2 cells away after TAB pressed.\n   * tabMoves: {row: 2, col: 2},\n   * // or as a function\n   * tabMoves: function(event) {\n   *   return {row: 2, col: 2};\n   * },\n   * ```\n   */\n  tabMoves: { row: 0, col: 1 },\n\n  /**\n   * If `true`, pressing <kbd>TAB</kbd> or right arrow in the last column will move to first column in next row.\n   *\n   * @type {Boolean}\n   * @default true\n   *\n   * @example\n   * ```js\n   * // stop TAB key navigation on the last column\n   * autoWrapRow: false,\n   * ```\n   */\n  autoWrapRow: true,\n\n  /**\n   * If `true`, pressing <kbd>ENTER</kbd> or down arrow in the last row will move to the first row in the next column.\n   *\n   * @type {Boolean}\n   * @default true\n   *\n   * @example\n   * ```js\n   * // stop ENTER key navigation on the last row\n   * autoWrapCol: false,\n   * ```\n   */\n  autoWrapCol: true,\n\n  /**\n   * @description\n   * Turns on saving the state of column sorting, column positions and column sizes in local storage.\n   *\n   * You can save any sort of data in local storage to preserve table state between page reloads.  In order to enable\n   * data storage mechanism, `persistentState` option must be set to `true` (you can set it either during Handsontable\n   * initialization or using the `updateSettings` method). When `persistentState` is enabled it exposes 3 hooks:\n   *\n   * __persistentStateSave__ (key: String, value: Mixed)\n   *\n   *   * Saves value under given key in browser local storage.\n   *\n   * __persistentStateLoad__ (key: String, valuePlaceholder: Object)\n   *\n   *   * Loads `value`, saved under given key, form browser local storage. The loaded `value` will be saved in\n   *   `valuePlaceholder.value` (this is due to specific behaviour of `Hooks.run()` method). If no value have\n   *   been saved under key `valuePlaceholder.value` will be `undefined`.\n   *\n   * __persistentStateReset__ (key: String)\n   *\n   *   * Clears the value saved under `key`. If no `key` is given, all values associated with table will be cleared.\n   *\n   * __Note:__ The main reason behind using `persistentState` hooks rather than regular LocalStorage API is that it\n   * ensures separation of data stored by multiple Handsontable instances. In other words, if you have two (or more)\n   * instances of Handsontable on one page, data saved by one instance won't be accessible by the second instance.\n   * Those two instances can store data under the same key and no data would be overwritten.\n   *\n   * __Important:__ In order for the data separation to work properly, make sure that each instance of Handsontable has a unique `id`.\n   *\n   * @type {Boolean}\n   * @default false\n   *\n   * @example\n   * ```js\n   * // enable the persistent state plugin\n   * persistentState: true,\n   * ```\n   */\n  persistentState: void 0,\n\n  /**\n   * Class name for all visible rows in the current selection.\n   *\n   * @type {String}\n   * @default undefined\n   *\n   * @example\n   * ```js\n   * // This will add a 'currentRow' class name to appropriate table cells.\n   * currentRowClassName: 'currentRow',\n   * ```\n   */\n  currentRowClassName: void 0,\n\n  /**\n   * Class name for all visible columns in the current selection.\n   *\n   * @type {String}\n   * @default undefined\n   *\n   * @example\n   * ```js\n   * // This will add a 'currentColumn' class name to appropriate table cells.\n   * currentColClassName: 'currentColumn',\n   * ```\n   */\n  currentColClassName: void 0,\n\n  /**\n   * Class name for all visible headers in current selection.\n   *\n   * @type {String}\n   * @default 'ht__highlight'\n   *\n   * @example\n   * ```js\n   * // This will add a 'ht__highlight' class name to appropriate table headers.\n   * currentHeaderClassName: 'ht__highlight',\n   * ```\n   */\n  currentHeaderClassName: 'ht__highlight',\n\n  /**\n   * Class name for all active headers in selections. The header will be marked with this class name\n   * only when a whole column or row will be selected.\n   *\n   * @type {String}\n   * @since 0.38.2\n   * @default 'ht__active_highlight'\n   *\n   * @example\n   * ```js\n   * // this will add a 'ht__active_highlight' class name to appropriate table headers.\n   * activeHeaderClassName: 'ht__active_highlight',\n   * ```\n   */\n  activeHeaderClassName: 'ht__active_highlight',\n\n  /**\n   * Class name for the Handsontable container element.\n   *\n   * @type {String|String[]}\n   * @default undefined\n   *\n   * @example\n   * ```js\n   * // set custom class for table container\n   * className: 'your__class--name',\n   *\n   * // or\n   * className: ['first-class-name', 'second-class-name'],\n   * ```\n   */\n  className: void 0,\n\n  /**\n   * Class name for all tables inside container element.\n   *\n   * @type {String|String[]}\n   * @default undefined\n   *\n   * @example\n   * ```js\n   * // set custom class for table element\n   * tableClassName: 'your__class--name',\n   *\n   * // or\n   * tableClassName: ['first-class-name', 'second-class-name'],\n   * ```\n   */\n  tableClassName: void 0,\n\n  /**\n   * @description\n   * Defines how the columns react, when the declared table width is different than the calculated sum of all column widths.\n   * [See more](https://docs.handsontable.com/demo-stretching.html) mode. Possible values:\n   *  * `'none'` Disable stretching\n   *  * `'last'` Stretch only the last column\n   *  * `'all'` Stretch all the columns evenly\n   *\n   * @type {String}\n   * @default 'none'\n   *\n   * @example\n   * ```js\n   * // fit table to the container\n   * stretchH: 'all',\n   * ```\n   */\n  stretchH: 'none',\n\n  /**\n   * Overwrites the default `isEmptyRow` method, which checks if row at the provided index is empty.\n   *\n   * @type {Function}\n   * @param {Number} row Visual row index.\n   * @returns {Boolean}\n   *\n   * @example\n   * ```js\n   * // define custom checks for empty row\n   * isEmptyRow: function(row) {\n   *    ...\n   * },\n   * ```\n   */\n  isEmptyRow: function isEmptyRow(row) {\n    var col = void 0;\n    var colLen = void 0;\n    var value = void 0;\n    var meta = void 0;\n\n    for (col = 0, colLen = this.countCols(); col < colLen; col++) {\n      value = this.getDataAtCell(row, col);\n\n      if (value !== '' && value !== null && (0, _mixed.isDefined)(value)) {\n        if ((typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object') {\n          meta = this.getCellMeta(row, col);\n\n          return (0, _object.isObjectEqual)(this.getSchema()[meta.prop], value);\n        }\n        return false;\n      }\n    }\n\n    return true;\n  },\n\n\n  /**\n   * Overwrites the default `isEmptyCol` method, which checks if column at the provided index is empty.\n   *\n   * @type {Function}\n   * @param {Number} column Visual column index\n   * @returns {Boolean}\n   *\n   * @example\n   * ```js\n   * // define custom checks for empty column\n   * isEmptyCol: function(column) {\n   *    return false;\n   * },\n   * ```\n   */\n  isEmptyCol: function isEmptyCol(col) {\n    var row = void 0;\n    var rowLen = void 0;\n    var value = void 0;\n\n    for (row = 0, rowLen = this.countRows(); row < rowLen; row++) {\n      value = this.getDataAtCell(row, col);\n\n      if (value !== '' && value !== null && (0, _mixed.isDefined)(value)) {\n        return false;\n      }\n    }\n\n    return true;\n  },\n\n\n  /**\n   * When set to `true`, the table is re-rendered when it is detected that it was made visible in DOM.\n   *\n   * @type {Boolean}\n   * @default true\n   *\n   * @example\n   * ```js\n   * // don't rerender the table on visibility changes\n   * observeDOMVisibility: false,\n   * ```\n   */\n  observeDOMVisibility: true,\n\n  /**\n   * If set to `true`, Handsontable will accept values that were marked as invalid by the cell `validator`. It will\n   * result with *invalid* cells being treated as *valid* (will save the *invalid* value into the Handsontable data source).\n   * If set to `false`, Handsontable will *not* accept the invalid values and won't allow the user to close the editor.\n   * This option will be particularly useful when used with the Autocomplete's `strict` mode.\n   *\n   * @type {Boolean}\n   * @default true\n   *\n   * @example\n   * ```js\n   * // don't save the invalid values\n   * allowInvalid: false,\n   * ```\n   */\n  allowInvalid: true,\n\n  /**\n   * If set to `true`, Handsontable will accept values that are empty (`null`, `undefined` or `''`). If set to `false`,\n   * Handsontable will *not* accept the empty values and mark cell as invalid.\n   *\n   * @type {Boolean}\n   * @default true\n   *\n   * @example\n   * ```js\n   * // allow empty values for all cells (whole table)\n   * allowEmpty: true,\n   *\n   * // or\n   * columns: [\n   *   {\n   *     data: 'date',\n   *     dateFormat: 'DD/MM/YYYY',\n   *     // allow empty values only for the 'date' column\n   *     allowEmpty: true\n   *   }\n   * ],\n   * ```\n   */\n  allowEmpty: true,\n\n  /**\n   * CSS class name for cells that did not pass validation.\n   *\n   * @type {String}\n   * @default 'htInvalid'\n   *\n   * @example\n   * ```js\n   * // set custom validation error class\n   * invalidCellClassName: 'highlight--error',\n   * ```\n   */\n  invalidCellClassName: 'htInvalid',\n\n  /**\n   * When set to an non-empty string, displayed as the cell content for empty cells. If a value of a different type is provided,\n   * it will be stringified and applied as a string.\n   *\n   * @type {String}\n   * @default undefined\n   *\n   * @example\n   * ```js\n   * // add custom placeholder content to empty cells\n   * placeholder: 'Empty Cell',\n   * ```\n   */\n  placeholder: void 0,\n\n  /**\n   * CSS class name for cells that have a placeholder in use.\n   *\n   * @type {String}\n   * @default 'htPlaceholder'\n   *\n   * @example\n   * ```js\n   * // set custom placeholder class\n   * placeholderCellClassName: 'has-placeholder',\n   * ```\n   */\n  placeholderCellClassName: 'htPlaceholder',\n\n  /**\n   * CSS class name for read-only cells.\n   *\n   * @type {String}\n   * @default 'htDimmed'\n   *\n   * @example\n   * ```js\n   * // set custom read-only class\n   * readOnlyCellClassName: 'is-readOnly',\n   * ```\n   */\n  readOnlyCellClassName: 'htDimmed',\n\n  /**\n   * @description\n   * If a string is provided, it may be one of the following predefined values:\n   * * `autocomplete`,\n   * * `checkbox`,\n   * * `html`,\n   * * `numeric`,\n   * * `password`.\n   * * `text`.\n   *\n   * Or you can [register](https://docs.handsontable.com/demo-custom-renderers.html) the custom renderer under specified name and use its name as an alias in your\n   * configuration.\n   *\n   * If a function is provided, it will receive the following arguments:\n   * ```js\n   * function(instance, TD, row, col, prop, value, cellProperties) {}\n   * ```\n   *\n   * You can read more about custom renderes [in the documentation](https://docs.handsontable.com/demo-custom-renderers.html).\n   *\n   * @type {String|Function}\n   * @default undefined\n   *\n   * @example\n   * ```js\n   * // register custom renderer\n   * Handsontable.renderers.registerRenderer('my.renderer', function(instance, TD, row, col, prop, value, cellProperties) {\n   *   TD.innerHTML = value;\n   * });\n   *\n   * // use it for selected column:\n   * columns: [\n   *   {\n   *     // as a string with the name of build in renderer\n   *     renderer: 'autocomplete',\n   *     editor: 'select'\n   *   },\n   *   {\n   *     // as an alias to custom renderer registered above\n   *     renderer: 'my.renderer'\n   *   },\n   *   {\n   *     // renderer as custom function\n   *     renderer: function(hotInstance, TD, row, col, prop, value, cellProperties) {\n   *       TD.style.color = 'blue';\n   *       TD.innerHTML = value;\n   *     }\n   *   }\n   * ],\n   * ```\n   */\n  renderer: void 0,\n\n  /**\n   * CSS class name added to the commented cells.\n   *\n   * @type {String}\n   * @default 'htCommentCell'\n   *\n   * @example\n   * ```js\n   * // set custom class for commented cells\n   * commentedCellClassName: 'has-comment',\n   * ```\n   */\n  commentedCellClassName: 'htCommentCell',\n\n  /**\n   * If set to `true`, it enables the browser's native selection of a fragment of the text within a single cell, between\n   * adjacent cells or in a whole table. If set to `'cell'`, it enables the possibility of selecting a fragment of the\n   * text within a single cell's body.\n   *\n   * @type {Boolean|String}\n   * @default false\n   *\n   * @example\n   * ```js\n   * // enable text selection within table\n   * fragmentSelection: true,\n   *\n   * // or\n   * // enable text selection within cells only\n   * fragmentSelection: 'cell',\n   * ```\n   */\n  fragmentSelection: false,\n\n  /**\n   * @description\n   * Makes cell [read only](https://docs.handsontable.com/demo-read-only.html).\n   *\n   * @type {Boolean}\n   * @default false\n   *\n   * @example\n   * ```js\n   * // set cell as read only\n   * readOnly: true,\n   * ```\n   */\n  readOnly: false,\n\n  /**\n   * @description\n   * When added to a `column` property, it skips the column on paste and pastes the data on the next column to the right.\n   *\n   * @type {Boolean}\n   * @default false\n   *\n   * @example\n   * ```js\n   * columns: [\n   *   {\n   *     // don't paste data to this column\n   *     skipColumnOnPaste: true\n   *   }\n   * ],\n   * ```\n   */\n  skipColumnOnPaste: false,\n\n  /**\n   * @description\n   * Setting to `true` enables the {@link Search} plugin (see [demo](https://docs.handsontable.com/demo-search-for-values.html)).\n   *\n   * @type {Boolean}\n   * @default false\n   *\n   * @example\n   * ```js\n   * // enable search plugin\n   * search: true,\n   *\n   * // or\n   * // as an object with detailed configuration\n   * search: {\n   *   searchResultClass: 'customClass',\n   *   queryMethod: function(queryStr, value) {\n   *     ...\n   *   },\n   *   callback: function(instance, row, column, value, result) {\n   *     ...\n   *   }\n   * }\n   * ```\n   */\n  search: false,\n\n  /**\n   * @description\n   * Shortcut to define the combination of the cell renderer, editor and validator for the column, cell or whole table.\n   *\n   * Possible values:\n   *  * [autocomplete](https://docs.handsontable.com/demo-autocomplete.html)\n   *  * [checkbox](https://docs.handsontable.com/demo-checkbox.html)\n   *  * [date](https://docs.handsontable.com/demo-date.html)\n   *  * [dropdown](https://docs.handsontable.com/demo-dropdown.html)\n   *  * [handsontable](https://docs.handsontable.com/demo-handsontable.html)\n   *  * [numeric](https://docs.handsontable.com/demo-numeric.html)\n   *  * [password](https://docs.handsontable.com/demo-password.html)\n   *  * text\n   *  * [time](https://docs.handsontable.com/demo-time.html)\n   *\n   * Or you can register the custom cell type under specified name and use\n   * its name as an alias in your configuration.\n   *\n   * @type {String}\n   * @default 'text'\n   *\n   * @example\n   * ```js\n   * // register custom cell type:\n   * Handsontable.cellTypes.registerCellType('my.type', {\n   *   editor: MyEditorClass,\n   *   renderer: function(hot, td, row, col, prop, value, cellProperties) {\n   *     td.innerHTML = value;\n   *   },\n   *   validator: function(value, callback) {\n   *     callback(value === 'foo' ? true : false);\n   *   }\n   * });\n   *\n   * // use it in column settings:\n   * columns: [\n   *   {\n   *     type: 'text'\n   *   },\n   *   {\n   *     // an alias to custom type\n   *     type: 'my.type'\n   *   },\n   *   {\n   *     type: 'checkbox'\n   *   }\n   * ],\n   * ```\n   */\n  type: 'text',\n\n  /**\n   * @description\n   * Makes a cell copyable (pressing <kbd>CTRL</kbd> + <kbd>C</kbd> on your keyboard moves its value to system clipboard).\n   *\n   * __Note:__ this setting is `false` by default for cells with type `password`.\n   *\n   * @type {Boolean}\n   * @default true\n   *\n   * @example\n   * ```js\n   * cells: [\n   *   {\n   *     cell: 0,\n   *     row: 0,\n   *     // cell with coordinates (0, 0) can't be copied\n   *     copyable: false,\n   *   }\n   * ],\n   * ```\n   */\n  copyable: true,\n\n  /**\n   * Defines the editor for the table/column/cell.\n   *\n   * If a string is provided, it may be one of the following predefined values:\n   *  * [autocomplete](https://docs.handsontable.com/demo-autocomplete.html)\n   *  * [checkbox](https://docs.handsontable.com/demo-checkbox.html)\n   *  * [date](https://docs.handsontable.com/demo-date.html)\n   *  * [dropdown](https://docs.handsontable.com/demo-dropdown.html)\n   *  * [handsontable](https://docs.handsontable.com/demo-handsontable.html)\n   *  * [mobile](https://docs.handsontable.com/demo-mobiles-and-tablets.html)\n   *  * [password](https://docs.handsontable.com/demo-password.html)\n   *  * [select](https://docs.handsontable.com/demo-select.html)\n   *  * text\n   *\n   * Or you can [register](https://docs.handsontable.com/tutorial-cell-editor.html#registering-an-editor) the custom editor under specified name and use its name as an alias in your\n   * configuration.\n   *\n   * To disable cell editing completely set `editor` property to `false`.\n   *\n   * @type {String|Function|Boolean}\n   * @default undefined\n   *\n   * @example\n   * ```js\n   * columns: [\n   *   {\n   *     // set editor for the first column\n   *     editor: 'select'\n   *   },\n   *   {\n   *     // disable editor for the second column\n   *     editor: false\n   *   }\n   * ],\n   * ```\n   */\n  editor: void 0,\n\n  /**\n   * Control number of choices for the autocomplete (or dropdown) typed cells. After exceeding it, a scrollbar for the\n   * dropdown list of choices will appear.\n   *\n   * @type {Number}\n   * @default 10\n   *\n   * @example\n   * ```js\n   * columns: [\n   *   {\n   *     type: 'autocomplete',\n   *     // set autocomplete options list height\n   *     visibleRows: 15,\n   *   }\n   * ],\n   * ```\n   */\n  visibleRows: 10,\n\n  /**\n   * Makes autocomplete or dropdown width the same as the edited cell width. If `false` then editor will be scaled\n   * according to its content.\n   *\n   * @type {Boolean}\n   * @default true\n   *\n   * @example\n   * ```js\n   * columns: [\n   *   {\n   *     type: 'autocomplete',\n   *     // don't trim dropdown width with column width\n   *     trimDropdown: false,\n   *   }\n   * ],\n   * ```\n   */\n  trimDropdown: true,\n\n  /**\n   * Setting to `true` enables the debug mode, currently used to test the correctness of the row and column\n   * header fixed positioning on a layer above the master table.\n   *\n   * @type {Boolean}\n   * @default false\n   *\n   * @example\n   * ```js\n   * // enable debug mode\n   * debug: true,\n   * ```\n   */\n  debug: false,\n\n  /**\n   * When set to `true`, the text of the cell content is wrapped if it does not fit in the fixed column width.\n   *\n   * @type {Boolean}\n   * @default true\n   *\n   * @example\n   * ```js\n   * colWidths: 100,\n   * columns: [\n   *   {\n   *     // fixed column width is set but don't wrap the content\n   *     wordWrap: false,\n   *   }\n   * ],\n   * ```\n   */\n  wordWrap: true,\n\n  /**\n   * CSS class name added to cells with cell meta `wordWrap: false`.\n   *\n   * @type {String}\n   * @default 'htNoWrap'\n   *\n   * @example\n   * ```js\n   * // set custom class for cells which content won't be wrapped\n   * noWordWrapClassName: 'is-noWrapCell',\n   * ```\n   */\n  noWordWrapClassName: 'htNoWrap',\n\n  /**\n   * @description\n   * Defines if the right-click context menu should be enabled. Context menu allows to create new row or column at any\n   * place in the grid among [other features](https://docs.handsontable.com/demo-context-menu.html).\n   * Possible values:\n   * * `true` (to enable default options),\n   * * `false` (to disable completely)\n   * * an array of [predefined options](https://docs.handsontable.com/demo-context-menu.html#page-specific),\n   * * an object [with defined structure](https://docs.handsontable.com/demo-context-menu.html#page-custom)\n   *\n   * See [the context menu demo](https://docs.handsontable.com/demo-context-menu.html) for examples.\n   *\n   * @type {Boolean|String[]|Object}\n   * @default undefined\n   *\n   * @example\n   * ```js\n   * // as a boolean\n   * contextMenu: true,\n   *\n   * // as an array\n   * contextMenu: ['row_above', 'row_below', '--------', 'undo', 'redo'],\n   *\n   * // as an object (`name` attribute is required in the custom keys)\n   * contextMenu: {\n   *   items: {\n   *     \"option1\": {\n   *       name: \"option1\"\n   *     },\n   *     \"option2\": {\n   *       name: \"option2\",\n   *       submenu: {\n   *         items: [\n   *           {\n   *             key: \"option2:suboption1\",\n   *             name: \"option2:suboption1\",\n   *             callback: function(key, options) {\n   *               ...\n   *             }\n   *           },\n   *           ...\n   *         ]\n   *       }\n   *     }\n   *   }\n   * },\n   * ```\n   */\n  contextMenu: void 0,\n\n  /**\n   * Disables or enables the copy/paste functionality.\n   *\n   * @type {Boolean}\n   * @default true\n   *\n   * @example\n   * ```js\n   * // disable copy and paste\n   * copyPaste: false,\n   * ```\n   */\n  copyPaste: true,\n\n  /**\n   * If `true`, undo/redo functionality is enabled.\n   *\n   * @type {Boolean}\n   * @default undefined\n   *\n   * @example\n   * ```js\n   * // enable undo and redo\n   * undo: true,\n   * ```\n   */\n  undo: void 0,\n\n  /**\n   * @description\n   * Turns on [Column sorting](https://docs.handsontable.com/demo-sorting-data.html). Can be either a boolean (`true` / `false`) or an object with a declared sorting options:\n   * * `column` - sorted column\n   * * `sortOrder` - order in which column will be sorted\n   *   * `'asc'` = ascending\n   *   * `'desc'` = descending\n   *   * `'none'` = original order\n   * * `sortEmptyCells` - how empty values should be handled\n   *   * `true` = the table sorts empty cells\n   *   * `false` = the table moves all empty cells to the end of the table\n   *\n   * @type {Boolean|Object}\n   * @default undefined\n   *\n   * @example\n   * ```js\n   * // as a boolean\n   * columnSorting: true,\n   *\n   * // as a object with initial order (sort ascending column at index 2)\n   * columnSorting: {\n   *   column: 2,\n   *   sortOrder: 'asc',\n   *   sortEmptyCells: true\n   * },\n   * ```\n   */\n  columnSorting: void 0,\n\n  /**\n   * Turns on [Manual column move](https://docs.handsontable.com/demo-moving-rows-and-columns.html), if set to a boolean or define initial column order (as an array of column indexes).\n   *\n   * @type {Boolean|Number[]}\n   * @default undefined\n   *\n   * @example\n   * ```js\n   * // as a boolean to enable column move\n   * manualColumnMove: true,\n   *\n   * // as a array with initial order\n   * // (move column index at 0 to 1 and move column index at 1 to 4)\n   * manualColumnMove: [1, 4],\n   * ```\n   */\n  manualColumnMove: void 0,\n\n  /**\n   * @description\n   * Turns on [Manual column resize](https://docs.handsontable.com/demo-resizing.html), if set to a boolean or define initial column resized widths (an an array of widths).\n   *\n   * @type {Boolean|Number[]}\n   * @default undefined\n   *\n   * @example\n   * ```js\n   * // as a boolean to enable column resize\n   * manualColumnResize: true,\n   *\n   * // as a array with initial widths\n   * // (column at 0 index has 40px and column at 1 index has 50px)\n   * manualColumnResize: [40, 50],\n   * ```\n   */\n  manualColumnResize: void 0,\n\n  /**\n   * @description\n   * Turns on [Manual row move](https://docs.handsontable.com/demo-moving-rows-and-columns.html), if set to a boolean or define initial row order (as an array of row indexes).\n   *\n   * @type {Boolean|Number[]}\n   * @default undefined\n   *\n   * @example\n   * ```js\n   * // as a boolean\n   * manualRowMove: true,\n   *\n   * // as a array with initial order\n   * // (move row index at 0 to 1 and move row index at 1 to 4)\n   * manualRowMove: [1, 4],\n   * ```\n   */\n  manualRowMove: void 0,\n\n  /**\n   * @description\n   * Turns on [Manual row resize](https://docs.handsontable.com/demo-resizing.html), if set to a boolean or define initial row resized heights (as an array of heights).\n   *\n   * @type {Boolean|Number[]}\n   * @default undefined\n   *\n   * @example\n   * ```js\n   * // as a boolean to enable row resize\n   * manualRowResize: true,\n   *\n   * // as an array to set initial heights\n   * // (row at 0 index has 40px and row at 1 index has 50px)\n   * manualRowResize: [40, 50],\n   * ```\n   */\n  manualRowResize: void 0,\n\n  /**\n   * @description\n   * If set to `true`, it enables a possibility to merge cells. If set to an array of objects, it merges the cells provided\n   * in the objects (see the example below). More information on [the demo page](https://docs.handsontable.com/demo-merge-cells.html).\n   *\n   * @type {Boolean|Object[]}\n   * @default false\n   *\n   * @example\n   * ```js\n   * // enables the mergeCells plugin\n   * margeCells: true,\n   *\n   * // declares a list of merged sections\n   * mergeCells: [\n   *   // rowspan and colspan properties declare the width and height of a merged section in cells\n   *   {row: 1, col: 1, rowspan: 3, colspan: 3},\n   *   {row: 3, col: 4, rowspan: 2, colspan: 2},\n   *   {row: 5, col: 6, rowspan: 3, colspan: 3}\n   * ],\n   * ```\n   */\n  mergeCells: false,\n\n  /**\n   * @description\n   * Number of rows to be rendered outside of the visible part of the table. By default, it's set to `'auto'`, which\n   * makes Handsontable to attempt to calculate the best offset performance-wise.\n   *\n   * You may test out different values to find the best one that works for your specific implementation.\n   *\n   * @type {Number|String}\n   * @default 'auto'\n   *\n   * @example\n   * ```js\n   * viewportRowRenderingOffset: 70,\n   * ```\n   */\n  viewportRowRenderingOffset: 'auto',\n\n  /**\n   * @description\n   * Number of columns to be rendered outside of the visible part of the table. By default, it's set to `'auto'`, which\n   * makes Handsontable try calculating the best offset performance-wise.\n   *\n   * You may experiment with the value to find the one that works best for your specific implementation.\n   *\n   * @type {Number|String}\n   * @default 'auto'\n   *\n   * @example\n   * ```js\n   * viewportColumnRenderingOffset: 70,\n   * ```\n   */\n  viewportColumnRenderingOffset: 'auto',\n\n  /**\n   * @description\n   * A function, regular expression or a string, which will be used in the process of cell validation. If a function is\n   * used, be sure to execute the callback argument with either `true` (`callback(true)`) if the validation passed\n   * or with `false` (`callback(false)`), if the validation failed.\n   *\n   * __Note__, that `this` in the function points to the `cellProperties` object.\n   *\n   * If a string is provided, it may be one of the following predefined values:\n   * * `autocomplete`,\n   * * `date`,\n   * * `numeric`,\n   * * `time`.\n   *\n   * Or you can [register](https://docs.handsontable.com/demo-data-validation.html) the validator function under specified name and use its name as an alias in your\n   * configuration.\n   *\n   * See more [in the demo](https://docs.handsontable.com/demo-data-validation.html).\n   *\n   * @type {Function|RegExp|String}\n   * @default undefined\n   *\n   * @example\n   * ```js\n   * columns: [\n   *    {\n   *      // as a function\n   *      validator: function(value, callback) {\n   *          ...\n   *      }\n   *    },\n   *    {\n   *      // regular expression\n   *      validator: /^[0-9]$/\n   *    },\n   *    {\n   *      // as a string\n   *      validator: 'numeric'\n   *    }\n   * ],\n   * ```\n   */\n  validator: void 0,\n\n  /**\n   * @description\n   * Disables visual cells selection.\n   *\n   * Possible values:\n   *  * `true` - Disables any type of visual selection (current and area selection),\n   *  * `false` - Enables any type of visual selection. This is default value.\n   *  * `'current'` - Disables the selection of a currently selected cell, the area selection is still present.\n   *  * `'area'` - Disables the area selection, the currently selected cell selection is still present.\n   *  * `'header'` - Disables the headers selection, the currently selected cell selection is still present.\n   *\n   * @type {Boolean|String|String[]}\n   * @default false\n   *\n   * @example\n   * ```js\n   * // as a boolean\n   * disableVisualSelection: true,\n   *\n   * // as a string ('current', 'area' or 'header')\n   * disableVisualSelection: 'current',\n   *\n   * // as an array\n   * disableVisualSelection: ['current', 'area'],\n   * ```\n   */\n  disableVisualSelection: false,\n\n  /**\n   * Set whether to display the current sorting order indicator (a triangle icon in the column header, specifying the sorting\n   * order).\n   *\n   * @type {Boolean}\n   * @default undefined\n   *\n   * @example\n   * ```js\n   * // show sort indicator for sorted columns\n   * sortIndicator: true,\n   * ```\n   */\n  sortIndicator: void 0,\n\n  /**\n   * Disables or enables {@link ManualColumnFreeze} plugin.\n   *\n   * @type {Boolean}\n   * @default undefined\n   *\n   * @example\n   * ```js\n   * // enable fixed columns\n   * manualColumnFreeze: true,\n   * ```\n   */\n  manualColumnFreeze: void 0,\n\n  /**\n   * Defines whether Handsontable should trim the whitespace at the beginning and the end of the cell contents.\n   *\n   * @type {Boolean}\n   * @default true\n   *\n   * @example\n   * ```js\n   * columns: [\n   *   {\n   *     // don't remove whitespace\n   *     trimWhitespace: false\n   *   }\n   * ]\n   * ```\n   */\n  trimWhitespace: true,\n\n  /**\n   * Defines data source for Autocomplete or Dropdown cell types.\n   *\n   * @type {Array|Function}\n   * @default undefined\n   *\n   * @example\n   * ```js\n   * // source as a array\n   * columns: [{\n   *   type: 'autocomplete',\n   *   source: ['A', 'B', 'C', 'D']\n   * }],\n   *\n   * // source as a function\n   * columns: [{\n   *   type: 'autocomplete',\n   *   source: function(query, callback) {\n   *     fetch('https://example.com/query?q=' + query, function(response) {\n   *       callback(response.items);\n   *     })\n   *   }\n   * }],\n   * ```\n   */\n  source: void 0,\n\n  /**\n   * @description\n   * Defines the column header name.\n   *\n   * @type {String}\n   * @default undefined\n   *\n   * @example\n   * ```js\n   * // set header names for every column\n   * columns: [\n   *   {\n   *     title: 'First name',\n   *     type: 'text',\n   *   },\n   *   {\n   *     title: 'Last name',\n   *     type: 'text',\n   *   }\n   * ],\n   * ```\n   */\n  title: void 0,\n\n  /**\n   * Data template for `'checkbox'` type when checkbox is checked.\n   *\n   * @type {Boolean|String|Number}\n   * @default true\n   *\n   * @example\n   * ```js\n   * checkedTemplate: 'good'\n   *\n   * // if a checkbox-typed cell is checked, then getDataAtCell(x, y),\n   * // where x and y are the coordinates of the cell will return 'good'.\n   * ```\n   */\n  checkedTemplate: void 0,\n\n  /**\n   * Data template for `'checkbox'` type when checkbox is unchecked.\n   *\n   * @type {Boolean|String|Number}\n   * @default false\n   *\n   * @example\n   * ```js\n   * uncheckedTemplate: 'bad'\n   *\n   * // if a checkbox-typed cell is not checked, then getDataAtCell(x,y),\n   * // where x and y are the coordinates of the cell will return 'bad'.\n   * ```\n   */\n  uncheckedTemplate: void 0,\n\n  /**\n   * @description\n   * Object which describes if renderer should create checkbox element with label element as a parent.\n   *\n   * __Note__, this option only works for [checkbox-typed](https://docs.handsontable.com/demo-checkbox.html) cells.\n   *\n   * By default the [checkbox](https://docs.handsontable.com/demo-checkbox.html) renderer renders the checkbox without a label.\n   *\n   * Possible object properties:\n   *  * `property` - Defines the property name of the data object, which will to be used as a label.\n   *  (eg. `label: {property: 'name.last'}`). This option works only if data was passed as an array of objects.\n   *  * `position` - String which describes where to place the label text (before or after checkbox element).\n   * Valid values are `'before'` and '`after`' (defaults to `'after'`).\n   *  * `value` - String or a Function which will be used as label text.\n   *\n   * @type {Object}\n   * @default undefined\n   *\n   * @example\n   * ```js\n   * columns: [{\n   *   type: 'checkbox',\n   *   // add \"My label:\" after the checkbox\n   *   label: {position: 'after', value: 'My label: '}\n   * }],\n   * ```\n   */\n  label: void 0,\n\n  /**\n   * Display format for numeric typed renderers.\n   *\n   * __Note__, this option only works for [numeric-typed](https://docs.handsontable.com/demo-numeric.html) cells.\n   *\n   * Format is described by two properties:\n   * * `pattern` - Handled by `numbro` for purpose of formatting numbers to desired pattern. List of supported patterns can be found [here](http://numbrojs.com/format.html#numbers).\n   * * `culture` - Handled by `numbro` for purpose of formatting currencies. Examples showing how it works can be found [here](http://numbrojs.com/format.html#currency). List of supported cultures can be found [here](http://numbrojs.com/languages.html#supported-languages).\n   *\n   * __Note:__ Please keep in mind that this option is used only to format the displayed output! It has no effect on the input data provided for the cell. The numeric data can be entered to the table only as floats (separated by a dot or a comma) or integers, and are stored in the source dataset as JavaScript numbers.\n   *\n   * Handsontable uses [numbro](http://numbrojs.com/) as a main library for numbers formatting.\n   *\n   * @since 0.35.0\n   * @type {Object}\n   * @default undefined\n   *\n   * @example\n   * ```js\n   * columns: [\n   *   {\n   *     type: 'numeric',\n   *     // set desired format pattern and\n   *     numericFormat: {\n   *       pattern: '0,00',\n   *       culture: 'en-US'\n   *     }\n   *   }\n   * ],\n   * ```\n   */\n  numericFormat: void 0,\n\n  /**\n   * Language for Handsontable translation. Possible language codes are [listed here](https://docs.handsontable.com/tutorial-internationalization.html#available-languages).\n   *\n   * @type {String}\n   * @default 'en-US'\n   *\n   * @example\n   * ```js\n   * // set Polish language\n   * language: 'pl-PL',\n   * ```\n   */\n  language: 'en-US',\n\n  /**\n   * Data source for [select-typed](https://docs.handsontable.com/demo-select.html) cells.\n   *\n   * __Note__, this option only works for [select-typed](https://docs.handsontable.com/demo-select.html) cells.\n   *\n   * @type {String[]}\n   * @default undefined\n   *\n   * @example\n   * ```js\n   * columns: [\n   *   {\n   *     editor: 'select',\n   *     // add three select options to choose from\n   *     selectOptions: ['A', 'B', 'C'],\n   *   }\n   * ],\n   * ```\n   */\n  selectOptions: void 0,\n\n  /**\n   * Enables or disables the {@link AutoColumnSize} plugin. Default value is `undefined`, which has the same effect as `true`.\n   * Disabling this plugin can increase performance, as no size-related calculations would be done.\n   *\n   * Column width calculations are divided into sync and async part. Each of those parts has their own advantages and\n   * disadvantages. Synchronous calculations are faster but they block the browser UI, while the slower asynchronous\n   * operations don't block the browser UI.\n   *\n   * To configure the sync/async distribution, you can pass an absolute value (number of columns) or a percentage value.\n   *\n   * You can also use the `useHeaders` option to take the column headers width into calculation.\n   *\n   * @type {Object|Boolean}\n   * @default {syncLimit: 50}\n   *\n   * @example\n   * ```js\n   * // as a number (300 columns in sync, rest async)\n   * autoColumnSize: {syncLimit: 300},\n   *\n   * // as a string (percent)\n   * autoColumnSize: {syncLimit: '40%'},\n   *\n   * // use headers width while calculating the column width\n   * autoColumnSize: {useHeaders: true},\n   * ```\n   */\n  autoColumnSize: void 0,\n\n  /**\n   * Enables or disables {@link AutoRowSize} plugin. Default value is `undefined`, which has the same effect as `false`\n   * (disabled). Enabling this plugin can decrease performance, as size-related calculations would be performed.\n   *\n   * Row height calculations are divided into sync and async stages. Each of these stages has their own advantages and\n   * disadvantages. Synchronous calculations are faster but they block the browser UI, while the slower asynchronous\n   * operations don't block the browser UI.\n   *\n   * To configure the sync/async distribution, you can pass an absolute value (number of columns) or a percentage value.\n   *\n   * @type {Object|Boolean}\n   * @default {syncLimit: 500}\n   *\n   * @example\n   * ```js\n   * // as a number (300 columns in sync, rest async)\n   * autoRowSize: {syncLimit: 300},\n   *\n   * // as a string (percent)\n   * autoRowSize: {syncLimit: '40%'},\n   * ```\n   */\n  autoRowSize: void 0,\n\n  /**\n   * Date validation format.\n   *\n   * __Note__, this option only works for [date-typed](https://docs.handsontable.com/demo-date.html) cells.\n   *\n   * @type {String}\n   * @default 'DD/MM/YYYY'\n   *\n   * @example\n   * ```js\n   * columns: [{\n   *   type: 'date',\n   *   // localise date format\n   *   dateFormat: 'MM/DD/YYYY'\n   * }],\n   * ```\n   */\n  dateFormat: 'DD/MM/YYYY',\n\n  /**\n   * If `true` then dates will be automatically formatted to match the desired format.\n   *\n   * __Note__, this option only works for [date-typed](https://docs.handsontable.com/demo-date.html) cells.\n   *\n   * @type {Boolean}\n   * @default false\n   *\n   * @example\n   * ```js\n   * columns: [{\n   *   type: 'date',\n   *   dateFormat: 'YYYY-MM-DD',\n   *   // force selected date format\n   *   correctFormat: true\n   * }],\n   * ```\n   */\n  correctFormat: false,\n\n  /**\n   * Definition of default value which will fill the empty cells.\n   *\n   * __Note__, this option only works for [date-typed](https://docs.handsontable.com/demo-date.html) cells.\n   *\n   * @type {String}\n   * @default undefined\n   *\n   * @example\n   * ```js\n   * columns: [\n   *   {\n   *     type: 'date',\n   *     // always set this date for empty cells\n   *     defaultDate: '2015-02-02'\n   *   }\n   * ],\n   * ```\n   */\n  defaultDate: void 0,\n\n  /**\n   * If set to `true`, the value entered into the cell must match (case-sensitive) the autocomplete source.\n   * Otherwise, cell won't pass the validation. When filtering the autocomplete source list, the editor will\n   * be working in case-insensitive mode.\n   *\n   * __Note__, this option only works for [autocomplete-typed](https://docs.handsontable.com/demo-autocomplete.html) cells.\n   *\n   * @type {Boolean}\n   * @default undefined\n   *\n   * @example\n   * ```js\n   * columns: [{\n   *   type: 'autocomplete',\n   *   source: ['A', 'B', 'C'],\n   *   // force selected value to match the source list\n   *   strict: true\n   * }],\n   * ```\n   */\n  strict: void 0,\n\n  /**\n   * If set to `true`, data defined in `source` of the autocomplete or dropdown cell will be treated as HTML.\n   *\n   * __Warning:__ Enabling this option can cause serious XSS vulnerabilities.\n   *\n   * __Note__, this option only works for [autocomplete-typed](https://docs.handsontable.com/demo-autocomplete.html) cells.\n   *\n   * @type {Boolean}\n   * @default false\n   *\n   * @example\n   * ```js\n   * columns: [{\n   *   type: 'autocomplete',\n   *   // use HTML in the source list\n   *   allowHtml: true,\n   *   source: ['<strong>foo</strong>', '<strong>bar</strong>']\n   * }],\n   * ```\n   */\n  allowHtml: false,\n\n  /**\n   * If typed `true` then virtual rendering mechanism for handsontable will be disabled.\n   *\n   * @type {Boolean}\n   * @default undefined\n   *\n   * @example\n   * ```js\n   * // disable virtual rows rendering\n   * renderAllRows: true,\n   * ```\n   */\n  renderAllRows: void 0,\n\n  /**\n   * Prevents table to overlap outside the parent element. If `'horizontal'` option is chosen then table will show\n   * a horizontal scrollbar if parent's width is narrower then table's width.\n   *\n   * Possible values:\n   *  * `false` - Disables functionality.\n   *  * `horizontal` - Prevents horizontal overflow table.\n   *  * `vertical` - Prevents vertical overflow table.\n   *\n   * @type {String|Boolean}\n   * @default false\n   *\n   * @example\n   * ```js\n   * preventOverflow: 'horizontal',\n   * ```\n   */\n  preventOverflow: false,\n\n  /**\n   * @description\n   * Enables the functionality of the {@link BindRowsWithHeaders} plugin which allows binding the table rows with their headers.\n   * If the plugin is enabled, the table row headers will \"stick\" to the rows, when they are hidden/moved. Basically,\n   * if at the initialization row 0 has a header titled \"A\", it will have it no matter what you do with the table.\n   *\n   * @pro\n   * @type {Boolean|String}\n   * @default undefined\n   *\n   * @example\n   * ```js\n   * // keep row data and row headers in sync\n   * bindRowsWithHeaders: true\n   * ```\n   */\n  bindRowsWithHeaders: void 0,\n\n  /**\n   * @description\n   * The {@link CollapsibleColumns} plugin allows collapsing of columns, covered by a header with the `colspan` property\n   * defined.\n   *\n   * Clicking the \"collapse/expand\" button collapses (or expands) all \"child\" headers except the first one.\n   *\n   * Setting the `collapsibleColumns` property to `true` will display a \"collapse/expand\" button in every\n   * header with a defined colspan` property.\n   *\n   * To limit this functionality to a smaller group of headers, define the `collapsibleColumns` property\n   * as an array of objects, as in the example below.\n   *\n   * @pro\n   * @type {Boolean|Object[]}\n   * @default undefined\n   *\n   * @example\n   * ```js\n   * // enable collapsing for all headers\n   * collapsibleColumns: true,\n   *\n   * // or\n   * // enable collapsing for selected headers\n   * collapsibleColumns: [\n   *   {row: -4, col: 1, collapsible: true},\n   *   {row: -3, col: 5, collapsible: true}\n   * ],\n   * ```\n   */\n  collapsibleColumns: void 0,\n\n  /**\n   * @description\n   * Allows making pre-defined calculations on the cell values and display the results within Handsontable.\n   *\n   * Possible types:\n   *  * `'sum'`\n   *  * `'min'`\n   *  * `'max'`\n   *  * `'count'`\n   *  * `'average'`\n   *  * `'custom'` - add `customFunction`\n   *\n   * [See the demo for more information](https://docs.handsontable.com/pro/demo-summary-calculations.html).\n   *\n   * @pro\n   * @type {Object[]|Function}\n   * @default undefined\n   *\n   * @example\n   * ```\n   * columnSummary: [\n   *   {\n   *     destinationRow: 4,\n   *     destinationColumn: 1,\n   *     forceNumeric: true,\n   *     reversedRowCoords: true,\n   *     suppressDataTypeErrors: false,\n   *     readOnly: true,\n   *     roundFloat: false,\n   *     type: 'custom',\n   *     customFunction: function(endpoint) {\n   *        return 100;\n   *     }\n   *   }\n   * ],\n   * ```\n   */\n  columnSummary: void 0,\n\n  /**\n   * This plugin allows adding a configurable dropdown menu to the table's column headers. The dropdown menu acts like\n   * the {@link Options#contextMenu}, but is triggered by clicking the button in the header.\n   *\n   * @pro\n   * @type {Boolean|Object|String[]}\n   * @default undefined\n   *\n   * @example\n   * ```js\n   * // enable dropdown menu\n   * dropdownMenu: true,\n   *\n   * // or\n   * // enable and configure dropdown menu options\n   * dropdownMenu: ['remove_col', '---------', 'make_read_only', 'alignment']\n   * ```\n   */\n  dropdownMenu: void 0,\n\n  /**\n   * The {@link Filters} plugin allows filtering the table data either by the built-in component or with the API.\n   *\n   * @pro\n   * @type {Boolean}\n   * @default undefined\n   *\n   * @example\n   * ```js\n   * // enable filters\n   * filters: true,\n   * ```\n   */\n  filters: void 0,\n\n  /**\n   * The {@link Formulas} plugin allows Handsontable to process formula expressions defined in the provided data.\n   *\n   * @pro\n   * @type {Boolean|Object}\n   * @default undefined\n   *\n   * @example\n   * ```js\n   * // enable formulas plugin\n   * formulas: true,\n   *\n   * // or as an object with custom variables to be used in formula expressions\n   * formulas: {\n   *   variables: {\n   *     FOO: 64,\n   *     BAR: 'baz',\n   *   }\n   * },\n   * ```\n   */\n  formulas: void 0,\n\n  /**\n   * @description\n   * The {@link GanttChart} plugin enables a possibility to create a Gantt chart using a Handsontable instance. In this\n   * case, the whole table becomes read-only.\n   *\n   * @pro\n   * @type {Object}\n   * @default undefined\n   */\n  ganttChart: void 0,\n\n  /**\n   * @description\n   * Allows adding a tooltip to the table headers.\n   *\n   * Available options:\n   * * the `rows` property defines if tooltips should be added to row headers,\n   * * the `columns` property defines if tooltips should be added to column headers,\n   * * the `onlyTrimmed` property defines if tooltips should be added only to headers, which content is trimmed by the header itself (the content being wider then the header).\n   *\n   * @pro\n   * @type {Boolean|Object}\n   * @default undefined\n   *\n   * @example\n   * ```js\n   * // enable tooltips for all headers\n   * headerTooltips: true,\n   *\n   * // or\n   * headerTooltips: {\n   *   rows: false,\n   *   columns: true,\n   *   onlyTrimmed: true\n   * }\n   * ```\n   */\n  headerTooltips: void 0,\n\n  /**\n   * The {@link HiddenColumns} plugin allows hiding of certain columns. You can pass additional configuration with an\n   * object notation. Options that are then available are:\n   *  * `columns` - an array of rows that should be hidden on plugin initialization\n   *  * `indicators` - enables small ui markers to indicate where are hidden columns\n   *\n   * @pro\n   * @type {Boolean|Object}\n   * @default undefined\n   *\n   * @example\n   * ```js\n   * // enable column hiding\n   * hiddenColumns: true,\n   *\n   * // or\n   * hiddenColumns: {\n   *   // set columns that are hidden by default\n   *   columns: [5, 10, 15],\n   *   // show where are hidden columns\n   *   indicators: true\n   * }\n   * ```\n   */\n  hiddenColumns: void 0,\n\n  /**\n   * The {@link HiddenRows} plugin allows hiding of certain rows. You can pass additional configuration with an\n   * object notation. Options that are then available are:\n   *  * `rows` - an array of rows that should be hidden on plugin initialization\n   *  * `indicators` - enables small ui markers to indicate where are hidden columns\n   *\n   * @pro\n   * @type {Boolean|Object}\n   * @default undefined\n   *\n   * @example\n   * ```js\n   * // enable row hiding\n   * hiddenRows: true,\n   *\n   * // or\n   * hiddenRows: {\n   *   // set rows that are hidden by default\n   *   rows: [5, 10, 15],\n   *   // show where are hidden rows\n   *   indicators: true\n   * }\n   * ```\n   */\n  hiddenRows: void 0,\n\n  /**\n   * @description\n   * Allows creating a nested header structure, using the HTML's colspan attribute.\n   *\n   * @pro\n   * @type {Array[]}\n   * @default undefined\n   *\n   * @example\n   * ```\n   * nestedHeaders: [\n   *   ['A', {label: 'B', colspan: 8}, 'C'],\n   *   ['D', {label: 'E', colspan: 4}, {label: 'F', colspan: 4}, 'G'],\n   *   ['H', 'I', 'J', 'K', 'L', 'M', 'N', 'R', 'S', 'T']\n   * ],\n   * ```\n   */\n  nestedHeaders: void 0,\n\n  /**\n   * @description\n   * Plugin allowing hiding of certain rows.\n   *\n   * @pro\n   * @type {Boolean|Number[]}\n   * @default undefined\n   *\n   * @example\n   * ```js\n   * // enable plugin\n   * trimRows: true,\n   *\n   * // or\n   * // trim selected rows on table initialization\n   * trimRows: [5, 10, 15],\n   * ```\n   */\n  trimRows: void 0,\n\n  /**\n   * @description\n   * Allows setting a custom width of the row headers. You can provide a number or an array of widths, if many row\n   * header levels are defined.\n   *\n   * @type {Number|Number[]}\n   * @default undefined\n   *\n   * @example\n   * ```js\n   * // set width for all row headers\n   * rowHeaderWidth: 25,\n   *\n   * // or\n   * // set width for selected headers only\n   * rowHeaderWidth: [25, 30, 55],\n   * ```\n   */\n  rowHeaderWidth: void 0,\n\n  /**\n   * @description\n   * Allows setting a custom height of the column headers. You can provide a number or an array of heights, if many\n   * column header levels are defined.\n   *\n   * @type {Number|Number[]}\n   * @default undefined\n   *\n   * @example\n   * ```js\n   * // set shared height for all headers\n   * columnHeaderHeight: 35,\n   *\n   * // or\n   * // set height for each header individually\n   * columnHeaderHeight: [35, 20, 55],\n   *\n   * // or\n   * // skipped headers will fallback to default value\n   * columnHeaderHeight: [35, undefined, 55],\n   * ```\n   */\n  columnHeaderHeight: void 0,\n\n  /**\n   * @description\n   * Enables the {@link ObserveChanges} plugin switches table into one-way data binding where changes are applied into\n   * data source (from outside table) will be automatically reflected in the table.\n   *\n   * For every data change [afterChangesObserved](Hooks.html#event:afterChangesObserved) hook will be fired.\n   *\n   * @type {Boolean}\n   * @default undefined\n   *\n   * @example\n   * ```js\n   * observeChanges: true,\n   * ```\n   */\n  observeChanges: void 0,\n\n  /**\n   * @description\n   * When passed to the `column` property, allows specifying a custom sorting function for the desired column.\n   *\n   * @type {Function}\n   * @default undefined\n   *\n   * @example\n   * ```js\n   * columns: [\n   *   {\n   *     sortFunction: function(sortOrder) {\n   *        return function(a, b) {\n   *          // sorting function body.\n   *          //\n   *          // Function parameters:\n   *          // sortOrder: If true, the order is ascending, if false - descending. undefined = original order\n   *          // a, b: Two compared elements. These are 2-element arrays, with the first element being the row index, the second - cell value.\n   *        }\n   *     }\n   *   }\n   * ],\n   * ```\n   */\n  sortFunction: void 0,\n\n  /**\n   * If defined as `true`, the Autocomplete's suggestion list would be sorted by relevance (the closer to the left the\n   * match is, the higher the suggestion).\n   *\n   * __Note__, this option only works for [autocomplete-typed](https://docs.handsontable.com/demo-autocomplete.html) cells.\n   *\n   * @type {Boolean}\n   * @default true\n   *\n   * @example\n   * ```js\n   * columns: [\n   *   {\n   *     type: 'autocomplete',\n   *     source: [ ... ],\n   *     // keep options order as they were defined\n   *     sortByRelevance: false\n   *   }\n   * ],\n   * ```\n   */\n  sortByRelevance: true,\n\n  /**\n   * If defined as `true`, when the user types into the input area the Autocomplete's suggestion list is updated to only\n   * include those choices starting with what has been typed; if defined as `false` all suggestions remain shown, with\n   * those matching what has been typed marked in bold.\n   *\n   * __Note__, this option only works for [autocomplete-typed](https://docs.handsontable.com/demo-autocomplete.html) cells.\n   *\n   * @type {Boolean}\n   * @default true\n   *\n   * @example\n   * ```js\n   * columns: [\n   *   {\n   *     type: 'autocomplete',\n   *     source: [ ... ],\n   *     // don't hide options that don't match search query\n   *     filter: false\n   *   }\n   * ],\n   * ```\n   */\n  filter: true,\n\n  /**\n   * If defined as `true`, filtering in the Autocomplete Editor will be case-sensitive.\n   *\n   * __Note__, this option only works for [autocomplete-typed](https://docs.handsontable.com/demo-autocomplete.html) cells.\n   *\n   * @type {Boolean}\n   * @default: false\n   *\n   * @example\n   * ```js\n   * columns: [\n   *   {\n   *     type: 'autocomplete',\n   *     source: [ ... ],\n   *     // match case while searching autocomplete options\n   *     filteringCaseSensitive: true\n   *   }\n   * ],\n   * ```\n   */\n  filteringCaseSensitive: false,\n\n  /**\n   * @description\n   * Disables or enables the drag to scroll functionality.\n   *\n   * @type {Boolean}\n   * @default true\n   *\n   * @example\n   * ```js\n   * // don't scroll the viewport when selection gets to the viewport edge\n   * dragToScroll: false,\n   * ```\n   */\n  dragToScroll: true,\n\n  /**\n   * @description\n   * Disable or enable the nested rows functionality - displaying nested structures in a two-dimensional data table.\n   *\n   * See [quick setup of the Nested rows](https://docs.handsontable.kbudnik/pro/next/demo-nested-rows.html).\n   * @example\n   * ```js\n   * nestedRows: true,\n   * ```\n   *\n   * @pro\n   * @type {Boolean}\n   * @default false\n   */\n  nestedRows: void 0\n};\n\nexports.default = DefaultSettings;\n\n/***/ }),\n/* 198 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports.getTranslatedPhrase = getTranslatedPhrase;\n\nvar _array = __webpack_require__(2);\n\nvar _dictionariesManager = __webpack_require__(71);\n\nvar _phraseFormatters = __webpack_require__(271);\n\nvar _mixed = __webpack_require__(11);\n\n/**\n * Get phrase for specified dictionary key.\n *\n * @param {String} languageCode Language code for specific language i.e. 'en-US', 'pt-BR', 'de-DE'.\n * @param {String} dictionaryKey Constant which is dictionary key.\n * @param {*} argumentsForFormatters Arguments which will be handled by formatters.\n *\n * @returns {String}\n */\n// eslint-disable-next-line import/prefer-default-export\nfunction getTranslatedPhrase(languageCode, dictionaryKey, argumentsForFormatters) {\n  var languageDictionary = (0, _dictionariesManager.getLanguageDictionary)(languageCode);\n\n  if (languageDictionary === null) {\n    return null;\n  }\n\n  var phrasePropositions = languageDictionary[dictionaryKey];\n\n  if ((0, _mixed.isUndefined)(phrasePropositions)) {\n    return null;\n  }\n\n  var formattedPhrase = getFormattedPhrase(phrasePropositions, argumentsForFormatters);\n\n  if (Array.isArray(formattedPhrase)) {\n    return formattedPhrase[0];\n  }\n\n  return formattedPhrase;\n}\n\n/**\n * Get formatted phrase from phrases propositions for specified dictionary key.\n *\n * @private\n * @param {Array|string} phrasePropositions List of phrase propositions.\n * @param {*} argumentsForFormatters Arguments which will be handled by formatters.\n *\n * @returns {Array|string}\n */\nfunction getFormattedPhrase(phrasePropositions, argumentsForFormatters) {\n  var formattedPhrasePropositions = phrasePropositions;\n\n  (0, _array.arrayEach)((0, _phraseFormatters.getPhraseFormatters)(), function (formatter) {\n    formattedPhrasePropositions = formatter(phrasePropositions, argumentsForFormatters);\n  });\n\n  return formattedPhrasePropositions;\n}\n\n/***/ }),\n/* 199 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _templateObject = _taggedTemplateLiteral(['Language with code \"', '\" was not found. You should register particular language \\n    before using it. Read more about this issue at: https://docs.handsontable.com/i18n/missing-language-code.'], ['Language with code \"', '\" was not found. You should register particular language \\n    before using it. Read more about this issue at: https://docs.handsontable.com/i18n/missing-language-code.']);\n\nexports.extendNotExistingKeys = extendNotExistingKeys;\nexports.createCellHeadersRange = createCellHeadersRange;\nexports.normalizeLanguageCode = normalizeLanguageCode;\nexports.applyLanguageSetting = applyLanguageSetting;\nexports.warnUserAboutLanguageRegistration = warnUserAboutLanguageRegistration;\n\nvar _mixed = __webpack_require__(11);\n\nvar _object = __webpack_require__(1);\n\nvar _console = __webpack_require__(58);\n\nvar _templateLiteralTag = __webpack_require__(42);\n\nvar _dictionariesManager = __webpack_require__(71);\n\nfunction _taggedTemplateLiteral(strings, raw) { return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }\n\n/**\n * Perform shallow extend of a target object with only this extension's properties which doesn't exist in the target.\n *\n * @param {Object} target An object that will receive the new properties.\n * @param {Object} extension An object containing additional properties to merge into the target.\n */\n// TODO: Maybe it should be moved to global helpers? It's changed `extend` function.\nfunction extendNotExistingKeys(target, extension) {\n  (0, _object.objectEach)(extension, function (value, key) {\n    if ((0, _mixed.isUndefined)(target[key])) {\n      target[key] = value;\n    }\n  });\n\n  return target;\n}\n\n/**\n * Create range of values basing on cell indexes. For example, it will create below ranges for specified function arguments:\n *\n * createCellHeadersRange(2, 7) => `2-7`\n * createCellHeadersRange(7, 2) => `2-7`\n * createCellHeadersRange(0, 4, 'A', 'D') => `A-D`\n * createCellHeadersRange(4, 0, 'D', 'A') => `A-D`\n *\n * @param {number} firstRowIndex Index of \"first\" cell\n * @param {number} nextRowIndex Index of \"next\" cell\n * @param {*} fromValue Value which will represent \"first\" cell\n * @param {*} toValue Value which will represent \"next\" cell\n * @returns {String} Value representing range i.e. A-Z, 11-15.\n */\nfunction createCellHeadersRange(firstRowIndex, nextRowIndex) {\n  var fromValue = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : firstRowIndex;\n  var toValue = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : nextRowIndex;\n\n  // Will swap `fromValue` with `toValue` if it's necessary.\n  var from = fromValue,\n      to = toValue;\n\n\n  if (firstRowIndex > nextRowIndex) {\n    var _ref = [to, from];\n    from = _ref[0];\n    to = _ref[1];\n  }\n\n  return from + '-' + to;\n}\n\n/**\n * Normalize language code. It takes handled languageCode proposition and change it to proper languageCode.\n * For example, when it takes `eN-us` as parameter it return `en-US`\n *\n * @param {String} languageCode Language code for specific language i.e. 'en-US', 'pt-BR', 'de-DE'.\n * @returns {String}\n */\nfunction normalizeLanguageCode(languageCode) {\n  var languageCodePattern = /^([a-zA-Z]{2})-([a-zA-Z]{2})$/;\n  var partsOfLanguageCode = languageCodePattern.exec(languageCode);\n\n  if (partsOfLanguageCode) {\n    return partsOfLanguageCode[1].toLowerCase() + '-' + partsOfLanguageCode[2].toUpperCase();\n  }\n\n  return languageCode;\n}\n\n/**\n * Set proper start language code. User may set language code which is not proper.\n *\n * @param {Object} settings Settings object.\n * @param {String} languageCode Language code for specific language i.e. 'en-US', 'pt-BR', 'de-DE'.\n * @returns {String}\n */\nfunction applyLanguageSetting(settings, languageCode) {\n  var normalizedLanguageCode = normalizeLanguageCode(languageCode);\n\n  if ((0, _dictionariesManager.hasLanguageDictionary)(normalizedLanguageCode)) {\n    settings.language = normalizedLanguageCode;\n  } else {\n    settings.language = _dictionariesManager.DEFAULT_LANGUAGE_CODE;\n\n    warnUserAboutLanguageRegistration(languageCode);\n  }\n}\n\n/**\n *\n * Warn user if there is no registered language.\n *\n * @param {String} languageCode Language code for specific language i.e. 'en-US', 'pt-BR', 'de-DE'.\n */\nfunction warnUserAboutLanguageRegistration(languageCode) {\n  if ((0, _mixed.isDefined)(languageCode)) {\n    (0, _console.error)((0, _templateLiteralTag.toSingleLine)(_templateObject, languageCode));\n  }\n}\n\n/***/ }),\n/* 200 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports.stopObserving = exports.startObserving = exports.isPressedCtrlKey = exports.isPressed = exports._resetState = exports._getRefCount = undefined;\n\nvar _eventManager = __webpack_require__(5);\n\nvar _eventManager2 = _interopRequireDefault(_eventManager);\n\nvar _unicode = __webpack_require__(21);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar eventManager = new _eventManager2.default();\nvar pressedKeys = new Set();\nvar refCount = 0;\n\n/**\n * Begins observing keyboard keys states.\n */\nfunction startObserving() {\n  if (refCount === 0) {\n    eventManager.addEventListener(document, 'keydown', function (event) {\n      if (!pressedKeys.has(event.keyCode)) {\n        pressedKeys.add(event.keyCode);\n      }\n    });\n    eventManager.addEventListener(document, 'keyup', function (event) {\n      if (pressedKeys.has(event.keyCode)) {\n        pressedKeys.delete(event.keyCode);\n      }\n    });\n    eventManager.addEventListener(document, 'visibilitychange', function () {\n      if (document.hidden) {\n        pressedKeys.clear();\n      }\n    });\n  }\n\n  refCount += 1;\n}\n\n/**\n * Stops observing keyboard keys states and clear all previously saved states.\n */\nfunction stopObserving() {\n  if (refCount > 0) {\n    refCount -= 1;\n  }\n\n  if (refCount === 0) {\n    _resetState();\n  }\n}\n\n/**\n * Remove all listeners attached to the DOM and clear all previously saved states.\n */\nfunction _resetState() {\n  eventManager.clearEvents();\n  pressedKeys.clear();\n  refCount = 0;\n}\n\n/**\n * Checks if provided keyCode or keyCodes are pressed.\n *\n * @param {String} keyCodes The key codes passed as a string defined in helpers/unicode.js file delimited with '|'.\n * @return {Boolean}\n */\nfunction isPressed(keyCodes) {\n  return Array.from(pressedKeys.values()).some(function (_keyCode) {\n    return (0, _unicode.isKey)(_keyCode, keyCodes);\n  });\n}\n\n/**\n * Checks if ctrl keys are pressed.\n *\n * @return {Boolean}\n */\nfunction isPressedCtrlKey() {\n  var values = Array.from(pressedKeys.values());\n\n  return values.some(function (_keyCode) {\n    return (0, _unicode.isCtrlMetaKey)(_keyCode);\n  }) && values.every(function (_keyCode) {\n    return !(0, _unicode.isPrintableChar)(_keyCode);\n  });\n}\n\n/**\n * Returns reference count. Useful for debugging and testing purposes.\n *\n * @return {Number}\n */\nfunction _getRefCount() {\n  return refCount;\n}\n\nexports._getRefCount = _getRefCount;\nexports._resetState = _resetState;\nexports.isPressed = isPressed;\nexports.isPressedCtrlKey = isPressedCtrlKey;\nexports.startObserving = startObserving;\nexports.stopObserving = stopObserving;\n\n/***/ }),\n/* 201 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports.normalizeSelectionFactory = exports.detectSelectionType = exports.Selection = exports.Highlight = exports.handleMouseEvent = undefined;\n\nvar _highlight = __webpack_require__(202);\n\nvar _highlight2 = _interopRequireDefault(_highlight);\n\nvar _selection = __webpack_require__(280);\n\nvar _selection2 = _interopRequireDefault(_selection);\n\nvar _mouseEventHandler = __webpack_require__(194);\n\nvar _utils = __webpack_require__(72);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.handleMouseEvent = _mouseEventHandler.handleMouseEvent;\nexports.Highlight = _highlight2.default;\nexports.Selection = _selection2.default;\nexports.detectSelectionType = _utils.detectSelectionType;\nexports.normalizeSelectionFactory = _utils.normalizeSelectionFactory;\n\n/***/ }),\n/* 202 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports.CUSTOM_SELECTION = exports.HEADER_TYPE = exports.FILL_TYPE = exports.CELL_TYPE = exports.AREA_TYPE = exports.ACTIVE_HEADER_TYPE = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _types = __webpack_require__(273);\n\nvar _array = __webpack_require__(2);\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar ACTIVE_HEADER_TYPE = exports.ACTIVE_HEADER_TYPE = 'active-header';\nvar AREA_TYPE = exports.AREA_TYPE = 'area';\nvar CELL_TYPE = exports.CELL_TYPE = 'cell';\nvar FILL_TYPE = exports.FILL_TYPE = 'fill';\nvar HEADER_TYPE = exports.HEADER_TYPE = 'header';\nvar CUSTOM_SELECTION = exports.CUSTOM_SELECTION = 'custom-selection';\n\n/**\n * Highlight class responsible for managing Walkontable Selection classes.\n *\n * With Highlight object you can manipulate four different highlight types:\n *  - `cell` can be added only to a single cell at a time and it defines currently selected cell;\n *  - `fill` can occur only once and its highlight defines selection of autofill functionality (managed by the plugin with the same name);\n *  - `areas` can be added to multiple cells at a time. This type highlights selected cell or multiple cells.\n *    The multiple cells have to be defined as an uninterrupted order (regular shape). Otherwise, the new layer of\n *    that type should be created to manage not-consecutive selection;\n *  - `header` can occur multiple times. This type is designed to highlight only headers. Like `area` type it\n *    can appear with multiple highlights (accessed under different level layers).\n *\n * @class Highlight\n * @util\n */\n\nvar Highlight = function () {\n  function Highlight(options) {\n    _classCallCheck(this, Highlight);\n\n    /**\n     * Options consumed by Highlight class and Walkontable Selection classes.\n     *\n     * @type {Object}\n     */\n    this.options = options;\n    /**\n     * The property which describes which layer level of the visual selection will be modified.\n     * This option is valid only for `area` and `header` highlight types which occurs multiple times on\n     * the table (as a non-consecutive selection).\n     *\n     * An order of the layers is the same as the order of added new non-consecutive selections.\n     *\n     * @type {Number}\n     * @default 0\n     */\n    this.layerLevel = 0;\n    /**\n     * `cell` highlight object which describes attributes for the currently selected cell.\n     * It can only occur only once on the table.\n     *\n     * @type {Selection}\n     */\n    this.cell = (0, _types.createHighlight)(CELL_TYPE, options);\n    /**\n     * `fill` highlight object which describes attributes for the borders for autofill functionality.\n     * It can only occur only once on the table.\n     *\n     * @type {Selection}\n     */\n    this.fill = (0, _types.createHighlight)(FILL_TYPE, options);\n    /**\n     * Collection of the `area` highlights. That objects describes attributes for the borders and selection of\n     * the multiple selected cells. It can occur multiple times on the table.\n     *\n     * @type {Map.<number, Selection>}\n     */\n    this.areas = new Map();\n    /**\n     * Collection of the `header` highlights. That objects describes attributes for the selection of\n     * the multiple selected rows and columns in the table header. It can occur multiple times on the table.\n     *\n     * @type {Map.<number, Selection>}\n     */\n    this.headers = new Map();\n    /**\n     * Collection of the `active-header` highlights. That objects describes attributes for the selection of\n     * the multiple selected rows and columns in the table header. The table headers which have selected all items in\n     * a row will be marked as `active-header`.\n     *\n     * @type {Map.<number, Selection>}\n     */\n    this.activeHeaders = new Map();\n    /**\n     * Collection of the `custom-selection`, holder for example borders added through CustomBorders plugin.\n     *\n     * @type {Selection[]}\n     */\n    this.customSelections = [];\n  }\n\n  /**\n   * Check if highlight cell rendering is disabled for specyfied highlight type.\n   *\n   * @param {String} highlightType Highlight type. Possible values are: `cell`, `area`, `fill` or `header`.\n   * @return {Boolean}\n   */\n\n\n  _createClass(Highlight, [{\n    key: 'isEnabledFor',\n    value: function isEnabledFor(highlightType) {\n      // Legacy compatibility.\n      var type = highlightType === 'current' ? CELL_TYPE : highlightType;\n      var disableHighlight = this.options.disableHighlight;\n\n      if (typeof disableHighlight === 'string') {\n        disableHighlight = [disableHighlight];\n      }\n\n      return disableHighlight === false || Array.isArray(disableHighlight) && !disableHighlight.includes(type);\n    }\n\n    /**\n     * Set a new layer level to make access to the desire `area` and `header` highlights.\n     *\n     * @param {Number} [level=0] Layer level to use.\n     * @returns {Highlight}\n     */\n\n  }, {\n    key: 'useLayerLevel',\n    value: function useLayerLevel() {\n      var level = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n\n      this.layerLevel = level;\n\n      return this;\n    }\n\n    /**\n     * Get Walkontable Selection instance created for controlling highlight of the currently selected/edited cell.\n     *\n     * @return {Selection}\n     */\n\n  }, {\n    key: 'getCell',\n    value: function getCell() {\n      return this.cell;\n    }\n\n    /**\n     * Get Walkontable Selection instance created for controlling highlight of the autofill functionality.\n     *\n     * @return {Selection}\n     */\n\n  }, {\n    key: 'getFill',\n    value: function getFill() {\n      return this.fill;\n    }\n\n    /**\n     * Get or create (if not exist in the cache) Walkontable Selection instance created for controlling highlight\n     * of the multiple selected cells.\n     *\n     * @return {Selection}\n     */\n\n  }, {\n    key: 'createOrGetArea',\n    value: function createOrGetArea() {\n      var layerLevel = this.layerLevel;\n      var area = void 0;\n\n      if (this.areas.has(layerLevel)) {\n        area = this.areas.get(layerLevel);\n      } else {\n        area = (0, _types.createHighlight)(AREA_TYPE, Object.assign({ layerLevel: layerLevel }, this.options));\n\n        this.areas.set(layerLevel, area);\n      }\n\n      return area;\n    }\n\n    /**\n     * Get all Walkontable Selection instances which describes the state of the visual highlight of the cells.\n     *\n     * @return {Selection[]}\n     */\n\n  }, {\n    key: 'getAreas',\n    value: function getAreas() {\n      return [].concat(_toConsumableArray(this.areas.values()));\n    }\n\n    /**\n     * Get or create (if not exist in the cache) Walkontable Selection instance created for controlling highlight\n     * of the multiple selected header cells.\n     *\n     * @return {Selection}\n     */\n\n  }, {\n    key: 'createOrGetHeader',\n    value: function createOrGetHeader() {\n      var layerLevel = this.layerLevel;\n      var header = void 0;\n\n      if (this.headers.has(layerLevel)) {\n        header = this.headers.get(layerLevel);\n      } else {\n        header = (0, _types.createHighlight)(HEADER_TYPE, Object.assign({}, this.options));\n\n        this.headers.set(layerLevel, header);\n      }\n\n      return header;\n    }\n\n    /**\n     * Get all Walkontable Selection instances which describes the state of the visual highlight of the headers.\n     *\n     * @return {Selection[]}\n     */\n\n  }, {\n    key: 'getHeaders',\n    value: function getHeaders() {\n      return [].concat(_toConsumableArray(this.headers.values()));\n    }\n\n    /**\n     * Get or create (if not exist in the cache) Walkontable Selection instance created for controlling highlight\n     * of the multiple selected active header cells.\n     *\n     * @return {Selection}\n     */\n\n  }, {\n    key: 'createOrGetActiveHeader',\n    value: function createOrGetActiveHeader() {\n      var layerLevel = this.layerLevel;\n      var header = void 0;\n\n      if (this.activeHeaders.has(layerLevel)) {\n        header = this.activeHeaders.get(layerLevel);\n      } else {\n        header = (0, _types.createHighlight)(ACTIVE_HEADER_TYPE, Object.assign({}, this.options));\n\n        this.activeHeaders.set(layerLevel, header);\n      }\n\n      return header;\n    }\n\n    /**\n     * Get all Walkontable Selection instances which describes the state of the visual highlight of the active headers.\n     *\n     * @return {Selection[]}\n     */\n\n  }, {\n    key: 'getActiveHeaders',\n    value: function getActiveHeaders() {\n      return [].concat(_toConsumableArray(this.activeHeaders.values()));\n    }\n\n    /**\n     * Get Walkontable Selection instance created for controlling highlight of the custom selection functionality.\n     *\n     * @return {Selection}\n     */\n\n  }, {\n    key: 'getCustomSelections',\n    value: function getCustomSelections() {\n      return [].concat(_toConsumableArray(this.customSelections.values()));\n    }\n\n    /**\n     * Add selection to the custom selection instance. The new selection are added to the end of the selection collection.\n     *\n     * @param {Object} options\n     */\n\n  }, {\n    key: 'addCustomSelection',\n    value: function addCustomSelection(options) {\n      this.customSelections.push((0, _types.createHighlight)(CUSTOM_SELECTION, Object.assign({}, options)));\n    }\n\n    /**\n     * Perform cleaning visual highlights for the whole table.\n     */\n\n  }, {\n    key: 'clear',\n    value: function clear() {\n      this.cell.clear();\n      this.fill.clear();\n\n      (0, _array.arrayEach)(this.areas.values(), function (highlight) {\n        return void highlight.clear();\n      });\n      (0, _array.arrayEach)(this.headers.values(), function (highlight) {\n        return void highlight.clear();\n      });\n      (0, _array.arrayEach)(this.activeHeaders.values(), function (highlight) {\n        return void highlight.clear();\n      });\n    }\n\n    /**\n     * This object can be iterate over using `for of` syntax or using internal `arrayEach` helper.\n     */\n\n  }, {\n    key: Symbol.iterator,\n    value: function value() {\n      return [this.cell, this.fill].concat(_toConsumableArray(this.areas.values()), _toConsumableArray(this.headers.values()), _toConsumableArray(this.activeHeaders.values()), _toConsumableArray(this.customSelections))[Symbol.iterator]();\n    }\n  }]);\n\n  return Highlight;\n}();\n\nexports.default = Highlight;\n\n/***/ }),\n/* 203 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _object = __webpack_require__(1);\n\nvar _number = __webpack_require__(6);\n\nvar _mixed = __webpack_require__(11);\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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * @class SamplesGenerator\n * @util\n */\nvar SamplesGenerator = function () {\n  _createClass(SamplesGenerator, null, [{\n    key: 'SAMPLE_COUNT',\n\n    /**\n     * Number of samples to take of each value length.\n     *\n     * @type {Number}\n     */\n    get: function get() {\n      return 3;\n    }\n  }]);\n\n  function SamplesGenerator(dataFactory) {\n    _classCallCheck(this, SamplesGenerator);\n\n    /**\n     * Samples prepared for calculations.\n     *\n     * @type {Map}\n     * @default {null}\n     */\n    this.samples = null;\n    /**\n     * Function which give the data to collect samples.\n     *\n     * @type {Function}\n     */\n    this.dataFactory = dataFactory;\n    /**\n     * Custom number of samples to take of each value length.\n     *\n     * @type {Number}\n     * @default {null}\n     */\n    this.customSampleCount = null;\n    /**\n     * `true` if duplicate samples collection should be allowed, `false` otherwise.\n     *\n     * @type {Boolean}\n     * @default {false}\n     */\n    this.allowDuplicates = false;\n  }\n\n  /**\n   * Get the sample count for this instance.\n   *\n   * @returns {Number}\n   */\n\n\n  _createClass(SamplesGenerator, [{\n    key: 'getSampleCount',\n    value: function getSampleCount() {\n      if (this.customSampleCount) {\n        return this.customSampleCount;\n      }\n      return SamplesGenerator.SAMPLE_COUNT;\n    }\n\n    /**\n     * Set the sample count.\n     *\n     * @param {Number} sampleCount Number of samples to be collected.\n     */\n\n  }, {\n    key: 'setSampleCount',\n    value: function setSampleCount(sampleCount) {\n      this.customSampleCount = sampleCount;\n    }\n\n    /**\n     * Set if the generator should accept duplicate values.\n     *\n     * @param {Boolean} allowDuplicates `true` to allow duplicate values.\n     */\n\n  }, {\n    key: 'setAllowDuplicates',\n    value: function setAllowDuplicates(allowDuplicates) {\n      this.allowDuplicates = allowDuplicates;\n    }\n\n    /**\n     * Generate samples for row. You can control which area should be sampled by passing `rowRange` object and `colRange` object.\n     *\n     * @param {Object|Number} rowRange\n     * @param {Object} colRange\n     * @returns {Object}\n     */\n\n  }, {\n    key: 'generateRowSamples',\n    value: function generateRowSamples(rowRange, colRange) {\n      return this.generateSamples('row', colRange, rowRange);\n    }\n\n    /**\n     * Generate samples for column. You can control which area should be sampled by passing `colRange` object and `rowRange` object.\n     *\n     * @param {Object} colRange Column index.\n     * @param {Object} rowRange Column index.\n     * @returns {Object}\n     */\n\n  }, {\n    key: 'generateColumnSamples',\n    value: function generateColumnSamples(colRange, rowRange) {\n      return this.generateSamples('col', rowRange, colRange);\n    }\n\n    /**\n     * Generate collection of samples.\n     *\n     * @param {String} type Type to generate. Can be `col` or `row`.\n     * @param {Object} range\n     * @param {Object|Number} specifierRange\n     * @returns {Map}\n     */\n\n  }, {\n    key: 'generateSamples',\n    value: function generateSamples(type, range, specifierRange) {\n      var _this = this;\n\n      var samples = new Map();\n\n      var _ref = typeof specifierRange === 'number' ? { from: specifierRange, to: specifierRange } : specifierRange,\n          from = _ref.from,\n          to = _ref.to;\n\n      (0, _number.rangeEach)(from, to, function (index) {\n        var sample = _this.generateSample(type, range, index);\n\n        samples.set(index, sample);\n      });\n\n      return samples;\n    }\n\n    /**\n     * Generate sample for specified type (`row` or `col`).\n     *\n     * @param {String} type Samples type `row` or `col`.\n     * @param {Object} range\n     * @param {Number} specifierValue\n     * @returns {Map}\n     */\n\n  }, {\n    key: 'generateSample',\n    value: function generateSample(type, range, specifierValue) {\n      var _this2 = this;\n\n      if (type !== 'row' && type !== 'col') {\n        throw new Error('Unsupported sample type');\n      }\n\n      var samples = new Map();\n      var computedKey = type === 'row' ? 'col' : 'row';\n      var sampledValues = [];\n\n      (0, _number.rangeEach)(range.from, range.to, function (index) {\n        var _ref2 = type === 'row' ? _this2.dataFactory(specifierValue, index) : _this2.dataFactory(index, specifierValue),\n            value = _ref2.value,\n            bundleCountSeed = _ref2.bundleCountSeed;\n\n        var hasCustomBundleSeed = bundleCountSeed > 0;\n        var length = void 0;\n\n        if ((0, _object.isObject)(value)) {\n          length = Object.keys(value).length;\n        } else if (Array.isArray(value)) {\n          length = value.length;\n        } else {\n          length = (0, _mixed.stringify)(value).length;\n        }\n\n        if (hasCustomBundleSeed) {\n          length += bundleCountSeed;\n        }\n\n        if (!samples.has(length)) {\n          samples.set(length, {\n            needed: _this2.getSampleCount(),\n            strings: []\n          });\n        }\n        var sample = samples.get(length);\n\n        if (sample.needed) {\n          var duplicate = sampledValues.indexOf(value) > -1;\n\n          if (!duplicate || _this2.allowDuplicates || hasCustomBundleSeed) {\n            sample.strings.push(_defineProperty({ value: value }, computedKey, index));\n            sampledValues.push(value);\n            sample.needed -= 1;\n          }\n        }\n      });\n\n      return samples;\n    }\n  }]);\n\n  return SamplesGenerator;\n}();\n\nexports.default = SamplesGenerator;\n\n/***/ }),\n/* 204 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _number = __webpack_require__(6);\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar STATE_INITIALIZED = 0;\nvar STATE_BUILT = 1;\nvar STATE_APPENDED = 2;\nvar UNIT = 'px';\n\n/**\n * @class\n * @private\n */\n\nvar BaseUI = function () {\n  function BaseUI(hotInstance) {\n    _classCallCheck(this, BaseUI);\n\n    /**\n     * Instance of Handsontable.\n     *\n     * @type {Core}\n     */\n    this.hot = hotInstance;\n    /**\n     * DOM element representing the ui element.\n     *\n     * @type {HTMLElement}\n     * @private\n     */\n    this._element = null;\n    /**\n     * Flag which determines build state of element.\n     *\n     * @type {Boolean}\n     */\n    this.state = STATE_INITIALIZED;\n  }\n\n  /**\n   * Add created UI elements to table.\n   *\n   * @param {HTMLElement} wrapper Element which are parent for our UI element.\n   */\n\n\n  _createClass(BaseUI, [{\n    key: 'appendTo',\n    value: function appendTo(wrapper) {\n      wrapper.appendChild(this._element);\n\n      this.state = STATE_APPENDED;\n    }\n\n    /**\n     * Method for create UI element. Only create, without append to table.\n     */\n\n  }, {\n    key: 'build',\n    value: function build() {\n      this._element = document.createElement('div');\n      this.state = STATE_BUILT;\n    }\n\n    /**\n     * Method for remove UI element.\n     */\n\n  }, {\n    key: 'destroy',\n    value: function destroy() {\n      if (this.isAppended()) {\n        this._element.parentElement.removeChild(this._element);\n      }\n\n      this._element = null;\n      this.state = STATE_INITIALIZED;\n    }\n\n    /**\n     * Check if UI element are appended.\n     *\n     * @returns {Boolean}\n     */\n\n  }, {\n    key: 'isAppended',\n    value: function isAppended() {\n      return this.state === STATE_APPENDED;\n    }\n\n    /**\n     * Check if UI element are built.\n     *\n     * @returns {Boolean}\n     */\n\n  }, {\n    key: 'isBuilt',\n    value: function isBuilt() {\n      return this.state >= STATE_BUILT;\n    }\n\n    /**\n     * Setter for position.\n     *\n     * @param {Number} top New top position of the element.\n     * @param {Number} left New left position of the element.\n     */\n\n  }, {\n    key: 'setPosition',\n    value: function setPosition(top, left) {\n      if ((0, _number.isNumeric)(top)) {\n        this._element.style.top = top + UNIT;\n      }\n      if ((0, _number.isNumeric)(left)) {\n        this._element.style.left = left + UNIT;\n      }\n    }\n\n    /**\n     * Getter for the element position.\n     *\n     * @returns {Object} Object contains left and top position of the element.\n     */\n\n  }, {\n    key: 'getPosition',\n    value: function getPosition() {\n      return {\n        top: this._element.style.top ? parseInt(this._element.style.top, 10) : 0,\n        left: this._element.style.left ? parseInt(this._element.style.left, 10) : 0\n      };\n    }\n\n    /**\n     * Setter for the element size.\n     *\n     * @param {Number} width New width of the element.\n     * @param {Number} height New height of the element.\n     */\n\n  }, {\n    key: 'setSize',\n    value: function setSize(width, height) {\n      if ((0, _number.isNumeric)(width)) {\n        this._element.style.width = width + UNIT;\n      }\n      if ((0, _number.isNumeric)(height)) {\n        this._element.style.height = height + UNIT;\n      }\n    }\n\n    /**\n     * Getter for the element position.\n     *\n     * @returns {Object} Object contains height and width of the element.\n     */\n\n  }, {\n    key: 'getSize',\n    value: function getSize() {\n      return {\n        width: this._element.style.width ? parseInt(this._element.style.width, 10) : 0,\n        height: this._element.style.height ? parseInt(this._element.style.height, 10) : 0\n      };\n    }\n\n    /**\n     * Setter for the element offset. Offset means marginTop and marginLeft of the element.\n     *\n     * @param {Number} top New margin top of the element.\n     * @param {Number} left New margin left of the element.\n     */\n\n  }, {\n    key: 'setOffset',\n    value: function setOffset(top, left) {\n      if ((0, _number.isNumeric)(top)) {\n        this._element.style.marginTop = top + UNIT;\n      }\n      if ((0, _number.isNumeric)(left)) {\n        this._element.style.marginLeft = left + UNIT;\n      }\n    }\n\n    /**\n     * Getter for the element offset.\n     *\n     * @returns {Object} Object contains top and left offset of the element.\n     */\n\n  }, {\n    key: 'getOffset',\n    value: function getOffset() {\n      return {\n        top: this._element.style.marginTop ? parseInt(this._element.style.marginTop, 10) : 0,\n        left: this._element.style.marginLeft ? parseInt(this._element.style.marginLeft, 10) : 0\n      };\n    }\n  }]);\n\n  return BaseUI;\n}();\n\nexports.default = BaseUI;\n\n/***/ }),\n/* 205 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar STATE_INITIALIZED = 0;\nvar STATE_BUILT = 1;\nvar STATE_APPENDED = 2;\nvar UNIT = 'px';\n\n/**\n * @class\n * @private\n */\n\nvar BaseUI = function () {\n  function BaseUI(hotInstance) {\n    _classCallCheck(this, BaseUI);\n\n    /**\n     * Instance of Handsontable.\n     *\n     * @type {Core}\n     */\n    this.hot = hotInstance;\n    /**\n     * DOM element representing the ui element.\n     *\n     * @type {HTMLElement}\n     * @private\n     */\n    this._element = null;\n    /**\n     * Flag which determines build state of element.\n     *\n     * @type {Boolean}\n     */\n    this.state = STATE_INITIALIZED;\n  }\n\n  /**\n   * Add created UI elements to table.\n   *\n   * @param {HTMLElement} wrapper Element which are parent for our UI element.\n   */\n\n\n  _createClass(BaseUI, [{\n    key: 'appendTo',\n    value: function appendTo(wrapper) {\n      wrapper.appendChild(this._element);\n\n      this.state = STATE_APPENDED;\n    }\n\n    /**\n     * Method for create UI element. Only create, without append to table.\n     */\n\n  }, {\n    key: 'build',\n    value: function build() {\n      this._element = document.createElement('div');\n      this.state = STATE_BUILT;\n    }\n\n    /**\n     * Method for remove UI element.\n     */\n\n  }, {\n    key: 'destroy',\n    value: function destroy() {\n      if (this.isAppended()) {\n        this._element.parentElement.removeChild(this._element);\n      }\n\n      this._element = null;\n      this.state = STATE_INITIALIZED;\n    }\n\n    /**\n     * Check if UI element are appended.\n     *\n     * @returns {Boolean}\n     */\n\n  }, {\n    key: 'isAppended',\n    value: function isAppended() {\n      return this.state === STATE_APPENDED;\n    }\n\n    /**\n     * Check if UI element are built.\n     *\n     * @returns {Boolean}\n     */\n\n  }, {\n    key: 'isBuilt',\n    value: function isBuilt() {\n      return this.state >= STATE_BUILT;\n    }\n\n    /**\n     * Setter for position.\n     *\n     * @param {Number} top New top position of the element.\n     * @param {Number} left New left position of the element.\n     */\n\n  }, {\n    key: 'setPosition',\n    value: function setPosition(top, left) {\n      if (top !== void 0) {\n        this._element.style.top = top + UNIT;\n      }\n      if (left !== void 0) {\n        this._element.style.left = left + UNIT;\n      }\n    }\n\n    /**\n     * Getter for the element position.\n     *\n     * @returns {Object} Object contains left and top position of the element.\n     */\n\n  }, {\n    key: 'getPosition',\n    value: function getPosition() {\n      return {\n        top: this._element.style.top ? parseInt(this._element.style.top, 10) : 0,\n        left: this._element.style.left ? parseInt(this._element.style.left, 10) : 0\n      };\n    }\n\n    /**\n     * Setter for the element size.\n     *\n     * @param {Number} width New width of the element.\n     * @param {Number} height New height of the element.\n     */\n\n  }, {\n    key: 'setSize',\n    value: function setSize(width, height) {\n      if (width) {\n        this._element.style.width = width + UNIT;\n      }\n      if (height) {\n        this._element.style.height = height + UNIT;\n      }\n    }\n\n    /**\n     * Getter for the element position.\n     *\n     * @returns {Object} Object contains height and width of the element.\n     */\n\n  }, {\n    key: 'getSize',\n    value: function getSize() {\n      return {\n        width: this._element.style.width ? parseInt(this._element.style.width, 10) : 0,\n        height: this._element.style.height ? parseInt(this._element.style.height, 10) : 0\n      };\n    }\n\n    /**\n     * Setter for the element offset. Offset means marginTop and marginLeft of the element.\n     *\n     * @param {Number} top New margin top of the element.\n     * @param {Number} left New margin left of the element.\n     */\n\n  }, {\n    key: 'setOffset',\n    value: function setOffset(top, left) {\n      if (top) {\n        this._element.style.marginTop = top + UNIT;\n      }\n      if (left) {\n        this._element.style.marginLeft = left + UNIT;\n      }\n    }\n\n    /**\n     * Getter for the element offset.\n     *\n     * @returns {Object} Object contains top and left offset of the element.\n     */\n\n  }, {\n    key: 'getOffset',\n    value: function getOffset() {\n      return {\n        top: this._element.style.marginTop ? parseInt(this._element.style.marginTop, 10) : 0,\n        left: this._element.style.marginLeft ? parseInt(this._element.style.marginLeft, 10) : 0\n      };\n    }\n  }]);\n\n  return BaseUI;\n}();\n\nexports.default = BaseUI;\n\n/***/ }),\n/* 206 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports.applySpanProperties = applySpanProperties;\n/**\n * Apply the `colspan`/`rowspan` properties.\n *\n * @param {HTMLElement} TD The soon-to-be-modified cell.\n * @param {MergedCellCoords} merged cellInfo The merged cell in question.\n * @param {Number} row Row index.\n * @param {Number} col Column index.\n */\n// eslint-disable-next-line import/prefer-default-export\nfunction applySpanProperties(TD, mergedCellInfo, row, col) {\n  if (mergedCellInfo) {\n    if (mergedCellInfo.row === row && mergedCellInfo.col === col) {\n      TD.setAttribute('rowspan', mergedCellInfo.rowspan.toString());\n      TD.setAttribute('colspan', mergedCellInfo.colspan.toString());\n    } else {\n      TD.removeAttribute('rowspan');\n      TD.removeAttribute('colspan');\n\n      TD.style.display = 'none';\n    }\n  } else {\n    TD.removeAttribute('rowspan');\n    TD.removeAttribute('colspan');\n\n    TD.style.display = '';\n  }\n}\n\n/***/ }),\n/* 207 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\n__webpack_require__(98);\n\n__webpack_require__(113);\n\n__webpack_require__(114);\n\n__webpack_require__(118);\n\n__webpack_require__(119);\n\n__webpack_require__(121);\n\n__webpack_require__(124);\n\n__webpack_require__(125);\n\n__webpack_require__(126);\n\n__webpack_require__(127);\n\n__webpack_require__(128);\n\n__webpack_require__(129);\n\n__webpack_require__(130);\n\n__webpack_require__(131);\n\n__webpack_require__(132);\n\n__webpack_require__(133);\n\n__webpack_require__(134);\n\n__webpack_require__(135);\n\n__webpack_require__(136);\n\n__webpack_require__(137);\n\n__webpack_require__(138);\n\n__webpack_require__(139);\n\n__webpack_require__(140);\n\n__webpack_require__(141);\n\n__webpack_require__(143);\n\n__webpack_require__(145);\n\n__webpack_require__(146);\n\n__webpack_require__(147);\n\n__webpack_require__(148);\n\n__webpack_require__(149);\n\n__webpack_require__(150);\n\n__webpack_require__(151);\n\n__webpack_require__(152);\n\n__webpack_require__(153);\n\n__webpack_require__(154);\n\n__webpack_require__(155);\n\n__webpack_require__(156);\n\n__webpack_require__(157);\n\n__webpack_require__(88);\n\n__webpack_require__(158);\n\n__webpack_require__(159);\n\n__webpack_require__(161);\n\n__webpack_require__(162);\n\n__webpack_require__(163);\n\n__webpack_require__(164);\n\n__webpack_require__(165);\n\n__webpack_require__(166);\n\n__webpack_require__(167);\n\n__webpack_require__(169);\n\n__webpack_require__(170);\n\n__webpack_require__(171);\n\n__webpack_require__(173);\n\n__webpack_require__(174);\n\n__webpack_require__(175);\n\n__webpack_require__(226);\n\n__webpack_require__(227);\n\n__webpack_require__(228);\n\nvar _editors = __webpack_require__(17);\n\nvar _renderers = __webpack_require__(14);\n\nvar _validators = __webpack_require__(34);\n\nvar _cellTypes = __webpack_require__(89);\n\nvar _core = __webpack_require__(90);\n\nvar _core2 = _interopRequireDefault(_core);\n\nvar _jquery = __webpack_require__(283);\n\nvar _jquery2 = _interopRequireDefault(_jquery);\n\nvar _eventManager = __webpack_require__(5);\n\nvar _eventManager2 = _interopRequireDefault(_eventManager);\n\nvar _pluginHooks = __webpack_require__(16);\n\nvar _pluginHooks2 = _interopRequireDefault(_pluginHooks);\n\nvar _ghostTable = __webpack_require__(93);\n\nvar _ghostTable2 = _interopRequireDefault(_ghostTable);\n\nvar _array = __webpack_require__(2);\n\nvar arrayHelpers = _interopRequireWildcard(_array);\n\nvar _browser = __webpack_require__(39);\n\nvar browserHelpers = _interopRequireWildcard(_browser);\n\nvar _data = __webpack_require__(92);\n\nvar dataHelpers = _interopRequireWildcard(_data);\n\nvar _date = __webpack_require__(192);\n\nvar dateHelpers = _interopRequireWildcard(_date);\n\nvar _feature = __webpack_require__(40);\n\nvar featureHelpers = _interopRequireWildcard(_feature);\n\nvar _function = __webpack_require__(43);\n\nvar functionHelpers = _interopRequireWildcard(_function);\n\nvar _mixed = __webpack_require__(11);\n\nvar mixedHelpers = _interopRequireWildcard(_mixed);\n\nvar _number = __webpack_require__(6);\n\nvar numberHelpers = _interopRequireWildcard(_number);\n\nvar _object = __webpack_require__(1);\n\nvar objectHelpers = _interopRequireWildcard(_object);\n\nvar _setting = __webpack_require__(91);\n\nvar settingHelpers = _interopRequireWildcard(_setting);\n\nvar _string = __webpack_require__(33);\n\nvar stringHelpers = _interopRequireWildcard(_string);\n\nvar _unicode = __webpack_require__(21);\n\nvar unicodeHelpers = _interopRequireWildcard(_unicode);\n\nvar _element = __webpack_require__(0);\n\nvar domHelpers = _interopRequireWildcard(_element);\n\nvar _event = __webpack_require__(13);\n\nvar domEventHelpers = _interopRequireWildcard(_event);\n\nvar _index = __webpack_require__(284);\n\nvar plugins = _interopRequireWildcard(_index);\n\nvar _plugins = __webpack_require__(8);\n\nvar _defaultSettings = __webpack_require__(197);\n\nvar _defaultSettings2 = _interopRequireDefault(_defaultSettings);\n\nvar _rootInstance = __webpack_require__(196);\n\nvar _i18n = __webpack_require__(198);\n\nvar _constants = __webpack_require__(7);\n\nvar constants = _interopRequireWildcard(_constants);\n\nvar _dictionariesManager = __webpack_require__(71);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction Handsontable(rootElement, userSettings) {\n  var instance = new _core2.default(rootElement, userSettings || {}, _rootInstance.rootInstanceSymbol);\n\n  instance.init();\n\n  return instance;\n}\n\n(0, _jquery2.default)(Handsontable);\n\nHandsontable.Core = _core2.default;\nHandsontable.DefaultSettings = _defaultSettings2.default;\nHandsontable.EventManager = _eventManager2.default;\nHandsontable._getListenersCounter = _eventManager.getListenersCounter; // For MemoryLeak tests\n\nHandsontable.buildDate = '11/09/2018 09:55:19';\nHandsontable.packageName = 'handsontable';\nHandsontable.version = '5.0.2';\n\nvar baseVersion = '';\n\nif (baseVersion) {\n  Handsontable.baseVersion = baseVersion;\n}\n\n// Export Hooks singleton\nHandsontable.hooks = _pluginHooks2.default.getSingleton();\n\n// TODO: Remove this exports after rewrite tests about this module\nHandsontable.__GhostTable = _ghostTable2.default;\n//\n\n// Export all helpers to the Handsontable object\nvar HELPERS = [arrayHelpers, browserHelpers, dataHelpers, dateHelpers, featureHelpers, functionHelpers, mixedHelpers, numberHelpers, objectHelpers, settingHelpers, stringHelpers, unicodeHelpers];\nvar DOM = [domHelpers, domEventHelpers];\n\nHandsontable.helper = {};\nHandsontable.dom = {};\n\n// Fill general helpers.\narrayHelpers.arrayEach(HELPERS, function (helper) {\n  arrayHelpers.arrayEach(Object.getOwnPropertyNames(helper), function (key) {\n    if (key.charAt(0) !== '_') {\n      Handsontable.helper[key] = helper[key];\n    }\n  });\n});\n\n// Fill DOM helpers.\narrayHelpers.arrayEach(DOM, function (helper) {\n  arrayHelpers.arrayEach(Object.getOwnPropertyNames(helper), function (key) {\n    if (key.charAt(0) !== '_') {\n      Handsontable.dom[key] = helper[key];\n    }\n  });\n});\n\n// Export cell types.\nHandsontable.cellTypes = {};\n\narrayHelpers.arrayEach((0, _cellTypes.getRegisteredCellTypeNames)(), function (cellTypeName) {\n  Handsontable.cellTypes[cellTypeName] = (0, _cellTypes.getCellType)(cellTypeName);\n});\n\nHandsontable.cellTypes.registerCellType = _cellTypes.registerCellType;\nHandsontable.cellTypes.getCellType = _cellTypes.getCellType;\n\n// Export all registered editors from the Handsontable.\nHandsontable.editors = {};\n\narrayHelpers.arrayEach((0, _editors.getRegisteredEditorNames)(), function (editorName) {\n  Handsontable.editors[stringHelpers.toUpperCaseFirst(editorName) + 'Editor'] = (0, _editors.getEditor)(editorName);\n});\n\nHandsontable.editors.registerEditor = _editors.registerEditor;\nHandsontable.editors.getEditor = _editors.getEditor;\n\n// Export all registered renderers from the Handsontable.\nHandsontable.renderers = {};\n\narrayHelpers.arrayEach((0, _renderers.getRegisteredRendererNames)(), function (rendererName) {\n  var renderer = (0, _renderers.getRenderer)(rendererName);\n\n  if (rendererName === 'base') {\n    Handsontable.renderers.cellDecorator = renderer;\n  }\n  Handsontable.renderers[stringHelpers.toUpperCaseFirst(rendererName) + 'Renderer'] = renderer;\n});\n\nHandsontable.renderers.registerRenderer = _renderers.registerRenderer;\nHandsontable.renderers.getRenderer = _renderers.getRenderer;\n\n// Export all registered validators from the Handsontable.\nHandsontable.validators = {};\n\narrayHelpers.arrayEach((0, _validators.getRegisteredValidatorNames)(), function (validatorName) {\n  Handsontable.validators[stringHelpers.toUpperCaseFirst(validatorName) + 'Validator'] = (0, _validators.getValidator)(validatorName);\n});\n\nHandsontable.validators.registerValidator = _validators.registerValidator;\nHandsontable.validators.getValidator = _validators.getValidator;\n\n// Export all registered plugins from the Handsontable.\nHandsontable.plugins = {};\n\narrayHelpers.arrayEach(Object.getOwnPropertyNames(plugins), function (pluginName) {\n  var plugin = plugins[pluginName];\n\n  if (pluginName === 'Base') {\n    Handsontable.plugins[pluginName + 'Plugin'] = plugin;\n  } else {\n    Handsontable.plugins[pluginName] = plugin;\n  }\n});\n\nHandsontable.plugins.registerPlugin = _plugins.registerPlugin;\n\nHandsontable.languages = {};\nHandsontable.languages.dictionaryKeys = constants;\nHandsontable.languages.getLanguageDictionary = _dictionariesManager.getLanguageDictionary;\nHandsontable.languages.getLanguagesDictionaries = _dictionariesManager.getLanguagesDictionaries;\nHandsontable.languages.registerLanguageDictionary = _dictionariesManager.registerLanguageDictionary;\n\n// Alias to `getTranslatedPhrase` function, for more information check it API.\nHandsontable.languages.getTranslatedPhrase = function () {\n  return _i18n.getTranslatedPhrase.apply(undefined, arguments);\n};\n\nexports.default = Handsontable;\n\n/***/ }),\n/* 208 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar dP = __webpack_require__(20);\nvar anObject = __webpack_require__(18);\nvar getKeys = __webpack_require__(35);\n\nmodule.exports = __webpack_require__(22) ? Object.defineProperties : function defineProperties(O, Properties) {\n  anObject(O);\n  var keys = getKeys(Properties);\n  var length = keys.length;\n  var i = 0;\n  var P;\n  while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n  return O;\n};\n\n\n/***/ }),\n/* 209 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar create = __webpack_require__(76);\nvar descriptor = __webpack_require__(51);\nvar setToStringTag = __webpack_require__(53);\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\n__webpack_require__(29)(IteratorPrototype, __webpack_require__(12)('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n  Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n  setToStringTag(Constructor, NAME + ' Iterator');\n};\n\n\n/***/ }),\n/* 210 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar isObject = __webpack_require__(9);\nvar setPrototypeOf = __webpack_require__(112).set;\nmodule.exports = function (that, target, C) {\n  var S = target.constructor;\n  var P;\n  if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {\n    setPrototypeOf(that, P);\n  } return that;\n};\n\n\n/***/ }),\n/* 211 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = __webpack_require__(212);\n\nmodule.exports = function (original, length) {\n  return new (speciesConstructor(original))(length);\n};\n\n\n/***/ }),\n/* 212 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar isObject = __webpack_require__(9);\nvar isArray = __webpack_require__(115);\nvar SPECIES = __webpack_require__(12)('species');\n\nmodule.exports = function (original) {\n  var C;\n  if (isArray(original)) {\n    C = original.constructor;\n    // cross-realm fallback\n    if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n    if (isObject(C)) {\n      C = C[SPECIES];\n      if (C === null) C = undefined;\n    }\n  } return C === undefined ? Array : C;\n};\n\n\n/***/ }),\n/* 213 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = __webpack_require__(18);\nvar aFunction = __webpack_require__(63);\nvar SPECIES = __webpack_require__(12)('species');\nmodule.exports = function (O, D) {\n  var C = anObject(O).constructor;\n  var S;\n  return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n\n\n/***/ }),\n/* 214 */\n/***/ (function(module, exports) {\n\n// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n  var un = that === undefined;\n  switch (args.length) {\n    case 0: return un ? fn()\n                      : fn.call(that);\n    case 1: return un ? fn(args[0])\n                      : fn.call(that, args[0]);\n    case 2: return un ? fn(args[0], args[1])\n                      : fn.call(that, args[0], args[1]);\n    case 3: return un ? fn(args[0], args[1], args[2])\n                      : fn.call(that, args[0], args[1], args[2]);\n    case 4: return un ? fn(args[0], args[1], args[2], args[3])\n                      : fn.call(that, args[0], args[1], args[2], args[3]);\n  } return fn.apply(that, args);\n};\n\n\n/***/ }),\n/* 215 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar global = __webpack_require__(15);\nvar macrotask = __webpack_require__(82).set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = __webpack_require__(44)(process) == 'process';\n\nmodule.exports = function () {\n  var head, last, notify;\n\n  var flush = function () {\n    var parent, fn;\n    if (isNode && (parent = process.domain)) parent.exit();\n    while (head) {\n      fn = head.fn;\n      head = head.next;\n      try {\n        fn();\n      } catch (e) {\n        if (head) notify();\n        else last = undefined;\n        throw e;\n      }\n    } last = undefined;\n    if (parent) parent.enter();\n  };\n\n  // Node.js\n  if (isNode) {\n    notify = function () {\n      process.nextTick(flush);\n    };\n  // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n  } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n    var toggle = true;\n    var node = document.createTextNode('');\n    new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n    notify = function () {\n      node.data = toggle = !toggle;\n    };\n  // environments with maybe non-completely correct, but existent Promise\n  } else if (Promise && Promise.resolve) {\n    // Promise.resolve without an argument throws an error in LG WebOS 2\n    var promise = Promise.resolve(undefined);\n    notify = function () {\n      promise.then(flush);\n    };\n  // for other environments - macrotask based on:\n  // - setImmediate\n  // - MessageChannel\n  // - window.postMessag\n  // - onreadystatechange\n  // - setTimeout\n  } else {\n    notify = function () {\n      // strange IE + webpack dev server bug - use .call(global)\n      macrotask.call(global, flush);\n    };\n  }\n\n  return function (fn) {\n    var task = { fn: fn, next: undefined };\n    if (last) last.next = task;\n    if (!head) {\n      head = task;\n      notify();\n    } last = task;\n  };\n};\n\n\n/***/ }),\n/* 216 */\n/***/ (function(module, exports) {\n\nmodule.exports = function (exec) {\n  try {\n    return { e: false, v: exec() };\n  } catch (e) {\n    return { e: true, v: e };\n  }\n};\n\n\n/***/ }),\n/* 217 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar anObject = __webpack_require__(18);\nvar isObject = __webpack_require__(9);\nvar newPromiseCapability = __webpack_require__(120);\n\nmodule.exports = function (C, x) {\n  anObject(C);\n  if (isObject(x) && x.constructor === C) return x;\n  var promiseCapability = newPromiseCapability.f(C);\n  var resolve = promiseCapability.resolve;\n  resolve(x);\n  return promiseCapability.promise;\n};\n\n\n/***/ }),\n/* 218 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar global = __webpack_require__(15);\nvar core = __webpack_require__(37);\nvar LIBRARY = __webpack_require__(49);\nvar wksExt = __webpack_require__(122);\nvar defineProperty = __webpack_require__(20).f;\nmodule.exports = function (name) {\n  var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n  if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n\n\n/***/ }),\n/* 219 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// all enumerable object keys, includes symbols\nvar getKeys = __webpack_require__(35);\nvar gOPS = __webpack_require__(69);\nvar pIE = __webpack_require__(54);\nmodule.exports = function (it) {\n  var result = getKeys(it);\n  var getSymbols = gOPS.f;\n  if (getSymbols) {\n    var symbols = getSymbols(it);\n    var isEnum = pIE.f;\n    var i = 0;\n    var key;\n    while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n  } return result;\n};\n\n\n/***/ }),\n/* 220 */\n/***/ (function(module, exports) {\n\n// 7.2.9 SameValue(x, y)\nmodule.exports = Object.is || function is(x, y) {\n  // eslint-disable-next-line no-self-compare\n  return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n\n\n/***/ }),\n/* 221 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar toInteger = __webpack_require__(60);\nvar defined = __webpack_require__(36);\n// true  -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n  return function (that, pos) {\n    var s = String(defined(that));\n    var i = toInteger(pos);\n    var l = s.length;\n    var a, b;\n    if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n    a = s.charCodeAt(i);\n    return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n      ? TO_STRING ? s.charAt(i) : a\n      : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n  };\n};\n\n\n/***/ }),\n/* 222 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = __webpack_require__(18);\nmodule.exports = function () {\n  var that = anObject(this);\n  var result = '';\n  if (that.global) result += 'g';\n  if (that.ignoreCase) result += 'i';\n  if (that.multiline) result += 'm';\n  if (that.unicode) result += 'u';\n  if (that.sticky) result += 'y';\n  return result;\n};\n\n\n/***/ }),\n/* 223 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\n\nvar toObject = __webpack_require__(31);\nvar toAbsoluteIndex = __webpack_require__(61);\nvar toLength = __webpack_require__(25);\n\nmodule.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {\n  var O = toObject(this);\n  var len = toLength(O.length);\n  var to = toAbsoluteIndex(target, len);\n  var from = toAbsoluteIndex(start, len);\n  var end = arguments.length > 2 ? arguments[2] : undefined;\n  var count = Math.min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);\n  var inc = 1;\n  if (from < to && to < from + count) {\n    inc = -1;\n    from += count - 1;\n    to += count - 1;\n  }\n  while (count-- > 0) {\n    if (from in O) O[to] = O[from];\n    else delete O[to];\n    to += inc;\n    from += inc;\n  } return O;\n};\n\n\n/***/ }),\n/* 224 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\n\nvar toObject = __webpack_require__(31);\nvar toAbsoluteIndex = __webpack_require__(61);\nvar toLength = __webpack_require__(25);\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n  var O = toObject(this);\n  var length = toLength(O.length);\n  var aLen = arguments.length;\n  var index = toAbsoluteIndex(aLen > 1 ? arguments[1] : undefined, length);\n  var end = aLen > 2 ? arguments[2] : undefined;\n  var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n  while (endPos > index) O[index++] = value;\n  return O;\n};\n\n\n/***/ }),\n/* 225 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// all object keys, includes non-enumerable and symbols\nvar gOPN = __webpack_require__(84);\nvar gOPS = __webpack_require__(69);\nvar anObject = __webpack_require__(18);\nvar Reflect = __webpack_require__(15).Reflect;\nmodule.exports = Reflect && Reflect.ownKeys || function ownKeys(it) {\n  var keys = gOPN.f(anObject(it));\n  var getSymbols = gOPS.f;\n  return getSymbols ? keys.concat(getSymbols(it)) : keys;\n};\n\n\n/***/ }),\n/* 226 */\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n/* 227 */\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n/* 228 */\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n/* 229 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _element = __webpack_require__(0);\n\nvar _base = __webpack_require__(41);\n\nvar _base2 = _interopRequireDefault(_base);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n/**\n * A overlay that renders ALL available rows & columns positioned on top of the original Walkontable instance and all other overlays.\n * Used for debugging purposes to see if the other overlays (that render only part of the rows & columns) are positioned correctly\n *\n * @class DebugOverlay\n */\nvar DebugOverlay = function (_Overlay) {\n  _inherits(DebugOverlay, _Overlay);\n\n  /**\n   * @param {Walkontable} wotInstance\n   */\n  function DebugOverlay(wotInstance) {\n    _classCallCheck(this, DebugOverlay);\n\n    var _this = _possibleConstructorReturn(this, (DebugOverlay.__proto__ || Object.getPrototypeOf(DebugOverlay)).call(this, wotInstance));\n\n    _this.clone = _this.makeClone(_base2.default.CLONE_DEBUG);\n    _this.clone.wtTable.holder.style.opacity = 0.4;\n    _this.clone.wtTable.holder.style.textShadow = '0 0 2px #ff0000';\n\n    (0, _element.addClass)(_this.clone.wtTable.holder.parentNode, 'wtDebugVisible');\n    return _this;\n  }\n\n  return DebugOverlay;\n}(_base2.default);\n\n_base2.default.registerOverlay(_base2.default.CLONE_DEBUG, DebugOverlay);\n\nexports.default = DebugOverlay;\n\n/***/ }),\n/* 230 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _element = __webpack_require__(0);\n\nvar _base = __webpack_require__(41);\n\nvar _base2 = _interopRequireDefault(_base);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n/**\n * @class LeftOverlay\n */\nvar LeftOverlay = function (_Overlay) {\n  _inherits(LeftOverlay, _Overlay);\n\n  /**\n   * @param {Walkontable} wotInstance\n   */\n  function LeftOverlay(wotInstance) {\n    _classCallCheck(this, LeftOverlay);\n\n    var _this = _possibleConstructorReturn(this, (LeftOverlay.__proto__ || Object.getPrototypeOf(LeftOverlay)).call(this, wotInstance));\n\n    _this.clone = _this.makeClone(_base2.default.CLONE_LEFT);\n    return _this;\n  }\n\n  /**\n   * Checks if overlay should be fully rendered.\n   *\n   * @returns {Boolean}\n   */\n\n\n  _createClass(LeftOverlay, [{\n    key: 'shouldBeRendered',\n    value: function shouldBeRendered() {\n      return !!(this.wot.getSetting('fixedColumnsLeft') || this.wot.getSetting('rowHeaders').length);\n    }\n\n    /**\n     * Updates the left overlay position.\n     */\n\n  }, {\n    key: 'resetFixedPosition',\n    value: function resetFixedPosition() {\n      if (!this.needFullRender || !this.wot.wtTable.holder.parentNode) {\n        // removed from DOM\n        return;\n      }\n      var overlayRoot = this.clone.wtTable.holder.parentNode;\n      var headerPosition = 0;\n      var preventOverflow = this.wot.getSetting('preventOverflow');\n\n      if (this.trimmingContainer === window && (!preventOverflow || preventOverflow !== 'horizontal')) {\n        var box = this.wot.wtTable.hider.getBoundingClientRect();\n        var left = Math.ceil(box.left);\n        var right = Math.ceil(box.right);\n        var finalLeft = void 0;\n        var finalTop = void 0;\n\n        finalTop = this.wot.wtTable.hider.style.top;\n        finalTop = finalTop === '' ? 0 : finalTop;\n\n        if (left < 0 && right - overlayRoot.offsetWidth > 0) {\n          finalLeft = -left;\n        } else {\n          finalLeft = 0;\n        }\n        headerPosition = finalLeft;\n        finalLeft += 'px';\n\n        (0, _element.setOverlayPosition)(overlayRoot, finalLeft, finalTop);\n      } else {\n        headerPosition = this.getScrollPosition();\n        (0, _element.resetCssTransform)(overlayRoot);\n      }\n      this.adjustHeaderBordersPosition(headerPosition);\n      this.adjustElementsSize();\n    }\n\n    /**\n     * Sets the main overlay's horizontal scroll position.\n     *\n     * @param {Number} pos\n     * @returns {Boolean}\n     */\n\n  }, {\n    key: 'setScrollPosition',\n    value: function setScrollPosition(pos) {\n      var result = false;\n\n      if (this.mainTableScrollableElement === window && window.scrollX !== pos) {\n        window.scrollTo(pos, (0, _element.getWindowScrollTop)());\n        result = true;\n      } else if (this.mainTableScrollableElement.scrollLeft !== pos) {\n        this.mainTableScrollableElement.scrollLeft = pos;\n        result = true;\n      }\n\n      return result;\n    }\n\n    /**\n     * Triggers onScroll hook callback.\n     */\n\n  }, {\n    key: 'onScroll',\n    value: function onScroll() {\n      this.wot.getSetting('onScrollVertically');\n    }\n\n    /**\n     * Calculates total sum cells width.\n     *\n     * @param {Number} from Column index which calculates started from.\n     * @param {Number} to Column index where calculation is finished.\n     * @returns {Number} Width sum.\n     */\n\n  }, {\n    key: 'sumCellSizes',\n    value: function sumCellSizes(from, to) {\n      var defaultColumnWidth = this.wot.wtSettings.defaultColumnWidth;\n      var column = from;\n      var sum = 0;\n\n      while (column < to) {\n        sum += this.wot.wtTable.getStretchedColumnWidth(column) || defaultColumnWidth;\n        column += 1;\n      }\n\n      return sum;\n    }\n\n    /**\n     * Adjust overlay root element, childs and master table element sizes (width, height).\n     *\n     * @param {Boolean} [force=false]\n     */\n\n  }, {\n    key: 'adjustElementsSize',\n    value: function adjustElementsSize() {\n      var force = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n      this.updateTrimmingContainer();\n\n      if (this.needFullRender || force) {\n        this.adjustRootElementSize();\n        this.adjustRootChildrenSize();\n\n        if (!force) {\n          this.areElementSizesAdjusted = true;\n        }\n      }\n    }\n\n    /**\n     * Adjust overlay root element size (width and height).\n     */\n\n  }, {\n    key: 'adjustRootElementSize',\n    value: function adjustRootElementSize() {\n      var masterHolder = this.wot.wtTable.holder;\n      var scrollbarHeight = masterHolder.clientHeight === masterHolder.offsetHeight ? 0 : (0, _element.getScrollbarWidth)();\n      var overlayRoot = this.clone.wtTable.holder.parentNode;\n      var overlayRootStyle = overlayRoot.style;\n      var preventOverflow = this.wot.getSetting('preventOverflow');\n\n      if (this.trimmingContainer !== window || preventOverflow === 'vertical') {\n        var height = this.wot.wtViewport.getWorkspaceHeight() - scrollbarHeight;\n\n        height = Math.min(height, (0, _element.innerHeight)(this.wot.wtTable.wtRootElement));\n\n        overlayRootStyle.height = height + 'px';\n      } else {\n        overlayRootStyle.height = '';\n      }\n\n      this.clone.wtTable.holder.style.height = overlayRootStyle.height;\n\n      var tableWidth = (0, _element.outerWidth)(this.clone.wtTable.TABLE);\n      overlayRootStyle.width = (tableWidth === 0 ? tableWidth : tableWidth + 4) + 'px';\n    }\n\n    /**\n     * Adjust overlay root childs size.\n     */\n\n  }, {\n    key: 'adjustRootChildrenSize',\n    value: function adjustRootChildrenSize() {\n      var scrollbarWidth = (0, _element.getScrollbarWidth)();\n\n      this.clone.wtTable.hider.style.height = this.hider.style.height;\n      this.clone.wtTable.holder.style.height = this.clone.wtTable.holder.parentNode.style.height;\n\n      if (scrollbarWidth === 0) {\n        scrollbarWidth = 30;\n      }\n      this.clone.wtTable.holder.style.width = parseInt(this.clone.wtTable.holder.parentNode.style.width, 10) + scrollbarWidth + 'px';\n    }\n\n    /**\n     * Adjust the overlay dimensions and position.\n     */\n\n  }, {\n    key: 'applyToDOM',\n    value: function applyToDOM() {\n      var total = this.wot.getSetting('totalColumns');\n\n      if (!this.areElementSizesAdjusted) {\n        this.adjustElementsSize();\n      }\n      if (typeof this.wot.wtViewport.columnsRenderCalculator.startPosition === 'number') {\n        this.spreader.style.left = this.wot.wtViewport.columnsRenderCalculator.startPosition + 'px';\n      } else if (total === 0) {\n        this.spreader.style.left = '0';\n      } else {\n        throw new Error('Incorrect value of the columnsRenderCalculator');\n      }\n      this.spreader.style.right = '';\n\n      if (this.needFullRender) {\n        this.syncOverlayOffset();\n      }\n    }\n\n    /**\n     * Synchronize calculated top position to an element.\n     */\n\n  }, {\n    key: 'syncOverlayOffset',\n    value: function syncOverlayOffset() {\n      if (typeof this.wot.wtViewport.rowsRenderCalculator.startPosition === 'number') {\n        this.clone.wtTable.spreader.style.top = this.wot.wtViewport.rowsRenderCalculator.startPosition + 'px';\n      } else {\n        this.clone.wtTable.spreader.style.top = '';\n      }\n    }\n\n    /**\n     * Scrolls horizontally to a column at the left edge of the viewport.\n     *\n     * @param {Number} sourceCol  Column index which you want to scroll to.\n     * @param {Boolean} [beyondRendered]  if `true`, scrolls according to the bottom edge (top edge is by default).\n     * @returns {Boolean}\n     */\n\n  }, {\n    key: 'scrollTo',\n    value: function scrollTo(sourceCol, beyondRendered) {\n      var newX = this.getTableParentOffset();\n      var sourceInstance = this.wot.cloneSource ? this.wot.cloneSource : this.wot;\n      var mainHolder = sourceInstance.wtTable.holder;\n      var scrollbarCompensation = 0;\n\n      if (beyondRendered && mainHolder.offsetWidth !== mainHolder.clientWidth) {\n        scrollbarCompensation = (0, _element.getScrollbarWidth)();\n      }\n      if (beyondRendered) {\n        newX += this.sumCellSizes(0, sourceCol + 1);\n        newX -= this.wot.wtViewport.getViewportWidth();\n      } else {\n        newX += this.sumCellSizes(this.wot.getSetting('fixedColumnsLeft'), sourceCol);\n      }\n\n      newX += scrollbarCompensation;\n\n      return this.setScrollPosition(newX);\n    }\n\n    /**\n     * Gets table parent left position.\n     *\n     * @returns {Number}\n     */\n\n  }, {\n    key: 'getTableParentOffset',\n    value: function getTableParentOffset() {\n      var preventOverflow = this.wot.getSetting('preventOverflow');\n      var offset = 0;\n\n      if (!preventOverflow && this.trimmingContainer === window) {\n        offset = this.wot.wtTable.holderOffset.left;\n      }\n\n      return offset;\n    }\n\n    /**\n     * Gets the main overlay's horizontal scroll position.\n     *\n     * @returns {Number} Main table's vertical scroll position.\n     */\n\n  }, {\n    key: 'getScrollPosition',\n    value: function getScrollPosition() {\n      return (0, _element.getScrollLeft)(this.mainTableScrollableElement);\n    }\n\n    /**\n     * Adds css classes to hide the header border's header (cell-selection border hiding issue).\n     *\n     * @param {Number} position Header X position if trimming container is window or scroll top if not.\n     */\n\n  }, {\n    key: 'adjustHeaderBordersPosition',\n    value: function adjustHeaderBordersPosition(position) {\n      var masterParent = this.wot.wtTable.holder.parentNode;\n      var rowHeaders = this.wot.getSetting('rowHeaders');\n      var fixedColumnsLeft = this.wot.getSetting('fixedColumnsLeft');\n      var totalRows = this.wot.getSetting('totalRows');\n\n      if (totalRows) {\n        (0, _element.removeClass)(masterParent, 'emptyRows');\n      } else {\n        (0, _element.addClass)(masterParent, 'emptyRows');\n      }\n\n      if (fixedColumnsLeft && !rowHeaders.length) {\n        (0, _element.addClass)(masterParent, 'innerBorderLeft');\n      } else if (!fixedColumnsLeft && rowHeaders.length) {\n        var previousState = (0, _element.hasClass)(masterParent, 'innerBorderLeft');\n\n        if (position) {\n          (0, _element.addClass)(masterParent, 'innerBorderLeft');\n        } else {\n          (0, _element.removeClass)(masterParent, 'innerBorderLeft');\n        }\n        if (!previousState && position || previousState && !position) {\n          this.wot.wtOverlays.adjustElementsSize();\n        }\n      }\n    }\n  }]);\n\n  return LeftOverlay;\n}(_base2.default);\n\n_base2.default.registerOverlay(_base2.default.CLONE_LEFT, LeftOverlay);\n\nexports.default = LeftOverlay;\n\n/***/ }),\n/* 231 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _element = __webpack_require__(0);\n\nvar _array = __webpack_require__(2);\n\nvar _base = __webpack_require__(41);\n\nvar _base2 = _interopRequireDefault(_base);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n/**\n * @class TopOverlay\n */\nvar TopOverlay = function (_Overlay) {\n  _inherits(TopOverlay, _Overlay);\n\n  /**\n   * @param {Walkontable} wotInstance\n   */\n  function TopOverlay(wotInstance) {\n    _classCallCheck(this, TopOverlay);\n\n    var _this = _possibleConstructorReturn(this, (TopOverlay.__proto__ || Object.getPrototypeOf(TopOverlay)).call(this, wotInstance));\n\n    _this.clone = _this.makeClone(_base2.default.CLONE_TOP);\n    return _this;\n  }\n\n  /**\n   * Checks if overlay should be fully rendered.\n   *\n   * @returns {Boolean}\n   */\n\n\n  _createClass(TopOverlay, [{\n    key: 'shouldBeRendered',\n    value: function shouldBeRendered() {\n      return !!(this.wot.getSetting('fixedRowsTop') || this.wot.getSetting('columnHeaders').length);\n    }\n\n    /**\n     * Updates the top overlay position.\n     */\n\n  }, {\n    key: 'resetFixedPosition',\n    value: function resetFixedPosition() {\n      if (!this.needFullRender || !this.wot.wtTable.holder.parentNode) {\n        // removed from DOM\n        return;\n      }\n      var overlayRoot = this.clone.wtTable.holder.parentNode;\n      var headerPosition = 0;\n      var preventOverflow = this.wot.getSetting('preventOverflow');\n\n      if (this.trimmingContainer === window && (!preventOverflow || preventOverflow !== 'vertical')) {\n        var box = this.wot.wtTable.hider.getBoundingClientRect();\n        var top = Math.ceil(box.top);\n        var bottom = Math.ceil(box.bottom);\n        var finalLeft = void 0;\n        var finalTop = void 0;\n\n        finalLeft = this.wot.wtTable.hider.style.left;\n        finalLeft = finalLeft === '' ? 0 : finalLeft;\n\n        if (top < 0 && bottom - overlayRoot.offsetHeight > 0) {\n          finalTop = -top;\n        } else {\n          finalTop = 0;\n        }\n        headerPosition = finalTop;\n        finalTop += 'px';\n\n        (0, _element.setOverlayPosition)(overlayRoot, finalLeft, finalTop);\n      } else {\n        headerPosition = this.getScrollPosition();\n        (0, _element.resetCssTransform)(overlayRoot);\n      }\n\n      this.adjustHeaderBordersPosition(headerPosition);\n      this.adjustElementsSize();\n    }\n\n    /**\n     * Sets the main overlay's vertical scroll position.\n     *\n     * @param {Number} pos\n     * @returns {Boolean}\n     */\n\n  }, {\n    key: 'setScrollPosition',\n    value: function setScrollPosition(pos) {\n      var result = false;\n\n      if (this.mainTableScrollableElement === window && window.scrollY !== pos) {\n        window.scrollTo((0, _element.getWindowScrollLeft)(), pos);\n        result = true;\n      } else if (this.mainTableScrollableElement.scrollTop !== pos) {\n        this.mainTableScrollableElement.scrollTop = pos;\n        result = true;\n      }\n\n      return result;\n    }\n\n    /**\n     * Triggers onScroll hook callback.\n     */\n\n  }, {\n    key: 'onScroll',\n    value: function onScroll() {\n      this.wot.getSetting('onScrollHorizontally');\n    }\n\n    /**\n     * Calculates total sum cells height.\n     *\n     * @param {Number} from Row index which calculates started from.\n     * @param {Number} to Row index where calculation is finished.\n     * @returns {Number} Height sum.\n     */\n\n  }, {\n    key: 'sumCellSizes',\n    value: function sumCellSizes(from, to) {\n      var defaultRowHeight = this.wot.wtSettings.settings.defaultRowHeight;\n      var row = from;\n      var sum = 0;\n\n      while (row < to) {\n        var height = this.wot.wtTable.getRowHeight(row);\n\n        sum += height === void 0 ? defaultRowHeight : height;\n        row += 1;\n      }\n\n      return sum;\n    }\n\n    /**\n     * Adjust overlay root element, childs and master table element sizes (width, height).\n     *\n     * @param {Boolean} [force=false]\n     */\n\n  }, {\n    key: 'adjustElementsSize',\n    value: function adjustElementsSize() {\n      var force = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n      this.updateTrimmingContainer();\n\n      if (this.needFullRender || force) {\n        this.adjustRootElementSize();\n        this.adjustRootChildrenSize();\n\n        if (!force) {\n          this.areElementSizesAdjusted = true;\n        }\n      }\n    }\n\n    /**\n     * Adjust overlay root element size (width and height).\n     */\n\n  }, {\n    key: 'adjustRootElementSize',\n    value: function adjustRootElementSize() {\n      var masterHolder = this.wot.wtTable.holder;\n      var scrollbarWidth = masterHolder.clientWidth === masterHolder.offsetWidth ? 0 : (0, _element.getScrollbarWidth)();\n      var overlayRoot = this.clone.wtTable.holder.parentNode;\n      var overlayRootStyle = overlayRoot.style;\n      var preventOverflow = this.wot.getSetting('preventOverflow');\n\n      if (this.trimmingContainer !== window || preventOverflow === 'horizontal') {\n        var width = this.wot.wtViewport.getWorkspaceWidth() - scrollbarWidth;\n\n        width = Math.min(width, (0, _element.innerWidth)(this.wot.wtTable.wtRootElement));\n\n        overlayRootStyle.width = width + 'px';\n      } else {\n        overlayRootStyle.width = '';\n      }\n\n      this.clone.wtTable.holder.style.width = overlayRootStyle.width;\n\n      var tableHeight = (0, _element.outerHeight)(this.clone.wtTable.TABLE);\n      overlayRootStyle.height = (tableHeight === 0 ? tableHeight : tableHeight + 4) + 'px';\n    }\n\n    /**\n     * Adjust overlay root childs size.\n     */\n\n  }, {\n    key: 'adjustRootChildrenSize',\n    value: function adjustRootChildrenSize() {\n      var scrollbarWidth = (0, _element.getScrollbarWidth)();\n\n      this.clone.wtTable.hider.style.width = this.hider.style.width;\n      this.clone.wtTable.holder.style.width = this.clone.wtTable.holder.parentNode.style.width;\n\n      if (scrollbarWidth === 0) {\n        scrollbarWidth = 30;\n      }\n      this.clone.wtTable.holder.style.height = parseInt(this.clone.wtTable.holder.parentNode.style.height, 10) + scrollbarWidth + 'px';\n    }\n\n    /**\n     * Adjust the overlay dimensions and position.\n     */\n\n  }, {\n    key: 'applyToDOM',\n    value: function applyToDOM() {\n      var total = this.wot.getSetting('totalRows');\n\n      if (!this.areElementSizesAdjusted) {\n        this.adjustElementsSize();\n      }\n      if (typeof this.wot.wtViewport.rowsRenderCalculator.startPosition === 'number') {\n        this.spreader.style.top = this.wot.wtViewport.rowsRenderCalculator.startPosition + 'px';\n      } else if (total === 0) {\n        // can happen if there are 0 rows\n        this.spreader.style.top = '0';\n      } else {\n        throw new Error('Incorrect value of the rowsRenderCalculator');\n      }\n      this.spreader.style.bottom = '';\n\n      if (this.needFullRender) {\n        this.syncOverlayOffset();\n      }\n    }\n\n    /**\n     * Synchronize calculated left position to an element.\n     */\n\n  }, {\n    key: 'syncOverlayOffset',\n    value: function syncOverlayOffset() {\n      if (typeof this.wot.wtViewport.columnsRenderCalculator.startPosition === 'number') {\n        this.clone.wtTable.spreader.style.left = this.wot.wtViewport.columnsRenderCalculator.startPosition + 'px';\n      } else {\n        this.clone.wtTable.spreader.style.left = '';\n      }\n    }\n\n    /**\n     * Scrolls vertically to a row.\n     *\n     * @param {Number} sourceRow Row index which you want to scroll to.\n     * @param {Boolean} [bottomEdge] if `true`, scrolls according to the bottom edge (top edge is by default).\n     * @returns {Boolean}\n     */\n\n  }, {\n    key: 'scrollTo',\n    value: function scrollTo(sourceRow, bottomEdge) {\n      var newY = this.getTableParentOffset();\n      var sourceInstance = this.wot.cloneSource ? this.wot.cloneSource : this.wot;\n      var mainHolder = sourceInstance.wtTable.holder;\n      var scrollbarCompensation = 0;\n\n      if (bottomEdge && mainHolder.offsetHeight !== mainHolder.clientHeight) {\n        scrollbarCompensation = (0, _element.getScrollbarWidth)();\n      }\n\n      if (bottomEdge) {\n        var fixedRowsBottom = this.wot.getSetting('fixedRowsBottom');\n        var totalRows = this.wot.getSetting('totalRows');\n\n        newY += this.sumCellSizes(0, sourceRow + 1);\n        newY -= this.wot.wtViewport.getViewportHeight() - this.sumCellSizes(totalRows - fixedRowsBottom, totalRows);\n        // Fix 1 pixel offset when cell is selected\n        newY += 1;\n      } else {\n        newY += this.sumCellSizes(this.wot.getSetting('fixedRowsTop'), sourceRow);\n      }\n      newY += scrollbarCompensation;\n\n      return this.setScrollPosition(newY);\n    }\n\n    /**\n     * Gets table parent top position.\n     *\n     * @returns {Number}\n     */\n\n  }, {\n    key: 'getTableParentOffset',\n    value: function getTableParentOffset() {\n      if (this.mainTableScrollableElement === window) {\n        return this.wot.wtTable.holderOffset.top;\n      }\n      return 0;\n    }\n\n    /**\n     * Gets the main overlay's vertical scroll position.\n     *\n     * @returns {Number} Main table's vertical scroll position.\n     */\n\n  }, {\n    key: 'getScrollPosition',\n    value: function getScrollPosition() {\n      return (0, _element.getScrollTop)(this.mainTableScrollableElement);\n    }\n\n    /**\n     * Redraw borders of selection.\n     *\n     * @param {WalkontableSelection} selection Selection for redraw.\n     */\n\n  }, {\n    key: 'redrawSelectionBorders',\n    value: function redrawSelectionBorders(selection) {\n      if (selection && selection.cellRange) {\n        var border = selection.getBorder(this.wot);\n        var corners = selection.getCorners();\n\n        border.disappear();\n        border.appear(corners);\n      }\n    }\n\n    /**\n     * Redrawing borders of all selections.\n     */\n\n  }, {\n    key: 'redrawAllSelectionsBorders',\n    value: function redrawAllSelectionsBorders() {\n      var _this2 = this;\n\n      var selections = this.wot.selections;\n\n      this.redrawSelectionBorders(selections.getCell());\n\n      (0, _array.arrayEach)(selections.getAreas(), function (area) {\n        _this2.redrawSelectionBorders(area);\n      });\n      this.redrawSelectionBorders(selections.getFill());\n\n      this.wot.wtTable.wot.wtOverlays.leftOverlay.refresh();\n    }\n\n    /**\n     * Adds css classes to hide the header border's header (cell-selection border hiding issue).\n     *\n     * @param {Number} position Header Y position if trimming container is window or scroll top if not.\n     */\n\n  }, {\n    key: 'adjustHeaderBordersPosition',\n    value: function adjustHeaderBordersPosition(position) {\n      var masterParent = this.wot.wtTable.holder.parentNode;\n      var totalColumns = this.wot.getSetting('totalColumns');\n\n      if (totalColumns) {\n        (0, _element.removeClass)(masterParent, 'emptyColumns');\n      } else {\n        (0, _element.addClass)(masterParent, 'emptyColumns');\n      }\n\n      if (this.wot.getSetting('fixedRowsTop') === 0 && this.wot.getSetting('columnHeaders').length > 0) {\n        var previousState = (0, _element.hasClass)(masterParent, 'innerBorderTop');\n\n        if (position || this.wot.getSetting('totalRows') === 0) {\n          (0, _element.addClass)(masterParent, 'innerBorderTop');\n        } else {\n          (0, _element.removeClass)(masterParent, 'innerBorderTop');\n        }\n\n        if (!previousState && position || previousState && !position) {\n          this.wot.wtOverlays.adjustElementsSize();\n\n          // cell borders should be positioned once again,\n          // because we added / removed 1px border from table header\n          this.redrawAllSelectionsBorders();\n        }\n      }\n\n      // nasty workaround for double border in the header, TODO: find a pure-css solution\n      if (this.wot.getSetting('rowHeaders').length === 0) {\n        var secondHeaderCell = this.clone.wtTable.THEAD.querySelectorAll('th:nth-of-type(2)');\n\n        if (secondHeaderCell) {\n          for (var i = 0; i < secondHeaderCell.length; i++) {\n            secondHeaderCell[i].style['border-left-width'] = 0;\n          }\n        }\n      }\n    }\n  }]);\n\n  return TopOverlay;\n}(_base2.default);\n\n_base2.default.registerOverlay(_base2.default.CLONE_TOP, TopOverlay);\n\nexports.default = TopOverlay;\n\n/***/ }),\n/* 232 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _element = __webpack_require__(0);\n\nvar _base = __webpack_require__(41);\n\nvar _base2 = _interopRequireDefault(_base);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n/**\n * @class TopLeftCornerOverlay\n */\nvar TopLeftCornerOverlay = function (_Overlay) {\n  _inherits(TopLeftCornerOverlay, _Overlay);\n\n  /**\n   * @param {Walkontable} wotInstance\n   */\n  function TopLeftCornerOverlay(wotInstance) {\n    _classCallCheck(this, TopLeftCornerOverlay);\n\n    var _this = _possibleConstructorReturn(this, (TopLeftCornerOverlay.__proto__ || Object.getPrototypeOf(TopLeftCornerOverlay)).call(this, wotInstance));\n\n    _this.clone = _this.makeClone(_base2.default.CLONE_TOP_LEFT_CORNER);\n    return _this;\n  }\n\n  /**\n   * Checks if overlay should be fully rendered\n   *\n   * @returns {Boolean}\n   */\n\n\n  _createClass(TopLeftCornerOverlay, [{\n    key: 'shouldBeRendered',\n    value: function shouldBeRendered() {\n      return !!((this.wot.getSetting('fixedRowsTop') || this.wot.getSetting('columnHeaders').length) && (this.wot.getSetting('fixedColumnsLeft') || this.wot.getSetting('rowHeaders').length));\n    }\n\n    /**\n     * Updates the corner overlay position\n     */\n\n  }, {\n    key: 'resetFixedPosition',\n    value: function resetFixedPosition() {\n      this.updateTrimmingContainer();\n\n      if (!this.wot.wtTable.holder.parentNode) {\n        // removed from DOM\n        return;\n      }\n      var overlayRoot = this.clone.wtTable.holder.parentNode;\n      var tableHeight = (0, _element.outerHeight)(this.clone.wtTable.TABLE);\n      var tableWidth = (0, _element.outerWidth)(this.clone.wtTable.TABLE);\n      var preventOverflow = this.wot.getSetting('preventOverflow');\n\n      if (this.trimmingContainer === window) {\n        var box = this.wot.wtTable.hider.getBoundingClientRect();\n        var top = Math.ceil(box.top);\n        var left = Math.ceil(box.left);\n        var bottom = Math.ceil(box.bottom);\n        var right = Math.ceil(box.right);\n        var finalLeft = '0';\n        var finalTop = '0';\n\n        if (!preventOverflow || preventOverflow === 'vertical') {\n          if (left < 0 && right - overlayRoot.offsetWidth > 0) {\n            finalLeft = -left + 'px';\n          }\n        }\n\n        if (!preventOverflow || preventOverflow === 'horizontal') {\n          if (top < 0 && bottom - overlayRoot.offsetHeight > 0) {\n            finalTop = -top + 'px';\n          }\n        }\n        (0, _element.setOverlayPosition)(overlayRoot, finalLeft, finalTop);\n      } else {\n        (0, _element.resetCssTransform)(overlayRoot);\n      }\n      overlayRoot.style.height = (tableHeight === 0 ? tableHeight : tableHeight + 4) + 'px';\n      overlayRoot.style.width = (tableWidth === 0 ? tableWidth : tableWidth + 4) + 'px';\n    }\n  }]);\n\n  return TopLeftCornerOverlay;\n}(_base2.default);\n\n_base2.default.registerOverlay(_base2.default.CLONE_TOP_LEFT_CORNER, TopLeftCornerOverlay);\n\nexports.default = TopLeftCornerOverlay;\n\n/***/ }),\n/* 233 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\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 && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _element = __webpack_require__(0);\n\nvar _border = __webpack_require__(189);\n\nvar _border2 = _interopRequireDefault(_border);\n\nvar _coords = __webpack_require__(56);\n\nvar _coords2 = _interopRequireDefault(_coords);\n\nvar _range = __webpack_require__(178);\n\nvar _range2 = _interopRequireDefault(_range);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * @class Selection\n */\nvar Selection = function () {\n  /**\n   * @param {Object} settings\n   * @param {CellRange} cellRange\n   */\n  function Selection(settings, cellRange) {\n    _classCallCheck(this, Selection);\n\n    this.settings = settings;\n    this.cellRange = cellRange || null;\n    this.instanceBorders = {};\n    this.classNames = [this.settings.className];\n    this.classNameGenerator = this.linearClassNameGenerator(this.settings.className, this.settings.layerLevel);\n  }\n\n  /**\n   * Each Walkontable clone requires it's own border for every selection. This method creates and returns selection\n   * borders per instance\n   *\n   * @param {Walkontable} wotInstance\n   * @returns {Border}\n   */\n\n\n  _createClass(Selection, [{\n    key: 'getBorder',\n    value: function getBorder(wotInstance) {\n      if (!this.instanceBorders[wotInstance.guid]) {\n        this.instanceBorders[wotInstance.guid] = new _border2.default(wotInstance, this.settings);\n      }\n\n      return this.instanceBorders[wotInstance.guid];\n    }\n\n    /**\n     * Checks if selection is empty\n     *\n     * @returns {Boolean}\n     */\n\n  }, {\n    key: 'isEmpty',\n    value: function isEmpty() {\n      return this.cellRange === null;\n    }\n\n    /**\n     * Adds a cell coords to the selection\n     *\n     * @param {CellCoords} coords\n     */\n\n  }, {\n    key: 'add',\n    value: function add(coords) {\n      if (this.isEmpty()) {\n        this.cellRange = new _range2.default(coords);\n      } else {\n        this.cellRange.expand(coords);\n      }\n\n      return this;\n    }\n\n    /**\n     * If selection range from or to property equals oldCoords, replace it with newCoords. Return boolean\n     * information about success\n     *\n     * @param {CellCoords} oldCoords\n     * @param {CellCoords} newCoords\n     * @returns {Boolean}\n     */\n\n  }, {\n    key: 'replace',\n    value: function replace(oldCoords, newCoords) {\n      if (!this.isEmpty()) {\n        if (this.cellRange.from.isEqual(oldCoords)) {\n          this.cellRange.from = newCoords;\n\n          return true;\n        }\n        if (this.cellRange.to.isEqual(oldCoords)) {\n          this.cellRange.to = newCoords;\n\n          return true;\n        }\n      }\n\n      return false;\n    }\n\n    /**\n     * Clears selection\n     *\n     * @returns {Selection}\n     */\n\n  }, {\n    key: 'clear',\n    value: function clear() {\n      this.cellRange = null;\n\n      return this;\n    }\n\n    /**\n     * Returns the top left (TL) and bottom right (BR) selection coordinates\n     *\n     * @returns {Array} Returns array of coordinates for example `[1, 1, 5, 5]`\n     */\n\n  }, {\n    key: 'getCorners',\n    value: function getCorners() {\n      var topLeft = this.cellRange.getTopLeftCorner();\n      var bottomRight = this.cellRange.getBottomRightCorner();\n\n      return [topLeft.row, topLeft.col, bottomRight.row, bottomRight.col];\n    }\n\n    /**\n     * Adds class name to cell element at given coords\n     *\n     * @param {Walkontable} wotInstance Walkontable instance\n     * @param {Number} sourceRow Cell row coord\n     * @param {Number} sourceColumn Cell column coord\n     * @param {String} className Class name\n     * @param {Boolean} [markIntersections=false] If `true`, linear className generator will be used to add CSS classes\n     *                                            in a continuous way.\n     * @returns {Selection}\n     */\n\n  }, {\n    key: 'addClassAtCoords',\n    value: function addClassAtCoords(wotInstance, sourceRow, sourceColumn, className) {\n      var markIntersections = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n\n      var TD = wotInstance.wtTable.getCell(new _coords2.default(sourceRow, sourceColumn));\n\n      if ((typeof TD === 'undefined' ? 'undefined' : _typeof(TD)) === 'object') {\n        var cellClassName = className;\n\n        if (markIntersections) {\n          cellClassName = this.classNameGenerator(TD);\n\n          if (!this.classNames.includes(cellClassName)) {\n            this.classNames.push(cellClassName);\n          }\n        }\n\n        (0, _element.addClass)(TD, cellClassName);\n      }\n\n      return this;\n    }\n\n    /**\n     * Generate helper for calculating classNames based on previously added base className.\n     * The generated className is always generated as a continuation of the previous className. For example, when\n     * the currently checked element has 'area-2' className the generated new className will be 'area-3'. When\n     * the element doesn't have any classNames than the base className will be returned ('area');\n     *\n     * @param {String} baseClassName Base className to be used.\n     * @param {Number} layerLevelOwner Layer level which the instance of the Selection belongs to.\n     * @return {Function}\n     */\n\n  }, {\n    key: 'linearClassNameGenerator',\n    value: function linearClassNameGenerator(baseClassName, layerLevelOwner) {\n      // TODO: Make this recursive function Proper Tail Calls (TCO/PTC) friendly.\n      return function calcClassName(element) {\n        var previousIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : -1;\n\n        if (layerLevelOwner === 0 || previousIndex === 0) {\n          return baseClassName;\n        }\n\n        var index = previousIndex >= 0 ? previousIndex : layerLevelOwner;\n        var className = baseClassName;\n\n        index -= 1;\n\n        var previousClassName = index === 0 ? baseClassName : baseClassName + '-' + index;\n\n        if ((0, _element.hasClass)(element, previousClassName)) {\n          var currentLayer = index + 1;\n\n          className = baseClassName + '-' + currentLayer;\n        } else {\n          className = calcClassName(element, index);\n        }\n\n        return className;\n      };\n    }\n\n    /**\n     * @param wotInstance\n     */\n\n  }, {\n    key: 'draw',\n    value: function draw(wotInstance) {\n      if (this.isEmpty()) {\n        if (this.settings.border) {\n          this.getBorder(wotInstance).disappear();\n        }\n\n        return;\n      }\n\n      var renderedRows = wotInstance.wtTable.getRenderedRowsCount();\n      var renderedColumns = wotInstance.wtTable.getRenderedColumnsCount();\n      var corners = this.getCorners();\n\n      var _corners = _slicedToArray(corners, 4),\n          topRow = _corners[0],\n          topColumn = _corners[1],\n          bottomRow = _corners[2],\n          bottomColumn = _corners[3];\n\n      for (var column = 0; column < renderedColumns; column += 1) {\n        var sourceCol = wotInstance.wtTable.columnFilter.renderedToSource(column);\n\n        if (sourceCol >= topColumn && sourceCol <= bottomColumn) {\n          var TH = wotInstance.wtTable.getColumnHeader(sourceCol);\n\n          if (TH) {\n            var newClasses = [];\n\n            if (this.settings.highlightHeaderClassName) {\n              newClasses.push(this.settings.highlightHeaderClassName);\n            }\n\n            if (this.settings.highlightColumnClassName) {\n              newClasses.push(this.settings.highlightColumnClassName);\n            }\n\n            (0, _element.addClass)(TH, newClasses);\n          }\n        }\n      }\n\n      for (var row = 0; row < renderedRows; row += 1) {\n        var sourceRow = wotInstance.wtTable.rowFilter.renderedToSource(row);\n\n        if (sourceRow >= topRow && sourceRow <= bottomRow) {\n          var _TH = wotInstance.wtTable.getRowHeader(sourceRow);\n\n          if (_TH) {\n            var _newClasses = [];\n\n            if (this.settings.highlightHeaderClassName) {\n              _newClasses.push(this.settings.highlightHeaderClassName);\n            }\n\n            if (this.settings.highlightRowClassName) {\n              _newClasses.push(this.settings.highlightRowClassName);\n            }\n\n            (0, _element.addClass)(_TH, _newClasses);\n          }\n        }\n\n        for (var _column = 0; _column < renderedColumns; _column += 1) {\n          var _sourceCol = wotInstance.wtTable.columnFilter.renderedToSource(_column);\n\n          if (sourceRow >= topRow && sourceRow <= bottomRow && _sourceCol >= topColumn && _sourceCol <= bottomColumn) {\n            // selected cell\n            if (this.settings.className) {\n              this.addClassAtCoords(wotInstance, sourceRow, _sourceCol, this.settings.className, this.settings.markIntersections);\n            }\n          } else if (sourceRow >= topRow && sourceRow <= bottomRow) {\n            // selection is in this row\n            if (this.settings.highlightRowClassName) {\n              this.addClassAtCoords(wotInstance, sourceRow, _sourceCol, this.settings.highlightRowClassName);\n            }\n          } else if (_sourceCol >= topColumn && _sourceCol <= bottomColumn) {\n            // selection is in this column\n            if (this.settings.highlightColumnClassName) {\n              this.addClassAtCoords(wotInstance, sourceRow, _sourceCol, this.settings.highlightColumnClassName);\n            }\n          }\n\n          var additionalSelectionClass = wotInstance.getSetting('onAfterDrawSelection', sourceRow, _sourceCol, corners, this.settings.layerLevel);\n\n          if (typeof additionalSelectionClass === 'string') {\n            this.addClassAtCoords(wotInstance, sourceRow, _sourceCol, additionalSelectionClass);\n          }\n        }\n      }\n\n      wotInstance.getSetting('onBeforeDrawBorders', corners, this.settings.className);\n\n      if (this.settings.border) {\n        // warning! border.appear modifies corners!\n        this.getBorder(wotInstance).appear(corners);\n      }\n    }\n  }]);\n\n  return Selection;\n}();\n\nexports.default = Selection;\n\n/***/ }),\n/* 234 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n/**\n * autoResize - resizes a DOM element to the width and height of another DOM element\n *\n * Copyright 2014, Marcin Warpechowski\n * Licensed under the MIT license\n */\n\nfunction autoResize() {\n  var defaults = {\n    minHeight: 200,\n    maxHeight: 300,\n    minWidth: 100,\n    maxWidth: 300\n  },\n      el,\n      body = document.body,\n      text = document.createTextNode(''),\n      span = document.createElement('SPAN'),\n      observe = function observe(element, event, handler) {\n    element.addEventListener(event, handler, false);\n  },\n      _unObserve = function _unObserve(element, event, handler) {\n    element.removeEventListener(event, handler, false);\n  },\n      resize = function resize(newChar) {\n    var width, scrollHeight;\n\n    if (!newChar) {\n      newChar = \"\";\n    } else if (!/^[a-zA-Z \\.,\\\\\\/\\|0-9]$/.test(newChar)) {\n      newChar = \".\";\n    }\n\n    if (text.textContent !== void 0) {\n      text.textContent = el.value + newChar;\n    } else {\n      text.data = el.value + newChar; //IE8\n    }\n    span.style.fontSize = getComputedStyle(el).fontSize;\n    span.style.fontFamily = getComputedStyle(el).fontFamily;\n    span.style.whiteSpace = \"pre\";\n\n    body.appendChild(span);\n    width = span.clientWidth + 2;\n    body.removeChild(span);\n\n    el.style.height = defaults.minHeight + 'px';\n\n    if (defaults.minWidth > width) {\n      el.style.width = defaults.minWidth + 'px';\n    } else if (width > defaults.maxWidth) {\n      el.style.width = defaults.maxWidth + 'px';\n    } else {\n      el.style.width = width + 'px';\n    }\n    scrollHeight = el.scrollHeight ? el.scrollHeight - 1 : 0;\n\n    if (defaults.minHeight > scrollHeight) {\n      el.style.height = defaults.minHeight + 'px';\n    } else if (defaults.maxHeight < scrollHeight) {\n      el.style.height = defaults.maxHeight + 'px';\n      el.style.overflowY = 'visible';\n    } else {\n      el.style.height = scrollHeight + 'px';\n    }\n  },\n      delayedResize = function delayedResize() {\n    window.setTimeout(resize, 0);\n  },\n      extendDefaults = function extendDefaults(config) {\n\n    if (config && config.minHeight) {\n      if (config.minHeight == 'inherit') {\n        defaults.minHeight = el.clientHeight;\n      } else {\n        var minHeight = parseInt(config.minHeight);\n        if (!isNaN(minHeight)) {\n          defaults.minHeight = minHeight;\n        }\n      }\n    }\n\n    if (config && config.maxHeight) {\n      if (config.maxHeight == 'inherit') {\n        defaults.maxHeight = el.clientHeight;\n      } else {\n        var maxHeight = parseInt(config.maxHeight);\n        if (!isNaN(maxHeight)) {\n          defaults.maxHeight = maxHeight;\n        }\n      }\n    }\n\n    if (config && config.minWidth) {\n      if (config.minWidth == 'inherit') {\n        defaults.minWidth = el.clientWidth;\n      } else {\n        var minWidth = parseInt(config.minWidth);\n        if (!isNaN(minWidth)) {\n          defaults.minWidth = minWidth;\n        }\n      }\n    }\n\n    if (config && config.maxWidth) {\n      if (config.maxWidth == 'inherit') {\n        defaults.maxWidth = el.clientWidth;\n      } else {\n        var maxWidth = parseInt(config.maxWidth);\n        if (!isNaN(maxWidth)) {\n          defaults.maxWidth = maxWidth;\n        }\n      }\n    }\n\n    if (!span.firstChild) {\n      span.className = \"autoResize\";\n      span.style.display = 'inline-block';\n      span.appendChild(text);\n    }\n  },\n      _init = function _init(el_, config, doObserve) {\n    el = el_;\n    extendDefaults(config);\n\n    if (el.nodeName == 'TEXTAREA') {\n      el.style.resize = 'none';\n      el.style.overflowY = '';\n      el.style.height = defaults.minHeight + 'px';\n      el.style.minWidth = defaults.minWidth + 'px';\n      el.style.maxWidth = defaults.maxWidth + 'px';\n      el.style.overflowY = 'hidden';\n    }\n\n    if (doObserve) {\n      observe(el, 'change', resize);\n      observe(el, 'cut', delayedResize);\n      observe(el, 'paste', delayedResize);\n      observe(el, 'drop', delayedResize);\n      observe(el, 'keydown', delayedResize);\n      observe(el, 'focus', resize);\n      observe(el, 'compositionstart', delayedResize);\n      observe(el, 'compositionupdate', delayedResize);\n      observe(el, 'compositionend', delayedResize);\n    }\n\n    resize();\n  };\n\n  function getComputedStyle(element) {\n    return element.currentStyle || document.defaultView.getComputedStyle(element);\n  }\n\n  return {\n    init: function init(el_, config, doObserve) {\n      _init(el_, config, doObserve);\n    },\n    unObserve: function unObserve() {\n      _unObserve(el, 'change', resize);\n      _unObserve(el, 'cut', delayedResize);\n      _unObserve(el, 'paste', delayedResize);\n      _unObserve(el, 'drop', delayedResize);\n      _unObserve(el, 'keydown', delayedResize);\n      _unObserve(el, 'focus', resize);\n      _unObserve(el, 'compositionstart', delayedResize);\n      _unObserve(el, 'compositionupdate', delayedResize);\n      _unObserve(el, 'compositionend', delayedResize);\n    },\n    resize: resize\n  };\n}\n\nif (true) {\n  module.exports = autoResize;\n}\n\n/***/ }),\n/* 235 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _baseEditor = __webpack_require__(55);\n\nvar _baseEditor2 = _interopRequireDefault(_baseEditor);\n\nvar _element = __webpack_require__(0);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n/**\n * @private\n * @editor CheckboxEditor\n * @class CheckboxEditor\n */\nvar CheckboxEditor = function (_BaseEditor) {\n  _inherits(CheckboxEditor, _BaseEditor);\n\n  function CheckboxEditor() {\n    _classCallCheck(this, CheckboxEditor);\n\n    return _possibleConstructorReturn(this, (CheckboxEditor.__proto__ || Object.getPrototypeOf(CheckboxEditor)).apply(this, arguments));\n  }\n\n  _createClass(CheckboxEditor, [{\n    key: 'beginEditing',\n    value: function beginEditing(initialValue, event) {\n      // Just some events connected with checkbox editor are delegated here. Some `keydown` events like `enter` and `space` key press\n      // are handled inside `checkboxRenderer`. Some events come here from `editorManager`. Below `if` statement was created by author\n      // for purpose of handling only `doubleclick` event which may be done on a cell with checkbox.\n\n      if (event && event.type === 'mouseup') {\n        var checkbox = this.TD.querySelector('input[type=\"checkbox\"]');\n\n        if (!(0, _element.hasClass)(checkbox, 'htBadValue')) {\n          checkbox.click();\n        }\n      }\n    }\n  }, {\n    key: 'finishEditing',\n    value: function finishEditing() {}\n  }, {\n    key: 'init',\n    value: function init() {}\n  }, {\n    key: 'open',\n    value: function open() {}\n  }, {\n    key: 'close',\n    value: function close() {}\n  }, {\n    key: 'getValue',\n    value: function getValue() {}\n  }, {\n    key: 'setValue',\n    value: function setValue() {}\n  }, {\n    key: 'focus',\n    value: function focus() {}\n  }]);\n\n  return CheckboxEditor;\n}(_baseEditor2.default);\n\nexports.default = CheckboxEditor;\n\n/***/ }),\n/* 236 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _moment = __webpack_require__(57);\n\nvar _moment2 = _interopRequireDefault(_moment);\n\nvar _pikaday = __webpack_require__(237);\n\nvar _pikaday2 = _interopRequireDefault(_pikaday);\n\n__webpack_require__(238);\n\nvar _element = __webpack_require__(0);\n\nvar _object = __webpack_require__(1);\n\nvar _eventManager = __webpack_require__(5);\n\nvar _eventManager2 = _interopRequireDefault(_eventManager);\n\nvar _unicode = __webpack_require__(21);\n\nvar _event = __webpack_require__(13);\n\nvar _textEditor = __webpack_require__(59);\n\nvar _textEditor2 = _interopRequireDefault(_textEditor);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n/**\n * @private\n * @editor DateEditor\n * @class DateEditor\n * @dependencies TextEditor moment pikaday\n */\nvar DateEditor = function (_TextEditor) {\n  _inherits(DateEditor, _TextEditor);\n\n  /**\n   * @param {Core} hotInstance Handsontable instance\n   * @private\n   */\n  function DateEditor(hotInstance) {\n    _classCallCheck(this, DateEditor);\n\n    // TODO: Move this option to general settings\n    var _this = _possibleConstructorReturn(this, (DateEditor.__proto__ || Object.getPrototypeOf(DateEditor)).call(this, hotInstance));\n\n    _this.defaultDateFormat = 'DD/MM/YYYY';\n    _this.isCellEdited = false;\n    _this.parentDestroyed = false;\n    return _this;\n  }\n\n  _createClass(DateEditor, [{\n    key: 'init',\n    value: function init() {\n      var _this2 = this;\n\n      if (typeof _moment2.default !== 'function') {\n        throw new Error('You need to include moment.js to your project.');\n      }\n\n      if (typeof _pikaday2.default !== 'function') {\n        throw new Error('You need to include Pikaday to your project.');\n      }\n      _get(DateEditor.prototype.__proto__ || Object.getPrototypeOf(DateEditor.prototype), 'init', this).call(this);\n      this.instance.addHook('afterDestroy', function () {\n        _this2.parentDestroyed = true;\n        _this2.destroyElements();\n      });\n    }\n\n    /**\n     * Create data picker instance\n     */\n\n  }, {\n    key: 'createElements',\n    value: function createElements() {\n      _get(DateEditor.prototype.__proto__ || Object.getPrototypeOf(DateEditor.prototype), 'createElements', this).call(this);\n\n      this.datePicker = document.createElement('DIV');\n      this.datePickerStyle = this.datePicker.style;\n      this.datePickerStyle.position = 'absolute';\n      this.datePickerStyle.top = 0;\n      this.datePickerStyle.left = 0;\n      this.datePickerStyle.zIndex = 9999;\n\n      (0, _element.addClass)(this.datePicker, 'htDatepickerHolder');\n      document.body.appendChild(this.datePicker);\n\n      this.$datePicker = new _pikaday2.default(this.getDatePickerConfig());\n      var eventManager = new _eventManager2.default(this);\n\n      /**\n       * Prevent recognizing clicking on datepicker as clicking outside of table\n       */\n      eventManager.addEventListener(this.datePicker, 'mousedown', function (event) {\n        return (0, _event.stopPropagation)(event);\n      });\n      this.hideDatepicker();\n    }\n\n    /**\n     * Destroy data picker instance\n     */\n\n  }, {\n    key: 'destroyElements',\n    value: function destroyElements() {\n      this.$datePicker.destroy();\n    }\n\n    /**\n     * Prepare editor to appear\n     *\n     * @param {Number} row Row index\n     * @param {Number} col Column index\n     * @param {String} prop Property name (passed when datasource is an array of objects)\n     * @param {HTMLTableCellElement} td Table cell element\n     * @param {*} originalValue Original value\n     * @param {Object} cellProperties Object with cell properties ({@see Core#getCellMeta})\n     */\n\n  }, {\n    key: 'prepare',\n    value: function prepare(row, col, prop, td, originalValue, cellProperties) {\n      this._opened = false;\n      _get(DateEditor.prototype.__proto__ || Object.getPrototypeOf(DateEditor.prototype), 'prepare', this).call(this, row, col, prop, td, originalValue, cellProperties);\n    }\n\n    /**\n     * Open editor\n     *\n     * @param {Event} [event=null]\n     */\n\n  }, {\n    key: 'open',\n    value: function open() {\n      var event = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n\n      _get(DateEditor.prototype.__proto__ || Object.getPrototypeOf(DateEditor.prototype), 'open', this).call(this);\n      this.showDatepicker(event);\n    }\n\n    /**\n     * Close editor\n     */\n\n  }, {\n    key: 'close',\n    value: function close() {\n      var _this3 = this;\n\n      this._opened = false;\n      this.instance._registerTimeout(function () {\n        _this3.instance._refreshBorders();\n      });\n\n      _get(DateEditor.prototype.__proto__ || Object.getPrototypeOf(DateEditor.prototype), 'close', this).call(this);\n    }\n\n    /**\n     * @param {Boolean} [isCancelled=false]\n     * @param {Boolean} [ctrlDown=false]\n     */\n\n  }, {\n    key: 'finishEditing',\n    value: function finishEditing() {\n      var isCancelled = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n      var ctrlDown = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n      if (isCancelled) {\n        // pressed ESC, restore original value\n        // var value = this.instance.getDataAtCell(this.row, this.col);\n        var value = this.originalValue;\n\n        if (value !== void 0) {\n          this.setValue(value);\n        }\n      }\n      this.hideDatepicker();\n      _get(DateEditor.prototype.__proto__ || Object.getPrototypeOf(DateEditor.prototype), 'finishEditing', this).call(this, isCancelled, ctrlDown);\n    }\n\n    /**\n     * Show data picker\n     *\n     * @param {Event} event\n     */\n\n  }, {\n    key: 'showDatepicker',\n    value: function showDatepicker(event) {\n      this.$datePicker.config(this.getDatePickerConfig());\n\n      var offset = this.TD.getBoundingClientRect();\n      var dateFormat = this.cellProperties.dateFormat || this.defaultDateFormat;\n      var datePickerConfig = this.$datePicker.config();\n      var dateStr = void 0;\n      var isMouseDown = this.instance.view.isMouseDown();\n      var isMeta = event ? (0, _unicode.isMetaKey)(event.keyCode) : false;\n\n      this.datePickerStyle.top = window.pageYOffset + offset.top + (0, _element.outerHeight)(this.TD) + 'px';\n      this.datePickerStyle.left = window.pageXOffset + offset.left + 'px';\n\n      this.$datePicker._onInputFocus = function () {};\n      datePickerConfig.format = dateFormat;\n\n      if (this.originalValue) {\n        dateStr = this.originalValue;\n\n        if ((0, _moment2.default)(dateStr, dateFormat, true).isValid()) {\n          this.$datePicker.setMoment((0, _moment2.default)(dateStr, dateFormat), true);\n        }\n\n        // workaround for date/time cells - pikaday resets the cell value to 12:00 AM by default, this will overwrite the value.\n        if (this.getValue() !== this.originalValue) {\n          this.setValue(this.originalValue);\n        }\n\n        if (!isMeta && !isMouseDown) {\n          this.setValue('');\n        }\n      } else if (this.cellProperties.defaultDate) {\n        dateStr = this.cellProperties.defaultDate;\n\n        datePickerConfig.defaultDate = dateStr;\n\n        if ((0, _moment2.default)(dateStr, dateFormat, true).isValid()) {\n          this.$datePicker.setMoment((0, _moment2.default)(dateStr, dateFormat), true);\n        }\n\n        if (!isMeta && !isMouseDown) {\n          this.setValue('');\n        }\n      } else {\n        // if a default date is not defined, set a soft-default-date: display the current day and month in the\n        // datepicker, but don't fill the editor input\n        this.$datePicker.gotoToday();\n      }\n\n      this.datePickerStyle.display = 'block';\n      this.$datePicker.show();\n    }\n\n    /**\n     * Hide data picker\n     */\n\n  }, {\n    key: 'hideDatepicker',\n    value: function hideDatepicker() {\n      this.datePickerStyle.display = 'none';\n      this.$datePicker.hide();\n    }\n\n    /**\n     * Get date picker options.\n     *\n     * @returns {Object}\n     */\n\n  }, {\n    key: 'getDatePickerConfig',\n    value: function getDatePickerConfig() {\n      var _this4 = this;\n\n      var htInput = this.TEXTAREA;\n      var options = {};\n\n      if (this.cellProperties && this.cellProperties.datePickerConfig) {\n        (0, _object.deepExtend)(options, this.cellProperties.datePickerConfig);\n      }\n      var origOnSelect = options.onSelect;\n      var origOnClose = options.onClose;\n\n      options.field = htInput;\n      options.trigger = htInput;\n      options.container = this.datePicker;\n      options.bound = false;\n      options.format = options.format || this.defaultDateFormat;\n      options.reposition = options.reposition || false;\n      options.onSelect = function (value) {\n        var dateStr = value;\n\n        if (!isNaN(dateStr.getTime())) {\n          dateStr = (0, _moment2.default)(dateStr).format(_this4.cellProperties.dateFormat || _this4.defaultDateFormat);\n        }\n        _this4.setValue(dateStr);\n        _this4.hideDatepicker();\n\n        if (origOnSelect) {\n          origOnSelect();\n        }\n      };\n      options.onClose = function () {\n        if (!_this4.parentDestroyed) {\n          _this4.finishEditing(false);\n        }\n        if (origOnClose) {\n          origOnClose();\n        }\n      };\n\n      return options;\n    }\n  }]);\n\n  return DateEditor;\n}(_textEditor2.default);\n\nexports.default = DateEditor;\n\n/***/ }),\n/* 237 */\n/***/ (function(module, exports) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE_237__;\n\n/***/ }),\n/* 238 */\n/***/ (function(module, exports) {\n\n\n\n/***/ }),\n/* 239 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _autocompleteEditor = __webpack_require__(190);\n\nvar _autocompleteEditor2 = _interopRequireDefault(_autocompleteEditor);\n\nvar _pluginHooks = __webpack_require__(16);\n\nvar _pluginHooks2 = _interopRequireDefault(_pluginHooks);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n/**\n * @private\n * @editor DropdownEditor\n * @class DropdownEditor\n * @dependencies AutocompleteEditor\n */\nvar DropdownEditor = function (_AutocompleteEditor) {\n  _inherits(DropdownEditor, _AutocompleteEditor);\n\n  function DropdownEditor() {\n    _classCallCheck(this, DropdownEditor);\n\n    return _possibleConstructorReturn(this, (DropdownEditor.__proto__ || Object.getPrototypeOf(DropdownEditor)).apply(this, arguments));\n  }\n\n  _createClass(DropdownEditor, [{\n    key: 'prepare',\n    value: function prepare(row, col, prop, td, originalValue, cellProperties) {\n      _get(DropdownEditor.prototype.__proto__ || Object.getPrototypeOf(DropdownEditor.prototype), 'prepare', this).call(this, row, col, prop, td, originalValue, cellProperties);\n      this.cellProperties.filter = false;\n      this.cellProperties.strict = true;\n    }\n  }]);\n\n  return DropdownEditor;\n}(_autocompleteEditor2.default);\n\n_pluginHooks2.default.getSingleton().add('beforeValidate', function (value, row, col) {\n  var cellMeta = this.getCellMeta(row, this.propToCol(col));\n\n  if (cellMeta.editor === DropdownEditor) {\n    if (cellMeta.strict === void 0) {\n      cellMeta.filter = false;\n      cellMeta.strict = true;\n    }\n  }\n});\n\nexports.default = DropdownEditor;\n\n/***/ }),\n/* 240 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _textEditor = __webpack_require__(59);\n\nvar _textEditor2 = _interopRequireDefault(_textEditor);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n/**\n * @private\n * @editor NumericEditor\n * @class NumericEditor\n */\nvar NumericEditor = function (_TextEditor) {\n  _inherits(NumericEditor, _TextEditor);\n\n  function NumericEditor() {\n    _classCallCheck(this, NumericEditor);\n\n    return _possibleConstructorReturn(this, (NumericEditor.__proto__ || Object.getPrototypeOf(NumericEditor)).apply(this, arguments));\n  }\n\n  return NumericEditor;\n}(_textEditor2.default);\n\nexports.default = NumericEditor;\n\n/***/ }),\n/* 241 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _element = __webpack_require__(0);\n\nvar _textEditor = __webpack_require__(59);\n\nvar _textEditor2 = _interopRequireDefault(_textEditor);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n/**\n * @private\n * @editor PasswordEditor\n * @class PasswordEditor\n * @dependencies TextEditor\n */\nvar PasswordEditor = function (_TextEditor) {\n  _inherits(PasswordEditor, _TextEditor);\n\n  function PasswordEditor() {\n    _classCallCheck(this, PasswordEditor);\n\n    return _possibleConstructorReturn(this, (PasswordEditor.__proto__ || Object.getPrototypeOf(PasswordEditor)).apply(this, arguments));\n  }\n\n  _createClass(PasswordEditor, [{\n    key: 'createElements',\n    value: function createElements() {\n      _get(PasswordEditor.prototype.__proto__ || Object.getPrototypeOf(PasswordEditor.prototype), 'createElements', this).call(this);\n\n      this.TEXTAREA = document.createElement('input');\n      this.TEXTAREA.setAttribute('type', 'password');\n      this.TEXTAREA.className = 'handsontableInput';\n      this.textareaStyle = this.TEXTAREA.style;\n      this.textareaStyle.width = 0;\n      this.textareaStyle.height = 0;\n\n      (0, _element.empty)(this.TEXTAREA_PARENT);\n      this.TEXTAREA_PARENT.appendChild(this.TEXTAREA);\n    }\n  }]);\n\n  return PasswordEditor;\n}(_textEditor2.default);\n\nexports.default = PasswordEditor;\n\n/***/ }),\n/* 242 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\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 && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _element = __webpack_require__(0);\n\nvar _event = __webpack_require__(13);\n\nvar _unicode = __webpack_require__(21);\n\nvar _baseEditor = __webpack_require__(55);\n\nvar _baseEditor2 = _interopRequireDefault(_baseEditor);\n\nvar _object = __webpack_require__(1);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar SelectEditor = _baseEditor2.default.prototype.extend();\n\n/**\n * @private\n * @editor SelectEditor\n * @class SelectEditor\n */\nSelectEditor.prototype.init = function () {\n  this.select = document.createElement('SELECT');\n  (0, _element.addClass)(this.select, 'htSelectEditor');\n  this.select.style.display = 'none';\n  this.instance.rootElement.appendChild(this.select);\n  this.registerHooks();\n};\n\nSelectEditor.prototype.registerHooks = function () {\n  var _this = this;\n\n  this.instance.addHook('afterScrollHorizontally', function () {\n    return _this.refreshDimensions();\n  });\n  this.instance.addHook('afterScrollVertically', function () {\n    return _this.refreshDimensions();\n  });\n  this.instance.addHook('afterColumnResize', function () {\n    return _this.refreshDimensions();\n  });\n  this.instance.addHook('afterRowResize', function () {\n    return _this.refreshDimensions();\n  });\n};\n\nSelectEditor.prototype.prepare = function () {\n  var _this2 = this;\n\n  for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n    args[_key] = arguments[_key];\n  }\n\n  _baseEditor2.default.prototype.prepare.apply(this, args);\n\n  var selectOptions = this.cellProperties.selectOptions;\n  var options = void 0;\n\n  if (typeof selectOptions === 'function') {\n    options = this.prepareOptions(selectOptions(this.row, this.col, this.prop));\n  } else {\n    options = this.prepareOptions(selectOptions);\n  }\n\n  (0, _element.empty)(this.select);\n\n  (0, _object.objectEach)(options, function (value, key) {\n    var optionElement = document.createElement('OPTION');\n    optionElement.value = key;\n    (0, _element.fastInnerHTML)(optionElement, value);\n    _this2.select.appendChild(optionElement);\n  });\n};\n\nSelectEditor.prototype.prepareOptions = function (optionsToPrepare) {\n  var preparedOptions = {};\n\n  if (Array.isArray(optionsToPrepare)) {\n    for (var i = 0, len = optionsToPrepare.length; i < len; i++) {\n      preparedOptions[optionsToPrepare[i]] = optionsToPrepare[i];\n    }\n  } else if ((typeof optionsToPrepare === 'undefined' ? 'undefined' : _typeof(optionsToPrepare)) === 'object') {\n    preparedOptions = optionsToPrepare;\n  }\n\n  return preparedOptions;\n};\n\nSelectEditor.prototype.getValue = function () {\n  return this.select.value;\n};\n\nSelectEditor.prototype.setValue = function (value) {\n  this.select.value = value;\n};\n\nvar onBeforeKeyDown = function onBeforeKeyDown(event) {\n  var instance = this;\n  var editor = instance.getActiveEditor();\n  var previousOptionIndex = editor.select.selectedIndex - 1;\n  var nextOptionIndex = editor.select.selectedIndex + 1;\n\n  switch (event.keyCode) {\n    case _unicode.KEY_CODES.ARROW_UP:\n      if (previousOptionIndex >= 0) {\n        editor.select[previousOptionIndex].selected = true;\n      }\n\n      (0, _event.stopImmediatePropagation)(event);\n      event.preventDefault();\n      break;\n\n    case _unicode.KEY_CODES.ARROW_DOWN:\n      if (nextOptionIndex <= editor.select.length - 1) {\n        editor.select[nextOptionIndex].selected = true;\n      }\n\n      (0, _event.stopImmediatePropagation)(event);\n      event.preventDefault();\n      break;\n\n    default:\n      break;\n  }\n};\n\nSelectEditor.prototype.open = function () {\n  this._opened = true;\n  this.refreshDimensions();\n  this.select.style.display = '';\n  this.instance.addHook('beforeKeyDown', onBeforeKeyDown);\n};\n\nSelectEditor.prototype.close = function () {\n  this._opened = false;\n  this.select.style.display = 'none';\n  this.instance.removeHook('beforeKeyDown', onBeforeKeyDown);\n};\n\nSelectEditor.prototype.focus = function () {\n  this.select.focus();\n};\n\nSelectEditor.prototype.refreshValue = function () {\n  var sourceData = this.instance.getSourceDataAtCell(this.row, this.prop);\n  this.originalValue = sourceData;\n\n  this.setValue(sourceData);\n  this.refreshDimensions();\n};\n\nSelectEditor.prototype.refreshDimensions = function () {\n  if (this.state !== _baseEditor.EditorState.EDITING) {\n    return;\n  }\n  this.TD = this.getEditedCell();\n\n  // TD is outside of the viewport.\n  if (!this.TD) {\n    this.close();\n\n    return;\n  }\n  var currentOffset = (0, _element.offset)(this.TD);\n  var containerOffset = (0, _element.offset)(this.instance.rootElement);\n  var scrollableContainer = (0, _element.getScrollableElement)(this.TD);\n  var editorSection = this.checkEditorSection();\n  var width = (0, _element.outerWidth)(this.TD) + 1;\n  var height = (0, _element.outerHeight)(this.TD) + 1;\n  var editTop = currentOffset.top - containerOffset.top - 1 - (scrollableContainer.scrollTop || 0);\n  var editLeft = currentOffset.left - containerOffset.left - 1 - (scrollableContainer.scrollLeft || 0);\n  var cssTransformOffset = void 0;\n\n  switch (editorSection) {\n    case 'top':\n      cssTransformOffset = (0, _element.getCssTransform)(this.instance.view.wt.wtOverlays.topOverlay.clone.wtTable.holder.parentNode);\n      break;\n    case 'left':\n      cssTransformOffset = (0, _element.getCssTransform)(this.instance.view.wt.wtOverlays.leftOverlay.clone.wtTable.holder.parentNode);\n      break;\n    case 'top-left-corner':\n      cssTransformOffset = (0, _element.getCssTransform)(this.instance.view.wt.wtOverlays.topLeftCornerOverlay.clone.wtTable.holder.parentNode);\n      break;\n    case 'bottom-left-corner':\n      cssTransformOffset = (0, _element.getCssTransform)(this.instance.view.wt.wtOverlays.bottomLeftCornerOverlay.clone.wtTable.holder.parentNode);\n      break;\n    case 'bottom':\n      cssTransformOffset = (0, _element.getCssTransform)(this.instance.view.wt.wtOverlays.bottomOverlay.clone.wtTable.holder.parentNode);\n      break;\n    default:\n      break;\n  }\n  if (this.instance.getSelectedLast()[0] === 0) {\n    editTop += 1;\n  }\n\n  if (this.instance.getSelectedLast()[1] === 0) {\n    editLeft += 1;\n  }\n\n  var selectStyle = this.select.style;\n\n  if (cssTransformOffset && cssTransformOffset !== -1) {\n    selectStyle[cssTransformOffset[0]] = cssTransformOffset[1];\n  } else {\n    (0, _element.resetCssTransform)(this.select);\n  }\n  var cellComputedStyle = (0, _element.getComputedStyle)(this.TD);\n\n  if (parseInt(cellComputedStyle.borderTopWidth, 10) > 0) {\n    height -= 1;\n  }\n  if (parseInt(cellComputedStyle.borderLeftWidth, 10) > 0) {\n    width -= 1;\n  }\n\n  selectStyle.height = height + 'px';\n  selectStyle.minWidth = width + 'px';\n  selectStyle.top = editTop + 'px';\n  selectStyle.left = editLeft + 'px';\n  selectStyle.margin = '0px';\n};\n\nSelectEditor.prototype.getEditedCell = function () {\n  var editorSection = this.checkEditorSection();\n  var editedCell = void 0;\n\n  switch (editorSection) {\n    case 'top':\n      editedCell = this.instance.view.wt.wtOverlays.topOverlay.clone.wtTable.getCell({\n        row: this.row,\n        col: this.col\n      });\n      this.select.style.zIndex = 101;\n      break;\n    case 'corner':\n      editedCell = this.instance.view.wt.wtOverlays.topLeftCornerOverlay.clone.wtTable.getCell({\n        row: this.row,\n        col: this.col\n      });\n      this.select.style.zIndex = 103;\n      break;\n    case 'left':\n      editedCell = this.instance.view.wt.wtOverlays.leftOverlay.clone.wtTable.getCell({\n        row: this.row,\n        col: this.col\n      });\n      this.select.style.zIndex = 102;\n      break;\n    default:\n      editedCell = this.instance.getCell(this.row, this.col);\n      this.select.style.zIndex = '';\n      break;\n  }\n\n  return editedCell !== -1 && editedCell !== -2 ? editedCell : void 0;\n};\n\nexports.default = SelectEditor;\n\n/***/ }),\n/* 243 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _element = __webpack_require__(0);\n\nfunction cellDecorator(instance, TD, row, col, prop, value, cellProperties) {\n  var classesToAdd = [];\n  var classesToRemove = [];\n\n  if (cellProperties.className) {\n    if (TD.className) {\n      TD.className = TD.className + ' ' + cellProperties.className;\n    } else {\n      TD.className = cellProperties.className;\n    }\n  }\n\n  if (cellProperties.readOnly) {\n    classesToAdd.push(cellProperties.readOnlyCellClassName);\n  }\n\n  if (cellProperties.valid === false && cellProperties.invalidCellClassName) {\n    classesToAdd.push(cellProperties.invalidCellClassName);\n  } else {\n    classesToRemove.push(cellProperties.invalidCellClassName);\n  }\n\n  if (cellProperties.wordWrap === false && cellProperties.noWordWrapClassName) {\n    classesToAdd.push(cellProperties.noWordWrapClassName);\n  }\n\n  if (!value && cellProperties.placeholder) {\n    classesToAdd.push(cellProperties.placeholderCellClassName);\n  }\n\n  (0, _element.removeClass)(TD, classesToRemove);\n  (0, _element.addClass)(TD, classesToAdd);\n} /**\n   * Adds appropriate CSS class to table cell, based on cellProperties\n   */\nexports.default = cellDecorator;\n\n/***/ }),\n/* 244 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _element = __webpack_require__(0);\n\nvar _eventManager = __webpack_require__(5);\n\nvar _eventManager2 = _interopRequireDefault(_eventManager);\n\nvar _src = __webpack_require__(4);\n\nvar _index = __webpack_require__(14);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar clonableWRAPPER = document.createElement('DIV');\nclonableWRAPPER.className = 'htAutocompleteWrapper';\n\nvar clonableARROW = document.createElement('DIV');\nclonableARROW.className = 'htAutocompleteArrow';\n// workaround for https://github.com/handsontable/handsontable/issues/1946\n// this is faster than innerHTML. See: https://github.com/handsontable/handsontable/wiki/JavaScript-&-DOM-performance-tips\nclonableARROW.appendChild(document.createTextNode(String.fromCharCode(9660)));\n\n/**\n * Autocomplete renderer\n *\n * @private\n * @renderer AutocompleteRenderer\n * @param {Object} instance Handsontable instance\n * @param {Element} TD Table cell where to render\n * @param {Number} row\n * @param {Number} col\n * @param {String|Number} prop Row object property name\n * @param value Value to render (remember to escape unsafe HTML before inserting to DOM!)\n * @param {Object} cellProperties Cell properites (shared by cell renderer and editor)\n */\nfunction autocompleteRenderer(instance, TD, row, col, prop, value, cellProperties) {\n  var rendererType = cellProperties.allowHtml ? 'html' : 'text';\n  var ARROW = clonableARROW.cloneNode(true); // this is faster than createElement\n\n  for (var _len = arguments.length, args = Array(_len > 7 ? _len - 7 : 0), _key = 7; _key < _len; _key++) {\n    args[_key - 7] = arguments[_key];\n  }\n\n  (0, _index.getRenderer)(rendererType).apply(this, [instance, TD, row, col, prop, value, cellProperties].concat(args));\n\n  if (!TD.firstChild) {\n    // http://jsperf.com/empty-node-if-needed\n    // otherwise empty fields appear borderless in demo/renderers.html (IE)\n    TD.appendChild(document.createTextNode(String.fromCharCode(160))); // workaround for https://github.com/handsontable/handsontable/issues/1946\n    // this is faster than innerHTML. See: https://github.com/handsontable/handsontable/wiki/JavaScript-&-DOM-performance-tips\n  }\n\n  TD.insertBefore(ARROW, TD.firstChild);\n  (0, _element.addClass)(TD, 'htAutocomplete');\n\n  if (!instance.acArrowListener) {\n    var eventManager = new _eventManager2.default(instance);\n\n    // not very elegant but easy and fast\n    instance.acArrowListener = function (event) {\n      if ((0, _element.hasClass)(event.target, 'htAutocompleteArrow')) {\n        instance.view.wt.getSetting('onCellDblClick', null, new _src.CellCoords(row, col), TD);\n      }\n    };\n\n    eventManager.addEventListener(instance.rootElement, 'mousedown', instance.acArrowListener);\n\n    // We need to unbind the listener after the table has been destroyed\n    instance.addHookOnce('afterDestroy', function () {\n      eventManager.destroy();\n    });\n  }\n}\n\nexports.default = autocompleteRenderer;\n\n/***/ }),\n/* 245 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _element = __webpack_require__(0);\n\nvar _string = __webpack_require__(33);\n\nvar _eventManager = __webpack_require__(5);\n\nvar _eventManager2 = _interopRequireDefault(_eventManager);\n\nvar _unicode = __webpack_require__(21);\n\nvar _function = __webpack_require__(43);\n\nvar _event = __webpack_require__(13);\n\nvar _index = __webpack_require__(14);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar isListeningKeyDownEvent = new WeakMap();\nvar isCheckboxListenerAdded = new WeakMap();\nvar BAD_VALUE_CLASS = 'htBadValue';\n\n/**\n * Checkbox renderer\n *\n * @private\n * @param {Object} instance Handsontable instance\n * @param {Element} TD Table cell where to render\n * @param {Number} row\n * @param {Number} col\n * @param {String|Number} prop Row object property name\n * @param value Value to render (remember to escape unsafe HTML before inserting to DOM!)\n * @param {Object} cellProperties Cell properties (shared by cell renderer and editor)\n */\nfunction checkboxRenderer(instance, TD, row, col, prop, value, cellProperties) {\n  for (var _len = arguments.length, args = Array(_len > 7 ? _len - 7 : 0), _key = 7; _key < _len; _key++) {\n    args[_key - 7] = arguments[_key];\n  }\n\n  (0, _index.getRenderer)('base').apply(this, [instance, TD, row, col, prop, value, cellProperties].concat(args));\n  registerEvents(instance);\n\n  var input = createInput();\n  var labelOptions = cellProperties.label;\n  var badValue = false;\n\n  if (typeof cellProperties.checkedTemplate === 'undefined') {\n    cellProperties.checkedTemplate = true;\n  }\n  if (typeof cellProperties.uncheckedTemplate === 'undefined') {\n    cellProperties.uncheckedTemplate = false;\n  }\n\n  (0, _element.empty)(TD); // TODO identify under what circumstances this line can be removed\n\n  if (value === cellProperties.checkedTemplate || (0, _string.equalsIgnoreCase)(value, cellProperties.checkedTemplate)) {\n    input.checked = true;\n  } else if (value === cellProperties.uncheckedTemplate || (0, _string.equalsIgnoreCase)(value, cellProperties.uncheckedTemplate)) {\n    input.checked = false;\n  } else if (value === null) {\n    // default value\n    (0, _element.addClass)(input, 'noValue');\n  } else {\n    input.style.display = 'none';\n    (0, _element.addClass)(input, BAD_VALUE_CLASS);\n    badValue = true;\n  }\n\n  input.setAttribute('data-row', row);\n  input.setAttribute('data-col', col);\n\n  if (!badValue && labelOptions) {\n    var labelText = '';\n\n    if (labelOptions.value) {\n      labelText = typeof labelOptions.value === 'function' ? labelOptions.value.call(this, row, col, prop, value) : labelOptions.value;\n    } else if (labelOptions.property) {\n      labelText = instance.getDataAtRowProp(row, labelOptions.property);\n    }\n    var label = createLabel(labelText);\n\n    if (labelOptions.position === 'before') {\n      label.appendChild(input);\n    } else {\n      label.insertBefore(input, label.firstChild);\n    }\n    input = label;\n  }\n\n  TD.appendChild(input);\n\n  if (badValue) {\n    TD.appendChild(document.createTextNode('#bad-value#'));\n  }\n\n  if (!isListeningKeyDownEvent.has(instance)) {\n    isListeningKeyDownEvent.set(instance, true);\n    instance.addHook('beforeKeyDown', onBeforeKeyDown);\n  }\n\n  /**\n   * On before key down DOM listener.\n   *\n   * @private\n   * @param {Event} event\n   */\n  function onBeforeKeyDown(event) {\n    var toggleKeys = 'SPACE|ENTER';\n    var switchOffKeys = 'DELETE|BACKSPACE';\n    var isKeyCode = (0, _function.partial)(_unicode.isKey, event.keyCode);\n\n    if (isKeyCode(toggleKeys + '|' + switchOffKeys) && !(0, _event.isImmediatePropagationStopped)(event)) {\n      eachSelectedCheckboxCell(function () {\n        (0, _event.stopImmediatePropagation)(event);\n        event.preventDefault();\n      });\n    }\n    if (isKeyCode(toggleKeys)) {\n      changeSelectedCheckboxesState();\n    }\n    if (isKeyCode(switchOffKeys)) {\n      changeSelectedCheckboxesState(true);\n    }\n  }\n\n  /**\n   * Change checkbox checked property\n   *\n   * @private\n   * @param {Boolean} [uncheckCheckbox=false]\n   */\n  function changeSelectedCheckboxesState() {\n    var uncheckCheckbox = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n    var selRange = instance.getSelectedRangeLast();\n\n    if (!selRange) {\n      return;\n    }\n\n    var _selRange$getTopLeftC = selRange.getTopLeftCorner(),\n        startRow = _selRange$getTopLeftC.row,\n        startColumn = _selRange$getTopLeftC.col;\n\n    var _selRange$getBottomRi = selRange.getBottomRightCorner(),\n        endRow = _selRange$getBottomRi.row,\n        endColumn = _selRange$getBottomRi.col;\n\n    var changes = [];\n\n    for (var visualRow = startRow; visualRow <= endRow; visualRow += 1) {\n      for (var visualColumn = startColumn; visualColumn <= endColumn; visualColumn += 1) {\n        var cachedCellProperties = instance.getCellMeta(visualRow, visualColumn);\n\n        if (cachedCellProperties.type !== 'checkbox') {\n          return;\n        }\n\n        /* eslint-disable no-continue */\n        if (cachedCellProperties.readOnly === true) {\n          continue;\n        }\n\n        if (typeof cachedCellProperties.checkedTemplate === 'undefined') {\n          cachedCellProperties.checkedTemplate = true;\n        }\n        if (typeof cachedCellProperties.uncheckedTemplate === 'undefined') {\n          cachedCellProperties.uncheckedTemplate = false;\n        }\n\n        var dataAtCell = instance.getDataAtCell(visualRow, visualColumn);\n\n        if (uncheckCheckbox === false) {\n          if ([cachedCellProperties.checkedTemplate, cachedCellProperties.checkedTemplate.toString()].includes(dataAtCell)) {\n            changes.push([visualRow, visualColumn, cachedCellProperties.uncheckedTemplate]);\n          } else if ([cachedCellProperties.uncheckedTemplate, cachedCellProperties.uncheckedTemplate.toString(), null, void 0].includes(dataAtCell)) {\n            changes.push([visualRow, visualColumn, cachedCellProperties.checkedTemplate]);\n          }\n        } else {\n          changes.push([visualRow, visualColumn, cachedCellProperties.uncheckedTemplate]);\n        }\n      }\n    }\n\n    if (changes.length > 0) {\n      instance.setDataAtCell(changes);\n    }\n  }\n\n  /**\n   * Call callback for each found selected cell with checkbox type.\n   *\n   * @private\n   * @param {Function} callback\n   */\n  function eachSelectedCheckboxCell(callback) {\n    var selRange = instance.getSelectedRangeLast();\n\n    if (!selRange) {\n      return;\n    }\n    var topLeft = selRange.getTopLeftCorner();\n    var bottomRight = selRange.getBottomRightCorner();\n\n    for (var visualRow = topLeft.row; visualRow <= bottomRight.row; visualRow++) {\n      for (var visualColumn = topLeft.col; visualColumn <= bottomRight.col; visualColumn++) {\n        var cachedCellProperties = instance.getCellMeta(visualRow, visualColumn);\n\n        if (cachedCellProperties.type !== 'checkbox') {\n          return;\n        }\n\n        var cell = instance.getCell(visualRow, visualColumn);\n\n        if (cell === null || cell === void 0) {\n          callback(visualRow, visualColumn, cachedCellProperties);\n        } else {\n          var checkboxes = cell.querySelectorAll('input[type=checkbox]');\n\n          if (checkboxes.length > 0 && !cachedCellProperties.readOnly) {\n            callback(checkboxes);\n          }\n        }\n      }\n    }\n  }\n}\n\n/**\n * Register checkbox listeners.\n *\n * @param {Handsontable} instance Handsontable instance.\n * @returns {EventManager}\n */\nfunction registerEvents(instance) {\n  var eventManager = isCheckboxListenerAdded.get(instance);\n\n  if (!eventManager) {\n    eventManager = new _eventManager2.default(instance);\n    eventManager.addEventListener(instance.rootElement, 'click', function (event) {\n      return onClick(event, instance);\n    });\n    eventManager.addEventListener(instance.rootElement, 'mouseup', function (event) {\n      return onMouseUp(event, instance);\n    });\n    eventManager.addEventListener(instance.rootElement, 'change', function (event) {\n      return onChange(event, instance);\n    });\n\n    isCheckboxListenerAdded.set(instance, eventManager);\n  }\n\n  return eventManager;\n}\n\n/**\n * Create input element.\n *\n * @returns {Node}\n */\nfunction createInput() {\n  var input = document.createElement('input');\n\n  input.className = 'htCheckboxRendererInput';\n  input.type = 'checkbox';\n  input.setAttribute('autocomplete', 'off');\n  input.setAttribute('tabindex', '-1');\n\n  return input.cloneNode(false);\n}\n\n/**\n * Create label element.\n *\n * @returns {Node}\n */\nfunction createLabel(text) {\n  var label = document.createElement('label');\n\n  label.className = 'htCheckboxRendererLabel';\n  label.appendChild(document.createTextNode(text));\n\n  return label.cloneNode(true);\n}\n\n/**\n * `mouseup` callback.\n *\n * @private\n * @param {Event} event `mouseup` event.\n * @param {Object} instance Handsontable instance.\n */\nfunction onMouseUp(event, instance) {\n  if (!isCheckboxInput(event.target)) {\n    return;\n  }\n  setTimeout(instance.listen, 10);\n}\n\n/**\n * `click` callback.\n *\n * @private\n * @param {Event} event `click` event.\n * @param {Object} instance Handsontable instance.\n */\nfunction onClick(event, instance) {\n  if (!isCheckboxInput(event.target)) {\n    return false;\n  }\n\n  var row = parseInt(event.target.getAttribute('data-row'), 10);\n  var col = parseInt(event.target.getAttribute('data-col'), 10);\n  var cellProperties = instance.getCellMeta(row, col);\n\n  if (cellProperties.readOnly) {\n    event.preventDefault();\n  }\n}\n\n/**\n * `change` callback.\n *\n * @param {Event} event `change` event.\n * @param {Object} instance Handsontable instance.\n * @param {Object} cellProperties Reference to cell properties.\n * @returns {Boolean}\n */\nfunction onChange(event, instance) {\n  if (!isCheckboxInput(event.target)) {\n    return false;\n  }\n\n  var row = parseInt(event.target.getAttribute('data-row'), 10);\n  var col = parseInt(event.target.getAttribute('data-col'), 10);\n  var cellProperties = instance.getCellMeta(row, col);\n\n  if (!cellProperties.readOnly) {\n    var newCheckboxValue = null;\n\n    if (event.target.checked) {\n      newCheckboxValue = cellProperties.uncheckedTemplate === void 0 ? true : cellProperties.checkedTemplate;\n    } else {\n      newCheckboxValue = cellProperties.uncheckedTemplate === void 0 ? false : cellProperties.uncheckedTemplate;\n    }\n\n    instance.setDataAtCell(row, col, newCheckboxValue);\n  }\n}\n\n/**\n * Check if the provided element is the checkbox input.\n *\n * @private\n * @param {HTMLElement} element The element in question.\n * @returns {Boolean}\n */\nfunction isCheckboxInput(element) {\n  return element.tagName === 'INPUT' && element.getAttribute('type') === 'checkbox';\n}\n\nexports.default = checkboxRenderer;\n\n/***/ }),\n/* 246 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _element = __webpack_require__(0);\n\nvar _index = __webpack_require__(14);\n\n/**\n * @private\n * @renderer HtmlRenderer\n * @param instance\n * @param TD\n * @param row\n * @param col\n * @param prop\n * @param value\n * @param cellProperties\n */\nfunction htmlRenderer(instance, TD, row, col, prop, value) {\n  for (var _len = arguments.length, args = Array(_len > 6 ? _len - 6 : 0), _key = 6; _key < _len; _key++) {\n    args[_key - 6] = arguments[_key];\n  }\n\n  (0, _index.getRenderer)('base').apply(this, [instance, TD, row, col, prop, value].concat(args));\n\n  (0, _element.fastInnerHTML)(TD, value === null || value === void 0 ? '' : value);\n}\n\nexports.default = htmlRenderer;\n\n/***/ }),\n/* 247 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _numbro = __webpack_require__(248);\n\nvar _numbro2 = _interopRequireDefault(_numbro);\n\nvar _index = __webpack_require__(14);\n\nvar _number = __webpack_require__(6);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Numeric cell renderer\n *\n * @private\n * @renderer NumericRenderer\n * @dependencies numbro\n * @param {Object} instance Handsontable instance\n * @param {Element} TD Table cell where to render\n * @param {Number} row\n * @param {Number} col\n * @param {String|Number} prop Row object property name\n * @param value Value to render (remember to escape unsafe HTML before inserting to DOM!)\n * @param {Object} cellProperties Cell properties (shared by cell renderer and editor)\n */\nfunction numericRenderer(instance, TD, row, col, prop, value, cellProperties) {\n  var newValue = value;\n\n  if ((0, _number.isNumeric)(newValue)) {\n    var numericFormat = cellProperties.numericFormat;\n    var cellCulture = numericFormat && numericFormat.culture || '-';\n    var cellFormatPattern = numericFormat && numericFormat.pattern;\n    var className = cellProperties.className || '';\n    var classArr = className.length ? className.split(' ') : [];\n\n    if (typeof cellCulture !== 'undefined' && !_numbro2.default.languages()[cellCulture]) {\n      var shortTag = cellCulture.replace('-', '');\n      var langData = _numbro2.default.allLanguages ? _numbro2.default.allLanguages[cellCulture] : _numbro2.default[shortTag];\n\n      if (langData) {\n        _numbro2.default.registerLanguage(langData);\n      }\n    }\n\n    _numbro2.default.setLanguage(cellCulture);\n\n    newValue = (0, _numbro2.default)(newValue).format(cellFormatPattern || '0');\n\n    if (classArr.indexOf('htLeft') < 0 && classArr.indexOf('htCenter') < 0 && classArr.indexOf('htRight') < 0 && classArr.indexOf('htJustify') < 0) {\n      classArr.push('htRight');\n    }\n\n    if (classArr.indexOf('htNumeric') < 0) {\n      classArr.push('htNumeric');\n    }\n\n    cellProperties.className = classArr.join(' ');\n  }\n\n  (0, _index.getRenderer)('text')(instance, TD, row, col, prop, newValue, cellProperties);\n}\n\nexports.default = numericRenderer;\n\n/***/ }),\n/* 248 */\n/***/ (function(module, exports) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE_248__;\n\n/***/ }),\n/* 249 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _element = __webpack_require__(0);\n\nvar _index = __webpack_require__(14);\n\nvar _number = __webpack_require__(6);\n\n/**\n * @private\n * @renderer PasswordRenderer\n * @param instance\n * @param TD\n * @param row\n * @param col\n * @param prop\n * @param value\n * @param cellProperties\n */\nfunction passwordRenderer(instance, TD, row, col, prop, value, cellProperties) {\n  for (var _len = arguments.length, args = Array(_len > 7 ? _len - 7 : 0), _key = 7; _key < _len; _key++) {\n    args[_key - 7] = arguments[_key];\n  }\n\n  (0, _index.getRenderer)('text').apply(this, [instance, TD, row, col, prop, value, cellProperties].concat(args));\n\n  var hashLength = cellProperties.hashLength || TD.innerHTML.length;\n  var hashSymbol = cellProperties.hashSymbol || '*';\n\n  var hash = '';\n\n  (0, _number.rangeEach)(hashLength - 1, function () {\n    hash += hashSymbol;\n  });\n  (0, _element.fastInnerHTML)(TD, hash);\n}\n\nexports.default = passwordRenderer;\n\n/***/ }),\n/* 250 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _element = __webpack_require__(0);\n\nvar _mixed = __webpack_require__(11);\n\nvar _index = __webpack_require__(14);\n\n/**\n * Default text renderer\n *\n * @private\n * @renderer TextRenderer\n * @param {Object} instance Handsontable instance\n * @param {Element} TD Table cell where to render\n * @param {Number} row\n * @param {Number} col\n * @param {String|Number} prop Row object property name\n * @param value Value to render (remember to escape unsafe HTML before inserting to DOM!)\n * @param {Object} cellProperties Cell properties (shared by cell renderer and editor)\n */\nfunction textRenderer(instance, TD, row, col, prop, value, cellProperties) {\n  for (var _len = arguments.length, args = Array(_len > 7 ? _len - 7 : 0), _key = 7; _key < _len; _key++) {\n    args[_key - 7] = arguments[_key];\n  }\n\n  (0, _index.getRenderer)('base').apply(this, [instance, TD, row, col, prop, value, cellProperties].concat(args));\n  var escaped = value;\n\n  if (!escaped && cellProperties.placeholder) {\n    escaped = cellProperties.placeholder;\n  }\n\n  escaped = (0, _mixed.stringify)(escaped);\n\n  if (!instance.getSettings().trimWhitespace) {\n    escaped = escaped.replace(/ /g, String.fromCharCode(160));\n  }\n\n  if (cellProperties.rendererTemplate) {\n    (0, _element.empty)(TD);\n    var TEMPLATE = document.createElement('TEMPLATE');\n    TEMPLATE.setAttribute('bind', '{{}}');\n    TEMPLATE.innerHTML = cellProperties.rendererTemplate;\n    HTMLTemplateElement.decorate(TEMPLATE);\n    TEMPLATE.model = instance.getSourceDataAtRow(row);\n    TD.appendChild(TEMPLATE);\n  } else {\n    // this is faster than innerHTML. See: https://github.com/handsontable/handsontable/wiki/JavaScript-&-DOM-performance-tips\n    (0, _element.fastInnerText)(TD, escaped);\n  }\n}\n\nexports.default = textRenderer;\n\n/***/ }),\n/* 251 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports.default = autocompleteValidator;\n/**\n * Autocomplete cell validator.\n *\n * @private\n * @validator AutocompleteValidator\n * @param {*} value - Value of edited cell\n * @param {Function} callback - Callback called with validation result\n */\nfunction autocompleteValidator(value, callback) {\n  var valueToValidate = value;\n\n  if (valueToValidate === null || valueToValidate === void 0) {\n    valueToValidate = '';\n  }\n\n  if (this.allowEmpty && valueToValidate === '') {\n    callback(true);\n\n    return;\n  }\n\n  if (this.strict && this.source) {\n    if (typeof this.source === 'function') {\n      this.source(valueToValidate, process(valueToValidate, callback));\n    } else {\n      process(valueToValidate, callback)(this.source);\n    }\n  } else {\n    callback(true);\n  }\n}\n\n/**\n * Function responsible for validation of autocomplete value.\n *\n * @param {*} value - Value of edited cell\n * @param {Function} callback - Callback called with validation result\n */\nfunction process(value, callback) {\n  var originalVal = value;\n\n  return function (source) {\n    var found = false;\n\n    for (var s = 0, slen = source.length; s < slen; s++) {\n      if (originalVal === source[s]) {\n        found = true; // perfect match\n        break;\n      }\n    }\n\n    callback(found);\n  };\n}\n\n/***/ }),\n/* 252 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports.default = dateValidator;\nexports.correctFormat = correctFormat;\n\nvar _moment = __webpack_require__(57);\n\nvar _moment2 = _interopRequireDefault(_moment);\n\nvar _date = __webpack_require__(192);\n\nvar _editors = __webpack_require__(17);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Date cell validator\n *\n * @private\n * @validator DateValidator\n * @dependencies moment\n * @param {*} value - Value of edited cell\n * @param {Function} callback - Callback called with validation result\n */\nfunction dateValidator(value, callback) {\n  var dateEditor = (0, _editors.getEditorInstance)('date', this.instance);\n  var valueToValidate = value;\n  var valid = true;\n\n  if (valueToValidate === null || valueToValidate === void 0) {\n    valueToValidate = '';\n  }\n  var isValidDate = (0, _moment2.default)(new Date(valueToValidate)).isValid() || (0, _moment2.default)(valueToValidate, dateEditor.defaultDateFormat).isValid();\n  // is it in the specified format\n  var isValidFormat = (0, _moment2.default)(valueToValidate, this.dateFormat || dateEditor.defaultDateFormat, true).isValid();\n\n  if (this.allowEmpty && valueToValidate === '') {\n    isValidDate = true;\n    isValidFormat = true;\n  }\n  if (!isValidDate) {\n    valid = false;\n  }\n  if (!isValidDate && isValidFormat) {\n    valid = true;\n  }\n\n  if (isValidDate && !isValidFormat) {\n    if (this.correctFormat === true) {\n      // if format correction is enabled\n      var correctedValue = correctFormat(valueToValidate, this.dateFormat);\n      var row = this.instance.runHooks('unmodifyRow', this.row);\n      var column = this.instance.runHooks('unmodifyCol', this.col);\n\n      this.instance.setDataAtCell(row, column, correctedValue, 'dateValidator');\n      valid = true;\n    } else {\n      valid = false;\n    }\n  }\n\n  callback(valid);\n}\n\n/**\n * Format the given string using moment.js' format feature\n *\n * @param {String} value\n * @param {String} dateFormat\n * @returns {String}\n */\nfunction correctFormat(value, dateFormat) {\n  var dateFromDate = (0, _moment2.default)((0, _date.getNormalizedDate)(value));\n  var dateFromMoment = (0, _moment2.default)(value, dateFormat);\n  var isAlphanumeric = value.search(/[A-z]/g) > -1;\n  var date = void 0;\n\n  if (dateFromDate.isValid() && dateFromDate.format('x') === dateFromMoment.format('x') || !dateFromMoment.isValid() || isAlphanumeric) {\n    date = dateFromDate;\n  } else {\n    date = dateFromMoment;\n  }\n\n  return date.format(dateFormat);\n}\n\n/***/ }),\n/* 253 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports.default = numericValidator;\n/**\n * Numeric cell validator\n *\n * @private\n * @validator NumericValidator\n * @param {*} value - Value of edited cell\n * @param {*} callback - Callback called with validation result\n */\nfunction numericValidator(value, callback) {\n  var valueToValidate = value;\n\n  if (valueToValidate === null || valueToValidate === void 0) {\n    valueToValidate = '';\n  }\n  if (this.allowEmpty && valueToValidate === '') {\n    callback(true);\n  } else if (valueToValidate === '') {\n    callback(false);\n  } else {\n    callback(/^-?\\d*(\\.|,)?\\d*$/.test(valueToValidate));\n  }\n}\n\n/***/ }),\n/* 254 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports.default = timeValidator;\n\nvar _moment = __webpack_require__(57);\n\nvar _moment2 = _interopRequireDefault(_moment);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// Formats which are correctly parsed to time (supported by momentjs)\nvar STRICT_FORMATS = ['YYYY-MM-DDTHH:mm:ss.SSSZ', 'X', // Unix timestamp\n'x' // Unix ms timestamp\n];\n\n/**\n * Time cell validator\n *\n * @private\n * @validator TimeValidator\n * @dependencies moment\n * @param {*} value - Value of edited cell\n * @param {Function} callback - Callback called with validation result\n */\nfunction timeValidator(value, callback) {\n  var timeFormat = this.timeFormat || 'h:mm:ss a';\n  var valid = true;\n  var valueToValidate = value;\n\n  if (valueToValidate === null) {\n    valueToValidate = '';\n  }\n\n  valueToValidate = /^\\d{3,}$/.test(valueToValidate) ? parseInt(valueToValidate, 10) : valueToValidate;\n\n  var twoDigitValue = /^\\d{1,2}$/.test(valueToValidate);\n\n  if (twoDigitValue) {\n    valueToValidate += ':00';\n  }\n\n  var date = (0, _moment2.default)(valueToValidate, STRICT_FORMATS, true).isValid() ? (0, _moment2.default)(valueToValidate) : (0, _moment2.default)(valueToValidate, timeFormat);\n  var isValidTime = date.isValid();\n\n  // is it in the specified format\n  var isValidFormat = (0, _moment2.default)(valueToValidate, timeFormat, true).isValid() && !twoDigitValue;\n\n  if (this.allowEmpty && valueToValidate === '') {\n    isValidTime = true;\n    isValidFormat = true;\n  }\n  if (!isValidTime) {\n    valid = false;\n  }\n  if (!isValidTime && isValidFormat) {\n    valid = true;\n  }\n  if (isValidTime && !isValidFormat) {\n    if (this.correctFormat === true) {\n      // if format correction is enabled\n      var correctedValue = date.format(timeFormat);\n      var row = this.instance.runHooks('unmodifyRow', this.row);\n      var column = this.instance.runHooks('unmodifyCol', this.col);\n\n      this.instance.setDataAtCell(row, column, correctedValue, 'timeValidator');\n      valid = true;\n    } else {\n      valid = false;\n    }\n  }\n\n  callback(valid);\n}\n\n/***/ }),\n/* 255 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _editors = __webpack_require__(17);\n\nvar _renderers = __webpack_require__(14);\n\nvar _validators = __webpack_require__(34);\n\nvar CELL_TYPE = 'autocomplete';\n\nexports.default = {\n  editor: (0, _editors.getEditor)(CELL_TYPE),\n  renderer: (0, _renderers.getRenderer)(CELL_TYPE),\n  validator: (0, _validators.getValidator)(CELL_TYPE)\n};\n\n/***/ }),\n/* 256 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _editors = __webpack_require__(17);\n\nvar _renderers = __webpack_require__(14);\n\nvar CELL_TYPE = 'checkbox';\n\nexports.default = {\n  editor: (0, _editors.getEditor)(CELL_TYPE),\n  renderer: (0, _renderers.getRenderer)(CELL_TYPE)\n};\n\n/***/ }),\n/* 257 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _editors = __webpack_require__(17);\n\nvar _renderers = __webpack_require__(14);\n\nvar _validators = __webpack_require__(34);\n\nvar CELL_TYPE = 'date';\n\nexports.default = {\n  editor: (0, _editors.getEditor)(CELL_TYPE),\n  // displays small gray arrow on right side of the cell\n  renderer: (0, _renderers.getRenderer)('autocomplete'),\n  validator: (0, _validators.getValidator)(CELL_TYPE)\n};\n\n/***/ }),\n/* 258 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _editors = __webpack_require__(17);\n\nvar _renderers = __webpack_require__(14);\n\nvar _validators = __webpack_require__(34);\n\nvar CELL_TYPE = 'dropdown';\n\nexports.default = {\n  editor: (0, _editors.getEditor)(CELL_TYPE),\n  // displays small gray arrow on right side of the cell\n  renderer: (0, _renderers.getRenderer)('autocomplete'),\n  validator: (0, _validators.getValidator)('autocomplete')\n};\n\n/***/ }),\n/* 259 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _editors = __webpack_require__(17);\n\nvar _renderers = __webpack_require__(14);\n\nvar CELL_TYPE = 'handsontable';\n\nexports.default = {\n  editor: (0, _editors.getEditor)(CELL_TYPE),\n  // displays small gray arrow on right side of the cell\n  renderer: (0, _renderers.getRenderer)('autocomplete')\n};\n\n/***/ }),\n/* 260 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _editors = __webpack_require__(17);\n\nvar _renderers = __webpack_require__(14);\n\nvar _validators = __webpack_require__(34);\n\nvar CELL_TYPE = 'numeric';\n\nexports.default = {\n  editor: (0, _editors.getEditor)(CELL_TYPE),\n  renderer: (0, _renderers.getRenderer)(CELL_TYPE),\n  validator: (0, _validators.getValidator)(CELL_TYPE),\n  dataType: 'number'\n};\n\n/***/ }),\n/* 261 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _editors = __webpack_require__(17);\n\nvar _renderers = __webpack_require__(14);\n\nvar CELL_TYPE = 'password';\n\nexports.default = {\n  editor: (0, _editors.getEditor)(CELL_TYPE),\n  renderer: (0, _renderers.getRenderer)(CELL_TYPE),\n  copyable: false\n};\n\n/***/ }),\n/* 262 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _editors = __webpack_require__(17);\n\nvar _renderers = __webpack_require__(14);\n\nvar CELL_TYPE = 'text';\n\nexports.default = {\n  editor: (0, _editors.getEditor)(CELL_TYPE),\n  renderer: (0, _renderers.getRenderer)(CELL_TYPE)\n};\n\n/***/ }),\n/* 263 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _editors = __webpack_require__(17);\n\nvar _renderers = __webpack_require__(14);\n\nvar _validators = __webpack_require__(34);\n\nvar CELL_TYPE = 'time';\n\nexports.default = {\n  editor: (0, _editors.getEditor)('text'),\n  // displays small gray arrow on right side of the cell\n  renderer: (0, _renderers.getRenderer)('text'),\n  validator: (0, _validators.getValidator)(CELL_TYPE)\n};\n\n/***/ }),\n/* 264 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\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 && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _SheetClip = __webpack_require__(193);\n\nvar _SheetClip2 = _interopRequireDefault(_SheetClip);\n\nvar _data = __webpack_require__(92);\n\nvar _setting = __webpack_require__(91);\n\nvar _object = __webpack_require__(1);\n\nvar _array = __webpack_require__(2);\n\nvar _interval = __webpack_require__(265);\n\nvar _interval2 = _interopRequireDefault(_interval);\n\nvar _number = __webpack_require__(6);\n\nvar _multiMap = __webpack_require__(266);\n\nvar _multiMap2 = _interopRequireDefault(_multiMap);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Utility class that gets and saves data from/to the data source using mapping of columns numbers to object property names\n * @todo refactor arguments of methods getRange, getText to be numbers (not objects)\n * @todo remove priv, GridSettings from object constructor\n *\n * @param {Object} instance Instance of Handsontable\n * @param {*} priv\n * @param {*} GridSettings Grid settings\n * @util\n * @class DataMap\n */\nfunction DataMap(instance, priv, GridSettings) {\n  var _this = this;\n\n  this.instance = instance;\n  this.priv = priv;\n  this.GridSettings = GridSettings;\n  this.dataSource = this.instance.getSettings().data;\n  this.cachedLength = null;\n  this.skipCache = false;\n  this.latestSourceRowsCount = 0;\n\n  if (this.dataSource && this.dataSource[0]) {\n    this.duckSchema = this.recursiveDuckSchema(this.dataSource[0]);\n  } else {\n    this.duckSchema = {};\n  }\n  this.createMap();\n  this.interval = _interval2.default.create(function () {\n    return _this.clearLengthCache();\n  }, '15fps');\n\n  this.instance.addHook('skipLengthCache', function (delay) {\n    return _this.onSkipLengthCache(delay);\n  });\n  this.onSkipLengthCache(500);\n}\n\nDataMap.prototype.DESTINATION_RENDERER = 1;\nDataMap.prototype.DESTINATION_CLIPBOARD_GENERATOR = 2;\n\n/**\n * @param {Object|Array} object\n * @returns {Object|Array}\n */\nDataMap.prototype.recursiveDuckSchema = function (object) {\n  return (0, _object.duckSchema)(object);\n};\n\n/**\n * @param {Object} schema\n * @param {Number} lastCol\n * @param {Number} parent\n * @returns {Number}\n */\nDataMap.prototype.recursiveDuckColumns = function (schema, lastCol, parent) {\n  var _this2 = this;\n\n  var lastColumn = lastCol;\n  var propertyParent = parent;\n  var prop = void 0;\n\n  if (typeof lastColumn === 'undefined') {\n    lastColumn = 0;\n    propertyParent = '';\n  }\n  if ((typeof schema === 'undefined' ? 'undefined' : _typeof(schema)) === 'object' && !Array.isArray(schema)) {\n    (0, _object.objectEach)(schema, function (value, key) {\n      if (value === null) {\n        prop = propertyParent + key;\n        _this2.colToPropCache.push(prop);\n        _this2.propToColCache.set(prop, lastColumn);\n\n        lastColumn += 1;\n      } else {\n        lastColumn = _this2.recursiveDuckColumns(value, lastColumn, key + '.');\n      }\n    });\n  }\n\n  return lastColumn;\n};\n\nDataMap.prototype.createMap = function () {\n  var i = void 0;\n  var schema = this.getSchema();\n\n  if (typeof schema === 'undefined') {\n    throw new Error('trying to create `columns` definition but you didn\\'t provide `schema` nor `data`');\n  }\n\n  this.colToPropCache = [];\n  this.propToColCache = new _multiMap2.default();\n\n  var columns = this.instance.getSettings().columns;\n\n  if (columns) {\n    var maxCols = this.instance.getSettings().maxCols;\n    var columnsLen = Math.min(maxCols, columns.length);\n    var filteredIndex = 0;\n    var columnsAsFunc = false;\n    var schemaLen = (0, _object.deepObjectSize)(schema);\n\n    if (typeof columns === 'function') {\n      columnsLen = schemaLen > 0 ? schemaLen : this.instance.countSourceCols();\n      columnsAsFunc = true;\n    }\n\n    for (i = 0; i < columnsLen; i++) {\n      var column = columnsAsFunc ? columns(i) : columns[i];\n\n      if ((0, _object.isObject)(column)) {\n        if (typeof column.data !== 'undefined') {\n          var index = columnsAsFunc ? filteredIndex : i;\n          this.colToPropCache[index] = column.data;\n          this.propToColCache.set(column.data, index);\n        }\n\n        filteredIndex += 1;\n      }\n    }\n  } else {\n    this.recursiveDuckColumns(schema);\n  }\n};\n\n/**\n * Returns property name that corresponds with the given column index.\n *\n * @param {Number} col Visual column index.\n * @returns {Number} Physical column index.\n */\nDataMap.prototype.colToProp = function (col) {\n  var physicalColumn = this.instance.runHooks('modifyCol', col);\n\n  if (!isNaN(physicalColumn) && this.colToPropCache && typeof this.colToPropCache[physicalColumn] !== 'undefined') {\n    return this.colToPropCache[physicalColumn];\n  }\n\n  return physicalColumn;\n};\n\n/**\n * @param {Object} prop\n * @fires Hooks#modifyCol\n * @returns {*}\n */\nDataMap.prototype.propToCol = function (prop) {\n  var col = void 0;\n\n  if (typeof this.propToColCache.get(prop) === 'undefined') {\n    col = prop;\n  } else {\n    col = this.propToColCache.get(prop);\n  }\n  col = this.instance.runHooks('unmodifyCol', col);\n\n  return col;\n};\n\n/**\n * @returns {Object}\n */\nDataMap.prototype.getSchema = function () {\n  var schema = this.instance.getSettings().dataSchema;\n\n  if (schema) {\n    if (typeof schema === 'function') {\n      return schema();\n    }\n    return schema;\n  }\n\n  return this.duckSchema;\n};\n\n/**\n * Creates row at the bottom of the data array.\n *\n * @param {Number} [index] Physical index of the row before which the new row will be inserted.\n * @param {Number} [amount=1] An amount of rows to add.\n * @param {String} [source] Source of method call.\n * @fires Hooks#afterCreateRow\n * @returns {Number} Returns number of created rows.\n */\nDataMap.prototype.createRow = function (index) {\n  var _this3 = this;\n\n  var amount = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n  var source = arguments[2];\n\n  var numberOfCreatedRows = 0;\n  var rowIndex = index;\n\n  if (typeof rowIndex !== 'number' || rowIndex >= this.instance.countSourceRows()) {\n    rowIndex = this.instance.countSourceRows();\n  }\n\n  var continueProcess = this.instance.runHooks('beforeCreateRow', rowIndex, amount, source);\n\n  if (continueProcess === false) {\n    return 0;\n  }\n\n  var maxRows = this.instance.getSettings().maxRows;\n  var columnCount = this.instance.countCols();\n\n  var _loop = function _loop() {\n    var row = null;\n\n    if (_this3.instance.dataType === 'array') {\n      if (_this3.instance.getSettings().dataSchema) {\n        // Clone template array\n        row = (0, _object.deepClone)(_this3.getSchema());\n      } else {\n        row = [];\n        /* eslint-disable no-loop-func */\n        (0, _number.rangeEach)(columnCount - 1, function () {\n          return row.push(null);\n        });\n      }\n    } else if (_this3.instance.dataType === 'function') {\n      row = _this3.instance.getSettings().dataSchema(rowIndex);\n    } else {\n      row = {};\n      (0, _object.deepExtend)(row, _this3.getSchema());\n    }\n\n    if (rowIndex === _this3.instance.countSourceRows()) {\n      _this3.dataSource.push(row);\n    } else {\n      _this3.spliceData(rowIndex, 0, row);\n    }\n\n    numberOfCreatedRows += 1;\n  };\n\n  while (numberOfCreatedRows < amount && this.instance.countSourceRows() < maxRows) {\n    _loop();\n  }\n\n  this.instance.runHooks('afterCreateRow', rowIndex, numberOfCreatedRows, source);\n  this.instance.forceFullRender = true; // used when data was changed\n\n  return numberOfCreatedRows;\n};\n\n/**\n * Creates col at the right of the data array.\n *\n * @param {Number} [index] Visual index of the column before which the new column will be inserted\n * @param {Number} [amount=1] An amount of columns to add.\n * @param {String} [source] Source of method call.\n * @fires Hooks#afterCreateCol\n * @returns {Number} Returns number of created columns\n */\nDataMap.prototype.createCol = function (index) {\n  var amount = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n  var source = arguments[2];\n\n  if (!this.instance.isColumnModificationAllowed()) {\n    throw new Error('Cannot create new column. When data source in an object, ' + 'you can only have as much columns as defined in first data row, data schema or in the \\'columns\\' setting.' + 'If you want to be able to add new columns, you have to use array datasource.');\n  }\n  var rlen = this.instance.countSourceRows();\n  var data = this.dataSource;\n  var countColumns = this.instance.countCols();\n  var columnIndex = typeof index !== 'number' || index >= countColumns ? countColumns : index;\n  var constructor = void 0;\n  var numberOfCreatedCols = 0;\n  var currentIndex = void 0;\n\n  this.instance.runHooks('beforeCreateCol', columnIndex, amount, source);\n\n  currentIndex = columnIndex;\n\n  var maxCols = this.instance.getSettings().maxCols;\n  while (numberOfCreatedCols < amount && this.instance.countCols() < maxCols) {\n    constructor = (0, _setting.columnFactory)(this.GridSettings, this.priv.columnsSettingConflicts);\n\n    if (typeof columnIndex !== 'number' || columnIndex >= this.instance.countCols()) {\n      if (rlen > 0) {\n        for (var r = 0; r < rlen; r++) {\n          if (typeof data[r] === 'undefined') {\n            data[r] = [];\n          }\n          data[r].push(null);\n        }\n      } else {\n        data.push([null]);\n      }\n      // Add new column constructor\n      this.priv.columnSettings.push(constructor);\n    } else {\n      for (var _row = 0; _row < rlen; _row++) {\n        data[_row].splice(currentIndex, 0, null);\n      }\n      // Add new column constructor at given index\n      this.priv.columnSettings.splice(currentIndex, 0, constructor);\n    }\n\n    numberOfCreatedCols += 1;\n    currentIndex += 1;\n  }\n\n  this.instance.runHooks('afterCreateCol', columnIndex, numberOfCreatedCols, source);\n  this.instance.forceFullRender = true; // used when data was changed\n\n  return numberOfCreatedCols;\n};\n\n/**\n * Removes row from the data array.\n *\n * @param {Number} [index] Visual index of the row to be removed. If not provided, the last row will be removed\n * @param {Number} [amount=1] Amount of the rows to be removed. If not provided, one row will be removed\n * @param {String} [source] Source of method call.\n * @fires Hooks#beforeRemoveRow\n * @fires Hooks#afterRemoveRow\n */\nDataMap.prototype.removeRow = function (index) {\n  var amount = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n  var source = arguments[2];\n\n  var rowIndex = typeof index !== 'number' ? -amount : index;\n  var rowsAmount = this.instance.runHooks('modifyRemovedAmount', amount, rowIndex);\n\n  rowIndex = (this.instance.countSourceRows() + rowIndex) % this.instance.countSourceRows();\n\n  var logicRows = this.visualRowsToPhysical(rowIndex, rowsAmount);\n  var actionWasNotCancelled = this.instance.runHooks('beforeRemoveRow', rowIndex, rowsAmount, logicRows, source);\n\n  if (actionWasNotCancelled === false) {\n    return;\n  }\n\n  var data = this.dataSource;\n  var newData = this.filterData(rowIndex, rowsAmount);\n\n  if (newData) {\n    data.length = 0;\n    Array.prototype.push.apply(data, newData);\n  }\n\n  this.instance.runHooks('afterRemoveRow', rowIndex, rowsAmount, logicRows, source);\n\n  this.instance.forceFullRender = true; // used when data was changed\n};\n\n/**\n * Removes column from the data array.\n *\n * @param {Number} [index] Visual index of the column to be removed. If not provided, the last column will be removed\n * @param {Number} [amount=1] Amount of the columns to be removed. If not provided, one column will be removed\n * @param {String} [source] Source of method call.\n * @fires Hooks#beforeRemoveCol\n * @fires Hooks#afterRemoveCol\n */\nDataMap.prototype.removeCol = function (index) {\n  var amount = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n  var source = arguments[2];\n\n  if (this.instance.dataType === 'object' || this.instance.getSettings().columns) {\n    throw new Error('cannot remove column with object data source or columns option specified');\n  }\n  var columnIndex = typeof index !== 'number' ? -amount : index;\n\n  columnIndex = (this.instance.countCols() + columnIndex) % this.instance.countCols();\n\n  var logicColumns = this.visualColumnsToPhysical(columnIndex, amount);\n  var descendingLogicColumns = logicColumns.slice(0).sort(function (a, b) {\n    return b - a;\n  });\n  var actionWasNotCancelled = this.instance.runHooks('beforeRemoveCol', columnIndex, amount, logicColumns, source);\n\n  if (actionWasNotCancelled === false) {\n    return;\n  }\n\n  var isTableUniform = true;\n  var removedColumnsCount = descendingLogicColumns.length;\n  var data = this.dataSource;\n\n  for (var c = 0; c < removedColumnsCount; c++) {\n    if (isTableUniform && logicColumns[0] !== logicColumns[c] - c) {\n      isTableUniform = false;\n    }\n  }\n\n  if (isTableUniform) {\n    for (var r = 0, rlen = this.instance.countSourceRows(); r < rlen; r++) {\n      data[r].splice(logicColumns[0], amount);\n    }\n  } else {\n    for (var _r = 0, _rlen = this.instance.countSourceRows(); _r < _rlen; _r++) {\n      for (var _c = 0; _c < removedColumnsCount; _c++) {\n        data[_r].splice(descendingLogicColumns[_c], 1);\n      }\n    }\n\n    for (var _c2 = 0; _c2 < removedColumnsCount; _c2++) {\n      this.priv.columnSettings.splice(logicColumns[_c2], 1);\n    }\n  }\n\n  this.instance.runHooks('afterRemoveCol', columnIndex, amount, logicColumns, source);\n\n  this.instance.forceFullRender = true; // used when data was changed\n};\n\n/**\n * Add/Removes data from the column.\n *\n * @param {Number} col Physical index of column in which do you want to do splice\n * @param {Number} index Index at which to start changing the array. If negative, will begin that many elements from the end\n * @param {Number} amount An integer indicating the number of old array elements to remove. If amount is 0, no elements are removed\n * @param {Array} [elements]\n * @returns {Array} Returns removed portion of columns\n */\nDataMap.prototype.spliceCol = function (col, index, amount) {\n  var colData = this.instance.getDataAtCol(col);\n  var removed = colData.slice(index, index + amount);\n  var after = colData.slice(index + amount);\n\n  for (var _len = arguments.length, elements = Array(_len > 3 ? _len - 3 : 0), _key = 3; _key < _len; _key++) {\n    elements[_key - 3] = arguments[_key];\n  }\n\n  (0, _array.extendArray)(elements, after);\n  var i = 0;\n  while (i < amount) {\n    elements.push(null); // add null in place of removed elements\n    i += 1;\n  }\n  (0, _array.to2dArray)(elements);\n  this.instance.populateFromArray(index, col, elements, null, null, 'spliceCol');\n\n  return removed;\n};\n\n/**\n * Add/Removes data from the row.\n *\n * @param {Number} row Physical index of row in which do you want to do splice\n * @param {Number} index Index at which to start changing the array. If negative, will begin that many elements from the end.\n * @param {Number} amount An integer indicating the number of old array elements to remove. If amount is 0, no elements are removed.\n * @param {Array} [elements]\n * @returns {Array} Returns removed portion of rows\n */\nDataMap.prototype.spliceRow = function (row, index, amount) {\n  var rowData = this.instance.getSourceDataAtRow(row);\n  var removed = rowData.slice(index, index + amount);\n  var after = rowData.slice(index + amount);\n\n  for (var _len2 = arguments.length, elements = Array(_len2 > 3 ? _len2 - 3 : 0), _key2 = 3; _key2 < _len2; _key2++) {\n    elements[_key2 - 3] = arguments[_key2];\n  }\n\n  (0, _array.extendArray)(elements, after);\n  var i = 0;\n  while (i < amount) {\n    elements.push(null); // add null in place of removed elements\n    i += 1;\n  }\n  this.instance.populateFromArray(row, index, [elements], null, null, 'spliceRow');\n\n  return removed;\n};\n\n/**\n * Add/remove row(s) to/from the data source.\n *\n * @param {Number} index Physical index of the element to remove.\n * @param {Number} amount Number of rows to add/remove.\n * @param {Object} element Row to add.\n */\nDataMap.prototype.spliceData = function (index, amount, element) {\n  var continueSplicing = this.instance.runHooks('beforeDataSplice', index, amount, element);\n\n  if (continueSplicing !== false) {\n    this.dataSource.splice(index, amount, element);\n  }\n};\n\n/**\n * Filter unwanted data elements from the data source.\n *\n * @param {Number} index Visual index of the element to remove.\n * @param {Number} amount Number of rows to add/remove.\n * @returns {Array}\n */\nDataMap.prototype.filterData = function (index, amount) {\n  var physicalRows = this.visualRowsToPhysical(index, amount);\n  var continueSplicing = this.instance.runHooks('beforeDataFilter', index, amount, physicalRows);\n\n  if (continueSplicing !== false) {\n    var newData = this.dataSource.filter(function (row, rowIndex) {\n      return physicalRows.indexOf(rowIndex) === -1;\n    });\n\n    return newData;\n  }\n};\n\n/**\n * Returns single value from the data array.\n *\n * @param {Number} row Visual row index.\n * @param {Number} prop\n */\nDataMap.prototype.get = function (row, prop) {\n  var physicalRow = this.instance.runHooks('modifyRow', row);\n\n  var dataRow = this.dataSource[physicalRow];\n  // TODO: To remove, use 'modifyData' hook instead (see below)\n  var modifiedRowData = this.instance.runHooks('modifyRowData', physicalRow);\n\n  dataRow = isNaN(modifiedRowData) ? modifiedRowData : dataRow;\n  //\n\n  var value = null;\n\n  // try to get value under property `prop` (includes dot)\n  if (dataRow && dataRow.hasOwnProperty && (0, _object.hasOwnProperty)(dataRow, prop)) {\n    value = dataRow[prop];\n  } else if (typeof prop === 'string' && prop.indexOf('.') > -1) {\n    var sliced = prop.split('.');\n    var out = dataRow;\n\n    if (!out) {\n      return null;\n    }\n    for (var i = 0, ilen = sliced.length; i < ilen; i++) {\n      out = out[sliced[i]];\n\n      if (typeof out === 'undefined') {\n        return null;\n      }\n    }\n    value = out;\n  } else if (typeof prop === 'function') {\n    /**\n     *  allows for interacting with complex structures, for example\n     *  d3/jQuery getter/setter properties:\n     *\n     *    {columns: [{\n     *      data: function(row, value){\n     *        if(arguments.length === 1){\n     *          return row.property();\n     *        }\n     *        row.property(value);\n     *      }\n     *    }]}\n     */\n    value = prop(this.dataSource.slice(physicalRow, physicalRow + 1)[0]);\n  }\n\n  if (this.instance.hasHook('modifyData')) {\n    var valueHolder = (0, _object.createObjectPropListener)(value);\n\n    this.instance.runHooks('modifyData', physicalRow, this.propToCol(prop), valueHolder, 'get');\n\n    if (valueHolder.isTouched()) {\n      value = valueHolder.value;\n    }\n  }\n\n  return value;\n};\n\nvar copyableLookup = (0, _data.cellMethodLookupFactory)('copyable', false);\n\n/**\n * Returns single value from the data array (intended for clipboard copy to an external application).\n *\n * @param {Number} row Physical row index.\n * @param {Number} prop\n * @returns {String}\n */\nDataMap.prototype.getCopyable = function (row, prop) {\n  if (copyableLookup.call(this.instance, row, this.propToCol(prop))) {\n    return this.get(row, prop);\n  }\n  return '';\n};\n\n/**\n * Saves single value to the data array.\n *\n * @param {Number} row Visual row index.\n * @param {Number} prop\n * @param {String} value\n * @param {String} [source] Source of hook runner.\n */\nDataMap.prototype.set = function (row, prop, value, source) {\n  var physicalRow = this.instance.runHooks('modifyRow', row, source || 'datamapGet');\n  var newValue = value;\n  var dataRow = this.dataSource[physicalRow];\n  // TODO: To remove, use 'modifyData' hook instead (see below)\n  var modifiedRowData = this.instance.runHooks('modifyRowData', physicalRow);\n\n  dataRow = isNaN(modifiedRowData) ? modifiedRowData : dataRow;\n  //\n\n  if (this.instance.hasHook('modifyData')) {\n    var valueHolder = (0, _object.createObjectPropListener)(newValue);\n\n    this.instance.runHooks('modifyData', physicalRow, this.propToCol(prop), valueHolder, 'set');\n\n    if (valueHolder.isTouched()) {\n      newValue = valueHolder.value;\n    }\n  }\n\n  // try to set value under property `prop` (includes dot)\n  if (dataRow && dataRow.hasOwnProperty && (0, _object.hasOwnProperty)(dataRow, prop)) {\n    dataRow[prop] = newValue;\n  } else if (typeof prop === 'string' && prop.indexOf('.') > -1) {\n    var sliced = prop.split('.');\n    var out = dataRow;\n    var i = 0;\n    var ilen = void 0;\n\n    for (i = 0, ilen = sliced.length - 1; i < ilen; i++) {\n      if (typeof out[sliced[i]] === 'undefined') {\n        out[sliced[i]] = {};\n      }\n      out = out[sliced[i]];\n    }\n    out[sliced[i]] = newValue;\n  } else if (typeof prop === 'function') {\n    /* see the `function` handler in `get` */\n    prop(this.dataSource.slice(physicalRow, physicalRow + 1)[0], newValue);\n  } else {\n    dataRow[prop] = newValue;\n  }\n};\n\n/**\n * This ridiculous piece of code maps rows Id that are present in table data to those displayed for user.\n * The trick is, the physical row id (stored in settings.data) is not necessary the same\n * as the visual (displayed) row id (e.g. when sorting is applied).\n *\n * @param {Number} index Visual row index.\n * @param {Number} amount\n * @fires Hooks#modifyRow\n * @returns {Number}\n */\nDataMap.prototype.visualRowsToPhysical = function (index, amount) {\n  var totalRows = this.instance.countSourceRows();\n  var logicRows = [];\n  var physicRow = (totalRows + index) % totalRows;\n  var rowsToRemove = amount;\n  var row = void 0;\n\n  while (physicRow < totalRows && rowsToRemove) {\n    row = this.instance.runHooks('modifyRow', physicRow);\n    logicRows.push(row);\n\n    rowsToRemove -= 1;\n    physicRow += 1;\n  }\n\n  return logicRows;\n};\n\n/**\n *\n * @param index Visual column index.\n * @param amount\n * @returns {Array}\n */\nDataMap.prototype.visualColumnsToPhysical = function (index, amount) {\n  var totalCols = this.instance.countCols();\n  var physicalCol = (totalCols + index) % totalCols;\n  var visualCols = [];\n  var colsToRemove = amount;\n\n  while (physicalCol < totalCols && colsToRemove) {\n    var col = this.instance.runHooks('modifyCol', physicalCol);\n\n    visualCols.push(col);\n\n    colsToRemove -= 1;\n    physicalCol += 1;\n  }\n\n  return visualCols;\n};\n\n/**\n * Clears the data array.\n */\nDataMap.prototype.clear = function () {\n  for (var r = 0; r < this.instance.countSourceRows(); r++) {\n    for (var c = 0; c < this.instance.countCols(); c++) {\n      this.set(r, this.colToProp(c), '');\n    }\n  }\n};\n\n/**\n * Clear cached data length.\n */\nDataMap.prototype.clearLengthCache = function () {\n  this.cachedLength = null;\n};\n\n/**\n * Get data length.\n *\n * @returns {Number}\n */\nDataMap.prototype.getLength = function () {\n  var _this4 = this;\n\n  var maxRowsFromSettings = this.instance.getSettings().maxRows;\n  var maxRows = void 0;\n\n  if (maxRowsFromSettings < 0 || maxRowsFromSettings === 0) {\n    maxRows = 0;\n  } else {\n    maxRows = maxRowsFromSettings || Infinity;\n  }\n\n  var length = this.instance.countSourceRows();\n\n  if (this.instance.hasHook('modifyRow')) {\n    var reValidate = this.skipCache;\n\n    this.interval.start();\n    if (length !== this.latestSourceRowsCount) {\n      reValidate = true;\n    }\n\n    this.latestSourceRowsCount = length;\n    if (this.cachedLength === null || reValidate) {\n      (0, _number.rangeEach)(length - 1, function (row) {\n        var physicalRow = _this4.instance.runHooks('modifyRow', row);\n\n        if (physicalRow === null) {\n          length -= 1;\n        }\n      });\n      this.cachedLength = length;\n    } else {\n      length = this.cachedLength;\n    }\n  } else {\n    this.interval.stop();\n  }\n\n  return Math.min(length, maxRows);\n};\n\n/**\n * Returns the data array.\n *\n * @returns {Array}\n */\nDataMap.prototype.getAll = function () {\n  var start = {\n    row: 0,\n    col: 0\n  };\n\n  var end = {\n    row: Math.max(this.instance.countSourceRows() - 1, 0),\n    col: Math.max(this.instance.countCols() - 1, 0)\n  };\n\n  if (start.row - end.row === 0 && !this.instance.countSourceRows()) {\n    return [];\n  }\n\n  return this.getRange(start, end, DataMap.prototype.DESTINATION_RENDERER);\n};\n\n/**\n * Returns data range as array.\n *\n * @param {Object} [start] Start selection position. Visual indexes.\n * @param {Object} [end] End selection position. Visual indexes.\n * @param {Number} destination Destination of datamap.get\n * @returns {Array}\n */\nDataMap.prototype.getRange = function (start, end, destination) {\n  var output = [];\n  var r = void 0;\n  var c = void 0;\n  var row = void 0;\n\n  var maxRows = this.instance.getSettings().maxRows;\n  var maxCols = this.instance.getSettings().maxCols;\n\n  if (maxRows === 0 || maxCols === 0) {\n    return [];\n  }\n\n  var getFn = destination === this.DESTINATION_CLIPBOARD_GENERATOR ? this.getCopyable : this.get;\n\n  var rlen = Math.min(Math.max(maxRows - 1, 0), Math.max(start.row, end.row));\n  var clen = Math.min(Math.max(maxCols - 1, 0), Math.max(start.col, end.col));\n\n  for (r = Math.min(start.row, end.row); r <= rlen; r++) {\n    row = [];\n    var physicalRow = this.instance.runHooks('modifyRow', r);\n\n    for (c = Math.min(start.col, end.col); c <= clen; c++) {\n\n      if (physicalRow === null) {\n        break;\n      }\n      row.push(getFn.call(this, r, this.colToProp(c)));\n    }\n    if (physicalRow !== null) {\n      output.push(row);\n    }\n  }\n\n  return output;\n};\n\n/**\n * Return data as text (tab separated columns).\n *\n * @param {Object} [start] Start selection position. Visual indexes.\n * @param {Object} [end] End selection position. Visual indexes.\n * @returns {String}\n */\nDataMap.prototype.getText = function (start, end) {\n  return _SheetClip2.default.stringify(this.getRange(start, end, this.DESTINATION_RENDERER));\n};\n\n/**\n * Return data as copyable text (tab separated columns intended for clipboard copy to an external application).\n *\n * @param {Object} [start] Start selection position. Visual indexes.\n * @param {Object} [end] End selection position. Visual indexes.\n * @returns {String}\n */\nDataMap.prototype.getCopyableText = function (start, end) {\n  return _SheetClip2.default.stringify(this.getRange(start, end, this.DESTINATION_CLIPBOARD_GENERATOR));\n};\n\n/**\n * `skipLengthCache` callback.\n * @private\n * @param {Number} delay Time of the delay in milliseconds.\n */\nDataMap.prototype.onSkipLengthCache = function (delay) {\n  var _this5 = this;\n\n  this.skipCache = true;\n  setTimeout(function () {\n    _this5.skipCache = false;\n  }, delay);\n};\n\n/**\n * Destroy instance.\n */\nDataMap.prototype.destroy = function () {\n  this.interval.stop();\n\n  this.interval = null;\n  this.instance = null;\n  this.priv = null;\n  this.GridSettings = null;\n  this.dataSource = null;\n  this.cachedLength = null;\n  this.duckSchema = null;\n};\n\nexports.default = DataMap;\n\n/***/ }),\n/* 265 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nexports.parseDelay = parseDelay;\n\nvar _feature = __webpack_require__(40);\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * @class Interval\n * @util\n */\nvar Interval = function () {\n  _createClass(Interval, null, [{\n    key: 'create',\n    value: function create(func, delay) {\n      return new Interval(func, delay);\n    }\n  }]);\n\n  function Interval(func, delay) {\n    var _this = this;\n\n    _classCallCheck(this, Interval);\n\n    /**\n     * Animation frame request id.\n     *\n     * @type {Number}\n     */\n    this.timer = null;\n    /**\n     * Function to invoke repeatedly.\n     *\n     * @type {Function}\n     */\n    this.func = func;\n    /**\n     * Number of milliseconds that function should wait before next call.\n     */\n    this.delay = parseDelay(delay);\n    /**\n     * Flag which indicates if interval object was stopped.\n     *\n     * @type {Boolean}\n     * @default true\n     */\n    this.stopped = true;\n    /**\n     * Interval time (in milliseconds) of the last callback call.\n     *\n     * @private\n     * @type {Number}\n     */\n    this._then = null;\n    /**\n     * Bounded function `func`.\n     *\n     * @private\n     * @type {Function}\n     */\n    this._callback = function () {\n      return _this.__callback();\n    };\n  }\n\n  /**\n   * Start loop.\n   *\n   * @returns {Interval}\n   */\n\n\n  _createClass(Interval, [{\n    key: 'start',\n    value: function start() {\n      if (this.stopped) {\n        this._then = Date.now();\n        this.stopped = false;\n        this.timer = (0, _feature.requestAnimationFrame)(this._callback);\n      }\n\n      return this;\n    }\n\n    /**\n     * Stop looping.\n     *\n     * @returns {Interval}\n     */\n\n  }, {\n    key: 'stop',\n    value: function stop() {\n      if (!this.stopped) {\n        this.stopped = true;\n        (0, _feature.cancelAnimationFrame)(this.timer);\n        this.timer = null;\n      }\n\n      return this;\n    }\n\n    /**\n     * Loop callback, fired on every animation frame.\n     *\n     * @private\n     */\n\n  }, {\n    key: '__callback',\n    value: function __callback() {\n      this.timer = (0, _feature.requestAnimationFrame)(this._callback);\n\n      if (this.delay) {\n        var now = Date.now();\n        var elapsed = now - this._then;\n\n        if (elapsed > this.delay) {\n          this._then = now - elapsed % this.delay;\n          this.func();\n        }\n      } else {\n        this.func();\n      }\n    }\n  }]);\n\n  return Interval;\n}();\n\nexports.default = Interval;\n\n/**\n * Convert delay from string format to milliseconds.\n *\n * @param {Number|String} delay\n * @returns {Number}\n */\n\nfunction parseDelay(delay) {\n  var result = delay;\n\n  if (typeof result === 'string' && /fps$/.test(result)) {\n    result = 1000 / parseInt(result.replace('fps', '') || 0, 10);\n  }\n\n  return result;\n}\n\n/***/ }),\n/* 266 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\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 && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nfunction MultiMap() {\n  var map = {\n    arrayMap: [],\n    weakMap: new WeakMap()\n  };\n\n  return {\n    get: function get(key) {\n      if (canBeAnArrayMapKey(key)) {\n        return map.arrayMap[key];\n      } else if (canBeAWeakMapKey(key)) {\n        return map.weakMap.get(key);\n      }\n    },\n    set: function set(key, value) {\n      if (canBeAnArrayMapKey(key)) {\n        map.arrayMap[key] = value;\n      } else if (canBeAWeakMapKey(key)) {\n        map.weakMap.set(key, value);\n      } else {\n        throw new Error('Invalid key type');\n      }\n    },\n    delete: function _delete(key) {\n      if (canBeAnArrayMapKey(key)) {\n        delete map.arrayMap[key];\n      } else if (canBeAWeakMapKey(key)) {\n        map.weakMap.delete(key);\n      }\n    }\n  };\n\n  function canBeAnArrayMapKey(obj) {\n    return obj !== null && !isNaNSymbol(obj) && (typeof obj === 'string' || typeof obj === 'number');\n  }\n\n  function canBeAWeakMapKey(obj) {\n    return obj !== null && ((typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) === 'object' || typeof obj === 'function');\n  }\n\n  function isNaNSymbol(obj) {\n    /* eslint-disable no-self-compare */\n    return obj !== obj; // NaN === NaN is always false\n  }\n}\n\nexports.default = MultiMap;\n\n/***/ }),\n/* 267 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _src = __webpack_require__(4);\n\nvar _unicode = __webpack_require__(21);\n\nvar _event = __webpack_require__(13);\n\nvar _editors = __webpack_require__(17);\n\nvar _eventManager = __webpack_require__(5);\n\nvar _eventManager2 = _interopRequireDefault(_eventManager);\n\nvar _baseEditor = __webpack_require__(55);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction EditorManager(instance, priv, selection) {\n  var _this = this;\n  var eventManager = new _eventManager2.default(instance);\n  var destroyed = false;\n  var lock = false;\n  var activeEditor = void 0;\n\n  function moveSelectionAfterEnter(shiftKey) {\n    var enterMoves = typeof priv.settings.enterMoves === 'function' ? priv.settings.enterMoves(event) : priv.settings.enterMoves;\n\n    if (shiftKey) {\n      // move selection up\n      selection.transformStart(-enterMoves.row, -enterMoves.col);\n    } else {\n      // move selection down (add a new row if needed)\n      selection.transformStart(enterMoves.row, enterMoves.col, true);\n    }\n  }\n\n  function moveSelectionUp(shiftKey) {\n    if (shiftKey) {\n      selection.transformEnd(-1, 0);\n    } else {\n      selection.transformStart(-1, 0);\n    }\n  }\n\n  function moveSelectionDown(shiftKey) {\n    if (shiftKey) {\n      // expanding selection down with shift\n      selection.transformEnd(1, 0);\n    } else {\n      selection.transformStart(1, 0);\n    }\n  }\n\n  function moveSelectionRight(shiftKey) {\n    if (shiftKey) {\n      selection.transformEnd(0, 1);\n    } else {\n      selection.transformStart(0, 1);\n    }\n  }\n\n  function moveSelectionLeft(shiftKey) {\n    if (shiftKey) {\n      selection.transformEnd(0, -1);\n    } else {\n      selection.transformStart(0, -1);\n    }\n  }\n\n  function onKeyDown(event) {\n    if (!instance.isListening()) {\n      return;\n    }\n    instance.runHooks('beforeKeyDown', event);\n\n    // keyCode 229 aka 'uninitialized' doesn't take into account with editors. This key code is produced when unfinished\n    // character is entering (using IME editor). It is fired mainly on linux (ubuntu) with installed ibus-pinyin package.\n    if (destroyed || event.keyCode === 229) {\n      return;\n    }\n    if ((0, _event.isImmediatePropagationStopped)(event)) {\n      return;\n    }\n    priv.lastKeyCode = event.keyCode;\n\n    if (!selection.isSelected()) {\n      return;\n    }\n    // catch CTRL but not right ALT (which in some systems triggers ALT+CTRL)\n    var ctrlDown = (event.ctrlKey || event.metaKey) && !event.altKey;\n\n    if (activeEditor && !activeEditor.isWaiting()) {\n      if (!(0, _unicode.isMetaKey)(event.keyCode) && !(0, _unicode.isCtrlMetaKey)(event.keyCode) && !ctrlDown && !_this.isEditorOpened()) {\n        _this.openEditor('', event);\n\n        return;\n      }\n    }\n    var rangeModifier = event.shiftKey ? selection.setRangeEnd : selection.setRangeStart;\n    var tabMoves = void 0;\n\n    switch (event.keyCode) {\n      case _unicode.KEY_CODES.A:\n        if (!_this.isEditorOpened() && ctrlDown) {\n          instance.selectAll();\n\n          event.preventDefault();\n          (0, _event.stopPropagation)(event);\n        }\n        break;\n\n      case _unicode.KEY_CODES.ARROW_UP:\n        if (_this.isEditorOpened() && !activeEditor.isWaiting()) {\n          _this.closeEditorAndSaveChanges(ctrlDown);\n        }\n        moveSelectionUp(event.shiftKey);\n\n        event.preventDefault();\n        (0, _event.stopPropagation)(event);\n        break;\n\n      case _unicode.KEY_CODES.ARROW_DOWN:\n        if (_this.isEditorOpened() && !activeEditor.isWaiting()) {\n          _this.closeEditorAndSaveChanges(ctrlDown);\n        }\n\n        moveSelectionDown(event.shiftKey);\n\n        event.preventDefault();\n        (0, _event.stopPropagation)(event);\n        break;\n\n      case _unicode.KEY_CODES.ARROW_RIGHT:\n        if (_this.isEditorOpened() && !activeEditor.isWaiting()) {\n          _this.closeEditorAndSaveChanges(ctrlDown);\n        }\n\n        moveSelectionRight(event.shiftKey);\n\n        event.preventDefault();\n        (0, _event.stopPropagation)(event);\n        break;\n\n      case _unicode.KEY_CODES.ARROW_LEFT:\n        if (_this.isEditorOpened() && !activeEditor.isWaiting()) {\n          _this.closeEditorAndSaveChanges(ctrlDown);\n        }\n\n        moveSelectionLeft(event.shiftKey);\n\n        event.preventDefault();\n        (0, _event.stopPropagation)(event);\n        break;\n\n      case _unicode.KEY_CODES.TAB:\n        tabMoves = typeof priv.settings.tabMoves === 'function' ? priv.settings.tabMoves(event) : priv.settings.tabMoves;\n\n        if (event.shiftKey) {\n          // move selection left\n          selection.transformStart(-tabMoves.row, -tabMoves.col);\n        } else {\n          // move selection right (add a new column if needed)\n          selection.transformStart(tabMoves.row, tabMoves.col, true);\n        }\n        event.preventDefault();\n        (0, _event.stopPropagation)(event);\n        break;\n\n      case _unicode.KEY_CODES.BACKSPACE:\n      case _unicode.KEY_CODES.DELETE:\n        instance.emptySelectedCells();\n        _this.prepareEditor();\n        event.preventDefault();\n        break;\n\n      case _unicode.KEY_CODES.F2:\n        /* F2 */\n        if (activeEditor) {\n          activeEditor.enableFullEditMode();\n        }\n        _this.openEditor(null, event);\n\n        event.preventDefault(); // prevent Opera from opening 'Go to Page dialog'\n        break;\n\n      case _unicode.KEY_CODES.ENTER:\n        /* return/enter */\n        if (_this.isEditorOpened()) {\n\n          if (activeEditor && activeEditor.state !== _baseEditor.EditorState.WAITING) {\n            _this.closeEditorAndSaveChanges(ctrlDown);\n          }\n          moveSelectionAfterEnter(event.shiftKey);\n        } else if (instance.getSettings().enterBeginsEditing) {\n          if (activeEditor) {\n            activeEditor.enableFullEditMode();\n          }\n          _this.openEditor(null, event);\n        } else {\n          moveSelectionAfterEnter(event.shiftKey);\n        }\n        event.preventDefault(); // don't add newline to field\n        (0, _event.stopImmediatePropagation)(event); // required by HandsontableEditor\n        break;\n\n      case _unicode.KEY_CODES.ESCAPE:\n        if (_this.isEditorOpened()) {\n          _this.closeEditorAndRestoreOriginalValue(ctrlDown);\n\n          activeEditor.focus();\n        }\n        event.preventDefault();\n        break;\n\n      case _unicode.KEY_CODES.HOME:\n        if (event.ctrlKey || event.metaKey) {\n          rangeModifier.call(selection, new _src.CellCoords(0, selection.selectedRange.current().from.col));\n        } else {\n          rangeModifier.call(selection, new _src.CellCoords(selection.selectedRange.current().from.row, 0));\n        }\n        event.preventDefault(); // don't scroll the window\n        (0, _event.stopPropagation)(event);\n        break;\n\n      case _unicode.KEY_CODES.END:\n        if (event.ctrlKey || event.metaKey) {\n          rangeModifier.call(selection, new _src.CellCoords(instance.countRows() - 1, selection.selectedRange.current().from.col));\n        } else {\n          rangeModifier.call(selection, new _src.CellCoords(selection.selectedRange.current().from.row, instance.countCols() - 1));\n        }\n        event.preventDefault(); // don't scroll the window\n        (0, _event.stopPropagation)(event);\n        break;\n\n      case _unicode.KEY_CODES.PAGE_UP:\n        selection.transformStart(-instance.countVisibleRows(), 0);\n        event.preventDefault(); // don't page up the window\n        (0, _event.stopPropagation)(event);\n        break;\n\n      case _unicode.KEY_CODES.PAGE_DOWN:\n        selection.transformStart(instance.countVisibleRows(), 0);\n        event.preventDefault(); // don't page down the window\n        (0, _event.stopPropagation)(event);\n        break;\n      default:\n        break;\n    }\n  }\n\n  function init() {\n    instance.addHook('afterDocumentKeyDown', onKeyDown);\n\n    eventManager.addEventListener(document.documentElement, 'keydown', function (event) {\n      if (!destroyed) {\n        instance.runHooks('afterDocumentKeyDown', event);\n      }\n    });\n\n    // Open editor when text composition is started (IME editor)\n    eventManager.addEventListener(document.documentElement, 'compositionstart', function (event) {\n      if (!destroyed && activeEditor && !activeEditor.isOpened() && instance.isListening()) {\n        _this.openEditor('', event);\n      }\n    });\n\n    function onDblClick(event, coords, elem) {\n      // may be TD or TH\n      if (elem.nodeName === 'TD') {\n        if (activeEditor) {\n          activeEditor.enableFullEditMode();\n        }\n        _this.openEditor(null, event);\n      }\n    }\n    instance.view.wt.update('onCellDblClick', onDblClick);\n  }\n\n  /**\n  * Lock the editor from being prepared and closed. Locking the editor prevents its closing and\n  * reinitialized after selecting the new cell. This feature is necessary for a mobile editor.\n  *\n  * @function lockEditor\n  * @memberof! Handsontable.EditorManager#\n   */\n  this.lockEditor = function () {\n    lock = true;\n  };\n\n  /**\n  * Unlock the editor from being prepared and closed. This method restores the original behavior of\n  * the editors where for every new selection its instances are closed.\n  *\n  * @function unlockEditor\n  * @memberof! Handsontable.EditorManager#\n   */\n  this.unlockEditor = function () {\n    lock = false;\n  };\n\n  /**\n   * Destroy current editor, if exists.\n   *\n   * @function destroyEditor\n   * @memberof! Handsontable.EditorManager#\n   * @param {Boolean} revertOriginal\n   */\n  this.destroyEditor = function (revertOriginal) {\n    if (!lock) {\n      this.closeEditor(revertOriginal);\n    }\n  };\n\n  /**\n   * Get active editor.\n   *\n   * @function getActiveEditor\n   * @memberof! Handsontable.EditorManager#\n   * @returns {*}\n   */\n  this.getActiveEditor = function () {\n    return activeEditor;\n  };\n\n  /**\n   * Prepare text input to be displayed at given grid cell.\n   *\n   * @function prepareEditor\n   * @memberof! Handsontable.EditorManager#\n   */\n  this.prepareEditor = function () {\n    if (lock) {\n      return;\n    }\n\n    if (activeEditor && activeEditor.isWaiting()) {\n      this.closeEditor(false, false, function (dataSaved) {\n        if (dataSaved) {\n          _this.prepareEditor();\n        }\n      });\n\n      return;\n    }\n\n    var row = instance.selection.selectedRange.current().highlight.row;\n    var col = instance.selection.selectedRange.current().highlight.col;\n    var prop = instance.colToProp(col);\n    var td = instance.getCell(row, col);\n    var originalValue = instance.getSourceDataAtCell(instance.runHooks('modifyRow', row), col);\n    var cellProperties = instance.getCellMeta(row, col);\n    var editorClass = instance.getCellEditor(cellProperties);\n\n    if (editorClass) {\n      activeEditor = (0, _editors.getEditorInstance)(editorClass, instance);\n      activeEditor.prepare(row, col, prop, td, originalValue, cellProperties);\n    } else {\n      activeEditor = void 0;\n    }\n  };\n\n  /**\n   * Check is editor is opened/showed.\n   *\n   * @function isEditorOpened\n   * @memberof! Handsontable.EditorManager#\n   * @returns {Boolean}\n   */\n  this.isEditorOpened = function () {\n    return activeEditor && activeEditor.isOpened();\n  };\n\n  /**\n   * Open editor with initial value.\n   *\n   * @function openEditor\n   * @memberof! Handsontable.EditorManager#\n   * @param {null|String} newInitialValue new value from which editor will start if handled property it's not the `null`.\n   * @param {DOMEvent} event\n   */\n  this.openEditor = function (newInitialValue, event) {\n    if (!activeEditor) {\n      return;\n    }\n\n    var readOnly = activeEditor.cellProperties.readOnly;\n\n    if (readOnly) {\n      // move the selection after opening the editor with ENTER key\n      if (event && event.keyCode === _unicode.KEY_CODES.ENTER) {\n        moveSelectionAfterEnter();\n      }\n    } else {\n      activeEditor.beginEditing(newInitialValue, event);\n    }\n  };\n\n  /**\n   * Close editor, finish editing cell.\n   *\n   * @function closeEditor\n   * @memberof! Handsontable.EditorManager#\n   * @param {Boolean} restoreOriginalValue\n   * @param {Boolean} [ctrlDown]\n   * @param {Function} [callback]\n   */\n  this.closeEditor = function (restoreOriginalValue, ctrlDown, callback) {\n    if (activeEditor) {\n      activeEditor.finishEditing(restoreOriginalValue, ctrlDown, callback);\n    } else if (callback) {\n      callback(false);\n    }\n  };\n\n  /**\n   * Close editor and save changes.\n   *\n   * @function closeEditorAndSaveChanges\n   * @memberof! Handsontable.EditorManager#\n   * @param {Boolean} ctrlDown\n   */\n  this.closeEditorAndSaveChanges = function (ctrlDown) {\n    return this.closeEditor(false, ctrlDown);\n  };\n\n  /**\n   * Close editor and restore original value.\n   *\n   * @function closeEditorAndRestoreOriginalValue\n   * @memberof! Handsontable.EditorManager#\n   * @param {Boolean} ctrlDown\n   */\n  this.closeEditorAndRestoreOriginalValue = function (ctrlDown) {\n    return this.closeEditor(true, ctrlDown);\n  };\n\n  /**\n   * Destroy the instance.\n   */\n  this.destroy = function () {\n    destroyed = true;\n  };\n\n  init();\n}\n\nvar instances = new WeakMap();\n\nEditorManager.getInstance = function (hotInstance, hotSettings, selection, datamap) {\n  var editorManager = instances.get(hotInstance);\n\n  if (!editorManager) {\n    editorManager = new EditorManager(hotInstance, hotSettings, selection, datamap);\n    instances.set(hotInstance, editorManager);\n  }\n\n  return editorManager;\n};\n\nexports.default = EditorManager;\n\n/***/ }),\n/* 268 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar _element = __webpack_require__(0);\n\nvar _eventManager = __webpack_require__(5);\n\nvar _eventManager2 = _interopRequireDefault(_eventManager);\n\nvar _event = __webpack_require__(13);\n\nvar _src = __webpack_require__(4);\n\nvar _src2 = _interopRequireDefault(_src);\n\nvar _mouseEventHandler = __webpack_require__(194);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Cross-platform helper to clear text selection.\n */\nvar clearTextSelection = function clearTextSelection() {\n  // http://stackoverflow.com/questions/3169786/clear-text-selection-with-javascript\n  if (window.getSelection) {\n    if (window.getSelection().empty) {\n      // Chrome\n      window.getSelection().empty();\n    } else if (window.getSelection().removeAllRanges) {\n      // Firefox\n      window.getSelection().removeAllRanges();\n    }\n  } else if (document.selection) {\n    // IE?\n    document.selection.empty();\n  }\n};\n\n/**\n * Handsontable TableView constructor\n * @param {Object} instance\n */\nfunction TableView(instance) {\n  var _this = this;\n\n  var that = this;\n\n  this.eventManager = new _eventManager2.default(instance);\n  this.instance = instance;\n  this.settings = instance.getSettings();\n  this.selectionMouseDown = false;\n\n  var originalStyle = instance.rootElement.getAttribute('style');\n\n  if (originalStyle) {\n    instance.rootElement.setAttribute('data-originalstyle', originalStyle); // needed to retrieve original style in jsFiddle link generator in HT examples. may be removed in future versions\n  }\n\n  (0, _element.addClass)(instance.rootElement, 'handsontable');\n\n  var table = document.createElement('TABLE');\n  (0, _element.addClass)(table, 'htCore');\n\n  if (instance.getSettings().tableClassName) {\n    (0, _element.addClass)(table, instance.getSettings().tableClassName);\n  }\n  this.THEAD = document.createElement('THEAD');\n  table.appendChild(this.THEAD);\n  this.TBODY = document.createElement('TBODY');\n  table.appendChild(this.TBODY);\n\n  instance.table = table;\n\n  instance.container.insertBefore(table, instance.container.firstChild);\n\n  this.eventManager.addEventListener(instance.rootElement, 'mousedown', function (event) {\n    _this.selectionMouseDown = true;\n\n    if (!that.isTextSelectionAllowed(event.target)) {\n      clearTextSelection();\n      event.preventDefault();\n      window.focus(); // make sure that window that contains HOT is active. Important when HOT is in iframe.\n    }\n  });\n  this.eventManager.addEventListener(instance.rootElement, 'mouseup', function () {\n    _this.selectionMouseDown = false;\n  });\n  this.eventManager.addEventListener(instance.rootElement, 'mousemove', function (event) {\n    if (_this.selectionMouseDown && !that.isTextSelectionAllowed(event.target)) {\n      // Clear selection only when fragmentSelection is enabled, otherwise clearing selection breakes the IME editor.\n      if (_this.settings.fragmentSelection) {\n        clearTextSelection();\n      }\n      event.preventDefault();\n    }\n  });\n\n  this.eventManager.addEventListener(document.documentElement, 'keyup', function (event) {\n    if (instance.selection.isInProgress() && !event.shiftKey) {\n      instance.selection.finish();\n    }\n  });\n\n  var isMouseDown = void 0;\n  this.isMouseDown = function () {\n    return isMouseDown;\n  };\n\n  this.eventManager.addEventListener(document.documentElement, 'mouseup', function (event) {\n    if (instance.selection.isInProgress() && (0, _event.isLeftClick)(event)) {\n      // is left mouse button\n      instance.selection.finish();\n    }\n\n    isMouseDown = false;\n\n    if ((0, _element.isOutsideInput)(document.activeElement) || !instance.selection.isSelected() && !(0, _event.isRightClick)(event)) {\n      instance.unlisten();\n    }\n  });\n\n  this.eventManager.addEventListener(document.documentElement, 'contextmenu', function (event) {\n    if (instance.selection.isInProgress() && (0, _event.isRightClick)(event)) {\n      instance.selection.finish();\n\n      isMouseDown = false;\n    }\n  });\n\n  this.eventManager.addEventListener(document.documentElement, 'touchend', function () {\n    if (instance.selection.isInProgress()) {\n      instance.selection.finish();\n    }\n  });\n\n  this.eventManager.addEventListener(document.documentElement, 'mousedown', function (event) {\n    var originalTarget = event.target;\n    var eventX = event.x || event.clientX;\n    var eventY = event.y || event.clientY;\n    var next = event.target;\n\n    if (isMouseDown || !instance.rootElement) {\n      return; // it must have been started in a cell\n    }\n\n    // immediate click on \"holder\" means click on the right side of vertical scrollbar\n    if (next === instance.view.wt.wtTable.holder) {\n      var scrollbarWidth = (0, _element.getScrollbarWidth)();\n\n      if (document.elementFromPoint(eventX + scrollbarWidth, eventY) !== instance.view.wt.wtTable.holder || document.elementFromPoint(eventX, eventY + scrollbarWidth) !== instance.view.wt.wtTable.holder) {\n        return;\n      }\n    } else {\n      while (next !== document.documentElement) {\n        if (next === null) {\n          if (event.isTargetWebComponent) {\n            break;\n          }\n          // click on something that was a row but now is detached (possibly because your click triggered a rerender)\n          return;\n        }\n        if (next === instance.rootElement) {\n          // click inside container\n          return;\n        }\n        next = next.parentNode;\n      }\n    }\n\n    // function did not return until here, we have an outside click!\n\n    var outsideClickDeselects = typeof that.settings.outsideClickDeselects === 'function' ? that.settings.outsideClickDeselects(originalTarget) : that.settings.outsideClickDeselects;\n\n    if (outsideClickDeselects) {\n      instance.deselectCell();\n    } else {\n      instance.destroyEditor(false, false);\n    }\n  });\n\n  this.eventManager.addEventListener(table, 'selectstart', function (event) {\n    if (that.settings.fragmentSelection || (0, _element.isInput)(event.target)) {\n      return;\n    }\n    // https://github.com/handsontable/handsontable/issues/160\n    // Prevent text from being selected when performing drag down.\n    event.preventDefault();\n  });\n\n  var walkontableConfig = {\n    debug: function debug() {\n      return that.settings.debug;\n    },\n    externalRowCalculator: this.instance.getPlugin('autoRowSize') && this.instance.getPlugin('autoRowSize').isEnabled(),\n    table: table,\n    preventOverflow: function preventOverflow() {\n      return _this.settings.preventOverflow;\n    },\n    stretchH: function stretchH() {\n      return that.settings.stretchH;\n    },\n    data: instance.getDataAtCell,\n    totalRows: function totalRows() {\n      return instance.countRows();\n    },\n    totalColumns: function totalColumns() {\n      return instance.countCols();\n    },\n    fixedColumnsLeft: function fixedColumnsLeft() {\n      return that.settings.fixedColumnsLeft;\n    },\n    fixedRowsTop: function fixedRowsTop() {\n      return that.settings.fixedRowsTop;\n    },\n    fixedRowsBottom: function fixedRowsBottom() {\n      return that.settings.fixedRowsBottom;\n    },\n    minSpareRows: function minSpareRows() {\n      return that.settings.minSpareRows;\n    },\n    renderAllRows: that.settings.renderAllRows,\n    rowHeaders: function rowHeaders() {\n      var headerRenderers = [];\n\n      if (instance.hasRowHeaders()) {\n        headerRenderers.push(function (row, TH) {\n          return that.appendRowHeader(row, TH);\n        });\n      }\n\n      instance.runHooks('afterGetRowHeaderRenderers', headerRenderers);\n\n      return headerRenderers;\n    },\n    columnHeaders: function columnHeaders() {\n      var headerRenderers = [];\n\n      if (instance.hasColHeaders()) {\n        headerRenderers.push(function (column, TH) {\n          that.appendColHeader(column, TH);\n        });\n      }\n\n      instance.runHooks('afterGetColumnHeaderRenderers', headerRenderers);\n\n      return headerRenderers;\n    },\n    columnWidth: instance.getColWidth,\n    rowHeight: instance.getRowHeight,\n    cellRenderer: function cellRenderer(row, col, TD) {\n      var cellProperties = that.instance.getCellMeta(row, col);\n      var prop = that.instance.colToProp(col);\n      var value = that.instance.getDataAtRowProp(row, prop);\n\n      if (that.instance.hasHook('beforeValueRender')) {\n        value = that.instance.runHooks('beforeValueRender', value, cellProperties);\n      }\n\n      that.instance.runHooks('beforeRenderer', TD, row, col, prop, value, cellProperties);\n      that.instance.getCellRenderer(cellProperties)(that.instance, TD, row, col, prop, value, cellProperties);\n      that.instance.runHooks('afterRenderer', TD, row, col, prop, value, cellProperties);\n    },\n\n    selections: that.instance.selection.highlight,\n    hideBorderOnMouseDownOver: function hideBorderOnMouseDownOver() {\n      return that.settings.fragmentSelection;\n    },\n    onCellMouseDown: function onCellMouseDown(event, coords, TD, wt) {\n      var blockCalculations = {\n        row: false,\n        column: false,\n        cell: false\n      };\n\n      instance.listen();\n\n      that.activeWt = wt;\n      isMouseDown = true;\n\n      instance.runHooks('beforeOnCellMouseDown', event, coords, TD, blockCalculations);\n\n      if ((0, _event.isImmediatePropagationStopped)(event)) {\n        return;\n      }\n\n      (0, _mouseEventHandler.handleMouseEvent)(event, {\n        coords: coords,\n        selection: instance.selection,\n        controller: blockCalculations\n      });\n\n      instance.runHooks('afterOnCellMouseDown', event, coords, TD);\n      that.activeWt = that.wt;\n    },\n    onCellContextMenu: function onCellContextMenu(event, coords, TD, wt) {\n      that.activeWt = wt;\n      isMouseDown = false;\n\n      if (instance.selection.isInProgress()) {\n        instance.selection.finish();\n      }\n\n      instance.runHooks('beforeOnCellContextMenu', event, coords, TD);\n\n      if ((0, _event.isImmediatePropagationStopped)(event)) {\n        return;\n      }\n\n      instance.runHooks('afterOnCellContextMenu', event, coords, TD);\n\n      that.activeWt = that.wt;\n    },\n    onCellMouseOut: function onCellMouseOut(event, coords, TD, wt) {\n      that.activeWt = wt;\n      instance.runHooks('beforeOnCellMouseOut', event, coords, TD);\n\n      if ((0, _event.isImmediatePropagationStopped)(event)) {\n        return;\n      }\n\n      instance.runHooks('afterOnCellMouseOut', event, coords, TD);\n      that.activeWt = that.wt;\n    },\n    onCellMouseOver: function onCellMouseOver(event, coords, TD, wt) {\n      var blockCalculations = {\n        row: false,\n        column: false,\n        cell: false\n      };\n\n      that.activeWt = wt;\n\n      instance.runHooks('beforeOnCellMouseOver', event, coords, TD, blockCalculations);\n\n      if ((0, _event.isImmediatePropagationStopped)(event)) {\n        return;\n      }\n\n      if (isMouseDown) {\n        (0, _mouseEventHandler.handleMouseEvent)(event, {\n          coords: coords,\n          selection: instance.selection,\n          controller: blockCalculations\n        });\n      }\n\n      instance.runHooks('afterOnCellMouseOver', event, coords, TD);\n      that.activeWt = that.wt;\n    },\n    onCellMouseUp: function onCellMouseUp(event, coords, TD, wt) {\n      that.activeWt = wt;\n      instance.runHooks('beforeOnCellMouseUp', event, coords, TD);\n\n      instance.runHooks('afterOnCellMouseUp', event, coords, TD);\n      that.activeWt = that.wt;\n    },\n    onCellCornerMouseDown: function onCellCornerMouseDown(event) {\n      event.preventDefault();\n      instance.runHooks('afterOnCellCornerMouseDown', event);\n    },\n    onCellCornerDblClick: function onCellCornerDblClick(event) {\n      event.preventDefault();\n      instance.runHooks('afterOnCellCornerDblClick', event);\n    },\n    beforeDraw: function beforeDraw(force, skipRender) {\n      that.beforeRender(force, skipRender);\n    },\n    onDraw: function onDraw(force) {\n      that.onDraw(force);\n    },\n    onScrollVertically: function onScrollVertically() {\n      instance.runHooks('afterScrollVertically');\n    },\n    onScrollHorizontally: function onScrollHorizontally() {\n      instance.runHooks('afterScrollHorizontally');\n    },\n\n    onBeforeRemoveCellClassNames: function onBeforeRemoveCellClassNames() {\n      return instance.runHooks('beforeRemoveCellClassNames');\n    },\n    onAfterDrawSelection: function onAfterDrawSelection(currentRow, currentColumn, cornersOfSelection, layerLevel) {\n      return instance.runHooks('afterDrawSelection', currentRow, currentColumn, cornersOfSelection, layerLevel);\n    },\n    onBeforeDrawBorders: function onBeforeDrawBorders(corners, borderClassName) {\n      instance.runHooks('beforeDrawBorders', corners, borderClassName);\n    },\n    onBeforeTouchScroll: function onBeforeTouchScroll() {\n      instance.runHooks('beforeTouchScroll');\n    },\n    onAfterMomentumScroll: function onAfterMomentumScroll() {\n      instance.runHooks('afterMomentumScroll');\n    },\n\n    onBeforeStretchingColumnWidth: function onBeforeStretchingColumnWidth(stretchedWidth, column) {\n      return instance.runHooks('beforeStretchingColumnWidth', stretchedWidth, column);\n    },\n    onModifyRowHeaderWidth: function onModifyRowHeaderWidth(rowHeaderWidth) {\n      return instance.runHooks('modifyRowHeaderWidth', rowHeaderWidth);\n    },\n    onModifyGetCellCoords: function onModifyGetCellCoords(row, column, topmost) {\n      return instance.runHooks('modifyGetCellCoords', row, column, topmost);\n    },\n    viewportRowCalculatorOverride: function viewportRowCalculatorOverride(calc) {\n      var rows = instance.countRows();\n      var viewportOffset = that.settings.viewportRowRenderingOffset;\n\n      if (viewportOffset === 'auto' && that.settings.fixedRowsTop) {\n        viewportOffset = 10;\n      }\n      if (typeof viewportOffset === 'number') {\n        calc.startRow = Math.max(calc.startRow - viewportOffset, 0);\n        calc.endRow = Math.min(calc.endRow + viewportOffset, rows - 1);\n      }\n      if (viewportOffset === 'auto') {\n        var center = calc.startRow + calc.endRow - calc.startRow;\n        var offset = Math.ceil(center / rows * 12);\n\n        calc.startRow = Math.max(calc.startRow - offset, 0);\n        calc.endRow = Math.min(calc.endRow + offset, rows - 1);\n      }\n      instance.runHooks('afterViewportRowCalculatorOverride', calc);\n    },\n    viewportColumnCalculatorOverride: function viewportColumnCalculatorOverride(calc) {\n      var cols = instance.countCols();\n      var viewportOffset = that.settings.viewportColumnRenderingOffset;\n\n      if (viewportOffset === 'auto' && that.settings.fixedColumnsLeft) {\n        viewportOffset = 10;\n      }\n      if (typeof viewportOffset === 'number') {\n        calc.startColumn = Math.max(calc.startColumn - viewportOffset, 0);\n        calc.endColumn = Math.min(calc.endColumn + viewportOffset, cols - 1);\n      }\n      if (viewportOffset === 'auto') {\n        var center = calc.startColumn + calc.endColumn - calc.startColumn;\n        var offset = Math.ceil(center / cols * 12);\n\n        calc.startRow = Math.max(calc.startColumn - offset, 0);\n        calc.endColumn = Math.min(calc.endColumn + offset, cols - 1);\n      }\n      instance.runHooks('afterViewportColumnCalculatorOverride', calc);\n    },\n\n    rowHeaderWidth: function rowHeaderWidth() {\n      return that.settings.rowHeaderWidth;\n    },\n    columnHeaderHeight: function columnHeaderHeight() {\n      var columnHeaderHeight = instance.runHooks('modifyColumnHeaderHeight');\n      return that.settings.columnHeaderHeight || columnHeaderHeight;\n    }\n  };\n\n  instance.runHooks('beforeInitWalkontable', walkontableConfig);\n\n  this.wt = new _src2.default(walkontableConfig);\n  this.activeWt = this.wt;\n\n  this.eventManager.addEventListener(that.wt.wtTable.spreader, 'mousedown', function (event) {\n    // right mouse button exactly on spreader means right click on the right hand side of vertical scrollbar\n    if (event.target === that.wt.wtTable.spreader && event.which === 3) {\n      (0, _event.stopPropagation)(event);\n    }\n  });\n\n  this.eventManager.addEventListener(that.wt.wtTable.spreader, 'contextmenu', function (event) {\n    // right mouse button exactly on spreader means right click on the right hand side of vertical scrollbar\n    if (event.target === that.wt.wtTable.spreader && event.which === 3) {\n      (0, _event.stopPropagation)(event);\n    }\n  });\n\n  this.eventManager.addEventListener(document.documentElement, 'click', function () {\n    if (that.settings.observeDOMVisibility) {\n      if (that.wt.drawInterrupted) {\n        that.instance.forceFullRender = true;\n        that.render();\n      }\n    }\n  });\n}\n\nTableView.prototype.isTextSelectionAllowed = function (el) {\n  if ((0, _element.isInput)(el)) {\n    return true;\n  }\n  var isChildOfTableBody = (0, _element.isChildOf)(el, this.instance.view.wt.wtTable.spreader);\n\n  if (this.settings.fragmentSelection === true && isChildOfTableBody) {\n    return true;\n  }\n  if (this.settings.fragmentSelection === 'cell' && this.isSelectedOnlyCell() && isChildOfTableBody) {\n    return true;\n  }\n  if (!this.settings.fragmentSelection && this.isCellEdited() && this.isSelectedOnlyCell()) {\n    return true;\n  }\n\n  return false;\n};\n\n/**\n * Check if selected only one cell.\n *\n * @returns {Boolean}\n */\nTableView.prototype.isSelectedOnlyCell = function () {\n  var _ref = this.instance.getSelectedLast() || [],\n      _ref2 = _slicedToArray(_ref, 4),\n      row = _ref2[0],\n      col = _ref2[1],\n      rowEnd = _ref2[2],\n      colEnd = _ref2[3];\n\n  return row !== void 0 && row === rowEnd && col === colEnd;\n};\n\nTableView.prototype.isCellEdited = function () {\n  var activeEditor = this.instance.getActiveEditor();\n\n  return activeEditor && activeEditor.isOpened();\n};\n\nTableView.prototype.beforeRender = function (force, skipRender) {\n  if (force) {\n    // this.instance.forceFullRender = did Handsontable request full render?\n    this.instance.runHooks('beforeRender', this.instance.forceFullRender, skipRender);\n  }\n};\n\nTableView.prototype.onDraw = function (force) {\n  if (force) {\n    // this.instance.forceFullRender = did Handsontable request full render?\n    this.instance.runHooks('afterRender', this.instance.forceFullRender);\n  }\n};\n\nTableView.prototype.render = function () {\n  this.wt.draw(!this.instance.forceFullRender);\n  this.instance.forceFullRender = false;\n  this.instance.renderCall = false;\n};\n\n/**\n * Returns td object given coordinates\n *\n * @param {CellCoords} coords\n * @param {Boolean} topmost\n */\nTableView.prototype.getCellAtCoords = function (coords, topmost) {\n  var td = this.wt.getCell(coords, topmost);\n\n  if (td < 0) {\n    // there was an exit code (cell is out of bounds)\n    return null;\n  }\n\n  return td;\n};\n\n/**\n * Scroll viewport to a cell.\n *\n * @param {CellCoords} coords\n * @param {Boolean} [snapToTop]\n * @param {Boolean} [snapToRight]\n * @param {Boolean} [snapToBottom]\n * @param {Boolean} [snapToLeft]\n * @returns {Boolean}\n */\nTableView.prototype.scrollViewport = function (coords, snapToTop, snapToRight, snapToBottom, snapToLeft) {\n  return this.wt.scrollViewport(coords, snapToTop, snapToRight, snapToBottom, snapToLeft);\n};\n\n/**\n * Scroll viewport to a column.\n *\n * @param {Number} column Visual column index.\n * @param {Boolean} [snapToLeft]\n * @param {Boolean} [snapToRight]\n * @returns {Boolean}\n */\nTableView.prototype.scrollViewportHorizontally = function (column, snapToRight, snapToLeft) {\n  return this.wt.scrollViewportHorizontally(column, snapToRight, snapToLeft);\n};\n\n/**\n * Scroll viewport to a row.\n *\n * @param {Number} row Visual row index.\n * @param {Boolean} [snapToTop]\n * @param {Boolean} [snapToBottom]\n * @returns {Boolean}\n */\nTableView.prototype.scrollViewportVertically = function (row, snapToTop, snapToBottom) {\n  return this.wt.scrollViewportVertically(row, snapToTop, snapToBottom);\n};\n\n/**\n * Append row header to a TH element\n * @param row\n * @param TH\n */\nTableView.prototype.appendRowHeader = function (row, TH) {\n  if (TH.firstChild) {\n    var container = TH.firstChild;\n\n    if (!(0, _element.hasClass)(container, 'relative')) {\n      (0, _element.empty)(TH);\n      this.appendRowHeader(row, TH);\n\n      return;\n    }\n    this.updateCellHeader(container.querySelector('.rowHeader'), row, this.instance.getRowHeader);\n  } else {\n    var div = document.createElement('div');\n    var span = document.createElement('span');\n\n    div.className = 'relative';\n    span.className = 'rowHeader';\n    this.updateCellHeader(span, row, this.instance.getRowHeader);\n\n    div.appendChild(span);\n    TH.appendChild(div);\n  }\n\n  this.instance.runHooks('afterGetRowHeader', row, TH);\n};\n\n/**\n * Append column header to a TH element\n * @param col\n * @param TH\n */\nTableView.prototype.appendColHeader = function (col, TH) {\n  if (TH.firstChild) {\n    var container = TH.firstChild;\n\n    if ((0, _element.hasClass)(container, 'relative')) {\n      this.updateCellHeader(container.querySelector('.colHeader'), col, this.instance.getColHeader);\n    } else {\n      (0, _element.empty)(TH);\n      this.appendColHeader(col, TH);\n    }\n  } else {\n    var div = document.createElement('div');\n    var span = document.createElement('span');\n\n    div.className = 'relative';\n    span.className = 'colHeader';\n    this.updateCellHeader(span, col, this.instance.getColHeader);\n\n    div.appendChild(span);\n    TH.appendChild(div);\n  }\n\n  this.instance.runHooks('afterGetColHeader', col, TH);\n};\n\n/**\n * Update header cell content\n *\n * @since 0.15.0-beta4\n * @param {HTMLElement} element Element to update\n * @param {Number} index Row index or column index\n * @param {Function} content Function which should be returns content for this cell\n */\nTableView.prototype.updateCellHeader = function (element, index, content) {\n  var renderedIndex = index;\n  var parentOverlay = this.wt.wtOverlays.getParentOverlay(element) || this.wt;\n\n  // prevent wrong calculations from SampleGenerator\n  if (element.parentNode) {\n    if ((0, _element.hasClass)(element, 'colHeader')) {\n      renderedIndex = parentOverlay.wtTable.columnFilter.sourceToRendered(index);\n    } else if ((0, _element.hasClass)(element, 'rowHeader')) {\n      renderedIndex = parentOverlay.wtTable.rowFilter.sourceToRendered(index);\n    }\n  }\n\n  if (renderedIndex > -1) {\n    (0, _element.fastInnerHTML)(element, content(index));\n  } else {\n    // workaround for https://github.com/handsontable/handsontable/issues/1946\n    (0, _element.fastInnerText)(element, String.fromCharCode(160));\n    (0, _element.addClass)(element, 'cornerHeader');\n  }\n};\n\n/**\n * Given a element's left position relative to the viewport, returns maximum element width until the right\n * edge of the viewport (before scrollbar)\n *\n * @param {Number} leftOffset\n * @return {Number}\n */\nTableView.prototype.maximumVisibleElementWidth = function (leftOffset) {\n  var workspaceWidth = this.wt.wtViewport.getWorkspaceWidth();\n  var maxWidth = workspaceWidth - leftOffset;\n  return maxWidth > 0 ? maxWidth : 0;\n};\n\n/**\n * Given a element's top position relative to the viewport, returns maximum element height until the bottom\n * edge of the viewport (before scrollbar)\n *\n * @param {Number} topOffset\n * @return {Number}\n */\nTableView.prototype.maximumVisibleElementHeight = function (topOffset) {\n  var workspaceHeight = this.wt.wtViewport.getWorkspaceHeight();\n  var maxHeight = workspaceHeight - topOffset;\n  return maxHeight > 0 ? maxHeight : 0;\n};\n\nTableView.prototype.mainViewIsActive = function () {\n  return this.wt === this.activeWt;\n};\n\nTableView.prototype.destroy = function () {\n  this.wt.destroy();\n  this.eventManager.destroy();\n};\n\nexports.default = TableView;\n\n/***/ }),\n/* 269 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _object = __webpack_require__(1);\n\nvar _array = __webpack_require__(2);\n\nvar _number = __webpack_require__(6);\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * @class DataSource\n * @private\n */\nvar DataSource = function () {\n  function DataSource(hotInstance) {\n    var dataSource = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n\n    _classCallCheck(this, DataSource);\n\n    /**\n     * Instance of Handsontable.\n     *\n     * @type {Handsontable}\n     */\n    this.hot = hotInstance;\n    /**\n     * Data source\n     *\n     * @type {Array}\n     */\n    this.data = dataSource;\n    /**\n     * Type of data source.\n     *\n     * @type {String}\n     * @default 'array'\n     */\n    this.dataType = 'array';\n\n    this.colToProp = function () {};\n    this.propToCol = function () {};\n  }\n\n  /**\n   * Get all data.\n   *\n   * @param {Boolean} [toArray=false] If `true` return source data as an array of arrays even when source data was provided\n   *                                  in another format.\n   * @returns {Array}\n   */\n\n\n  _createClass(DataSource, [{\n    key: 'getData',\n    value: function getData() {\n      var toArray = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n      var result = this.data;\n\n      if (toArray) {\n        result = this.getByRange({ row: 0, col: 0 }, { row: Math.max(this.countRows() - 1, 0), col: Math.max(this.countColumns() - 1, 0) }, true);\n      }\n\n      return result;\n    }\n\n    /**\n     * Set new data source.\n     *\n     * @param data {Array}\n     */\n\n  }, {\n    key: 'setData',\n    value: function setData(data) {\n      this.data = data;\n    }\n\n    /**\n     * Returns array of column values from the data source. `column` is the index of the row in the data source.\n     *\n     * @param {Number} column Visual column index.\n     * @returns {Array}\n     */\n\n  }, {\n    key: 'getAtColumn',\n    value: function getAtColumn(column) {\n      var _this = this;\n\n      var result = [];\n\n      (0, _array.arrayEach)(this.data, function (row) {\n        var property = _this.colToProp(column);\n        var value = void 0;\n\n        if (typeof property === 'string') {\n          value = (0, _object.getProperty)(row, property);\n        } else if (typeof property === 'function') {\n          value = property(row);\n        } else {\n          value = row[property];\n        }\n\n        result.push(value);\n      });\n\n      return result;\n    }\n\n    /**\n     * Returns a single row of the data (array or object, depending on what you have). `row` is the index of the row in the data source.\n     *\n     * @param {Number} row Physical row index.\n     * @returns {Array|Object}\n     */\n\n  }, {\n    key: 'getAtRow',\n    value: function getAtRow(row) {\n      return this.data[row];\n    }\n\n    /**\n     * Returns a single value from the data.\n     *\n     * @param {Number} row Physical row index.\n     * @param {Number} column Visual column index.\n     * @returns {*}\n     */\n\n  }, {\n    key: 'getAtCell',\n    value: function getAtCell(row, column) {\n      var result = null;\n\n      var modifyRowData = this.hot.runHooks('modifyRowData', row);\n\n      var dataRow = isNaN(modifyRowData) ? modifyRowData : this.data[row];\n\n      if (dataRow) {\n        var prop = this.colToProp(column);\n\n        if (typeof prop === 'string') {\n          result = (0, _object.getProperty)(dataRow, prop);\n        } else if (typeof prop === 'function') {\n          result = prop(this.data.slice(row, row + 1)[0]);\n        } else {\n          result = dataRow[prop];\n        }\n      }\n\n      return result;\n    }\n\n    /**\n     * Returns source data by passed range.\n     *\n     * @param {Object} start Object with physical `row` and `col` keys (or visual column index, if data type is an array of objects).\n     * @param {Object} end Object with physical `row` and `col` keys (or visual column index, if data type is an array of objects).\n     * @param {Boolean} [toArray=false] If `true` return source data as an array of arrays even when source data was provided\n     *                                  in another format.\n     * @returns {Array}\n     */\n\n  }, {\n    key: 'getByRange',\n    value: function getByRange(start, end) {\n      var _this2 = this;\n\n      var toArray = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n      var startRow = Math.min(start.row, end.row);\n      var startCol = Math.min(start.col, end.col);\n      var endRow = Math.max(start.row, end.row);\n      var endCol = Math.max(start.col, end.col);\n      var result = [];\n\n      (0, _number.rangeEach)(startRow, endRow, function (currentRow) {\n        var row = _this2.getAtRow(currentRow);\n        var newRow = void 0;\n\n        if (_this2.dataType === 'array') {\n          newRow = row.slice(startCol, endCol + 1);\n        } else if (_this2.dataType === 'object') {\n          newRow = toArray ? [] : {};\n\n          (0, _number.rangeEach)(startCol, endCol, function (column) {\n            var prop = _this2.colToProp(column);\n\n            if (toArray) {\n              newRow.push(row[prop]);\n            } else {\n              newRow[prop] = row[prop];\n            }\n          });\n        }\n\n        result.push(newRow);\n      });\n\n      return result;\n    }\n\n    /**\n     * Count number of rows.\n     *\n     * @returns {Number}\n     */\n\n  }, {\n    key: 'countRows',\n    value: function countRows() {\n      return Array.isArray(this.data) ? this.data.length : 0;\n    }\n\n    /**\n     * Count number of columns.\n     *\n     * @returns {Number}\n     */\n\n  }, {\n    key: 'countColumns',\n    value: function countColumns() {\n      var result = 0;\n\n      if (Array.isArray(this.data)) {\n        if (this.dataType === 'array') {\n          result = this.data[0].length;\n        } else if (this.dataType === 'object') {\n          result = Object.keys(this.data[0]).length;\n        }\n      }\n\n      return result;\n    }\n\n    /**\n     * Destroy instance.\n     */\n\n  }, {\n    key: 'destroy',\n    value: function destroy() {\n      this.data = null;\n      this.hot = null;\n    }\n  }]);\n\n  return DataSource;\n}();\n\nexports.default = DataSource;\n\n/***/ }),\n/* 270 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _dictionary;\n\nvar _constants = __webpack_require__(7);\n\nvar C = _interopRequireWildcard(_constants);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\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                                                                                                                                                                                                                   * @preserve\n                                                                                                                                                                                                                   * Authors: Handsoncode\n                                                                                                                                                                                                                   * Last updated: Nov 15, 2017\n                                                                                                                                                                                                                   *\n                                                                                                                                                                                                                   * Description: Definition file for English - United States language-country.\n                                                                                                                                                                                                                   */\n\n\nvar dictionary = (_dictionary = {\n  languageCode: 'en-US'\n}, _defineProperty(_dictionary, C.CONTEXTMENU_ITEMS_ROW_ABOVE, 'Insert row above'), _defineProperty(_dictionary, C.CONTEXTMENU_ITEMS_ROW_BELOW, 'Insert row below'), _defineProperty(_dictionary, C.CONTEXTMENU_ITEMS_INSERT_LEFT, 'Insert column left'), _defineProperty(_dictionary, C.CONTEXTMENU_ITEMS_INSERT_RIGHT, 'Insert column right'), _defineProperty(_dictionary, C.CONTEXTMENU_ITEMS_REMOVE_ROW, ['Remove row', 'Remove rows']), _defineProperty(_dictionary, C.CONTEXTMENU_ITEMS_REMOVE_COLUMN, ['Remove column', 'Remove columns']), _defineProperty(_dictionary, C.CONTEXTMENU_ITEMS_UNDO, 'Undo'), _defineProperty(_dictionary, C.CONTEXTMENU_ITEMS_REDO, 'Redo'), _defineProperty(_dictionary, C.CONTEXTMENU_ITEMS_READ_ONLY, 'Read only'), _defineProperty(_dictionary, C.CONTEXTMENU_ITEMS_CLEAR_COLUMN, 'Clear column'), _defineProperty(_dictionary, C.CONTEXTMENU_ITEMS_ALIGNMENT, 'Alignment'), _defineProperty(_dictionary, C.CONTEXTMENU_ITEMS_ALIGNMENT_LEFT, 'Left'), _defineProperty(_dictionary, C.CONTEXTMENU_ITEMS_ALIGNMENT_CENTER, 'Center'), _defineProperty(_dictionary, C.CONTEXTMENU_ITEMS_ALIGNMENT_RIGHT, 'Right'), _defineProperty(_dictionary, C.CONTEXTMENU_ITEMS_ALIGNMENT_JUSTIFY, 'Justify'), _defineProperty(_dictionary, C.CONTEXTMENU_ITEMS_ALIGNMENT_TOP, 'Top'), _defineProperty(_dictionary, C.CONTEXTMENU_ITEMS_ALIGNMENT_MIDDLE, 'Middle'), _defineProperty(_dictionary, C.CONTEXTMENU_ITEMS_ALIGNMENT_BOTTOM, 'Bottom'), _defineProperty(_dictionary, C.CONTEXTMENU_ITEMS_FREEZE_COLUMN, 'Freeze column'), _defineProperty(_dictionary, C.CONTEXTMENU_ITEMS_UNFREEZE_COLUMN, 'Unfreeze column'), _defineProperty(_dictionary, C.CONTEXTMENU_ITEMS_BORDERS, 'Borders'), _defineProperty(_dictionary, C.CONTEXTMENU_ITEMS_BORDERS_TOP, 'Top'), _defineProperty(_dictionary, C.CONTEXTMENU_ITEMS_BORDERS_RIGHT, 'Right'), _defineProperty(_dictionary, C.CONTEXTMENU_ITEMS_BORDERS_BOTTOM, 'Bottom'), _defineProperty(_dictionary, C.CONTEXTMENU_ITEMS_BORDERS_LEFT, 'Left'), _defineProperty(_dictionary, C.CONTEXTMENU_ITEMS_REMOVE_BORDERS, 'Remove border(s)'), _defineProperty(_dictionary, C.CONTEXTMENU_ITEMS_ADD_COMMENT, 'Add comment'), _defineProperty(_dictionary, C.CONTEXTMENU_ITEMS_EDIT_COMMENT, 'Edit comment'), _defineProperty(_dictionary, C.CONTEXTMENU_ITEMS_REMOVE_COMMENT, 'Delete comment'), _defineProperty(_dictionary, C.CONTEXTMENU_ITEMS_READ_ONLY_COMMENT, 'Read-only comment'), _defineProperty(_dictionary, C.CONTEXTMENU_ITEMS_MERGE_CELLS, 'Merge cells'), _defineProperty(_dictionary, C.CONTEXTMENU_ITEMS_UNMERGE_CELLS, 'Unmerge cells'), _defineProperty(_dictionary, C.CONTEXTMENU_ITEMS_COPY, 'Copy'), _defineProperty(_dictionary, C.CONTEXTMENU_ITEMS_CUT, 'Cut'), _defineProperty(_dictionary, C.CONTEXTMENU_ITEMS_NESTED_ROWS_INSERT_CHILD, 'Insert child row'), _defineProperty(_dictionary, C.CONTEXTMENU_ITEMS_NESTED_ROWS_DETACH_CHILD, 'Detach from parent'), _defineProperty(_dictionary, C.CONTEXTMENU_ITEMS_HIDE_COLUMN, ['Hide column', 'Hide columns']), _defineProperty(_dictionary, C.CONTEXTMENU_ITEMS_SHOW_COLUMN, ['Show column', 'Show columns']), _defineProperty(_dictionary, C.CONTEXTMENU_ITEMS_HIDE_ROW, ['Hide row', 'Hide rows']), _defineProperty(_dictionary, C.CONTEXTMENU_ITEMS_SHOW_ROW, ['Show row', 'Show rows']), _defineProperty(_dictionary, C.FILTERS_CONDITIONS_NONE, 'None'), _defineProperty(_dictionary, C.FILTERS_CONDITIONS_EMPTY, 'Is empty'), _defineProperty(_dictionary, C.FILTERS_CONDITIONS_NOT_EMPTY, 'Is not empty'), _defineProperty(_dictionary, C.FILTERS_CONDITIONS_EQUAL, 'Is equal to'), _defineProperty(_dictionary, C.FILTERS_CONDITIONS_NOT_EQUAL, 'Is not equal to'), _defineProperty(_dictionary, C.FILTERS_CONDITIONS_BEGINS_WITH, 'Begins with'), _defineProperty(_dictionary, C.FILTERS_CONDITIONS_ENDS_WITH, 'Ends with'), _defineProperty(_dictionary, C.FILTERS_CONDITIONS_CONTAINS, 'Contains'), _defineProperty(_dictionary, C.FILTERS_CONDITIONS_NOT_CONTAIN, 'Does not contain'), _defineProperty(_dictionary, C.FILTERS_CONDITIONS_GREATER_THAN, 'Greater than'), _defineProperty(_dictionary, C.FILTERS_CONDITIONS_GREATER_THAN_OR_EQUAL, 'Greater than or equal to'), _defineProperty(_dictionary, C.FILTERS_CONDITIONS_LESS_THAN, 'Less than'), _defineProperty(_dictionary, C.FILTERS_CONDITIONS_LESS_THAN_OR_EQUAL, 'Less than or equal to'), _defineProperty(_dictionary, C.FILTERS_CONDITIONS_BETWEEN, 'Is between'), _defineProperty(_dictionary, C.FILTERS_CONDITIONS_NOT_BETWEEN, 'Is not between'), _defineProperty(_dictionary, C.FILTERS_CONDITIONS_AFTER, 'After'), _defineProperty(_dictionary, C.FILTERS_CONDITIONS_BEFORE, 'Before'), _defineProperty(_dictionary, C.FILTERS_CONDITIONS_TODAY, 'Today'), _defineProperty(_dictionary, C.FILTERS_CONDITIONS_TOMORROW, 'Tomorrow'), _defineProperty(_dictionary, C.FILTERS_CONDITIONS_YESTERDAY, 'Yesterday'), _defineProperty(_dictionary, C.FILTERS_VALUES_BLANK_CELLS, 'Blank cells'), _defineProperty(_dictionary, C.FILTERS_DIVS_FILTER_BY_CONDITION, 'Filter by condition'), _defineProperty(_dictionary, C.FILTERS_DIVS_FILTER_BY_VALUE, 'Filter by value'), _defineProperty(_dictionary, C.FILTERS_LABELS_CONJUNCTION, 'And'), _defineProperty(_dictionary, C.FILTERS_LABELS_DISJUNCTION, 'Or'), _defineProperty(_dictionary, C.FILTERS_BUTTONS_SELECT_ALL, 'Select all'), _defineProperty(_dictionary, C.FILTERS_BUTTONS_CLEAR, 'Clear'), _defineProperty(_dictionary, C.FILTERS_BUTTONS_OK, 'OK'), _defineProperty(_dictionary, C.FILTERS_BUTTONS_CANCEL, 'Cancel'), _defineProperty(_dictionary, C.FILTERS_BUTTONS_PLACEHOLDER_SEARCH, 'Search'), _defineProperty(_dictionary, C.FILTERS_BUTTONS_PLACEHOLDER_VALUE, 'Value'), _defineProperty(_dictionary, C.FILTERS_BUTTONS_PLACEHOLDER_SECOND_VALUE, 'Second value'), _dictionary);\n\nexports.default = dictionary;\n\n/***/ }),\n/* 271 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports.getPhraseFormatters = exports.registerPhraseFormatter = undefined;\nexports.register = register;\nexports.getAll = getAll;\n\nvar _staticRegister2 = __webpack_require__(38);\n\nvar _staticRegister3 = _interopRequireDefault(_staticRegister2);\n\nvar _pluralize = __webpack_require__(272);\n\nvar _pluralize2 = _interopRequireDefault(_pluralize);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar _staticRegister = (0, _staticRegister3.default)('phraseFormatters'),\n    registerGloballyPhraseFormatter = _staticRegister.register,\n    getGlobalPhraseFormatters = _staticRegister.getValues;\n\n/**\n * Register phrase formatter.\n *\n * @param {String} name Name of formatter.\n * @param {Function} formatterFn Function which will be applied on phrase propositions. It will transform them if it's possible.\n */\n\n\nfunction register(name, formatterFn) {\n  registerGloballyPhraseFormatter(name, formatterFn);\n}\n\n/**\n * Get all registered previously formatters.\n *\n * @returns {Array}\n */\nfunction getAll() {\n  return getGlobalPhraseFormatters();\n}\n\nexports.registerPhraseFormatter = register;\nexports.getPhraseFormatters = getAll;\n\n\nregister('pluralize', _pluralize2.default);\n\n/***/ }),\n/* 272 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports.default = pluralize;\n/**\n * Try to choose plural form from available phrase propositions.\n *\n * @param {Array} phrasePropositions List of phrases propositions.\n * @param {number} pluralForm Number determining which phrase form should be used.\n *\n * @returns {String|Array} One particular phrase if it's possible, list of unchanged phrase propositions otherwise.\n */\nfunction pluralize(phrasePropositions, pluralForm) {\n  var isPluralizable = Array.isArray(phrasePropositions) && Number.isInteger(pluralForm);\n\n  if (isPluralizable) {\n    return phrasePropositions[pluralForm];\n  }\n\n  return phrasePropositions;\n}\n\n/***/ }),\n/* 273 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports.createHighlight = undefined;\n\nvar _staticRegister2 = __webpack_require__(38);\n\nvar _staticRegister3 = _interopRequireDefault(_staticRegister2);\n\nvar _activeHeader = __webpack_require__(274);\n\nvar _activeHeader2 = _interopRequireDefault(_activeHeader);\n\nvar _area = __webpack_require__(275);\n\nvar _area2 = _interopRequireDefault(_area);\n\nvar _cell = __webpack_require__(276);\n\nvar _cell2 = _interopRequireDefault(_cell);\n\nvar _customSelection = __webpack_require__(277);\n\nvar _customSelection2 = _interopRequireDefault(_customSelection);\n\nvar _fill = __webpack_require__(278);\n\nvar _fill2 = _interopRequireDefault(_fill);\n\nvar _header = __webpack_require__(279);\n\nvar _header2 = _interopRequireDefault(_header);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar _staticRegister = (0, _staticRegister3.default)('highlight/types'),\n    register = _staticRegister.register,\n    getItem = _staticRegister.getItem; /* eslint-disable import/prefer-default-export */\n\n\nregister('active-header', _activeHeader2.default);\nregister('area', _area2.default);\nregister('cell', _cell2.default);\nregister('custom-selection', _customSelection2.default);\nregister('fill', _fill2.default);\nregister('header', _header2.default);\n\nfunction createHighlight(highlightType, options) {\n  return getItem(highlightType)(options);\n}\n\nexports.createHighlight = createHighlight;\n\n/***/ }),\n/* 274 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _src = __webpack_require__(4);\n\n/**\n * @return {Selection}\n */\nfunction createHighlight(_ref) {\n  var activeHeaderClassName = _ref.activeHeaderClassName;\n\n  var s = new _src.Selection({\n    highlightHeaderClassName: activeHeaderClassName\n  });\n\n  return s;\n}\n\nexports.default = createHighlight;\n\n/***/ }),\n/* 275 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _src = __webpack_require__(4);\n\n/**\n * Creates the new instance of Selection responsible for highlighting area of the selected multiple cells.\n *\n * @return {Selection}\n */\nfunction createHighlight(_ref) {\n  var layerLevel = _ref.layerLevel,\n      areaCornerVisible = _ref.areaCornerVisible;\n\n  var s = new _src.Selection({\n    className: 'area',\n    markIntersections: true,\n    layerLevel: Math.min(layerLevel, 7),\n    border: {\n      width: 1,\n      color: '#4b89ff',\n      cornerVisible: areaCornerVisible\n    }\n  });\n\n  return s;\n}\n\nexports.default = createHighlight;\n\n/***/ }),\n/* 276 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _src = __webpack_require__(4);\n\n/**\n * Creates the new instance of Selection responsible for highlighting currently selected cell. This type of selection\n * can present on the table only one at the time.\n *\n * @return {Selection}\n */\nfunction createHighlight(_ref) {\n  var cellCornerVisible = _ref.cellCornerVisible;\n\n  var s = new _src.Selection({\n    className: 'current',\n    border: {\n      width: 2,\n      color: '#4b89ff',\n      cornerVisible: cellCornerVisible\n    }\n  });\n\n  return s;\n}\n\nexports.default = createHighlight;\n\n/***/ }),\n/* 277 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _src = __webpack_require__(4);\n\n/**\n * Creates the new instance of Selection responsible for highlighting currently selected cell. This type of selection\n * can present on the table only one at the time.\n *\n * @return {Selection}\n */\nfunction createHighlight(_ref) {\n  var border = _ref.border,\n      cellRange = _ref.cellRange;\n\n  var s = new _src.Selection(border, cellRange);\n\n  return s;\n}\n\nexports.default = createHighlight;\n\n/***/ }),\n/* 278 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _src = __webpack_require__(4);\n\n/**\n * Creates the new instance of Selection, responsible for highlighting cells which are covered by fill handle\n * functionality. This type of selection can present on the table only one at the time.\n *\n * @return {Selection}\n */\nfunction createHighlight() {\n  var s = new _src.Selection({\n    className: 'fill',\n    border: {\n      width: 1,\n      color: '#ff0000'\n    }\n  });\n\n  return s;\n}\n\nexports.default = createHighlight;\n\n/***/ }),\n/* 279 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _src = __webpack_require__(4);\n\n/**\n * Creates the new instance of Selection, responsible for highlighting row and column headers. This type of selection\n * can occur multiple times.\n *\n * @return {Selection}\n */\nfunction createHighlight(_ref) {\n  var headerClassName = _ref.headerClassName,\n      rowClassName = _ref.rowClassName,\n      columnClassName = _ref.columnClassName;\n\n  var s = new _src.Selection({\n    className: 'highlight',\n    highlightHeaderClassName: headerClassName,\n    highlightRowClassName: rowClassName,\n    highlightColumnClassName: columnClassName\n  });\n\n  return s;\n}\n\nexports.default = createHighlight;\n\n/***/ }),\n/* 280 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _templateObject = _taggedTemplateLiteral(['Unsupported format of the selection ranges was passed. To select cells pass \\n        the coordinates as an array of arrays ([[rowStart, columnStart/columnPropStart, rowEnd, columnEnd/columnPropEnd]]) \\n        or as an array of CellRange objects.'], ['Unsupported format of the selection ranges was passed. To select cells pass \\n        the coordinates as an array of arrays ([[rowStart, columnStart/columnPropStart, rowEnd, columnEnd/columnPropEnd]]) \\n        or as an array of CellRange objects.']);\n\nvar _highlight = __webpack_require__(202);\n\nvar _highlight2 = _interopRequireDefault(_highlight);\n\nvar _range = __webpack_require__(281);\n\nvar _range2 = _interopRequireDefault(_range);\n\nvar _src = __webpack_require__(4);\n\nvar _keyStateObserver = __webpack_require__(200);\n\nvar _object = __webpack_require__(1);\n\nvar _mixed = __webpack_require__(11);\n\nvar _array = __webpack_require__(2);\n\nvar _localHooks = __webpack_require__(47);\n\nvar _localHooks2 = _interopRequireDefault(_localHooks);\n\nvar _transformation = __webpack_require__(282);\n\nvar _transformation2 = _interopRequireDefault(_transformation);\n\nvar _utils = __webpack_require__(72);\n\nvar _templateLiteralTag = __webpack_require__(42);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _taggedTemplateLiteral(strings, raw) { return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * @class Selection\n * @util\n */\nvar Selection = function () {\n  function Selection(settings, tableProps) {\n    var _this = this;\n\n    _classCallCheck(this, Selection);\n\n    /**\n     * Handsontable settings instance.\n     *\n     * @type {GridSettings}\n     */\n    this.settings = settings;\n    /**\n     * An additional object with dynamically defined properties which describes table state.\n     *\n     * @type {Object}\n     */\n    this.tableProps = tableProps;\n    /**\n     * The flag which determines if the selection is in progress.\n     *\n     * @type {Boolean}\n     */\n    this.inProgress = false;\n    /**\n     * The flag indicates that selection was performed by clicking the corner overlay.\n     *\n     * @type {Boolean}\n     */\n    this.selectedByCorner = false;\n    /**\n     * The collection of the selection layer levels where the whole row was selected using the row header.\n     *\n     * @type {Set.<Number>}\n     */\n    this.selectedByRowHeader = new Set();\n    /**\n     * The collection of the selection layer levels where the whole column was selected using the column header.\n     *\n     * @type {Set.<Number>}\n     */\n    this.selectedByColumnHeader = new Set();\n    /**\n     * Selection data layer.\n     *\n     * @type {SelectionRange}\n     */\n    this.selectedRange = new _range2.default();\n    /**\n     * Visualization layer.\n     *\n     * @type {Highlight}\n     */\n    this.highlight = new _highlight2.default({\n      headerClassName: settings.currentHeaderClassName,\n      activeHeaderClassName: settings.activeHeaderClassName,\n      rowClassName: settings.currentRowClassName,\n      columnClassName: settings.currentColClassName,\n      disableHighlight: this.settings.disableVisualSelection,\n      cellCornerVisible: function cellCornerVisible() {\n        return _this.isCellCornerVisible.apply(_this, arguments);\n      },\n      areaCornerVisible: function areaCornerVisible() {\n        return _this.isAreaCornerVisible.apply(_this, arguments);\n      }\n    });\n    /**\n     * The module for modifying coordinates.\n     *\n     * @type {Transformation}\n     */\n    this.transformation = new _transformation2.default(this.selectedRange, {\n      countRows: function countRows() {\n        return _this.tableProps.countRows();\n      },\n      countCols: function countCols() {\n        return _this.tableProps.countCols();\n      },\n      fixedRowsBottom: function fixedRowsBottom() {\n        return settings.fixedRowsBottom;\n      },\n      minSpareRows: function minSpareRows() {\n        return settings.minSpareRows;\n      },\n      minSpareCols: function minSpareCols() {\n        return settings.minSpareCols;\n      },\n      autoWrapRow: function autoWrapRow() {\n        return settings.autoWrapRow;\n      },\n      autoWrapCol: function autoWrapCol() {\n        return settings.autoWrapCol;\n      }\n    });\n\n    this.transformation.addLocalHook('beforeTransformStart', function () {\n      for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n        args[_key] = arguments[_key];\n      }\n\n      return _this.runLocalHooks.apply(_this, ['beforeModifyTransformStart'].concat(args));\n    });\n    this.transformation.addLocalHook('afterTransformStart', function () {\n      for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n        args[_key2] = arguments[_key2];\n      }\n\n      return _this.runLocalHooks.apply(_this, ['afterModifyTransformStart'].concat(args));\n    });\n    this.transformation.addLocalHook('beforeTransformEnd', function () {\n      for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n        args[_key3] = arguments[_key3];\n      }\n\n      return _this.runLocalHooks.apply(_this, ['beforeModifyTransformEnd'].concat(args));\n    });\n    this.transformation.addLocalHook('afterTransformEnd', function () {\n      for (var _len4 = arguments.length, args = Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n        args[_key4] = arguments[_key4];\n      }\n\n      return _this.runLocalHooks.apply(_this, ['afterModifyTransformEnd'].concat(args));\n    });\n    this.transformation.addLocalHook('insertRowRequire', function () {\n      for (var _len5 = arguments.length, args = Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {\n        args[_key5] = arguments[_key5];\n      }\n\n      return _this.runLocalHooks.apply(_this, ['insertRowRequire'].concat(args));\n    });\n    this.transformation.addLocalHook('insertColRequire', function () {\n      for (var _len6 = arguments.length, args = Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {\n        args[_key6] = arguments[_key6];\n      }\n\n      return _this.runLocalHooks.apply(_this, ['insertColRequire'].concat(args));\n    });\n  }\n\n  /**\n   * Get data layer for current selection.\n   *\n   * @return {SelectionRange}\n   */\n\n\n  _createClass(Selection, [{\n    key: 'getSelectedRange',\n    value: function getSelectedRange() {\n      return this.selectedRange;\n    }\n\n    /**\n     * Indicate that selection process began. It sets internaly `.inProgress` property to `true`.\n     */\n\n  }, {\n    key: 'begin',\n    value: function begin() {\n      this.inProgress = true;\n    }\n\n    /**\n     * Indicate that selection process finished. It sets internaly `.inProgress` property to `false`.\n     */\n\n  }, {\n    key: 'finish',\n    value: function finish() {\n      this.runLocalHooks('afterSelectionFinished', Array.from(this.selectedRange));\n      this.inProgress = false;\n    }\n\n    /**\n     * Check if the process of selecting the cell/cells is in progress.\n     *\n     * @returns {Boolean}\n     */\n\n  }, {\n    key: 'isInProgress',\n    value: function isInProgress() {\n      return this.inProgress;\n    }\n\n    /**\n     * Starts selection range on given coordinate object.\n     *\n     * @param {CellCoords} coords Visual coords.\n     * @param {Boolean} [multipleSelection] If `true`, selection will be worked in 'multiple' mode. This option works\n     *                                      only when 'selectionMode' is set as 'multiple'. If the argument is not defined\n     *                                      the default trigger will be used (isPressedCtrlKey() helper).\n     * @param {Boolean} [fragment=false] If `true`, the selection will be treated as a partial selection where the\n     *                                   `setRangeEnd` method won't be called on every `setRangeStart` call.\n     */\n\n  }, {\n    key: 'setRangeStart',\n    value: function setRangeStart(coords, multipleSelection) {\n      var fragment = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n      var isMultipleMode = this.settings.selectionMode === 'multiple';\n      var isMultipleSelection = (0, _mixed.isUndefined)(multipleSelection) ? (0, _keyStateObserver.isPressedCtrlKey)() : multipleSelection;\n      var isRowNegative = coords.row < 0;\n      var isColumnNegative = coords.col < 0;\n      var selectedByCorner = isRowNegative && isColumnNegative;\n\n      if (isRowNegative) {\n        coords.row = 0;\n      }\n      if (isColumnNegative) {\n        coords.col = 0;\n      }\n\n      this.selectedByCorner = selectedByCorner;\n      this.runLocalHooks('beforeSetRangeStart' + (fragment ? 'Only' : ''), coords);\n\n      if (!isMultipleMode || isMultipleMode && !isMultipleSelection && (0, _mixed.isUndefined)(multipleSelection)) {\n        this.selectedRange.clear();\n      }\n\n      this.selectedRange.add(coords);\n\n      if (this.getLayerLevel() === 0) {\n        this.selectedByRowHeader.clear();\n        this.selectedByColumnHeader.clear();\n      }\n\n      if (!selectedByCorner && isColumnNegative) {\n        this.selectedByRowHeader.add(this.getLayerLevel());\n      }\n      if (!selectedByCorner && isRowNegative) {\n        this.selectedByColumnHeader.add(this.getLayerLevel());\n      }\n\n      if (!fragment) {\n        this.setRangeEnd(coords);\n      }\n    }\n\n    /**\n     * Starts selection range on given coordinate object.\n     *\n     * @param {CellCoords} coords Visual coords.\n     * @param {Boolean} [multipleSelection] If `true`, selection will be worked in 'multiple' mode. This option works\n     *                                      only when 'selectionMode' is set as 'multiple'. If the argument is not defined\n     *                                      the default trigger will be used (isPressedCtrlKey() helper).\n     */\n\n  }, {\n    key: 'setRangeStartOnly',\n    value: function setRangeStartOnly(coords, multipleSelection) {\n      this.setRangeStart(coords, multipleSelection, true);\n    }\n\n    /**\n     * Ends selection range on given coordinate object.\n     *\n     * @param {CellCoords} coords Visual coords.\n     */\n\n  }, {\n    key: 'setRangeEnd',\n    value: function setRangeEnd(coords) {\n      if (this.selectedRange.isEmpty()) {\n        return;\n      }\n\n      this.runLocalHooks('beforeSetRangeEnd', coords);\n      this.begin();\n\n      var cellRange = this.selectedRange.current();\n\n      if (this.settings.selectionMode !== 'single') {\n        cellRange.setTo(new _src.CellCoords(coords.row, coords.col));\n      }\n\n      // Set up current selection.\n      this.highlight.getCell().clear();\n\n      if (this.highlight.isEnabledFor(_highlight.CELL_TYPE)) {\n        this.highlight.getCell().add(this.selectedRange.current().highlight);\n      }\n\n      var layerLevel = this.getLayerLevel();\n\n      // If the next layer level is lower than previous then clear all area and header highlights. This is the\n      // indication that the new selection is performing.\n      if (layerLevel < this.highlight.layerLevel) {\n        (0, _array.arrayEach)(this.highlight.getAreas(), function (highlight) {\n          return void highlight.clear();\n        });\n        (0, _array.arrayEach)(this.highlight.getHeaders(), function (highlight) {\n          return void highlight.clear();\n        });\n        (0, _array.arrayEach)(this.highlight.getActiveHeaders(), function (highlight) {\n          return void highlight.clear();\n        });\n      }\n\n      this.highlight.useLayerLevel(layerLevel);\n\n      var areaHighlight = this.highlight.createOrGetArea();\n      var headerHighlight = this.highlight.createOrGetHeader();\n      var activeHeaderHighlight = this.highlight.createOrGetActiveHeader();\n\n      areaHighlight.clear();\n      headerHighlight.clear();\n      activeHeaderHighlight.clear();\n\n      if (this.highlight.isEnabledFor(_highlight.AREA_TYPE) && (this.isMultiple() || layerLevel >= 1)) {\n        areaHighlight.add(cellRange.from).add(cellRange.to);\n\n        if (layerLevel === 1) {\n          // For single cell selection in the same layer, we do not create area selection to prevent blue background.\n          // When non-consecutive selection is performed we have to add that missing area selection to the previous layer\n          // based on previous coordinates. It only occurs when the previous selection wasn't select multiple cells.\n          this.highlight.useLayerLevel(layerLevel - 1).createOrGetArea().add(this.selectedRange.previous().from);\n\n          this.highlight.useLayerLevel(layerLevel);\n        }\n      }\n\n      if (this.highlight.isEnabledFor(_highlight.HEADER_TYPE)) {\n        if (this.settings.selectionMode === 'single') {\n          headerHighlight.add(cellRange.highlight);\n        } else {\n          headerHighlight.add(cellRange.from).add(cellRange.to);\n        }\n      }\n\n      if (this.isSelectedByRowHeader()) {\n        var isRowSelected = this.tableProps.countCols() === cellRange.getWidth();\n\n        // Make sure that the whole row is selected (in case where selectionMode is set to 'single')\n        if (isRowSelected) {\n          activeHeaderHighlight.add(new _src.CellCoords(cellRange.from.row, -1)).add(new _src.CellCoords(cellRange.to.row, -1));\n        }\n      }\n\n      if (this.isSelectedByColumnHeader()) {\n        var isColumnSelected = this.tableProps.countRows() === cellRange.getHeight();\n\n        // Make sure that the whole column is selected (in case where selectionMode is set to 'single')\n        if (isColumnSelected) {\n          activeHeaderHighlight.add(new _src.CellCoords(-1, cellRange.from.col)).add(new _src.CellCoords(-1, cellRange.to.col));\n        }\n      }\n\n      this.runLocalHooks('afterSetRangeEnd', coords);\n    }\n\n    /**\n     * Returns information if we have a multiselection. This method check multiselection only on the latest layer of\n     * the selection.\n     *\n     * @returns {Boolean}\n     */\n\n  }, {\n    key: 'isMultiple',\n    value: function isMultiple() {\n      var isMultipleListener = (0, _object.createObjectPropListener)(!this.selectedRange.current().isSingle());\n\n      this.runLocalHooks('afterIsMultipleSelection', isMultipleListener);\n\n      return isMultipleListener.value;\n    }\n\n    /**\n     * Selects cell relative to the current cell (if possible).\n     *\n     * @param {Number} rowDelta Rows number to move, value can be passed as negative number.\n     * @param {Number} colDelta Columns number to move, value can be passed as negative number.\n     * @param {Boolean} force If `true` the new rows/columns will be created if necessary. Otherwise, row/column will\n     *                        be created according to `minSpareRows/minSpareCols` settings of Handsontable.\n     */\n\n  }, {\n    key: 'transformStart',\n    value: function transformStart(rowDelta, colDelta, force) {\n      this.setRangeStart(this.transformation.transformStart(rowDelta, colDelta, force));\n    }\n\n    /**\n     * Sets selection end cell relative to the current selection end cell (if possible).\n     *\n     * @param {Number} rowDelta Rows number to move, value can be passed as negative number.\n     * @param {Number} colDelta Columns number to move, value can be passed as negative number.\n     */\n\n  }, {\n    key: 'transformEnd',\n    value: function transformEnd(rowDelta, colDelta) {\n      this.setRangeEnd(this.transformation.transformEnd(rowDelta, colDelta));\n    }\n\n    /**\n     * Returns currently used layer level.\n     *\n     * @return {Number} Returns layer level starting from 0. If no selection was added to the table -1 is returned.\n     */\n\n  }, {\n    key: 'getLayerLevel',\n    value: function getLayerLevel() {\n      return this.selectedRange.size() - 1;\n    }\n\n    /**\n     * Returns `true` if currently there is a selection on the screen, `false` otherwise.\n     *\n     * @returns {Boolean}\n     */\n\n  }, {\n    key: 'isSelected',\n    value: function isSelected() {\n      return !this.selectedRange.isEmpty();\n    }\n\n    /**\n     * Returns `true` if the selection was applied by clicking to the row header. If the `layerLevel`\n     * argument is passed then only that layer will be checked. Otherwise, it checks if any row header\n     * was clicked on any selection layer level.\n     *\n     * @param {Number} [layerLevel=this.getLayerLevel()] Selection layer level to check.\n     * @return {Boolean}\n     */\n\n  }, {\n    key: 'isSelectedByRowHeader',\n    value: function isSelectedByRowHeader() {\n      var layerLevel = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.getLayerLevel();\n\n      return layerLevel === -1 ? this.selectedByRowHeader.size > 0 : this.selectedByRowHeader.has(layerLevel);\n    }\n\n    /**\n     * Returns `true` if the selection was applied by clicking to the column header. If the `layerLevel`\n     * argument is passed then only that layer will be checked. Otherwise, it checks if any column header\n     * was clicked on any selection layer level.\n     *\n     * @param {Number} [layerLevel=this.getLayerLevel()] Selection layer level to check.\n     * @return {Boolean}\n     */\n\n  }, {\n    key: 'isSelectedByColumnHeader',\n    value: function isSelectedByColumnHeader() {\n      var layerLevel = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.getLayerLevel();\n\n      return layerLevel === -1 ? this.selectedByColumnHeader.size > 0 : this.selectedByColumnHeader.has(layerLevel);\n    }\n\n    /**\n     * Returns `true` if the selection was applied by clicking on the row or column header on any layer level.\n     *\n     * @return {Boolean}\n     */\n\n  }, {\n    key: 'isSelectedByAnyHeader',\n    value: function isSelectedByAnyHeader() {\n      return this.isSelectedByRowHeader(-1) || this.isSelectedByColumnHeader(-1);\n    }\n\n    /**\n     * Returns `true` if the selection was applied by clicking on the left-top corner overlay.\n     *\n     * @return {Boolean}\n     */\n\n  }, {\n    key: 'isSelectedByCorner',\n    value: function isSelectedByCorner() {\n      return this.selectedByCorner;\n    }\n\n    /**\n     * Returns `true` if coords is within selection coords. This method iterates through all selection layers to check if\n     * the coords object is within selection range.\n     *\n     * @param {CellCoords} coords The CellCoords instance with defined visual coordinates.\n     * @returns {Boolean}\n     */\n\n  }, {\n    key: 'inInSelection',\n    value: function inInSelection(coords) {\n      return this.selectedRange.includes(coords);\n    }\n\n    /**\n     * Returns `true` if the cell corner should be visible.\n     *\n     * @private\n     * @return {Boolean} `true` if the corner element has to be visible, `false` otherwise.\n     */\n\n  }, {\n    key: 'isCellCornerVisible',\n    value: function isCellCornerVisible() {\n      return this.settings.fillHandle && !this.tableProps.isEditorOpened() && !this.isMultiple();\n    }\n\n    /**\n     * Returns `true` if the area corner should be visible.\n     *\n     * @param {Number} layerLevel The layer level.\n     * @return {Boolean} `true` if the corner element has to be visible, `false` otherwise.\n     */\n\n  }, {\n    key: 'isAreaCornerVisible',\n    value: function isAreaCornerVisible(layerLevel) {\n      if (Number.isInteger(layerLevel) && layerLevel !== this.getLayerLevel()) {\n        return false;\n      }\n\n      return this.settings.fillHandle && !this.tableProps.isEditorOpened() && this.isMultiple();\n    }\n\n    /**\n     * Clear the selection by resetting the collected ranges and highlights.\n     */\n\n  }, {\n    key: 'clear',\n    value: function clear() {\n      this.selectedRange.clear();\n      this.highlight.clear();\n    }\n\n    /**\n     * Deselects all selected cells.\n     */\n\n  }, {\n    key: 'deselect',\n    value: function deselect() {\n      if (!this.isSelected()) {\n        return;\n      }\n\n      this.inProgress = false;\n      this.clear();\n      this.runLocalHooks('afterDeselect');\n    }\n\n    /**\n     * Select all cells.\n     */\n\n  }, {\n    key: 'selectAll',\n    value: function selectAll() {\n      this.clear();\n      this.setRangeStart(new _src.CellCoords(-1, -1));\n      this.selectedByRowHeader.add(this.getLayerLevel());\n      this.selectedByColumnHeader.add(this.getLayerLevel());\n      this.setRangeEnd(new _src.CellCoords(this.tableProps.countRows() - 1, this.tableProps.countCols() - 1));\n    }\n\n    /**\n     * Make multiple, non-contiguous selection specified by `row` and `column` values or a range of cells\n     * finishing at `endRow`, `endColumn`. The method supports two input formats, first as an array of arrays such\n     * as `[[rowStart, columnStart, rowEnd, columnEnd]]` and second format as an array of CellRange objects.\n     * If the passed ranges have another format the exception will be thrown.\n     *\n     * @param {Array[]|CellRange[]} selectionRanges The coordinates which define what the cells should be selected.\n     * @return {Boolean} Returns `true` if selection was successful, `false` otherwise.\n     */\n\n  }, {\n    key: 'selectCells',\n    value: function selectCells(selectionRanges) {\n      var _this2 = this;\n\n      var selectionType = (0, _utils.detectSelectionType)(selectionRanges);\n\n      if (selectionType === _utils.SELECTION_TYPE_EMPTY) {\n        return false;\n      } else if (selectionType === _utils.SELECTION_TYPE_UNRECOGNIZED) {\n        throw new Error((0, _templateLiteralTag.toSingleLine)(_templateObject));\n      }\n\n      var selectionSchemaNormalizer = (0, _utils.normalizeSelectionFactory)(selectionType, {\n        propToCol: function propToCol(prop) {\n          return _this2.tableProps.propToCol(prop);\n        },\n        keepDirection: true\n      });\n      var countRows = this.tableProps.countRows();\n      var countCols = this.tableProps.countCols();\n\n      // Check if every layer of the coordinates are valid.\n      var isValid = !selectionRanges.some(function (selection) {\n        var _selectionSchemaNorma = selectionSchemaNormalizer(selection),\n            _selectionSchemaNorma2 = _slicedToArray(_selectionSchemaNorma, 4),\n            rowStart = _selectionSchemaNorma2[0],\n            columnStart = _selectionSchemaNorma2[1],\n            rowEnd = _selectionSchemaNorma2[2],\n            columnEnd = _selectionSchemaNorma2[3];\n\n        var _isValid = (0, _utils.isValidCoord)(rowStart, countRows) && (0, _utils.isValidCoord)(columnStart, countCols) && (0, _utils.isValidCoord)(rowEnd, countRows) && (0, _utils.isValidCoord)(columnEnd, countCols);\n\n        return !_isValid;\n      });\n\n      if (isValid) {\n        this.clear();\n\n        (0, _array.arrayEach)(selectionRanges, function (selection) {\n          var _selectionSchemaNorma3 = selectionSchemaNormalizer(selection),\n              _selectionSchemaNorma4 = _slicedToArray(_selectionSchemaNorma3, 4),\n              rowStart = _selectionSchemaNorma4[0],\n              columnStart = _selectionSchemaNorma4[1],\n              rowEnd = _selectionSchemaNorma4[2],\n              columnEnd = _selectionSchemaNorma4[3];\n\n          _this2.setRangeStartOnly(new _src.CellCoords(rowStart, columnStart), false);\n          _this2.setRangeEnd(new _src.CellCoords(rowEnd, columnEnd));\n          _this2.finish();\n        });\n      }\n\n      return isValid;\n    }\n\n    /**\n     * Select column specified by `startColumn` visual index or column property or a range of columns finishing at `endColumn`.\n     *\n     * @param {Number|String} startColumn Visual column index or column property from which the selection starts.\n     * @param {Number|String} [endColumn] Visual column index or column property from to the selection finishes.\n     * @returns {Boolean} Returns `true` if selection was successful, `false` otherwise.\n     */\n\n  }, {\n    key: 'selectColumns',\n    value: function selectColumns(startColumn) {\n      var endColumn = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : startColumn;\n\n      var start = typeof startColumn === 'string' ? this.tableProps.propToCol(startColumn) : startColumn;\n      var end = typeof endColumn === 'string' ? this.tableProps.propToCol(endColumn) : endColumn;\n\n      var countCols = this.tableProps.countCols();\n      var isValid = (0, _utils.isValidCoord)(start, countCols) && (0, _utils.isValidCoord)(end, countCols);\n\n      if (isValid) {\n        this.setRangeStartOnly(new _src.CellCoords(-1, start));\n        this.setRangeEnd(new _src.CellCoords(this.tableProps.countRows() - 1, end));\n        this.finish();\n      }\n\n      return isValid;\n    }\n\n    /**\n     * Select row specified by `startRow` visual index or a range of rows finishing at `endRow`.\n     *\n     * @param {Number} startRow Visual row index from which the selection starts.\n     * @param {Number} [endRow] Visual row index from to the selection finishes.\n     * @returns {Boolean} Returns `true` if selection was successful, `false` otherwise.\n     */\n\n  }, {\n    key: 'selectRows',\n    value: function selectRows(startRow) {\n      var endRow = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : startRow;\n\n      var countRows = this.tableProps.countRows();\n      var isValid = (0, _utils.isValidCoord)(startRow, countRows) && (0, _utils.isValidCoord)(endRow, countRows);\n\n      if (isValid) {\n        this.setRangeStartOnly(new _src.CellCoords(startRow, -1));\n        this.setRangeEnd(new _src.CellCoords(endRow, this.tableProps.countCols() - 1));\n        this.finish();\n      }\n\n      return isValid;\n    }\n  }]);\n\n  return Selection;\n}();\n\n(0, _object.mixin)(Selection, _localHooks2.default);\n\nexports.default = Selection;\n\n/***/ }),\n/* 281 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _src = __webpack_require__(4);\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * The SelectionRange class is a simple CellRanges collection designed for easy manipulation of the multiple\n * consecutive and non-consecutive selections.\n *\n * @class SelectionRange\n * @util\n */\nvar SelectionRange = function () {\n  function SelectionRange() {\n    _classCallCheck(this, SelectionRange);\n\n    /**\n     * List of all CellRanges added to the class instance.\n     *\n     * @type {CellRange[]}\n     */\n    this.ranges = [];\n  }\n\n  /**\n   * Check if selected range is empty.\n   *\n   * @return {Boolean}\n   */\n\n\n  _createClass(SelectionRange, [{\n    key: 'isEmpty',\n    value: function isEmpty() {\n      return this.size() === 0;\n    }\n\n    /**\n     * Set coordinates to the class instance. It clears all previously added coordinates and push `coords`\n     * to the collection.\n     *\n     * @param {CellCoords} coords The CellCoords instance with defined visual coordinates.\n     * @returns {SelectionRange}\n     */\n\n  }, {\n    key: 'set',\n    value: function set(coords) {\n      this.clear();\n      this.ranges.push(new _src.CellRange(coords));\n\n      return this;\n    }\n\n    /**\n     * Add coordinates to the class instance. The new coordinates are added to the end of the range collection.\n     *\n     * @param {CellCoords} coords The CellCoords instance with defined visual coordinates.\n     * @returns {SelectionRange}\n     */\n\n  }, {\n    key: 'add',\n    value: function add(coords) {\n      this.ranges.push(new _src.CellRange(coords));\n\n      return this;\n    }\n\n    /**\n     * Get last added coordinates from ranges, it returns a CellRange instance.\n     *\n     * @return {CellRange|undefined}\n     */\n\n  }, {\n    key: 'current',\n    value: function current() {\n      return this.peekByIndex(0);\n    }\n\n    /**\n     * Get previously added coordinates from ranges, it returns a CellRange instance.\n     *\n     * @return {CellRange|undefined}\n     */\n\n  }, {\n    key: 'previous',\n    value: function previous() {\n      return this.peekByIndex(-1);\n    }\n\n    /**\n     * Returns `true` if coords is within selection coords. This method iterates through all selection layers to check if\n     * the coords object is within selection range.\n     *\n     * @param {CellCoords} coords The CellCoords instance with defined visual coordinates.\n     * @returns {Boolean}\n     */\n\n  }, {\n    key: 'includes',\n    value: function includes(coords) {\n      return this.ranges.some(function (cellRange) {\n        return cellRange.includes(coords);\n      });\n    }\n\n    /**\n     * Clear collection.\n     *\n     * @return {SelectionRange}\n     */\n\n  }, {\n    key: 'clear',\n    value: function clear() {\n      this.ranges.length = 0;\n\n      return this;\n    }\n\n    /**\n     * Get count of added all coordinates added to the selection.\n     *\n     * @return {Number}\n     */\n\n  }, {\n    key: 'size',\n    value: function size() {\n      return this.ranges.length;\n    }\n\n    /**\n     * Peek the coordinates based on the offset where that coordinate resides in the collection.\n     *\n     * @param {Number} [offset=0] An offset where the coordinate will be retrieved from.\n     * @return {CellRange|undefined}\n     */\n\n  }, {\n    key: 'peekByIndex',\n    value: function peekByIndex() {\n      var offset = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n\n      var rangeIndex = this.size() + offset - 1;\n      var cellRange = void 0;\n\n      if (rangeIndex >= 0) {\n        cellRange = this.ranges[rangeIndex];\n      }\n\n      return cellRange;\n    }\n  }, {\n    key: Symbol.iterator,\n    value: function value() {\n      return this.ranges[Symbol.iterator]();\n    }\n  }]);\n\n  return SelectionRange;\n}();\n\nexports.default = SelectionRange;\n\n/***/ }),\n/* 282 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _src = __webpack_require__(4);\n\nvar _object = __webpack_require__(1);\n\nvar _localHooks = __webpack_require__(47);\n\nvar _localHooks2 = _interopRequireDefault(_localHooks);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * The Transformation class implements algorithms for transforming coordinates based on current settings\n * passed to the Handsontable.\n *\n * Transformation is always applied relative to the current selection.\n *\n * @class Transformation\n * @util\n */\nvar Transformation = function () {\n  function Transformation(range, options) {\n    _classCallCheck(this, Transformation);\n\n    /**\n     * Instance of the SelectionRange, holder for coordinates applied to the table.\n     *\n     * @type {SelectionRange}\n     */\n    this.range = range;\n    /**\n     * Additional options which define the state of the settings which can infer transformation.\n     *\n     * @type {Object}\n     */\n    this.options = options;\n  }\n\n  /**\n   * Selects cell relative to current cell (if possible).\n   *\n   * @param {Number} rowDelta Rows number to move, value can be passed as negative number.\n   * @param {Number} colDelta Columns number to move, value can be passed as negative number.\n   * @param {Boolean} force If `true` the new rows/columns will be created if necessary. Otherwise, row/column will\n   *                        be created according to `minSpareRows/minSpareCols` settings of Handsontable.\n   * @returns {CellCoords}\n   */\n\n\n  _createClass(Transformation, [{\n    key: 'transformStart',\n    value: function transformStart(rowDelta, colDelta, force) {\n      var delta = new _src.CellCoords(rowDelta, colDelta);\n\n      this.runLocalHooks('beforeTransformStart', delta);\n\n      var totalRows = this.options.countRows();\n      var totalCols = this.options.countCols();\n      var fixedRowsBottom = this.options.fixedRowsBottom();\n      var minSpareRows = this.options.minSpareRows();\n      var minSpareCols = this.options.minSpareCols();\n      var autoWrapRow = this.options.autoWrapRow();\n      var autoWrapCol = this.options.autoWrapCol();\n      var highlightCoords = this.range.current().highlight;\n\n      if (highlightCoords.row + rowDelta > totalRows - 1) {\n        if (force && minSpareRows > 0 && !(fixedRowsBottom && highlightCoords.row >= totalRows - fixedRowsBottom - 1)) {\n          this.runLocalHooks('insertRowRequire', totalRows);\n          totalRows = this.options.countRows();\n        } else if (autoWrapCol) {\n          delta.row = 1 - totalRows;\n          delta.col = highlightCoords.col + delta.col === totalCols - 1 ? 1 - totalCols : 1;\n        }\n      } else if (autoWrapCol && highlightCoords.row + delta.row < 0 && highlightCoords.col + delta.col >= 0) {\n        delta.row = totalRows - 1;\n        delta.col = highlightCoords.col + delta.col === 0 ? totalCols - 1 : -1;\n      }\n\n      if (highlightCoords.col + delta.col > totalCols - 1) {\n        if (force && minSpareCols > 0) {\n          this.runLocalHooks('insertColRequire', totalCols);\n          totalCols = this.options.countCols();\n        } else if (autoWrapRow) {\n          delta.row = highlightCoords.row + delta.row === totalRows - 1 ? 1 - totalRows : 1;\n          delta.col = 1 - totalCols;\n        }\n      } else if (autoWrapRow && highlightCoords.col + delta.col < 0 && highlightCoords.row + delta.row >= 0) {\n        delta.row = highlightCoords.row + delta.row === 0 ? totalRows - 1 : -1;\n        delta.col = totalCols - 1;\n      }\n\n      var coords = new _src.CellCoords(highlightCoords.row + delta.row, highlightCoords.col + delta.col);\n      var rowTransformDir = 0;\n      var colTransformDir = 0;\n\n      if (coords.row < 0) {\n        rowTransformDir = -1;\n        coords.row = 0;\n      } else if (coords.row > 0 && coords.row >= totalRows) {\n        rowTransformDir = 1;\n        coords.row = totalRows - 1;\n      }\n\n      if (coords.col < 0) {\n        colTransformDir = -1;\n        coords.col = 0;\n      } else if (coords.col > 0 && coords.col >= totalCols) {\n        colTransformDir = 1;\n        coords.col = totalCols - 1;\n      }\n      this.runLocalHooks('afterTransformStart', coords, rowTransformDir, colTransformDir);\n\n      return coords;\n    }\n\n    /**\n     * Sets selection end cell relative to current selection end cell (if possible).\n     *\n     * @param {Number} rowDelta Rows number to move, value can be passed as negative number.\n     * @param {Number} colDelta Columns number to move, value can be passed as negative number.\n     * @returns {CellCoords}\n     */\n\n  }, {\n    key: 'transformEnd',\n    value: function transformEnd(rowDelta, colDelta) {\n      var delta = new _src.CellCoords(rowDelta, colDelta);\n\n      this.runLocalHooks('beforeTransformEnd', delta);\n\n      var totalRows = this.options.countRows();\n      var totalCols = this.options.countCols();\n      var cellRange = this.range.current();\n      var coords = new _src.CellCoords(cellRange.to.row + delta.row, cellRange.to.col + delta.col);\n      var rowTransformDir = 0;\n      var colTransformDir = 0;\n\n      if (coords.row < 0) {\n        rowTransformDir = -1;\n        coords.row = 0;\n      } else if (coords.row > 0 && coords.row >= totalRows) {\n        rowTransformDir = 1;\n        coords.row = totalRows - 1;\n      }\n\n      if (coords.col < 0) {\n        colTransformDir = -1;\n        coords.col = 0;\n      } else if (coords.col > 0 && coords.col >= totalCols) {\n        colTransformDir = 1;\n        coords.col = totalCols - 1;\n      }\n      this.runLocalHooks('afterTransformEnd', coords, rowTransformDir, colTransformDir);\n\n      return coords;\n    }\n  }]);\n\n  return Transformation;\n}();\n\n(0, _object.mixin)(Transformation, _localHooks2.default);\n\nexports.default = Transformation;\n\n/***/ }),\n/* 283 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports.default = jQueryWrapper;\nfunction jQueryWrapper(Handsontable) {\n  var jQuery = typeof window === 'undefined' ? false : window.jQuery;\n\n  if (!jQuery) {\n    return;\n  }\n\n  jQuery.fn.handsontable = function (action) {\n    var $this = this.first(); // Use only first element from list\n    var instance = $this.data('handsontable');\n\n    // Init case\n    if (typeof action !== 'string') {\n      var userSettings = action || {};\n\n      if (instance) {\n        instance.updateSettings(userSettings);\n      } else {\n        instance = new Handsontable.Core($this[0], userSettings);\n        $this.data('handsontable', instance);\n        instance.init();\n      }\n\n      return $this;\n    }\n\n    var output = void 0;\n\n    // Action case\n    if (instance) {\n      if (typeof instance[action] !== 'undefined') {\n        var _instance$action;\n\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        output = (_instance$action = instance[action]).call.apply(_instance$action, [instance].concat(args));\n\n        if (action === 'destroy') {\n          $this.removeData();\n        }\n      } else {\n        throw new Error('Handsontable do not provide action: ' + action);\n      }\n    }\n\n    return output;\n  };\n}\n\n/***/ }),\n/* 284 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports.Base = exports.UndoRedo = exports.TouchScroll = exports.Search = exports.PersistentState = exports.ObserveChanges = exports.MultipleSelectionHandles = exports.MergeCells = exports.ManualRowResize = exports.ManualRowMove = exports.ManualColumnResize = exports.ManualColumnMove = exports.ManualColumnFreeze = exports.DragToScroll = exports.CustomBorders = exports.CopyPaste = exports.ContextMenu = exports.Comments = exports.ColumnSorting = exports.AutoRowSize = exports.AutoFill = exports.AutoColumnSize = undefined;\n\nvar _persistentState = __webpack_require__(285);\n\nvar _persistentState2 = _interopRequireDefault(_persistentState);\n\nvar _autoColumnSize = __webpack_require__(287);\n\nvar _autoColumnSize2 = _interopRequireDefault(_autoColumnSize);\n\nvar _autofill = __webpack_require__(288);\n\nvar _autofill2 = _interopRequireDefault(_autofill);\n\nvar _autoRowSize = __webpack_require__(290);\n\nvar _autoRowSize2 = _interopRequireDefault(_autoRowSize);\n\nvar _columnSorting = __webpack_require__(291);\n\nvar _columnSorting2 = _interopRequireDefault(_columnSorting);\n\nvar _comments = __webpack_require__(298);\n\nvar _comments2 = _interopRequireDefault(_comments);\n\nvar _contextMenu = __webpack_require__(302);\n\nvar _contextMenu2 = _interopRequireDefault(_contextMenu);\n\nvar _copyPaste = __webpack_require__(319);\n\nvar _copyPaste2 = _interopRequireDefault(_copyPaste);\n\nvar _customBorders = __webpack_require__(326);\n\nvar _customBorders2 = _interopRequireDefault(_customBorders);\n\nvar _dragToScroll = __webpack_require__(333);\n\nvar _dragToScroll2 = _interopRequireDefault(_dragToScroll);\n\nvar _manualColumnFreeze = __webpack_require__(334);\n\nvar _manualColumnFreeze2 = _interopRequireDefault(_manualColumnFreeze);\n\nvar _manualColumnMove = __webpack_require__(338);\n\nvar _manualColumnMove2 = _interopRequireDefault(_manualColumnMove);\n\nvar _manualColumnResize = __webpack_require__(343);\n\nvar _manualColumnResize2 = _interopRequireDefault(_manualColumnResize);\n\nvar _manualRowMove = __webpack_require__(344);\n\nvar _manualRowMove2 = _interopRequireDefault(_manualRowMove);\n\nvar _manualRowResize = __webpack_require__(349);\n\nvar _manualRowResize2 = _interopRequireDefault(_manualRowResize);\n\nvar _mergeCells = __webpack_require__(350);\n\nvar _mergeCells2 = _interopRequireDefault(_mergeCells);\n\nvar _multipleSelectionHandles = __webpack_require__(356);\n\nvar _multipleSelectionHandles2 = _interopRequireDefault(_multipleSelectionHandles);\n\nvar _observeChanges = __webpack_require__(357);\n\nvar _observeChanges2 = _interopRequireDefault(_observeChanges);\n\nvar _search = __webpack_require__(361);\n\nvar _search2 = _interopRequireDefault(_search);\n\nvar _touchScroll = __webpack_require__(362);\n\nvar _touchScroll2 = _interopRequireDefault(_touchScroll);\n\nvar _undoRedo = __webpack_require__(363);\n\nvar _undoRedo2 = _interopRequireDefault(_undoRedo);\n\nvar _base = __webpack_require__(10);\n\nvar _base2 = _interopRequireDefault(_base);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.AutoColumnSize = _autoColumnSize2.default;\nexports.AutoFill = _autofill2.default;\nexports.AutoRowSize = _autoRowSize2.default;\nexports.ColumnSorting = _columnSorting2.default;\nexports.Comments = _comments2.default;\nexports.ContextMenu = _contextMenu2.default;\nexports.CopyPaste = _copyPaste2.default;\nexports.CustomBorders = _customBorders2.default;\nexports.DragToScroll = _dragToScroll2.default;\nexports.ManualColumnFreeze = _manualColumnFreeze2.default;\nexports.ManualColumnMove = _manualColumnMove2.default;\nexports.ManualColumnResize = _manualColumnResize2.default;\nexports.ManualRowMove = _manualRowMove2.default;\nexports.ManualRowResize = _manualRowResize2.default;\nexports.MergeCells = _mergeCells2.default;\nexports.MultipleSelectionHandles = _multipleSelectionHandles2.default;\nexports.ObserveChanges = _observeChanges2.default;\nexports.PersistentState = _persistentState2.default;\nexports.Search = _search2.default;\nexports.TouchScroll = _touchScroll2.default;\nexports.UndoRedo = _undoRedo2.default;\nexports.Base = _base2.default;\n\n/***/ }),\n/* 285 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _base = __webpack_require__(10);\n\nvar _base2 = _interopRequireDefault(_base);\n\nvar _plugins = __webpack_require__(8);\n\nvar _storage = __webpack_require__(286);\n\nvar _storage2 = _interopRequireDefault(_storage);\n\nvar _pluginHooks = __webpack_require__(16);\n\nvar _pluginHooks2 = _interopRequireDefault(_pluginHooks);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n_pluginHooks2.default.getSingleton().register('persistentStateSave');\n_pluginHooks2.default.getSingleton().register('persistentStateLoad');\n_pluginHooks2.default.getSingleton().register('persistentStateReset');\n\n/**\n * @plugin PersistentState\n *\n * @description\n * Save the state of column sorting, column positions and column sizes in local storage to preserve table state\n * between page reloads.\n *\n * In order to enable data storage mechanism, {@link Options#persistentState} option must be set to `true`.\n *\n * When persistentState is enabled it exposes 3 hooks:\n * - {@link Hooks#persistentStateSave} - Saves value under given key in browser local storage.\n * - {@link Hooks#persistentStateLoad} - Loads value, saved under given key, from browser local storage. The loaded\n * value will be saved in `saveTo.value`.\n * - {@link Hooks#persistentStateReset} - Clears the value saved under key. If no key is given, all values associated\n * with table will be cleared.\n */\n\nvar PersistentState = function (_BasePlugin) {\n  _inherits(PersistentState, _BasePlugin);\n\n  function PersistentState(hotInstance) {\n    _classCallCheck(this, PersistentState);\n\n    /**\n     * Instance of {@link Storage}.\n     *\n     * @private\n     * @type {Storage}\n     */\n    var _this = _possibleConstructorReturn(this, (PersistentState.__proto__ || Object.getPrototypeOf(PersistentState)).call(this, hotInstance));\n\n    _this.storage = void 0;\n    return _this;\n  }\n\n  /**\n   * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}\n   * hook and if it returns `true` than the {@link PersistentState#enablePlugin} method is called.\n   *\n   * @returns {Boolean}\n   */\n\n\n  _createClass(PersistentState, [{\n    key: 'isEnabled',\n    value: function isEnabled() {\n      return !!this.hot.getSettings().persistentState;\n    }\n\n    /**\n     * Enables the plugin functionality for this Handsontable instance.\n     */\n\n  }, {\n    key: 'enablePlugin',\n    value: function enablePlugin() {\n      var _this2 = this;\n\n      if (this.enabled) {\n        return;\n      }\n\n      if (!this.storage) {\n        this.storage = new _storage2.default(this.hot.rootElement.id);\n      }\n\n      this.addHook('persistentStateSave', function (key, value) {\n        return _this2.saveValue(key, value);\n      });\n      this.addHook('persistentStateLoad', function (key, saveTo) {\n        return _this2.loadValue(key, saveTo);\n      });\n      this.addHook('persistentStateReset', function () {\n        return _this2.resetValue();\n      });\n\n      _get(PersistentState.prototype.__proto__ || Object.getPrototypeOf(PersistentState.prototype), 'enablePlugin', this).call(this);\n    }\n\n    /**\n     * Disables the plugin functionality for this Handsontable instance.\n     */\n\n  }, {\n    key: 'disablePlugin',\n    value: function disablePlugin() {\n      this.storage = void 0;\n\n      _get(PersistentState.prototype.__proto__ || Object.getPrototypeOf(PersistentState.prototype), 'disablePlugin', this).call(this);\n    }\n\n    /**\n     * Updates the plugin state. This method is executed when {@link Core#updateSettings} is invoked.\n     */\n\n  }, {\n    key: 'updatePlugin',\n    value: function updatePlugin() {\n      this.disablePlugin();\n      this.enablePlugin();\n\n      _get(PersistentState.prototype.__proto__ || Object.getPrototypeOf(PersistentState.prototype), 'updatePlugin', this).call(this);\n    }\n\n    /**\n     * Loads the value from local storage.\n     *\n     * @param {String} key Storage key.\n     * @param {Object} saveTo Saved value from local storage.\n     */\n\n  }, {\n    key: 'loadValue',\n    value: function loadValue(key, saveTo) {\n      saveTo.value = this.storage.loadValue(key);\n    }\n\n    /**\n     * Saves the data to local storage.\n     *\n     * @param {String} key Storage key.\n     * @param {Mixed} value Value to save.\n     */\n\n  }, {\n    key: 'saveValue',\n    value: function saveValue(key, value) {\n      this.storage.saveValue(key, value);\n    }\n\n    /**\n     * Resets the data or all data from local storage.\n     *\n     * @param {String} key [optional] Storage key.\n     */\n\n  }, {\n    key: 'resetValue',\n    value: function resetValue(key) {\n      if (typeof key === 'undefined') {\n        this.storage.resetAll();\n      } else {\n        this.storage.reset(key);\n      }\n    }\n\n    /**\n     * Destroys the plugin instance.\n     */\n\n  }, {\n    key: 'destroy',\n    value: function destroy() {\n      _get(PersistentState.prototype.__proto__ || Object.getPrototypeOf(PersistentState.prototype), 'destroy', this).call(this);\n    }\n  }]);\n\n  return PersistentState;\n}(_base2.default);\n\n(0, _plugins.registerPlugin)('persistentState', PersistentState);\n\nexports.default = PersistentState;\n\n/***/ }),\n/* 286 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _array = __webpack_require__(2);\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * @class Storage\n * @plugin PersistentState\n */\nvar Storage = function () {\n  function Storage(prefix) {\n    _classCallCheck(this, Storage);\n\n    /**\n     * Prefix for key (id element).\n     *\n     * @type {String}\n     */\n    this.prefix = prefix;\n\n    /**\n     * Saved keys.\n     *\n     * @type {Array}\n     */\n    this.savedKeys = [];\n    this.loadSavedKeys();\n  }\n\n  /**\n   * Save data to localStorage.\n   *\n   * @param {String} key Key string.\n   * @param {Mixed} value Value to save.\n   */\n\n\n  _createClass(Storage, [{\n    key: 'saveValue',\n    value: function saveValue(key, value) {\n      window.localStorage.setItem(this.prefix + '_' + key, JSON.stringify(value));\n\n      if (this.savedKeys.indexOf(key) === -1) {\n        this.savedKeys.push(key);\n        this.saveSavedKeys();\n      }\n    }\n\n    /**\n     * Load data from localStorage.\n     *\n     * @param {String} key Key string.\n     * @param {Object} defaultValue Object containing the loaded data.\n     *\n     * @returns {}\n     */\n\n  }, {\n    key: 'loadValue',\n    value: function loadValue(key, defaultValue) {\n      var itemKey = typeof key === 'undefined' ? defaultValue : key;\n      var value = window.localStorage.getItem(this.prefix + '_' + itemKey);\n\n      return value === null ? void 0 : JSON.parse(value);\n    }\n\n    /**\n     * Reset given data from localStorage.\n     *\n     * @param {String} key Key string.\n     */\n\n  }, {\n    key: 'reset',\n    value: function reset(key) {\n      window.localStorage.removeItem(this.prefix + '_' + key);\n    }\n\n    /**\n     * Reset all data from localStorage.\n     *\n     */\n\n  }, {\n    key: 'resetAll',\n    value: function resetAll() {\n      var _this = this;\n\n      (0, _array.arrayEach)(this.savedKeys, function (value, index) {\n        window.localStorage.removeItem(_this.prefix + '_' + _this.savedKeys[index]);\n      });\n\n      this.clearSavedKeys();\n    }\n\n    /**\n     * Load and save all keys from localStorage.\n     *\n     * @private\n     */\n\n  }, {\n    key: 'loadSavedKeys',\n    value: function loadSavedKeys() {\n      var keysJSON = window.localStorage.getItem(this.prefix + '__persistentStateKeys');\n      var keys = typeof keysJSON === 'string' ? JSON.parse(keysJSON) : void 0;\n\n      this.savedKeys = keys || [];\n    }\n\n    /**\n     * Save saved key in localStorage.\n     *\n     * @private\n     */\n\n  }, {\n    key: 'saveSavedKeys',\n    value: function saveSavedKeys() {\n      window.localStorage.setItem(this.prefix + '__persistentStateKeys', JSON.stringify(this.savedKeys));\n    }\n\n    /**\n     * Clear saved key from localStorage.\n     *\n     * @private\n     */\n\n  }, {\n    key: 'clearSavedKeys',\n    value: function clearSavedKeys() {\n      this.savedKeys.length = 0;\n      this.saveSavedKeys();\n    }\n  }]);\n\n  return Storage;\n}();\n\nexports.default = Storage;\n\n/***/ }),\n/* 287 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _base = __webpack_require__(10);\n\nvar _base2 = _interopRequireDefault(_base);\n\nvar _array = __webpack_require__(2);\n\nvar _feature = __webpack_require__(40);\n\nvar _element = __webpack_require__(0);\n\nvar _ghostTable = __webpack_require__(93);\n\nvar _ghostTable2 = _interopRequireDefault(_ghostTable);\n\nvar _object = __webpack_require__(1);\n\nvar _number = __webpack_require__(6);\n\nvar _plugins = __webpack_require__(8);\n\nvar _samplesGenerator = __webpack_require__(203);\n\nvar _samplesGenerator2 = _interopRequireDefault(_samplesGenerator);\n\nvar _string = __webpack_require__(33);\n\nvar _src = __webpack_require__(4);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar privatePool = new WeakMap();\n\n/**\n * @plugin AutoColumnSize\n *\n * @description\n * This plugin allows to set column widths based on their widest cells.\n *\n * By default, the plugin is declared as `undefined`, which makes it enabled (same as if it was declared as `true`).\n * Enabling this plugin may decrease the overall table performance, as it needs to calculate the widths of all cells to\n * resize the columns accordingly.\n * If you experience problems with the performance, try turning this feature off and declaring the column widths manually.\n *\n * Column width calculations are divided into sync and async part. Each of this parts has their own advantages and\n * disadvantages. Synchronous calculations are faster but they block the browser UI, while the slower asynchronous\n * operations don't block the browser UI.\n *\n * To configure the sync/async distribution, you can pass an absolute value (number of columns) or a percentage value to a config object:\n * ```js\n * // as a number (300 columns in sync, rest async)\n * autoColumnSize: {syncLimit: 300},\n *\n * // as a string (percent)\n * autoColumnSize: {syncLimit: '40%'},\n * ```\n *\n * To configure this plugin see {@link Options#autoColumnSize}.\n *\n * @example\n * ```js\n * const hot = new Handsontable(document.getElementById('example'), {\n *   date: getData(),\n *   autoColumnSize: true\n * });\n * // Access to plugin instance:\n * const plugin = hot.getPlugin('autoColumnSize');\n *\n * plugin.getColumnWidth(4);\n *\n * if (plugin.isEnabled()) {\n *   // code...\n * }\n * ```\n */\n\nvar AutoColumnSize = function (_BasePlugin) {\n  _inherits(AutoColumnSize, _BasePlugin);\n\n  _createClass(AutoColumnSize, null, [{\n    key: 'CALCULATION_STEP',\n    get: function get() {\n      return 50;\n    }\n  }, {\n    key: 'SYNC_CALCULATION_LIMIT',\n    get: function get() {\n      return 50;\n    }\n  }]);\n\n  function AutoColumnSize(hotInstance) {\n    _classCallCheck(this, AutoColumnSize);\n\n    var _this = _possibleConstructorReturn(this, (AutoColumnSize.__proto__ || Object.getPrototypeOf(AutoColumnSize)).call(this, hotInstance));\n\n    privatePool.set(_this, {\n      /**\n       * Cached column header names. It is used to diff current column headers with previous state and detect which\n       * columns width should be updated.\n       *\n       * @private\n       * @type {Array}\n       */\n      cachedColumnHeaders: []\n    });\n    /**\n     * Cached columns widths.\n     *\n     * @type {Number[]}\n     */\n    _this.widths = [];\n    /**\n     * Instance of {@link GhostTable} for rows and columns size calculations.\n     *\n     * @private\n     * @type {GhostTable}\n     */\n    _this.ghostTable = new _ghostTable2.default(_this.hot);\n    /**\n     * Instance of {@link SamplesGenerator} for generating samples necessary for columns width calculations.\n     *\n     * @private\n     * @type {SamplesGenerator}\n     */\n    _this.samplesGenerator = new _samplesGenerator2.default(function (row, column) {\n      var cellMeta = _this.hot.getCellMeta(row, column);\n      var cellValue = '';\n\n      if (!cellMeta.spanned) {\n        cellValue = _this.hot.getDataAtCell(row, column);\n      }\n\n      var bundleCountSeed = 0;\n\n      if (cellMeta.label) {\n        var _cellMeta$label = cellMeta.label,\n            labelValue = _cellMeta$label.value,\n            labelProperty = _cellMeta$label.property;\n\n        var labelText = '';\n\n        if (labelValue) {\n          labelText = typeof labelValue === 'function' ? labelValue(row, column, _this.hot.colToProp(column), cellValue) : labelValue;\n        } else if (labelProperty) {\n          labelText = _this.hot.getDataAtRowProp(row, labelProperty);\n        }\n\n        bundleCountSeed = labelText.length;\n      }\n\n      return { value: cellValue, bundleCountSeed: bundleCountSeed };\n    });\n    /**\n     * `true` only if the first calculation was performed\n     *\n     * @private\n     * @type {Boolean}\n     */\n    _this.firstCalculation = true;\n    /**\n     * `true` if the size calculation is in progress.\n     *\n     * @type {Boolean}\n     */\n    _this.inProgress = false;\n\n    // moved to constructor to allow auto-sizing the columns when the plugin is disabled\n    _this.addHook('beforeColumnResize', function (col, size, isDblClick) {\n      return _this.onBeforeColumnResize(col, size, isDblClick);\n    });\n    return _this;\n  }\n\n  /**\n   * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}\n   * hook and if it returns `true` than the {@link AutoColumnSize#enablePlugin} method is called.\n   *\n   * @returns {Boolean}\n   */\n\n\n  _createClass(AutoColumnSize, [{\n    key: 'isEnabled',\n    value: function isEnabled() {\n      return this.hot.getSettings().autoColumnSize !== false && !this.hot.getSettings().colWidths;\n    }\n\n    /**\n     * Enables the plugin functionality for this Handsontable instance.\n     */\n\n  }, {\n    key: 'enablePlugin',\n    value: function enablePlugin() {\n      var _this2 = this;\n\n      if (this.enabled) {\n        return;\n      }\n\n      var setting = this.hot.getSettings().autoColumnSize;\n\n      if (setting && setting.useHeaders !== null && setting.useHeaders !== void 0) {\n        this.ghostTable.setSetting('useHeaders', setting.useHeaders);\n      }\n\n      this.setSamplingOptions();\n\n      this.addHook('afterLoadData', function () {\n        return _this2.onAfterLoadData();\n      });\n      this.addHook('beforeChange', function (changes) {\n        return _this2.onBeforeChange(changes);\n      });\n\n      this.addHook('beforeRender', function (force) {\n        return _this2.onBeforeRender(force);\n      });\n      this.addHook('modifyColWidth', function (width, col) {\n        return _this2.getColumnWidth(col, width);\n      });\n      this.addHook('afterInit', function () {\n        return _this2.onAfterInit();\n      });\n      _get(AutoColumnSize.prototype.__proto__ || Object.getPrototypeOf(AutoColumnSize.prototype), 'enablePlugin', this).call(this);\n    }\n\n    /**\n     * Updates the plugin state. This method is executed when {@link Core#updateSettings} is invoked.\n     */\n\n  }, {\n    key: 'updatePlugin',\n    value: function updatePlugin() {\n      var changedColumns = this.findColumnsWhereHeaderWasChanged();\n\n      if (changedColumns.length) {\n        this.clearCache(changedColumns);\n      }\n      _get(AutoColumnSize.prototype.__proto__ || Object.getPrototypeOf(AutoColumnSize.prototype), 'updatePlugin', this).call(this);\n    }\n\n    /**\n     * Disables the plugin functionality for this Handsontable instance.\n     */\n\n  }, {\n    key: 'disablePlugin',\n    value: function disablePlugin() {\n      _get(AutoColumnSize.prototype.__proto__ || Object.getPrototypeOf(AutoColumnSize.prototype), 'disablePlugin', this).call(this);\n    }\n\n    /**\n     * Calculates a columns width.\n     *\n     * @param {Number|Object} colRange Column index or an object with `from` and `to` indexes as a range.\n     * @param {Number|Object} rowRange Row index or an object with `from` and `to` indexes as a range.\n     * @param {Boolean} [force=false] If `true` the calculation will be processed regardless of whether the width exists in the cache.\n     */\n\n  }, {\n    key: 'calculateColumnsWidth',\n    value: function calculateColumnsWidth() {\n      var colRange = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : { from: 0, to: this.hot.countCols() - 1 };\n\n      var _this3 = this;\n\n      var rowRange = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : { from: 0, to: this.hot.countRows() - 1 };\n      var force = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n      var columnsRange = typeof colRange === 'number' ? { from: colRange, to: colRange } : colRange;\n      var rowsRange = typeof rowRange === 'number' ? { from: rowRange, to: rowRange } : rowRange;\n\n      (0, _number.rangeEach)(columnsRange.from, columnsRange.to, function (col) {\n        if (force || _this3.widths[col] === void 0 && !_this3.hot._getColWidthFromSettings(col)) {\n          var samples = _this3.samplesGenerator.generateColumnSamples(col, rowsRange);\n\n          (0, _array.arrayEach)(samples, function (_ref) {\n            var _ref2 = _slicedToArray(_ref, 2),\n                column = _ref2[0],\n                sample = _ref2[1];\n\n            return _this3.ghostTable.addColumn(column, sample);\n          });\n        }\n      });\n\n      if (this.ghostTable.columns.length) {\n        this.ghostTable.getWidths(function (col, width) {\n          _this3.widths[col] = width;\n        });\n        this.ghostTable.clean();\n      }\n    }\n\n    /**\n     * Calculates all columns width. The calculated column will be cached in the {@link AutoColumnSize#widths} property.\n     * To retrieve width for specyfied column use {@link AutoColumnSize#getColumnWidth} method.\n     *\n     * @param {Object|Number} rowRange Row index or an object with `from` and `to` properties which define row range.\n     */\n\n  }, {\n    key: 'calculateAllColumnsWidth',\n    value: function calculateAllColumnsWidth() {\n      var _this4 = this;\n\n      var rowRange = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : { from: 0, to: this.hot.countRows() - 1 };\n\n      var current = 0;\n      var length = this.hot.countCols() - 1;\n      var timer = null;\n\n      this.inProgress = true;\n\n      var loop = function loop() {\n        // When hot was destroyed after calculating finished cancel frame\n        if (!_this4.hot) {\n          (0, _feature.cancelAnimationFrame)(timer);\n          _this4.inProgress = false;\n\n          return;\n        }\n\n        _this4.calculateColumnsWidth({\n          from: current,\n          to: Math.min(current + AutoColumnSize.CALCULATION_STEP, length)\n        }, rowRange);\n\n        current = current + AutoColumnSize.CALCULATION_STEP + 1;\n\n        if (current < length) {\n          timer = (0, _feature.requestAnimationFrame)(loop);\n        } else {\n          (0, _feature.cancelAnimationFrame)(timer);\n          _this4.inProgress = false;\n\n          // @TODO Should call once per render cycle, currently fired separately in different plugins\n          _this4.hot.view.wt.wtOverlays.adjustElementsSize(true);\n          // tmp\n          if (_this4.hot.view.wt.wtOverlays.leftOverlay.needFullRender) {\n            _this4.hot.view.wt.wtOverlays.leftOverlay.clone.draw();\n          }\n        }\n      };\n      // sync\n      if (this.firstCalculation && this.getSyncCalculationLimit()) {\n        this.calculateColumnsWidth({ from: 0, to: this.getSyncCalculationLimit() }, rowRange);\n        this.firstCalculation = false;\n        current = this.getSyncCalculationLimit() + 1;\n      }\n      // async\n      if (current < length) {\n        loop();\n      } else {\n        this.inProgress = false;\n      }\n    }\n\n    /**\n     * Sets the sampling options.\n     *\n     * @private\n     */\n\n  }, {\n    key: 'setSamplingOptions',\n    value: function setSamplingOptions() {\n      var setting = this.hot.getSettings().autoColumnSize;\n      var samplingRatio = setting && (0, _object.hasOwnProperty)(setting, 'samplingRatio') ? this.hot.getSettings().autoColumnSize.samplingRatio : void 0;\n      var allowSampleDuplicates = setting && (0, _object.hasOwnProperty)(setting, 'allowSampleDuplicates') ? this.hot.getSettings().autoColumnSize.allowSampleDuplicates : void 0;\n\n      if (samplingRatio && !isNaN(samplingRatio)) {\n        this.samplesGenerator.setSampleCount(parseInt(samplingRatio, 10));\n      }\n\n      if (allowSampleDuplicates) {\n        this.samplesGenerator.setAllowDuplicates(allowSampleDuplicates);\n      }\n    }\n\n    /**\n     * Recalculates all columns width (overwrite cache values).\n     */\n\n  }, {\n    key: 'recalculateAllColumnsWidth',\n    value: function recalculateAllColumnsWidth() {\n      if (this.hot.view && (0, _element.isVisible)(this.hot.view.wt.wtTable.TABLE)) {\n        this.clearCache();\n        this.calculateAllColumnsWidth();\n      }\n    }\n\n    /**\n     * Gets value which tells how many columns should be calculated synchronously (rest of the columns will be calculated\n     * asynchronously). The limit is calculated based on `syncLimit` set to `autoColumnSize` option (see {@link Options#autoColumnSize}).\n     *\n     * @returns {Number}\n     */\n\n  }, {\n    key: 'getSyncCalculationLimit',\n    value: function getSyncCalculationLimit() {\n      /* eslint-disable no-bitwise */\n      var limit = AutoColumnSize.SYNC_CALCULATION_LIMIT;\n      var colsLimit = this.hot.countCols() - 1;\n\n      if ((0, _object.isObject)(this.hot.getSettings().autoColumnSize)) {\n        limit = this.hot.getSettings().autoColumnSize.syncLimit;\n\n        if ((0, _string.isPercentValue)(limit)) {\n          limit = (0, _number.valueAccordingPercent)(colsLimit, limit);\n        } else {\n          // Force to Number\n          limit >>= 0;\n        }\n      }\n\n      return Math.min(limit, colsLimit);\n    }\n\n    /**\n     * Gets the calculated column width.\n     *\n     * @param {Number} column Column index.\n     * @param {Number} [defaultWidth] Default column width. It will be picked up if no calculated width found.\n     * @param {Boolean} [keepMinimum=true] If `true` then returned value won't be smaller then 50 (default column width).\n     * @returns {Number}\n     */\n\n  }, {\n    key: 'getColumnWidth',\n    value: function getColumnWidth(column) {\n      var defaultWidth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : void 0;\n      var keepMinimum = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n\n      var width = defaultWidth;\n\n      if (width === void 0) {\n        width = this.widths[column];\n\n        if (keepMinimum && typeof width === 'number') {\n          width = Math.max(width, _src.ViewportColumnsCalculator.DEFAULT_WIDTH);\n        }\n      }\n\n      return width;\n    }\n\n    /**\n     * Gets the first visible column.\n     *\n     * @returns {Number} Returns column index or -1 if table is not rendered.\n     */\n\n  }, {\n    key: 'getFirstVisibleColumn',\n    value: function getFirstVisibleColumn() {\n      var wot = this.hot.view.wt;\n\n      if (wot.wtViewport.columnsVisibleCalculator) {\n        return wot.wtTable.getFirstVisibleColumn();\n      }\n      if (wot.wtViewport.columnsRenderCalculator) {\n        return wot.wtTable.getFirstRenderedColumn();\n      }\n\n      return -1;\n    }\n\n    /**\n     * Gets the last visible column.\n     *\n     * @returns {Number} Returns column index or -1 if table is not rendered.\n     */\n\n  }, {\n    key: 'getLastVisibleColumn',\n    value: function getLastVisibleColumn() {\n      var wot = this.hot.view.wt;\n\n      if (wot.wtViewport.columnsVisibleCalculator) {\n        return wot.wtTable.getLastVisibleColumn();\n      }\n      if (wot.wtViewport.columnsRenderCalculator) {\n        return wot.wtTable.getLastRenderedColumn();\n      }\n\n      return -1;\n    }\n\n    /**\n     * Collects all columns which titles has been changed in comparison to the previous state.\n     *\n     * @private\n     * @returns {Array} It returns an array of physical column indexes.\n     */\n\n  }, {\n    key: 'findColumnsWhereHeaderWasChanged',\n    value: function findColumnsWhereHeaderWasChanged() {\n      var columnHeaders = this.hot.getColHeader();\n\n      var _privatePool$get = privatePool.get(this),\n          cachedColumnHeaders = _privatePool$get.cachedColumnHeaders;\n\n      var changedColumns = (0, _array.arrayReduce)(columnHeaders, function (acc, columnTitle, physicalColumn) {\n        var cachedColumnsLength = cachedColumnHeaders.length;\n\n        if (cachedColumnsLength - 1 < physicalColumn || cachedColumnHeaders[physicalColumn] !== columnTitle) {\n          acc.push(physicalColumn);\n        }\n        if (cachedColumnsLength - 1 < physicalColumn) {\n          cachedColumnHeaders.push(columnTitle);\n        } else {\n          cachedColumnHeaders[physicalColumn] = columnTitle;\n        }\n\n        return acc;\n      }, []);\n\n      return changedColumns;\n    }\n\n    /**\n     * Clears cache of calculated column widths. If you want to clear only selected columns pass an array with their indexes.\n     * Otherwise whole cache will be cleared.\n     *\n     * @param {Number[]} [columns] List of physical column indexes to clear.\n     */\n\n  }, {\n    key: 'clearCache',\n    value: function clearCache() {\n      var _this5 = this;\n\n      var columns = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n\n      if (columns.length) {\n        (0, _array.arrayEach)(columns, function (physicalIndex) {\n          _this5.widths[physicalIndex] = void 0;\n        });\n      } else {\n        this.widths.length = 0;\n      }\n    }\n\n    /**\n     * Checks if all widths were calculated. If not then return `true` (need recalculate).\n     *\n     * @returns {Boolean}\n     */\n\n  }, {\n    key: 'isNeedRecalculate',\n    value: function isNeedRecalculate() {\n      return !!(0, _array.arrayFilter)(this.widths, function (item) {\n        return item === void 0;\n      }).length;\n    }\n\n    /**\n     * On before render listener.\n     *\n     * @private\n     */\n\n  }, {\n    key: 'onBeforeRender',\n    value: function onBeforeRender() {\n      var force = this.hot.renderCall;\n      var rowsCount = this.hot.countRows();\n\n      // Keep last column widths unchanged for situation when all rows was deleted or trimmed (pro #6)\n      if (!rowsCount) {\n        return;\n      }\n\n      this.calculateColumnsWidth({ from: this.getFirstVisibleColumn(), to: this.getLastVisibleColumn() }, void 0, force);\n\n      if (this.isNeedRecalculate() && !this.inProgress) {\n        this.calculateAllColumnsWidth();\n      }\n    }\n\n    /**\n     * On after load data listener.\n     *\n     * @private\n     */\n\n  }, {\n    key: 'onAfterLoadData',\n    value: function onAfterLoadData() {\n      var _this6 = this;\n\n      if (this.hot.view) {\n        this.recalculateAllColumnsWidth();\n      } else {\n        // first load - initialization\n        setTimeout(function () {\n          if (_this6.hot) {\n            _this6.recalculateAllColumnsWidth();\n          }\n        }, 0);\n      }\n    }\n\n    /**\n     * On before change listener.\n     *\n     * @private\n     * @param {Array} changes\n     */\n\n  }, {\n    key: 'onBeforeChange',\n    value: function onBeforeChange(changes) {\n      var _this7 = this;\n\n      var changedColumns = (0, _array.arrayMap)(changes, function (_ref3) {\n        var _ref4 = _slicedToArray(_ref3, 2),\n            column = _ref4[1];\n\n        return _this7.hot.propToCol(column);\n      });\n\n      this.clearCache(changedColumns);\n    }\n\n    /**\n     * On before column resize listener.\n     *\n     * @private\n     * @param {Number} col\n     * @param {Number} size\n     * @param {Boolean} isDblClick\n     * @returns {Number}\n     */\n\n  }, {\n    key: 'onBeforeColumnResize',\n    value: function onBeforeColumnResize(col, size, isDblClick) {\n      var newSize = size;\n\n      if (isDblClick) {\n        this.calculateColumnsWidth(col, void 0, true);\n\n        newSize = this.getColumnWidth(col, void 0, false);\n      }\n\n      return newSize;\n    }\n\n    /**\n     * On after Handsontable init fill plugin with all necessary values.\n     *\n     * @private\n     */\n\n  }, {\n    key: 'onAfterInit',\n    value: function onAfterInit() {\n      privatePool.get(this).cachedColumnHeaders = this.hot.getColHeader();\n    }\n\n    /**\n     * Destroys the plugin instance.\n     */\n\n  }, {\n    key: 'destroy',\n    value: function destroy() {\n      this.ghostTable.clean();\n      _get(AutoColumnSize.prototype.__proto__ || Object.getPrototypeOf(AutoColumnSize.prototype), 'destroy', this).call(this);\n    }\n  }]);\n\n  return AutoColumnSize;\n}(_base2.default);\n\n(0, _plugins.registerPlugin)('autoColumnSize', AutoColumnSize);\n\nexports.default = AutoColumnSize;\n\n/***/ }),\n/* 288 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _base = __webpack_require__(10);\n\nvar _base2 = _interopRequireDefault(_base);\n\nvar _pluginHooks = __webpack_require__(16);\n\nvar _pluginHooks2 = _interopRequireDefault(_pluginHooks);\n\nvar _element = __webpack_require__(0);\n\nvar _eventManager = __webpack_require__(5);\n\nvar _eventManager2 = _interopRequireDefault(_eventManager);\n\nvar _plugins = __webpack_require__(8);\n\nvar _src = __webpack_require__(4);\n\nvar _utils = __webpack_require__(289);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n_pluginHooks2.default.getSingleton().register('modifyAutofillRange');\n_pluginHooks2.default.getSingleton().register('beforeAutofill');\n\nvar INSERT_ROW_ALTER_ACTION_NAME = 'insert_row';\nvar INTERVAL_FOR_ADDING_ROW = 200;\n\n/**\n * This plugin provides \"drag-down\" and \"copy-down\" functionalities, both operated using the small square in the right\n * bottom of the cell selection.\n *\n * \"Drag-down\" expands the value of the selected cells to the neighbouring cells when you drag the small square in the corner.\n *\n * \"Copy-down\" copies the value of the selection to all empty cells below when you double click the small square.\n *\n * @class Autofill\n * @plugin Autofill\n */\n\nvar Autofill = function (_BasePlugin) {\n  _inherits(Autofill, _BasePlugin);\n\n  function Autofill(hotInstance) {\n    _classCallCheck(this, Autofill);\n\n    /**\n     * Event manager instance.\n     *\n     * @private\n     * @type {EventManager}\n     */\n    var _this = _possibleConstructorReturn(this, (Autofill.__proto__ || Object.getPrototypeOf(Autofill)).call(this, hotInstance));\n\n    _this.eventManager = new _eventManager2.default(_this);\n    /**\n     * Specifies if adding new row started.\n     *\n     * @private\n     * @type {Boolean}\n     */\n    _this.addingStarted = false;\n    /**\n     * Specifies if there was mouse down on the cell corner.\n     *\n     * @private\n     * @type {Boolean}\n     */\n    _this.mouseDownOnCellCorner = false;\n    /**\n     * Specifies if mouse was dragged outside Handsontable.\n     *\n     * @private\n     * @type {Boolean}\n     */\n    _this.mouseDragOutside = false;\n    /**\n     * Specifies how many cell levels were dragged using the handle.\n     *\n     * @private\n     * @type {Boolean}\n     */\n    _this.handleDraggedCells = 0;\n    /**\n     * Specifies allowed directions of drag (`'horizontal'` or '`vertical`').\n     *\n     * @private\n     * @type {String[]}\n     */\n    _this.directions = [];\n    /**\n     * Specifies if can insert new rows if needed.\n     *\n     * @type {Boolean}\n     */\n    _this.autoInsertRow = false;\n    return _this;\n  }\n\n  /**\n   * Checks if the plugin is enabled in the Handsontable settings.\n   *\n   * @returns {Boolean}\n   */\n\n\n  _createClass(Autofill, [{\n    key: 'isEnabled',\n    value: function isEnabled() {\n      return this.hot.getSettings().fillHandle;\n    }\n\n    /**\n     * Enables the plugin functionality for this Handsontable instance.\n     */\n\n  }, {\n    key: 'enablePlugin',\n    value: function enablePlugin() {\n      var _this2 = this;\n\n      if (this.enabled) {\n        return;\n      }\n\n      this.mapSettings();\n      this.registerEvents();\n\n      this.addHook('afterOnCellCornerMouseDown', function (event) {\n        return _this2.onAfterCellCornerMouseDown(event);\n      });\n      this.addHook('afterOnCellCornerDblClick', function (event) {\n        return _this2.onCellCornerDblClick(event);\n      });\n      this.addHook('beforeOnCellMouseOver', function (event, coords) {\n        return _this2.onBeforeCellMouseOver(coords);\n      });\n\n      _get(Autofill.prototype.__proto__ || Object.getPrototypeOf(Autofill.prototype), 'enablePlugin', this).call(this);\n    }\n\n    /**\n     * Updates the plugin state. This method is executed when {@link Core#updateSettings} is invoked.\n     */\n\n  }, {\n    key: 'updatePlugin',\n    value: function updatePlugin() {\n      this.disablePlugin();\n      this.enablePlugin();\n      _get(Autofill.prototype.__proto__ || Object.getPrototypeOf(Autofill.prototype), 'updatePlugin', this).call(this);\n    }\n\n    /**\n     * Disables the plugin functionality for this Handsontable instance.\n     */\n\n  }, {\n    key: 'disablePlugin',\n    value: function disablePlugin() {\n      this.clearMappedSettings();\n      _get(Autofill.prototype.__proto__ || Object.getPrototypeOf(Autofill.prototype), 'disablePlugin', this).call(this);\n    }\n\n    /**\n     * Gets selection data\n     *\n     * @private\n     * @returns {Array} Array with the data.\n     */\n\n  }, {\n    key: 'getSelectionData',\n    value: function getSelectionData() {\n      var selRange = {\n        from: this.hot.getSelectedRangeLast().from,\n        to: this.hot.getSelectedRangeLast().to\n      };\n\n      return this.hot.getData(selRange.from.row, selRange.from.col, selRange.to.row, selRange.to.col);\n    }\n\n    /**\n     * Try to apply fill values to the area in fill border, omitting the selection border.\n     *\n     * @private\n     * @returns {Boolean} reports if fill was applied.\n     *\n     * @fires Hooks#modifyAutofillRange\n     * @fires Hooks#beforeAutofill\n     */\n\n  }, {\n    key: 'fillIn',\n    value: function fillIn() {\n      if (this.hot.selection.highlight.getFill().isEmpty()) {\n        return false;\n      }\n\n      var cornersOfSelectionAndDragAreas = this.hot.selection.highlight.getFill().getCorners();\n\n      this.resetSelectionOfDraggedArea();\n\n      var cornersOfSelectedCells = this.getCornersOfSelectedCells();\n      cornersOfSelectionAndDragAreas = this.hot.runHooks('modifyAutofillRange', cornersOfSelectionAndDragAreas, cornersOfSelectedCells);\n\n      var _getDragDirectionAndR = (0, _utils.getDragDirectionAndRange)(cornersOfSelectedCells, cornersOfSelectionAndDragAreas),\n          directionOfDrag = _getDragDirectionAndR.directionOfDrag,\n          startOfDragCoords = _getDragDirectionAndR.startOfDragCoords,\n          endOfDragCoords = _getDragDirectionAndR.endOfDragCoords;\n\n      if (startOfDragCoords && startOfDragCoords.row > -1 && startOfDragCoords.col > -1) {\n        var selectionData = this.getSelectionData();\n\n        this.hot.runHooks('beforeAutofill', startOfDragCoords, endOfDragCoords, selectionData);\n\n        var deltas = (0, _utils.getDeltas)(startOfDragCoords, endOfDragCoords, selectionData, directionOfDrag);\n        var fillData = selectionData;\n\n        if (['up', 'left'].indexOf(directionOfDrag) > -1) {\n          fillData = [];\n\n          var dragLength = null;\n          var fillOffset = null;\n\n          if (directionOfDrag === 'up') {\n            dragLength = endOfDragCoords.row - startOfDragCoords.row + 1;\n            fillOffset = dragLength % selectionData.length;\n\n            for (var i = 0; i < dragLength; i++) {\n              fillData.push(selectionData[(i + (selectionData.length - fillOffset)) % selectionData.length]);\n            }\n          } else {\n            dragLength = endOfDragCoords.col - startOfDragCoords.col + 1;\n            fillOffset = dragLength % selectionData[0].length;\n\n            for (var _i = 0; _i < selectionData.length; _i++) {\n              fillData.push([]);\n              for (var j = 0; j < dragLength; j++) {\n                fillData[_i].push(selectionData[_i][(j + (selectionData[_i].length - fillOffset)) % selectionData[_i].length]);\n              }\n            }\n          }\n        }\n\n        this.hot.populateFromArray(startOfDragCoords.row, startOfDragCoords.col, fillData, endOfDragCoords.row, endOfDragCoords.col, this.pluginName + '.fill', null, directionOfDrag, deltas);\n\n        this.setSelection(cornersOfSelectionAndDragAreas);\n      } else {\n        // reset to avoid some range bug\n        this.hot._refreshBorders();\n      }\n\n      return true;\n    }\n\n    /**\n     * Reduces the selection area if the handle was dragged outside of the table or on headers.\n     *\n     * @private\n     * @param {CellCoords} coords indexes of selection corners.\n     * @returns {CellCoords}\n     */\n\n  }, {\n    key: 'reduceSelectionAreaIfNeeded',\n    value: function reduceSelectionAreaIfNeeded(coords) {\n      if (coords.row < 0) {\n        coords.row = 0;\n      }\n\n      if (coords.col < 0) {\n        coords.col = 0;\n      }\n      return coords;\n    }\n\n    /**\n     * Gets the coordinates of the drag & drop borders.\n     *\n     * @private\n     * @param {CellCoords} coordsOfSelection `CellCoords` coord object.\n     * @returns {Array}\n     */\n\n  }, {\n    key: 'getCoordsOfDragAndDropBorders',\n    value: function getCoordsOfDragAndDropBorders(coordsOfSelection) {\n      var topLeftCorner = this.hot.getSelectedRangeLast().getTopLeftCorner();\n      var bottomRightCorner = this.hot.getSelectedRangeLast().getBottomRightCorner();\n      var coords = void 0;\n\n      if (this.directions.includes(_utils.DIRECTIONS.vertical) && (bottomRightCorner.row < coordsOfSelection.row || topLeftCorner.row > coordsOfSelection.row)) {\n        coords = new _src.CellCoords(coordsOfSelection.row, bottomRightCorner.col);\n      } else if (this.directions.includes(_utils.DIRECTIONS.horizontal)) {\n        coords = new _src.CellCoords(bottomRightCorner.row, coordsOfSelection.col);\n      } else {\n        // wrong direction\n        return;\n      }\n\n      return this.reduceSelectionAreaIfNeeded(coords);\n    }\n\n    /**\n     * Show the fill border.\n     *\n     * @private\n     * @param {CellCoords} coordsOfSelection `CellCoords` coord object.\n     */\n\n  }, {\n    key: 'showBorder',\n    value: function showBorder(coordsOfSelection) {\n      var coordsOfDragAndDropBorders = this.getCoordsOfDragAndDropBorders(coordsOfSelection);\n\n      if (coordsOfDragAndDropBorders) {\n        this.redrawBorders(coordsOfDragAndDropBorders);\n      }\n    }\n\n    /**\n     * Add new row\n     *\n     * @private\n     */\n\n  }, {\n    key: 'addRow',\n    value: function addRow() {\n      var _this3 = this;\n\n      this.hot._registerTimeout(setTimeout(function () {\n        _this3.hot.alter(INSERT_ROW_ALTER_ACTION_NAME, void 0, 1, _this3.pluginName + '.fill');\n\n        _this3.addingStarted = false;\n      }, INTERVAL_FOR_ADDING_ROW));\n    }\n\n    /**\n     * Add new rows if they are needed to continue auto-filling values.\n     *\n     * @private\n     */\n\n  }, {\n    key: 'addNewRowIfNeeded',\n    value: function addNewRowIfNeeded() {\n      if (this.hot.selection.highlight.getFill().cellRange && this.addingStarted === false && this.autoInsertRow) {\n        var cornersOfSelectedCells = this.hot.getSelectedLast();\n        var cornersOfSelectedDragArea = this.hot.selection.highlight.getFill().getCorners();\n        var nrOfTableRows = this.hot.countRows();\n\n        if (cornersOfSelectedCells[2] < nrOfTableRows - 1 && cornersOfSelectedDragArea[2] === nrOfTableRows - 1) {\n          this.addingStarted = true;\n\n          this.addRow();\n        }\n      }\n    }\n\n    /**\n     * Get corners of selected cells.\n     *\n     * @private\n     * @returns {Array}\n     */\n\n  }, {\n    key: 'getCornersOfSelectedCells',\n    value: function getCornersOfSelectedCells() {\n      if (this.hot.selection.isMultiple()) {\n        return this.hot.selection.highlight.createOrGetArea().getCorners();\n      }\n      return this.hot.selection.highlight.getCell().getCorners();\n    }\n\n    /**\n     * Get index of last adjacent filled in row\n     *\n     * @private\n     * @param {Array} cornersOfSelectedCells indexes of selection corners.\n     * @returns {Number} gives number greater than or equal to zero when selection adjacent can be applied.\n     * or -1 when selection adjacent can't be applied\n     */\n\n  }, {\n    key: 'getIndexOfLastAdjacentFilledInRow',\n    value: function getIndexOfLastAdjacentFilledInRow(cornersOfSelectedCells) {\n      var data = this.hot.getData();\n      var nrOfTableRows = this.hot.countRows();\n      var lastFilledInRowIndex = void 0;\n\n      for (var rowIndex = cornersOfSelectedCells[2] + 1; rowIndex < nrOfTableRows; rowIndex++) {\n        for (var columnIndex = cornersOfSelectedCells[1]; columnIndex <= cornersOfSelectedCells[3]; columnIndex++) {\n          var dataInCell = data[rowIndex][columnIndex];\n\n          if (dataInCell) {\n            return -1;\n          }\n        }\n\n        var dataInNextLeftCell = data[rowIndex][cornersOfSelectedCells[1] - 1];\n        var dataInNextRightCell = data[rowIndex][cornersOfSelectedCells[3] + 1];\n\n        if (!!dataInNextLeftCell || !!dataInNextRightCell) {\n          lastFilledInRowIndex = rowIndex;\n        }\n      }\n\n      return lastFilledInRowIndex;\n    }\n\n    /**\n     * Adds a selection from the start area to the specific row index.\n     *\n     * @private\n     * @param {Array} selectStartArea selection area from which we start to create more comprehensive selection.\n     * @param {Number} rowIndex\n     */\n\n  }, {\n    key: 'addSelectionFromStartAreaToSpecificRowIndex',\n    value: function addSelectionFromStartAreaToSpecificRowIndex(selectStartArea, rowIndex) {\n      this.hot.selection.highlight.getFill().clear().add(new _src.CellCoords(selectStartArea[0], selectStartArea[1])).add(new _src.CellCoords(rowIndex, selectStartArea[3]));\n    }\n\n    /**\n     * Sets selection based on passed corners.\n     *\n     * @private\n     * @param {Array} cornersOfArea\n     */\n\n  }, {\n    key: 'setSelection',\n    value: function setSelection(cornersOfArea) {\n      var _hot;\n\n      (_hot = this.hot).selectCell.apply(_hot, _toConsumableArray(cornersOfArea).concat([false, false]));\n    }\n\n    /**\n     * Try to select cells down to the last row in the left column and then returns if selection was applied.\n     *\n     * @private\n     * @returns {Boolean}\n     */\n\n  }, {\n    key: 'selectAdjacent',\n    value: function selectAdjacent() {\n      var cornersOfSelectedCells = this.getCornersOfSelectedCells();\n      var lastFilledInRowIndex = this.getIndexOfLastAdjacentFilledInRow(cornersOfSelectedCells);\n\n      if (lastFilledInRowIndex === -1 || lastFilledInRowIndex === void 0) {\n        return false;\n      }\n\n      this.addSelectionFromStartAreaToSpecificRowIndex(cornersOfSelectedCells, lastFilledInRowIndex);\n\n      return true;\n    }\n\n    /**\n     * Resets selection of dragged area.\n     *\n     * @private\n     */\n\n  }, {\n    key: 'resetSelectionOfDraggedArea',\n    value: function resetSelectionOfDraggedArea() {\n      this.handleDraggedCells = 0;\n\n      this.hot.selection.highlight.getFill().clear();\n    }\n\n    /**\n     * Redraws borders.\n     *\n     * @private\n     * @param {CellCoords} coords `CellCoords` coord object.\n     */\n\n  }, {\n    key: 'redrawBorders',\n    value: function redrawBorders(coords) {\n      this.hot.selection.highlight.getFill().clear().add(this.hot.getSelectedRangeLast().from).add(this.hot.getSelectedRangeLast().to).add(coords);\n\n      this.hot.view.render();\n    }\n\n    /**\n     * Get if mouse was dragged outside.\n     *\n     * @private\n     * @param {MouseEvent} event `mousemove` event properties.\n     * @returns {Boolean}\n     */\n\n  }, {\n    key: 'getIfMouseWasDraggedOutside',\n    value: function getIfMouseWasDraggedOutside(event) {\n      var tableBottom = (0, _element.offset)(this.hot.table).top - (window.pageYOffset || document.documentElement.scrollTop) + (0, _element.outerHeight)(this.hot.table);\n      var tableRight = (0, _element.offset)(this.hot.table).left - (window.pageXOffset || document.documentElement.scrollLeft) + (0, _element.outerWidth)(this.hot.table);\n\n      return event.clientY > tableBottom && event.clientX <= tableRight;\n    }\n\n    /**\n     * Bind the events used by the plugin.\n     *\n     * @private\n     */\n\n  }, {\n    key: 'registerEvents',\n    value: function registerEvents() {\n      var _this4 = this;\n\n      this.eventManager.addEventListener(document.documentElement, 'mouseup', function () {\n        return _this4.onMouseUp();\n      });\n      this.eventManager.addEventListener(document.documentElement, 'mousemove', function (event) {\n        return _this4.onMouseMove(event);\n      });\n    }\n\n    /**\n     * On cell corner double click callback.\n     *\n     * @private\n     */\n\n  }, {\n    key: 'onCellCornerDblClick',\n    value: function onCellCornerDblClick() {\n      var selectionApplied = this.selectAdjacent();\n\n      if (selectionApplied) {\n        this.fillIn();\n      }\n    }\n\n    /**\n     * On after cell corner mouse down listener.\n     *\n     * @private\n     */\n\n  }, {\n    key: 'onAfterCellCornerMouseDown',\n    value: function onAfterCellCornerMouseDown() {\n      this.handleDraggedCells = 1;\n      this.mouseDownOnCellCorner = true;\n    }\n\n    /**\n     * On before cell mouse over listener.\n     *\n     * @private\n     * @param {CellCoords} coords `CellCoords` coord object.\n     */\n\n  }, {\n    key: 'onBeforeCellMouseOver',\n    value: function onBeforeCellMouseOver(coords) {\n      if (this.mouseDownOnCellCorner && !this.hot.view.isMouseDown() && this.handleDraggedCells) {\n        this.handleDraggedCells += 1;\n\n        this.showBorder(coords);\n        this.addNewRowIfNeeded();\n      }\n    }\n\n    /**\n     * On mouse up listener.\n     *\n     * @private\n     */\n\n  }, {\n    key: 'onMouseUp',\n    value: function onMouseUp() {\n      if (this.handleDraggedCells) {\n        if (this.handleDraggedCells > 1) {\n          this.fillIn();\n        }\n\n        this.handleDraggedCells = 0;\n        this.mouseDownOnCellCorner = false;\n      }\n    }\n\n    /**\n     * On mouse move listener.\n     *\n     * @private\n     * @param {MouseEvent} event `mousemove` event properties.\n     */\n\n  }, {\n    key: 'onMouseMove',\n    value: function onMouseMove(event) {\n      var mouseWasDraggedOutside = this.getIfMouseWasDraggedOutside(event);\n\n      if (this.addingStarted === false && this.handleDraggedCells > 0 && mouseWasDraggedOutside) {\n        this.mouseDragOutside = true;\n        this.addingStarted = true;\n      } else {\n        this.mouseDragOutside = false;\n      }\n\n      if (this.mouseDragOutside && this.autoInsertRow) {\n        this.addRow();\n      }\n    }\n\n    /**\n     * Clears mapped settings.\n     *\n     * @private\n     */\n\n  }, {\n    key: 'clearMappedSettings',\n    value: function clearMappedSettings() {\n      this.directions.length = 0;\n      this.autoInsertRow = false;\n    }\n\n    /**\n     * Map settings.\n     *\n     * @private\n     */\n\n  }, {\n    key: 'mapSettings',\n    value: function mapSettings() {\n      var mappedSettings = (0, _utils.getMappedFillHandleSetting)(this.hot.getSettings().fillHandle);\n      this.directions = mappedSettings.directions;\n      this.autoInsertRow = mappedSettings.autoInsertRow;\n    }\n\n    /**\n     * Destroys the plugin instance.\n     */\n\n  }, {\n    key: 'destroy',\n    value: function destroy() {\n      _get(Autofill.prototype.__proto__ || Object.getPrototypeOf(Autofill.prototype), 'destroy', this).call(this);\n    }\n  }]);\n\n  return Autofill;\n}(_base2.default);\n\n(0, _plugins.registerPlugin)('autofill', Autofill);\n\nexports.default = Autofill;\n\n/***/ }),\n/* 289 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports.DIRECTIONS = undefined;\nexports.getDeltas = getDeltas;\nexports.getDragDirectionAndRange = getDragDirectionAndRange;\nexports.getMappedFillHandleSetting = getMappedFillHandleSetting;\n\nvar _object = __webpack_require__(1);\n\nvar _mixed = __webpack_require__(11);\n\nvar _src = __webpack_require__(4);\n\nvar DIRECTIONS = exports.DIRECTIONS = {\n  horizontal: 'horizontal',\n  vertical: 'vertical'\n};\n\n/**\n * Get deltas array.\n *\n * @param {CellCoords} start\n * @param {CellCoords} end\n * @param {Array} data\n * @param {String} direction\n * @returns {Array}\n */\nfunction getDeltas(start, end, data, direction) {\n  var rowsLength = data.length;\n  var columnsLength = data ? data[0].length : 0;\n  var deltas = [];\n  var diffRow = end.row - start.row;\n  var diffCol = end.col - start.col;\n\n  if (['down', 'up'].indexOf(direction) !== -1) {\n    var arr = [];\n\n    for (var col = 0; col <= diffCol; col++) {\n      var startValue = parseInt(data[0][col], 10);\n      var endValue = parseInt(data[rowsLength - 1][col], 10);\n      var delta = (direction === 'down' ? endValue - startValue : startValue - endValue) / (rowsLength - 1) || 0;\n\n      arr.push(delta);\n    }\n\n    deltas.push(arr);\n  }\n\n  if (['right', 'left'].indexOf(direction) !== -1) {\n    for (var row = 0; row <= diffRow; row++) {\n      var _startValue = parseInt(data[row][0], 10);\n      var _endValue = parseInt(data[row][columnsLength - 1], 10);\n      var _delta = (direction === 'right' ? _endValue - _startValue : _startValue - _endValue) / (columnsLength - 1) || 0;\n\n      deltas.push([_delta]);\n    }\n  }\n\n  return deltas;\n}\n\n/**\n * Get direction between positions and cords of selections difference (drag area)\n *\n * @param {Array} startSelection\n * @param {Array} endSelection\n * @returns {{direction: String, start: CellCoords, end: CellCoords}}\n */\nfunction getDragDirectionAndRange(startSelection, endSelection) {\n  var startOfDragCoords = void 0;\n  var endOfDragCoords = void 0;\n  var directionOfDrag = void 0;\n\n  if (endSelection[0] === startSelection[0] && endSelection[1] < startSelection[1]) {\n    directionOfDrag = 'left';\n\n    startOfDragCoords = new _src.CellCoords(endSelection[0], endSelection[1]);\n    endOfDragCoords = new _src.CellCoords(endSelection[2], startSelection[1] - 1);\n  } else if (endSelection[2] === startSelection[2] && endSelection[0] === startSelection[0] && endSelection[3] > startSelection[3]) {\n    directionOfDrag = 'right';\n\n    startOfDragCoords = new _src.CellCoords(endSelection[0], startSelection[3] + 1);\n    endOfDragCoords = new _src.CellCoords(endSelection[2], endSelection[3]);\n  } else if (endSelection[0] < startSelection[0] && endSelection[1] === startSelection[1]) {\n    directionOfDrag = 'up';\n\n    startOfDragCoords = new _src.CellCoords(endSelection[0], endSelection[1]);\n    endOfDragCoords = new _src.CellCoords(startSelection[0] - 1, endSelection[3]);\n  } else if (endSelection[2] > startSelection[2] && endSelection[1] === startSelection[1]) {\n    directionOfDrag = 'down';\n\n    startOfDragCoords = new _src.CellCoords(startSelection[2] + 1, endSelection[1]);\n    endOfDragCoords = new _src.CellCoords(endSelection[2], endSelection[3]);\n  }\n\n  return {\n    directionOfDrag: directionOfDrag,\n    startOfDragCoords: startOfDragCoords,\n    endOfDragCoords: endOfDragCoords\n  };\n}\n\n/**\n * Get mapped FillHandle setting containing information about\n * allowed FillHandle directions and if allowed is automatic insertion of rows on drag\n *\n * @param {Boolean|Object} fillHandle property of Handsontable settings\n * @returns {{directions: Array, autoInsertRow: Boolean}} object allowing access to information\n * about FillHandle in more useful way\n */\nfunction getMappedFillHandleSetting(fillHandle) {\n  var mappedSettings = {};\n\n  if (fillHandle === true) {\n    mappedSettings.directions = Object.keys(DIRECTIONS);\n    mappedSettings.autoInsertRow = true;\n  } else if ((0, _object.isObject)(fillHandle)) {\n    if ((0, _mixed.isDefined)(fillHandle.autoInsertRow)) {\n\n      // autoInsertRow for horizontal direction will be always false\n\n      if (fillHandle.direction === DIRECTIONS.horizontal) {\n        mappedSettings.autoInsertRow = false;\n      } else {\n        mappedSettings.autoInsertRow = fillHandle.autoInsertRow;\n      }\n    } else {\n      mappedSettings.autoInsertRow = false;\n    }\n\n    if ((0, _mixed.isDefined)(fillHandle.direction)) {\n      mappedSettings.directions = [fillHandle.direction];\n    } else {\n      mappedSettings.directions = Object.keys(DIRECTIONS);\n    }\n  } else if (typeof fillHandle === 'string') {\n    mappedSettings.directions = [fillHandle];\n    mappedSettings.autoInsertRow = true;\n  } else {\n    mappedSettings.directions = [];\n    mappedSettings.autoInsertRow = false;\n  }\n\n  return mappedSettings;\n}\n\n/***/ }),\n/* 290 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _base = __webpack_require__(10);\n\nvar _base2 = _interopRequireDefault(_base);\n\nvar _array = __webpack_require__(2);\n\nvar _feature = __webpack_require__(40);\n\nvar _element = __webpack_require__(0);\n\nvar _ghostTable = __webpack_require__(93);\n\nvar _ghostTable2 = _interopRequireDefault(_ghostTable);\n\nvar _object = __webpack_require__(1);\n\nvar _number = __webpack_require__(6);\n\nvar _plugins = __webpack_require__(8);\n\nvar _samplesGenerator = __webpack_require__(203);\n\nvar _samplesGenerator2 = _interopRequireDefault(_samplesGenerator);\n\nvar _string = __webpack_require__(33);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n/**\n * @plugin AutoRowSize\n *\n * @description\n * This plugin allows to set row heights based on their highest cells.\n *\n * By default, the plugin is declared as `undefined`, which makes it disabled (same as if it was declared as `false`).\n * Enabling this plugin may decrease the overall table performance, as it needs to calculate the heights of all cells to\n * resize the rows accordingly.\n * If you experience problems with the performance, try turning this feature off and declaring the row heights manually.\n *\n * Row height calculations are divided into sync and async part. Each of this parts has their own advantages and\n * disadvantages. Synchronous calculations are faster but they block the browser UI, while the slower asynchronous\n * operations don't block the browser UI.\n *\n * To configure the sync/async distribution, you can pass an absolute value (number of columns) or a percentage value to a config object:\n * ```js\n * // as a number (300 columns in sync, rest async)\n * autoRowSize: {syncLimit: 300},\n *\n * // as a string (percent)\n * autoRowSize: {syncLimit: '40%'},\n *\n * // allow sample duplication\n * autoRowSize: {syncLimit: '40%', allowSampleDuplicates: true},\n * ```\n *\n * You can also use the `allowSampleDuplicates` option to allow sampling duplicate values when calculating the row\n * height. __Note__, that this might have a negative impact on performance.\n *\n * To configure this plugin see {@link Options#autoRowSize}.\n *\n * @example\n *\n * ```js\n * const hot = new Handsontable(document.getElementById('example'), {\n *   date: getData(),\n *   autoRowSize: true\n * });\n * // Access to plugin instance:\n * const plugin = hot.getPlugin('autoRowSize');\n *\n * plugin.getRowHeight(4);\n *\n * if (plugin.isEnabled()) {\n *   // code...\n * }\n * ```\n */\nvar AutoRowSize = function (_BasePlugin) {\n  _inherits(AutoRowSize, _BasePlugin);\n\n  _createClass(AutoRowSize, null, [{\n    key: 'CALCULATION_STEP',\n    get: function get() {\n      return 50;\n    }\n  }, {\n    key: 'SYNC_CALCULATION_LIMIT',\n    get: function get() {\n      return 500;\n    }\n  }]);\n\n  function AutoRowSize(hotInstance) {\n    _classCallCheck(this, AutoRowSize);\n\n    /**\n     * Cached rows heights.\n     *\n     * @type {Number[]}\n     */\n    var _this = _possibleConstructorReturn(this, (AutoRowSize.__proto__ || Object.getPrototypeOf(AutoRowSize)).call(this, hotInstance));\n\n    _this.heights = [];\n    /**\n     * Instance of {@link GhostTable} for rows and columns size calculations.\n     *\n     * @private\n     * @type {GhostTable}\n     */\n    _this.ghostTable = new _ghostTable2.default(_this.hot);\n    /**\n     * Instance of {@link SamplesGenerator} for generating samples necessary for rows height calculations.\n     *\n     * @private\n     * @type {SamplesGenerator}\n     */\n    _this.samplesGenerator = new _samplesGenerator2.default(function (row, col) {\n      var cellValue = void 0;\n\n      if (row >= 0) {\n        cellValue = _this.hot.getDataAtCell(row, col);\n      } else if (row === -1) {\n        cellValue = _this.hot.getColHeader(col);\n      }\n\n      return { value: cellValue };\n    });\n    /**\n     * `true` if only the first calculation was performed.\n     *\n     * @private\n     * @type {Boolean}\n     */\n    _this.firstCalculation = true;\n    /**\n     * `true` if the size calculation is in progress.\n     *\n     * @type {Boolean}\n     */\n    _this.inProgress = false;\n\n    // moved to constructor to allow auto-sizing the rows when the plugin is disabled\n    _this.addHook('beforeRowResize', function (row, size, isDblClick) {\n      return _this.onBeforeRowResize(row, size, isDblClick);\n    });\n    return _this;\n  }\n\n  /**\n   * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}\n   * hook and if it returns `true` than the {@link AutoRowSize#enablePlugin} method is called.\n   *\n   * @returns {Boolean}\n   */\n\n\n  _createClass(AutoRowSize, [{\n    key: 'isEnabled',\n    value: function isEnabled() {\n      return this.hot.getSettings().autoRowSize === true || (0, _object.isObject)(this.hot.getSettings().autoRowSize);\n    }\n\n    /**\n     * Enables the plugin functionality for this Handsontable instance.\n     */\n\n  }, {\n    key: 'enablePlugin',\n    value: function enablePlugin() {\n      var _this2 = this;\n\n      if (this.enabled) {\n        return;\n      }\n\n      this.setSamplingOptions();\n\n      this.addHook('afterLoadData', function () {\n        return _this2.onAfterLoadData();\n      });\n      this.addHook('beforeChange', function (changes) {\n        return _this2.onBeforeChange(changes);\n      });\n      this.addHook('beforeColumnMove', function () {\n        return _this2.recalculateAllRowsHeight();\n      });\n      this.addHook('beforeColumnResize', function () {\n        return _this2.recalculateAllRowsHeight();\n      });\n      this.addHook('beforeColumnSort', function () {\n        return _this2.clearCache();\n      });\n      this.addHook('beforeRender', function (force) {\n        return _this2.onBeforeRender(force);\n      });\n      this.addHook('beforeRowMove', function (rowStart, rowEnd) {\n        return _this2.onBeforeRowMove(rowStart, rowEnd);\n      });\n      this.addHook('modifyRowHeight', function (height, row) {\n        return _this2.getRowHeight(row, height);\n      });\n      this.addHook('modifyColumnHeaderHeight', function () {\n        return _this2.getColumnHeaderHeight();\n      });\n      _get(AutoRowSize.prototype.__proto__ || Object.getPrototypeOf(AutoRowSize.prototype), 'enablePlugin', this).call(this);\n    }\n\n    /**\n     * Disables the plugin functionality for this Handsontable instance.\n     */\n\n  }, {\n    key: 'disablePlugin',\n    value: function disablePlugin() {\n      _get(AutoRowSize.prototype.__proto__ || Object.getPrototypeOf(AutoRowSize.prototype), 'disablePlugin', this).call(this);\n    }\n\n    /**\n     * Calculate a given rows height.\n     *\n     * @param {Number|Object} rowRange Row index or an object with `from` and `to` indexes as a range.\n     * @param {Number|Object} colRange Column index or an object with `from` and `to` indexes as a range.\n     * @param {Boolean} [force=false] If `true` the calculation will be processed regardless of whether the width exists in the cache.\n     */\n\n  }, {\n    key: 'calculateRowsHeight',\n    value: function calculateRowsHeight() {\n      var rowRange = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : { from: 0, to: this.hot.countRows() - 1 };\n\n      var _this3 = this;\n\n      var colRange = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : { from: 0, to: this.hot.countCols() - 1 };\n      var force = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n      var rowsRange = typeof rowRange === 'number' ? { from: rowRange, to: rowRange } : rowRange;\n      var columnsRange = typeof colRange === 'number' ? { from: colRange, to: colRange } : colRange;\n\n      if (this.hot.getColHeader(0) !== null) {\n        var samples = this.samplesGenerator.generateRowSamples(-1, columnsRange);\n\n        this.ghostTable.addColumnHeadersRow(samples.get(-1));\n      }\n\n      (0, _number.rangeEach)(rowsRange.from, rowsRange.to, function (row) {\n        // For rows we must calculate row height even when user had set height value manually.\n        // We can shrink column but cannot shrink rows!\n        if (force || _this3.heights[row] === void 0) {\n          var _samples = _this3.samplesGenerator.generateRowSamples(row, columnsRange);\n\n          (0, _array.arrayEach)(_samples, function (_ref) {\n            var _ref2 = _slicedToArray(_ref, 2),\n                rowIndex = _ref2[0],\n                sample = _ref2[1];\n\n            return _this3.ghostTable.addRow(rowIndex, sample);\n          });\n        }\n      });\n      if (this.ghostTable.rows.length) {\n        this.ghostTable.getHeights(function (row, height) {\n          _this3.heights[row] = height;\n        });\n        this.ghostTable.clean();\n      }\n    }\n\n    /**\n     * Calculate all rows heights. The calculated row will be cached in the {@link AutoRowSize#heights} property.\n     * To retrieve height for specyfied row use {@link AutoRowSize#getRowHeight} method.\n     *\n     * @param {Object|Number} rowRange Row index or an object with `from` and `to` properties which define row range.\n     */\n\n  }, {\n    key: 'calculateAllRowsHeight',\n    value: function calculateAllRowsHeight() {\n      var _this4 = this;\n\n      var colRange = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : { from: 0, to: this.hot.countCols() - 1 };\n\n      var current = 0;\n      var length = this.hot.countRows() - 1;\n      var timer = null;\n\n      this.inProgress = true;\n\n      var loop = function loop() {\n        // When hot was destroyed after calculating finished cancel frame\n        if (!_this4.hot) {\n          (0, _feature.cancelAnimationFrame)(timer);\n          _this4.inProgress = false;\n\n          return;\n        }\n        _this4.calculateRowsHeight({ from: current, to: Math.min(current + AutoRowSize.CALCULATION_STEP, length) }, colRange);\n        current = current + AutoRowSize.CALCULATION_STEP + 1;\n\n        if (current < length) {\n          timer = (0, _feature.requestAnimationFrame)(loop);\n        } else {\n          (0, _feature.cancelAnimationFrame)(timer);\n          _this4.inProgress = false;\n\n          // @TODO Should call once per render cycle, currently fired separately in different plugins\n          _this4.hot.view.wt.wtOverlays.adjustElementsSize(true);\n          // tmp\n          if (_this4.hot.view.wt.wtOverlays.leftOverlay.needFullRender) {\n            _this4.hot.view.wt.wtOverlays.leftOverlay.clone.draw();\n          }\n        }\n      };\n      // sync\n      if (this.firstCalculation && this.getSyncCalculationLimit()) {\n        this.calculateRowsHeight({ from: 0, to: this.getSyncCalculationLimit() }, colRange);\n        this.firstCalculation = false;\n        current = this.getSyncCalculationLimit() + 1;\n      }\n      // async\n      if (current < length) {\n        loop();\n      } else {\n        this.inProgress = false;\n        this.hot.view.wt.wtOverlays.adjustElementsSize(false);\n      }\n    }\n\n    /**\n     * Sets the sampling options.\n     *\n     * @private\n     */\n\n  }, {\n    key: 'setSamplingOptions',\n    value: function setSamplingOptions() {\n      var setting = this.hot.getSettings().autoRowSize;\n      var samplingRatio = setting && (0, _object.hasOwnProperty)(setting, 'samplingRatio') ? this.hot.getSettings().autoRowSize.samplingRatio : void 0;\n      var allowSampleDuplicates = setting && (0, _object.hasOwnProperty)(setting, 'allowSampleDuplicates') ? this.hot.getSettings().autoRowSize.allowSampleDuplicates : void 0;\n\n      if (samplingRatio && !isNaN(samplingRatio)) {\n        this.samplesGenerator.setSampleCount(parseInt(samplingRatio, 10));\n      }\n\n      if (allowSampleDuplicates) {\n        this.samplesGenerator.setAllowDuplicates(allowSampleDuplicates);\n      }\n    }\n\n    /**\n     * Recalculates all rows height (overwrite cache values).\n     */\n\n  }, {\n    key: 'recalculateAllRowsHeight',\n    value: function recalculateAllRowsHeight() {\n      if ((0, _element.isVisible)(this.hot.view.wt.wtTable.TABLE)) {\n        this.clearCache();\n        this.calculateAllRowsHeight();\n      }\n    }\n\n    /**\n     * Gets value which tells how many rows should be calculated synchronously (rest of the rows will be calculated\n     * asynchronously). The limit is calculated based on `syncLimit` set to autoRowSize option (see {@link Options#autoRowSize}).\n     *\n     * @returns {Number}\n     */\n\n  }, {\n    key: 'getSyncCalculationLimit',\n    value: function getSyncCalculationLimit() {\n      /* eslint-disable no-bitwise */\n      var limit = AutoRowSize.SYNC_CALCULATION_LIMIT;\n      var rowsLimit = this.hot.countRows() - 1;\n\n      if ((0, _object.isObject)(this.hot.getSettings().autoRowSize)) {\n        limit = this.hot.getSettings().autoRowSize.syncLimit;\n\n        if ((0, _string.isPercentValue)(limit)) {\n          limit = (0, _number.valueAccordingPercent)(rowsLimit, limit);\n        } else {\n          // Force to Number\n          limit >>= 0;\n        }\n      }\n\n      return Math.min(limit, rowsLimit);\n    }\n\n    /**\n     * Gets the calculated row height.\n     *\n     * @param {Number} row Visual row index.\n     * @param {Number} [defaultHeight] Default row height. It will be picked up if no calculated height found.\n     * @returns {Number}\n     */\n\n  }, {\n    key: 'getRowHeight',\n    value: function getRowHeight(row) {\n      var defaultHeight = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : void 0;\n\n      var height = defaultHeight;\n\n      if (this.heights[row] !== void 0 && this.heights[row] > (defaultHeight || 0)) {\n        height = this.heights[row];\n      }\n\n      return height;\n    }\n\n    /**\n     * Get the calculated column header height.\n     *\n     * @returns {Number|undefined}\n     */\n\n  }, {\n    key: 'getColumnHeaderHeight',\n    value: function getColumnHeaderHeight() {\n      return this.heights[-1];\n    }\n\n    /**\n     * Get the first visible row.\n     *\n     * @returns {Number} Returns row index or -1 if table is not rendered.\n     */\n\n  }, {\n    key: 'getFirstVisibleRow',\n    value: function getFirstVisibleRow() {\n      var wot = this.hot.view.wt;\n\n      if (wot.wtViewport.rowsVisibleCalculator) {\n        return wot.wtTable.getFirstVisibleRow();\n      }\n      if (wot.wtViewport.rowsRenderCalculator) {\n        return wot.wtTable.getFirstRenderedRow();\n      }\n\n      return -1;\n    }\n\n    /**\n     * Gets the last visible row.\n     *\n     * @returns {Number} Returns row index or -1 if table is not rendered.\n     */\n\n  }, {\n    key: 'getLastVisibleRow',\n    value: function getLastVisibleRow() {\n      var wot = this.hot.view.wt;\n\n      if (wot.wtViewport.rowsVisibleCalculator) {\n        return wot.wtTable.getLastVisibleRow();\n      }\n      if (wot.wtViewport.rowsRenderCalculator) {\n        return wot.wtTable.getLastRenderedRow();\n      }\n\n      return -1;\n    }\n\n    /**\n     * Clears cached heights.\n     */\n\n  }, {\n    key: 'clearCache',\n    value: function clearCache() {\n      this.heights.length = 0;\n      this.heights[-1] = void 0;\n    }\n\n    /**\n     * Clears cache by range.\n     *\n     * @param {Object|Number} range Row index or an object with `from` and `to` properties which define row range.\n     */\n\n  }, {\n    key: 'clearCacheByRange',\n    value: function clearCacheByRange(range) {\n      var _this5 = this;\n\n      var _ref3 = typeof range === 'number' ? { from: range, to: range } : range,\n          from = _ref3.from,\n          to = _ref3.to;\n\n      (0, _number.rangeEach)(Math.min(from, to), Math.max(from, to), function (row) {\n        _this5.heights[row] = void 0;\n      });\n    }\n\n    /**\n     * Checks if all heights were calculated. If not then return `true` (need recalculate).\n     *\n     * @returns {Boolean}\n     */\n\n  }, {\n    key: 'isNeedRecalculate',\n    value: function isNeedRecalculate() {\n      return !!(0, _array.arrayFilter)(this.heights, function (item) {\n        return item === void 0;\n      }).length;\n    }\n\n    /**\n     * On before render listener.\n     *\n     * @private\n     */\n\n  }, {\n    key: 'onBeforeRender',\n    value: function onBeforeRender() {\n      var force = this.hot.renderCall;\n      var fixedRowsBottom = this.hot.getSettings().fixedRowsBottom;\n\n      this.calculateRowsHeight({ from: this.getFirstVisibleRow(), to: this.getLastVisibleRow() }, void 0, force);\n\n      // Calculate rows height synchronously for bottom overlay\n      if (fixedRowsBottom) {\n        var totalRows = this.hot.countRows() - 1;\n        this.calculateRowsHeight({ from: totalRows - fixedRowsBottom, to: totalRows });\n      }\n\n      if (this.isNeedRecalculate() && !this.inProgress) {\n        this.calculateAllRowsHeight();\n      }\n    }\n\n    /**\n     * On before row move listener.\n     *\n     * @private\n     * @param {Number} from Row index where was grabbed.\n     * @param {Number} to Destination row index.\n     */\n\n  }, {\n    key: 'onBeforeRowMove',\n    value: function onBeforeRowMove(from, to) {\n      this.clearCacheByRange({ from: from, to: to });\n      this.calculateAllRowsHeight();\n    }\n\n    /**\n     * On before row resize listener.\n     *\n     * @private\n     * @param {Number} row\n     * @param {Number} size\n     * @param {Boolean} isDblClick\n     * @returns {Number}\n     */\n\n  }, {\n    key: 'onBeforeRowResize',\n    value: function onBeforeRowResize(row, size, isDblClick) {\n      var newSize = size;\n\n      if (isDblClick) {\n        this.calculateRowsHeight(row, void 0, true);\n\n        newSize = this.getRowHeight(row);\n      }\n\n      return newSize;\n    }\n\n    /**\n     * On after load data listener.\n     *\n     * @private\n     */\n\n  }, {\n    key: 'onAfterLoadData',\n    value: function onAfterLoadData() {\n      var _this6 = this;\n\n      if (this.hot.view) {\n        this.recalculateAllRowsHeight();\n      } else {\n        // first load - initialization\n        setTimeout(function () {\n          if (_this6.hot) {\n            _this6.recalculateAllRowsHeight();\n          }\n        }, 0);\n      }\n    }\n\n    /**\n     * On before change listener.\n     *\n     * @private\n     * @param {Array} changes\n     */\n\n  }, {\n    key: 'onBeforeChange',\n    value: function onBeforeChange(changes) {\n      var range = null;\n\n      if (changes.length === 1) {\n        range = changes[0][0];\n      } else if (changes.length > 1) {\n        range = {\n          from: changes[0][0],\n          to: changes[changes.length - 1][0]\n        };\n      }\n      if (range !== null) {\n        this.clearCacheByRange(range);\n      }\n    }\n\n    /**\n     * Destroys the plugin instance.\n     */\n\n  }, {\n    key: 'destroy',\n    value: function destroy() {\n      this.ghostTable.clean();\n      _get(AutoRowSize.prototype.__proto__ || Object.getPrototypeOf(AutoRowSize.prototype), 'destroy', this).call(this);\n    }\n  }]);\n\n  return AutoRowSize;\n}(_base2.default);\n\n(0, _plugins.registerPlugin)('autoRowSize', AutoRowSize);\n\nexports.default = AutoRowSize;\n\n/***/ }),\n/* 291 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _element = __webpack_require__(0);\n\nvar _object = __webpack_require__(1);\n\nvar _mixed = __webpack_require__(11);\n\nvar _utils = __webpack_require__(73);\n\nvar _base = __webpack_require__(10);\n\nvar _base2 = _interopRequireDefault(_base);\n\nvar _plugins = __webpack_require__(8);\n\nvar _mergeSort = __webpack_require__(295);\n\nvar _mergeSort2 = _interopRequireDefault(_mergeSort);\n\nvar _pluginHooks = __webpack_require__(16);\n\nvar _pluginHooks2 = _interopRequireDefault(_pluginHooks);\n\nvar _rowsMapper = __webpack_require__(297);\n\nvar _rowsMapper2 = _interopRequireDefault(_rowsMapper);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n_pluginHooks2.default.getSingleton().register('beforeColumnSort');\n_pluginHooks2.default.getSingleton().register('afterColumnSort');\n\nvar HEADER_CLASS_SORTING = 'columnSorting';\nvar HEADER_CLASS_ASC_SORT = 'ascending';\nvar HEADER_CLASS_DESC_SORT = 'descending';\n\nvar ASC_SORT_STATE = 'asc';\nvar DESC_SORT_STATE = 'desc';\nvar NONE_SORT_STATE = 'none';\n\n/**\n * @plugin ColumnSorting\n *\n * @description\n * This plugin sorts the view by a column (but does not sort the data source!). To enable the plugin, set the\n * {@link Options#columnSorting} property to an object defining the initial sorting order (see the example below).\n *\n * @example\n * ```js\n * // as boolean\n * columnSorting: true\n *\n * // as a object with initial order (sort ascending column at index 2)\n * columnSorting: {\n *  column: 2,\n *  sortOrder: 'asc', // 'asc' = ascending, 'desc' = descending, 'none' = original order\n *  sortEmptyCells: true // true = the table sorts empty cells, false = the table moves all empty cells to the end of the table\n * }\n * ```\n * @dependencies ObserveChanges moment\n */\n\nvar ColumnSorting = function (_BasePlugin) {\n  _inherits(ColumnSorting, _BasePlugin);\n\n  function ColumnSorting(hotInstance) {\n    _classCallCheck(this, ColumnSorting);\n\n    /**\n     * TODO: It could be refactored, it's cache which store information about value of `sortIndicator` property\n     * inside meta of first cell from particular column.\n     *\n     * @private\n     * @type {Array}\n     */\n    var _this2 = _possibleConstructorReturn(this, (ColumnSorting.__proto__ || Object.getPrototypeOf(ColumnSorting)).call(this, hotInstance));\n\n    _this2.sortIndicators = [];\n    /**\n     * Physical index of last sorted column.\n     *\n     * @type {Number}\n     */\n    _this2.sortColumn = void 0;\n    /**\n     * Order of last sorting. For `asc` ascending order, for `desc` descending order, for `none` the original order.\n     *\n     * @type {String}\n     */\n    _this2.sortOrder = NONE_SORT_STATE;\n    /**\n     * Sorting empty cells.\n     *\n     * @type {Boolean}\n     */\n    _this2.sortEmptyCells = false;\n    /**\n     * Object containing visual row indexes mapped to data source indexes.\n     *\n     * @private\n     * @type {RowsMapper}\n     */\n    _this2.rowsMapper = new _rowsMapper2.default(_this2);\n    /**\n     * It blocks the plugin translation, this flag is checked inside `onModifyRow` listener.\n     *\n     * @private\n     * @type {boolean}\n     */\n    _this2.blockPluginTranslation = true;\n    return _this2;\n  }\n\n  /**\n   * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}\n   * hook and if it returns `true` than the {@link ColumnSorting#enablePlugin} method is called.\n   *\n   * @returns {Boolean}\n   */\n\n\n  _createClass(ColumnSorting, [{\n    key: 'isEnabled',\n    value: function isEnabled() {\n      return !!this.hot.getSettings().columnSorting;\n    }\n\n    /**\n     * Enables the plugin functionality for this Handsontable instance.\n     */\n\n  }, {\n    key: 'enablePlugin',\n    value: function enablePlugin() {\n      var _this3 = this;\n\n      if (this.enabled) {\n        return;\n      }\n\n      this.setPluginOptions();\n\n      if ((0, _mixed.isUndefined)(this.hot.getSettings().observeChanges)) {\n        this.enableObserveChangesPlugin();\n      }\n\n      this.addHook('afterTrimRow', function () {\n        return _this3.sortByPresetColumnAndOrder();\n      });\n      this.addHook('afterUntrimRow', function () {\n        return _this3.sortByPresetColumnAndOrder();\n      });\n      this.addHook('modifyRow', function (row, source) {\n        return _this3.onModifyRow(row, source);\n      });\n      this.addHook('unmodifyRow', function (row, source) {\n        return _this3.onUnmodifyRow(row, source);\n      });\n      this.addHook('afterUpdateSettings', function () {\n        return _this3.onAfterUpdateSettings();\n      });\n      this.addHook('afterGetColHeader', function (column, TH) {\n        return _this3.onAfterGetColHeader(column, TH);\n      });\n      this.addHook('afterOnCellMouseDown', function (event, target) {\n        return _this3.onAfterOnCellMouseDown(event, target);\n      });\n      this.addHook('afterCreateRow', function (index, amount) {\n        return _this3.onAfterCreateRow(index, amount);\n      });\n      this.addHook('afterRemoveRow', function (index, amount) {\n        return _this3.onAfterRemoveRow(index, amount);\n      });\n      this.addHook('afterInit', function () {\n        return _this3.sortBySettings();\n      });\n      this.addHook('afterLoadData', function () {\n        _this3.rowsMapper.clearMap();\n\n        if (_this3.hot.view) {\n          _this3.sortBySettings();\n        }\n      });\n      if (this.hot.view) {\n        this.sortBySettings();\n      }\n      _get(ColumnSorting.prototype.__proto__ || Object.getPrototypeOf(ColumnSorting.prototype), 'enablePlugin', this).call(this);\n    }\n\n    /**\n     * Disables the plugin functionality for this Handsontable instance.\n     */\n\n  }, {\n    key: 'disablePlugin',\n    value: function disablePlugin() {\n      _get(ColumnSorting.prototype.__proto__ || Object.getPrototypeOf(ColumnSorting.prototype), 'disablePlugin', this).call(this);\n    }\n\n    /**\n     * Sorts the table by chosen column and order.\n     *\n     * @param {Number} column Visual column index.\n     * @param {String} [order] Sorting order (`asc` for ascending, `desc` for descending and `none` for initial state).\n     *\n     * @fires Hooks#beforeColumnSort\n     * @fires Hooks#afterColumnSort\n     */\n\n  }, {\n    key: 'sort',\n    value: function sort(column) {\n      var order = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.getNextOrderState(column);\n\n      if ((0, _mixed.isUndefined)(column)) {\n        return;\n      }\n\n      var allowSorting = this.hot.runHooks('beforeColumnSort', column, order);\n\n      if (allowSorting === false) {\n        return;\n      }\n\n      this.sortColumn = this.hot.toPhysicalColumn(column);\n      this.sortOrder = order;\n\n      this.sortByPresetColumnAndOrder();\n      this.updateSortIndicator();\n\n      this.hot.runHooks('afterColumnSort', column, order);\n\n      this.hot.render();\n      this.hot.view.wt.draw(true);\n\n      this.saveSortingState();\n    }\n\n    /**\n     * Get new order state for particular column. The states queue looks as follows: 'asc' -> 'desc' -> 'none' -> 'asc'\n     *\n     * @param {Number} column Visual column index.\n     * @returns {String} Sorting order (`asc` for ascending, `desc` for descending and `none` for initial state).\n     */\n\n  }, {\n    key: 'getNextOrderState',\n    value: function getNextOrderState(column) {\n      var physicalColumn = this.hot.toPhysicalColumn(column);\n\n      if (this.sortColumn === physicalColumn) {\n        if (this.sortOrder === DESC_SORT_STATE) {\n          return NONE_SORT_STATE;\n        } else if (this.sortOrder === ASC_SORT_STATE) {\n          return DESC_SORT_STATE;\n        }\n      }\n\n      return ASC_SORT_STATE;\n    }\n\n    /**\n     * Checks if any column is in a sorted state.\n     *\n     * @returns {Boolean}\n     */\n\n  }, {\n    key: 'isSorted',\n    value: function isSorted() {\n      return this.isEnabled() && this.sortOrder !== NONE_SORT_STATE;\n    }\n\n    /**\n     * Saves the sorting state. To use this method the {@link Options#persistentState} option has to be enabled.\n     *\n     * @fires Hooks#persistentStateSave\n     * @fires Hooks#columnSorting\n     */\n\n  }, {\n    key: 'saveSortingState',\n    value: function saveSortingState() {\n      var sortingState = {};\n\n      if ((0, _mixed.isDefined)(this.sortColumn)) {\n        sortingState.sortColumn = this.sortColumn;\n      }\n\n      if ((0, _mixed.isDefined)(this.sortOrder)) {\n        sortingState.sortOrder = this.sortOrder;\n      }\n\n      if ((0, _object.hasOwnProperty)(sortingState, 'sortColumn') || (0, _object.hasOwnProperty)(sortingState, 'sortOrder')) {\n        this.hot.runHooks('persistentStateSave', 'columnSorting', sortingState);\n      }\n    }\n\n    /**\n     * Loads the sorting state. To use this method the {@link Options#persistentState} option has to be enabled.\n     *\n     * @returns {*} Previously saved sorting state.\n     *\n     * @fires Hooks#persistentStateLoad\n     */\n\n  }, {\n    key: 'loadSortingState',\n    value: function loadSortingState() {\n      var storedState = {};\n      this.hot.runHooks('persistentStateLoad', 'columnSorting', storedState);\n\n      return storedState.value;\n    }\n\n    /**\n     * Enables the ObserveChanges plugin.\n     *\n     * @private\n     */\n\n  }, {\n    key: 'enableObserveChangesPlugin',\n    value: function enableObserveChangesPlugin() {\n      var _this = this;\n\n      this.hot._registerTimeout(setTimeout(function () {\n        _this.hot.updateSettings({\n          observeChanges: true\n        });\n      }, 0));\n    }\n\n    /**\n     * Performs the sorting using a stable sort function.\n     *\n     * @private\n     */\n\n  }, {\n    key: 'sortByPresetColumnAndOrder',\n    value: function sortByPresetColumnAndOrder() {\n      if (this.sortOrder === NONE_SORT_STATE) {\n        this.rowsMapper.clearMap();\n\n        return;\n      }\n\n      var indexesWithData = [];\n      var visualColumn = this.hot.toVisualColumn(this.sortColumn);\n      var columnMeta = this.hot.getCellMeta(0, visualColumn);\n      var sortFunction = (0, _utils.getSortFunctionForColumn)(columnMeta);\n      var numberOfRows = this.hot.countRows();\n      var settings = this.hot.getSettings();\n      var numberOfSortedRows = void 0;\n\n      // `maxRows` option doesn't take into account `minSpareRows` option in specific situation.\n      if (settings.maxRows <= numberOfRows) {\n        numberOfSortedRows = settings.maxRows;\n      } else {\n        numberOfSortedRows = numberOfRows - settings.minSpareRows;\n      }\n\n      if ((0, _mixed.isUndefined)(columnMeta.columnSorting.sortEmptyCells)) {\n        columnMeta.columnSorting = { sortEmptyCells: this.sortEmptyCells };\n      }\n\n      // Function `getDataAtCell` won't call the indices translation inside `onModifyRow` listener - we check the `blockPluginTranslation` flag\n      // (we just want to get data not already modified by `columnSorting` plugin translation).\n      this.blockPluginTranslation = true;\n\n      for (var visualIndex = 0; visualIndex < numberOfSortedRows; visualIndex += 1) {\n        indexesWithData.push([visualIndex, this.hot.getDataAtCell(visualIndex, visualColumn)]);\n      }\n\n      (0, _mergeSort2.default)(indexesWithData, sortFunction(this.sortOrder, columnMeta));\n\n      // Append spareRows\n      for (var _visualIndex = indexesWithData.length; _visualIndex < numberOfRows; _visualIndex += 1) {\n        indexesWithData.push([_visualIndex, this.hot.getDataAtCell(_visualIndex, visualColumn)]);\n      }\n\n      // The blockade of the indices translation is released.\n      this.blockPluginTranslation = false;\n\n      // Save all indexes to arrayMapper, a completely new sequence is set by the plugin\n      this.rowsMapper._arrayMap = indexesWithData.map(function (indexWithData) {\n        return indexWithData[0];\n      });\n    }\n\n    /**\n     * Updates indicator states.\n     *\n     * @private\n     */\n\n  }, {\n    key: 'updateSortIndicator',\n    value: function updateSortIndicator() {\n      if (this.sortOrder === NONE_SORT_STATE) {\n        return;\n      }\n\n      var visualColumn = this.hot.toVisualColumn(this.sortColumn);\n      var columnMeta = this.hot.getCellMeta(0, visualColumn);\n\n      this.sortIndicators[this.sortColumn] = columnMeta.sortIndicator;\n    }\n\n    /**\n     * Sets options by passed settings\n     *\n     * @private\n     */\n\n  }, {\n    key: 'setPluginOptions',\n    value: function setPluginOptions() {\n      var columnSorting = this.hot.getSettings().columnSorting;\n\n      if ((0, _object.isObject)(columnSorting)) {\n        this.sortEmptyCells = columnSorting.sortEmptyCells || false;\n      } else {\n        this.sortEmptyCells = false;\n      }\n    }\n\n    /**\n     * `modifyRow` hook callback. Translates visual row index to the sorted row index.\n     *\n     * @private\n     * @param {Number} row Visual Row index.\n     * @returns {Number} Physical row index.\n     */\n\n  }, {\n    key: 'onModifyRow',\n    value: function onModifyRow(row, source) {\n      var physicalRow = row;\n\n      if (this.blockPluginTranslation === false && source !== this.pluginName) {\n        var rowInMapper = this.rowsMapper.getValueByIndex(physicalRow);\n        physicalRow = rowInMapper === null ? physicalRow : rowInMapper;\n      }\n\n      return physicalRow;\n    }\n\n    /**\n     * Translates sorted row index to visual row index.\n     *\n     * @private\n     * @param {Number} row Physical row index.\n     * @returns {Number} Visual row index.\n     */\n\n  }, {\n    key: 'onUnmodifyRow',\n    value: function onUnmodifyRow(row, source) {\n      var visualRow = row;\n\n      if (this.blockPluginTranslation === false && source !== this.pluginName) {\n        visualRow = this.rowsMapper.getIndexByValue(visualRow);\n      }\n\n      return visualRow;\n    }\n\n    /**\n     * `onAfterGetColHeader` callback. Adds column sorting css classes to clickable headers.\n     *\n     * @private\n     * @param {Number} column Visual column index.\n     * @param {Element} TH TH HTML element.\n     */\n\n  }, {\n    key: 'onAfterGetColHeader',\n    value: function onAfterGetColHeader(column, TH) {\n      if (column < 0 || !TH.parentNode) {\n        return false;\n      }\n\n      var headerLink = TH.querySelector('.colHeader');\n      var TRs = TH.parentNode.parentNode.childNodes;\n      var addedClasses = [];\n      var removedClassess = [HEADER_CLASS_DESC_SORT, HEADER_CLASS_ASC_SORT];\n      var physicalColumn = this.hot.toPhysicalColumn(column);\n      var headerLevel = Array.prototype.indexOf.call(TRs, TH.parentNode);\n      headerLevel -= TRs.length;\n\n      if (!headerLink) {\n        return;\n      }\n\n      if (this.hot.getSettings().columnSorting && column >= 0 && headerLevel === -1) {\n        addedClasses.push(HEADER_CLASS_SORTING);\n      }\n\n      if (this.sortIndicators[physicalColumn]) {\n        if (physicalColumn === this.sortColumn) {\n          if (this.sortOrder === ASC_SORT_STATE) {\n            addedClasses.push(HEADER_CLASS_ASC_SORT);\n          } else if (this.sortOrder === DESC_SORT_STATE) {\n            addedClasses.push(HEADER_CLASS_DESC_SORT);\n          }\n        }\n      }\n\n      var notAddedThenClasses = removedClassess.filter(function (removedClass) {\n        return addedClasses.includes(removedClass) === false;\n      });\n\n      (0, _element.removeClass)(headerLink, notAddedThenClasses);\n      (0, _element.addClass)(headerLink, addedClasses);\n    }\n\n    /**\n     * afterUpdateSettings callback.\n     *\n     * @private\n     */\n\n  }, {\n    key: 'onAfterUpdateSettings',\n    value: function onAfterUpdateSettings() {\n      this.sortBySettings();\n    }\n\n    /**\n     * Sort the table by provided configuration.\n     *\n     * @private\n     */\n\n  }, {\n    key: 'sortBySettings',\n    value: function sortBySettings() {\n      var sortingSettings = this.hot.getSettings().columnSorting;\n      var loadedSortingState = this.loadSortingState();\n      var sortingColumn = void 0;\n      var sortingOrder = void 0;\n\n      if ((0, _mixed.isUndefined)(loadedSortingState)) {\n        sortingColumn = sortingSettings.column;\n        sortingOrder = sortingSettings.sortOrder;\n      } else {\n        sortingColumn = loadedSortingState.sortColumn;\n        sortingOrder = loadedSortingState.sortOrder;\n      }\n\n      if (typeof sortingColumn === 'number') {\n        this.sort(sortingColumn, sortingOrder);\n      }\n    }\n\n    /**\n     * `afterCreateRow` callback. Updates the sorting state after a row have been created.\n     *\n     * @private\n     * @param {Number} index Visual index of the created row.\n     * @param {Number} amount Amount of created rows.\n     */\n\n  }, {\n    key: 'onAfterCreateRow',\n    value: function onAfterCreateRow(index, amount) {\n      this.rowsMapper.shiftItems(index, amount);\n    }\n\n    /**\n     * `afterRemoveRow` hook callback.\n     *\n     * @private\n     * @param {Number} removedRows Visual indexes of the removed row.\n     * @param {Number} amount  Amount of removed rows.\n     */\n\n  }, {\n    key: 'onAfterRemoveRow',\n    value: function onAfterRemoveRow(removedRows, amount) {\n      this.rowsMapper.unshiftItems(removedRows, amount);\n    }\n\n    /**\n     * `onAfterOnCellMouseDown` hook callback.\n     *\n     * @private\n     * @param {Event} event Event which are provided by hook.\n     * @param {CellCoords} coords Visual coords of the selected cell.\n     */\n\n  }, {\n    key: 'onAfterOnCellMouseDown',\n    value: function onAfterOnCellMouseDown(event, coords) {\n      if (coords.row >= 0) {\n        return;\n      }\n\n      if ((0, _element.hasClass)(event.realTarget, HEADER_CLASS_SORTING)) {\n        this.sort(coords.col);\n      }\n    }\n\n    /**\n     * Destroys the plugin instance.\n     */\n\n  }, {\n    key: 'destroy',\n    value: function destroy() {\n      this.rowsMapper.destroy();\n\n      _get(ColumnSorting.prototype.__proto__ || Object.getPrototypeOf(ColumnSorting.prototype), 'destroy', this).call(this);\n    }\n  }]);\n\n  return ColumnSorting;\n}(_base2.default);\n\n(0, _plugins.registerPlugin)('columnSorting', ColumnSorting);\n\nexports.default = ColumnSorting;\n\n/***/ }),\n/* 292 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nexports.default = dateSort;\n\nvar _moment = __webpack_require__(57);\n\nvar _moment2 = _interopRequireDefault(_moment);\n\nvar _mixed = __webpack_require__(11);\n\nvar _utils = __webpack_require__(73);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Date sorting algorithm\n *\n * @param {String} sortOrder Sorting order (`asc` for ascending, `desc` for descending and `none` for initial state).\n * @param {Object} columnMeta Column meta object.\n * @returns {Function} The compare function.\n */\nfunction dateSort(sortOrder, columnMeta) {\n  // We are soring array of arrays. Single array is in form [rowIndex, ...value]. We compare just values, stored at second index of array.\n  return function (_ref, _ref2) {\n    var _ref4 = _slicedToArray(_ref, 2),\n        value = _ref4[1];\n\n    var _ref3 = _slicedToArray(_ref2, 2),\n        nextValue = _ref3[1];\n\n    var sortEmptyCells = columnMeta.columnSorting.sortEmptyCells;\n\n    if (value === nextValue) {\n      return _utils.DO_NOT_SWAP;\n    }\n\n    if ((0, _mixed.isEmpty)(value)) {\n      if ((0, _mixed.isEmpty)(nextValue)) {\n        // Two empty values\n        return _utils.DO_NOT_SWAP;\n      }\n\n      // Just fist value is empty and `sortEmptyCells` option was set\n      if (sortEmptyCells) {\n        return sortOrder === 'asc' ? _utils.FIRST_BEFORE_SECOND : _utils.FIRST_AFTER_SECOND;\n      }\n\n      return _utils.FIRST_AFTER_SECOND;\n    }\n\n    if ((0, _mixed.isEmpty)(nextValue)) {\n      // Just second value is empty and `sortEmptyCells` option was set\n      if (sortEmptyCells) {\n        return sortOrder === 'asc' ? _utils.FIRST_AFTER_SECOND : _utils.FIRST_BEFORE_SECOND;\n      }\n\n      return _utils.FIRST_BEFORE_SECOND;\n    }\n\n    var dateFormat = columnMeta.dateFormat;\n    var firstDate = (0, _moment2.default)(value, dateFormat);\n    var nextDate = (0, _moment2.default)(nextValue, dateFormat);\n\n    if (!firstDate.isValid()) {\n      return _utils.FIRST_AFTER_SECOND;\n    }\n\n    if (!nextDate.isValid()) {\n      return _utils.FIRST_BEFORE_SECOND;\n    }\n\n    if (nextDate.isAfter(firstDate)) {\n      return sortOrder === 'asc' ? _utils.FIRST_BEFORE_SECOND : _utils.FIRST_AFTER_SECOND;\n    }\n\n    if (nextDate.isBefore(firstDate)) {\n      return sortOrder === 'asc' ? _utils.FIRST_AFTER_SECOND : _utils.FIRST_BEFORE_SECOND;\n    }\n\n    return _utils.DO_NOT_SWAP;\n  };\n}\n\n/***/ }),\n/* 293 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nexports.default = defaultSort;\n\nvar _mixed = __webpack_require__(11);\n\nvar _utils = __webpack_require__(73);\n\n/**\n * Default sorting algorithm.\n *\n * @param {String} sortOrder Sorting order (`asc` for ascending, `desc` for descending and `none` for initial state).\n * @param {Object} columnMeta Column meta object.\n * @returns {Function} The compare function.\n */\nfunction defaultSort(sortOrder, columnMeta) {\n  // We are sorting array of arrays. Single array is in form [rowIndex, ...value]. We compare just values, stored at second index of array.\n  return function (_ref, _ref2) {\n    var _ref4 = _slicedToArray(_ref, 2),\n        firstValue = _ref4[1];\n\n    var _ref3 = _slicedToArray(_ref2, 2),\n        secondValue = _ref3[1];\n\n    var sortEmptyCells = columnMeta.columnSorting.sortEmptyCells;\n\n    var value = firstValue;\n    var nextValue = secondValue;\n\n    if (typeof value === 'string') {\n      value = value.toLowerCase();\n    }\n\n    if (typeof nextValue === 'string') {\n      nextValue = nextValue.toLowerCase();\n    }\n\n    if (value === nextValue) {\n      return _utils.DO_NOT_SWAP;\n    }\n\n    if ((0, _mixed.isEmpty)(value)) {\n      if ((0, _mixed.isEmpty)(nextValue)) {\n        // Two empty values\n        return _utils.DO_NOT_SWAP;\n      }\n\n      // Just fist value is empty and `sortEmptyCells` option was set\n      if (sortEmptyCells) {\n        return sortOrder === 'asc' ? _utils.FIRST_BEFORE_SECOND : _utils.FIRST_AFTER_SECOND;\n      }\n\n      return _utils.FIRST_AFTER_SECOND;\n    }\n\n    if ((0, _mixed.isEmpty)(nextValue)) {\n      // Just second value is empty and `sortEmptyCells` option was set\n      if (sortEmptyCells) {\n        return sortOrder === 'asc' ? _utils.FIRST_AFTER_SECOND : _utils.FIRST_BEFORE_SECOND;\n      }\n\n      return _utils.FIRST_BEFORE_SECOND;\n    }\n\n    if (isNaN(value) && !isNaN(nextValue)) {\n      return sortOrder === 'asc' ? _utils.FIRST_AFTER_SECOND : _utils.FIRST_BEFORE_SECOND;\n    } else if (!isNaN(value) && isNaN(nextValue)) {\n      return sortOrder === 'asc' ? _utils.FIRST_BEFORE_SECOND : _utils.FIRST_AFTER_SECOND;\n    } else if (!(isNaN(value) || isNaN(nextValue))) {\n      value = parseFloat(value);\n      nextValue = parseFloat(nextValue);\n    }\n\n    if (value < nextValue) {\n      return sortOrder === 'asc' ? _utils.FIRST_BEFORE_SECOND : _utils.FIRST_AFTER_SECOND;\n    }\n\n    if (value > nextValue) {\n      return sortOrder === 'asc' ? _utils.FIRST_AFTER_SECOND : _utils.FIRST_BEFORE_SECOND;\n    }\n\n    return _utils.DO_NOT_SWAP;\n  };\n}\n\n/***/ }),\n/* 294 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nexports.default = numericSort;\n\nvar _mixed = __webpack_require__(11);\n\nvar _utils = __webpack_require__(73);\n\n/**\n * Numeric sorting algorithm.\n *\n * @param {String} sortOrder Sorting order (`asc` for ascending, `desc` for descending and `none` for initial state).\n * @param {Object} columnMeta Column meta object.\n * @returns {Function} The compare function.\n */\nfunction numericSort(sortOrder, columnMeta) {\n  // We are soring array of arrays. Single array is in form [rowIndex, ...value]. We compare just values, stored at second index of array.\n  return function (_ref, _ref2) {\n    var _ref4 = _slicedToArray(_ref, 2),\n        value = _ref4[1];\n\n    var _ref3 = _slicedToArray(_ref2, 2),\n        nextValue = _ref3[1];\n\n    var sortEmptyCells = columnMeta.columnSorting.sortEmptyCells;\n    var parsedFirstValue = parseFloat(value);\n    var parsedSecondValue = parseFloat(nextValue);\n\n    // Watch out when changing this part of code! Check below returns 0 (as expected) when comparing empty string, null, undefined\n    if (parsedFirstValue === parsedSecondValue || isNaN(parsedFirstValue) && isNaN(parsedSecondValue)) {\n      return _utils.DO_NOT_SWAP;\n    }\n\n    if (sortEmptyCells) {\n      if ((0, _mixed.isEmpty)(value)) {\n        return sortOrder === 'asc' ? _utils.FIRST_BEFORE_SECOND : _utils.FIRST_AFTER_SECOND;\n      }\n\n      if ((0, _mixed.isEmpty)(nextValue)) {\n        return sortOrder === 'asc' ? _utils.FIRST_AFTER_SECOND : _utils.FIRST_BEFORE_SECOND;\n      }\n    }\n\n    if (isNaN(parsedFirstValue)) {\n      return _utils.FIRST_AFTER_SECOND;\n    }\n\n    if (isNaN(parsedSecondValue)) {\n      return _utils.FIRST_BEFORE_SECOND;\n    }\n\n    if (parsedFirstValue < parsedSecondValue) {\n      return sortOrder === 'asc' ? _utils.FIRST_BEFORE_SECOND : _utils.FIRST_AFTER_SECOND;\n    } else if (parsedFirstValue > parsedSecondValue) {\n      return sortOrder === 'asc' ? _utils.FIRST_AFTER_SECOND : _utils.FIRST_BEFORE_SECOND;\n    }\n\n    return _utils.DO_NOT_SWAP;\n  };\n}\n\n/***/ }),\n/* 295 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports.default = mergeSort;\n\nvar _linkedList = __webpack_require__(296);\n\nvar _linkedList2 = _interopRequireDefault(_linkedList);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Refactored implementation of mergeSort (part of javascript-algorithms project) by Github users:\n * mgechev, AndriiHeonia and lekkas (part of javascript-algorithms project - all project contributors\n * at repository website)\n *\n * Link to repository: https://github.com/mgechev/javascript-algorithms\n */\n\n/**\n * Specifies a function that defines the sort order. The array is sorted according to each\n * character's Unicode code point value, according to the string conversion of each element.\n *\n * @param a {*} first compared element.\n * @param b {*} second compared element.\n * @returns {Number}\n */\nvar defaultCompareFunction = function defaultCompareFunction(a, b) {\n  // sort lexically\n\n  var firstValue = a.toString();\n  var secondValue = b.toString();\n\n  if (firstValue === secondValue) {\n    return 0;\n  } else if (firstValue < secondValue) {\n    return -1;\n  }\n\n  return 1;\n};\n\n/**\n * Mergesort method which is recursively called for sorting the input array.\n *\n * @param {Array} array The array which should be sorted.\n * @param {Function} compareFunction Compares two items in an array. If compareFunction is not supplied,\n * elements are sorted by converting them to strings and comparing strings in Unicode code point order.\n * @param {Number} startIndex Left side of the subarray.\n * @param {Number} endIndex Right side of the subarray.\n * @returns {Array} Array with sorted subarray.\n */\nfunction mergeSort(array) {\n  var compareFunction = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultCompareFunction;\n  var startIndex = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n  var endIndex = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : array.length;\n\n  if (Math.abs(endIndex - startIndex) <= 1) {\n    return [];\n  }\n\n  var middleIndex = Math.ceil((startIndex + endIndex) / 2);\n\n  mergeSort(array, compareFunction, startIndex, middleIndex);\n  mergeSort(array, compareFunction, middleIndex, endIndex);\n\n  return merge(array, compareFunction, startIndex, middleIndex, endIndex);\n}\n\n/**\n * Devides and sort merges two subarrays of given array\n *\n * @param {Array} array The array which subarrays should be sorted.\n * @param {Number} startIndex The start of the first subarray.\n *   This subarray is with end middle - 1.\n * @param {Number} middleIndex The start of the second array.\n * @param {Number} endIndex end - 1 is the end of the second array.\n * @returns {Array} The array with sorted subarray.\n */\nfunction merge(array, compareFunction, startIndex, middleIndex, endIndex) {\n  var leftElements = new _linkedList2.default();\n  var rightElements = new _linkedList2.default();\n  var leftSize = middleIndex - startIndex;\n  var rightSize = endIndex - middleIndex;\n  var maxSize = Math.max(leftSize, rightSize);\n  var size = endIndex - startIndex;\n\n  for (var _i = 0; _i < maxSize; _i += 1) {\n    if (_i < leftSize) {\n      leftElements.push(array[startIndex + _i]);\n    }\n\n    if (_i < rightSize) {\n      rightElements.push(array[middleIndex + _i]);\n    }\n  }\n\n  var i = 0;\n\n  while (i < size) {\n    if (leftElements.first && rightElements.first) {\n      if (compareFunction(leftElements.first.data, rightElements.first.data) > 0) {\n        array[startIndex + i] = rightElements.shift().data;\n      } else {\n        array[startIndex + i] = leftElements.shift().data;\n      }\n    } else if (leftElements.first) {\n\n      array[startIndex + i] = leftElements.shift().data;\n    } else {\n\n      array[startIndex + i] = rightElements.shift().data;\n    }\n\n    i += 1;\n  }\n\n  return array;\n}\n\n/***/ }),\n/* 296 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * Refactored implementation of LinkedList (part of javascript-algorithms project) by Github users:\n * mgechev, AndriiHeonia, Microfed and Jakeh (part of javascript-algorithms project - all project contributors\n * at repository website)\n *\n * Link to repository: https://github.com/mgechev/javascript-algorithms\n */\n\n/**\n * Linked list node.\n *\n * @class NodeStructure\n * @util\n */\nvar NodeStructure = function NodeStructure(data) {\n  _classCallCheck(this, NodeStructure);\n\n  /**\n   * Data of the node.\n   * @member {Object}\n   */\n  this.data = data;\n  /**\n   * Next node.\n   * @member {NodeStructure}\n   */\n  this.next = null;\n  /**\n   * Previous node.\n   * @member {NodeStructure}\n   */\n  this.prev = null;\n};\n\n/**\n * Linked list.\n *\n * @class LinkedList\n * @util\n */\n\n\nvar LinkedList = function () {\n  function LinkedList() {\n    _classCallCheck(this, LinkedList);\n\n    this.first = null;\n    this.last = null;\n  }\n\n  /**\n   * Add data to the end of linked list.\n   *\n   * @param {Object} data Data which should be added.\n   */\n\n\n  _createClass(LinkedList, [{\n    key: \"push\",\n    value: function push(data) {\n      var node = new NodeStructure(data);\n\n      if (this.first === null) {\n        this.first = node;\n        this.last = node;\n      } else {\n        var temp = this.last;\n\n        this.last = node;\n        node.prev = temp;\n        temp.next = node;\n      }\n    }\n\n    /**\n     * Add data to the beginning of linked list.\n     *\n     * @param {Object} data Data which should be added.\n     */\n\n  }, {\n    key: \"unshift\",\n    value: function unshift(data) {\n      var node = new NodeStructure(data);\n\n      if (this.first === null) {\n        this.first = node;\n        this.last = node;\n      } else {\n        var temp = this.first;\n\n        this.first = node;\n        node.next = temp;\n        temp.prev = node;\n      }\n    }\n\n    /**\n     * In order traversal of the linked list.\n     *\n     * @param {Function} callback Callback which should be executed on each node.\n     */\n\n  }, {\n    key: \"inorder\",\n    value: function inorder(callback) {\n      var temp = this.first;\n\n      while (temp) {\n        callback(temp);\n        temp = temp.next;\n      }\n    }\n\n    /**\n     * Remove data from the linked list.\n     *\n     * @param {Object} data Data which should be removed.\n     * @returns {Boolean} Returns true if data has been removed.\n     */\n\n  }, {\n    key: \"remove\",\n    value: function remove(data) {\n      if (this.first === null) {\n        return false;\n      }\n\n      var temp = this.first;\n      var next = void 0;\n      var prev = void 0;\n\n      while (temp) {\n        if (temp.data === data) {\n          next = temp.next;\n          prev = temp.prev;\n\n          if (next) {\n            next.prev = prev;\n          }\n\n          if (prev) {\n            prev.next = next;\n          }\n\n          if (temp === this.first) {\n            this.first = next;\n          }\n\n          if (temp === this.last) {\n            this.last = prev;\n          }\n\n          return true;\n        }\n\n        temp = temp.next;\n      }\n\n      return false;\n    }\n\n    /**\n     * Check if linked list contains cycle.\n     *\n     * @returns {Boolean} Returns true if linked list contains cycle.\n     */\n\n  }, {\n    key: \"hasCycle\",\n    value: function hasCycle() {\n      var fast = this.first;\n      var slow = this.first;\n\n      while (true) {\n        if (fast === null) {\n          return false;\n        }\n\n        fast = fast.next;\n\n        if (fast === null) {\n          return false;\n        }\n\n        fast = fast.next;\n        slow = slow.next;\n\n        if (fast === slow) {\n          return true;\n        }\n      }\n    }\n\n    /**\n     * Return last node from the linked list.\n     *\n     * @returns {NodeStructure} Last node.\n     */\n\n  }, {\n    key: \"pop\",\n    value: function pop() {\n      if (this.last === null) {\n        return null;\n      }\n\n      var temp = this.last;\n      this.last = this.last.prev;\n\n      return temp;\n    }\n\n    /**\n     * Return first node from the linked list.\n     *\n     * @returns {NodeStructure} First node.\n     */\n\n  }, {\n    key: \"shift\",\n    value: function shift() {\n      if (this.first === null) {\n        return null;\n      }\n\n      var temp = this.first;\n      this.first = this.first.next;\n\n      return temp;\n    }\n\n    /**\n     * Reverses the linked list recursively\n     */\n\n  }, {\n    key: \"recursiveReverse\",\n    value: function recursiveReverse() {\n      function inverse(current, next) {\n        if (!next) {\n          return;\n        }\n        inverse(next, next.next);\n        next.next = current;\n      }\n\n      if (!this.first) {\n        return;\n      }\n\n      inverse(this.first, this.first.next);\n\n      this.first.next = null;\n      var temp = this.first;\n      this.first = this.last;\n      this.last = temp;\n    }\n\n    /**\n     * Reverses the linked list iteratively\n     */\n\n  }, {\n    key: \"reverse\",\n    value: function reverse() {\n      if (!this.first || !this.first.next) {\n        return;\n      }\n\n      var current = this.first.next;\n      var prev = this.first;\n      var temp = void 0;\n\n      while (current) {\n        temp = current.next;\n        current.next = prev;\n        prev.prev = current;\n        prev = current;\n        current = temp;\n      }\n\n      this.first.next = null;\n      this.last.prev = null;\n      temp = this.first;\n      this.first = prev;\n      this.last = temp;\n    }\n  }]);\n\n  return LinkedList;\n}();\n\nexports.NodeStructure = NodeStructure;\nexports.default = LinkedList;\n\n/***/ }),\n/* 297 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _arrayMapper = __webpack_require__(94);\n\nvar _arrayMapper2 = _interopRequireDefault(_arrayMapper);\n\nvar _object = __webpack_require__(1);\n\nvar _number = __webpack_require__(6);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * @class RowsMapper\n * @plugin ColumnSorting\n */\nvar RowsMapper = function () {\n  function RowsMapper(columnSorting) {\n    _classCallCheck(this, RowsMapper);\n\n    /**\n     * Instance of ColumnSorting plugin.\n     *\n     * @type {ColumnSorting}\n     */\n    this.columnSorting = columnSorting;\n  }\n\n  /**\n   * Reset current map array and create new one.\n   *\n   * @param {Number} [length] Custom generated map length.\n   */\n\n\n  _createClass(RowsMapper, [{\n    key: 'createMap',\n    value: function createMap(length) {\n      var _this = this;\n\n      var originLength = length === void 0 ? this._arrayMap.length : length;\n\n      this._arrayMap.length = 0;\n\n      (0, _number.rangeEach)(originLength - 1, function (itemIndex) {\n        _this._arrayMap[itemIndex] = itemIndex;\n      });\n    }\n\n    /**\n     * Destroy class.\n     */\n\n  }, {\n    key: 'destroy',\n    value: function destroy() {\n      this._arrayMap = null;\n    }\n  }]);\n\n  return RowsMapper;\n}();\n\n(0, _object.mixin)(RowsMapper, _arrayMapper2.default);\n\nexports.default = RowsMapper;\n\n/***/ }),\n/* 298 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _element = __webpack_require__(0);\n\nvar _object = __webpack_require__(1);\n\nvar _eventManager = __webpack_require__(5);\n\nvar _eventManager2 = _interopRequireDefault(_eventManager);\n\nvar _src = __webpack_require__(4);\n\nvar _plugins = __webpack_require__(8);\n\nvar _base = __webpack_require__(10);\n\nvar _base2 = _interopRequireDefault(_base);\n\nvar _commentEditor = __webpack_require__(299);\n\nvar _commentEditor2 = _interopRequireDefault(_commentEditor);\n\nvar _utils = __webpack_require__(19);\n\nvar _displaySwitch = __webpack_require__(300);\n\nvar _displaySwitch2 = _interopRequireDefault(_displaySwitch);\n\nvar _constants = __webpack_require__(7);\n\nvar C = _interopRequireWildcard(_constants);\n\n__webpack_require__(301);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar privatePool = new WeakMap();\nvar META_COMMENT = 'comment';\nvar META_COMMENT_VALUE = 'value';\nvar META_STYLE = 'style';\nvar META_READONLY = 'readOnly';\n\n/**\n * @plugin Comments\n *\n * @description\n * This plugin allows setting and managing cell comments by either an option in the context menu or with the use of\n * the API.\n *\n * To enable the plugin, you'll need to set the comments property of the config object to `true`:\n * ```js\n * comments: true\n * ```\n *\n * or an object with extra predefined plugin config:\n *\n * ```js\n * comments: {\n *   displayDelay: 1000\n * }\n * ```\n *\n * To add comments at the table initialization, define the `comment` property in the `cell` config array as in an example below.\n *\n * @example\n *\n * ```js\n * const hot = new Handsontable(document.getElementById('example'), {\n *   date: getData(),\n *   comments: true,\n *   cell: [\n *     {row: 1, col: 1, comment: {value: 'Foo'}},\n *     {row: 2, col: 2, comment: {value: 'Bar'}}\n *   ]\n * });\n *\n * // Access to the Comments plugin instance:\n * const commentsPlugin = hot.getPlugin('comments');\n *\n * // Manage comments programmatically:\n * commentsPlugin.setCommentAtCell(1, 6, 'Comment contents');\n * commentsPlugin.showAtCell(1, 6);\n * commentsPlugin.removeCommentAtCell(1, 6);\n *\n * // You can also set range once and use proper methods:\n * commentsPlugin.setRange({from: {row: 1, col: 6}});\n * commentsPlugin.setComment('Comment contents');\n * commentsPlugin.show();\n * commentsPlugin.removeComment();\n * ```\n */\n\nvar Comments = function (_BasePlugin) {\n  _inherits(Comments, _BasePlugin);\n\n  function Comments(hotInstance) {\n    _classCallCheck(this, Comments);\n\n    /**\n     * Instance of {@link CommentEditor}.\n     *\n     * @private\n     * @type {CommentEditor}\n     */\n    var _this = _possibleConstructorReturn(this, (Comments.__proto__ || Object.getPrototypeOf(Comments)).call(this, hotInstance));\n\n    _this.editor = null;\n    /**\n     * Instance of {@link DisplaySwitch}.\n     *\n     * @private\n     * @type {DisplaySwitch}\n     */\n    _this.displaySwitch = null;\n    /**\n     * Instance of {@link EventManager}.\n     *\n     * @private\n     * @type {EventManager}\n     */\n    _this.eventManager = null;\n    /**\n     * Current cell range, an object with `from` property, with `row` and `col` properties (e.q. `{from: {row: 1, col: 6}}`).\n     *\n     * @type {Object}\n     */\n    _this.range = {};\n    /**\n     * @private\n     * @type {Boolean}\n     */\n    _this.mouseDown = false;\n    /**\n     * @private\n     * @type {Boolean}\n     */\n    _this.contextMenuEvent = false;\n    /**\n     * @private\n     * @type {*}\n     */\n    _this.timer = null;\n\n    privatePool.set(_this, {\n      tempEditorDimensions: {},\n      cellBelowCursor: null\n    });\n    return _this;\n  }\n\n  /**\n   * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}\n   * hook and if it returns `true` than the {@link Comments#enablePlugin} method is called.\n   *\n   * @returns {Boolean}\n   */\n\n\n  _createClass(Comments, [{\n    key: 'isEnabled',\n    value: function isEnabled() {\n      return !!this.hot.getSettings().comments;\n    }\n\n    /**\n     * Enables the plugin functionality for this Handsontable instance.\n     */\n\n  }, {\n    key: 'enablePlugin',\n    value: function enablePlugin() {\n      var _this2 = this;\n\n      if (this.enabled) {\n        return;\n      }\n\n      if (!this.editor) {\n        this.editor = new _commentEditor2.default();\n      }\n\n      if (!this.eventManager) {\n        this.eventManager = new _eventManager2.default(this);\n      }\n\n      if (!this.displaySwitch) {\n        this.displaySwitch = new _displaySwitch2.default(this.getDisplayDelaySetting());\n      }\n\n      this.addHook('afterContextMenuDefaultOptions', function (options) {\n        return _this2.addToContextMenu(options);\n      });\n      this.addHook('afterRenderer', function (TD, row, col, prop, value, cellProperties) {\n        return _this2.onAfterRenderer(TD, cellProperties);\n      });\n      this.addHook('afterScrollHorizontally', function () {\n        return _this2.hide();\n      });\n      this.addHook('afterScrollVertically', function () {\n        return _this2.hide();\n      });\n      this.addHook('afterBeginEditing', function () {\n        return _this2.onAfterBeginEditing();\n      });\n\n      this.displaySwitch.addLocalHook('hide', function () {\n        return _this2.hide();\n      });\n      this.displaySwitch.addLocalHook('show', function (row, col) {\n        return _this2.showAtCell(row, col);\n      });\n\n      this.registerListeners();\n\n      _get(Comments.prototype.__proto__ || Object.getPrototypeOf(Comments.prototype), 'enablePlugin', this).call(this);\n    }\n\n    /**\n     * Updates the plugin state. This method is executed when {@link Core#updateSettings} is invoked.\n     */\n\n  }, {\n    key: 'updatePlugin',\n    value: function updatePlugin() {\n      this.disablePlugin();\n      this.enablePlugin();\n      _get(Comments.prototype.__proto__ || Object.getPrototypeOf(Comments.prototype), 'updatePlugin', this).call(this);\n\n      this.displaySwitch.updateDelay(this.getDisplayDelaySetting());\n    }\n\n    /**\n     * Disables the plugin functionality for this Handsontable instance.\n     */\n\n  }, {\n    key: 'disablePlugin',\n    value: function disablePlugin() {\n      _get(Comments.prototype.__proto__ || Object.getPrototypeOf(Comments.prototype), 'disablePlugin', this).call(this);\n    }\n\n    /**\n     * Registers all necessary DOM listeners.\n     *\n     * @private\n     */\n\n  }, {\n    key: 'registerListeners',\n    value: function registerListeners() {\n      var _this3 = this;\n\n      this.eventManager.addEventListener(document, 'mouseover', function (event) {\n        return _this3.onMouseOver(event);\n      });\n      this.eventManager.addEventListener(document, 'mousedown', function (event) {\n        return _this3.onMouseDown(event);\n      });\n      this.eventManager.addEventListener(document, 'mouseup', function () {\n        return _this3.onMouseUp();\n      });\n      this.eventManager.addEventListener(this.editor.getInputElement(), 'blur', function () {\n        return _this3.onEditorBlur();\n      });\n      this.eventManager.addEventListener(this.editor.getInputElement(), 'mousedown', function (event) {\n        return _this3.onEditorMouseDown(event);\n      });\n      this.eventManager.addEventListener(this.editor.getInputElement(), 'mouseup', function (event) {\n        return _this3.onEditorMouseUp(event);\n      });\n    }\n\n    /**\n     * Sets the current cell range to be able to use general methods like {@link Comments#setComment}, {@link Comments#removeComment}, {@link Comments#show}.\n     *\n     * @param {Object} range Object with `from` property, each with `row` and `col` properties.\n     */\n\n  }, {\n    key: 'setRange',\n    value: function setRange(range) {\n      this.range = range;\n    }\n\n    /**\n     * Clears the currently selected cell.\n     */\n\n  }, {\n    key: 'clearRange',\n    value: function clearRange() {\n      this.range = {};\n    }\n\n    /**\n     * Checks if the event target is a cell containing a comment.\n     *\n     * @private\n     * @param {Event} event DOM event\n     * @returns {Boolean}\n     */\n\n  }, {\n    key: 'targetIsCellWithComment',\n    value: function targetIsCellWithComment(event) {\n      var closestCell = (0, _element.closest)(event.target, 'TD', 'TBODY');\n\n      return !!(closestCell && (0, _element.hasClass)(closestCell, 'htCommentCell') && (0, _element.closest)(closestCell, [this.hot.rootElement]));\n    }\n\n    /**\n     * Checks if the event target is a comment textarea.\n     *\n     * @private\n     * @param {Event} event DOM event.\n     * @returns {Boolean}\n     */\n\n  }, {\n    key: 'targetIsCommentTextArea',\n    value: function targetIsCommentTextArea(event) {\n      return this.editor.getInputElement() === event.target;\n    }\n\n    /**\n     * Sets a comment for a cell according to the previously set range (see {@link Comments#setRange}).\n     *\n     * @param {String} value Comment contents.\n     */\n\n  }, {\n    key: 'setComment',\n    value: function setComment(value) {\n      if (!this.range.from) {\n        throw new Error('Before using this method, first set cell range (hot.getPlugin(\"comment\").setRange())');\n      }\n      var editorValue = this.editor.getValue();\n      var comment = '';\n\n      if (value !== null && value !== void 0) {\n        comment = value;\n      } else if (editorValue !== null && editorValue !== void 0) {\n        comment = editorValue;\n      }\n\n      var row = this.range.from.row;\n      var col = this.range.from.col;\n\n      this.updateCommentMeta(row, col, _defineProperty({}, META_COMMENT_VALUE, comment));\n      this.hot.render();\n    }\n\n    /**\n     * Sets a comment for a specified cell.\n     *\n     * @param {Number} row Visual row index.\n     * @param {Number} column Visual column index.\n     * @param {String} value Comment contents.\n     */\n\n  }, {\n    key: 'setCommentAtCell',\n    value: function setCommentAtCell(row, column, value) {\n      this.setRange({\n        from: new _src.CellCoords(row, column)\n      });\n      this.setComment(value);\n    }\n\n    /**\n     * Removes a comment from a cell according to previously set range (see {@link Comments#setRange}).\n     *\n     * @param {Boolean} [forceRender=true] If set to `true`, the table will be re-rendered at the end of the operation.\n     */\n\n  }, {\n    key: 'removeComment',\n    value: function removeComment() {\n      var forceRender = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n\n      if (!this.range.from) {\n        throw new Error('Before using this method, first set cell range (hot.getPlugin(\"comment\").setRange())');\n      }\n\n      this.hot.setCellMeta(this.range.from.row, this.range.from.col, META_COMMENT, void 0);\n\n      if (forceRender) {\n        this.hot.render();\n      }\n\n      this.hide();\n    }\n\n    /**\n     * Removes a comment from a specified cell.\n     *\n     * @param {Number} row Visual row index.\n     * @param {Number} column Visual column index.\n     * @param {Boolean} [forceRender=true] If `true`, the table will be re-rendered at the end of the operation.\n     */\n\n  }, {\n    key: 'removeCommentAtCell',\n    value: function removeCommentAtCell(row, column) {\n      var forceRender = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n\n      this.setRange({\n        from: new _src.CellCoords(row, column)\n      });\n      this.removeComment(forceRender);\n    }\n\n    /**\n     * Gets comment from a cell according to previously set range (see {@link Comments#setRange}).\n     *\n     * @returns {String|undefined} Returns a content of the comment.\n     */\n\n  }, {\n    key: 'getComment',\n    value: function getComment() {\n      var row = this.range.from.row;\n      var column = this.range.from.col;\n\n      return this.getCommentMeta(row, column, META_COMMENT_VALUE);\n    }\n\n    /**\n     * Gets comment from a cell at the provided coordinates.\n     *\n     * @param {Number} row Visual row index.\n     * @param {Number} column Visual column index.\n     * @returns {String|undefined} Returns a content of the comment.\n     */\n\n  }, {\n    key: 'getCommentAtCell',\n    value: function getCommentAtCell(row, column) {\n      return this.getCommentMeta(row, column, META_COMMENT_VALUE);\n    }\n\n    /**\n     * Shows the comment editor accordingly to the previously set range (see {@link Comments#setRange}).\n     *\n     * @returns {Boolean} Returns `true` if comment editor was shown.\n     */\n\n  }, {\n    key: 'show',\n    value: function show() {\n      if (!this.range.from) {\n        throw new Error('Before using this method, first set cell range (hot.getPlugin(\"comment\").setRange())');\n      }\n      var meta = this.hot.getCellMeta(this.range.from.row, this.range.from.col);\n\n      this.refreshEditor(true);\n      this.editor.setValue(meta[META_COMMENT] ? meta[META_COMMENT][META_COMMENT_VALUE] : null || '');\n\n      if (this.editor.hidden) {\n        this.editor.show();\n      }\n\n      return true;\n    }\n\n    /**\n     * Shows comment editor according to cell coordinates.\n     *\n     * @param {Number} row Visual row index.\n     * @param {Number} column Visual column index.\n     * @returns {Boolean} Returns `true` if comment editor was shown.\n     */\n\n  }, {\n    key: 'showAtCell',\n    value: function showAtCell(row, column) {\n      this.setRange({\n        from: new _src.CellCoords(row, column)\n      });\n\n      return this.show();\n    }\n\n    /**\n     * Hides the comment editor.\n     */\n\n  }, {\n    key: 'hide',\n    value: function hide() {\n      if (!this.editor.hidden) {\n        this.editor.hide();\n      }\n    }\n\n    /**\n     * Refreshes comment editor position and styling.\n     *\n     * @param {Boolean} [force=false] If `true` then recalculation will be forced.\n     */\n\n  }, {\n    key: 'refreshEditor',\n    value: function refreshEditor() {\n      var force = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n      if (!force && (!this.range.from || !this.editor.isVisible())) {\n        return;\n      }\n      var scrollableElement = (0, _element.getScrollableElement)(this.hot.view.wt.wtTable.TABLE);\n      var TD = this.hot.view.wt.wtTable.getCell(this.range.from);\n      var row = this.range.from.row;\n      var column = this.range.from.col;\n      var cellOffset = (0, _element.offset)(TD);\n      var lastColWidth = this.hot.view.wt.wtTable.getStretchedColumnWidth(column);\n      var cellTopOffset = cellOffset.top < 0 ? 0 : cellOffset.top;\n      var cellLeftOffset = cellOffset.left;\n\n      if (this.hot.view.wt.wtViewport.hasVerticalScroll() && scrollableElement !== window) {\n        cellTopOffset -= this.hot.view.wt.wtOverlays.topOverlay.getScrollPosition();\n      }\n\n      if (this.hot.view.wt.wtViewport.hasHorizontalScroll() && scrollableElement !== window) {\n        cellLeftOffset -= this.hot.view.wt.wtOverlays.leftOverlay.getScrollPosition();\n      }\n\n      var x = cellLeftOffset + lastColWidth;\n      var y = cellTopOffset;\n\n      var commentStyle = this.getCommentMeta(row, column, META_STYLE);\n      var readOnly = this.getCommentMeta(row, column, META_READONLY);\n\n      if (commentStyle) {\n        this.editor.setSize(commentStyle.width, commentStyle.height);\n      } else {\n        this.editor.resetSize();\n      }\n\n      this.editor.setReadOnlyState(readOnly);\n\n      this.editor.setPosition(x, y);\n    }\n\n    /**\n     * Checks if there is a comment for selected range.\n     *\n     * @private\n     * @returns {Boolean}\n     */\n\n  }, {\n    key: 'checkSelectionCommentsConsistency',\n    value: function checkSelectionCommentsConsistency() {\n      var selected = this.hot.getSelectedRangeLast();\n\n      if (!selected) {\n        return false;\n      }\n      var hasComment = false;\n      var cell = selected.from; // IN EXCEL THERE IS COMMENT ONLY FOR TOP LEFT CELL IN SELECTION\n\n      if (this.getCommentMeta(cell.row, cell.col, META_COMMENT_VALUE)) {\n        hasComment = true;\n      }\n\n      return hasComment;\n    }\n\n    /**\n     * Sets or update the comment-related cell meta.\n     *\n     * @param {Number} row Visual row index.\n     * @param {Number} column Visual column index.\n     * @param {Object} metaObject Object defining all the comment-related meta information.\n     */\n\n  }, {\n    key: 'updateCommentMeta',\n    value: function updateCommentMeta(row, column, metaObject) {\n      var oldComment = this.hot.getCellMeta(row, column)[META_COMMENT];\n      var newComment = void 0;\n\n      if (oldComment) {\n        newComment = (0, _object.deepClone)(oldComment);\n        (0, _object.deepExtend)(newComment, metaObject);\n      } else {\n        newComment = metaObject;\n      }\n\n      this.hot.setCellMeta(row, column, META_COMMENT, newComment);\n    }\n\n    /**\n     * Gets the comment related meta information.\n     *\n     * @param {Number} row Visual row index.\n     * @param {Number} column Visual column index.\n     * @param {String} property Cell meta property.\n     * @returns {Mixed}\n     */\n\n  }, {\n    key: 'getCommentMeta',\n    value: function getCommentMeta(row, column, property) {\n      var cellMeta = this.hot.getCellMeta(row, column);\n\n      if (!cellMeta[META_COMMENT]) {\n        return void 0;\n      }\n\n      return cellMeta[META_COMMENT][property];\n    }\n\n    /**\n     * `mousedown` event callback.\n     *\n     * @private\n     * @param {MouseEvent} event The `mousedown` event.\n     */\n\n  }, {\n    key: 'onMouseDown',\n    value: function onMouseDown(event) {\n      this.mouseDown = true;\n\n      if (!this.hot.view || !this.hot.view.wt) {\n        return;\n      }\n\n      if (!this.contextMenuEvent && !this.targetIsCommentTextArea(event)) {\n        var eventCell = (0, _element.closest)(event.target, 'TD', 'TBODY');\n        var coordinates = null;\n\n        if (eventCell) {\n          coordinates = this.hot.view.wt.wtTable.getCoords(eventCell);\n        }\n\n        if (!eventCell || this.range.from && coordinates && (this.range.from.row !== coordinates.row || this.range.from.col !== coordinates.col)) {\n          this.hide();\n        }\n      }\n      this.contextMenuEvent = false;\n    }\n\n    /**\n     * `mouseover` event callback.\n     *\n     * @private\n     * @param {MouseEvent} event The `mouseover` event.\n     */\n\n  }, {\n    key: 'onMouseOver',\n    value: function onMouseOver(event) {\n      var priv = privatePool.get(this);\n\n      priv.cellBelowCursor = document.elementFromPoint(event.clientX, event.clientY);\n\n      if (this.mouseDown || this.editor.isFocused() || (0, _element.hasClass)(event.target, 'wtBorder') || priv.cellBelowCursor !== event.target || !this.editor) {\n        return;\n      }\n\n      if (this.targetIsCellWithComment(event)) {\n        var coordinates = this.hot.view.wt.wtTable.getCoords(event.target);\n        var range = {\n          from: new _src.CellCoords(coordinates.row, coordinates.col)\n        };\n\n        this.displaySwitch.show(range);\n      } else if ((0, _element.isChildOf)(event.target, document) && !this.targetIsCommentTextArea(event)) {\n        this.displaySwitch.hide();\n      }\n    }\n\n    /**\n     * `mouseup` event callback.\n     *\n     * @private\n     */\n\n  }, {\n    key: 'onMouseUp',\n    value: function onMouseUp() {\n      this.mouseDown = false;\n    }\n\n    /** *\n     * The `afterRenderer` hook callback..\n     *\n     * @private\n     * @param {HTMLTableCellElement} TD The rendered `TD` element.\n     * @param {Object} cellProperties The rendered cell's property object.\n     */\n\n  }, {\n    key: 'onAfterRenderer',\n    value: function onAfterRenderer(TD, cellProperties) {\n      if (cellProperties[META_COMMENT] && cellProperties[META_COMMENT][META_COMMENT_VALUE]) {\n        (0, _element.addClass)(TD, cellProperties.commentedCellClassName);\n      }\n    }\n\n    /**\n     * `blur` event callback for the comment editor.\n     *\n     * @private\n     */\n\n  }, {\n    key: 'onEditorBlur',\n    value: function onEditorBlur() {\n      this.setComment();\n    }\n\n    /**\n     * `mousedown` hook. Along with `onEditorMouseUp` used to simulate the textarea resizing event.\n     *\n     * @private\n     * @param {MouseEvent} event The `mousedown` event.\n     */\n\n  }, {\n    key: 'onEditorMouseDown',\n    value: function onEditorMouseDown(event) {\n      var priv = privatePool.get(this);\n\n      priv.tempEditorDimensions = {\n        width: (0, _element.outerWidth)(event.target),\n        height: (0, _element.outerHeight)(event.target)\n      };\n    }\n\n    /**\n     * `mouseup` hook. Along with `onEditorMouseDown` used to simulate the textarea resizing event.\n     *\n     * @private\n     * @param {MouseEvent} event The `mouseup` event.\n     */\n\n  }, {\n    key: 'onEditorMouseUp',\n    value: function onEditorMouseUp(event) {\n      var priv = privatePool.get(this);\n      var currentWidth = (0, _element.outerWidth)(event.target);\n      var currentHeight = (0, _element.outerHeight)(event.target);\n\n      if (currentWidth !== priv.tempEditorDimensions.width + 1 || currentHeight !== priv.tempEditorDimensions.height + 2) {\n        this.updateCommentMeta(this.range.from.row, this.range.from.col, _defineProperty({}, META_STYLE, {\n          width: currentWidth,\n          height: currentHeight\n        }));\n      }\n    }\n\n    /**\n     * Context Menu's \"Add comment\" callback. Results in showing the comment editor.\n     *\n     * @private\n     */\n\n  }, {\n    key: 'onContextMenuAddComment',\n    value: function onContextMenuAddComment() {\n      var _this4 = this;\n\n      this.displaySwitch.cancelHiding();\n      var coords = this.hot.getSelectedRangeLast();\n\n      this.contextMenuEvent = true;\n      this.setRange({\n        from: coords.from\n      });\n      this.show();\n      setTimeout(function () {\n        if (_this4.hot) {\n          _this4.hot.deselectCell();\n          _this4.editor.focus();\n        }\n      }, 10);\n    }\n\n    /**\n     * Context Menu's \"remove comment\" callback.\n     *\n     * @private\n     */\n\n  }, {\n    key: 'onContextMenuRemoveComment',\n    value: function onContextMenuRemoveComment() {\n      var _hot$getSelectedRange = this.hot.getSelectedRangeLast(),\n          from = _hot$getSelectedRange.from,\n          to = _hot$getSelectedRange.to;\n\n      this.contextMenuEvent = true;\n\n      for (var i = from.row; i <= to.row; i++) {\n        for (var j = from.col; j <= to.col; j++) {\n          this.removeCommentAtCell(i, j, false);\n        }\n      }\n\n      this.hot.render();\n    }\n\n    /**\n     * Context Menu's \"make comment read-only\" callback.\n     *\n     * @private\n     */\n\n  }, {\n    key: 'onContextMenuMakeReadOnly',\n    value: function onContextMenuMakeReadOnly() {\n      var _hot$getSelectedRange2 = this.hot.getSelectedRangeLast(),\n          from = _hot$getSelectedRange2.from,\n          to = _hot$getSelectedRange2.to;\n\n      this.contextMenuEvent = true;\n\n      for (var i = from.row; i <= to.row; i++) {\n        for (var j = from.col; j <= to.col; j++) {\n          var currentState = !!this.getCommentMeta(i, j, META_READONLY);\n\n          this.updateCommentMeta(i, j, _defineProperty({}, META_READONLY, !currentState));\n        }\n      }\n    }\n\n    /**\n     * Add Comments plugin options to the Context Menu.\n     *\n     * @private\n     * @param {Object} defaultOptions\n     */\n\n  }, {\n    key: 'addToContextMenu',\n    value: function addToContextMenu(defaultOptions) {\n      var _this5 = this;\n\n      defaultOptions.items.push({\n        name: '---------'\n      }, {\n        key: 'commentsAddEdit',\n        name: function name() {\n          if (_this5.checkSelectionCommentsConsistency()) {\n            return _this5.hot.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_EDIT_COMMENT);\n          }\n\n          return _this5.hot.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_ADD_COMMENT);\n        },\n        callback: function callback() {\n          return _this5.onContextMenuAddComment();\n        },\n        disabled: function disabled() {\n          return !(this.getSelectedLast() && !this.selection.isSelectedByCorner());\n        }\n      }, {\n        key: 'commentsRemove',\n        name: function name() {\n          return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_REMOVE_COMMENT);\n        },\n\n        callback: function callback() {\n          return _this5.onContextMenuRemoveComment();\n        },\n        disabled: function disabled() {\n          return _this5.hot.selection.isSelectedByCorner();\n        }\n      }, {\n        key: 'commentsReadOnly',\n        name: function name() {\n          var _this6 = this;\n\n          var label = this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_READ_ONLY_COMMENT);\n          var hasProperty = (0, _utils.checkSelectionConsistency)(this.getSelectedRangeLast(), function (row, col) {\n            var readOnlyProperty = _this6.getCellMeta(row, col)[META_COMMENT];\n            if (readOnlyProperty) {\n              readOnlyProperty = readOnlyProperty[META_READONLY];\n            }\n\n            if (readOnlyProperty) {\n              return true;\n            }\n          });\n\n          if (hasProperty) {\n            label = (0, _utils.markLabelAsSelected)(label);\n          }\n\n          return label;\n        },\n\n        callback: function callback() {\n          return _this5.onContextMenuMakeReadOnly();\n        },\n        disabled: function disabled() {\n          return _this5.hot.selection.isSelectedByCorner() || !_this5.checkSelectionCommentsConsistency();\n        }\n      });\n    }\n\n    /**\n     * Get `displayDelay` setting of comment plugin.\n     *\n     * @private\n     * @returns {Number|undefined}\n     */\n\n  }, {\n    key: 'getDisplayDelaySetting',\n    value: function getDisplayDelaySetting() {\n      var commentSetting = this.hot.getSettings().comments;\n\n      if ((0, _object.isObject)(commentSetting)) {\n        return commentSetting.displayDelay;\n      }\n\n      return void 0;\n    }\n\n    /**\n     * `afterBeginEditing` hook callback.\n     *\n     * @private\n     */\n\n  }, {\n    key: 'onAfterBeginEditing',\n    value: function onAfterBeginEditing() {\n      this.hide();\n    }\n\n    /**\n     * Destroys the plugin instance.\n     */\n\n  }, {\n    key: 'destroy',\n    value: function destroy() {\n      if (this.editor) {\n        this.editor.destroy();\n      }\n\n      if (this.displaySwitch) {\n        this.displaySwitch.destroy();\n      }\n\n      _get(Comments.prototype.__proto__ || Object.getPrototypeOf(Comments.prototype), 'destroy', this).call(this);\n    }\n  }]);\n\n  return Comments;\n}(_base2.default);\n\n(0, _plugins.registerPlugin)('comments', Comments);\n\nexports.default = Comments;\n\n/***/ }),\n/* 299 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _element = __webpack_require__(0);\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * Comment editor for the Comments plugin.\n *\n * @class CommentEditor\n * @plugin Comments\n */\nvar CommentEditor = function () {\n  _createClass(CommentEditor, null, [{\n    key: 'CLASS_EDITOR_CONTAINER',\n    get: function get() {\n      return 'htCommentsContainer';\n    }\n  }, {\n    key: 'CLASS_EDITOR',\n    get: function get() {\n      return 'htComments';\n    }\n  }, {\n    key: 'CLASS_INPUT',\n    get: function get() {\n      return 'htCommentTextArea';\n    }\n  }, {\n    key: 'CLASS_CELL',\n    get: function get() {\n      return 'htCommentCell';\n    }\n  }]);\n\n  function CommentEditor() {\n    _classCallCheck(this, CommentEditor);\n\n    this.editor = this.createEditor();\n    this.editorStyle = this.editor.style;\n\n    this.hidden = true;\n\n    this.hide();\n  }\n\n  /**\n   * Set position of the comments editor according to the  provided x and y coordinates.\n   *\n   * @param {Number} x X position (in pixels).\n   * @param {Number} y Y position (in pixels).\n   */\n\n\n  _createClass(CommentEditor, [{\n    key: 'setPosition',\n    value: function setPosition(x, y) {\n      this.editorStyle.left = x + 'px';\n      this.editorStyle.top = y + 'px';\n    }\n\n    /**\n     * Set the editor size according to the provided arguments.\n     *\n     * @param {Number} width Width in pixels.\n     * @param {Number} height Height in pixels.\n     */\n\n  }, {\n    key: 'setSize',\n    value: function setSize(width, height) {\n      if (width && height) {\n        var input = this.getInputElement();\n\n        input.style.width = width + 'px';\n        input.style.height = height + 'px';\n      }\n    }\n\n    /**\n     * Reset the editor size to its initial state.\n     */\n\n  }, {\n    key: 'resetSize',\n    value: function resetSize() {\n      var input = this.getInputElement();\n\n      input.style.width = '';\n      input.style.height = '';\n    }\n\n    /**\n     * Set the read-only state for the comments editor.\n     *\n     * @param {Boolean} state The new read only state.\n     */\n\n  }, {\n    key: 'setReadOnlyState',\n    value: function setReadOnlyState(state) {\n      var input = this.getInputElement();\n\n      input.readOnly = state;\n    }\n\n    /**\n     * Show the comments editor.\n     */\n\n  }, {\n    key: 'show',\n    value: function show() {\n      this.editorStyle.display = 'block';\n      this.hidden = false;\n    }\n\n    /**\n     * Hide the comments editor.\n     */\n\n  }, {\n    key: 'hide',\n    value: function hide() {\n      this.editorStyle.display = 'none';\n      this.hidden = true;\n    }\n\n    /**\n     * Checks if the editor is visible.\n     *\n     * @returns {Boolean}\n     */\n\n  }, {\n    key: 'isVisible',\n    value: function isVisible() {\n      return this.editorStyle.display === 'block';\n    }\n\n    /**\n     * Set the comment value.\n     *\n     * @param {String} [value] The value to use.\n     */\n\n  }, {\n    key: 'setValue',\n    value: function setValue() {\n      var value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n\n      var comment = value || '';\n\n      this.getInputElement().value = comment;\n    }\n\n    /**\n     * Get the comment value.\n     *\n     * @returns {String}\n     */\n\n  }, {\n    key: 'getValue',\n    value: function getValue() {\n      return this.getInputElement().value;\n    }\n\n    /**\n     * Checks if the comment input element is focused.\n     *\n     * @returns {Boolean}\n     */\n\n  }, {\n    key: 'isFocused',\n    value: function isFocused() {\n      return document.activeElement === this.getInputElement();\n    }\n\n    /**\n     * Focus the comments input element.\n     */\n\n  }, {\n    key: 'focus',\n    value: function focus() {\n      this.getInputElement().focus();\n    }\n\n    /**\n     * Create the `textarea` to be used as a comments editor.\n     *\n     * @returns {HTMLElement}\n     */\n\n  }, {\n    key: 'createEditor',\n    value: function createEditor() {\n      var editor = document.createElement('div');\n      var textArea = document.createElement('textarea');\n      var container = document.querySelector('.' + CommentEditor.CLASS_EDITOR_CONTAINER);\n\n      if (!container) {\n        container = document.createElement('div');\n        (0, _element.addClass)(container, CommentEditor.CLASS_EDITOR_CONTAINER);\n        document.body.appendChild(container);\n      }\n\n      (0, _element.addClass)(editor, CommentEditor.CLASS_EDITOR);\n      (0, _element.addClass)(textArea, CommentEditor.CLASS_INPUT);\n\n      editor.appendChild(textArea);\n      container.appendChild(editor);\n\n      return editor;\n    }\n\n    /**\n     * Get the input element.\n     *\n     * @returns {HTMLElement}\n     */\n\n  }, {\n    key: 'getInputElement',\n    value: function getInputElement() {\n      return this.editor.querySelector('.' + CommentEditor.CLASS_INPUT);\n    }\n\n    /**\n     * Destroy the comments editor.\n     */\n\n  }, {\n    key: 'destroy',\n    value: function destroy() {\n      this.editor.parentNode.removeChild(this.editor);\n      this.editor = null;\n      this.editorStyle = null;\n    }\n  }]);\n\n  return CommentEditor;\n}();\n\nexports.default = CommentEditor;\n\n/***/ }),\n/* 300 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _function = __webpack_require__(43);\n\nvar _object = __webpack_require__(1);\n\nvar _localHooks = __webpack_require__(47);\n\nvar _localHooks2 = _interopRequireDefault(_localHooks);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar DEFAULT_DISPLAY_DELAY = 250;\nvar DEFAULT_HIDE_DELAY = 250;\n\n/**\n * Display switch for the Comments plugin. Manages the time of delayed displaying / hiding comments.\n *\n * @class DisplaySwitch\n * @plugin Comments\n */\n\nvar DisplaySwitch = function () {\n  function DisplaySwitch(displayDelay) {\n    _classCallCheck(this, DisplaySwitch);\n\n    /**\n     * Flag to determine if comment can be showed or hidden. State `true` mean that last performed action\n     * was an attempt to show comment element. State `false` mean that it was attempt to hide comment element.\n     *\n     * @type {Boolean}\n     */\n    this.wasLastActionShow = true;\n    /**\n     * Show comment after predefined delay. It keeps reference to immutable `debounce` function.\n     *\n     * @type {Function}\n     */\n    this.showDebounced = null;\n    /**\n     * Reference to timer, run by `setTimeout`, which is hiding comment\n     *\n     * @type {Number}\n     */\n    this.hidingTimer = null;\n\n    this.updateDelay(displayDelay);\n  }\n\n  /**\n   * Responsible for hiding comment after proper delay.\n   */\n\n\n  _createClass(DisplaySwitch, [{\n    key: 'hide',\n    value: function hide() {\n      var _this = this;\n\n      this.wasLastActionShow = false;\n\n      this.hidingTimer = setTimeout(function () {\n        if (_this.wasLastActionShow === false) {\n          _this.runLocalHooks('hide');\n        }\n      }, DEFAULT_HIDE_DELAY);\n    }\n\n    /**\n     * Responsible for showing comment after proper delay.\n     *\n     * @param {Object} range Coordinates of selected cell.\n     */\n\n  }, {\n    key: 'show',\n    value: function show(range) {\n      this.wasLastActionShow = true;\n      this.showDebounced(range);\n    }\n\n    /**\n     * Cancel hiding comment.\n     */\n\n  }, {\n    key: 'cancelHiding',\n    value: function cancelHiding() {\n      this.wasLastActionShow = true;\n\n      clearTimeout(this.hidingTimer);\n      this.hidingTimer = null;\n    }\n\n    /**\n     * Update the switch settings.\n     *\n     * @param {Number} displayDelay Delay of showing the comments (in milliseconds).\n     */\n\n  }, {\n    key: 'updateDelay',\n    value: function updateDelay() {\n      var _this2 = this;\n\n      var displayDelay = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : DEFAULT_DISPLAY_DELAY;\n\n      this.showDebounced = (0, _function.debounce)(function (range) {\n        if (_this2.wasLastActionShow) {\n          _this2.runLocalHooks('show', range.from.row, range.from.col);\n        }\n      }, displayDelay);\n    }\n\n    /**\n     * Destroy the switcher.\n     */\n\n  }, {\n    key: 'destroy',\n    value: function destroy() {\n      this.clearLocalHooks();\n    }\n  }]);\n\n  return DisplaySwitch;\n}();\n\n(0, _object.mixin)(DisplaySwitch, _localHooks2.default);\n\nexports.default = DisplaySwitch;\n\n/***/ }),\n/* 301 */\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n/* 302 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _base = __webpack_require__(10);\n\nvar _base2 = _interopRequireDefault(_base);\n\nvar _pluginHooks = __webpack_require__(16);\n\nvar _pluginHooks2 = _interopRequireDefault(_pluginHooks);\n\nvar _array = __webpack_require__(2);\n\nvar _commandExecutor2 = __webpack_require__(303);\n\nvar _commandExecutor3 = _interopRequireDefault(_commandExecutor2);\n\nvar _eventManager = __webpack_require__(5);\n\nvar _eventManager2 = _interopRequireDefault(_eventManager);\n\nvar _itemsFactory = __webpack_require__(304);\n\nvar _itemsFactory2 = _interopRequireDefault(_itemsFactory);\n\nvar _menu = __webpack_require__(316);\n\nvar _menu2 = _interopRequireDefault(_menu);\n\nvar _plugins = __webpack_require__(8);\n\nvar _event = __webpack_require__(13);\n\nvar _element = __webpack_require__(0);\n\nvar _predefinedItems = __webpack_require__(96);\n\n__webpack_require__(318);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n_pluginHooks2.default.getSingleton().register('afterContextMenuDefaultOptions');\n_pluginHooks2.default.getSingleton().register('beforeContextMenuShow');\n_pluginHooks2.default.getSingleton().register('afterContextMenuShow');\n_pluginHooks2.default.getSingleton().register('afterContextMenuHide');\n_pluginHooks2.default.getSingleton().register('afterContextMenuExecute');\n\n/**\n * @description\n * This plugin creates the Handsontable Context Menu. It allows to create a new row or column at any place in the\n * grid among [other features](http://docs.handsontable.com/demo-context-menu.html).\n * Possible values:\n * * `true` (to enable default options),\n * * `false` (to disable completely)\n *\n * or array of any available strings:\n * * `'row_above'`\n * * `'row_below'`\n * * `'col_left'`\n * * `'col_right'`\n * * `'remove_row'`\n * * `'remove_col'`\n * * `'undo'`\n * * `'redo'`\n * * `'make_read_only'`\n * * `'alignment'`\n * * `'---------'` (menu item separator)\n * * `'borders'` (with {@link Options#customBorders} turned on)\n * * `'commentsAddEdit'` (with {@link Options#comments} turned on)\n * * `'commentsRemove'` (with {@link Options#comments} turned on)\n *\n * See [the context menu demo](http://docs.handsontable.com/demo-context-menu.html) for examples.\n *\n * @example\n * ```js\n * // as a boolean\n * contextMenu: true\n * // as a array\n * contextMenu: ['row_above', 'row_below', '---------', 'undo', 'redo']\n * ```\n *\n * @plugin ContextMenu\n */\n\nvar ContextMenu = function (_BasePlugin) {\n  _inherits(ContextMenu, _BasePlugin);\n\n  _createClass(ContextMenu, null, [{\n    key: 'DEFAULT_ITEMS',\n\n    /**\n     * Context menu default items order when `contextMenu` options is set as `true`.\n     *\n     * @returns {String[]}\n     */\n    get: function get() {\n      return [_predefinedItems.ROW_ABOVE, _predefinedItems.ROW_BELOW, _predefinedItems.SEPARATOR, _predefinedItems.COLUMN_LEFT, _predefinedItems.COLUMN_RIGHT, _predefinedItems.SEPARATOR, _predefinedItems.REMOVE_ROW, _predefinedItems.REMOVE_COLUMN, _predefinedItems.SEPARATOR, _predefinedItems.UNDO, _predefinedItems.REDO, _predefinedItems.SEPARATOR, _predefinedItems.READ_ONLY, _predefinedItems.SEPARATOR, _predefinedItems.ALIGNMENT];\n    }\n  }]);\n\n  function ContextMenu(hotInstance) {\n    _classCallCheck(this, ContextMenu);\n\n    /**\n     * Instance of {@link EventManager}.\n     *\n     * @private\n     * @type {EventManager}\n     */\n    var _this = _possibleConstructorReturn(this, (ContextMenu.__proto__ || Object.getPrototypeOf(ContextMenu)).call(this, hotInstance));\n\n    _this.eventManager = new _eventManager2.default(_this);\n    /**\n     * Instance of {@link CommandExecutor}.\n     *\n     * @private\n     * @type {CommandExecutor}\n     */\n    _this.commandExecutor = new _commandExecutor3.default(_this.hot);\n    /**\n     * Instance of {@link ItemsFactory}.\n     *\n     * @private\n     * @type {ItemsFactory}\n     */\n    _this.itemsFactory = null;\n    /**\n     * Instance of {@link Menu}.\n     *\n     * @private\n     * @type {Menu}\n     */\n    _this.menu = null;\n    return _this;\n  }\n\n  /**\n   * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}\n   * hook and if it returns `true` than the {@link ContextMenu#enablePlugin} method is called.\n   *\n   * @returns {Boolean}\n   */\n\n\n  _createClass(ContextMenu, [{\n    key: 'isEnabled',\n    value: function isEnabled() {\n      return this.hot.getSettings().contextMenu;\n    }\n\n    /**\n     * Enables the plugin functionality for this Handsontable instance.\n     */\n\n  }, {\n    key: 'enablePlugin',\n    value: function enablePlugin() {\n      var _this2 = this;\n\n      if (this.enabled) {\n        return;\n      }\n      this.itemsFactory = new _itemsFactory2.default(this.hot, ContextMenu.DEFAULT_ITEMS);\n\n      var settings = this.hot.getSettings().contextMenu;\n      var predefinedItems = {\n        items: this.itemsFactory.getItems(settings)\n      };\n\n      if (typeof settings.callback === 'function') {\n        this.commandExecutor.setCommonCallback(settings.callback);\n      }\n      _get(ContextMenu.prototype.__proto__ || Object.getPrototypeOf(ContextMenu.prototype), 'enablePlugin', this).call(this);\n\n      var delayedInitialization = function delayedInitialization() {\n        if (!_this2.hot) {\n          return;\n        }\n\n        _this2.hot.runHooks('afterContextMenuDefaultOptions', predefinedItems);\n\n        _this2.itemsFactory.setPredefinedItems(predefinedItems.items);\n        var menuItems = _this2.itemsFactory.getItems(settings);\n\n        _this2.menu = new _menu2.default(_this2.hot, {\n          className: 'htContextMenu',\n          keepInViewport: true\n        });\n        _this2.hot.runHooks('beforeContextMenuSetItems', menuItems);\n\n        _this2.menu.setMenuItems(menuItems);\n\n        _this2.menu.addLocalHook('beforeOpen', function () {\n          return _this2.onMenuBeforeOpen();\n        });\n        _this2.menu.addLocalHook('afterOpen', function () {\n          return _this2.onMenuAfterOpen();\n        });\n        _this2.menu.addLocalHook('afterClose', function () {\n          return _this2.onMenuAfterClose();\n        });\n        _this2.menu.addLocalHook('executeCommand', function () {\n          var _executeCommand;\n\n          for (var _len = arguments.length, params = Array(_len), _key = 0; _key < _len; _key++) {\n            params[_key] = arguments[_key];\n          }\n\n          return (_executeCommand = _this2.executeCommand).call.apply(_executeCommand, [_this2].concat(params));\n        });\n\n        _this2.addHook('afterOnCellContextMenu', function (event) {\n          return _this2.onAfterOnCellContextMenu(event);\n        });\n\n        // Register all commands. Predefined and added by user or by plugins\n        (0, _array.arrayEach)(menuItems, function (command) {\n          return _this2.commandExecutor.registerCommand(command.key, command);\n        });\n      };\n\n      this.callOnPluginsReady(function () {\n        if (_this2.isPluginsReady) {\n          setTimeout(delayedInitialization, 0);\n        } else {\n          delayedInitialization();\n        }\n      });\n    }\n\n    /**\n     * Updates the plugin state. This method is executed when {@link Core#updateSettings} is invoked.\n     */\n\n  }, {\n    key: 'updatePlugin',\n    value: function updatePlugin() {\n      this.disablePlugin();\n      this.enablePlugin();\n\n      _get(ContextMenu.prototype.__proto__ || Object.getPrototypeOf(ContextMenu.prototype), 'updatePlugin', this).call(this);\n    }\n\n    /**\n     * Disables the plugin functionality for this Handsontable instance.\n     */\n\n  }, {\n    key: 'disablePlugin',\n    value: function disablePlugin() {\n      this.close();\n\n      if (this.menu) {\n        this.menu.destroy();\n        this.menu = null;\n      }\n      _get(ContextMenu.prototype.__proto__ || Object.getPrototypeOf(ContextMenu.prototype), 'disablePlugin', this).call(this);\n    }\n\n    /**\n     * Opens menu and re-position it based on the passed coordinates.\n     *\n     * @param {Object|Event} position An object with `pageX` and `pageY` properties which contains values relative to\n     *                                the top left of the fully rendered content area in the browser or with `clientX`\n     *                                and `clientY`  properties which contains values relative to the upper left edge\n     *                                of the content area (the viewport) of the browser window. This object is structurally\n     *                                compatible with native mouse event so it can be used either.\n     */\n\n  }, {\n    key: 'open',\n    value: function open(event) {\n      if (!this.menu) {\n        return;\n      }\n      this.menu.open();\n      this.menu.setPosition({\n        top: parseInt((0, _event.pageY)(event), 10) - (0, _element.getWindowScrollTop)(),\n        left: parseInt((0, _event.pageX)(event), 10) - (0, _element.getWindowScrollLeft)()\n      });\n\n      // ContextMenu is not detected HotTableEnv correctly because is injected outside hot-table\n      this.menu.hotMenu.isHotTableEnv = this.hot.isHotTableEnv;\n      // Handsontable.eventManager.isHotTableEnv = this.hot.isHotTableEnv;\n    }\n\n    /**\n     * Closes the menu.\n     */\n\n  }, {\n    key: 'close',\n    value: function close() {\n      if (!this.menu) {\n        return;\n      }\n      this.menu.close();\n    }\n\n    /**\n     * Execute context menu command.\n     *\n     * You can execute all predefined commands:\n     *  * `'row_above'` - Insert row above\n     *  * `'row_below'` - Insert row below\n     *  * `'col_left'` - Insert column left\n     *  * `'col_right'` - Insert column right\n     *  * `'clear_column'` - Clear selected column\n     *  * `'remove_row'` - Remove row\n     *  * `'remove_col'` - Remove column\n     *  * `'undo'` - Undo last action\n     *  * `'redo'` - Redo last action\n     *  * `'make_read_only'` - Make cell read only\n     *  * `'alignment:left'` - Alignment to the left\n     *  * `'alignment:top'` - Alignment to the top\n     *  * `'alignment:right'` - Alignment to the right\n     *  * `'alignment:bottom'` - Alignment to the bottom\n     *  * `'alignment:middle'` - Alignment to the middle\n     *  * `'alignment:center'` - Alignment to the center (justify)\n     *\n     * Or you can execute command registered in settings where `key` is your command name.\n     *\n     * @param {String} commandName The command name to be executed.\n     * @param {...*} params\n     */\n\n  }, {\n    key: 'executeCommand',\n    value: function executeCommand(commandName) {\n      var _commandExecutor;\n\n      for (var _len2 = arguments.length, params = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n        params[_key2 - 1] = arguments[_key2];\n      }\n\n      (_commandExecutor = this.commandExecutor).execute.apply(_commandExecutor, [commandName].concat(params));\n    }\n\n    /**\n     * On contextmenu listener.\n     *\n     * @private\n     * @param {Event} event\n     */\n\n  }, {\n    key: 'onAfterOnCellContextMenu',\n    value: function onAfterOnCellContextMenu(event) {\n      var settings = this.hot.getSettings();\n      var showRowHeaders = settings.rowHeaders;\n      var showColHeaders = settings.colHeaders;\n\n      function isValidElement(element) {\n        return element.nodeName === 'TD' || element.parentNode.nodeName === 'TD';\n      }\n      // if event is from hot-table we must get web component element not element inside him\n      var element = event.realTarget;\n      this.close();\n\n      if ((0, _element.hasClass)(element, 'handsontableInput')) {\n        return;\n      }\n\n      event.preventDefault();\n      (0, _event.stopPropagation)(event);\n\n      if (!(showRowHeaders || showColHeaders)) {\n        if (!isValidElement(element) && !((0, _element.hasClass)(element, 'current') && (0, _element.hasClass)(element, 'wtBorder'))) {\n          return;\n        }\n      }\n\n      this.open(event);\n    }\n\n    /**\n     * On menu before open listener.\n     *\n     * @private\n     */\n\n  }, {\n    key: 'onMenuBeforeOpen',\n    value: function onMenuBeforeOpen() {\n      this.hot.runHooks('beforeContextMenuShow', this);\n    }\n\n    /**\n     * On menu after open listener.\n     *\n     * @private\n     */\n\n  }, {\n    key: 'onMenuAfterOpen',\n    value: function onMenuAfterOpen() {\n      this.hot.runHooks('afterContextMenuShow', this);\n    }\n\n    /**\n     * On menu after close listener.\n     *\n     * @private\n     */\n\n  }, {\n    key: 'onMenuAfterClose',\n    value: function onMenuAfterClose() {\n      this.hot.listen();\n      this.hot.runHooks('afterContextMenuHide', this);\n    }\n\n    /**\n     * Destroys the plugin instance.\n     */\n\n  }, {\n    key: 'destroy',\n    value: function destroy() {\n      this.close();\n\n      if (this.menu) {\n        this.menu.destroy();\n      }\n      _get(ContextMenu.prototype.__proto__ || Object.getPrototypeOf(ContextMenu.prototype), 'destroy', this).call(this);\n    }\n  }]);\n\n  return ContextMenu;\n}(_base2.default);\n\nContextMenu.SEPARATOR = {\n  name: _predefinedItems.SEPARATOR\n};\n\n(0, _plugins.registerPlugin)('contextMenu', ContextMenu);\n\nexports.default = ContextMenu;\n\n/***/ }),\n/* 303 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _array = __webpack_require__(2);\n\nvar _object = __webpack_require__(1);\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * Command executor for ContextMenu.\n *\n * @class CommandExecutor\n * @plugin ContextMenu\n */\nvar CommandExecutor = function () {\n  function CommandExecutor(hotInstance) {\n    _classCallCheck(this, CommandExecutor);\n\n    this.hot = hotInstance;\n    this.commands = {};\n    this.commonCallback = null;\n  }\n\n  /**\n   * Register command.\n   *\n   * @param {String} name Command name.\n   * @param {Object} commandDescriptor Command descriptor object with properties like `key` (command id),\n   *                                   `callback` (task to execute), `name` (command name), `disabled` (command availability).\n   */\n\n\n  _createClass(CommandExecutor, [{\n    key: 'registerCommand',\n    value: function registerCommand(name, commandDescriptor) {\n      this.commands[name] = commandDescriptor;\n    }\n\n    /**\n     * Set common callback which will be trigger on every executed command.\n     *\n     * @param {Function} callback Function which will be fired on every command execute.\n     */\n\n  }, {\n    key: 'setCommonCallback',\n    value: function setCommonCallback(callback) {\n      this.commonCallback = callback;\n    }\n\n    /**\n     * Execute command by its name.\n     *\n     * @param {String} commandName Command id.\n     * @param {*} params Arguments passed to command task.\n     */\n\n  }, {\n    key: 'execute',\n    value: function execute(commandName) {\n      var _this = this;\n\n      for (var _len = arguments.length, params = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n        params[_key - 1] = arguments[_key];\n      }\n\n      var commandSplit = commandName.split(':');\n      var commandNamePrimary = commandSplit[0];\n\n      var subCommandName = commandSplit.length === 2 ? commandSplit[1] : null;\n      var command = this.commands[commandNamePrimary];\n\n      if (!command) {\n        throw new Error('Menu command \\'' + commandNamePrimary + '\\' not exists.');\n      }\n      if (subCommandName && command.submenu) {\n        command = findSubCommand(subCommandName, command.submenu.items);\n      }\n      if (command.disabled === true) {\n        return;\n      }\n      if (typeof command.disabled === 'function' && command.disabled.call(this.hot) === true) {\n        return;\n      }\n      if ((0, _object.hasOwnProperty)(command, 'submenu')) {\n        return;\n      }\n      var callbacks = [];\n\n      if (typeof command.callback === 'function') {\n        callbacks.push(command.callback);\n      }\n      if (typeof this.commonCallback === 'function') {\n        callbacks.push(this.commonCallback);\n      }\n      params.unshift(commandSplit.join(':'));\n      (0, _array.arrayEach)(callbacks, function (callback) {\n        return callback.apply(_this.hot, params);\n      });\n    }\n  }]);\n\n  return CommandExecutor;\n}();\n\nfunction findSubCommand(subCommandName, subCommands) {\n  var command = void 0;\n\n  (0, _array.arrayEach)(subCommands, function (cmd) {\n    var cmds = cmd.key ? cmd.key.split(':') : null;\n\n    if (Array.isArray(cmds) && cmds[1] === subCommandName) {\n      command = cmd;\n\n      return false;\n    }\n  });\n\n  return command;\n}\n\nexports.default = CommandExecutor;\n\n/***/ }),\n/* 304 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _object = __webpack_require__(1);\n\nvar _array = __webpack_require__(2);\n\nvar _predefinedItems = __webpack_require__(96);\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * Predefined items class factory for menu items.\n *\n * @class ItemsFactory\n * @plugin ContextMenu\n */\nvar ItemsFactory = function () {\n  function ItemsFactory(hotInstance) {\n    var orderPattern = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\n    _classCallCheck(this, ItemsFactory);\n\n    this.hot = hotInstance;\n    this.predefinedItems = (0, _predefinedItems.predefinedItems)();\n    this.defaultOrderPattern = orderPattern;\n  }\n\n  /**\n   * Set predefined items.\n   *\n   * @param {Array} predefinedItemsCollection Array of predefined items.\n   */\n\n\n  _createClass(ItemsFactory, [{\n    key: 'setPredefinedItems',\n    value: function setPredefinedItems(predefinedItemsCollection) {\n      var _this = this;\n\n      var items = {};\n\n      this.defaultOrderPattern.length = 0;\n\n      (0, _object.objectEach)(predefinedItemsCollection, function (value, key) {\n        var menuItemKey = '';\n\n        if (value.name === _predefinedItems.SEPARATOR) {\n          items[_predefinedItems.SEPARATOR] = value;\n          menuItemKey = _predefinedItems.SEPARATOR;\n\n          // Menu item added as a property to array\n        } else if (isNaN(parseInt(key, 10))) {\n          value.key = value.key === void 0 ? key : value.key;\n          items[key] = value;\n          menuItemKey = value.key;\n        } else {\n          items[value.key] = value;\n          menuItemKey = value.key;\n        }\n        _this.defaultOrderPattern.push(menuItemKey);\n      });\n      this.predefinedItems = items;\n    }\n\n    /**\n     * Get all menu items based on pattern.\n     *\n     * @param {Array|Object|Boolean} pattern Pattern which you can define by displaying menu items order. If `true` default\n     *                                       pattern will be used.\n     * @returns {Array}\n     */\n\n  }, {\n    key: 'getItems',\n    value: function getItems() {\n      var pattern = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n\n      return _getItems(pattern, this.defaultOrderPattern, this.predefinedItems);\n    }\n  }]);\n\n  return ItemsFactory;\n}();\n\nfunction _getItems() {\n  var itemsPattern = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n  var defaultPattern = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n  var items = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n  var result = [];\n  var pattern = itemsPattern;\n\n  if (pattern && pattern.items) {\n    pattern = pattern.items;\n  } else if (!Array.isArray(pattern)) {\n    pattern = defaultPattern;\n  }\n  if ((0, _object.isObject)(pattern)) {\n    (0, _object.objectEach)(pattern, function (value, key) {\n      var item = items[typeof value === 'string' ? value : key];\n\n      if (!item) {\n        item = value;\n      }\n      if ((0, _object.isObject)(value)) {\n        (0, _object.extend)(item, value);\n      } else if (typeof item === 'string') {\n        item = { name: item };\n      }\n      if (item.key === void 0) {\n        item.key = key;\n      }\n      result.push(item);\n    });\n  } else {\n    (0, _array.arrayEach)(pattern, function (name, key) {\n      var item = items[name];\n\n      // Item deleted from settings `allowInsertRow: false` etc.\n      if (!item && _predefinedItems.ITEMS.indexOf(name) >= 0) {\n        return;\n      }\n      if (!item) {\n        item = { name: name, key: '' + key };\n      }\n      if ((0, _object.isObject)(name)) {\n        (0, _object.extend)(item, name);\n      }\n      if (item.key === void 0) {\n        item.key = key;\n      }\n      result.push(item);\n    });\n  }\n\n  return result;\n}\n\nexports.default = ItemsFactory;\n\n/***/ }),\n/* 305 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports.KEY = undefined;\nexports.default = alignmentItem;\n\nvar _utils = __webpack_require__(19);\n\nvar _separator = __webpack_require__(95);\n\nvar _constants = __webpack_require__(7);\n\nvar C = _interopRequireWildcard(_constants);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nvar KEY = exports.KEY = 'alignment';\n\nfunction alignmentItem() {\n  return {\n    key: KEY,\n    name: function name() {\n      return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_ALIGNMENT);\n    },\n    disabled: function disabled() {\n      return !(this.getSelectedRange() && !this.selection.isSelectedByCorner());\n    },\n\n    submenu: {\n      items: [{\n        key: KEY + ':left',\n        name: function name() {\n          var _this = this;\n\n          var label = this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_ALIGNMENT_LEFT);\n          var hasClass = (0, _utils.checkSelectionConsistency)(this.getSelectedRange(), function (row, col) {\n            var className = _this.getCellMeta(row, col).className;\n\n            if (className && className.indexOf('htLeft') !== -1) {\n              return true;\n            }\n          });\n\n          if (hasClass) {\n            label = (0, _utils.markLabelAsSelected)(label);\n          }\n\n          return label;\n        },\n        callback: function callback() {\n          var _this2 = this;\n\n          var selectedRange = this.getSelectedRange();\n          var stateBefore = (0, _utils.getAlignmentClasses)(selectedRange, function (row, col) {\n            return _this2.getCellMeta(row, col).className;\n          });\n          var type = 'horizontal';\n          var alignment = 'htLeft';\n\n          this.runHooks('beforeCellAlignment', stateBefore, selectedRange, type, alignment);\n          (0, _utils.align)(selectedRange, type, alignment, function (row, col) {\n            return _this2.getCellMeta(row, col);\n          }, function (row, col, key, value) {\n            return _this2.setCellMeta(row, col, key, value);\n          });\n          this.render();\n        },\n\n        disabled: false\n      }, {\n        key: KEY + ':center',\n        name: function name() {\n          var _this3 = this;\n\n          var label = this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_ALIGNMENT_CENTER);\n          var hasClass = (0, _utils.checkSelectionConsistency)(this.getSelectedRange(), function (row, col) {\n            var className = _this3.getCellMeta(row, col).className;\n\n            if (className && className.indexOf('htCenter') !== -1) {\n              return true;\n            }\n          });\n\n          if (hasClass) {\n            label = (0, _utils.markLabelAsSelected)(label);\n          }\n\n          return label;\n        },\n        callback: function callback() {\n          var _this4 = this;\n\n          var selectedRange = this.getSelectedRange();\n          var stateBefore = (0, _utils.getAlignmentClasses)(selectedRange, function (row, col) {\n            return _this4.getCellMeta(row, col).className;\n          });\n          var type = 'horizontal';\n          var alignment = 'htCenter';\n\n          this.runHooks('beforeCellAlignment', stateBefore, selectedRange, type, alignment);\n          (0, _utils.align)(selectedRange, type, alignment, function (row, col) {\n            return _this4.getCellMeta(row, col);\n          }, function (row, col, key, value) {\n            return _this4.setCellMeta(row, col, key, value);\n          });\n          this.render();\n        },\n\n        disabled: false\n      }, {\n        key: KEY + ':right',\n        name: function name() {\n          var _this5 = this;\n\n          var label = this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_ALIGNMENT_RIGHT);\n          var hasClass = (0, _utils.checkSelectionConsistency)(this.getSelectedRange(), function (row, col) {\n            var className = _this5.getCellMeta(row, col).className;\n\n            if (className && className.indexOf('htRight') !== -1) {\n              return true;\n            }\n          });\n\n          if (hasClass) {\n            label = (0, _utils.markLabelAsSelected)(label);\n          }\n\n          return label;\n        },\n        callback: function callback() {\n          var _this6 = this;\n\n          var selectedRange = this.getSelectedRange();\n          var stateBefore = (0, _utils.getAlignmentClasses)(selectedRange, function (row, col) {\n            return _this6.getCellMeta(row, col).className;\n          });\n          var type = 'horizontal';\n          var alignment = 'htRight';\n\n          this.runHooks('beforeCellAlignment', stateBefore, selectedRange, type, alignment);\n          (0, _utils.align)(selectedRange, type, alignment, function (row, col) {\n            return _this6.getCellMeta(row, col);\n          }, function (row, col, key, value) {\n            return _this6.setCellMeta(row, col, key, value);\n          });\n          this.render();\n        },\n\n        disabled: false\n      }, {\n        key: KEY + ':justify',\n        name: function name() {\n          var _this7 = this;\n\n          var label = this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_ALIGNMENT_JUSTIFY);\n          var hasClass = (0, _utils.checkSelectionConsistency)(this.getSelectedRange(), function (row, col) {\n            var className = _this7.getCellMeta(row, col).className;\n\n            if (className && className.indexOf('htJustify') !== -1) {\n              return true;\n            }\n          });\n\n          if (hasClass) {\n            label = (0, _utils.markLabelAsSelected)(label);\n          }\n\n          return label;\n        },\n        callback: function callback() {\n          var _this8 = this;\n\n          var selectedRange = this.getSelectedRange();\n          var stateBefore = (0, _utils.getAlignmentClasses)(selectedRange, function (row, col) {\n            return _this8.getCellMeta(row, col).className;\n          });\n          var type = 'horizontal';\n          var alignment = 'htJustify';\n\n          this.runHooks('beforeCellAlignment', stateBefore, selectedRange, type, alignment);\n          (0, _utils.align)(selectedRange, type, alignment, function (row, col) {\n            return _this8.getCellMeta(row, col);\n          }, function (row, col, key, value) {\n            return _this8.setCellMeta(row, col, key, value);\n          });\n          this.render();\n        },\n\n        disabled: false\n      }, {\n        name: _separator.KEY\n      }, {\n        key: KEY + ':top',\n        name: function name() {\n          var _this9 = this;\n\n          var label = this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_ALIGNMENT_TOP);\n          var hasClass = (0, _utils.checkSelectionConsistency)(this.getSelectedRange(), function (row, col) {\n            var className = _this9.getCellMeta(row, col).className;\n\n            if (className && className.indexOf('htTop') !== -1) {\n              return true;\n            }\n          });\n\n          if (hasClass) {\n            label = (0, _utils.markLabelAsSelected)(label);\n          }\n          return label;\n        },\n        callback: function callback() {\n          var _this10 = this;\n\n          var selectedRange = this.getSelectedRange();\n          var stateBefore = (0, _utils.getAlignmentClasses)(selectedRange, function (row, col) {\n            return _this10.getCellMeta(row, col).className;\n          });\n          var type = 'vertical';\n          var alignment = 'htTop';\n\n          this.runHooks('beforeCellAlignment', stateBefore, selectedRange, type, alignment);\n          (0, _utils.align)(selectedRange, type, alignment, function (row, col) {\n            return _this10.getCellMeta(row, col);\n          }, function (row, col, key, value) {\n            return _this10.setCellMeta(row, col, key, value);\n          });\n          this.render();\n        },\n\n        disabled: false\n      }, {\n        key: KEY + ':middle',\n        name: function name() {\n          var _this11 = this;\n\n          var label = this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_ALIGNMENT_MIDDLE);\n          var hasClass = (0, _utils.checkSelectionConsistency)(this.getSelectedRange(), function (row, col) {\n            var className = _this11.getCellMeta(row, col).className;\n\n            if (className && className.indexOf('htMiddle') !== -1) {\n              return true;\n            }\n          });\n\n          if (hasClass) {\n            label = (0, _utils.markLabelAsSelected)(label);\n          }\n\n          return label;\n        },\n        callback: function callback() {\n          var _this12 = this;\n\n          var selectedRange = this.getSelectedRange();\n          var stateBefore = (0, _utils.getAlignmentClasses)(selectedRange, function (row, col) {\n            return _this12.getCellMeta(row, col).className;\n          });\n          var type = 'vertical';\n          var alignment = 'htMiddle';\n\n          this.runHooks('beforeCellAlignment', stateBefore, selectedRange, type, alignment);\n          (0, _utils.align)(selectedRange, type, alignment, function (row, col) {\n            return _this12.getCellMeta(row, col);\n          }, function (row, col, key, value) {\n            return _this12.setCellMeta(row, col, key, value);\n          });\n          this.render();\n        },\n\n        disabled: false\n      }, {\n        key: KEY + ':bottom',\n        name: function name() {\n          var _this13 = this;\n\n          var label = this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_ALIGNMENT_BOTTOM);\n          var hasClass = (0, _utils.checkSelectionConsistency)(this.getSelectedRange(), function (row, col) {\n            var className = _this13.getCellMeta(row, col).className;\n\n            if (className && className.indexOf('htBottom') !== -1) {\n              return true;\n            }\n          });\n\n          if (hasClass) {\n            label = (0, _utils.markLabelAsSelected)(label);\n          }\n\n          return label;\n        },\n        callback: function callback() {\n          var _this14 = this;\n\n          var selectedRange = this.getSelectedRange();\n          var stateBefore = (0, _utils.getAlignmentClasses)(selectedRange, function (row, col) {\n            return _this14.getCellMeta(row, col).className;\n          });\n          var type = 'vertical';\n          var alignment = 'htBottom';\n\n          this.runHooks('beforeCellAlignment', stateBefore, selectedRange, type, alignment);\n          (0, _utils.align)(selectedRange, type, alignment, function (row, col) {\n            return _this14.getCellMeta(row, col);\n          }, function (row, col, key, value) {\n            return _this14.setCellMeta(row, col, key, value);\n          });\n          this.render();\n        },\n\n        disabled: false\n      }]\n    }\n  };\n}\n\n/***/ }),\n/* 306 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports.KEY = undefined;\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nexports.default = clearColumnItem;\n\nvar _utils = __webpack_require__(19);\n\nvar _constants = __webpack_require__(7);\n\nvar C = _interopRequireWildcard(_constants);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nvar KEY = exports.KEY = 'clear_column';\n\nfunction clearColumnItem() {\n  return {\n    key: KEY,\n    name: function name() {\n      return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_CLEAR_COLUMN);\n    },\n    callback: function callback(key, selection) {\n      var column = selection[0].start.col;\n\n      if (this.countRows()) {\n        this.populateFromArray(0, column, [[null]], Math.max(selection[0].start.row, selection[0].end.row), column, 'ContextMenu.clearColumn');\n      }\n    },\n    disabled: function disabled() {\n      var selected = (0, _utils.getValidSelection)(this);\n\n      if (!selected) {\n        return true;\n      }\n\n      var _selected$ = _slicedToArray(selected[0], 3),\n          startRow = _selected$[0],\n          startColumn = _selected$[1],\n          endRow = _selected$[2];\n\n      var entireRowSelection = [startRow, 0, endRow, this.countCols() - 1];\n      var rowSelected = entireRowSelection.join(',') === selected.join(',');\n\n      return startColumn < 0 || this.countCols() >= this.getSettings().maxCols || rowSelected;\n    }\n  };\n}\n\n/***/ }),\n/* 307 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports.KEY = undefined;\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nexports.default = columnLeftItem;\n\nvar _utils = __webpack_require__(19);\n\nvar _constants = __webpack_require__(7);\n\nvar C = _interopRequireWildcard(_constants);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nvar KEY = exports.KEY = 'col_left';\n\nfunction columnLeftItem() {\n  return {\n    key: KEY,\n    name: function name() {\n      return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_INSERT_LEFT);\n    },\n    callback: function callback(key, normalizedSelection) {\n      var latestSelection = normalizedSelection[Math.max(normalizedSelection.length - 1, 0)];\n\n      this.alter('insert_col', latestSelection.start.col, 1, 'ContextMenu.columnLeft');\n    },\n    disabled: function disabled() {\n      var selected = (0, _utils.getValidSelection)(this);\n\n      if (!selected) {\n        return true;\n      }\n      if (!this.isColumnModificationAllowed()) {\n        return true;\n      }\n\n      var _selected$ = _slicedToArray(selected[0], 3),\n          startRow = _selected$[0],\n          startColumn = _selected$[1],\n          endRow = _selected$[2];\n\n      var entireRowSelection = [startRow, 0, endRow, this.countCols() - 1];\n      var rowSelected = entireRowSelection.join(',') === selected.join(',');\n      var onlyOneColumn = this.countCols() === 1;\n\n      return startColumn < 0 || this.countCols() >= this.getSettings().maxCols || !onlyOneColumn && rowSelected;\n    },\n    hidden: function hidden() {\n      return !this.getSettings().allowInsertColumn;\n    }\n  };\n}\n\n/***/ }),\n/* 308 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports.KEY = undefined;\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nexports.default = columnRightItem;\n\nvar _utils = __webpack_require__(19);\n\nvar _constants = __webpack_require__(7);\n\nvar C = _interopRequireWildcard(_constants);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nvar KEY = exports.KEY = 'col_right';\n\nfunction columnRightItem() {\n  return {\n    key: KEY,\n    name: function name() {\n      return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_INSERT_RIGHT);\n    },\n    callback: function callback(key, normalizedSelection) {\n      var latestSelection = normalizedSelection[Math.max(normalizedSelection.length - 1, 0)];\n\n      this.alter('insert_col', latestSelection.end.col + 1, 1, 'ContextMenu.columnRight');\n    },\n    disabled: function disabled() {\n      var selected = (0, _utils.getValidSelection)(this);\n\n      if (!selected) {\n        return true;\n      }\n      if (!this.isColumnModificationAllowed()) {\n        return true;\n      }\n\n      var _selected$ = _slicedToArray(selected[0], 3),\n          startRow = _selected$[0],\n          startColumn = _selected$[1],\n          endRow = _selected$[2];\n\n      var entireRowSelection = [startRow, 0, endRow, this.countCols() - 1];\n      var rowSelected = entireRowSelection.join(',') === selected.join(',');\n      var onlyOneColumn = this.countCols() === 1;\n\n      return startColumn < 0 || this.countCols() >= this.getSettings().maxCols || !onlyOneColumn && rowSelected;\n    },\n    hidden: function hidden() {\n      return !this.getSettings().allowInsertColumn;\n    }\n  };\n}\n\n/***/ }),\n/* 309 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports.KEY = undefined;\nexports.default = readOnlyItem;\n\nvar _utils = __webpack_require__(19);\n\nvar _array = __webpack_require__(2);\n\nvar _constants = __webpack_require__(7);\n\nvar C = _interopRequireWildcard(_constants);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nvar KEY = exports.KEY = 'make_read_only';\n\nfunction readOnlyItem() {\n  return {\n    key: KEY,\n    name: function name() {\n      var _this = this;\n\n      var label = this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_READ_ONLY);\n      var atLeastOneReadOnly = (0, _utils.checkSelectionConsistency)(this.getSelectedRange(), function (row, col) {\n        return _this.getCellMeta(row, col).readOnly;\n      });\n\n      if (atLeastOneReadOnly) {\n        label = (0, _utils.markLabelAsSelected)(label);\n      }\n\n      return label;\n    },\n    callback: function callback() {\n      var _this2 = this;\n\n      var ranges = this.getSelectedRange();\n      var atLeastOneReadOnly = (0, _utils.checkSelectionConsistency)(ranges, function (row, col) {\n        return _this2.getCellMeta(row, col).readOnly;\n      });\n\n      (0, _array.arrayEach)(ranges, function (range) {\n        range.forAll(function (row, col) {\n          _this2.setCellMeta(row, col, 'readOnly', !atLeastOneReadOnly);\n        });\n      });\n\n      this.render();\n    },\n    disabled: function disabled() {\n      return !(this.getSelectedRange() && !this.selection.isSelectedByCorner());\n    }\n  };\n}\n\n/***/ }),\n/* 310 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports.KEY = undefined;\nexports.default = redoItem;\n\nvar _constants = __webpack_require__(7);\n\nvar C = _interopRequireWildcard(_constants);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nvar KEY = exports.KEY = 'redo';\n\nfunction redoItem() {\n  return {\n    key: KEY,\n    name: function name() {\n      return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_REDO);\n    },\n    callback: function callback() {\n      this.redo();\n    },\n    disabled: function disabled() {\n      return this.undoRedo && !this.undoRedo.isRedoAvailable();\n    }\n  };\n}\n\n/***/ }),\n/* 311 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports.KEY = undefined;\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nexports.default = removeColumnItem;\n\nvar _utils = __webpack_require__(19);\n\nvar _utils2 = __webpack_require__(72);\n\nvar _constants = __webpack_require__(7);\n\nvar C = _interopRequireWildcard(_constants);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nvar KEY = exports.KEY = 'remove_col';\n\nfunction removeColumnItem() {\n  return {\n    key: KEY,\n    name: function name() {\n      var selection = this.getSelected();\n      var pluralForm = 0;\n\n      if (selection) {\n        if (selection.length > 1) {\n          pluralForm = 1;\n        } else {\n          var _selection$ = _slicedToArray(selection[0], 4),\n              fromColumn = _selection$[1],\n              toColumn = _selection$[3];\n\n          if (fromColumn - toColumn !== 0) {\n            pluralForm = 1;\n          }\n        }\n      }\n\n      return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_REMOVE_COLUMN, pluralForm);\n    },\n    callback: function callback() {\n      this.alter('remove_col', (0, _utils2.transformSelectionToColumnDistance)(this.getSelected()), null, 'ContextMenu.removeColumn');\n    },\n    disabled: function disabled() {\n      var selected = (0, _utils.getValidSelection)(this);\n      var totalColumns = this.countCols();\n\n      if (!selected) {\n        return true;\n      }\n\n      return this.selection.isSelectedByRowHeader() || this.selection.isSelectedByCorner() || !this.isColumnModificationAllowed() || !totalColumns;\n    },\n    hidden: function hidden() {\n      return !this.getSettings().allowRemoveColumn;\n    }\n  };\n}\n\n/***/ }),\n/* 312 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports.KEY = undefined;\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nexports.default = removeRowItem;\n\nvar _utils = __webpack_require__(19);\n\nvar _utils2 = __webpack_require__(72);\n\nvar _constants = __webpack_require__(7);\n\nvar C = _interopRequireWildcard(_constants);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nvar KEY = exports.KEY = 'remove_row';\n\nfunction removeRowItem() {\n  return {\n    key: KEY,\n    name: function name() {\n      var selection = this.getSelected();\n      var pluralForm = 0;\n\n      if (selection) {\n        if (selection.length > 1) {\n          pluralForm = 1;\n        } else {\n          var _selection$ = _slicedToArray(selection[0], 3),\n              fromRow = _selection$[0],\n              toRow = _selection$[2];\n\n          if (fromRow - toRow !== 0) {\n            pluralForm = 1;\n          }\n        }\n      }\n\n      return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_REMOVE_ROW, pluralForm);\n    },\n    callback: function callback() {\n      this.alter('remove_row', (0, _utils2.transformSelectionToRowDistance)(this.getSelected()), null, 'ContextMenu.removeRow');\n    },\n    disabled: function disabled() {\n      var selected = (0, _utils.getValidSelection)(this);\n      var totalRows = this.countRows();\n\n      if (!selected) {\n        return true;\n      }\n\n      return this.selection.isSelectedByColumnHeader() || this.selection.isSelectedByCorner() || !totalRows;\n    },\n    hidden: function hidden() {\n      return !this.getSettings().allowRemoveRow;\n    }\n  };\n}\n\n/***/ }),\n/* 313 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports.KEY = undefined;\nexports.default = rowAboveItem;\n\nvar _utils = __webpack_require__(19);\n\nvar _constants = __webpack_require__(7);\n\nvar C = _interopRequireWildcard(_constants);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nvar KEY = exports.KEY = 'row_above';\n\nfunction rowAboveItem() {\n  return {\n    key: KEY,\n    name: function name() {\n      return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_ROW_ABOVE);\n    },\n    callback: function callback(key, normalizedSelection) {\n      var latestSelection = normalizedSelection[Math.max(normalizedSelection.length - 1, 0)];\n\n      this.alter('insert_row', latestSelection.start.row, 1, 'ContextMenu.rowAbove');\n    },\n    disabled: function disabled() {\n      var selected = (0, _utils.getValidSelection)(this);\n\n      if (!selected) {\n        return true;\n      }\n\n      return this.selection.isSelectedByColumnHeader() || this.countRows() >= this.getSettings().maxRows;\n    },\n    hidden: function hidden() {\n      return !this.getSettings().allowInsertRow;\n    }\n  };\n}\n\n/***/ }),\n/* 314 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports.KEY = undefined;\nexports.default = rowBelowItem;\n\nvar _utils = __webpack_require__(19);\n\nvar _constants = __webpack_require__(7);\n\nvar C = _interopRequireWildcard(_constants);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nvar KEY = exports.KEY = 'row_below';\n\nfunction rowBelowItem() {\n  return {\n    key: KEY,\n    name: function name() {\n      return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_ROW_BELOW);\n    },\n    callback: function callback(key, normalizedSelection) {\n      var latestSelection = normalizedSelection[Math.max(normalizedSelection.length - 1, 0)];\n\n      this.alter('insert_row', latestSelection.end.row + 1, 1, 'ContextMenu.rowBelow');\n    },\n    disabled: function disabled() {\n      var selected = (0, _utils.getValidSelection)(this);\n\n      if (!selected) {\n        return true;\n      }\n\n      return this.selection.isSelectedByColumnHeader() || this.countRows() >= this.getSettings().maxRows;\n    },\n    hidden: function hidden() {\n      return !this.getSettings().allowInsertRow;\n    }\n  };\n}\n\n/***/ }),\n/* 315 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports.KEY = undefined;\nexports.default = undoItem;\n\nvar _constants = __webpack_require__(7);\n\nvar C = _interopRequireWildcard(_constants);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nvar KEY = exports.KEY = 'undo';\n\nfunction undoItem() {\n  return {\n    key: KEY,\n    name: function name() {\n      return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_UNDO);\n    },\n    callback: function callback() {\n      this.undo();\n    },\n    disabled: function disabled() {\n      return this.undoRedo && !this.undoRedo.isUndoAvailable();\n    }\n  };\n}\n\n/***/ }),\n/* 316 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _core = __webpack_require__(90);\n\nvar _core2 = _interopRequireDefault(_core);\n\nvar _element = __webpack_require__(0);\n\nvar _array = __webpack_require__(2);\n\nvar _cursor = __webpack_require__(317);\n\nvar _cursor2 = _interopRequireDefault(_cursor);\n\nvar _eventManager = __webpack_require__(5);\n\nvar _eventManager2 = _interopRequireDefault(_eventManager);\n\nvar _object = __webpack_require__(1);\n\nvar _mixed = __webpack_require__(11);\n\nvar _function = __webpack_require__(43);\n\nvar _utils = __webpack_require__(19);\n\nvar _unicode = __webpack_require__(21);\n\nvar _localHooks = __webpack_require__(47);\n\nvar _localHooks2 = _interopRequireDefault(_localHooks);\n\nvar _predefinedItems = __webpack_require__(96);\n\nvar _event = __webpack_require__(13);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar MIN_WIDTH = 215;\n\n/**\n * @class Menu\n * @plugin ContextMenu\n */\n\nvar Menu = function () {\n  function Menu(hotInstance, options) {\n    _classCallCheck(this, Menu);\n\n    this.hot = hotInstance;\n    this.options = options || {\n      parent: null,\n      name: null,\n      className: '',\n      keepInViewport: true,\n      standalone: false,\n      minWidth: MIN_WIDTH\n    };\n    this.eventManager = new _eventManager2.default(this);\n    this.container = this.createContainer(this.options.name);\n    this.hotMenu = null;\n    this.hotSubMenus = {};\n    this.parentMenu = this.options.parent || null;\n    this.menuItems = null;\n    this.origOutsideClickDeselects = null;\n    this.keyEvent = false;\n\n    this.offset = {\n      above: 0,\n      below: 0,\n      left: 0,\n      right: 0\n    };\n    this._afterScrollCallback = null;\n\n    this.registerEvents();\n  }\n\n  /**\n   * Register event listeners.\n   *\n   * @private\n   */\n\n\n  _createClass(Menu, [{\n    key: 'registerEvents',\n    value: function registerEvents() {\n      var _this = this;\n\n      this.eventManager.addEventListener(document.documentElement, 'mousedown', function (event) {\n        return _this.onDocumentMouseDown(event);\n      });\n    }\n\n    /**\n     * Set array of objects which defines menu items.\n     *\n     * @param {Array} menuItems Menu items to display.\n     */\n\n  }, {\n    key: 'setMenuItems',\n    value: function setMenuItems(menuItems) {\n      this.menuItems = menuItems;\n    }\n\n    /**\n     * Set offset menu position for specified area (`above`, `below`, `left` or `right`).\n     *\n     * @param {String} area Specified area name (`above`, `below`, `left` or `right`).\n     * @param {Number} offset Offset value.\n     */\n\n  }, {\n    key: 'setOffset',\n    value: function setOffset(area) {\n      var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n      this.offset[area] = offset;\n    }\n\n    /**\n     * Check if menu is using as sub-menu.\n     *\n     * @returns {Boolean}\n     */\n\n  }, {\n    key: 'isSubMenu',\n    value: function isSubMenu() {\n      return this.parentMenu !== null;\n    }\n\n    /**\n     * Open menu.\n     *\n     * @fires Hooks#beforeContextMenuShow\n     * @fires Hooks#afterContextMenuShow\n     */\n\n  }, {\n    key: 'open',\n    value: function open() {\n      var _this2 = this;\n\n      this.runLocalHooks('beforeOpen');\n\n      this.container.removeAttribute('style');\n      this.container.style.display = 'block';\n\n      var delayedOpenSubMenu = (0, _function.debounce)(function (row) {\n        return _this2.openSubMenu(row);\n      }, 300);\n      var minWidthOfMenu = this.options.minWidth || MIN_WIDTH;\n\n      var filteredItems = (0, _array.arrayFilter)(this.menuItems, function (item) {\n        return (0, _utils.isItemHidden)(item, _this2.hot);\n      });\n\n      filteredItems = (0, _utils.filterSeparators)(filteredItems, _predefinedItems.SEPARATOR);\n\n      var settings = {\n        data: filteredItems,\n        colHeaders: false,\n        autoColumnSize: true,\n        modifyColWidth: function modifyColWidth(width) {\n          if ((0, _mixed.isDefined)(width) && width < minWidthOfMenu) {\n            return minWidthOfMenu;\n          }\n\n          return width;\n        },\n\n        autoRowSize: false,\n        readOnly: true,\n        copyPaste: false,\n        columns: [{\n          data: 'name',\n          renderer: function renderer(hot, TD, row, col, prop, value) {\n            return _this2.menuItemRenderer(hot, TD, row, col, prop, value);\n          }\n        }],\n        renderAllRows: true,\n        fragmentSelection: 'cell',\n        disableVisualSelection: 'area',\n        beforeKeyDown: function beforeKeyDown(event) {\n          return _this2.onBeforeKeyDown(event);\n        },\n        afterOnCellMouseOver: function afterOnCellMouseOver(event, coords) {\n          if (_this2.isAllSubMenusClosed()) {\n            delayedOpenSubMenu(coords.row);\n          } else {\n            _this2.openSubMenu(coords.row);\n          }\n        },\n        rowHeights: function rowHeights(row) {\n          return filteredItems[row].name === _predefinedItems.SEPARATOR ? 1 : 23;\n        }\n      };\n      this.origOutsideClickDeselects = this.hot.getSettings().outsideClickDeselects;\n      this.hot.getSettings().outsideClickDeselects = false;\n      this.hotMenu = new _core2.default(this.container, settings);\n      this.hotMenu.addHook('afterInit', function () {\n        return _this2.onAfterInit();\n      });\n      this.hotMenu.addHook('afterSelection', function () {\n        return _this2.onAfterSelection.apply(_this2, arguments);\n      });\n      this.hotMenu.init();\n      this.hotMenu.listen();\n      this.blockMainTableCallbacks();\n      this.runLocalHooks('afterOpen');\n    }\n\n    /**\n     * Close menu.\n     *\n     * @param {Boolean} [closeParent=false] if `true` try to close parent menu if exists.\n     */\n\n  }, {\n    key: 'close',\n    value: function close() {\n      var closeParent = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n      if (!this.isOpened()) {\n        return;\n      }\n      if (closeParent && this.parentMenu) {\n        this.parentMenu.close();\n      } else {\n        this.closeAllSubMenus();\n        this.container.style.display = 'none';\n        this.releaseMainTableCallbacks();\n        this.hotMenu.destroy();\n        this.hotMenu = null;\n        this.hot.getSettings().outsideClickDeselects = this.origOutsideClickDeselects;\n        this.runLocalHooks('afterClose');\n\n        if (this.parentMenu) {\n          this.parentMenu.hotMenu.listen();\n        }\n      }\n    }\n\n    /**\n     * Open sub menu at the provided row index.\n     *\n     * @param {Number} row Row index.\n     * @returns {Menu|Boolean} Returns created menu or `false` if no one menu was created.\n     */\n\n  }, {\n    key: 'openSubMenu',\n    value: function openSubMenu(row) {\n      if (!this.hotMenu) {\n        return false;\n      }\n      var cell = this.hotMenu.getCell(row, 0);\n\n      this.closeAllSubMenus();\n\n      if (!cell || !(0, _utils.hasSubMenu)(cell)) {\n        return false;\n      }\n      var dataItem = this.hotMenu.getSourceDataAtRow(row);\n      var subMenu = new Menu(this.hot, {\n        parent: this,\n        name: dataItem.name,\n        className: this.options.className,\n        keepInViewport: true\n      });\n      subMenu.setMenuItems(dataItem.submenu.items);\n      subMenu.open();\n      subMenu.setPosition(cell.getBoundingClientRect());\n      this.hotSubMenus[dataItem.key] = subMenu;\n\n      return subMenu;\n    }\n\n    /**\n     * Close sub menu at row index.\n     *\n     * @param {Number} row Row index.\n     */\n\n  }, {\n    key: 'closeSubMenu',\n    value: function closeSubMenu(row) {\n      var dataItem = this.hotMenu.getSourceDataAtRow(row);\n      var menus = this.hotSubMenus[dataItem.key];\n\n      if (menus) {\n        menus.destroy();\n        delete this.hotSubMenus[dataItem.key];\n      }\n    }\n\n    /**\n     * Close all opened sub menus.\n     */\n\n  }, {\n    key: 'closeAllSubMenus',\n    value: function closeAllSubMenus() {\n      var _this3 = this;\n\n      (0, _array.arrayEach)(this.hotMenu.getData(), function (value, row) {\n        return _this3.closeSubMenu(row);\n      });\n    }\n\n    /**\n     * Checks if all created and opened sub menus are closed.\n     *\n     * @returns {Boolean}\n     */\n\n  }, {\n    key: 'isAllSubMenusClosed',\n    value: function isAllSubMenusClosed() {\n      return Object.keys(this.hotSubMenus).length === 0;\n    }\n\n    /**\n     * Destroy instance.\n     */\n\n  }, {\n    key: 'destroy',\n    value: function destroy() {\n      this.clearLocalHooks();\n      this.close();\n      this.parentMenu = null;\n      this.eventManager.destroy();\n    }\n\n    /**\n     * Checks if menu was opened.\n     *\n     * @returns {Boolean} Returns `true` if menu was opened.\n     */\n\n  }, {\n    key: 'isOpened',\n    value: function isOpened() {\n      return this.hotMenu !== null;\n    }\n\n    /**\n     * Execute menu command.\n     *\n     * @param {Event} [event]\n     */\n\n  }, {\n    key: 'executeCommand',\n    value: function executeCommand(event) {\n      if (!this.isOpened() || !this.hotMenu.getSelectedLast()) {\n        return;\n      }\n      var selectedItem = this.hotMenu.getSourceDataAtRow(this.hotMenu.getSelectedLast()[0]);\n\n      this.runLocalHooks('select', selectedItem, event);\n\n      if (selectedItem.isCommand === false || selectedItem.name === _predefinedItems.SEPARATOR) {\n        return;\n      }\n      var selRanges = this.hot.getSelectedRange();\n      var normalizedSelection = selRanges ? (0, _utils.normalizeSelection)(selRanges) : [];\n      var autoClose = true;\n\n      // Don't close context menu if item is disabled or it has submenu\n      if (selectedItem.disabled === true || typeof selectedItem.disabled === 'function' && selectedItem.disabled.call(this.hot) === true || selectedItem.submenu) {\n        autoClose = false;\n      }\n\n      this.runLocalHooks('executeCommand', selectedItem.key, normalizedSelection, event);\n\n      if (this.isSubMenu()) {\n        this.parentMenu.runLocalHooks('executeCommand', selectedItem.key, normalizedSelection, event);\n      }\n\n      if (autoClose) {\n        this.close(true);\n      }\n    }\n\n    /**\n     * Set menu position based on dom event or based on literal object.\n     *\n     * @param {Event|Object} coords Event or literal Object with coordinates.\n     */\n\n  }, {\n    key: 'setPosition',\n    value: function setPosition(coords) {\n      var cursor = new _cursor2.default(coords);\n\n      if (this.options.keepInViewport) {\n        if (cursor.fitsBelow(this.container)) {\n          this.setPositionBelowCursor(cursor);\n        } else if (cursor.fitsAbove(this.container)) {\n          this.setPositionAboveCursor(cursor);\n        } else {\n          this.setPositionBelowCursor(cursor);\n        }\n        if (cursor.fitsOnRight(this.container)) {\n          this.setPositionOnRightOfCursor(cursor);\n        } else {\n          this.setPositionOnLeftOfCursor(cursor);\n        }\n      } else {\n        this.setPositionBelowCursor(cursor);\n        this.setPositionOnRightOfCursor(cursor);\n      }\n    }\n\n    /**\n     * Set menu position above cursor object.\n     *\n     * @param {Cursor} cursor `Cursor` object.\n     */\n\n  }, {\n    key: 'setPositionAboveCursor',\n    value: function setPositionAboveCursor(cursor) {\n      var top = this.offset.above + cursor.top - this.container.offsetHeight;\n\n      if (this.isSubMenu()) {\n        top = cursor.top + cursor.cellHeight - this.container.offsetHeight + 3;\n      }\n      this.container.style.top = top + 'px';\n    }\n\n    /**\n     * Set menu position below cursor object.\n     *\n     * @param {Cursor} cursor `Cursor` object.\n     */\n\n  }, {\n    key: 'setPositionBelowCursor',\n    value: function setPositionBelowCursor(cursor) {\n      var top = this.offset.below + cursor.top;\n\n      if (this.isSubMenu()) {\n        top = cursor.top - 1;\n      }\n      this.container.style.top = top + 'px';\n    }\n\n    /**\n     * Set menu position on the right of cursor object.\n     *\n     * @param {Cursor} cursor `Cursor` object.\n     */\n\n  }, {\n    key: 'setPositionOnRightOfCursor',\n    value: function setPositionOnRightOfCursor(cursor) {\n      var left = void 0;\n\n      if (this.isSubMenu()) {\n        left = 1 + cursor.left + cursor.cellWidth;\n      } else {\n        left = this.offset.right + 1 + cursor.left;\n      }\n\n      this.container.style.left = left + 'px';\n    }\n\n    /**\n     * Set menu position on the left of cursor object.\n     *\n     * @param {Cursor} cursor `Cursor` object.\n     */\n\n  }, {\n    key: 'setPositionOnLeftOfCursor',\n    value: function setPositionOnLeftOfCursor(cursor) {\n      var left = this.offset.left + cursor.left - this.container.offsetWidth + (0, _element.getScrollbarWidth)() + 4;\n\n      this.container.style.left = left + 'px';\n    }\n\n    /**\n     * Select first cell in opened menu.\n     */\n\n  }, {\n    key: 'selectFirstCell',\n    value: function selectFirstCell() {\n      var cell = this.hotMenu.getCell(0, 0);\n\n      if ((0, _utils.isSeparator)(cell) || (0, _utils.isDisabled)(cell) || (0, _utils.isSelectionDisabled)(cell)) {\n        this.selectNextCell(0, 0);\n      } else {\n        this.hotMenu.selectCell(0, 0);\n      }\n    }\n\n    /**\n     * Select last cell in opened menu.\n     */\n\n  }, {\n    key: 'selectLastCell',\n    value: function selectLastCell() {\n      var lastRow = this.hotMenu.countRows() - 1;\n      var cell = this.hotMenu.getCell(lastRow, 0);\n\n      if ((0, _utils.isSeparator)(cell) || (0, _utils.isDisabled)(cell) || (0, _utils.isSelectionDisabled)(cell)) {\n        this.selectPrevCell(lastRow, 0);\n      } else {\n        this.hotMenu.selectCell(lastRow, 0);\n      }\n    }\n\n    /**\n     * Select next cell in opened menu.\n     *\n     * @param {Number} row Row index.\n     * @param {Number} col Column index.\n     */\n\n  }, {\n    key: 'selectNextCell',\n    value: function selectNextCell(row, col) {\n      var nextRow = row + 1;\n      var cell = nextRow < this.hotMenu.countRows() ? this.hotMenu.getCell(nextRow, col) : null;\n\n      if (!cell) {\n        return;\n      }\n      if ((0, _utils.isSeparator)(cell) || (0, _utils.isDisabled)(cell) || (0, _utils.isSelectionDisabled)(cell)) {\n        this.selectNextCell(nextRow, col);\n      } else {\n        this.hotMenu.selectCell(nextRow, col);\n      }\n    }\n\n    /**\n     * Select previous cell in opened menu.\n     *\n     * @param {Number} row Row index.\n     * @param {Number} col Column index.\n     */\n\n  }, {\n    key: 'selectPrevCell',\n    value: function selectPrevCell(row, col) {\n      var prevRow = row - 1;\n      var cell = prevRow >= 0 ? this.hotMenu.getCell(prevRow, col) : null;\n\n      if (!cell) {\n        return;\n      }\n      if ((0, _utils.isSeparator)(cell) || (0, _utils.isDisabled)(cell) || (0, _utils.isSelectionDisabled)(cell)) {\n        this.selectPrevCell(prevRow, col);\n      } else {\n        this.hotMenu.selectCell(prevRow, col);\n      }\n    }\n\n    /**\n     * Menu item renderer.\n     *\n     * @private\n     */\n\n  }, {\n    key: 'menuItemRenderer',\n    value: function menuItemRenderer(hot, TD, row, col, prop, value) {\n      var _this4 = this;\n\n      var item = hot.getSourceDataAtRow(row);\n      var wrapper = document.createElement('div');\n\n      var isSubMenu = function isSubMenu(itemToTest) {\n        return (0, _object.hasOwnProperty)(itemToTest, 'submenu');\n      };\n      var itemIsSeparator = function itemIsSeparator(itemToTest) {\n        return new RegExp(_predefinedItems.SEPARATOR, 'i').test(itemToTest.name);\n      };\n      var itemIsDisabled = function itemIsDisabled(itemToTest) {\n        return itemToTest.disabled === true || typeof itemToTest.disabled === 'function' && itemToTest.disabled.call(_this4.hot) === true;\n      };\n      var itemIsSelectionDisabled = function itemIsSelectionDisabled(itemToTest) {\n        return itemToTest.disableSelection;\n      };\n      var itemValue = value;\n\n      if (typeof itemValue === 'function') {\n        itemValue = itemValue.call(this.hot);\n      }\n      (0, _element.empty)(TD);\n      (0, _element.addClass)(wrapper, 'htItemWrapper');\n      TD.appendChild(wrapper);\n\n      if (itemIsSeparator(item)) {\n        (0, _element.addClass)(TD, 'htSeparator');\n      } else if (typeof item.renderer === 'function') {\n        (0, _element.addClass)(TD, 'htCustomMenuRenderer');\n        TD.appendChild(item.renderer(hot, wrapper, row, col, prop, itemValue));\n      } else {\n        (0, _element.fastInnerHTML)(wrapper, itemValue);\n      }\n      if (itemIsDisabled(item)) {\n        (0, _element.addClass)(TD, 'htDisabled');\n        this.eventManager.addEventListener(TD, 'mouseenter', function () {\n          return hot.deselectCell();\n        });\n      } else if (itemIsSelectionDisabled(item)) {\n        (0, _element.addClass)(TD, 'htSelectionDisabled');\n        this.eventManager.addEventListener(TD, 'mouseenter', function () {\n          return hot.deselectCell();\n        });\n      } else if (isSubMenu(item)) {\n        (0, _element.addClass)(TD, 'htSubmenu');\n\n        if (itemIsSelectionDisabled(item)) {\n          this.eventManager.addEventListener(TD, 'mouseenter', function () {\n            return hot.deselectCell();\n          });\n        } else {\n          this.eventManager.addEventListener(TD, 'mouseenter', function () {\n            return hot.selectCell(row, col, void 0, void 0, false, false);\n          });\n        }\n      } else {\n        (0, _element.removeClass)(TD, 'htSubmenu');\n        (0, _element.removeClass)(TD, 'htDisabled');\n\n        if (itemIsSelectionDisabled(item)) {\n          this.eventManager.addEventListener(TD, 'mouseenter', function () {\n            return hot.deselectCell();\n          });\n        } else {\n          this.eventManager.addEventListener(TD, 'mouseenter', function () {\n            return hot.selectCell(row, col, void 0, void 0, false, false);\n          });\n        }\n      }\n    }\n\n    /**\n     * Create container/wrapper for handsontable.\n     *\n     * @private\n     * @param {String} [name] Class name.\n     * @returns {HTMLElement}\n     */\n\n  }, {\n    key: 'createContainer',\n    value: function createContainer() {\n      var name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n\n      var className = name;\n      var container = void 0;\n\n      if (className) {\n        if ((0, _function.isFunction)(className)) {\n          className = className.call(this.hot);\n\n          if (className === null || (0, _mixed.isUndefined)(className)) {\n            className = '';\n          } else {\n            className = className.toString();\n          }\n        }\n\n        className = className.replace(/[^A-z0-9]/g, '_');\n        className = this.options.className + 'Sub_' + className;\n\n        container = document.querySelector('.' + this.options.className + '.' + className);\n      } else {\n        container = document.querySelector('.' + this.options.className);\n      }\n\n      if (!container) {\n        container = document.createElement('div');\n\n        (0, _element.addClass)(container, 'htMenu ' + this.options.className);\n\n        if (className) {\n          (0, _element.addClass)(container, className);\n        }\n        document.getElementsByTagName('body')[0].appendChild(container);\n      }\n\n      return container;\n    }\n\n    /**\n     * @private\n     */\n\n  }, {\n    key: 'blockMainTableCallbacks',\n    value: function blockMainTableCallbacks() {\n      this._afterScrollCallback = function () {};\n      this.hot.addHook('afterScrollVertically', this._afterScrollCallback);\n      this.hot.addHook('afterScrollHorizontally', this._afterScrollCallback);\n    }\n\n    /**\n     * @private\n     */\n\n  }, {\n    key: 'releaseMainTableCallbacks',\n    value: function releaseMainTableCallbacks() {\n      if (this._afterScrollCallback) {\n        this.hot.removeHook('afterScrollVertically', this._afterScrollCallback);\n        this.hot.removeHook('afterScrollHorizontally', this._afterScrollCallback);\n        this._afterScrollCallback = null;\n      }\n    }\n\n    /**\n     * On before key down listener.\n     *\n     * @private\n     * @param {Event} event\n     */\n\n  }, {\n    key: 'onBeforeKeyDown',\n    value: function onBeforeKeyDown(event) {\n      var selection = this.hotMenu.getSelectedLast();\n      var stopEvent = false;\n      this.keyEvent = true;\n\n      switch (event.keyCode) {\n        case _unicode.KEY_CODES.ESCAPE:\n          this.close();\n          stopEvent = true;\n          break;\n\n        case _unicode.KEY_CODES.ENTER:\n          if (selection) {\n            if (this.hotMenu.getSourceDataAtRow(selection[0]).submenu) {\n              stopEvent = true;\n            } else {\n              this.executeCommand(event);\n              this.close(true);\n            }\n          }\n          break;\n\n        case _unicode.KEY_CODES.ARROW_DOWN:\n          if (selection) {\n            this.selectNextCell(selection[0], selection[1]);\n          } else {\n            this.selectFirstCell();\n          }\n          stopEvent = true;\n          break;\n\n        case _unicode.KEY_CODES.ARROW_UP:\n          if (selection) {\n            this.selectPrevCell(selection[0], selection[1]);\n          } else {\n            this.selectLastCell();\n          }\n          stopEvent = true;\n          break;\n\n        case _unicode.KEY_CODES.ARROW_RIGHT:\n          if (selection) {\n            var menu = this.openSubMenu(selection[0]);\n\n            if (menu) {\n              menu.selectFirstCell();\n            }\n          }\n          stopEvent = true;\n\n          break;\n\n        case _unicode.KEY_CODES.ARROW_LEFT:\n          if (selection && this.isSubMenu()) {\n            this.close();\n\n            if (this.parentMenu) {\n              this.parentMenu.hotMenu.listen();\n            }\n            stopEvent = true;\n          }\n          break;\n        default:\n          break;\n      }\n      if (stopEvent) {\n        event.preventDefault();\n        (0, _event.stopImmediatePropagation)(event);\n      }\n\n      this.keyEvent = false;\n    }\n\n    /**\n     * On after init listener.\n     *\n     * @private\n     */\n\n  }, {\n    key: 'onAfterInit',\n    value: function onAfterInit() {\n      var data = this.hotMenu.getSettings().data;\n      var hiderStyle = this.hotMenu.view.wt.wtTable.hider.style;\n      var holderStyle = this.hotMenu.view.wt.wtTable.holder.style;\n      var currentHiderWidth = parseInt(hiderStyle.width, 10);\n\n      var realHeight = (0, _array.arrayReduce)(data, function (accumulator, value) {\n        return accumulator + (value.name === _predefinedItems.SEPARATOR ? 1 : 26);\n      }, 0);\n\n      holderStyle.width = currentHiderWidth + 22 + 'px';\n      holderStyle.height = realHeight + 4 + 'px';\n      hiderStyle.height = holderStyle.height;\n    }\n\n    /**\n     * On after selection listener.\n     *\n     * @param {Number} r Selection start row index.\n     * @param {Number} c Selection start column index.\n     * @param {Number} r2 Selection end row index.\n     * @param {Number} c2 Selection end column index.\n     * @param {Object} preventScrolling Object with `value` property where its value change will be observed.\n     * @param {Number} selectionLayerLevel The number which indicates what selection layer is currently modified.\n     */\n\n  }, {\n    key: 'onAfterSelection',\n    value: function onAfterSelection(r, c, r2, c2, preventScrolling) {\n      if (this.keyEvent === false) {\n        preventScrolling.value = true;\n      }\n    }\n\n    /**\n     * Document mouse down listener.\n     *\n     * @private\n     * @param {Event} event\n     */\n\n  }, {\n    key: 'onDocumentMouseDown',\n    value: function onDocumentMouseDown(event) {\n      if (!this.isOpened()) {\n        return;\n      }\n      if (this.container && (0, _element.isChildOf)(event.target, this.container)) {\n        this.executeCommand(event);\n      }\n      // Close menu when clicked element is not belongs to menu itself\n      if (this.options.standalone && this.hotMenu && !(0, _element.isChildOf)(event.target, this.hotMenu.rootElement)) {\n        this.close(true);\n\n        // Automatically close menu when clicked element is not belongs to menu or submenu (not necessarily to itself)\n      } else if ((this.isAllSubMenusClosed() || this.isSubMenu()) && !(0, _element.isChildOf)(event.target, '.htMenu') && (0, _element.isChildOf)(event.target, document)) {\n        this.close(true);\n      }\n    }\n  }]);\n\n  return Menu;\n}();\n\n(0, _object.mixin)(Menu, _localHooks2.default);\n\nexports.default = Menu;\n\n/***/ }),\n/* 317 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _element = __webpack_require__(0);\n\nvar _event = __webpack_require__(13);\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * Helper class for checking if element will fit at the desired side of cursor.\n *\n * @class Cursor\n * @plugin ContextMenu\n */\nvar Cursor = function () {\n  function Cursor(object) {\n    _classCallCheck(this, Cursor);\n\n    var windowScrollTop = (0, _element.getWindowScrollTop)();\n    var windowScrollLeft = (0, _element.getWindowScrollLeft)();\n    var top = void 0;\n    var topRelative = void 0;\n    var left = void 0;\n    var leftRelative = void 0;\n    var cellHeight = void 0;\n    var cellWidth = void 0;\n\n    this.type = this.getSourceType(object);\n\n    if (this.type === 'literal') {\n      top = parseInt(object.top, 10);\n      left = parseInt(object.left, 10);\n      cellHeight = object.height || 0;\n      cellWidth = object.width || 0;\n      topRelative = top;\n      leftRelative = left;\n      top += windowScrollTop;\n      left += windowScrollLeft;\n    } else if (this.type === 'event') {\n      top = parseInt((0, _event.pageY)(object), 10);\n      left = parseInt((0, _event.pageX)(object), 10);\n      cellHeight = object.target.clientHeight;\n      cellWidth = object.target.clientWidth;\n      topRelative = top - windowScrollTop;\n      leftRelative = left - windowScrollLeft;\n    }\n\n    this.top = top;\n    this.topRelative = topRelative;\n    this.left = left;\n    this.leftRelative = leftRelative;\n    this.scrollTop = windowScrollTop;\n    this.scrollLeft = windowScrollLeft;\n    this.cellHeight = cellHeight;\n    this.cellWidth = cellWidth;\n  }\n\n  /**\n   * Get source type name.\n   *\n   * @param {*} object Event or Object with coordinates.\n   * @returns {String} Returns one of this values: `'literal'`, `'event'`.\n   */\n\n\n  _createClass(Cursor, [{\n    key: 'getSourceType',\n    value: function getSourceType(object) {\n      var type = 'literal';\n\n      if (object instanceof Event) {\n        type = 'event';\n      }\n\n      return type;\n    }\n\n    /**\n     * Checks if element can be placed above the cursor.\n     *\n     * @param {HTMLElement} element Element to check if it's size will fit above the cursor.\n     * @returns {Boolean}\n     */\n\n  }, {\n    key: 'fitsAbove',\n    value: function fitsAbove(element) {\n      return this.topRelative >= element.offsetHeight;\n    }\n\n    /**\n     * Checks if element can be placed below the cursor.\n     *\n     * @param {HTMLElement} element Element to check if it's size will fit below the cursor.\n     * @param {Number} [viewportHeight] The viewport height.\n     * @returns {Boolean}\n     */\n\n  }, {\n    key: 'fitsBelow',\n    value: function fitsBelow(element) {\n      var viewportHeight = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : window.innerHeight;\n\n      return this.topRelative + element.offsetHeight <= viewportHeight;\n    }\n\n    /**\n     * Checks if element can be placed on the right of the cursor.\n     *\n     * @param {HTMLElement} element Element to check if it's size will fit on the right of the cursor.\n     * @param {Number} [viewportWidth] The viewport width.\n     * @returns {Boolean}\n     */\n\n  }, {\n    key: 'fitsOnRight',\n    value: function fitsOnRight(element) {\n      var viewportWidth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : window.innerWidth;\n\n      return this.leftRelative + this.cellWidth + element.offsetWidth <= viewportWidth;\n    }\n\n    /**\n     * Checks if element can be placed on the left on the cursor.\n     *\n     * @param {HTMLElement} element Element to check if it's size will fit on the left of the cursor.\n     * @returns {Boolean}\n     */\n\n  }, {\n    key: 'fitsOnLeft',\n    value: function fitsOnLeft(element) {\n      return this.leftRelative >= element.offsetWidth;\n    }\n  }]);\n\n  return Cursor;\n}();\n\nexports.default = Cursor;\n\n/***/ }),\n/* 318 */\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n/* 319 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\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 && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _base = __webpack_require__(10);\n\nvar _base2 = _interopRequireDefault(_base);\n\nvar _pluginHooks = __webpack_require__(16);\n\nvar _pluginHooks2 = _interopRequireDefault(_pluginHooks);\n\nvar _SheetClip = __webpack_require__(193);\n\nvar _SheetClip2 = _interopRequireDefault(_SheetClip);\n\nvar _src = __webpack_require__(4);\n\nvar _element = __webpack_require__(0);\n\nvar _array = __webpack_require__(2);\n\nvar _number = __webpack_require__(6);\n\nvar _plugins = __webpack_require__(8);\n\nvar _copy = __webpack_require__(320);\n\nvar _copy2 = _interopRequireDefault(_copy);\n\nvar _cut = __webpack_require__(321);\n\nvar _cut2 = _interopRequireDefault(_cut);\n\nvar _pasteEvent = __webpack_require__(322);\n\nvar _pasteEvent2 = _interopRequireDefault(_pasteEvent);\n\nvar _focusableElement = __webpack_require__(324);\n\n__webpack_require__(325);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n_pluginHooks2.default.getSingleton().register('afterCopyLimit');\n_pluginHooks2.default.getSingleton().register('modifyCopyableRange');\n_pluginHooks2.default.getSingleton().register('beforeCut');\n_pluginHooks2.default.getSingleton().register('afterCut');\n_pluginHooks2.default.getSingleton().register('beforePaste');\n_pluginHooks2.default.getSingleton().register('afterPaste');\n_pluginHooks2.default.getSingleton().register('beforeCopy');\n_pluginHooks2.default.getSingleton().register('afterCopy');\n\nvar ROWS_LIMIT = 1000;\nvar COLUMNS_LIMIT = 1000;\nvar privatePool = new WeakMap();\n\n/**\n * @description\n * This plugin enables the copy/paste functionality in the Handsontable. The functionality works for API, Context Menu,\n * using keyboard shortcuts and menu bar from the browser.\n * Possible values:\n * * `true` (to enable default options),\n * * `false` (to disable completely)\n *\n * or an object with values:\n * * `'columnsLimit'` (see {@link CopyPaste#columnsLimit})\n * * `'rowsLimit'` (see {@link CopyPaste#rowsLimit})\n * * `'pasteMode'` (see {@link CopyPaste#pasteMode})\n *\n * See [the copy/paste demo](https://docs.handsontable.com/demo-copy-paste.html) for examples.\n *\n * @example\n * ```js\n * // Enables the plugin with default values\n * copyPaste: true,\n * // Enables the plugin with custom values\n * copyPaste: {\n *   columnsLimit: 25,\n *   rowsLimit: 50,\n *   pasteMode: 'shift_down',\n * },\n * ```\n * @class CopyPaste\n * @plugin CopyPaste\n */\n\nvar CopyPaste = function (_BasePlugin) {\n  _inherits(CopyPaste, _BasePlugin);\n\n  function CopyPaste(hotInstance) {\n    _classCallCheck(this, CopyPaste);\n\n    /**\n     * Maximum number of columns than can be copied to clipboard using <kbd>CTRL</kbd> + <kbd>C</kbd>.\n     *\n     * @type {Number}\n     * @default 1000\n     */\n    var _this = _possibleConstructorReturn(this, (CopyPaste.__proto__ || Object.getPrototypeOf(CopyPaste)).call(this, hotInstance));\n\n    _this.columnsLimit = COLUMNS_LIMIT;\n    /**\n     * Ranges of the cells coordinates, which should be used to copy/cut/paste actions.\n     *\n     * @private\n     * @type {Array}\n     */\n    _this.copyableRanges = [];\n    /**\n     * Defines paste (<kbd>CTRL</kbd> + <kbd>V</kbd>) behavior.\n     * * Default value `\"overwrite\"` will paste clipboard value over current selection.\n     * * When set to `\"shift_down\"`, clipboard data will be pasted in place of current selection, while all selected cells are moved down.\n     * * When set to `\"shift_right\"`, clipboard data will be pasted in place of current selection, while all selected cells are moved right.\n     *\n     * @type {String}\n     * @default 'overwrite'\n     */\n    _this.pasteMode = 'overwrite';\n    /**\n     * Maximum number of rows than can be copied to clipboard using <kbd>CTRL</kbd> + <kbd>C</kbd>.\n     *\n     * @type {Number}\n     * @default 1000\n     */\n    _this.rowsLimit = ROWS_LIMIT;\n\n    privatePool.set(_this, {\n      isTriggeredByCopy: false,\n      isTriggeredByCut: false,\n      isBeginEditing: false,\n      isFragmentSelectionEnabled: false\n    });\n    return _this;\n  }\n\n  /**\n   * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}\n   * hook and if it returns `true` than the {@link CopyPaste#enablePlugin} method is called.\n   *\n   * @returns {Boolean}\n   */\n\n\n  _createClass(CopyPaste, [{\n    key: 'isEnabled',\n    value: function isEnabled() {\n      return !!this.hot.getSettings().copyPaste;\n    }\n\n    /**\n     * Enables the plugin functionality for this Handsontable instance.\n     */\n\n  }, {\n    key: 'enablePlugin',\n    value: function enablePlugin() {\n      var _this2 = this;\n\n      if (this.enabled) {\n        return;\n      }\n      var settings = this.hot.getSettings();\n      var priv = privatePool.get(this);\n\n      priv.isFragmentSelectionEnabled = settings.fragmentSelection;\n\n      if (_typeof(settings.copyPaste) === 'object') {\n        this.pasteMode = settings.copyPaste.pasteMode || this.pasteMode;\n        this.rowsLimit = settings.copyPaste.rowsLimit || this.rowsLimit;\n        this.columnsLimit = settings.copyPaste.columnsLimit || this.columnsLimit;\n      }\n\n      this.addHook('afterContextMenuDefaultOptions', function (options) {\n        return _this2.onAfterContextMenuDefaultOptions(options);\n      });\n      this.addHook('afterSelectionEnd', function () {\n        return _this2.onAfterSelectionEnd();\n      });\n\n      this.focusableElement = (0, _focusableElement.createElement)();\n      this.focusableElement.addLocalHook('copy', function (event) {\n        return _this2.onCopy(event);\n      }).addLocalHook('cut', function (event) {\n        return _this2.onCut(event);\n      }).addLocalHook('paste', function (event) {\n        return _this2.onPaste(event);\n      });\n\n      _get(CopyPaste.prototype.__proto__ || Object.getPrototypeOf(CopyPaste.prototype), 'enablePlugin', this).call(this);\n    }\n\n    /**\n     * Updates the plugin state. This method is executed when {@link Core#updateSettings} is invoked.\n     */\n\n  }, {\n    key: 'updatePlugin',\n    value: function updatePlugin() {\n      this.disablePlugin();\n      this.enablePlugin();\n\n      _get(CopyPaste.prototype.__proto__ || Object.getPrototypeOf(CopyPaste.prototype), 'updatePlugin', this).call(this);\n    }\n\n    /**\n     * Disables the plugin functionality for this Handsontable instance.\n     */\n\n  }, {\n    key: 'disablePlugin',\n    value: function disablePlugin() {\n      if (this.focusableElement) {\n        (0, _focusableElement.destroyElement)(this.focusableElement);\n      }\n\n      _get(CopyPaste.prototype.__proto__ || Object.getPrototypeOf(CopyPaste.prototype), 'disablePlugin', this).call(this);\n    }\n\n    /**\n     * Prepares copyable text from the cells selection in the invisible textarea.\n     */\n\n  }, {\n    key: 'setCopyableText',\n    value: function setCopyableText() {\n      var selRange = this.hot.getSelectedRangeLast();\n\n      if (!selRange) {\n        return;\n      }\n      var topLeft = selRange.getTopLeftCorner();\n      var bottomRight = selRange.getBottomRightCorner();\n      var startRow = topLeft.row;\n      var startCol = topLeft.col;\n      var endRow = bottomRight.row;\n      var endCol = bottomRight.col;\n      var finalEndRow = Math.min(endRow, startRow + this.rowsLimit - 1);\n      var finalEndCol = Math.min(endCol, startCol + this.columnsLimit - 1);\n\n      this.copyableRanges.length = 0;\n\n      this.copyableRanges.push({\n        startRow: startRow,\n        startCol: startCol,\n        endRow: finalEndRow,\n        endCol: finalEndCol\n      });\n\n      this.copyableRanges = this.hot.runHooks('modifyCopyableRange', this.copyableRanges);\n\n      if (endRow !== finalEndRow || endCol !== finalEndCol) {\n        this.hot.runHooks('afterCopyLimit', endRow - startRow + 1, endCol - startCol + 1, this.rowsLimit, this.columnsLimit);\n      }\n    }\n\n    /**\n     * Creates copyable text releated to range objects.\n     *\n     * @param {Object[]} ranges Array of objects with properties `startRow`, `endRow`, `startCol` and `endCol`.\n     * @returns {String} Returns string which will be copied into clipboard.\n     */\n\n  }, {\n    key: 'getRangedCopyableData',\n    value: function getRangedCopyableData(ranges) {\n      var _this3 = this;\n\n      var dataSet = [];\n      var copyableRows = [];\n      var copyableColumns = [];\n\n      // Count all copyable rows and columns\n      (0, _array.arrayEach)(ranges, function (range) {\n        (0, _number.rangeEach)(range.startRow, range.endRow, function (row) {\n          if (copyableRows.indexOf(row) === -1) {\n            copyableRows.push(row);\n          }\n        });\n        (0, _number.rangeEach)(range.startCol, range.endCol, function (column) {\n          if (copyableColumns.indexOf(column) === -1) {\n            copyableColumns.push(column);\n          }\n        });\n      });\n      // Concat all rows and columns data defined in ranges into one copyable string\n      (0, _array.arrayEach)(copyableRows, function (row) {\n        var rowSet = [];\n\n        (0, _array.arrayEach)(copyableColumns, function (column) {\n          rowSet.push(_this3.hot.getCopyableData(row, column));\n        });\n\n        dataSet.push(rowSet);\n      });\n\n      return _SheetClip2.default.stringify(dataSet);\n    }\n\n    /**\n     * Creates copyable text releated to range objects.\n     *\n     * @param {Object[]} ranges Array of objects with properties `startRow`, `startCol`, `endRow` and `endCol`.\n     * @returns {Array[]} Returns array of arrays which will be copied into clipboard.\n     */\n\n  }, {\n    key: 'getRangedData',\n    value: function getRangedData(ranges) {\n      var _this4 = this;\n\n      var dataSet = [];\n      var copyableRows = [];\n      var copyableColumns = [];\n\n      // Count all copyable rows and columns\n      (0, _array.arrayEach)(ranges, function (range) {\n        (0, _number.rangeEach)(range.startRow, range.endRow, function (row) {\n          if (copyableRows.indexOf(row) === -1) {\n            copyableRows.push(row);\n          }\n        });\n        (0, _number.rangeEach)(range.startCol, range.endCol, function (column) {\n          if (copyableColumns.indexOf(column) === -1) {\n            copyableColumns.push(column);\n          }\n        });\n      });\n      // Concat all rows and columns data defined in ranges into one copyable string\n      (0, _array.arrayEach)(copyableRows, function (row) {\n        var rowSet = [];\n\n        (0, _array.arrayEach)(copyableColumns, function (column) {\n          rowSet.push(_this4.hot.getCopyableData(row, column));\n        });\n\n        dataSet.push(rowSet);\n      });\n\n      return dataSet;\n    }\n\n    /**\n     * Copies the selected cell into the clipboard.\n     */\n\n  }, {\n    key: 'copy',\n    value: function copy() {\n      var priv = privatePool.get(this);\n\n      priv.isTriggeredByCopy = true;\n      this.focusableElement.focus();\n      document.execCommand('copy');\n    }\n\n    /**\n     * Cuts the selected cell into the clipboard.\n     */\n\n  }, {\n    key: 'cut',\n    value: function cut() {\n      var priv = privatePool.get(this);\n\n      priv.isTriggeredByCut = true;\n      this.focusableElement.focus();\n      document.execCommand('cut');\n    }\n\n    /**\n     * Simulates the paste action.\n     *\n     * @param {String} [value] Value to paste.\n     */\n\n  }, {\n    key: 'paste',\n    value: function paste() {\n      var value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n\n      var pasteData = new _pasteEvent2.default();\n\n      pasteData.clipboardData.setData('text/plain', value);\n      this.onPaste(pasteData);\n    }\n\n    /**\n     * `copy` event callback on textarea element.\n     *\n     * @param {Event} event ClipboardEvent.\n     * @private\n     */\n\n  }, {\n    key: 'onCopy',\n    value: function onCopy(event) {\n      var priv = privatePool.get(this);\n\n      if (!this.hot.isListening() && !priv.isTriggeredByCopy) {\n        return;\n      }\n\n      var editor = this.hot.getActiveEditor();\n\n      if (editor && editor.isOpened()) {\n        return;\n      }\n\n      this.setCopyableText();\n      priv.isTriggeredByCopy = false;\n\n      var rangedData = this.getRangedData(this.copyableRanges);\n      var allowCopying = !!this.hot.runHooks('beforeCopy', rangedData, this.copyableRanges);\n      var value = '';\n\n      if (allowCopying) {\n        value = _SheetClip2.default.stringify(rangedData);\n\n        if (event && event.clipboardData) {\n          event.clipboardData.setData('text/plain', value);\n        } else if (typeof ClipboardEvent === 'undefined') {\n          window.clipboardData.setData('Text', value);\n        }\n\n        this.hot.runHooks('afterCopy', rangedData, this.copyableRanges);\n      }\n\n      event.preventDefault();\n    }\n\n    /**\n     * `cut` event callback on textarea element.\n     *\n     * @param {Event} event ClipboardEvent.\n     * @private\n     */\n\n  }, {\n    key: 'onCut',\n    value: function onCut(event) {\n      var priv = privatePool.get(this);\n\n      if (!this.hot.isListening() && !priv.isTriggeredByCut) {\n        return;\n      }\n\n      var editor = this.hot.getActiveEditor();\n\n      if (editor && editor.isOpened()) {\n        return;\n      }\n\n      this.setCopyableText();\n      priv.isTriggeredByCut = false;\n\n      var rangedData = this.getRangedData(this.copyableRanges);\n      var allowCuttingOut = !!this.hot.runHooks('beforeCut', rangedData, this.copyableRanges);\n      var value = void 0;\n\n      if (allowCuttingOut) {\n        value = _SheetClip2.default.stringify(rangedData);\n\n        if (event && event.clipboardData) {\n          event.clipboardData.setData('text/plain', value);\n        } else if (typeof ClipboardEvent === 'undefined') {\n          window.clipboardData.setData('Text', value);\n        }\n\n        this.hot.emptySelectedCells();\n        this.hot.runHooks('afterCut', rangedData, this.copyableRanges);\n      }\n\n      event.preventDefault();\n    }\n\n    /**\n     * `paste` event callback on textarea element.\n     *\n     * @param {Event} event ClipboardEvent or pseudo ClipboardEvent, if paste was called manually.\n     * @private\n     */\n\n  }, {\n    key: 'onPaste',\n    value: function onPaste(event) {\n      var _this5 = this;\n\n      if (!this.hot.isListening()) {\n        return;\n      }\n\n      var editor = this.hot.getActiveEditor();\n\n      if (editor && editor.isOpened()) {\n        return;\n      }\n\n      if (event && event.preventDefault) {\n        event.preventDefault();\n      }\n\n      var pastedData = void 0;\n\n      if (event && typeof event.clipboardData !== 'undefined') {\n        pastedData = event.clipboardData.getData('text/plain');\n      } else if (typeof ClipboardEvent === 'undefined' && typeof window.clipboardData !== 'undefined') {\n        pastedData = window.clipboardData.getData('Text');\n      }\n\n      var inputArray = _SheetClip2.default.parse(pastedData);\n\n      if (inputArray.length === 0) {\n        return;\n      }\n\n      var allowPasting = !!this.hot.runHooks('beforePaste', inputArray, this.copyableRanges);\n\n      if (!allowPasting) {\n        return;\n      }\n\n      var selected = this.hot.getSelectedLast();\n      var coordsFrom = new _src.CellCoords(selected[0], selected[1]);\n      var coordsTo = new _src.CellCoords(selected[2], selected[3]);\n      var cellRange = new _src.CellRange(coordsFrom, coordsFrom, coordsTo);\n      var topLeftCorner = cellRange.getTopLeftCorner();\n      var bottomRightCorner = cellRange.getBottomRightCorner();\n      var areaStart = topLeftCorner;\n      var areaEnd = new _src.CellCoords(Math.max(bottomRightCorner.row, inputArray.length - 1 + topLeftCorner.row), Math.max(bottomRightCorner.col, inputArray[0].length - 1 + topLeftCorner.col));\n\n      var isSelRowAreaCoverInputValue = coordsTo.row - coordsFrom.row >= inputArray.length - 1;\n      var isSelColAreaCoverInputValue = coordsTo.col - coordsFrom.col >= inputArray[0].length - 1;\n\n      this.hot.addHookOnce('afterChange', function (changes) {\n        var changesLength = changes ? changes.length : 0;\n\n        if (changesLength) {\n          var offset = { row: 0, col: 0 };\n          var highestColumnIndex = -1;\n\n          (0, _array.arrayEach)(changes, function (change, index) {\n            var nextChange = changesLength > index + 1 ? changes[index + 1] : null;\n\n            if (nextChange) {\n              if (!isSelRowAreaCoverInputValue) {\n                offset.row += Math.max(nextChange[0] - change[0] - 1, 0);\n              }\n              if (!isSelColAreaCoverInputValue && change[1] > highestColumnIndex) {\n                highestColumnIndex = change[1];\n                offset.col += Math.max(nextChange[1] - change[1] - 1, 0);\n              }\n            }\n          });\n          _this5.hot.selectCell(areaStart.row, areaStart.col, areaEnd.row + offset.row, areaEnd.col + offset.col);\n        }\n      });\n\n      this.hot.populateFromArray(areaStart.row, areaStart.col, inputArray, areaEnd.row, areaEnd.col, 'CopyPaste.paste', this.pasteMode);\n      this.hot.runHooks('afterPaste', inputArray, this.copyableRanges);\n    }\n\n    /**\n     * Add copy, cut and paste options to the Context Menu.\n     *\n     * @private\n     * @param {Object} options Contains default added options of the Context Menu.\n     */\n\n  }, {\n    key: 'onAfterContextMenuDefaultOptions',\n    value: function onAfterContextMenuDefaultOptions(options) {\n      options.items.push({\n        name: '---------'\n      }, (0, _copy2.default)(this), (0, _cut2.default)(this));\n    }\n\n    /**\n     * We have to keep focus on textarea element, to make possible use of the browser tools (copy, cut, paste).\n     *\n     * @private\n     */\n\n  }, {\n    key: 'onAfterSelectionEnd',\n    value: function onAfterSelectionEnd() {\n      var _privatePool$get = privatePool.get(this),\n          isFragmentSelectionEnabled = _privatePool$get.isFragmentSelectionEnabled;\n\n      var editor = this.hot.getActiveEditor();\n\n      if (editor && editor.isOpened()) {\n        return;\n      }\n\n      var editableElement = editor ? editor.TEXTAREA : void 0;\n\n      if (editableElement) {\n        this.focusableElement.setFocusableElement(editableElement);\n      } else {\n        this.focusableElement.useSecondaryElement();\n      }\n\n      if (isFragmentSelectionEnabled && this.focusableElement.getFocusableElement() !== document.activeElement && (0, _element.getSelectionText)()) {\n        return;\n      }\n\n      this.setCopyableText();\n      this.focusableElement.focus();\n    }\n\n    /**\n     * Destroys the plugin instance.\n     */\n\n  }, {\n    key: 'destroy',\n    value: function destroy() {\n      if (this.focusableElement) {\n        (0, _focusableElement.destroyElement)(this.focusableElement);\n        this.focusableElement = null;\n      }\n\n      _get(CopyPaste.prototype.__proto__ || Object.getPrototypeOf(CopyPaste.prototype), 'destroy', this).call(this);\n    }\n  }]);\n\n  return CopyPaste;\n}(_base2.default);\n\n(0, _plugins.registerPlugin)('CopyPaste', CopyPaste);\n\nexports.default = CopyPaste;\n\n/***/ }),\n/* 320 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports.default = copyItem;\n\nvar _constants = __webpack_require__(7);\n\nvar C = _interopRequireWildcard(_constants);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction copyItem(copyPastePlugin) {\n  return {\n    key: 'copy',\n    name: function name() {\n      return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_COPY);\n    },\n    callback: function callback() {\n      copyPastePlugin.copy();\n    },\n    disabled: function disabled() {\n      var selected = this.getSelected();\n\n      if (!selected || selected.length > 1) {\n        return true;\n      }\n\n      return false;\n    },\n\n    hidden: false\n  };\n}\n\n/***/ }),\n/* 321 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports.default = cutItem;\n\nvar _constants = __webpack_require__(7);\n\nvar C = _interopRequireWildcard(_constants);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction cutItem(copyPastePlugin) {\n  return {\n    key: 'cut',\n    name: function name() {\n      return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_CUT);\n    },\n    callback: function callback() {\n      copyPastePlugin.cut();\n    },\n    disabled: function disabled() {\n      var selected = this.getSelected();\n\n      if (!selected || selected.length > 1) {\n        return true;\n      }\n\n      return false;\n    },\n\n    hidden: false\n  };\n}\n\n/***/ }),\n/* 322 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _clipboardData = __webpack_require__(323);\n\nvar _clipboardData2 = _interopRequireDefault(_clipboardData);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar PasteEvent = function PasteEvent() {\n  _classCallCheck(this, PasteEvent);\n\n  this.clipboardData = new _clipboardData2.default();\n};\n\nexports.default = PasteEvent;\n\n/***/ }),\n/* 323 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar ClipboardData = function () {\n  function ClipboardData() {\n    _classCallCheck(this, ClipboardData);\n\n    this.data = {};\n  }\n\n  _createClass(ClipboardData, [{\n    key: \"setData\",\n    value: function setData(type, value) {\n      this.data[type] = value;\n    }\n  }, {\n    key: \"getData\",\n    value: function getData(type) {\n      return this.data[type] || void 0;\n    }\n  }]);\n\n  return ClipboardData;\n}();\n\nexports.default = ClipboardData;\n\n/***/ }),\n/* 324 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports.destroyElement = exports.deactivateElement = exports.createElement = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _eventManager = __webpack_require__(5);\n\nvar _eventManager2 = _interopRequireDefault(_eventManager);\n\nvar _localHooks = __webpack_require__(47);\n\nvar _localHooks2 = _interopRequireDefault(_localHooks);\n\nvar _object = __webpack_require__(1);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * @class FocusableWrapper\n *\n * @plugin CopyPaste\n */\nvar FocusableWrapper = function () {\n  function FocusableWrapper() {\n    _classCallCheck(this, FocusableWrapper);\n\n    /**\n     * The main/operational focusable element.\n     *\n     * @type {HTMLElement}\n     */\n    this.mainElement = null;\n    /**\n     * Instance of EventManager.\n     *\n     * @type {EventManager}\n     */\n    this.eventManager = new _eventManager2.default(this);\n    /**\n     * An object for tracking information about event listeners attached to the focusable element.\n     *\n     * @type {WeakSet}\n     */\n    this.listenersCount = new WeakSet();\n  }\n\n  /**\n   * Switch to the secondary focusable element. Used when no any main focusable element is provided.\n   */\n\n\n  _createClass(FocusableWrapper, [{\n    key: 'useSecondaryElement',\n    value: function useSecondaryElement() {\n      var el = createOrGetSecondaryElement();\n\n      if (!this.listenersCount.has(el)) {\n        this.listenersCount.add(el);\n        forwardEventsToLocalHooks(this.eventManager, el, this);\n      }\n\n      this.mainElement = el;\n    }\n\n    /**\n     * Switch to the main focusable element.\n     */\n\n  }, {\n    key: 'setFocusableElement',\n    value: function setFocusableElement(element) {\n      if (!this.listenersCount.has(element)) {\n        this.listenersCount.add(element);\n        forwardEventsToLocalHooks(this.eventManager, element, this);\n      }\n\n      this.mainElement = element;\n    }\n\n    /**\n     * Get currently set focusable element.\n     *\n     * @return {HTMLElement}\n     */\n\n  }, {\n    key: 'getFocusableElement',\n    value: function getFocusableElement() {\n      return this.mainElement;\n    }\n\n    /**\n     * Set focus to the focusable element.\n     */\n\n  }, {\n    key: 'focus',\n    value: function focus() {\n      // Add an empty space to texarea. It is necessary for safari to enable \"copy\" command from menu bar.\n      this.mainElement.value = ' ';\n      this.mainElement.select();\n    }\n  }]);\n\n  return FocusableWrapper;\n}();\n\n(0, _object.mixin)(FocusableWrapper, _localHooks2.default);\n\nvar refCounter = 0;\n\n/**\n * Create and return the FocusableWrapper instance.\n *\n * @return {FocusableWrapper}\n */\nfunction createElement() {\n  var focusableWrapper = new FocusableWrapper();\n\n  refCounter += 1;\n\n  return focusableWrapper;\n}\n\n/**\n * Deactivate the FocusableWrapper instance.\n *\n * @param {FocusableWrapper} wrapper\n */\nfunction deactivateElement(wrapper) {\n  wrapper.eventManager.clear();\n}\n\nvar runLocalHooks = function runLocalHooks(eventName, subject) {\n  return function (event) {\n    return subject.runLocalHooks(eventName, event);\n  };\n};\n\n/**\n * Register copy/cut/paste events and forward their actions to the subject local hooks system.\n *\n * @param {HTMLElement} element\n * @param {FocusableWrapper} subject\n */\nfunction forwardEventsToLocalHooks(eventManager, element, subject) {\n  eventManager.addEventListener(element, 'copy', runLocalHooks('copy', subject));\n  eventManager.addEventListener(element, 'cut', runLocalHooks('cut', subject));\n  eventManager.addEventListener(element, 'paste', runLocalHooks('paste', subject));\n}\n\nvar secondaryElement = void 0;\n\n/**\n * Create and attach newly created focusable element to the DOM.\n *\n * @return {HTMLElement}\n */\nfunction createOrGetSecondaryElement() {\n  if (secondaryElement) {\n\n    if (!secondaryElement.parentElement) {\n      document.body.appendChild(secondaryElement);\n    }\n\n    return secondaryElement;\n  }\n\n  var element = document.createElement('textarea');\n\n  secondaryElement = element;\n  element.id = 'HandsontableCopyPaste';\n  element.className = 'copyPaste';\n  element.tabIndex = -1;\n  element.autocomplete = 'off';\n  element.wrap = 'hard';\n  element.value = ' ';\n\n  document.body.appendChild(element);\n\n  return element;\n}\n\n/**\n * Destroy the FocusableWrapper instance.\n *\n * @param {FocusableWrapper} wrapper\n */\nfunction destroyElement(wrapper) {\n  if (!(wrapper instanceof FocusableWrapper)) {\n    return;\n  }\n\n  if (refCounter > 0) {\n    refCounter -= 1;\n  }\n\n  deactivateElement(wrapper);\n\n  if (refCounter <= 0) {\n    refCounter = 0;\n\n    // Detach secondary element from the DOM.\n    if (secondaryElement && secondaryElement.parentNode) {\n      secondaryElement.parentNode.removeChild(secondaryElement);\n      secondaryElement = null;\n    }\n    wrapper.mainElement = null;\n  }\n}\n\nexports.createElement = createElement;\nexports.deactivateElement = deactivateElement;\nexports.destroyElement = destroyElement;\n\n/***/ }),\n/* 325 */\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n/* 326 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _base = __webpack_require__(10);\n\nvar _base2 = _interopRequireDefault(_base);\n\nvar _plugins = __webpack_require__(8);\n\nvar _object = __webpack_require__(1);\n\nvar _number = __webpack_require__(6);\n\nvar _array = __webpack_require__(2);\n\nvar _src = __webpack_require__(4);\n\nvar _constants = __webpack_require__(7);\n\nvar C = _interopRequireWildcard(_constants);\n\nvar _contextMenuItem = __webpack_require__(327);\n\nvar _utils = __webpack_require__(48);\n\nvar _selection = __webpack_require__(201);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n/**\n * @class CustomBorders\n * @plugin CustomBorders\n *\n * @description\n * This plugin enables an option to apply custom borders through the context menu (configurable with context menu key\n * `borders`).\n *\n * To initialize Handsontable with predefined custom borders, provide cell coordinates and border styles in a form\n * of an array.\n *\n * See [Custom Borders](http://docs.handsontable.com/demo-custom-borders.html) demo for more examples.\n *\n * @example\n * ```js\n * customBorders: [\n *   {\n *    range: {\n *      from: {\n *        row: 1,\n *        col: 1\n *      },\n *      to: {\n *        row: 3,\n *        col: 4\n *      },\n *    },\n *    left: {},\n *    right: {},\n *    top: {},\n *    bottom: {},\n *   },\n * ],\n *\n * // or\n * customBorders: [\n *   { row: 2,\n *     col: 2,\n *     left: {\n *       width: 2,\n *       color: 'red',\n *     },\n *     right: {\n *       width: 1,\n *       color: 'green',\n *     },\n *     top: '',\n *     bottom: '',\n *   }\n * ],\n * ```\n */\nvar CustomBorders = function (_BasePlugin) {\n  _inherits(CustomBorders, _BasePlugin);\n\n  function CustomBorders(hotInstance) {\n    _classCallCheck(this, CustomBorders);\n\n    /**\n     * Saved borders.\n     *\n     * @private\n     * @type {Array}\n     */\n    var _this = _possibleConstructorReturn(this, (CustomBorders.__proto__ || Object.getPrototypeOf(CustomBorders)).call(this, hotInstance));\n\n    _this.savedBorders = [];\n    return _this;\n  }\n\n  /**\n  * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}\n  * hook and if it returns `true` than the {@link CustomBorders#enablePlugin} method is called.\n   *\n   * @returns {Boolean}\n   */\n\n\n  _createClass(CustomBorders, [{\n    key: 'isEnabled',\n    value: function isEnabled() {\n      return !!this.hot.getSettings().customBorders;\n    }\n\n    /**\n     * Enables the plugin functionality for this Handsontable instance.\n     */\n\n  }, {\n    key: 'enablePlugin',\n    value: function enablePlugin() {\n      var _this2 = this;\n\n      if (this.enabled) {\n        return;\n      }\n\n      this.addHook('afterContextMenuDefaultOptions', function (options) {\n        return _this2.onAfterContextMenuDefaultOptions(options);\n      });\n      this.addHook('afterInit', function () {\n        return _this2.onAfterInit();\n      });\n\n      _get(CustomBorders.prototype.__proto__ || Object.getPrototypeOf(CustomBorders.prototype), 'enablePlugin', this).call(this);\n    }\n\n    /**\n     * Disables the plugin functionality for this Handsontable instance.\n     */\n\n  }, {\n    key: 'disablePlugin',\n    value: function disablePlugin() {\n      this.hideBorders();\n\n      _get(CustomBorders.prototype.__proto__ || Object.getPrototypeOf(CustomBorders.prototype), 'disablePlugin', this).call(this);\n    }\n\n    /**\n     * Updates the plugin state. This method is executed when {@link Core#updateSettings} is invoked.\n     */\n\n  }, {\n    key: 'updatePlugin',\n    value: function updatePlugin() {\n      this.disablePlugin();\n      this.enablePlugin();\n\n      this.changeBorderSettings();\n\n      _get(CustomBorders.prototype.__proto__ || Object.getPrototypeOf(CustomBorders.prototype), 'updatePlugin', this).call(this);\n    }\n\n    /**\n      * Set custom borders.\n      *\n      * @example\n      * ```js\n      * const customBordersPlugin = hot.getPlugin('customBorders');\n      *\n      * // Using an array of arrays (produced by `.getSelected()` method).\n      * customBordersPlugin.setBorders([[1, 1, 2, 2], [6, 2, 0, 2]], {left: {width: 2, color: 'blue'}});\n      * // Using an array of CellRange objects (produced by `.getSelectedRange()` method).\n      * customBordersPlugin.setBorders(hot.getSelectedRange(), {left: {hide: false, width: 2, color: 'blue'}});\n      * ```\n      *\n      * @param {Array[]|CellRange[]} selectionRanges Array of selection ranges.\n      * @param {Object} borderObject Object with `top`, `right`, `bottom` and `left` properties.\n      */\n\n  }, {\n    key: 'setBorders',\n    value: function setBorders(selectionRanges, borderObject) {\n      var _this3 = this;\n\n      var defaultBorderKeys = ['top', 'right', 'bottom', 'left'];\n      var borderKeys = borderObject ? Object.keys(borderObject) : defaultBorderKeys;\n      var selectionType = (0, _selection.detectSelectionType)(selectionRanges);\n      var selectionSchemaNormalizer = (0, _selection.normalizeSelectionFactory)(selectionType);\n\n      (0, _array.arrayEach)(selectionRanges, function (selection) {\n        var _selectionSchemaNorma = selectionSchemaNormalizer(selection),\n            _selectionSchemaNorma2 = _slicedToArray(_selectionSchemaNorma, 4),\n            rowStart = _selectionSchemaNorma2[0],\n            columnStart = _selectionSchemaNorma2[1],\n            rowEnd = _selectionSchemaNorma2[2],\n            columnEnd = _selectionSchemaNorma2[3];\n\n        var _loop = function _loop(row) {\n          var _loop2 = function _loop2(col) {\n            (0, _array.arrayEach)(borderKeys, function (borderKey) {\n              _this3.prepareBorderFromCustomAdded(row, col, borderObject, borderKey);\n            });\n          };\n\n          for (var col = columnStart; col <= columnEnd; col += 1) {\n            _loop2(col);\n          }\n        };\n\n        for (var row = rowStart; row <= rowEnd; row += 1) {\n          _loop(row);\n        }\n      });\n    }\n\n    /**\n      * Get custom borders.\n      *\n      * @example\n      * ```js\n      * const customBordersPlugin = hot.getPlugin('customBorders');\n      *\n      * // Using an array of arrays (produced by `.getSelected()` method).\n      * customBordersPlugin.getBorders([[1, 1, 2, 2], [6, 2, 0, 2]]);\n      * // Using an array of CellRange objects (produced by `.getSelectedRange()` method).\n      * customBordersPlugin.getBorders(hot.getSelectedRange());\n      * // Using without param - return all customBorders.\n      * customBordersPlugin.getBorders();\n      * ```\n      *\n      * @param {Array[]|CellRange[]} selectionRanges Array of selection ranges.\n      * @return {Object[]} Returns array of border objects.\n      */\n\n  }, {\n    key: 'getBorders',\n    value: function getBorders(selectionRanges) {\n      var _this4 = this;\n\n      if (!Array.isArray(selectionRanges)) {\n        return this.savedBorders;\n      }\n\n      var selectionType = (0, _selection.detectSelectionType)(selectionRanges);\n      var selectionSchemaNormalizer = (0, _selection.normalizeSelectionFactory)(selectionType);\n      var selectedBorders = [];\n\n      (0, _array.arrayEach)(selectionRanges, function (selection) {\n        var _selectionSchemaNorma3 = selectionSchemaNormalizer(selection),\n            _selectionSchemaNorma4 = _slicedToArray(_selectionSchemaNorma3, 4),\n            rowStart = _selectionSchemaNorma4[0],\n            columnStart = _selectionSchemaNorma4[1],\n            rowEnd = _selectionSchemaNorma4[2],\n            columnEnd = _selectionSchemaNorma4[3];\n\n        var _loop3 = function _loop3(row) {\n          var _loop4 = function _loop4(col) {\n            (0, _array.arrayEach)(_this4.savedBorders, function (border) {\n              if (border.row === row && border.col === col) {\n                selectedBorders.push(border);\n              }\n            });\n          };\n\n          for (var col = columnStart; col <= columnEnd; col += 1) {\n            _loop4(col);\n          }\n        };\n\n        for (var row = rowStart; row <= rowEnd; row += 1) {\n          _loop3(row);\n        }\n      });\n\n      return selectedBorders;\n    }\n\n    /**\n      * Clear custom borders.\n      *\n      * @example\n      * ```js\n      * const customBordersPlugin = hot.getPlugin('customBorders');\n      *\n      * // Using an array of arrays (produced by `.getSelected()` method).\n      * customBordersPlugin.clearBorders([[1, 1, 2, 2], [6, 2, 0, 2]]);\n      * // Using an array of CellRange objects (produced by `.getSelectedRange()` method).\n      * customBordersPlugin.clearBorders(hot.getSelectedRange());\n      * // Using without param - clear all customBorders.\n      * customBordersPlugin.clearBorders();\n      * ```\n      *\n      * @param {Array[]|CellRange[]} selectionRanges Array of selection ranges.\n      */\n\n  }, {\n    key: 'clearBorders',\n    value: function clearBorders(selectionRanges) {\n      var _this5 = this;\n\n      if (selectionRanges) {\n        this.setBorders(selectionRanges);\n      } else {\n        (0, _array.arrayEach)(this.savedBorders, function (border) {\n          _this5.clearBordersFromSelectionSettings(border.id);\n          _this5.clearNullCellRange();\n          _this5.hot.removeCellMeta(border.row, border.col, 'borders');\n        });\n\n        this.savedBorders.length = 0;\n      }\n    }\n\n    /**\n     * Insert WalkontableSelection instance into Walkontable settings.\n     *\n     * @private\n     * @param {Object} border Object with `row` and `col`, `left`, `right`, `top` and `bottom`, `id` and `border` ({Object} with `color`, `width` and `cornerVisible` property) properties.\n     * @param {String} place Coordinate where add/remove border - `top`, `bottom`, `left`, `right`.\n     */\n\n  }, {\n    key: 'insertBorderIntoSettings',\n    value: function insertBorderIntoSettings(border, place) {\n      var hasSavedBorders = this.checkSavedBorders(border);\n\n      if (!hasSavedBorders) {\n        this.savedBorders.push(border);\n      }\n\n      var coordinates = {\n        row: border.row,\n        col: border.col\n      };\n      var cellRange = new _src.CellRange(coordinates, coordinates, coordinates);\n      var hasCustomSelections = this.checkCustomSelections(border, cellRange, place);\n\n      if (!hasCustomSelections) {\n        this.hot.selection.highlight.addCustomSelection({ border: border, cellRange: cellRange });\n        this.hot.view.wt.draw(true);\n      }\n    }\n\n    /**\n     * Prepare borders from setting (single cell).\n     *\n     * @private\n     * @param {Number} row Visual row index.\n     * @param {Number} column Visual column index.\n     * @param {Object} borderDescriptor Object with `row` and `col`, `left`, `right`, `top` and `bottom` properties.\n     * @param {String} place Coordinate where add/remove border - `top`, `bottom`, `left`, `right`.\n     */\n\n  }, {\n    key: 'prepareBorderFromCustomAdded',\n    value: function prepareBorderFromCustomAdded(row, column, borderDescriptor, place) {\n      var border = (0, _utils.createEmptyBorders)(row, column);\n\n      if (borderDescriptor) {\n        border = (0, _utils.extendDefaultBorder)(border, borderDescriptor);\n\n        (0, _array.arrayEach)(this.hot.selection.highlight.customSelections, function (customSelection) {\n          if (border.id === customSelection.settings.id) {\n            Object.assign(customSelection.settings, borderDescriptor);\n\n            border = customSelection.settings;\n\n            return false; // breaks forAll\n          }\n        });\n      }\n\n      this.hot.setCellMeta(row, column, 'borders', border);\n\n      this.insertBorderIntoSettings(border, place);\n    }\n\n    /**\n     * Prepare borders from setting (object).\n     *\n     * @private\n     * @param {Object} rowDecriptor Object with `range`, `left`, `right`, `top` and `bottom` properties.\n     */\n\n  }, {\n    key: 'prepareBorderFromCustomAddedRange',\n    value: function prepareBorderFromCustomAddedRange(rowDecriptor) {\n      var _this6 = this;\n\n      var range = rowDecriptor.range;\n\n      (0, _number.rangeEach)(range.from.row, range.to.row, function (rowIndex) {\n        (0, _number.rangeEach)(range.from.col, range.to.col, function (colIndex) {\n          var border = (0, _utils.createEmptyBorders)(rowIndex, colIndex);\n          var add = 0;\n\n          if (rowIndex === range.from.row) {\n            add += 1;\n\n            if ((0, _object.hasOwnProperty)(rowDecriptor, 'top')) {\n              border.top = rowDecriptor.top;\n            }\n          }\n\n          if (rowIndex === range.to.row) {\n            add += 1;\n\n            if ((0, _object.hasOwnProperty)(rowDecriptor, 'bottom')) {\n              border.bottom = rowDecriptor.bottom;\n            }\n          }\n\n          if (colIndex === range.from.col) {\n            add += 1;\n\n            if ((0, _object.hasOwnProperty)(rowDecriptor, 'left')) {\n              border.left = rowDecriptor.left;\n            }\n          }\n\n          if (colIndex === range.to.col) {\n            add += 1;\n\n            if ((0, _object.hasOwnProperty)(rowDecriptor, 'right')) {\n              border.right = rowDecriptor.right;\n            }\n          }\n\n          if (add > 0) {\n            _this6.hot.setCellMeta(rowIndex, colIndex, 'borders', border);\n            _this6.insertBorderIntoSettings(border);\n          }\n        });\n      });\n    }\n\n    /**\n     * Remove border (triggered from context menu).\n     *\n     * @private\n     * @param {Number} row Visual row index.\n     * @param {Number} column Visual column index.\n     */\n\n  }, {\n    key: 'removeAllBorders',\n    value: function removeAllBorders(row, column) {\n      var borderId = (0, _utils.createId)(row, column);\n\n      this.spliceBorder(borderId);\n\n      this.clearBordersFromSelectionSettings(borderId);\n      this.clearNullCellRange();\n\n      this.hot.removeCellMeta(row, column, 'borders');\n    }\n\n    /**\n     * Set borders for each cell re. to border position.\n     *\n     * @private\n     * @param {Number} row Visual row index.\n     * @param {Number} column Visual column index.\n     * @param {String} place Coordinate where add/remove border - `top`, `bottom`, `left`, `right` and `noBorders`.\n     * @param {Boolean} remove True when remove borders, and false when add borders.\n     */\n\n  }, {\n    key: 'setBorder',\n    value: function setBorder(row, column, place, remove) {\n      var bordersMeta = this.hot.getCellMeta(row, column).borders;\n\n      if (!bordersMeta || bordersMeta.border === void 0) {\n        bordersMeta = (0, _utils.createEmptyBorders)(row, column);\n      }\n\n      if (remove) {\n        bordersMeta[place] = (0, _utils.createSingleEmptyBorder)();\n\n        var hideCount = this.countHide(bordersMeta);\n\n        if (hideCount === 4) {\n          this.removeAllBorders(row, column);\n        } else {\n          var customSelectionsChecker = this.checkCustomSelectionsFromContextMenu(bordersMeta, place, remove);\n\n          if (!customSelectionsChecker) {\n            this.insertBorderIntoSettings(bordersMeta);\n          }\n\n          this.hot.setCellMeta(row, column, 'borders', bordersMeta);\n        }\n      } else {\n        bordersMeta[place] = (0, _utils.createDefaultCustomBorder)();\n\n        var _customSelectionsChecker = this.checkCustomSelectionsFromContextMenu(bordersMeta, place, remove);\n\n        if (!_customSelectionsChecker) {\n          this.insertBorderIntoSettings(bordersMeta);\n        }\n\n        this.hot.setCellMeta(row, column, 'borders', bordersMeta);\n      }\n    }\n\n    /**\n     * Prepare borders based on cell and border position.\n     *\n     * @private\n     * @param {Object} selected\n     * @param {String} place Coordinate where add/remove border - `top`, `bottom`, `left`, `right` and `noBorders`.\n     * @param {Boolean} remove True when remove borders, and false when add borders.\n     */\n\n  }, {\n    key: 'prepareBorder',\n    value: function prepareBorder(selected, place, remove) {\n      var _this7 = this;\n\n      (0, _array.arrayEach)(selected, function (_ref) {\n        var start = _ref.start,\n            end = _ref.end;\n\n        if (start.row === end.row && start.col === end.col) {\n          if (place === 'noBorders') {\n            _this7.removeAllBorders(start.row, start.col);\n          } else {\n            _this7.setBorder(start.row, start.col, place, remove);\n          }\n        } else {\n          switch (place) {\n            case 'noBorders':\n              (0, _number.rangeEach)(start.col, end.col, function (colIndex) {\n                (0, _number.rangeEach)(start.row, end.row, function (rowIndex) {\n                  _this7.removeAllBorders(rowIndex, colIndex);\n                });\n              });\n              break;\n\n            case 'top':\n              (0, _number.rangeEach)(start.col, end.col, function (topCol) {\n                _this7.setBorder(start.row, topCol, place, remove);\n              });\n              break;\n\n            case 'right':\n              (0, _number.rangeEach)(start.row, end.row, function (rowRight) {\n                _this7.setBorder(rowRight, end.col, place, remove);\n              });\n              break;\n\n            case 'bottom':\n              (0, _number.rangeEach)(start.col, end.col, function (bottomCol) {\n                _this7.setBorder(end.row, bottomCol, place, remove);\n              });\n              break;\n\n            case 'left':\n              (0, _number.rangeEach)(start.row, end.row, function (rowLeft) {\n                _this7.setBorder(rowLeft, start.col, place, remove);\n              });\n              break;\n            default:\n              break;\n          }\n        }\n      });\n    }\n\n    /**\n     * Create borders from settings.\n     *\n     * @private\n     * @param {Array} customBorders Object with `row` and `col`, `left`, `right`, `top` and `bottom` properties.\n     */\n\n  }, {\n    key: 'createCustomBorders',\n    value: function createCustomBorders(customBorders) {\n      var _this8 = this;\n\n      (0, _array.arrayEach)(customBorders, function (customBorder) {\n        if (customBorder.range) {\n          _this8.prepareBorderFromCustomAddedRange(customBorder);\n        } else {\n          _this8.prepareBorderFromCustomAdded(customBorder.row, customBorder.col, customBorder);\n        }\n      });\n    }\n\n    /**\n    * Count hide property in border object.\n    *\n    * @private\n    * @param {Object} border Object with `row` and `col`, `left`, `right`, `top` and `bottom`, `id` and `border` ({Object} with `color`, `width` and `cornerVisible` property) properties.\n    */\n\n  }, {\n    key: 'countHide',\n    value: function countHide(border) {\n      var values = Object.values(border);\n\n      return (0, _array.arrayReduce)(values, function (accumulator, value) {\n        var result = accumulator;\n\n        if (value.hide) {\n          result += 1;\n        }\n\n        return result;\n      }, 0);\n    }\n\n    /**\n    * Clear borders settings from custom selections.\n    *\n    * @private\n    * @param {String} borderId Border id name as string.\n    */\n\n  }, {\n    key: 'clearBordersFromSelectionSettings',\n    value: function clearBordersFromSelectionSettings(borderId) {\n      var index = (0, _array.arrayMap)(this.hot.selection.highlight.customSelections, function (customSelection) {\n        return customSelection.settings.id;\n      }).indexOf(borderId);\n\n      if (index > -1) {\n        this.hot.selection.highlight.customSelections[index].clear();\n      }\n\n      this.hot.view.wt.draw(true);\n    }\n\n    /**\n    * Clear cellRange with null value.\n    *\n    * @private\n    */\n\n  }, {\n    key: 'clearNullCellRange',\n    value: function clearNullCellRange() {\n      var _this9 = this;\n\n      (0, _array.arrayEach)(this.hot.selection.highlight.customSelections, function (customSelection, index) {\n        if (customSelection.cellRange === null) {\n          _this9.hot.selection.highlight.customSelections.splice(index, 1);\n\n          return false; // breaks forAll\n        }\n      });\n    }\n\n    /**\n      * Hide custom borders.\n      *\n      * @private\n      */\n\n  }, {\n    key: 'hideBorders',\n    value: function hideBorders() {\n      var _this10 = this;\n\n      (0, _array.arrayEach)(this.savedBorders, function (border) {\n        _this10.clearBordersFromSelectionSettings(border.id);\n      });\n    }\n\n    /**\n    * Splice border from savedBorders.\n    *\n    * @private\n    * @param {String} borderId Border id name as string.\n    */\n\n  }, {\n    key: 'spliceBorder',\n    value: function spliceBorder(borderId) {\n      var index = (0, _array.arrayMap)(this.savedBorders, function (border) {\n        return border.id;\n      }).indexOf(borderId);\n\n      if (index > -1) {\n        this.savedBorders.splice(index, 1);\n      }\n    }\n\n    /**\n    * Check if an border already exists in the savedBorders array, and if true update border in savedBorders.\n    *\n    * @private\n    * @param {Object} border Object with `row` and `col`, `left`, `right`, `top` and `bottom`, `id` and `border` ({Object} with `color`, `width` and `cornerVisible` property) properties.\n    *\n    * @return {Boolean}\n    */\n\n  }, {\n    key: 'checkSavedBorders',\n    value: function checkSavedBorders(border) {\n      var _this11 = this;\n\n      var check = false;\n\n      var hideCount = this.countHide(border);\n\n      if (hideCount === 4) {\n        this.spliceBorder(border.id);\n        check = true;\n      } else {\n        (0, _array.arrayEach)(this.savedBorders, function (savedBorder, index) {\n          if (border.id === savedBorder.id) {\n            _this11.savedBorders[index] = border;\n            check = true;\n\n            return false; // breaks forAll\n          }\n        });\n      }\n\n      return check;\n    }\n\n    /**\n    * Check if an border already exists in the customSelections, and if true call toggleHiddenClass method.\n    *\n    * @private\n    * @param {Object} border Object with `row` and `col`, `left`, `right`, `top` and `bottom`, `id` and `border` ({Object} with `color`, `width` and `cornerVisible` property) properties.\n    * @param {String} place Coordinate where add/remove border - `top`, `bottom`, `left`, `right` and `noBorders`.\n    * @param {Boolean} remove True when remove borders, and false when add borders.\n    *\n    * @return {Boolean}\n    */\n\n  }, {\n    key: 'checkCustomSelectionsFromContextMenu',\n    value: function checkCustomSelectionsFromContextMenu(border, place, remove) {\n      var check = false;\n\n      (0, _array.arrayEach)(this.hot.selection.highlight.customSelections, function (customSelection) {\n        if (border.id === customSelection.settings.id) {\n          (0, _object.objectEach)(customSelection.instanceBorders, function (borderObject) {\n            borderObject.toggleHiddenClass(place, remove);\n          });\n\n          check = true;\n\n          return false; // breaks forAll\n        }\n      });\n\n      return check;\n    }\n\n    /**\n    * Check if an border already exists in the customSelections, and if true reset cellRange.\n    *\n    * @private\n    * @param {Object} border Object with `row` and `col`, `left`, `right`, `top` and `bottom`, `id` and `border` ({Object} with `color`, `width` and `cornerVisible` property) properties.\n    * @param {CellRange} cellRange\n    * @param {String} place Coordinate where add/remove border - `top`, `bottom`, `left`, `right`.\n    *\n    * @return {Boolean}\n    */\n\n  }, {\n    key: 'checkCustomSelections',\n    value: function checkCustomSelections(border, cellRange, place) {\n      var hideCount = this.countHide(border);\n      var check = false;\n\n      if (hideCount === 4) {\n        this.removeAllBorders(border.row, border.col);\n        this.clearBordersFromSelectionSettings(border.id);\n        this.clearNullCellRange();\n\n        check = true;\n      } else {\n        (0, _array.arrayEach)(this.hot.selection.highlight.customSelections, function (customSelection) {\n          if (border.id === customSelection.settings.id) {\n            customSelection.cellRange = cellRange;\n\n            if (place) {\n              (0, _object.objectEach)(customSelection.instanceBorders, function (borderObject) {\n                borderObject.changeBorderStyle(place, border);\n              });\n            }\n\n            check = true;\n\n            return false; // breaks forAll\n          }\n        });\n      }\n\n      return check;\n    }\n\n    /**\n     * Change borders from settings.\n     *\n     * @private\n     */\n\n  }, {\n    key: 'changeBorderSettings',\n    value: function changeBorderSettings() {\n      var customBorders = this.hot.getSettings().customBorders;\n\n      if (Array.isArray(customBorders)) {\n        if (!customBorders.length) {\n          this.savedBorders = customBorders;\n        }\n\n        this.createCustomBorders(customBorders);\n      } else if (customBorders !== void 0) {\n        this.createCustomBorders(this.savedBorders);\n      }\n    }\n\n    /**\n    * Add border options to context menu.\n    *\n    * @private\n    * @param {Object} defaultOptions Context menu items.\n    */\n\n  }, {\n    key: 'onAfterContextMenuDefaultOptions',\n    value: function onAfterContextMenuDefaultOptions(defaultOptions) {\n      if (!this.hot.getSettings().customBorders) {\n        return;\n      }\n\n      defaultOptions.items.push({\n        name: '---------'\n      }, {\n        key: 'borders',\n        name: function name() {\n          return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_BORDERS);\n        },\n        disabled: function disabled() {\n          return this.selection.isSelectedByCorner();\n        },\n\n        submenu: {\n          items: [(0, _contextMenuItem.top)(this), (0, _contextMenuItem.right)(this), (0, _contextMenuItem.bottom)(this), (0, _contextMenuItem.left)(this), (0, _contextMenuItem.noBorders)(this)]\n        }\n      });\n    }\n\n    /**\n     * `afterInit` hook callback.\n     *\n     * @private\n     */\n\n  }, {\n    key: 'onAfterInit',\n    value: function onAfterInit() {\n      this.changeBorderSettings();\n    }\n\n    /**\n     * Destroys the plugin instance.\n     */\n\n  }, {\n    key: 'destroy',\n    value: function destroy() {\n      _get(CustomBorders.prototype.__proto__ || Object.getPrototypeOf(CustomBorders.prototype), 'destroy', this).call(this);\n    }\n  }]);\n\n  return CustomBorders;\n}(_base2.default);\n\n(0, _plugins.registerPlugin)('customBorders', CustomBorders);\n\nexports.default = CustomBorders;\n\n/***/ }),\n/* 327 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports.top = exports.right = exports.noBorders = exports.left = exports.bottom = undefined;\n\nvar _bottom = __webpack_require__(328);\n\nvar _bottom2 = _interopRequireDefault(_bottom);\n\nvar _left = __webpack_require__(329);\n\nvar _left2 = _interopRequireDefault(_left);\n\nvar _noBorders = __webpack_require__(330);\n\nvar _noBorders2 = _interopRequireDefault(_noBorders);\n\nvar _right = __webpack_require__(331);\n\nvar _right2 = _interopRequireDefault(_right);\n\nvar _top = __webpack_require__(332);\n\nvar _top2 = _interopRequireDefault(_top);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.bottom = _bottom2.default;\nexports.left = _left2.default;\nexports.noBorders = _noBorders2.default;\nexports.right = _right2.default;\nexports.top = _top2.default;\n\n/***/ }),\n/* 328 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports.default = bottom;\n\nvar _constants = __webpack_require__(7);\n\nvar C = _interopRequireWildcard(_constants);\n\nvar _utils = __webpack_require__(48);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction bottom(customBordersPlugin) {\n  return {\n    key: 'borders:bottom',\n    name: function name() {\n      var label = this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_BORDERS_BOTTOM);\n      var hasBorder = (0, _utils.checkSelectionBorders)(this, 'bottom');\n      if (hasBorder) {\n        label = (0, _utils.markSelected)(label);\n      }\n      return label;\n    },\n    callback: function callback(key, selected) {\n      var hasBorder = (0, _utils.checkSelectionBorders)(this, 'bottom');\n      customBordersPlugin.prepareBorder(selected, 'bottom', hasBorder);\n    }\n  };\n}\n\n/***/ }),\n/* 329 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports.default = left;\n\nvar _constants = __webpack_require__(7);\n\nvar C = _interopRequireWildcard(_constants);\n\nvar _utils = __webpack_require__(48);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction left(customBordersPlugin) {\n  return {\n    key: 'borders:left',\n    name: function name() {\n      var label = this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_BORDERS_LEFT);\n      var hasBorder = (0, _utils.checkSelectionBorders)(this, 'left');\n      if (hasBorder) {\n        label = (0, _utils.markSelected)(label);\n      }\n\n      return label;\n    },\n    callback: function callback(key, selected) {\n      var hasBorder = (0, _utils.checkSelectionBorders)(this, 'left');\n      customBordersPlugin.prepareBorder(selected, 'left', hasBorder);\n    }\n  };\n}\n\n/***/ }),\n/* 330 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports.default = noBorders;\n\nvar _constants = __webpack_require__(7);\n\nvar C = _interopRequireWildcard(_constants);\n\nvar _utils = __webpack_require__(48);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction noBorders(customBordersPlugin) {\n  return {\n    key: 'borders:no_borders',\n    name: function name() {\n      return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_REMOVE_BORDERS);\n    },\n    callback: function callback(key, selected) {\n      customBordersPlugin.prepareBorder(selected, 'noBorders');\n    },\n    disabled: function disabled() {\n      return !(0, _utils.checkSelectionBorders)(this);\n    }\n  };\n}\n\n/***/ }),\n/* 331 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports.default = right;\n\nvar _constants = __webpack_require__(7);\n\nvar C = _interopRequireWildcard(_constants);\n\nvar _utils = __webpack_require__(48);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction right(customBordersPlugin) {\n  return {\n    key: 'borders:right',\n    name: function name() {\n      var label = this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_BORDERS_RIGHT);\n      var hasBorder = (0, _utils.checkSelectionBorders)(this, 'right');\n      if (hasBorder) {\n        label = (0, _utils.markSelected)(label);\n      }\n      return label;\n    },\n    callback: function callback(key, selected) {\n      var hasBorder = (0, _utils.checkSelectionBorders)(this, 'right');\n      customBordersPlugin.prepareBorder(selected, 'right', hasBorder);\n    }\n  };\n}\n\n/***/ }),\n/* 332 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports.default = top;\n\nvar _constants = __webpack_require__(7);\n\nvar C = _interopRequireWildcard(_constants);\n\nvar _utils = __webpack_require__(48);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction top(customBordersPlugin) {\n  return {\n    key: 'borders:top',\n    name: function name() {\n      var label = this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_BORDERS_TOP);\n      var hasBorder = (0, _utils.checkSelectionBorders)(this, 'top');\n      if (hasBorder) {\n        label = (0, _utils.markSelected)(label);\n      }\n\n      return label;\n    },\n    callback: function callback(key, selected) {\n      var hasBorder = (0, _utils.checkSelectionBorders)(this, 'top');\n      customBordersPlugin.prepareBorder(selected, 'top', hasBorder);\n    }\n  };\n}\n\n/***/ }),\n/* 333 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _base = __webpack_require__(10);\n\nvar _base2 = _interopRequireDefault(_base);\n\nvar _eventManager = __webpack_require__(5);\n\nvar _eventManager2 = _interopRequireDefault(_eventManager);\n\nvar _plugins = __webpack_require__(8);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n/**\n * @description\n * Plugin used to scroll Handsontable by selecting a cell and dragging outside of the visible viewport.\n *\n *\n * @class DragToScroll\n * @plugin DragToScroll\n */\nvar DragToScroll = function (_BasePlugin) {\n  _inherits(DragToScroll, _BasePlugin);\n\n  function DragToScroll(hotInstance) {\n    _classCallCheck(this, DragToScroll);\n\n    /**\n     * Instance of {@link EventManager}.\n     *\n     * @private\n     * @type {EventManager}\n     */\n    var _this = _possibleConstructorReturn(this, (DragToScroll.__proto__ || Object.getPrototypeOf(DragToScroll)).call(this, hotInstance));\n\n    _this.eventManager = new _eventManager2.default(_this);\n    /**\n     * Size of an element and its position relative to the viewport,\n     * e.g. {bottom: 449, height: 441, left: 8, right: 814, top: 8, width: 806, x: 8, y:8}.\n     *\n     * @type {DOMRect}\n     */\n    _this.boundaries = null;\n    /**\n     * Callback function.\n     *\n     * @private\n     * @type {Function}\n     */\n    _this.callback = null;\n    /**\n     * Flag indicates mouseDown/mouseUp.\n     *\n     * @private\n     * @type {Boolean}\n     */\n    _this.listening = false;\n    return _this;\n  }\n\n  /**\n   * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}\n   * hook and if it returns `true` than the {@link DragToScroll#enablePlugin} method is called.\n   *\n   * @returns {Boolean}\n   */\n\n\n  _createClass(DragToScroll, [{\n    key: 'isEnabled',\n    value: function isEnabled() {\n      return !!this.hot.getSettings().dragToScroll;\n    }\n\n    /**\n     * Enables the plugin functionality for this Handsontable instance.\n     */\n\n  }, {\n    key: 'enablePlugin',\n    value: function enablePlugin() {\n      var _this2 = this;\n\n      if (this.enabled) {\n        return;\n      }\n\n      this.addHook('afterOnCellMouseDown', function () {\n        return _this2.setupListening();\n      });\n      this.addHook('afterOnCellCornerMouseDown', function () {\n        return _this2.setupListening();\n      });\n\n      this.registerEvents();\n\n      _get(DragToScroll.prototype.__proto__ || Object.getPrototypeOf(DragToScroll.prototype), 'enablePlugin', this).call(this);\n    }\n\n    /**\n     * Updates the plugin state. This method is executed when {@link Core#updateSettings} is invoked.\n     */\n\n  }, {\n    key: 'updatePlugin',\n    value: function updatePlugin() {\n      this.disablePlugin();\n      this.enablePlugin();\n\n      _get(DragToScroll.prototype.__proto__ || Object.getPrototypeOf(DragToScroll.prototype), 'updatePlugin', this).call(this);\n    }\n\n    /**\n     * Disables the plugin functionality for this Handsontable instance.\n     */\n\n  }, {\n    key: 'disablePlugin',\n    value: function disablePlugin() {\n      this.unregisterEvents();\n\n      _get(DragToScroll.prototype.__proto__ || Object.getPrototypeOf(DragToScroll.prototype), 'disablePlugin', this).call(this);\n    }\n\n    /**\n     * Sets the value of the visible element.\n     *\n     * @param boundaries {DOMRect} An object with coordinates compatible with DOMRect.\n     */\n\n  }, {\n    key: 'setBoundaries',\n    value: function setBoundaries(boundaries) {\n      this.boundaries = boundaries;\n    }\n\n    /**\n     * Changes callback function.\n     *\n     * @param callback {Function}\n     */\n\n  }, {\n    key: 'setCallback',\n    value: function setCallback(callback) {\n      this.callback = callback;\n    }\n\n    /**\n     * Checks if the mouse position (X, Y) is outside of the viewport and fires a callback with calculated X an Y diffs\n     * between passed boundaries.\n     *\n     * @param {Number} x Mouse X coordinate to check.\n     * @param {Number} y Mouse Y coordinate to check.\n     */\n\n  }, {\n    key: 'check',\n    value: function check(x, y) {\n      var diffX = 0;\n      var diffY = 0;\n\n      if (y < this.boundaries.top) {\n        // y is less than top\n        diffY = y - this.boundaries.top;\n      } else if (y > this.boundaries.bottom) {\n        // y is more than bottom\n        diffY = y - this.boundaries.bottom;\n      }\n\n      if (x < this.boundaries.left) {\n        // x is less than left\n        diffX = x - this.boundaries.left;\n      } else if (x > this.boundaries.right) {\n        // x is more than right\n        diffX = x - this.boundaries.right;\n      }\n\n      this.callback(diffX, diffY);\n    }\n\n    /**\n     * Registers dom listeners.\n     *\n     * @private\n     */\n\n  }, {\n    key: 'registerEvents',\n    value: function registerEvents() {\n      var _this3 = this;\n\n      this.eventManager.addEventListener(document, 'mouseup', function () {\n        return _this3.onMouseUp();\n      });\n      this.eventManager.addEventListener(document, 'mousemove', function (event) {\n        return _this3.onMouseMove(event);\n      });\n    }\n\n    /**\n     * Unbinds the events used by the plugin.\n     *\n     * @private\n     */\n\n  }, {\n    key: 'unregisterEvents',\n    value: function unregisterEvents() {\n      this.eventManager.clear();\n    }\n\n    /**\n     * On after on cell/cellCorner mouse down listener.\n     *\n     * @private\n     */\n\n  }, {\n    key: 'setupListening',\n    value: function setupListening() {\n      var scrollHandler = this.hot.view.wt.wtTable.holder; // native scroll\n\n      if (scrollHandler === window) {\n        // not much we can do currently\n        return;\n      }\n\n      this.setBoundaries(scrollHandler.getBoundingClientRect());\n      this.setCallback(function (scrollX, scrollY) {\n        if (scrollX < 0) {\n          scrollHandler.scrollLeft -= 50;\n        } else if (scrollX > 0) {\n          scrollHandler.scrollLeft += 50;\n        }\n\n        if (scrollY < 0) {\n          scrollHandler.scrollTop -= 20;\n        } else if (scrollY > 0) {\n          scrollHandler.scrollTop += 20;\n        }\n      });\n\n      this.listening = true;\n    }\n\n    /**\n     * 'mouseMove' event callback.\n     *\n     * @private\n     * @param {MouseEvent} event `mousemove` event properties.\n     */\n\n  }, {\n    key: 'onMouseMove',\n    value: function onMouseMove(event) {\n      if (this.listening) {\n        this.check(event.clientX, event.clientY);\n      }\n    }\n\n    /**\n     * `onMouseUp` hook callback.\n     *\n     * @private\n     */\n\n  }, {\n    key: 'onMouseUp',\n    value: function onMouseUp() {\n      this.listening = false;\n    }\n\n    /**\n     * Destroys the plugin instance.\n     */\n\n  }, {\n    key: 'destroy',\n    value: function destroy() {\n      _get(DragToScroll.prototype.__proto__ || Object.getPrototypeOf(DragToScroll.prototype), 'destroy', this).call(this);\n    }\n  }]);\n\n  return DragToScroll;\n}(_base2.default);\n\n(0, _plugins.registerPlugin)('dragToScroll', DragToScroll);\n\nexports.default = DragToScroll;\n\n/***/ }),\n/* 334 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _base = __webpack_require__(10);\n\nvar _base2 = _interopRequireDefault(_base);\n\nvar _plugins = __webpack_require__(8);\n\nvar _array = __webpack_require__(2);\n\nvar _freezeColumn = __webpack_require__(335);\n\nvar _freezeColumn2 = _interopRequireDefault(_freezeColumn);\n\nvar _unfreezeColumn = __webpack_require__(336);\n\nvar _unfreezeColumn2 = _interopRequireDefault(_unfreezeColumn);\n\n__webpack_require__(337);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar privatePool = new WeakMap();\n/**\n * This plugin allows to manually \"freeze\" and \"unfreeze\" a column using an entry in the Context Menu or using API.\n * You can turn it on by setting a {@link Options#manualColumnFreeze} property to `true`.\n *\n * @example\n * ```js\n * // Enables the plugin\n * manualColumnFreeze: true,\n * ```\n *\n * @plugin ManualColumnFreeze\n * @dependencies ManualColumnMove\n */\n\nvar ManualColumnFreeze = function (_BasePlugin) {\n  _inherits(ManualColumnFreeze, _BasePlugin);\n\n  function ManualColumnFreeze(hotInstance) {\n    _classCallCheck(this, ManualColumnFreeze);\n\n    var _this = _possibleConstructorReturn(this, (ManualColumnFreeze.__proto__ || Object.getPrototypeOf(ManualColumnFreeze)).call(this, hotInstance));\n\n    privatePool.set(_this, {\n      moveByFreeze: false,\n      afterFirstUse: false\n    });\n    /**\n     * Original column positions\n     *\n     * @private\n     * @type {Array}\n     */\n    _this.frozenColumnsBasePositions = [];\n    /**\n     * Reference to the `ManualColumnMove` plugin.\n     *\n     * @private\n     * @type {ManualColumnMove}\n     */\n    _this.manualColumnMovePlugin = void 0;\n    return _this;\n  }\n\n  /**\n   * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}\n   * hook and if it returns `true` than the {@link ManualColumnFreeze#enablePlugin} method is called.\n   *\n   * @returns {Boolean}\n   */\n\n\n  _createClass(ManualColumnFreeze, [{\n    key: 'isEnabled',\n    value: function isEnabled() {\n      return !!this.hot.getSettings().manualColumnFreeze;\n    }\n\n    /**\n     * Enables the plugin functionality for this Handsontable instance.\n     */\n\n  }, {\n    key: 'enablePlugin',\n    value: function enablePlugin() {\n      var _this2 = this;\n\n      if (this.enabled) {\n        return;\n      }\n\n      this.addHook('afterContextMenuDefaultOptions', function (options) {\n        return _this2.addContextMenuEntry(options);\n      });\n      this.addHook('afterInit', function () {\n        return _this2.onAfterInit();\n      });\n      this.addHook('beforeColumnMove', function (rows, target) {\n        return _this2.onBeforeColumnMove(rows, target);\n      });\n\n      _get(ManualColumnFreeze.prototype.__proto__ || Object.getPrototypeOf(ManualColumnFreeze.prototype), 'enablePlugin', this).call(this);\n    }\n\n    /**\n     * Disables the plugin functionality for this Handsontable instance.\n     */\n\n  }, {\n    key: 'disablePlugin',\n    value: function disablePlugin() {\n      var priv = privatePool.get(this);\n\n      priv.afterFirstUse = false;\n      priv.moveByFreeze = false;\n\n      _get(ManualColumnFreeze.prototype.__proto__ || Object.getPrototypeOf(ManualColumnFreeze.prototype), 'disablePlugin', this).call(this);\n    }\n\n    /**\n     * Updates the plugin state. This method is executed when {@link Core#updateSettings} is invoked.\n     */\n\n  }, {\n    key: 'updatePlugin',\n    value: function updatePlugin() {\n      this.disablePlugin();\n      this.enablePlugin();\n\n      _get(ManualColumnFreeze.prototype.__proto__ || Object.getPrototypeOf(ManualColumnFreeze.prototype), 'updatePlugin', this).call(this);\n    }\n\n    /**\n     * Freezes the given column (add it to fixed columns).\n     *\n     * @param {Number} column Visual column index.\n     */\n\n  }, {\n    key: 'freezeColumn',\n    value: function freezeColumn(column) {\n      var priv = privatePool.get(this);\n      var settings = this.hot.getSettings();\n\n      if (!priv.afterFirstUse) {\n        priv.afterFirstUse = true;\n      }\n\n      if (settings.fixedColumnsLeft === this.hot.countCols() || column <= settings.fixedColumnsLeft - 1) {\n        return; // already fixed\n      }\n\n      priv.moveByFreeze = true;\n\n      if (column !== this.getMovePlugin().columnsMapper.getValueByIndex(column)) {\n        this.frozenColumnsBasePositions[settings.fixedColumnsLeft] = column;\n      }\n\n      this.getMovePlugin().moveColumn(column, settings.fixedColumnsLeft);\n\n      settings.fixedColumnsLeft += 1;\n    }\n\n    /**\n     * Unfreezes the given column (remove it from fixed columns and bring to it's previous position).\n     *\n     * @param {Number} column Visual column index.\n     */\n\n  }, {\n    key: 'unfreezeColumn',\n    value: function unfreezeColumn(column) {\n      var priv = privatePool.get(this);\n      var settings = this.hot.getSettings();\n\n      if (!priv.afterFirstUse) {\n        priv.afterFirstUse = true;\n      }\n\n      if (settings.fixedColumnsLeft <= 0 || column > settings.fixedColumnsLeft - 1) {\n        return; // not fixed\n      }\n\n      var returnCol = this.getBestColumnReturnPosition(column);\n\n      priv.moveByFreeze = true;\n      settings.fixedColumnsLeft -= 1;\n\n      this.getMovePlugin().moveColumn(column, returnCol + 1);\n    }\n\n    /**\n     * Gets the reference to the ManualColumnMove plugin.\n     *\n     * @private\n     * @returns {Object}\n     */\n\n  }, {\n    key: 'getMovePlugin',\n    value: function getMovePlugin() {\n      if (!this.manualColumnMovePlugin) {\n        this.manualColumnMovePlugin = this.hot.getPlugin('manualColumnMove');\n      }\n\n      return this.manualColumnMovePlugin;\n    }\n\n    /**\n     * Estimates the most fitting return position for unfrozen column.\n     *\n     * @private\n     * @param {Number} column Visual column index.\n     */\n\n  }, {\n    key: 'getBestColumnReturnPosition',\n    value: function getBestColumnReturnPosition(column) {\n      var movePlugin = this.getMovePlugin();\n      var settings = this.hot.getSettings();\n      var i = settings.fixedColumnsLeft;\n      var j = movePlugin.columnsMapper.getValueByIndex(i);\n      var initialCol = void 0;\n\n      if (this.frozenColumnsBasePositions[column] === null || this.frozenColumnsBasePositions[column] === void 0) {\n        initialCol = movePlugin.columnsMapper.getValueByIndex(column);\n\n        while (j !== null && j <= initialCol) {\n          i += 1;\n          j = movePlugin.columnsMapper.getValueByIndex(i);\n        }\n      } else {\n        initialCol = this.frozenColumnsBasePositions[column];\n        this.frozenColumnsBasePositions[column] = void 0;\n\n        while (j !== null && j <= initialCol) {\n          i += 1;\n          j = movePlugin.columnsMapper.getValueByIndex(i);\n        }\n        i = j;\n      }\n\n      return i - 1;\n    }\n\n    /**\n     * Adds the manualColumnFreeze context menu entries.\n     *\n     * @private\n     * @param {Object} options Context menu options.\n     */\n\n  }, {\n    key: 'addContextMenuEntry',\n    value: function addContextMenuEntry(options) {\n      options.items.push({ name: '---------' }, (0, _freezeColumn2.default)(this), (0, _unfreezeColumn2.default)(this));\n    }\n\n    /**\n     * Enables `manualColumnMove` plugin on `afterInit` hook.\n     *\n     * @private\n     */\n\n  }, {\n    key: 'onAfterInit',\n    value: function onAfterInit() {\n      if (!this.getMovePlugin().isEnabled()) {\n        this.getMovePlugin().enablePlugin();\n      }\n    }\n\n    /**\n     * Prevents moving the rows from/to fixed area.\n     *\n     * @private\n     * @param {Array} rows\n     * @param {Number} target\n     */\n\n  }, {\n    key: 'onBeforeColumnMove',\n    value: function onBeforeColumnMove(rows, target) {\n      var priv = privatePool.get(this);\n\n      if (priv.afterFirstUse && !priv.moveByFreeze) {\n        var frozenLen = this.hot.getSettings().fixedColumnsLeft;\n        var disallowMoving = target < frozenLen;\n\n        if (!disallowMoving) {\n          (0, _array.arrayEach)(rows, function (value) {\n            if (value < frozenLen) {\n              disallowMoving = true;\n              return false;\n            }\n          });\n        }\n\n        if (disallowMoving) {\n          return false;\n        }\n      }\n\n      if (priv.moveByFreeze) {\n        priv.moveByFreeze = false;\n      }\n    }\n\n    /**\n     * Destroys the plugin instance.\n     */\n\n  }, {\n    key: 'destroy',\n    value: function destroy() {\n      _get(ManualColumnFreeze.prototype.__proto__ || Object.getPrototypeOf(ManualColumnFreeze.prototype), 'destroy', this).call(this);\n    }\n  }]);\n\n  return ManualColumnFreeze;\n}(_base2.default);\n\n(0, _plugins.registerPlugin)('manualColumnFreeze', ManualColumnFreeze);\n\nexports.default = ManualColumnFreeze;\n\n/***/ }),\n/* 335 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nexports.default = freezeColumnItem;\n\nvar _constants = __webpack_require__(7);\n\nvar C = _interopRequireWildcard(_constants);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction freezeColumnItem(manualColumnFreezePlugin) {\n  return {\n    key: 'freeze_column',\n    name: function name() {\n      return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_FREEZE_COLUMN);\n    },\n    callback: function callback(key, selected) {\n      var _selected = _slicedToArray(selected, 1),\n          selectedColumn = _selected[0].start.col;\n\n      manualColumnFreezePlugin.freezeColumn(selectedColumn);\n\n      this.render();\n      this.view.wt.wtOverlays.adjustElementsSize(true);\n    },\n    hidden: function hidden() {\n      var selection = this.getSelectedRange();\n      var hide = false;\n\n      if (selection === void 0) {\n        hide = true;\n      } else if (selection.length > 1) {\n        hide = true;\n      } else if (selection[0].from.col !== selection[0].to.col || selection[0].from.col <= this.getSettings().fixedColumnsLeft - 1) {\n        hide = true;\n      }\n\n      return hide;\n    }\n  };\n}\n\n/***/ }),\n/* 336 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nexports.default = unfreezeColumnItem;\n\nvar _constants = __webpack_require__(7);\n\nvar C = _interopRequireWildcard(_constants);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction unfreezeColumnItem(manualColumnFreezePlugin) {\n  return {\n    key: 'unfreeze_column',\n    name: function name() {\n      return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_UNFREEZE_COLUMN);\n    },\n    callback: function callback(key, selected) {\n      var _selected = _slicedToArray(selected, 1),\n          selectedColumn = _selected[0].start.col;\n\n      manualColumnFreezePlugin.unfreezeColumn(selectedColumn);\n\n      this.render();\n      this.view.wt.wtOverlays.adjustElementsSize(true);\n    },\n    hidden: function hidden() {\n      var selection = this.getSelectedRange();\n      var hide = false;\n\n      if (selection === void 0) {\n        hide = true;\n      } else if (selection.length > 1) {\n        hide = true;\n      } else if (selection[0].from.col !== selection[0].to.col || selection[0].from.col >= this.getSettings().fixedColumnsLeft) {\n        hide = true;\n      }\n\n      return hide;\n    }\n  };\n}\n\n/***/ }),\n/* 337 */\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n/* 338 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _base = __webpack_require__(10);\n\nvar _base2 = _interopRequireDefault(_base);\n\nvar _pluginHooks = __webpack_require__(16);\n\nvar _pluginHooks2 = _interopRequireDefault(_pluginHooks);\n\nvar _array = __webpack_require__(2);\n\nvar _element = __webpack_require__(0);\n\nvar _number = __webpack_require__(6);\n\nvar _eventManager = __webpack_require__(5);\n\nvar _eventManager2 = _interopRequireDefault(_eventManager);\n\nvar _plugins = __webpack_require__(8);\n\nvar _columnsMapper = __webpack_require__(339);\n\nvar _columnsMapper2 = _interopRequireDefault(_columnsMapper);\n\nvar _backlight = __webpack_require__(340);\n\nvar _backlight2 = _interopRequireDefault(_backlight);\n\nvar _guideline = __webpack_require__(341);\n\nvar _guideline2 = _interopRequireDefault(_guideline);\n\n__webpack_require__(342);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n_pluginHooks2.default.getSingleton().register('beforeColumnMove');\n_pluginHooks2.default.getSingleton().register('afterColumnMove');\n_pluginHooks2.default.getSingleton().register('unmodifyCol');\n\nvar privatePool = new WeakMap();\nvar CSS_PLUGIN = 'ht__manualColumnMove';\nvar CSS_SHOW_UI = 'show-ui';\nvar CSS_ON_MOVING = 'on-moving--columns';\nvar CSS_AFTER_SELECTION = 'after-selection--columns';\n\n/**\n * @plugin ManualColumnMove\n *\n * @description\n * This plugin allows to change columns order. To make columns order persistent the {@link Options#persistentState}\n * plugin should be enabled.\n *\n * API:\n * - moveColumn - move single column to the new position.\n * - moveColumns - move many columns (as an array of indexes) to the new position.\n *\n * If you want apply visual changes, you have to call manually the render() method on the instance of Handsontable.\n *\n * The plugin creates additional components to make moving possibly using user interface:\n * - backlight - highlight of selected columns.\n * - guideline - line which shows where rows has been moved.\n *\n * @class ManualColumnMove\n * @plugin ManualColumnMove\n */\n\nvar ManualColumnMove = function (_BasePlugin) {\n  _inherits(ManualColumnMove, _BasePlugin);\n\n  function ManualColumnMove(hotInstance) {\n    _classCallCheck(this, ManualColumnMove);\n\n    /**\n     * Set up WeakMap of plugin to sharing private parameters;\n     */\n    var _this = _possibleConstructorReturn(this, (ManualColumnMove.__proto__ || Object.getPrototypeOf(ManualColumnMove)).call(this, hotInstance));\n\n    privatePool.set(_this, {\n      columnsToMove: [],\n      countCols: 0,\n      fixedColumns: 0,\n      pressed: void 0,\n      disallowMoving: void 0,\n      target: {\n        eventPageX: void 0,\n        coords: void 0,\n        TD: void 0,\n        col: void 0\n      }\n    });\n\n    /**\n     * List of last removed row indexes.\n     *\n     * @private\n     * @type {Array}\n     */\n    _this.removedColumns = [];\n    /**\n     * Object containing visual row indexes mapped to data source indexes.\n     *\n     * @private\n     * @type {RowsMapper}\n     */\n    _this.columnsMapper = new _columnsMapper2.default(_this);\n    /**\n     * Event Manager object.\n     *\n     * @private\n     * @type {Object}\n     */\n    _this.eventManager = new _eventManager2.default(_this);\n    /**\n     * Backlight UI object.\n     *\n     * @private\n     * @type {Object}\n     */\n    _this.backlight = new _backlight2.default(hotInstance);\n    /**\n     * Guideline UI object.\n     *\n     * @private\n     * @type {Object}\n     */\n    _this.guideline = new _guideline2.default(hotInstance);\n    return _this;\n  }\n\n  /**\n   * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}\n   * hook and if it returns `true` than the {@link ManualColumnMove#enablePlugin} method is called.\n   *\n   * @returns {Boolean}\n   */\n\n\n  _createClass(ManualColumnMove, [{\n    key: 'isEnabled',\n    value: function isEnabled() {\n      return !!this.hot.getSettings().manualColumnMove;\n    }\n\n    /**\n     * Enables the plugin functionality for this Handsontable instance.\n     */\n\n  }, {\n    key: 'enablePlugin',\n    value: function enablePlugin() {\n      var _this2 = this;\n\n      if (this.enabled) {\n        return;\n      }\n\n      this.addHook('beforeOnCellMouseDown', function (event, coords, TD, blockCalculations) {\n        return _this2.onBeforeOnCellMouseDown(event, coords, TD, blockCalculations);\n      });\n      this.addHook('beforeOnCellMouseOver', function (event, coords, TD, blockCalculations) {\n        return _this2.onBeforeOnCellMouseOver(event, coords, TD, blockCalculations);\n      });\n      this.addHook('afterScrollVertically', function () {\n        return _this2.onAfterScrollVertically();\n      });\n      this.addHook('modifyCol', function (row, source) {\n        return _this2.onModifyCol(row, source);\n      });\n      this.addHook('beforeRemoveCol', function (index, amount) {\n        return _this2.onBeforeRemoveCol(index, amount);\n      });\n      this.addHook('afterRemoveCol', function () {\n        return _this2.onAfterRemoveCol();\n      });\n      this.addHook('afterCreateCol', function (index, amount) {\n        return _this2.onAfterCreateCol(index, amount);\n      });\n      this.addHook('afterLoadData', function () {\n        return _this2.onAfterLoadData();\n      });\n      this.addHook('unmodifyCol', function (column) {\n        return _this2.onUnmodifyCol(column);\n      });\n\n      this.registerEvents();\n\n      // TODO: move adding plugin classname to BasePlugin.\n      (0, _element.addClass)(this.hot.rootElement, CSS_PLUGIN);\n\n      _get(ManualColumnMove.prototype.__proto__ || Object.getPrototypeOf(ManualColumnMove.prototype), 'enablePlugin', this).call(this);\n    }\n\n    /**\n     * Updates the plugin state. This method is executed when {@link Core#updateSettings} is invoked.\n     */\n\n  }, {\n    key: 'updatePlugin',\n    value: function updatePlugin() {\n      this.disablePlugin();\n      this.enablePlugin();\n\n      this.onAfterPluginsInitialized();\n\n      _get(ManualColumnMove.prototype.__proto__ || Object.getPrototypeOf(ManualColumnMove.prototype), 'updatePlugin', this).call(this);\n    }\n\n    /**\n     * Disables the plugin functionality for this Handsontable instance.\n     */\n\n  }, {\n    key: 'disablePlugin',\n    value: function disablePlugin() {\n      var pluginSettings = this.hot.getSettings().manualColumnMove;\n\n      if (Array.isArray(pluginSettings)) {\n        this.columnsMapper.clearMap();\n      }\n\n      (0, _element.removeClass)(this.hot.rootElement, CSS_PLUGIN);\n\n      this.unregisterEvents();\n      this.backlight.destroy();\n      this.guideline.destroy();\n\n      _get(ManualColumnMove.prototype.__proto__ || Object.getPrototypeOf(ManualColumnMove.prototype), 'disablePlugin', this).call(this);\n    }\n\n    /**\n     * Moves a single column.\n     *\n     * @param {Number} column Visual column index to be moved.\n     * @param {Number} target Visual column index being a target for the moved column.\n     * @fires Hooks#beforeColumnMove\n     * @fires Hooks#afterColumnMove\n     */\n\n  }, {\n    key: 'moveColumn',\n    value: function moveColumn(column, target) {\n      this.moveColumns([column], target);\n    }\n\n    /**\n     * Moves a multiple columns.\n     *\n     * @param {Array} columns Array of visual column indexes to be moved.\n     * @param {Number} target Visual column index being a target for the moved columns.\n     * @fires Hooks#beforeColumnMove\n     * @fires Hooks#afterColumnMove\n     */\n\n  }, {\n    key: 'moveColumns',\n    value: function moveColumns(columns, target) {\n      var _this3 = this;\n\n      var visualColumns = [].concat(_toConsumableArray(columns));\n      var priv = privatePool.get(this);\n      var beforeColumnHook = this.hot.runHooks('beforeColumnMove', visualColumns, target);\n\n      priv.disallowMoving = !beforeColumnHook;\n\n      if (beforeColumnHook !== false) {\n        // first we need to rewrite an visual indexes to physical for save reference after move\n        (0, _array.arrayEach)(columns, function (column, index, array) {\n          array[index] = _this3.columnsMapper.getValueByIndex(column);\n        });\n\n        // next, when we have got an physical indexes, we can move columns\n        (0, _array.arrayEach)(columns, function (column, index) {\n          var actualPosition = _this3.columnsMapper.getIndexByValue(column);\n\n          if (actualPosition !== target) {\n            _this3.columnsMapper.moveColumn(actualPosition, target + index);\n          }\n        });\n\n        // after moving we have to clear columnsMapper from null entries\n        this.columnsMapper.clearNull();\n      }\n\n      this.hot.runHooks('afterColumnMove', visualColumns, target);\n    }\n\n    /**\n     * Correct the cell selection after the move action. Fired only when action was made with a mouse.\n     * That means that changing the column order using the API won't correct the selection.\n     *\n     * @private\n     * @param {Number} startColumn Visual column index for the start of the selection.\n     * @param {Number} endColumn Visual column index for the end of the selection.\n     */\n\n  }, {\n    key: 'changeSelection',\n    value: function changeSelection(startColumn, endColumn) {\n      this.hot.selectColumns(startColumn, endColumn);\n    }\n\n    /**\n     * Gets the sum of the widths of columns in the provided range.\n     *\n     * @private\n     * @param {Number} from Visual column index.\n     * @param {Number} to Visual column index.\n     * @returns {Number}\n     */\n\n  }, {\n    key: 'getColumnsWidth',\n    value: function getColumnsWidth(from, to) {\n      var width = 0;\n\n      for (var i = from; i < to; i++) {\n        var columnWidth = 0;\n\n        if (i < 0) {\n          columnWidth = this.hot.view.wt.wtViewport.getRowHeaderWidth() || 0;\n        } else {\n          columnWidth = this.hot.view.wt.wtTable.getStretchedColumnWidth(i) || 0;\n        }\n\n        width += columnWidth;\n      }\n\n      return width;\n    }\n\n    /**\n     * Loads initial settings when persistent state is saved or when plugin was initialized as an array.\n     *\n     * @private\n     */\n\n  }, {\n    key: 'initialSettings',\n    value: function initialSettings() {\n      var pluginSettings = this.hot.getSettings().manualColumnMove;\n\n      if (Array.isArray(pluginSettings)) {\n        this.moveColumns(pluginSettings, 0);\n      } else if (pluginSettings !== void 0) {\n        this.persistentStateLoad();\n      }\n    }\n\n    /**\n     * Checks if the provided column is in the fixedColumnsLeft section.\n     *\n     * @private\n     * @param {Number} column Visual column index to check.\n     * @returns {Boolean}\n     */\n\n  }, {\n    key: 'isFixedColumnsLeft',\n    value: function isFixedColumnsLeft(column) {\n      return column < this.hot.getSettings().fixedColumnsLeft;\n    }\n\n    /**\n     * Saves the manual column positions to the persistent state (the {@link Options#persistentState} option has to be enabled).\n     */\n\n  }, {\n    key: 'persistentStateSave',\n    value: function persistentStateSave() {\n      this.hot.runHooks('persistentStateSave', 'manualColumnMove', this.columnsMapper._arrayMap);\n    }\n\n    /**\n     * Loads the manual column positions from the persistent state (the {@link Options#persistentState} option has to be enabled).\n     */\n\n  }, {\n    key: 'persistentStateLoad',\n    value: function persistentStateLoad() {\n      var storedState = {};\n\n      this.hot.runHooks('persistentStateLoad', 'manualColumnMove', storedState);\n\n      if (storedState.value) {\n        this.columnsMapper._arrayMap = storedState.value;\n      }\n    }\n\n    /**\n     * Prepares an array of indexes based on actual selection.\n     *\n     * @private\n     * @returns {Array}\n     */\n\n  }, {\n    key: 'prepareColumnsToMoving',\n    value: function prepareColumnsToMoving(start, end) {\n      var selectedColumns = [];\n\n      (0, _number.rangeEach)(start, end, function (i) {\n        selectedColumns.push(i);\n      });\n\n      return selectedColumns;\n    }\n\n    /**\n     * Updates the UI visual position.\n     *\n     * @private\n     */\n\n  }, {\n    key: 'refreshPositions',\n    value: function refreshPositions() {\n      var priv = privatePool.get(this);\n      var firstVisible = this.hot.view.wt.wtTable.getFirstVisibleColumn();\n      var lastVisible = this.hot.view.wt.wtTable.getLastVisibleColumn();\n      var wtTable = this.hot.view.wt.wtTable;\n      var scrollableElement = this.hot.view.wt.wtOverlays.scrollableElement;\n      var scrollLeft = typeof scrollableElement.scrollX === 'number' ? scrollableElement.scrollX : scrollableElement.scrollLeft;\n      var tdOffsetLeft = this.hot.view.THEAD.offsetLeft + this.getColumnsWidth(0, priv.coordsColumn);\n      var mouseOffsetLeft = priv.target.eventPageX - (priv.rootElementOffset - (scrollableElement.scrollX === void 0 ? scrollLeft : 0));\n      var hiderWidth = wtTable.hider.offsetWidth;\n      var tbodyOffsetLeft = wtTable.TBODY.offsetLeft;\n      var backlightElemMarginLeft = this.backlight.getOffset().left;\n      var backlightElemWidth = this.backlight.getSize().width;\n      var rowHeaderWidth = 0;\n\n      if (priv.rootElementOffset + wtTable.holder.offsetWidth + scrollLeft < priv.target.eventPageX) {\n        if (priv.coordsColumn < priv.countCols) {\n          priv.coordsColumn += 1;\n        }\n      }\n\n      if (priv.hasRowHeaders) {\n        rowHeaderWidth = this.hot.view.wt.wtOverlays.leftOverlay.clone.wtTable.getColumnHeader(-1).offsetWidth;\n      }\n      if (this.isFixedColumnsLeft(priv.coordsColumn)) {\n        tdOffsetLeft += scrollLeft;\n      }\n      tdOffsetLeft += rowHeaderWidth;\n\n      if (priv.coordsColumn < 0) {\n        // if hover on rowHeader\n        if (priv.fixedColumns > 0) {\n          priv.target.col = 0;\n        } else {\n          priv.target.col = firstVisible > 0 ? firstVisible - 1 : firstVisible;\n        }\n      } else if (priv.target.TD.offsetWidth / 2 + tdOffsetLeft <= mouseOffsetLeft) {\n        var newCoordsCol = priv.coordsColumn >= priv.countCols ? priv.countCols - 1 : priv.coordsColumn;\n        // if hover on right part of TD\n        priv.target.col = newCoordsCol + 1;\n        // unfortunately first column is bigger than rest\n        tdOffsetLeft += priv.target.TD.offsetWidth;\n\n        if (priv.target.col > lastVisible && lastVisible < priv.countCols) {\n          this.hot.scrollViewportTo(void 0, lastVisible + 1, void 0, true);\n        }\n      } else {\n        // elsewhere on table\n        priv.target.col = priv.coordsColumn;\n\n        if (priv.target.col <= firstVisible && priv.target.col >= priv.fixedColumns && firstVisible > 0) {\n          this.hot.scrollViewportTo(void 0, firstVisible - 1);\n        }\n      }\n\n      if (priv.target.col <= firstVisible && priv.target.col >= priv.fixedColumns && firstVisible > 0) {\n        this.hot.scrollViewportTo(void 0, firstVisible - 1);\n      }\n\n      var backlightLeft = mouseOffsetLeft;\n      var guidelineLeft = tdOffsetLeft;\n\n      if (mouseOffsetLeft + backlightElemWidth + backlightElemMarginLeft >= hiderWidth) {\n        // prevent display backlight on the right side of the table\n        backlightLeft = hiderWidth - backlightElemWidth - backlightElemMarginLeft;\n      } else if (mouseOffsetLeft + backlightElemMarginLeft < tbodyOffsetLeft + rowHeaderWidth) {\n        // prevent display backlight on the left side of the table\n        backlightLeft = tbodyOffsetLeft + rowHeaderWidth + Math.abs(backlightElemMarginLeft);\n      }\n\n      if (tdOffsetLeft >= hiderWidth - 1) {\n        // prevent display guideline outside the table\n        guidelineLeft = hiderWidth - 1;\n      } else if (guidelineLeft === 0) {\n        // guideline has got `margin-left: -1px` as default\n        guidelineLeft = 1;\n      } else if (scrollableElement.scrollX !== void 0 && priv.coordsColumn < priv.fixedColumns) {\n        guidelineLeft -= priv.rootElementOffset <= scrollableElement.scrollX ? priv.rootElementOffset : 0;\n      }\n\n      this.backlight.setPosition(null, backlightLeft);\n      this.guideline.setPosition(null, guidelineLeft);\n    }\n\n    /**\n     * This method checks arrayMap from columnsMapper and updates the columnsMapper if it's necessary.\n     *\n     * @private\n     */\n\n  }, {\n    key: 'updateColumnsMapper',\n    value: function updateColumnsMapper() {\n      var countCols = this.hot.countSourceCols();\n      var columnsMapperLen = this.columnsMapper._arrayMap.length;\n\n      if (columnsMapperLen === 0) {\n        this.columnsMapper.createMap(countCols || this.hot.getSettings().startCols);\n      } else if (columnsMapperLen < countCols) {\n        var diff = countCols - columnsMapperLen;\n\n        this.columnsMapper.insertItems(columnsMapperLen, diff);\n      } else if (columnsMapperLen > countCols) {\n        var maxIndex = countCols - 1;\n        var columnsToRemove = [];\n\n        (0, _array.arrayEach)(this.columnsMapper._arrayMap, function (value, index) {\n          if (value > maxIndex) {\n            columnsToRemove.push(index);\n          }\n        });\n\n        this.columnsMapper.removeItems(columnsToRemove);\n      }\n    }\n\n    /**\n     * Binds the events used by the plugin.\n     *\n     * @private\n     */\n\n  }, {\n    key: 'registerEvents',\n    value: function registerEvents() {\n      var _this4 = this;\n\n      this.eventManager.addEventListener(document.documentElement, 'mousemove', function (event) {\n        return _this4.onMouseMove(event);\n      });\n      this.eventManager.addEventListener(document.documentElement, 'mouseup', function () {\n        return _this4.onMouseUp();\n      });\n    }\n\n    /**\n     * Unbinds the events used by the plugin.\n     *\n     * @private\n     */\n\n  }, {\n    key: 'unregisterEvents',\n    value: function unregisterEvents() {\n      this.eventManager.clear();\n    }\n\n    /**\n     * Changes the behavior of selection / dragging.\n     *\n     * @private\n     * @param {MouseEvent} event `mousedown` event properties.\n     * @param {CellCoords} coords Visual cell coordinates where was fired event.\n     * @param {HTMLElement} TD Cell represented as HTMLElement.\n     * @param {Object} blockCalculations Object which contains information about blockCalculation for row, column or cells.\n     */\n\n  }, {\n    key: 'onBeforeOnCellMouseDown',\n    value: function onBeforeOnCellMouseDown(event, coords, TD, blockCalculations) {\n      var wtTable = this.hot.view.wt.wtTable;\n      var isHeaderSelection = this.hot.selection.isSelectedByColumnHeader();\n      var selection = this.hot.getSelectedRangeLast();\n      var priv = privatePool.get(this);\n      var isSortingElement = event.realTarget.className.indexOf('columnSorting') > -1;\n\n      if (!selection || !isHeaderSelection || priv.pressed || event.button !== 0 || isSortingElement) {\n        priv.pressed = false;\n        priv.columnsToMove.length = 0;\n        (0, _element.removeClass)(this.hot.rootElement, [CSS_ON_MOVING, CSS_SHOW_UI]);\n        return;\n      }\n\n      var guidelineIsNotReady = this.guideline.isBuilt() && !this.guideline.isAppended();\n      var backlightIsNotReady = this.backlight.isBuilt() && !this.backlight.isAppended();\n\n      if (guidelineIsNotReady && backlightIsNotReady) {\n        this.guideline.appendTo(wtTable.hider);\n        this.backlight.appendTo(wtTable.hider);\n      }\n\n      var from = selection.from,\n          to = selection.to;\n\n      var start = Math.min(from.col, to.col);\n      var end = Math.max(from.col, to.col);\n\n      if (coords.row < 0 && coords.col >= start && coords.col <= end) {\n        blockCalculations.column = true;\n        priv.pressed = true;\n        priv.target.eventPageX = event.pageX;\n        priv.coordsColumn = coords.col;\n        priv.target.TD = TD;\n        priv.target.col = coords.col;\n        priv.columnsToMove = this.prepareColumnsToMoving(start, end);\n        priv.hasRowHeaders = !!this.hot.getSettings().rowHeaders;\n        priv.countCols = this.hot.countCols();\n        priv.fixedColumns = this.hot.getSettings().fixedColumnsLeft;\n        priv.rootElementOffset = (0, _element.offset)(this.hot.rootElement).left;\n\n        var countColumnsFrom = priv.hasRowHeaders ? -1 : 0;\n        var topPos = wtTable.holder.scrollTop + wtTable.getColumnHeaderHeight(0) + 1;\n        var fixedColumns = coords.col < priv.fixedColumns;\n        var scrollableElement = this.hot.view.wt.wtOverlays.scrollableElement;\n        var wrapperIsWindow = scrollableElement.scrollX ? scrollableElement.scrollX - priv.rootElementOffset : 0;\n\n        var mouseOffset = event.layerX - (fixedColumns ? wrapperIsWindow : 0);\n        var leftOffset = Math.abs(this.getColumnsWidth(start, coords.col) + mouseOffset);\n\n        this.backlight.setPosition(topPos, this.getColumnsWidth(countColumnsFrom, start) + leftOffset);\n        this.backlight.setSize(this.getColumnsWidth(start, end + 1), wtTable.hider.offsetHeight - topPos);\n        this.backlight.setOffset(null, leftOffset * -1);\n\n        (0, _element.addClass)(this.hot.rootElement, CSS_ON_MOVING);\n      } else {\n        (0, _element.removeClass)(this.hot.rootElement, CSS_AFTER_SELECTION);\n        priv.pressed = false;\n        priv.columnsToMove.length = 0;\n      }\n    }\n\n    /**\n     * 'mouseMove' event callback. Fired when pointer move on document.documentElement.\n     *\n     * @private\n     * @param {MouseEvent} event `mousemove` event properties.\n     */\n\n  }, {\n    key: 'onMouseMove',\n    value: function onMouseMove(event) {\n      var priv = privatePool.get(this);\n\n      if (!priv.pressed) {\n        return;\n      }\n\n      // callback for browser which doesn't supports CSS pointer-event: none\n      if (event.realTarget === this.backlight.element) {\n        var width = this.backlight.getSize().width;\n        this.backlight.setSize(0);\n\n        setTimeout(function () {\n          this.backlight.setPosition(width);\n        });\n      }\n\n      priv.target.eventPageX = event.pageX;\n      this.refreshPositions();\n    }\n\n    /**\n     * 'beforeOnCellMouseOver' hook callback. Fired when pointer was over cell.\n     *\n     * @private\n     * @param {MouseEvent} event `mouseover` event properties.\n     * @param {CellCoords} coords Visual cell coordinates where was fired event.\n     * @param {HTMLElement} TD Cell represented as HTMLElement.\n     * @param {Object} blockCalculations Object which contains information about blockCalculation for row, column or cells.\n     */\n\n  }, {\n    key: 'onBeforeOnCellMouseOver',\n    value: function onBeforeOnCellMouseOver(event, coords, TD, blockCalculations) {\n      var selectedRange = this.hot.getSelectedRangeLast();\n      var priv = privatePool.get(this);\n\n      if (!selectedRange || !priv.pressed) {\n        return;\n      }\n\n      if (priv.columnsToMove.indexOf(coords.col) > -1) {\n        (0, _element.removeClass)(this.hot.rootElement, CSS_SHOW_UI);\n      } else {\n        (0, _element.addClass)(this.hot.rootElement, CSS_SHOW_UI);\n      }\n\n      blockCalculations.row = true;\n      blockCalculations.column = true;\n      blockCalculations.cell = true;\n      priv.coordsColumn = coords.col;\n      priv.target.TD = TD;\n    }\n\n    /**\n     * `onMouseUp` hook callback.\n     *\n     * @private\n     */\n\n  }, {\n    key: 'onMouseUp',\n    value: function onMouseUp() {\n      var priv = privatePool.get(this);\n\n      priv.coordsColumn = void 0;\n      priv.pressed = false;\n      priv.backlightWidth = 0;\n\n      (0, _element.removeClass)(this.hot.rootElement, [CSS_ON_MOVING, CSS_SHOW_UI, CSS_AFTER_SELECTION]);\n\n      if (this.hot.selection.isSelectedByColumnHeader()) {\n        (0, _element.addClass)(this.hot.rootElement, CSS_AFTER_SELECTION);\n      }\n      if (priv.columnsToMove.length < 1 || priv.target.col === void 0 || priv.columnsToMove.indexOf(priv.target.col) > -1) {\n        return;\n      }\n\n      this.moveColumns(priv.columnsToMove, priv.target.col);\n      this.persistentStateSave();\n      this.hot.render();\n      this.hot.view.wt.wtOverlays.adjustElementsSize(true);\n\n      if (!priv.disallowMoving) {\n        var selectionStart = this.columnsMapper.getIndexByValue(priv.columnsToMove[0]);\n        var selectionEnd = this.columnsMapper.getIndexByValue(priv.columnsToMove[priv.columnsToMove.length - 1]);\n        this.changeSelection(selectionStart, selectionEnd);\n      }\n\n      priv.columnsToMove.length = 0;\n    }\n\n    /**\n     * `afterScrollHorizontally` hook callback. Fired the table was scrolled horizontally.\n     *\n     * @private\n     */\n\n  }, {\n    key: 'onAfterScrollVertically',\n    value: function onAfterScrollVertically() {\n      var wtTable = this.hot.view.wt.wtTable;\n      var headerHeight = wtTable.getColumnHeaderHeight(0) + 1;\n      var scrollTop = wtTable.holder.scrollTop;\n      var posTop = headerHeight + scrollTop;\n\n      this.backlight.setPosition(posTop);\n      this.backlight.setSize(null, wtTable.hider.offsetHeight - posTop);\n    }\n\n    /**\n     * `afterCreateCol` hook callback.\n     *\n     * @private\n     * @param {Number} index Visual index of the created column.\n     * @param {Number} amount Amount of created columns.\n     */\n\n  }, {\n    key: 'onAfterCreateCol',\n    value: function onAfterCreateCol(index, amount) {\n      this.columnsMapper.shiftItems(index, amount);\n    }\n\n    /**\n     * On before remove column listener.\n     *\n     * @private\n     * @param {Number} index Visual column index.\n     * @param {Number} amount Defines how many columns removed.\n     */\n\n  }, {\n    key: 'onBeforeRemoveCol',\n    value: function onBeforeRemoveCol(index, amount) {\n      var _this5 = this;\n\n      this.removedColumns.length = 0;\n\n      if (index !== false) {\n        // Collect physical row index.\n        (0, _number.rangeEach)(index, index + amount - 1, function (removedIndex) {\n          _this5.removedColumns.push(_this5.hot.runHooks('modifyCol', removedIndex, _this5.pluginName));\n        });\n      }\n    }\n\n    /**\n     * `afterRemoveCol` hook callback.\n     *\n     * @private\n     */\n\n  }, {\n    key: 'onAfterRemoveCol',\n    value: function onAfterRemoveCol() {\n      this.columnsMapper.unshiftItems(this.removedColumns);\n    }\n\n    /**\n     * `afterLoadData` hook callback.\n     *\n     * @private\n     */\n\n  }, {\n    key: 'onAfterLoadData',\n    value: function onAfterLoadData() {\n      this.updateColumnsMapper();\n    }\n\n    /**\n     * 'modifyRow' hook callback.\n     *\n     * @private\n     * @param {Number} column Visual column index.\n     * @returns {Number} Physical column index.\n     */\n\n  }, {\n    key: 'onModifyCol',\n    value: function onModifyCol(column, source) {\n      var physicalColumn = column;\n\n      if (source !== this.pluginName) {\n        // ugly fix for try to insert new, needed columns after pasting data\n        var columnInMapper = this.columnsMapper.getValueByIndex(physicalColumn);\n        physicalColumn = columnInMapper === null ? physicalColumn : columnInMapper;\n      }\n\n      return physicalColumn;\n    }\n\n    /**\n     * 'unmodifyCol' hook callback.\n     *\n     * @private\n     * @param {Number} column Physical column index.\n     * @returns {Number} Visual column index.\n     */\n\n  }, {\n    key: 'onUnmodifyCol',\n    value: function onUnmodifyCol(column) {\n      var indexInMapper = this.columnsMapper.getIndexByValue(column);\n\n      return indexInMapper === null ? column : indexInMapper;\n    }\n\n    /**\n     * `afterPluginsInitialized` hook callback.\n     *\n     * @private\n     */\n\n  }, {\n    key: 'onAfterPluginsInitialized',\n    value: function onAfterPluginsInitialized() {\n      this.updateColumnsMapper();\n      this.initialSettings();\n      this.backlight.build();\n      this.guideline.build();\n    }\n\n    /**\n     * Destroys the plugin instance.\n     */\n\n  }, {\n    key: 'destroy',\n    value: function destroy() {\n      this.backlight.destroy();\n      this.guideline.destroy();\n\n      _get(ManualColumnMove.prototype.__proto__ || Object.getPrototypeOf(ManualColumnMove.prototype), 'destroy', this).call(this);\n    }\n  }]);\n\n  return ManualColumnMove;\n}(_base2.default);\n\n(0, _plugins.registerPlugin)('ManualColumnMove', ManualColumnMove);\n\nexports.default = ManualColumnMove;\n\n/***/ }),\n/* 339 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _arrayMapper = __webpack_require__(94);\n\nvar _arrayMapper2 = _interopRequireDefault(_arrayMapper);\n\nvar _array = __webpack_require__(2);\n\nvar _object = __webpack_require__(1);\n\nvar _number = __webpack_require__(6);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * @class ColumnsMapper\n * @plugin ManualColumnMove\n */\nvar ColumnsMapper = function () {\n  function ColumnsMapper(manualColumnMove) {\n    _classCallCheck(this, ColumnsMapper);\n\n    /**\n     * Instance of ManualColumnMove plugin.\n     *\n     * @type {ManualColumnMove}\n     */\n    this.manualColumnMove = manualColumnMove;\n  }\n\n  /**\n   * Reset current map array and create new one.\n   *\n   * @param {Number} [length] Custom generated map length.\n   */\n\n\n  _createClass(ColumnsMapper, [{\n    key: 'createMap',\n    value: function createMap(length) {\n      var _this = this;\n\n      var originLength = length === void 0 ? this._arrayMap.length : length;\n\n      this._arrayMap.length = 0;\n\n      (0, _number.rangeEach)(originLength - 1, function (itemIndex) {\n        _this._arrayMap[itemIndex] = itemIndex;\n      });\n    }\n\n    /**\n     * Destroy class.\n     */\n\n  }, {\n    key: 'destroy',\n    value: function destroy() {\n      this._arrayMap = null;\n    }\n\n    /**\n     * Moving elements in columnsMapper.\n     *\n     * @param {Number} from Column index to move.\n     * @param {Number} to Target index.\n     */\n\n  }, {\n    key: 'moveColumn',\n    value: function moveColumn(from, to) {\n      var indexToMove = this._arrayMap[from];\n      this._arrayMap[from] = null;\n      this._arrayMap.splice(to, 0, indexToMove);\n    }\n\n    /**\n     * Clearing arrayMap from `null` entries.\n     */\n\n  }, {\n    key: 'clearNull',\n    value: function clearNull() {\n      this._arrayMap = (0, _array.arrayFilter)(this._arrayMap, function (i) {\n        return i !== null;\n      });\n    }\n  }]);\n\n  return ColumnsMapper;\n}();\n\n(0, _object.mixin)(ColumnsMapper, _arrayMapper2.default);\n\nexports.default = ColumnsMapper;\n\n/***/ }),\n/* 340 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _base = __webpack_require__(204);\n\nvar _base2 = _interopRequireDefault(_base);\n\nvar _element = __webpack_require__(0);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar CSS_CLASSNAME = 'ht__manualColumnMove--backlight';\n\n/**\n * @class BacklightUI\n * @util\n */\n\nvar BacklightUI = function (_BaseUI) {\n  _inherits(BacklightUI, _BaseUI);\n\n  function BacklightUI() {\n    _classCallCheck(this, BacklightUI);\n\n    return _possibleConstructorReturn(this, (BacklightUI.__proto__ || Object.getPrototypeOf(BacklightUI)).apply(this, arguments));\n  }\n\n  _createClass(BacklightUI, [{\n    key: 'build',\n\n    /**\n     * Custom className on build process.\n     */\n    value: function build() {\n      _get(BacklightUI.prototype.__proto__ || Object.getPrototypeOf(BacklightUI.prototype), 'build', this).call(this);\n\n      (0, _element.addClass)(this._element, CSS_CLASSNAME);\n    }\n  }]);\n\n  return BacklightUI;\n}(_base2.default);\n\nexports.default = BacklightUI;\n\n/***/ }),\n/* 341 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _base = __webpack_require__(204);\n\nvar _base2 = _interopRequireDefault(_base);\n\nvar _element = __webpack_require__(0);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar CSS_CLASSNAME = 'ht__manualColumnMove--guideline';\n\n/**\n * @class GuidelineUI\n * @util\n */\n\nvar GuidelineUI = function (_BaseUI) {\n  _inherits(GuidelineUI, _BaseUI);\n\n  function GuidelineUI() {\n    _classCallCheck(this, GuidelineUI);\n\n    return _possibleConstructorReturn(this, (GuidelineUI.__proto__ || Object.getPrototypeOf(GuidelineUI)).apply(this, arguments));\n  }\n\n  _createClass(GuidelineUI, [{\n    key: 'build',\n\n    /**\n     * Custom className on build process.\n     */\n    value: function build() {\n      _get(GuidelineUI.prototype.__proto__ || Object.getPrototypeOf(GuidelineUI.prototype), 'build', this).call(this);\n\n      (0, _element.addClass)(this._element, CSS_CLASSNAME);\n    }\n  }]);\n\n  return GuidelineUI;\n}(_base2.default);\n\nexports.default = GuidelineUI;\n\n/***/ }),\n/* 342 */\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n/* 343 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _base = __webpack_require__(10);\n\nvar _base2 = _interopRequireDefault(_base);\n\nvar _element = __webpack_require__(0);\n\nvar _eventManager = __webpack_require__(5);\n\nvar _eventManager2 = _interopRequireDefault(_eventManager);\n\nvar _event = __webpack_require__(13);\n\nvar _array = __webpack_require__(2);\n\nvar _number = __webpack_require__(6);\n\nvar _plugins = __webpack_require__(8);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n// Developer note! Whenever you make a change in this file, make an analogous change in manualRowResize.js\n\n/**\n * @description\n * This plugin allows to change columns width. To make columns width persistent the {@link Options#persistentState}\n * plugin should be enabled.\n *\n * The plugin creates additional components to make resizing possibly using user interface:\n * - handle - the draggable element that sets the desired width of the column.\n * - guide - the helper guide that shows the desired width as a vertical guide.\n *\n * @plugin ManualColumnResize\n */\nvar ManualColumnResize = function (_BasePlugin) {\n  _inherits(ManualColumnResize, _BasePlugin);\n\n  function ManualColumnResize(hotInstance) {\n    _classCallCheck(this, ManualColumnResize);\n\n    var _this = _possibleConstructorReturn(this, (ManualColumnResize.__proto__ || Object.getPrototypeOf(ManualColumnResize)).call(this, hotInstance));\n\n    _this.currentTH = null;\n    _this.currentCol = null;\n    _this.selectedCols = [];\n    _this.currentWidth = null;\n    _this.newSize = null;\n    _this.startY = null;\n    _this.startWidth = null;\n    _this.startOffset = null;\n    _this.handle = document.createElement('DIV');\n    _this.guide = document.createElement('DIV');\n    _this.eventManager = new _eventManager2.default(_this);\n    _this.pressed = null;\n    _this.dblclick = 0;\n    _this.autoresizeTimeout = null;\n    _this.manualColumnWidths = [];\n\n    (0, _element.addClass)(_this.handle, 'manualColumnResizer');\n    (0, _element.addClass)(_this.guide, 'manualColumnResizerGuide');\n    return _this;\n  }\n\n  /**\n   * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}\n   * hook and if it returns `true` than the {@link ManualColumnResize#enablePlugin} method is called.\n   *\n   * @returns {Boolean}\n   */\n\n\n  _createClass(ManualColumnResize, [{\n    key: 'isEnabled',\n    value: function isEnabled() {\n      return this.hot.getSettings().manualColumnResize;\n    }\n\n    /**\n     * Enables the plugin functionality for this Handsontable instance.\n     */\n\n  }, {\n    key: 'enablePlugin',\n    value: function enablePlugin() {\n      var _this2 = this;\n\n      if (this.enabled) {\n        return;\n      }\n\n      this.manualColumnWidths = [];\n      var initialColumnWidth = this.hot.getSettings().manualColumnResize;\n      var loadedManualColumnWidths = this.loadManualColumnWidths();\n\n      this.addHook('modifyColWidth', function (width, col) {\n        return _this2.onModifyColWidth(width, col);\n      });\n      this.addHook('beforeStretchingColumnWidth', function (stretchedWidth, column) {\n        return _this2.onBeforeStretchingColumnWidth(stretchedWidth, column);\n      });\n      this.addHook('beforeColumnResize', function (currentColumn, newSize, isDoubleClick) {\n        return _this2.onBeforeColumnResize(currentColumn, newSize, isDoubleClick);\n      });\n\n      if (typeof loadedManualColumnWidths !== 'undefined') {\n        this.manualColumnWidths = loadedManualColumnWidths;\n      } else if (Array.isArray(initialColumnWidth)) {\n        this.manualColumnWidths = initialColumnWidth;\n      } else {\n        this.manualColumnWidths = [];\n      }\n\n      // Handsontable.hooks.register('beforeColumnResize');\n      // Handsontable.hooks.register('afterColumnResize');\n\n      this.bindEvents();\n\n      _get(ManualColumnResize.prototype.__proto__ || Object.getPrototypeOf(ManualColumnResize.prototype), 'enablePlugin', this).call(this);\n    }\n\n    /**\n     * Updates the plugin state. This method is executed when {@link Core#updateSettings} is invoked.\n     */\n\n  }, {\n    key: 'updatePlugin',\n    value: function updatePlugin() {\n      var initialColumnWidth = this.hot.getSettings().manualColumnResize;\n\n      if (Array.isArray(initialColumnWidth)) {\n        this.manualColumnWidths = initialColumnWidth;\n      } else if (!initialColumnWidth) {\n        this.manualColumnWidths = [];\n      }\n    }\n\n    /**\n     * Disables the plugin functionality for this Handsontable instance.\n     */\n\n  }, {\n    key: 'disablePlugin',\n    value: function disablePlugin() {\n      _get(ManualColumnResize.prototype.__proto__ || Object.getPrototypeOf(ManualColumnResize.prototype), 'disablePlugin', this).call(this);\n    }\n\n    /**\n     * Saves the current sizes using the persistentState plugin (the {@link Options#persistentState} option has to be enabled).\n     */\n\n  }, {\n    key: 'saveManualColumnWidths',\n    value: function saveManualColumnWidths() {\n      this.hot.runHooks('persistentStateSave', 'manualColumnWidths', this.manualColumnWidths);\n    }\n\n    /**\n     * Loads the previously saved sizes using the persistentState plugin (the {@link Options#persistentState} option has to be enabled).\n     *\n     * @returns {Array}\n     *\n     * @fires Hooks#persistentStateLoad\n     * @fires Hooks#manualColumnWidths\n     */\n\n  }, {\n    key: 'loadManualColumnWidths',\n    value: function loadManualColumnWidths() {\n      var storedState = {};\n\n      this.hot.runHooks('persistentStateLoad', 'manualColumnWidths', storedState);\n\n      return storedState.value;\n    }\n\n    /**\n     * Set the resize handle position.\n     *\n     * @private\n     * @param {HTMLCellElement} TH TH HTML element.\n     */\n\n  }, {\n    key: 'setupHandlePosition',\n    value: function setupHandlePosition(TH) {\n      var _this3 = this;\n\n      if (!TH.parentNode) {\n        return false;\n      }\n\n      this.currentTH = TH;\n\n      var col = this.hot.view.wt.wtTable.getCoords(TH).col; // getCoords returns CellCoords\n      var headerHeight = (0, _element.outerHeight)(this.currentTH);\n\n      if (col >= 0) {\n        // if not col header\n        var box = this.currentTH.getBoundingClientRect();\n\n        this.currentCol = col;\n        this.selectedCols = [];\n\n        if (this.hot.selection.isSelected() && this.hot.selection.isSelectedByColumnHeader()) {\n          var _hot$getSelectedRange = this.hot.getSelectedRangeLast(),\n              from = _hot$getSelectedRange.from,\n              to = _hot$getSelectedRange.to;\n\n          var start = from.col;\n          var end = to.col;\n\n          if (start >= end) {\n            start = to.col;\n            end = from.col;\n          }\n\n          if (this.currentCol >= start && this.currentCol <= end) {\n            (0, _number.rangeEach)(start, end, function (i) {\n              return _this3.selectedCols.push(i);\n            });\n          } else {\n            this.selectedCols.push(this.currentCol);\n          }\n        } else {\n          this.selectedCols.push(this.currentCol);\n        }\n\n        this.startOffset = box.left - 6;\n        this.startWidth = parseInt(box.width, 10);\n        this.handle.style.top = box.top + 'px';\n        this.handle.style.left = this.startOffset + this.startWidth + 'px';\n        this.handle.style.height = headerHeight + 'px';\n        this.hot.rootElement.appendChild(this.handle);\n      }\n    }\n\n    /**\n     * Refresh the resize handle position.\n     *\n     * @private\n     */\n\n  }, {\n    key: 'refreshHandlePosition',\n    value: function refreshHandlePosition() {\n      this.handle.style.left = this.startOffset + this.currentWidth + 'px';\n    }\n\n    /**\n     * Sets the resize guide position.\n     *\n     * @private\n     */\n\n  }, {\n    key: 'setupGuidePosition',\n    value: function setupGuidePosition() {\n      var handleHeight = parseInt((0, _element.outerHeight)(this.handle), 10);\n      var handleBottomPosition = parseInt(this.handle.style.top, 10) + handleHeight;\n      var maximumVisibleElementHeight = parseInt(this.hot.view.maximumVisibleElementHeight(0), 10);\n\n      (0, _element.addClass)(this.handle, 'active');\n      (0, _element.addClass)(this.guide, 'active');\n\n      this.guide.style.top = handleBottomPosition + 'px';\n      this.guide.style.left = this.handle.style.left;\n      this.guide.style.height = maximumVisibleElementHeight - handleHeight + 'px';\n      this.hot.rootElement.appendChild(this.guide);\n    }\n\n    /**\n     * Refresh the resize guide position.\n     *\n     * @private\n     */\n\n  }, {\n    key: 'refreshGuidePosition',\n    value: function refreshGuidePosition() {\n      this.guide.style.left = this.handle.style.left;\n    }\n\n    /**\n     * Hides both the resize handle and resize guide.\n     *\n     * @private\n     */\n\n  }, {\n    key: 'hideHandleAndGuide',\n    value: function hideHandleAndGuide() {\n      (0, _element.removeClass)(this.handle, 'active');\n      (0, _element.removeClass)(this.guide, 'active');\n    }\n\n    /**\n     * Checks if provided element is considered a column header.\n     *\n     * @private\n     * @param {HTMLElement} element HTML element.\n     * @returns {Boolean}\n     */\n\n  }, {\n    key: 'checkIfColumnHeader',\n    value: function checkIfColumnHeader(element) {\n      if (element !== this.hot.rootElement) {\n        var parent = element.parentNode;\n\n        if (parent.tagName === 'THEAD') {\n          return true;\n        }\n\n        return this.checkIfColumnHeader(parent);\n      }\n\n      return false;\n    }\n\n    /**\n     * Gets the TH element from the provided element.\n     *\n     * @private\n     * @param {HTMLElement} element HTML element.\n     * @returns {HTMLElement}\n     */\n\n  }, {\n    key: 'getTHFromTargetElement',\n    value: function getTHFromTargetElement(element) {\n      if (element.tagName !== 'TABLE') {\n        if (element.tagName === 'TH') {\n          return element;\n        }\n        return this.getTHFromTargetElement(element.parentNode);\n      }\n\n      return null;\n    }\n\n    /**\n     * 'mouseover' event callback - set the handle position.\n     *\n     * @private\n     * @param {MouseEvent} event\n     */\n\n  }, {\n    key: 'onMouseOver',\n    value: function onMouseOver(event) {\n      if (this.checkIfColumnHeader(event.target)) {\n        var th = this.getTHFromTargetElement(event.target);\n\n        if (!th) {\n          return;\n        }\n\n        var colspan = th.getAttribute('colspan');\n\n        if (th && (colspan === null || colspan === 1)) {\n          if (!this.pressed) {\n            this.setupHandlePosition(th);\n          }\n        }\n      }\n    }\n\n    /**\n     * Auto-size row after doubleclick - callback.\n     *\n     * @private\n     *\n     * @fires Hooks#beforeColumnResize\n     * @fires Hooks#afterColumnResize\n     */\n\n  }, {\n    key: 'afterMouseDownTimeout',\n    value: function afterMouseDownTimeout() {\n      var _this4 = this;\n\n      var render = function render() {\n        _this4.hot.forceFullRender = true;\n        _this4.hot.view.render(); // updates all\n        _this4.hot.view.wt.wtOverlays.adjustElementsSize(true);\n      };\n      var resize = function resize(selectedCol, forceRender) {\n        var hookNewSize = _this4.hot.runHooks('beforeColumnResize', selectedCol, _this4.newSize, true);\n\n        if (hookNewSize !== void 0) {\n          _this4.newSize = hookNewSize;\n        }\n\n        if (_this4.hot.getSettings().stretchH === 'all') {\n          _this4.clearManualSize(selectedCol);\n        } else {\n          _this4.setManualSize(selectedCol, _this4.newSize); // double click sets by auto row size plugin\n        }\n\n        if (forceRender) {\n          render();\n        }\n\n        _this4.saveManualColumnWidths();\n\n        _this4.hot.runHooks('afterColumnResize', selectedCol, _this4.newSize, true);\n      };\n\n      if (this.dblclick >= 2) {\n        var selectedColsLength = this.selectedCols.length;\n\n        if (selectedColsLength > 1) {\n          (0, _array.arrayEach)(this.selectedCols, function (selectedCol) {\n            resize(selectedCol);\n          });\n          render();\n        } else {\n          (0, _array.arrayEach)(this.selectedCols, function (selectedCol) {\n            resize(selectedCol, true);\n          });\n        }\n      }\n      this.dblclick = 0;\n      this.autoresizeTimeout = null;\n    }\n\n    /**\n     * 'mousedown' event callback.\n     *\n     * @private\n     * @param {MouseEvent} event\n     */\n\n  }, {\n    key: 'onMouseDown',\n    value: function onMouseDown(event) {\n      var _this5 = this;\n\n      if ((0, _element.hasClass)(event.target, 'manualColumnResizer')) {\n        this.setupGuidePosition();\n        this.pressed = this.hot;\n\n        if (this.autoresizeTimeout === null) {\n          this.autoresizeTimeout = setTimeout(function () {\n            return _this5.afterMouseDownTimeout();\n          }, 500);\n\n          this.hot._registerTimeout(this.autoresizeTimeout);\n        }\n        this.dblclick += 1;\n\n        this.startX = (0, _event.pageX)(event);\n        this.newSize = this.startWidth;\n      }\n    }\n\n    /**\n     * 'mousemove' event callback - refresh the handle and guide positions, cache the new column width.\n     *\n     * @private\n     * @param {MouseEvent} event\n     */\n\n  }, {\n    key: 'onMouseMove',\n    value: function onMouseMove(event) {\n      var _this6 = this;\n\n      if (this.pressed) {\n        this.currentWidth = this.startWidth + ((0, _event.pageX)(event) - this.startX);\n\n        (0, _array.arrayEach)(this.selectedCols, function (selectedCol) {\n          _this6.newSize = _this6.setManualSize(selectedCol, _this6.currentWidth);\n        });\n\n        this.refreshHandlePosition();\n        this.refreshGuidePosition();\n      }\n    }\n\n    /**\n     * 'mouseup' event callback - apply the column resizing.\n     *\n     * @private\n     *\n     * @fires Hooks#beforeColumnResize\n     * @fires Hooks#afterColumnResize\n     */\n\n  }, {\n    key: 'onMouseUp',\n    value: function onMouseUp() {\n      var _this7 = this;\n\n      var render = function render() {\n        _this7.hot.forceFullRender = true;\n        _this7.hot.view.render(); // updates all\n        _this7.hot.view.wt.wtOverlays.adjustElementsSize(true);\n      };\n      var resize = function resize(selectedCol, forceRender) {\n        _this7.hot.runHooks('beforeColumnResize', selectedCol, _this7.newSize, false);\n\n        if (forceRender) {\n          render();\n        }\n\n        _this7.saveManualColumnWidths();\n\n        _this7.hot.runHooks('afterColumnResize', selectedCol, _this7.newSize);\n      };\n\n      if (this.pressed) {\n        this.hideHandleAndGuide();\n        this.pressed = false;\n\n        if (this.newSize !== this.startWidth) {\n          var selectedColsLength = this.selectedCols.length;\n\n          if (selectedColsLength > 1) {\n            (0, _array.arrayEach)(this.selectedCols, function (selectedCol) {\n              resize(selectedCol);\n            });\n            render();\n          } else {\n            (0, _array.arrayEach)(this.selectedCols, function (selectedCol) {\n              resize(selectedCol, true);\n            });\n          }\n        }\n\n        this.setupHandlePosition(this.currentTH);\n      }\n    }\n\n    /**\n     * Binds the mouse events.\n     *\n     * @private\n     */\n\n  }, {\n    key: 'bindEvents',\n    value: function bindEvents() {\n      var _this8 = this;\n\n      this.eventManager.addEventListener(this.hot.rootElement, 'mouseover', function (e) {\n        return _this8.onMouseOver(e);\n      });\n      this.eventManager.addEventListener(this.hot.rootElement, 'mousedown', function (e) {\n        return _this8.onMouseDown(e);\n      });\n      this.eventManager.addEventListener(window, 'mousemove', function (e) {\n        return _this8.onMouseMove(e);\n      });\n      this.eventManager.addEventListener(window, 'mouseup', function () {\n        return _this8.onMouseUp();\n      });\n    }\n\n    /**\n     * Sets the new width for specified column index.\n     *\n     * @param {Number} column Visual column index.\n     * @param {Number} width Column width (no less than 20px).\n     * @returns {Number} Returns new width.\n     */\n\n  }, {\n    key: 'setManualSize',\n    value: function setManualSize(column, width) {\n      var newWidth = Math.max(width, 20);\n\n      /**\n       *  We need to run col through modifyCol hook, in case the order of displayed columns is different than the order\n       *  in data source. For instance, this order can be modified by manualColumnMove plugin.\n       */\n      var physicalColumn = this.hot.runHooks('modifyCol', column);\n\n      this.manualColumnWidths[physicalColumn] = newWidth;\n\n      return newWidth;\n    }\n\n    /**\n     * Clears the cache for the specified column index.\n     *\n     * @param {Number} column Visual column index.\n     */\n\n  }, {\n    key: 'clearManualSize',\n    value: function clearManualSize(column) {\n      var physicalColumn = this.hot.runHooks('modifyCol', column);\n\n      this.manualColumnWidths[physicalColumn] = void 0;\n    }\n\n    /**\n     * Modifies the provided column width, based on the plugin settings\n     *\n     * @private\n     * @param {Number} width Column width.\n     * @param {Number} column Visual column index.\n     * @returns {Number}\n     */\n\n  }, {\n    key: 'onModifyColWidth',\n    value: function onModifyColWidth(width, column) {\n      var newWidth = width;\n\n      if (this.enabled) {\n        var physicalColumn = this.hot.runHooks('modifyCol', column);\n        var columnWidth = this.manualColumnWidths[physicalColumn];\n\n        if (this.hot.getSettings().manualColumnResize && columnWidth) {\n          newWidth = columnWidth;\n        }\n      }\n\n      return newWidth;\n    }\n\n    /**\n     * Modifies the provided column stretched width. This hook decides if specified column should be stretched or not.\n     *\n     * @private\n     * @param {Number} stretchedWidth Stretched width.\n     * @param {Number} column Physical column index.\n     * @returns {Number}\n     */\n\n  }, {\n    key: 'onBeforeStretchingColumnWidth',\n    value: function onBeforeStretchingColumnWidth(stretchedWidth, column) {\n      var width = this.manualColumnWidths[column];\n\n      if (width === void 0) {\n        width = stretchedWidth;\n      }\n\n      return width;\n    }\n\n    /**\n     * `beforeColumnResize` hook callback.\n     *\n     * @private\n     */\n\n  }, {\n    key: 'onBeforeColumnResize',\n    value: function onBeforeColumnResize() {\n      // clear the header height cache information\n      this.hot.view.wt.wtViewport.hasOversizedColumnHeadersMarked = {};\n    }\n  }]);\n\n  return ManualColumnResize;\n}(_base2.default);\n\n(0, _plugins.registerPlugin)('manualColumnResize', ManualColumnResize);\n\nexports.default = ManualColumnResize;\n\n/***/ }),\n/* 344 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _base = __webpack_require__(10);\n\nvar _base2 = _interopRequireDefault(_base);\n\nvar _pluginHooks = __webpack_require__(16);\n\nvar _pluginHooks2 = _interopRequireDefault(_pluginHooks);\n\nvar _array = __webpack_require__(2);\n\nvar _element = __webpack_require__(0);\n\nvar _number = __webpack_require__(6);\n\nvar _eventManager = __webpack_require__(5);\n\nvar _eventManager2 = _interopRequireDefault(_eventManager);\n\nvar _plugins = __webpack_require__(8);\n\nvar _rowsMapper = __webpack_require__(345);\n\nvar _rowsMapper2 = _interopRequireDefault(_rowsMapper);\n\nvar _backlight = __webpack_require__(346);\n\nvar _backlight2 = _interopRequireDefault(_backlight);\n\nvar _guideline = __webpack_require__(347);\n\nvar _guideline2 = _interopRequireDefault(_guideline);\n\n__webpack_require__(348);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n_pluginHooks2.default.getSingleton().register('beforeRowMove');\n_pluginHooks2.default.getSingleton().register('afterRowMove');\n_pluginHooks2.default.getSingleton().register('unmodifyRow');\n\nvar privatePool = new WeakMap();\nvar CSS_PLUGIN = 'ht__manualRowMove';\nvar CSS_SHOW_UI = 'show-ui';\nvar CSS_ON_MOVING = 'on-moving--rows';\nvar CSS_AFTER_SELECTION = 'after-selection--rows';\n\n/**\n * @plugin ManualRowMove\n *\n * @description\n * This plugin allows to change rows order. To make rows order persistent the {@link Options#persistentState}\n * plugin should be enabled.\n *\n * API:\n * - moveRow - move single row to the new position.\n * - moveRows - move many rows (as an array of indexes) to the new position.\n *\n * If you want apply visual changes, you have to call manually the render() method on the instance of handsontable.\n *\n * The plugin creates additional components to make moving possibly using user interface:\n * - backlight - highlight of selected rows.\n * - guideline - line which shows where rows has been moved.\n *\n * @class ManualRowMove\n * @plugin ManualRowMove\n */\n\nvar ManualRowMove = function (_BasePlugin) {\n  _inherits(ManualRowMove, _BasePlugin);\n\n  function ManualRowMove(hotInstance) {\n    _classCallCheck(this, ManualRowMove);\n\n    /**\n     * Set up WeakMap of plugin to sharing private parameters;\n     */\n    var _this = _possibleConstructorReturn(this, (ManualRowMove.__proto__ || Object.getPrototypeOf(ManualRowMove)).call(this, hotInstance));\n\n    privatePool.set(_this, {\n      rowsToMove: [],\n      pressed: void 0,\n      disallowMoving: void 0,\n      target: {\n        eventPageY: void 0,\n        coords: void 0,\n        TD: void 0,\n        row: void 0\n      }\n    });\n\n    /**\n     * List of last removed row indexes.\n     *\n     * @private\n     * @type {Array}\n     */\n    _this.removedRows = [];\n    /**\n     * Object containing visual row indexes mapped to data source indexes.\n     *\n     * @private\n     * @type {RowsMapper}\n     */\n    _this.rowsMapper = new _rowsMapper2.default(_this);\n    /**\n     * Event Manager object.\n     *\n     * @private\n     * @type {Object}\n     */\n    _this.eventManager = new _eventManager2.default(_this);\n    /**\n     * Backlight UI object.\n     *\n     * @private\n     * @type {Object}\n     */\n    _this.backlight = new _backlight2.default(hotInstance);\n    /**\n     * Guideline UI object.\n     *\n     * @private\n     * @type {Object}\n     */\n    _this.guideline = new _guideline2.default(hotInstance);\n    return _this;\n  }\n\n  /**\n   * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}\n   * hook and if it returns `true` than the {@link ManualRowMove#enablePlugin} method is called.\n   *\n   * @returns {Boolean}\n   */\n\n\n  _createClass(ManualRowMove, [{\n    key: 'isEnabled',\n    value: function isEnabled() {\n      return !!this.hot.getSettings().manualRowMove;\n    }\n\n    /**\n     * Enables the plugin functionality for this Handsontable instance.\n     */\n\n  }, {\n    key: 'enablePlugin',\n    value: function enablePlugin() {\n      var _this2 = this;\n\n      if (this.enabled) {\n        return;\n      }\n\n      this.addHook('beforeOnCellMouseDown', function (event, coords, TD, blockCalculations) {\n        return _this2.onBeforeOnCellMouseDown(event, coords, TD, blockCalculations);\n      });\n      this.addHook('beforeOnCellMouseOver', function (event, coords, TD, blockCalculations) {\n        return _this2.onBeforeOnCellMouseOver(event, coords, TD, blockCalculations);\n      });\n      this.addHook('afterScrollHorizontally', function () {\n        return _this2.onAfterScrollHorizontally();\n      });\n      this.addHook('modifyRow', function (row, source) {\n        return _this2.onModifyRow(row, source);\n      });\n      this.addHook('beforeRemoveRow', function (index, amount) {\n        return _this2.onBeforeRemoveRow(index, amount);\n      });\n      this.addHook('afterRemoveRow', function () {\n        return _this2.onAfterRemoveRow();\n      });\n      this.addHook('afterCreateRow', function (index, amount) {\n        return _this2.onAfterCreateRow(index, amount);\n      });\n      this.addHook('afterLoadData', function () {\n        return _this2.onAfterLoadData();\n      });\n      this.addHook('beforeColumnSort', function (column, order) {\n        return _this2.onBeforeColumnSort(column, order);\n      });\n      this.addHook('unmodifyRow', function (row) {\n        return _this2.onUnmodifyRow(row);\n      });\n\n      this.registerEvents();\n\n      // TODO: move adding plugin classname to BasePlugin.\n      (0, _element.addClass)(this.hot.rootElement, CSS_PLUGIN);\n\n      _get(ManualRowMove.prototype.__proto__ || Object.getPrototypeOf(ManualRowMove.prototype), 'enablePlugin', this).call(this);\n    }\n\n    /**\n     * Updates the plugin state. This method is executed when {@link Core#updateSettings} is invoked.\n     */\n\n  }, {\n    key: 'updatePlugin',\n    value: function updatePlugin() {\n      this.disablePlugin();\n      this.enablePlugin();\n\n      this.onAfterPluginsInitialized();\n\n      _get(ManualRowMove.prototype.__proto__ || Object.getPrototypeOf(ManualRowMove.prototype), 'updatePlugin', this).call(this);\n    }\n\n    /**\n     * Disables the plugin functionality for this Handsontable instance.\n     */\n\n  }, {\n    key: 'disablePlugin',\n    value: function disablePlugin() {\n      var pluginSettings = this.hot.getSettings().manualRowMove;\n\n      if (Array.isArray(pluginSettings)) {\n        this.rowsMapper.clearMap();\n      }\n\n      (0, _element.removeClass)(this.hot.rootElement, CSS_PLUGIN);\n\n      this.unregisterEvents();\n      this.backlight.destroy();\n      this.guideline.destroy();\n\n      _get(ManualRowMove.prototype.__proto__ || Object.getPrototypeOf(ManualRowMove.prototype), 'disablePlugin', this).call(this);\n    }\n\n    /**\n     * Moves a single row.\n     *\n     * @param {Number} row Visual row index to be moved.\n     * @param {Number} target Visual row index being a target for the moved row.\n     * @fires Hooks#beforeRowMove\n     * @fires Hooks#afterRowMove\n     */\n\n  }, {\n    key: 'moveRow',\n    value: function moveRow(row, target) {\n      this.moveRows([row], target);\n    }\n\n    /**\n     * Moves a multiple rows.\n     *\n     * @param {Array} rows Array of visual row indexes to be moved.\n     * @param {Number} target Visual row index being a target for the moved rows.\n     * @fires Hooks#beforeRowMove\n     * @fires Hooks#afterRowMove\n     */\n\n  }, {\n    key: 'moveRows',\n    value: function moveRows(rows, target) {\n      var _this3 = this;\n\n      var visualRows = [].concat(_toConsumableArray(rows));\n      var priv = privatePool.get(this);\n      var beforeMoveHook = this.hot.runHooks('beforeRowMove', visualRows, target);\n\n      priv.disallowMoving = beforeMoveHook === false;\n\n      if (!priv.disallowMoving) {\n        // first we need to rewrite an visual indexes to physical for save reference after move\n        (0, _array.arrayEach)(rows, function (row, index, array) {\n          array[index] = _this3.rowsMapper.getValueByIndex(row);\n        });\n\n        // next, when we have got an physical indexes, we can move rows\n        (0, _array.arrayEach)(rows, function (row, index) {\n          var actualPosition = _this3.rowsMapper.getIndexByValue(row);\n\n          if (actualPosition !== target) {\n            _this3.rowsMapper.moveRow(actualPosition, target + index);\n          }\n        });\n\n        // after moving we have to clear rowsMapper from null entries\n        this.rowsMapper.clearNull();\n      }\n\n      this.hot.runHooks('afterRowMove', visualRows, target);\n    }\n\n    /**\n     * Correct the cell selection after the move action. Fired only when action was made with a mouse.\n     * That means that changing the row order using the API won't correct the selection.\n     *\n     * @private\n     * @param {Number} startRow Visual row index for the start of the selection.\n     * @param {Number} endRow Visual row index for the end of the selection.\n     */\n\n  }, {\n    key: 'changeSelection',\n    value: function changeSelection(startRow, endRow) {\n      this.hot.selectRows(startRow, endRow);\n    }\n\n    /**\n     * Gets the sum of the heights of rows in the provided range.\n     *\n     * @private\n     * @param {Number} from Visual row index.\n     * @param {Number} to Visual row index.\n     * @returns {Number}\n     */\n\n  }, {\n    key: 'getRowsHeight',\n    value: function getRowsHeight(from, to) {\n      var height = 0;\n\n      for (var i = from; i < to; i++) {\n        var rowHeight = this.hot.view.wt.wtTable.getRowHeight(i) || 23;\n\n        height += rowHeight;\n      }\n\n      return height;\n    }\n\n    /**\n     * Loads initial settings when persistent state is saved or when plugin was initialized as an array.\n     *\n     * @private\n     */\n\n  }, {\n    key: 'initialSettings',\n    value: function initialSettings() {\n      var pluginSettings = this.hot.getSettings().manualRowMove;\n\n      if (Array.isArray(pluginSettings)) {\n        this.moveRows(pluginSettings, 0);\n      } else if (pluginSettings !== void 0) {\n        var persistentState = this.persistentStateLoad();\n\n        if (persistentState.length) {\n          this.moveRows(persistentState, 0);\n        }\n      }\n    }\n\n    /**\n     * Checks if the provided row is in the fixedRowsTop section.\n     *\n     * @private\n     * @param {Number} row Visual row index to check.\n     * @returns {Boolean}\n     */\n\n  }, {\n    key: 'isFixedRowTop',\n    value: function isFixedRowTop(row) {\n      return row < this.hot.getSettings().fixedRowsTop;\n    }\n\n    /**\n     * Checks if the provided row is in the fixedRowsBottom section.\n     *\n     * @private\n     * @param {Number} row Visual row index to check.\n     * @returns {Boolean}\n     */\n\n  }, {\n    key: 'isFixedRowBottom',\n    value: function isFixedRowBottom(row) {\n      return row > this.hot.getSettings().fixedRowsBottom;\n    }\n\n    /**\n     * Saves the manual row positions to the persistent state (the {@link Options#persistentState} option has to be enabled).\n     *\n     * @fires Hooks#persistentStateSave\n     * @fires Hooks#manualRowMove\n     */\n\n  }, {\n    key: 'persistentStateSave',\n    value: function persistentStateSave() {\n      this.hot.runHooks('persistentStateSave', 'manualRowMove', this.rowsMapper._arrayMap);\n    }\n\n    /**\n     * Loads the manual row positions from the persistent state (the {@link Options#persistentState} option has to be enabled).\n     *\n     * @returns {Array} Stored state.\n     *\n     * @fires Hooks#persistentStateLoad\n     * @fires Hooks#manualRowMove\n     */\n\n  }, {\n    key: 'persistentStateLoad',\n    value: function persistentStateLoad() {\n      var storedState = {};\n\n      this.hot.runHooks('persistentStateLoad', 'manualRowMove', storedState);\n\n      return storedState.value ? storedState.value : [];\n    }\n\n    /**\n     * Prepare array of indexes based on actual selection.\n     *\n     * @private\n     * @returns {Array}\n     */\n\n  }, {\n    key: 'prepareRowsToMoving',\n    value: function prepareRowsToMoving() {\n      var selection = this.hot.getSelectedRangeLast();\n      var selectedRows = [];\n\n      if (!selection) {\n        return selectedRows;\n      }\n\n      var from = selection.from,\n          to = selection.to;\n\n      var start = Math.min(from.row, to.row);\n      var end = Math.max(from.row, to.row);\n\n      (0, _number.rangeEach)(start, end, function (i) {\n        selectedRows.push(i);\n      });\n\n      return selectedRows;\n    }\n\n    /**\n     * Update the UI visual position.\n     *\n     * @private\n     */\n\n  }, {\n    key: 'refreshPositions',\n    value: function refreshPositions() {\n      var priv = privatePool.get(this);\n      var coords = priv.target.coords;\n      var firstVisible = this.hot.view.wt.wtTable.getFirstVisibleRow();\n      var lastVisible = this.hot.view.wt.wtTable.getLastVisibleRow();\n      var fixedRows = this.hot.getSettings().fixedRowsTop;\n      var countRows = this.hot.countRows();\n\n      if (coords.row < fixedRows && firstVisible > 0) {\n        this.hot.scrollViewportTo(firstVisible - 1);\n      }\n      if (coords.row >= lastVisible && lastVisible < countRows) {\n        this.hot.scrollViewportTo(lastVisible + 1, undefined, true);\n      }\n\n      var wtTable = this.hot.view.wt.wtTable;\n      var TD = priv.target.TD;\n      var rootElementOffset = (0, _element.offset)(this.hot.rootElement);\n      var tdOffsetTop = this.hot.view.THEAD.offsetHeight + this.getRowsHeight(0, coords.row);\n      var mouseOffsetTop = priv.target.eventPageY - rootElementOffset.top + wtTable.holder.scrollTop;\n      var hiderHeight = wtTable.hider.offsetHeight;\n      var tbodyOffsetTop = wtTable.TBODY.offsetTop;\n      var backlightElemMarginTop = this.backlight.getOffset().top;\n      var backlightElemHeight = this.backlight.getSize().height;\n\n      if (this.isFixedRowTop(coords.row)) {\n        tdOffsetTop += wtTable.holder.scrollTop;\n      }\n\n      // todo: fixedRowsBottom\n      // if (this.isFixedRowBottom(coords.row)) {\n      //\n      // }\n\n      if (coords.row < 0) {\n        // if hover on colHeader\n        priv.target.row = firstVisible > 0 ? firstVisible - 1 : firstVisible;\n      } else if (TD.offsetHeight / 2 + tdOffsetTop <= mouseOffsetTop) {\n        // if hover on lower part of TD\n        priv.target.row = coords.row + 1;\n        // unfortunately first row is bigger than rest\n        tdOffsetTop += coords.row === 0 ? TD.offsetHeight - 1 : TD.offsetHeight;\n      } else {\n        // elsewhere on table\n        priv.target.row = coords.row;\n      }\n\n      var backlightTop = mouseOffsetTop;\n      var guidelineTop = tdOffsetTop;\n\n      if (mouseOffsetTop + backlightElemHeight + backlightElemMarginTop >= hiderHeight) {\n        // prevent display backlight below table\n        backlightTop = hiderHeight - backlightElemHeight - backlightElemMarginTop;\n      } else if (mouseOffsetTop + backlightElemMarginTop < tbodyOffsetTop) {\n        // prevent display above below table\n        backlightTop = tbodyOffsetTop + Math.abs(backlightElemMarginTop);\n      }\n\n      if (tdOffsetTop >= hiderHeight - 1) {\n        // prevent display guideline below table\n        guidelineTop = hiderHeight - 1;\n      }\n\n      var topOverlayHeight = 0;\n      if (this.hot.view.wt.wtOverlays.topOverlay) {\n        topOverlayHeight = this.hot.view.wt.wtOverlays.topOverlay.clone.wtTable.TABLE.offsetHeight;\n      }\n\n      if (coords.row >= fixedRows && guidelineTop - wtTable.holder.scrollTop < topOverlayHeight) {\n        this.hot.scrollViewportTo(coords.row);\n      }\n\n      this.backlight.setPosition(backlightTop);\n      this.guideline.setPosition(guidelineTop);\n    }\n\n    /**\n     * This method checks arrayMap from rowsMapper and updates the rowsMapper if it's necessary.\n     *\n     * @private\n     */\n\n  }, {\n    key: 'updateRowsMapper',\n    value: function updateRowsMapper() {\n      var countRows = this.hot.countSourceRows();\n      var rowsMapperLen = this.rowsMapper._arrayMap.length;\n\n      if (rowsMapperLen === 0) {\n        this.rowsMapper.createMap(countRows || this.hot.getSettings().startRows);\n      } else if (rowsMapperLen < countRows) {\n        var diff = countRows - rowsMapperLen;\n\n        this.rowsMapper.insertItems(rowsMapperLen, diff);\n      } else if (rowsMapperLen > countRows) {\n        var maxIndex = countRows - 1;\n        var rowsToRemove = [];\n\n        (0, _array.arrayEach)(this.rowsMapper._arrayMap, function (value, index) {\n          if (value > maxIndex) {\n            rowsToRemove.push(index);\n          }\n        });\n\n        this.rowsMapper.removeItems(rowsToRemove);\n      }\n    }\n\n    /**\n     * Binds the events used by the plugin.\n     *\n     * @private\n     */\n\n  }, {\n    key: 'registerEvents',\n    value: function registerEvents() {\n      var _this4 = this;\n\n      this.eventManager.addEventListener(document.documentElement, 'mousemove', function (event) {\n        return _this4.onMouseMove(event);\n      });\n      this.eventManager.addEventListener(document.documentElement, 'mouseup', function () {\n        return _this4.onMouseUp();\n      });\n    }\n\n    /**\n     * Unbinds the events used by the plugin.\n     *\n     * @private\n     */\n\n  }, {\n    key: 'unregisterEvents',\n    value: function unregisterEvents() {\n      this.eventManager.clear();\n    }\n\n    /**\n     * `beforeColumnSort` hook callback. If user uses the sorting, manual row moving is disabled.\n     *\n     * @private\n     * @param {Number} column Column index where soring is present\n     * @param {*} order State of sorting. ASC/DESC/None\n     */\n\n  }, {\n    key: 'onBeforeColumnSort',\n    value: function onBeforeColumnSort(column, order) {\n      var priv = privatePool.get(this);\n\n      priv.disallowMoving = order !== void 0;\n    }\n\n    /**\n     * Changes the behavior of selection / dragging.\n     *\n     * @private\n     * @param {MouseEvent} event\n     * @param {CellCoords} coords Visual coordinates.\n     * @param {HTMLElement} TD\n     * @param {Object} blockCalculations\n     */\n\n  }, {\n    key: 'onBeforeOnCellMouseDown',\n    value: function onBeforeOnCellMouseDown(event, coords, TD, blockCalculations) {\n      var wtTable = this.hot.view.wt.wtTable;\n      var isHeaderSelection = this.hot.selection.isSelectedByRowHeader();\n      var selection = this.hot.getSelectedRangeLast();\n      var priv = privatePool.get(this);\n\n      if (!selection || !isHeaderSelection || priv.pressed || event.button !== 0) {\n        priv.pressed = false;\n        priv.rowsToMove.length = 0;\n        (0, _element.removeClass)(this.hot.rootElement, [CSS_ON_MOVING, CSS_SHOW_UI]);\n        return;\n      }\n\n      var guidelineIsNotReady = this.guideline.isBuilt() && !this.guideline.isAppended();\n      var backlightIsNotReady = this.backlight.isBuilt() && !this.backlight.isAppended();\n\n      if (guidelineIsNotReady && backlightIsNotReady) {\n        this.guideline.appendTo(wtTable.hider);\n        this.backlight.appendTo(wtTable.hider);\n      }\n\n      var from = selection.from,\n          to = selection.to;\n\n      var start = Math.min(from.row, to.row);\n      var end = Math.max(from.row, to.row);\n\n      if (coords.col < 0 && coords.row >= start && coords.row <= end) {\n        blockCalculations.row = true;\n        priv.pressed = true;\n        priv.target.eventPageY = event.pageY;\n        priv.target.coords = coords;\n        priv.target.TD = TD;\n        priv.rowsToMove = this.prepareRowsToMoving();\n\n        var leftPos = wtTable.holder.scrollLeft + this.hot.view.wt.wtViewport.getRowHeaderWidth();\n\n        this.backlight.setPosition(null, leftPos);\n        this.backlight.setSize(wtTable.hider.offsetWidth - leftPos, this.getRowsHeight(start, end + 1));\n        this.backlight.setOffset((this.getRowsHeight(start, coords.row) + event.layerY) * -1, null);\n\n        (0, _element.addClass)(this.hot.rootElement, CSS_ON_MOVING);\n\n        this.refreshPositions();\n      } else {\n        (0, _element.removeClass)(this.hot.rootElement, CSS_AFTER_SELECTION);\n        priv.pressed = false;\n        priv.rowsToMove.length = 0;\n      }\n    }\n\n    /**\n     * 'mouseMove' event callback. Fired when pointer move on document.documentElement.\n     *\n     * @private\n     * @param {MouseEvent} event `mousemove` event properties.\n     */\n\n  }, {\n    key: 'onMouseMove',\n    value: function onMouseMove(event) {\n      var priv = privatePool.get(this);\n\n      if (!priv.pressed) {\n        return;\n      }\n\n      // callback for browser which doesn't supports CSS pointer-event: none\n      if (event.realTarget === this.backlight.element) {\n        var height = this.backlight.getSize().height;\n        this.backlight.setSize(null, 0);\n\n        setTimeout(function () {\n          this.backlight.setPosition(null, height);\n        });\n      }\n\n      priv.target.eventPageY = event.pageY;\n      this.refreshPositions();\n    }\n\n    /**\n     * 'beforeOnCellMouseOver' hook callback. Fired when pointer was over cell.\n     *\n     * @private\n     * @param {MouseEvent} event `mouseover` event properties.\n     * @param {CellCoords} coords Visual cell coordinates where was fired event.\n     * @param {HTMLElement} TD Cell represented as HTMLElement.\n     * @param {Object} blockCalculations Object which contains information about blockCalculation for row, column or cells.\n     */\n\n  }, {\n    key: 'onBeforeOnCellMouseOver',\n    value: function onBeforeOnCellMouseOver(event, coords, TD, blockCalculations) {\n      var selectedRange = this.hot.getSelectedRangeLast();\n      var priv = privatePool.get(this);\n\n      if (!selectedRange || !priv.pressed) {\n        return;\n      }\n\n      if (priv.rowsToMove.indexOf(coords.row) > -1) {\n        (0, _element.removeClass)(this.hot.rootElement, CSS_SHOW_UI);\n      } else {\n        (0, _element.addClass)(this.hot.rootElement, CSS_SHOW_UI);\n      }\n\n      blockCalculations.row = true;\n      blockCalculations.column = true;\n      blockCalculations.cell = true;\n      priv.target.coords = coords;\n      priv.target.TD = TD;\n    }\n\n    /**\n     * `onMouseUp` hook callback.\n     *\n     * @private\n     */\n\n  }, {\n    key: 'onMouseUp',\n    value: function onMouseUp() {\n      var priv = privatePool.get(this);\n      var target = priv.target.row;\n      var rowsLen = priv.rowsToMove.length;\n\n      priv.pressed = false;\n      priv.backlightHeight = 0;\n\n      (0, _element.removeClass)(this.hot.rootElement, [CSS_ON_MOVING, CSS_SHOW_UI, CSS_AFTER_SELECTION]);\n\n      if (this.hot.selection.isSelectedByRowHeader()) {\n        (0, _element.addClass)(this.hot.rootElement, CSS_AFTER_SELECTION);\n      }\n\n      if (rowsLen < 1 || target === void 0 || priv.rowsToMove.indexOf(target) > -1 || priv.rowsToMove[rowsLen - 1] === target - 1) {\n        return;\n      }\n\n      this.moveRows(priv.rowsToMove, target);\n\n      this.persistentStateSave();\n      this.hot.render();\n\n      if (!priv.disallowMoving) {\n        var selectionStart = this.rowsMapper.getIndexByValue(priv.rowsToMove[0]);\n        var selectionEnd = this.rowsMapper.getIndexByValue(priv.rowsToMove[rowsLen - 1]);\n        this.changeSelection(selectionStart, selectionEnd);\n      }\n\n      priv.rowsToMove.length = 0;\n    }\n\n    /**\n     * `afterScrollHorizontally` hook callback. Fired the table was scrolled horizontally.\n     *\n     * @private\n     */\n\n  }, {\n    key: 'onAfterScrollHorizontally',\n    value: function onAfterScrollHorizontally() {\n      var wtTable = this.hot.view.wt.wtTable;\n      var headerWidth = this.hot.view.wt.wtViewport.getRowHeaderWidth();\n      var scrollLeft = wtTable.holder.scrollLeft;\n      var posLeft = headerWidth + scrollLeft;\n\n      this.backlight.setPosition(null, posLeft);\n      this.backlight.setSize(wtTable.hider.offsetWidth - posLeft);\n    }\n\n    /**\n     * `afterCreateRow` hook callback.\n     *\n     * @private\n     * @param {Number} index Visual index of the created row.\n     * @param {Number} amount Amount of created rows.\n     */\n\n  }, {\n    key: 'onAfterCreateRow',\n    value: function onAfterCreateRow(index, amount) {\n      this.rowsMapper.shiftItems(index, amount);\n    }\n\n    /**\n     * On before remove row listener.\n     *\n     * @private\n     * @param {Number} index Visual row index.\n     * @param {Number} amount Defines how many rows removed.\n     */\n\n  }, {\n    key: 'onBeforeRemoveRow',\n    value: function onBeforeRemoveRow(index, amount) {\n      var _this5 = this;\n\n      this.removedRows.length = 0;\n\n      if (index !== false) {\n        // Collect physical row index.\n        (0, _number.rangeEach)(index, index + amount - 1, function (removedIndex) {\n          _this5.removedRows.push(_this5.hot.runHooks('modifyRow', removedIndex, _this5.pluginName));\n        });\n      }\n    }\n\n    /**\n     * `afterRemoveRow` hook callback.\n     *\n     * @private\n     */\n\n  }, {\n    key: 'onAfterRemoveRow',\n    value: function onAfterRemoveRow() {\n      this.rowsMapper.unshiftItems(this.removedRows);\n    }\n\n    /**\n     * `afterLoadData` hook callback.\n     *\n     * @private\n     */\n\n  }, {\n    key: 'onAfterLoadData',\n    value: function onAfterLoadData() {\n      this.updateRowsMapper();\n    }\n\n    /**\n     * 'modifyRow' hook callback.\n     *\n     * @private\n     * @param {Number} row Visual Row index.\n     * @returns {Number} Physical row index.\n     */\n\n  }, {\n    key: 'onModifyRow',\n    value: function onModifyRow(row, source) {\n      var physicalRow = row;\n\n      if (source !== this.pluginName) {\n        var rowInMapper = this.rowsMapper.getValueByIndex(physicalRow);\n        physicalRow = rowInMapper === null ? physicalRow : rowInMapper;\n      }\n\n      return physicalRow;\n    }\n\n    /**\n     * 'unmodifyRow' hook callback.\n     *\n     * @private\n     * @param {Number} row Physical row index.\n     * @returns {Number} Visual row index.\n     */\n\n  }, {\n    key: 'onUnmodifyRow',\n    value: function onUnmodifyRow(row) {\n      var indexInMapper = this.rowsMapper.getIndexByValue(row);\n\n      return indexInMapper === null ? row : indexInMapper;\n    }\n\n    /**\n     * `afterPluginsInitialized` hook callback.\n     *\n     * @private\n     */\n\n  }, {\n    key: 'onAfterPluginsInitialized',\n    value: function onAfterPluginsInitialized() {\n      this.updateRowsMapper();\n      this.initialSettings();\n      this.backlight.build();\n      this.guideline.build();\n    }\n\n    /**\n     * Destroys the plugin instance.\n     */\n\n  }, {\n    key: 'destroy',\n    value: function destroy() {\n      this.backlight.destroy();\n      this.guideline.destroy();\n      this.rowsMapper.destroy();\n\n      _get(ManualRowMove.prototype.__proto__ || Object.getPrototypeOf(ManualRowMove.prototype), 'destroy', this).call(this);\n    }\n  }]);\n\n  return ManualRowMove;\n}(_base2.default);\n\n(0, _plugins.registerPlugin)('ManualRowMove', ManualRowMove);\n\nexports.default = ManualRowMove;\n\n/***/ }),\n/* 345 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _arrayMapper = __webpack_require__(94);\n\nvar _arrayMapper2 = _interopRequireDefault(_arrayMapper);\n\nvar _array = __webpack_require__(2);\n\nvar _object = __webpack_require__(1);\n\nvar _number = __webpack_require__(6);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * @class RowsMapper\n * @plugin ManualRowMove\n */\nvar RowsMapper = function () {\n  function RowsMapper(manualRowMove) {\n    _classCallCheck(this, RowsMapper);\n\n    /**\n     * Instance of ManualRowMove plugin.\n     *\n     * @type {ManualRowMove}\n     */\n    this.manualRowMove = manualRowMove;\n  }\n\n  /**\n   * Reset current map array and create new one.\n   *\n   * @param {Number} [length] Custom generated map length.\n   */\n\n\n  _createClass(RowsMapper, [{\n    key: 'createMap',\n    value: function createMap(length) {\n      var _this = this;\n\n      var originLength = length === void 0 ? this._arrayMap.length : length;\n\n      this._arrayMap.length = 0;\n\n      (0, _number.rangeEach)(originLength - 1, function (itemIndex) {\n        _this._arrayMap[itemIndex] = itemIndex;\n      });\n    }\n\n    /**\n     * Destroy class.\n     */\n\n  }, {\n    key: 'destroy',\n    value: function destroy() {\n      this._arrayMap = null;\n    }\n\n    /**\n     *\n     * Moving elements in rowsMapper.\n     * @param {Number} from Row index to move.\n     * @param {Number} to Target index.\n     */\n\n  }, {\n    key: 'moveRow',\n    value: function moveRow(from, to) {\n      var indexToMove = this._arrayMap[from];\n      this._arrayMap[from] = null;\n      this._arrayMap.splice(to, 0, indexToMove);\n    }\n\n    /**\n     * Clearing arrayMap from `null` entries.\n     */\n\n  }, {\n    key: 'clearNull',\n    value: function clearNull() {\n      this._arrayMap = (0, _array.arrayFilter)(this._arrayMap, function (i) {\n        return i !== null;\n      });\n    }\n  }]);\n\n  return RowsMapper;\n}();\n\n(0, _object.mixin)(RowsMapper, _arrayMapper2.default);\n\nexports.default = RowsMapper;\n\n/***/ }),\n/* 346 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _base = __webpack_require__(205);\n\nvar _base2 = _interopRequireDefault(_base);\n\nvar _element = __webpack_require__(0);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar CSS_CLASSNAME = 'ht__manualRowMove--backlight';\n\n/**\n * @class BacklightUI\n * @util\n */\n\nvar BacklightUI = function (_BaseUI) {\n  _inherits(BacklightUI, _BaseUI);\n\n  function BacklightUI() {\n    _classCallCheck(this, BacklightUI);\n\n    return _possibleConstructorReturn(this, (BacklightUI.__proto__ || Object.getPrototypeOf(BacklightUI)).apply(this, arguments));\n  }\n\n  _createClass(BacklightUI, [{\n    key: 'build',\n\n    /**\n     * Custom className on build process.\n     */\n    value: function build() {\n      _get(BacklightUI.prototype.__proto__ || Object.getPrototypeOf(BacklightUI.prototype), 'build', this).call(this);\n\n      (0, _element.addClass)(this._element, CSS_CLASSNAME);\n    }\n  }]);\n\n  return BacklightUI;\n}(_base2.default);\n\nexports.default = BacklightUI;\n\n/***/ }),\n/* 347 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _base = __webpack_require__(205);\n\nvar _base2 = _interopRequireDefault(_base);\n\nvar _element = __webpack_require__(0);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar CSS_CLASSNAME = 'ht__manualRowMove--guideline';\n\n/**\n * @class GuidelineUI\n * @util\n */\n\nvar GuidelineUI = function (_BaseUI) {\n  _inherits(GuidelineUI, _BaseUI);\n\n  function GuidelineUI() {\n    _classCallCheck(this, GuidelineUI);\n\n    return _possibleConstructorReturn(this, (GuidelineUI.__proto__ || Object.getPrototypeOf(GuidelineUI)).apply(this, arguments));\n  }\n\n  _createClass(GuidelineUI, [{\n    key: 'build',\n\n    /**\n     * Custom className on build process.\n     */\n    value: function build() {\n      _get(GuidelineUI.prototype.__proto__ || Object.getPrototypeOf(GuidelineUI.prototype), 'build', this).call(this);\n\n      (0, _element.addClass)(this._element, CSS_CLASSNAME);\n    }\n  }]);\n\n  return GuidelineUI;\n}(_base2.default);\n\nexports.default = GuidelineUI;\n\n/***/ }),\n/* 348 */\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n/* 349 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _base = __webpack_require__(10);\n\nvar _base2 = _interopRequireDefault(_base);\n\nvar _element = __webpack_require__(0);\n\nvar _eventManager = __webpack_require__(5);\n\nvar _eventManager2 = _interopRequireDefault(_eventManager);\n\nvar _event = __webpack_require__(13);\n\nvar _array = __webpack_require__(2);\n\nvar _number = __webpack_require__(6);\n\nvar _plugins = __webpack_require__(8);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n// Developer note! Whenever you make a change in this file, make an analogous change in manualRowResize.js\n\n/**\n * @description\n * This plugin allows to change rows height. To make rows height persistent the {@link Options#persistentState}\n * plugin should be enabled.\n *\n * The plugin creates additional components to make resizing possibly using user interface:\n * - handle - the draggable element that sets the desired height of the row.\n * - guide - the helper guide that shows the desired height as a horizontal guide.\n *\n * @plugin ManualRowResize\n */\nvar ManualRowResize = function (_BasePlugin) {\n  _inherits(ManualRowResize, _BasePlugin);\n\n  function ManualRowResize(hotInstance) {\n    _classCallCheck(this, ManualRowResize);\n\n    var _this = _possibleConstructorReturn(this, (ManualRowResize.__proto__ || Object.getPrototypeOf(ManualRowResize)).call(this, hotInstance));\n\n    _this.currentTH = null;\n    _this.currentRow = null;\n    _this.selectedRows = [];\n    _this.currentHeight = null;\n    _this.newSize = null;\n    _this.startY = null;\n    _this.startHeight = null;\n    _this.startOffset = null;\n    _this.handle = document.createElement('DIV');\n    _this.guide = document.createElement('DIV');\n    _this.eventManager = new _eventManager2.default(_this);\n    _this.pressed = null;\n    _this.dblclick = 0;\n    _this.autoresizeTimeout = null;\n    _this.manualRowHeights = [];\n\n    (0, _element.addClass)(_this.handle, 'manualRowResizer');\n    (0, _element.addClass)(_this.guide, 'manualRowResizerGuide');\n    return _this;\n  }\n\n  /**\n   * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}\n   * hook and if it returns `true` than the {@link ManualRowResize#enablePlugin} method is called.\n   *\n   * @returns {Boolean}\n   */\n\n\n  _createClass(ManualRowResize, [{\n    key: 'isEnabled',\n    value: function isEnabled() {\n      return this.hot.getSettings().manualRowResize;\n    }\n\n    /**\n     * Enables the plugin functionality for this Handsontable instance.\n     */\n\n  }, {\n    key: 'enablePlugin',\n    value: function enablePlugin() {\n      var _this2 = this;\n\n      if (this.enabled) {\n        return;\n      }\n\n      this.manualRowHeights = [];\n\n      var initialRowHeights = this.hot.getSettings().manualRowResize;\n      var loadedManualRowHeights = this.loadManualRowHeights();\n\n      if (typeof loadedManualRowHeights !== 'undefined') {\n        this.manualRowHeights = loadedManualRowHeights;\n      } else if (Array.isArray(initialRowHeights)) {\n        this.manualRowHeights = initialRowHeights;\n      } else {\n        this.manualRowHeights = [];\n      }\n\n      this.addHook('modifyRowHeight', function (height, row) {\n        return _this2.onModifyRowHeight(height, row);\n      });\n\n      // Handsontable.hooks.register('beforeRowResize');\n      // Handsontable.hooks.register('afterRowResize');\n\n      this.bindEvents();\n\n      _get(ManualRowResize.prototype.__proto__ || Object.getPrototypeOf(ManualRowResize.prototype), 'enablePlugin', this).call(this);\n    }\n\n    /**\n     * Updates the plugin state. This method is executed when {@link Core#updateSettings} is invoked.\n     */\n\n  }, {\n    key: 'updatePlugin',\n    value: function updatePlugin() {\n      var initialRowHeights = this.hot.getSettings().manualRowResize;\n\n      if (Array.isArray(initialRowHeights)) {\n        this.manualRowHeights = initialRowHeights;\n      } else if (!initialRowHeights) {\n        this.manualRowHeights = [];\n      }\n    }\n\n    /**\n     * Disables the plugin functionality for this Handsontable instance.\n     */\n\n  }, {\n    key: 'disablePlugin',\n    value: function disablePlugin() {\n      _get(ManualRowResize.prototype.__proto__ || Object.getPrototypeOf(ManualRowResize.prototype), 'disablePlugin', this).call(this);\n    }\n\n    /**\n     * Saves the current sizes using the persistentState plugin (the {@link Options#persistentState} option has to be enabled).\n     * @fires Hooks#persistentStateSave\n     * @fires Hooks#manualRowHeights\n     */\n\n  }, {\n    key: 'saveManualRowHeights',\n    value: function saveManualRowHeights() {\n      this.hot.runHooks('persistentStateSave', 'manualRowHeights', this.manualRowHeights);\n    }\n\n    /**\n     * Loads the previously saved sizes using the persistentState plugin (the {@link Options#persistentState} option has to be enabled).\n     *\n     * @returns {Array}\n     * @fires Hooks#persistentStateLoad\n     * @fires Hooks#manualRowHeights\n     */\n\n  }, {\n    key: 'loadManualRowHeights',\n    value: function loadManualRowHeights() {\n      var storedState = {};\n\n      this.hot.runHooks('persistentStateLoad', 'manualRowHeights', storedState);\n\n      return storedState.value;\n    }\n\n    /**\n     * Sets the resize handle position.\n     *\n     * @private\n     * @param {HTMLCellElement} TH TH HTML element.\n     */\n\n  }, {\n    key: 'setupHandlePosition',\n    value: function setupHandlePosition(TH) {\n      var _this3 = this;\n\n      this.currentTH = TH;\n      var row = this.hot.view.wt.wtTable.getCoords(TH).row; // getCoords returns CellCoords\n      var headerWidth = (0, _element.outerWidth)(this.currentTH);\n\n      if (row >= 0) {\n        // if not col header\n        var box = this.currentTH.getBoundingClientRect();\n\n        this.currentRow = row;\n        this.selectedRows = [];\n\n        if (this.hot.selection.isSelected() && this.hot.selection.isSelectedByRowHeader()) {\n          var _hot$getSelectedRange = this.hot.getSelectedRangeLast(),\n              from = _hot$getSelectedRange.from,\n              to = _hot$getSelectedRange.to;\n\n          var start = from.row;\n          var end = to.row;\n\n          if (start >= end) {\n            start = to.row;\n            end = from.row;\n          }\n\n          if (this.currentRow >= start && this.currentRow <= end) {\n            (0, _number.rangeEach)(start, end, function (i) {\n              return _this3.selectedRows.push(i);\n            });\n          } else {\n            this.selectedRows.push(this.currentRow);\n          }\n        } else {\n          this.selectedRows.push(this.currentRow);\n        }\n\n        this.startOffset = box.top - 6;\n        this.startHeight = parseInt(box.height, 10);\n        this.handle.style.left = box.left + 'px';\n        this.handle.style.top = this.startOffset + this.startHeight + 'px';\n        this.handle.style.width = headerWidth + 'px';\n        this.hot.rootElement.appendChild(this.handle);\n      }\n    }\n\n    /**\n     * Refresh the resize handle position.\n     *\n     * @private\n     */\n\n  }, {\n    key: 'refreshHandlePosition',\n    value: function refreshHandlePosition() {\n      this.handle.style.top = this.startOffset + this.currentHeight + 'px';\n    }\n\n    /**\n     * Sets the resize guide position.\n     *\n     * @private\n     */\n\n  }, {\n    key: 'setupGuidePosition',\n    value: function setupGuidePosition() {\n      var handleWidth = parseInt((0, _element.outerWidth)(this.handle), 10);\n      var handleRightPosition = parseInt(this.handle.style.left, 10) + handleWidth;\n      var maximumVisibleElementWidth = parseInt(this.hot.view.maximumVisibleElementWidth(0), 10);\n      (0, _element.addClass)(this.handle, 'active');\n      (0, _element.addClass)(this.guide, 'active');\n\n      this.guide.style.top = this.handle.style.top;\n      this.guide.style.left = handleRightPosition + 'px';\n      this.guide.style.width = maximumVisibleElementWidth - handleWidth + 'px';\n      this.hot.rootElement.appendChild(this.guide);\n    }\n\n    /**\n     * Refresh the resize guide position.\n     *\n     * @private\n     */\n\n  }, {\n    key: 'refreshGuidePosition',\n    value: function refreshGuidePosition() {\n      this.guide.style.top = this.handle.style.top;\n    }\n\n    /**\n     * Hides both the resize handle and resize guide.\n     *\n     * @private\n     */\n\n  }, {\n    key: 'hideHandleAndGuide',\n    value: function hideHandleAndGuide() {\n      (0, _element.removeClass)(this.handle, 'active');\n      (0, _element.removeClass)(this.guide, 'active');\n    }\n\n    /**\n     * Checks if provided element is considered as a row header.\n     *\n     * @private\n     * @param {HTMLElement} element HTML element.\n     * @returns {Boolean}\n     */\n\n  }, {\n    key: 'checkIfRowHeader',\n    value: function checkIfRowHeader(element) {\n      if (element !== this.hot.rootElement) {\n        var parent = element.parentNode;\n\n        if (parent.tagName === 'TBODY') {\n          return true;\n        }\n\n        return this.checkIfRowHeader(parent);\n      }\n\n      return false;\n    }\n\n    /**\n     * Gets the TH element from the provided element.\n     *\n     * @private\n     * @param {HTMLElement} element HTML element.\n     * @returns {HTMLElement}\n     */\n\n  }, {\n    key: 'getTHFromTargetElement',\n    value: function getTHFromTargetElement(element) {\n      if (element.tagName !== 'TABLE') {\n        if (element.tagName === 'TH') {\n          return element;\n        }\n        return this.getTHFromTargetElement(element.parentNode);\n      }\n\n      return null;\n    }\n\n    /**\n     * 'mouseover' event callback - set the handle position.\n     *\n     * @private\n     * @param {MouseEvent} event\n     */\n\n  }, {\n    key: 'onMouseOver',\n    value: function onMouseOver(event) {\n      if (this.checkIfRowHeader(event.target)) {\n        var th = this.getTHFromTargetElement(event.target);\n\n        if (th) {\n          if (!this.pressed) {\n            this.setupHandlePosition(th);\n          }\n        }\n      }\n    }\n\n    /**\n     * Auto-size row after doubleclick - callback.\n     *\n     * @private\n     * @fires Hooks#beforeRowResize\n     * @fires Hooks#afterRowResize\n     */\n\n  }, {\n    key: 'afterMouseDownTimeout',\n    value: function afterMouseDownTimeout() {\n      var _this4 = this;\n\n      var render = function render() {\n        _this4.hot.forceFullRender = true;\n        _this4.hot.view.render(); // updates all\n        _this4.hot.view.wt.wtOverlays.adjustElementsSize(true);\n      };\n      var resize = function resize(selectedRow, forceRender) {\n        var hookNewSize = _this4.hot.runHooks('beforeRowResize', selectedRow, _this4.newSize, true);\n\n        if (hookNewSize !== void 0) {\n          _this4.newSize = hookNewSize;\n        }\n\n        _this4.setManualSize(selectedRow, _this4.newSize); // double click sets auto row size\n\n        if (forceRender) {\n          render();\n        }\n\n        _this4.hot.runHooks('afterRowResize', selectedRow, _this4.newSize, true);\n      };\n\n      if (this.dblclick >= 2) {\n        var selectedRowsLength = this.selectedRows.length;\n\n        if (selectedRowsLength > 1) {\n          (0, _array.arrayEach)(this.selectedRows, function (selectedRow) {\n            resize(selectedRow);\n          });\n          render();\n        } else {\n          (0, _array.arrayEach)(this.selectedRows, function (selectedRow) {\n            resize(selectedRow, true);\n          });\n        }\n      }\n      this.dblclick = 0;\n      this.autoresizeTimeout = null;\n    }\n\n    /**\n     * 'mousedown' event callback.\n     *\n     * @private\n     * @param {MouseEvent} event\n     */\n\n  }, {\n    key: 'onMouseDown',\n    value: function onMouseDown(event) {\n      var _this5 = this;\n\n      if ((0, _element.hasClass)(event.target, 'manualRowResizer')) {\n        this.setupGuidePosition();\n        this.pressed = this.hot;\n\n        if (this.autoresizeTimeout === null) {\n          this.autoresizeTimeout = setTimeout(function () {\n            return _this5.afterMouseDownTimeout();\n          }, 500);\n\n          this.hot._registerTimeout(this.autoresizeTimeout);\n        }\n\n        this.dblclick += 1;\n        this.startY = (0, _event.pageY)(event);\n        this.newSize = this.startHeight;\n      }\n    }\n\n    /**\n     * 'mousemove' event callback - refresh the handle and guide positions, cache the new row height.\n     *\n     * @private\n     * @param {MouseEvent} event\n     */\n\n  }, {\n    key: 'onMouseMove',\n    value: function onMouseMove(event) {\n      var _this6 = this;\n\n      if (this.pressed) {\n        this.currentHeight = this.startHeight + ((0, _event.pageY)(event) - this.startY);\n\n        (0, _array.arrayEach)(this.selectedRows, function (selectedRow) {\n          _this6.newSize = _this6.setManualSize(selectedRow, _this6.currentHeight);\n        });\n\n        this.refreshHandlePosition();\n        this.refreshGuidePosition();\n      }\n    }\n\n    /**\n     * 'mouseup' event callback - apply the row resizing.\n     *\n     * @private\n     *\n     * @fires Hooks#beforeRowResize\n     * @fires Hooks#afterRowResize\n     */\n\n  }, {\n    key: 'onMouseUp',\n    value: function onMouseUp() {\n      var _this7 = this;\n\n      var render = function render() {\n        _this7.hot.forceFullRender = true;\n        _this7.hot.view.render(); // updates all\n        _this7.hot.view.wt.wtOverlays.adjustElementsSize(true);\n      };\n      var runHooks = function runHooks(selectedRow, forceRender) {\n        _this7.hot.runHooks('beforeRowResize', selectedRow, _this7.newSize);\n\n        if (forceRender) {\n          render();\n        }\n\n        _this7.saveManualRowHeights();\n\n        _this7.hot.runHooks('afterRowResize', selectedRow, _this7.newSize, false);\n      };\n      if (this.pressed) {\n        this.hideHandleAndGuide();\n        this.pressed = false;\n\n        if (this.newSize !== this.startHeight) {\n          var selectedRowsLength = this.selectedRows.length;\n\n          if (selectedRowsLength > 1) {\n            (0, _array.arrayEach)(this.selectedRows, function (selectedRow) {\n              runHooks(selectedRow);\n            });\n            render();\n          } else {\n            (0, _array.arrayEach)(this.selectedRows, function (selectedRow) {\n              runHooks(selectedRow, true);\n            });\n          }\n        }\n\n        this.setupHandlePosition(this.currentTH);\n      }\n    }\n\n    /**\n     * Binds the mouse events.\n     *\n     * @private\n     */\n\n  }, {\n    key: 'bindEvents',\n    value: function bindEvents() {\n      var _this8 = this;\n\n      this.eventManager.addEventListener(this.hot.rootElement, 'mouseover', function (e) {\n        return _this8.onMouseOver(e);\n      });\n      this.eventManager.addEventListener(this.hot.rootElement, 'mousedown', function (e) {\n        return _this8.onMouseDown(e);\n      });\n      this.eventManager.addEventListener(window, 'mousemove', function (e) {\n        return _this8.onMouseMove(e);\n      });\n      this.eventManager.addEventListener(window, 'mouseup', function () {\n        return _this8.onMouseUp();\n      });\n    }\n\n    /**\n     * Sets the new height for specified row index.\n     *\n     * @param {Number} row Visual row index.\n     * @param {Number} height Row height.\n     * @returns {Number} Returns new height.\n     *\n     * @fires Hooks#modifyRow\n     */\n\n  }, {\n    key: 'setManualSize',\n    value: function setManualSize(row, height) {\n      var physicalRow = this.hot.runHooks('modifyRow', row);\n\n      this.manualRowHeights[physicalRow] = height;\n\n      return height;\n    }\n\n    /**\n     * Modifies the provided row height, based on the plugin settings.\n     *\n     * @private\n     * @param {Number} height Row height.\n     * @param {Number} row Visual row index.\n     * @returns {Number}\n     *\n     * @fires Hooks#modifyRow\n     */\n\n  }, {\n    key: 'onModifyRowHeight',\n    value: function onModifyRowHeight(height, row) {\n      if (this.enabled) {\n        var autoRowSizePlugin = this.hot.getPlugin('autoRowSize');\n        var autoRowHeightResult = autoRowSizePlugin ? autoRowSizePlugin.heights[row] : null;\n        var physicalRow = this.hot.runHooks('modifyRow', row);\n        var manualRowHeight = this.manualRowHeights[physicalRow];\n\n        if (manualRowHeight !== void 0 && (manualRowHeight === autoRowHeightResult || manualRowHeight > (height || 0))) {\n          return manualRowHeight;\n        }\n      }\n\n      return height;\n    }\n  }]);\n\n  return ManualRowResize;\n}(_base2.default);\n\n(0, _plugins.registerPlugin)('manualRowResize', ManualRowResize);\n\nexports.default = ManualRowResize;\n\n/***/ }),\n/* 350 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _base = __webpack_require__(10);\n\nvar _base2 = _interopRequireDefault(_base);\n\nvar _pluginHooks = __webpack_require__(16);\n\nvar _pluginHooks2 = _interopRequireDefault(_pluginHooks);\n\nvar _plugins = __webpack_require__(8);\n\nvar _event = __webpack_require__(13);\n\nvar _src = __webpack_require__(4);\n\nvar _cellsCollection = __webpack_require__(351);\n\nvar _cellsCollection2 = _interopRequireDefault(_cellsCollection);\n\nvar _cellCoords = __webpack_require__(97);\n\nvar _cellCoords2 = _interopRequireDefault(_cellCoords);\n\nvar _autofill = __webpack_require__(352);\n\nvar _autofill2 = _interopRequireDefault(_autofill);\n\nvar _selection = __webpack_require__(353);\n\nvar _selection2 = _interopRequireDefault(_selection);\n\nvar _toggleMerge = __webpack_require__(354);\n\nvar _toggleMerge2 = _interopRequireDefault(_toggleMerge);\n\nvar _array = __webpack_require__(2);\n\nvar _object = __webpack_require__(1);\n\nvar _console = __webpack_require__(58);\n\nvar _number = __webpack_require__(6);\n\nvar _utils = __webpack_require__(206);\n\n__webpack_require__(355);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n_pluginHooks2.default.getSingleton().register('beforeMergeCells');\n_pluginHooks2.default.getSingleton().register('afterMergeCells');\n_pluginHooks2.default.getSingleton().register('beforeUnmergeCells');\n_pluginHooks2.default.getSingleton().register('afterUnmergeCells');\n\nvar privatePool = new WeakMap();\n\n/**\n * @plugin MergeCells\n *\n * @description\n * Plugin, which allows merging cells in the table (using the initial configuration, API or context menu).\n *\n * @example\n *\n * ```js\n * const hot = new Handsontable(document.getElementById('example'), {\n *  data: getData(),\n *  mergeCells: [\n *    {row: 0, col: 3, rowspan: 3, colspan: 3},\n *    {row: 2, col: 6, rowspan: 2, colspan: 2},\n *    {row: 4, col: 8, rowspan: 3, colspan: 3}\n *  ],\n * ```\n */\n\nvar MergeCells = function (_BasePlugin) {\n  _inherits(MergeCells, _BasePlugin);\n\n  function MergeCells(hotInstance) {\n    _classCallCheck(this, MergeCells);\n\n    var _this = _possibleConstructorReturn(this, (MergeCells.__proto__ || Object.getPrototypeOf(MergeCells)).call(this, hotInstance));\n\n    privatePool.set(_this, {\n      lastDesiredCoords: null\n    });\n\n    /**\n     * A container for all the merged cells.\n     *\n     * @private\n     * @type {MergedCellsCollection}\n     */\n    _this.mergedCellsCollection = null;\n    /**\n     * Instance of the class responsible for all the autofill-related calculations.\n     *\n     * @private\n     * @type {AutofillCalculations}\n     */\n    _this.autofillCalculations = null;\n    /**\n     * Instance of the class responsible for the selection-related calculations.\n     *\n     * @private\n     * @type {SelectionCalculations}\n     */\n    _this.selectionCalculations = null;\n    return _this;\n  }\n\n  /**\n   * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}\n   * hook and if it returns `true` than the {@link MergeCells#enablePlugin} method is called.\n   *\n   * @returns {Boolean}\n   */\n\n\n  _createClass(MergeCells, [{\n    key: 'isEnabled',\n    value: function isEnabled() {\n      return !!this.hot.getSettings().mergeCells;\n    }\n\n    /**\n     * Enables the plugin functionality for this Handsontable instance.\n     */\n\n  }, {\n    key: 'enablePlugin',\n    value: function enablePlugin() {\n      var _this2 = this;\n\n      if (this.enabled) {\n        return;\n      }\n\n      this.mergedCellsCollection = new _cellsCollection2.default(this);\n      this.autofillCalculations = new _autofill2.default(this);\n      this.selectionCalculations = new _selection2.default(this);\n\n      this.addHook('afterInit', function () {\n        return _this2.onAfterInit.apply(_this2, arguments);\n      });\n      this.addHook('beforeKeyDown', function () {\n        return _this2.onBeforeKeyDown.apply(_this2, arguments);\n      });\n      this.addHook('modifyTransformStart', function () {\n        return _this2.onModifyTransformStart.apply(_this2, arguments);\n      });\n      this.addHook('afterModifyTransformStart', function () {\n        return _this2.onAfterModifyTransformStart.apply(_this2, arguments);\n      });\n      this.addHook('modifyTransformEnd', function () {\n        return _this2.onModifyTransformEnd.apply(_this2, arguments);\n      });\n      this.addHook('modifyGetCellCoords', function () {\n        return _this2.onModifyGetCellCoords.apply(_this2, arguments);\n      });\n      this.addHook('beforeSetRangeEnd', function () {\n        return _this2.onBeforeSetRangeEnd.apply(_this2, arguments);\n      });\n      this.addHook('afterIsMultipleSelection', function () {\n        return _this2.onAfterIsMultipleSelection.apply(_this2, arguments);\n      });\n      this.addHook('afterRenderer', function () {\n        return _this2.onAfterRenderer.apply(_this2, arguments);\n      });\n      this.addHook('afterContextMenuDefaultOptions', function () {\n        return _this2.addMergeActionsToContextMenu.apply(_this2, arguments);\n      });\n      this.addHook('afterGetCellMeta', function () {\n        return _this2.onAfterGetCellMeta.apply(_this2, arguments);\n      });\n      this.addHook('afterViewportRowCalculatorOverride', function () {\n        return _this2.onAfterViewportRowCalculatorOverride.apply(_this2, arguments);\n      });\n      this.addHook('afterViewportColumnCalculatorOverride', function () {\n        return _this2.onAfterViewportColumnCalculatorOverride.apply(_this2, arguments);\n      });\n      this.addHook('modifyAutofillRange', function () {\n        return _this2.onModifyAutofillRange.apply(_this2, arguments);\n      });\n      this.addHook('afterCreateCol', function () {\n        return _this2.onAfterCreateCol.apply(_this2, arguments);\n      });\n      this.addHook('afterRemoveCol', function () {\n        return _this2.onAfterRemoveCol.apply(_this2, arguments);\n      });\n      this.addHook('afterCreateRow', function () {\n        return _this2.onAfterCreateRow.apply(_this2, arguments);\n      });\n      this.addHook('afterRemoveRow', function () {\n        return _this2.onAfterRemoveRow.apply(_this2, arguments);\n      });\n      this.addHook('afterChange', function () {\n        return _this2.onAfterChange.apply(_this2, arguments);\n      });\n      this.addHook('beforeDrawBorders', function () {\n        return _this2.onBeforeDrawAreaBorders.apply(_this2, arguments);\n      });\n      this.addHook('afterDrawSelection', function () {\n        return _this2.onAfterDrawSelection.apply(_this2, arguments);\n      });\n      this.addHook('beforeRemoveCellClassNames', function () {\n        return _this2.onBeforeRemoveCellClassNames.apply(_this2, arguments);\n      });\n\n      _get(MergeCells.prototype.__proto__ || Object.getPrototypeOf(MergeCells.prototype), 'enablePlugin', this).call(this);\n    }\n\n    /**\n     * Disables the plugin functionality for this Handsontable instance.\n     */\n\n  }, {\n    key: 'disablePlugin',\n    value: function disablePlugin() {\n      this.clearCollections();\n      this.hot.render();\n      _get(MergeCells.prototype.__proto__ || Object.getPrototypeOf(MergeCells.prototype), 'disablePlugin', this).call(this);\n    }\n\n    /**\n     * Updates the plugin state. This method is executed when {@link Core#updateSettings} is invoked.\n     */\n\n  }, {\n    key: 'updatePlugin',\n    value: function updatePlugin() {\n      var settings = this.hot.getSettings().mergeCells;\n\n      this.disablePlugin();\n      this.enablePlugin();\n\n      this.generateFromSettings(settings);\n\n      _get(MergeCells.prototype.__proto__ || Object.getPrototypeOf(MergeCells.prototype), 'updatePlugin', this).call(this);\n    }\n\n    /**\n     * Validates a single setting object, represented by a single merged cell information object.\n     *\n     * @private\n     * @param {Object} setting An object with `row`, `col`, `rowspan` and `colspan` properties.\n     * @return {Boolean}\n     */\n\n  }, {\n    key: 'validateSetting',\n    value: function validateSetting(setting) {\n      var valid = true;\n\n      if (!setting) {\n        return false;\n      }\n\n      if (_cellCoords2.default.containsNegativeValues(setting)) {\n        (0, _console.warn)(_cellCoords2.default.NEGATIVE_VALUES_WARNING(setting));\n\n        valid = false;\n      } else if (_cellCoords2.default.isOutOfBounds(setting, this.hot.countRows(), this.hot.countCols())) {\n        (0, _console.warn)(_cellCoords2.default.IS_OUT_OF_BOUNDS_WARNING(setting));\n\n        valid = false;\n      } else if (_cellCoords2.default.isSingleCell(setting)) {\n        (0, _console.warn)(_cellCoords2.default.IS_SINGLE_CELL(setting));\n\n        valid = false;\n      } else if (_cellCoords2.default.containsZeroSpan(setting)) {\n        (0, _console.warn)(_cellCoords2.default.ZERO_SPAN_WARNING(setting));\n\n        valid = false;\n      }\n\n      return valid;\n    }\n\n    /**\n     * Generates the merged cells from the settings provided to the plugin.\n     *\n     * @private\n     * @param {Array|Boolean} settings The settings provided to the plugin.\n     */\n\n  }, {\n    key: 'generateFromSettings',\n    value: function generateFromSettings(settings) {\n      var _this3 = this;\n\n      if (Array.isArray(settings)) {\n        var _hot;\n\n        var populationArgumentsList = [];\n\n        (0, _array.arrayEach)(settings, function (setting) {\n          if (!_this3.validateSetting(setting)) {\n            return;\n          }\n\n          var highlight = new _src.CellCoords(setting.row, setting.col);\n          var rangeEnd = new _src.CellCoords(setting.row + setting.rowspan - 1, setting.col + setting.colspan - 1);\n          var mergeRange = new _src.CellRange(highlight, highlight, rangeEnd);\n\n          populationArgumentsList.push(_this3.mergeRange(mergeRange, true, true));\n        });\n\n        // remove 'empty' setting objects, caused by improper merge range declarations\n        populationArgumentsList = populationArgumentsList.filter(function (value) {\n          return value !== true;\n        });\n\n        var bulkPopulationData = this.getBulkCollectionData(populationArgumentsList);\n\n        (_hot = this.hot).populateFromArray.apply(_hot, _toConsumableArray(bulkPopulationData));\n      }\n    }\n\n    /**\n     * Generates a bulk set of all the data to be populated to fill the data \"under\" the added merged cells.\n     *\n     * @private\n     * @param {Array} populationArgumentsList Array in a form of `[row, column, dataUnderCollection]`.\n     * @return {Array} Array in a form of `[row, column, dataOfAllCollections]`.\n     */\n\n  }, {\n    key: 'getBulkCollectionData',\n    value: function getBulkCollectionData(populationArgumentsList) {\n      var _hot2;\n\n      var populationDataRange = this.getBulkCollectionDataRange(populationArgumentsList);\n      var dataAtRange = (_hot2 = this.hot).getData.apply(_hot2, _toConsumableArray(populationDataRange));\n      var newDataAtRange = dataAtRange.splice(0);\n\n      (0, _array.arrayEach)(populationArgumentsList, function (mergedCellArguments) {\n        var _mergedCellArguments = _slicedToArray(mergedCellArguments, 3),\n            mergedCellRowIndex = _mergedCellArguments[0],\n            mergedCellColumnIndex = _mergedCellArguments[1],\n            mergedCellData = _mergedCellArguments[2];\n\n        (0, _array.arrayEach)(mergedCellData, function (mergedCellRow, rowIndex) {\n          (0, _array.arrayEach)(mergedCellRow, function (mergedCellElement, columnIndex) {\n            newDataAtRange[mergedCellRowIndex - populationDataRange[0] + rowIndex][mergedCellColumnIndex - populationDataRange[1] + columnIndex] = mergedCellElement;\n          });\n        });\n      });\n\n      return [populationDataRange[0], populationDataRange[1], newDataAtRange];\n    }\n\n    /**\n     * Gets the range of combined data ranges provided in a form of an array of arrays ([row, column, dataUnderCollection])\n     *\n     * @private\n     * @param {Array} populationArgumentsList Array containing argument lists for the `populateFromArray` method - row, column and data for population.\n     * @return {Array[]} Start and end coordinates of the merged cell range. (in a form of [rowIndex, columnIndex])\n     */\n\n  }, {\n    key: 'getBulkCollectionDataRange',\n    value: function getBulkCollectionDataRange(populationArgumentsList) {\n      var start = [0, 0];\n      var end = [0, 0];\n      var mergedCellRow = null;\n      var mergedCellColumn = null;\n      var mergedCellData = null;\n\n      (0, _array.arrayEach)(populationArgumentsList, function (mergedCellArguments) {\n        mergedCellRow = mergedCellArguments[0];\n        mergedCellColumn = mergedCellArguments[1];\n        mergedCellData = mergedCellArguments[2];\n\n        start[0] = Math.min(mergedCellRow, start[0]);\n        start[1] = Math.min(mergedCellColumn, start[1]);\n        end[0] = Math.max(mergedCellRow + mergedCellData.length - 1, end[0]);\n        end[1] = Math.max(mergedCellColumn + mergedCellData[0].length - 1, end[1]);\n      });\n\n      return [].concat(start, end);\n    }\n\n    /**\n     * Clears the merged cells from the merged cell container.\n     */\n\n  }, {\n    key: 'clearCollections',\n    value: function clearCollections() {\n      this.mergedCellsCollection.clear();\n    }\n\n    /**\n     * Returns `true` if a range is mergeable.\n     *\n     * @private\n     * @param {Object} newMergedCellInfo Merged cell information object to test.\n     * @param {Boolean} [auto=false] `true` if triggered at initialization.\n     * @returns {Boolean}\n     */\n\n  }, {\n    key: 'canMergeRange',\n    value: function canMergeRange(newMergedCellInfo) {\n      var auto = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n      return auto ? true : this.validateSetting(newMergedCellInfo);\n    }\n\n    /**\n     * Merge or unmerge, based on last selected range.\n     *\n     * @private\n     */\n\n  }, {\n    key: 'toggleMergeOnSelection',\n    value: function toggleMergeOnSelection() {\n      var currentRange = this.hot.getSelectedRangeLast();\n\n      if (!currentRange) {\n        return;\n      }\n\n      currentRange.setDirection('NW-SE');\n\n      var from = currentRange.from,\n          to = currentRange.to;\n\n\n      this.toggleMerge(currentRange);\n      this.hot.selectCell(from.row, from.col, to.row, to.col, false);\n    }\n\n    /**\n     * Merges the selection provided as a cell range.\n     *\n     * @param {CellRange} [cellRange] Selection cell range.\n     */\n\n  }, {\n    key: 'mergeSelection',\n    value: function mergeSelection() {\n      var cellRange = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.hot.getSelectedRangeLast();\n\n      if (!cellRange) {\n        return;\n      }\n\n      cellRange.setDirection('NW-SE');\n\n      var from = cellRange.from,\n          to = cellRange.to;\n\n\n      this.unmergeRange(cellRange, true);\n      this.mergeRange(cellRange);\n      this.hot.selectCell(from.row, from.col, to.row, to.col, false);\n    }\n\n    /**\n     * Unmerges the selection provided as a cell range.\n     *\n     * @param {CellRange} [cellRange] Selection cell range.\n     */\n\n  }, {\n    key: 'unmergeSelection',\n    value: function unmergeSelection() {\n      var cellRange = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.hot.getSelectedRangeLast();\n\n      if (!cellRange) {\n        return;\n      }\n\n      var from = cellRange.from,\n          to = cellRange.to;\n\n\n      this.unmergeRange(cellRange, true);\n      this.hot.selectCell(from.row, from.col, to.row, to.col, false);\n    }\n\n    /**\n     * Merges cells in the provided cell range.\n     *\n     * @private\n     * @param {CellRange} cellRange Cell range to merge.\n     * @param {Boolean} [auto=false] `true` if is called automatically, e.g. at initialization.\n     * @param {Boolean} [preventPopulation=false] `true`, if the method should not run `populateFromArray` at the end, but rather return its arguments.\n     * @returns {Array|Boolean} Returns an array of [row, column, dataUnderCollection] if preventPopulation is set to true. If the the merging process went successful, it returns `true`, otherwise - `false`.\n     * @fires Hooks#beforeMergeCells\n     * @fires Hooks#afterMergeCells\n     */\n\n  }, {\n    key: 'mergeRange',\n    value: function mergeRange(cellRange) {\n      var _this4 = this;\n\n      var auto = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n      var preventPopulation = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n      var topLeft = cellRange.getTopLeftCorner();\n      var bottomRight = cellRange.getBottomRightCorner();\n      var mergeParent = {\n        row: topLeft.row,\n        col: topLeft.col,\n        rowspan: bottomRight.row - topLeft.row + 1,\n        colspan: bottomRight.col - topLeft.col + 1\n      };\n      var clearedData = [];\n      var populationInfo = null;\n\n      if (!this.canMergeRange(mergeParent, auto)) {\n        return false;\n      }\n\n      this.hot.runHooks('beforeMergeCells', cellRange, auto);\n\n      (0, _number.rangeEach)(0, mergeParent.rowspan - 1, function (i) {\n        (0, _number.rangeEach)(0, mergeParent.colspan - 1, function (j) {\n          var clearedValue = null;\n\n          if (!clearedData[i]) {\n            clearedData[i] = [];\n          }\n\n          if (i === 0 && j === 0) {\n            clearedValue = _this4.hot.getDataAtCell(mergeParent.row, mergeParent.col);\n          } else {\n            _this4.hot.setCellMeta(mergeParent.row + i, mergeParent.col + j, 'hidden', true);\n          }\n\n          clearedData[i][j] = clearedValue;\n        });\n      });\n\n      this.hot.setCellMeta(mergeParent.row, mergeParent.col, 'spanned', true);\n\n      var mergedCellAdded = this.mergedCellsCollection.add(mergeParent);\n\n      if (mergedCellAdded) {\n        if (preventPopulation) {\n          populationInfo = [mergeParent.row, mergeParent.col, clearedData];\n        } else {\n          this.hot.populateFromArray(mergeParent.row, mergeParent.col, clearedData, void 0, void 0, this.pluginName);\n        }\n\n        this.hot.runHooks('afterMergeCells', cellRange, mergeParent, auto);\n\n        return populationInfo;\n      }\n\n      return true;\n    }\n\n    /**\n     * Unmerges the selection provided as a cell range. If no cell range is provided, it uses the current selection.\n     *\n     * @private\n     * @param {CellRange} cellRange Selection cell range.\n     * @param {Boolean} [auto=false] `true` if called automatically by the plugin.\n     *\n     * @fires Hooks#beforeUnmergeCells\n     * @fires Hooks#afterUnmergeCells\n     */\n\n  }, {\n    key: 'unmergeRange',\n    value: function unmergeRange(cellRange) {\n      var _this5 = this;\n\n      var auto = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n      var mergedCells = this.mergedCellsCollection.getWithinRange(cellRange);\n\n      if (!mergedCells) {\n        return;\n      }\n\n      this.hot.runHooks('beforeUnmergeCells', cellRange, auto);\n\n      (0, _array.arrayEach)(mergedCells, function (currentCollection) {\n        _this5.mergedCellsCollection.remove(currentCollection.row, currentCollection.col);\n\n        (0, _number.rangeEach)(0, currentCollection.rowspan - 1, function (i) {\n          (0, _number.rangeEach)(0, currentCollection.colspan - 1, function (j) {\n            _this5.hot.removeCellMeta(currentCollection.row + i, currentCollection.col + j, 'hidden');\n          });\n        });\n\n        _this5.hot.removeCellMeta(currentCollection.row, currentCollection.col, 'spanned');\n      });\n\n      this.hot.render();\n      this.hot.runHooks('afterUnmergeCells', cellRange, auto);\n    }\n\n    /**\n     * Merges or unmerges, based on the cell range provided as `cellRange`.\n     *\n     * @private\n     * @param {CellRange} cellRange The cell range to merge or unmerged.\n     */\n\n  }, {\n    key: 'toggleMerge',\n    value: function toggleMerge(cellRange) {\n      var mergedCell = this.mergedCellsCollection.get(cellRange.from.row, cellRange.from.col);\n      var mergedCellCoversWholeRange = mergedCell.row === cellRange.from.row && mergedCell.col === cellRange.from.col && mergedCell.row + mergedCell.rowspan - 1 === cellRange.to.row && mergedCell.col + mergedCell.colspan - 1 === cellRange.to.col;\n\n      if (mergedCellCoversWholeRange) {\n        this.unmergeRange(cellRange);\n      } else {\n        this.mergeSelection(cellRange);\n      }\n    }\n\n    /**\n     * Merges the specified range.\n     *\n     * @param {Number} startRow Start row of the merged cell.\n     * @param {Number} startColumn Start column of the merged cell.\n     * @param {Number} endRow End row of the merged cell.\n     * @param {Number} endColumn End column of the merged cell.\n     * @fires Hooks#beforeMergeCells\n     * @fires Hooks#afterMergeCells\n     */\n\n  }, {\n    key: 'merge',\n    value: function merge(startRow, startColumn, endRow, endColumn) {\n      var start = new _src.CellCoords(startRow, startColumn);\n      var end = new _src.CellCoords(endRow, endColumn);\n\n      this.mergeRange(new _src.CellRange(start, start, end));\n    }\n\n    /**\n     * Unmerges the merged cell in the provided range.\n     *\n     * @param {Number} startRow Start row of the merged cell.\n     * @param {Number} startColumn Start column of the merged cell.\n     * @param {Number} endRow End row of the merged cell.\n     * @param {Number} endColumn End column of the merged cell.\n     * @fires Hooks#beforeUnmergeCells\n     * @fires Hooks#afterUnmergeCells\n     */\n\n  }, {\n    key: 'unmerge',\n    value: function unmerge(startRow, startColumn, endRow, endColumn) {\n      var start = new _src.CellCoords(startRow, startColumn);\n      var end = new _src.CellCoords(endRow, endColumn);\n\n      this.unmergeRange(new _src.CellRange(start, start, end));\n    }\n\n    /**\n     * `afterInit` hook callback.\n     *\n     * @private\n     */\n\n  }, {\n    key: 'onAfterInit',\n    value: function onAfterInit() {\n      this.generateFromSettings(this.hot.getSettings().mergeCells);\n      this.hot.render();\n    }\n\n    /**\n     * `beforeKeyDown` hook callback.\n     *\n     * @private\n     * @param {KeyboardEvent} event The `keydown` event object.\n     */\n\n  }, {\n    key: 'onBeforeKeyDown',\n    value: function onBeforeKeyDown(event) {\n      var ctrlDown = (event.ctrlKey || event.metaKey) && !event.altKey;\n\n      if (ctrlDown && event.keyCode === 77) {\n        // CTRL + M\n        this.toggleMerge(this.hot.getSelectedRangeLast());\n\n        this.hot.render();\n        (0, _event.stopImmediatePropagation)(event);\n      }\n    }\n\n    /**\n     * Modifies the information on whether the current selection contains multiple cells. The `afterIsMultipleSelection` hook callback.\n     *\n     * @private\n     * @param {Boolean} isMultiple\n     * @returns {Boolean}\n     */\n\n  }, {\n    key: 'onAfterIsMultipleSelection',\n    value: function onAfterIsMultipleSelection(isMultiple) {\n      if (isMultiple) {\n        var mergedCells = this.mergedCellsCollection.mergedCells;\n        var selectionRange = this.hot.getSelectedRangeLast();\n\n        for (var group = 0; group < mergedCells.length; group += 1) {\n          if (selectionRange.highlight.row === mergedCells[group].row && selectionRange.highlight.col === mergedCells[group].col && selectionRange.to.row === mergedCells[group].row + mergedCells[group].rowspan - 1 && selectionRange.to.col === mergedCells[group].col + mergedCells[group].colspan - 1) {\n            return false;\n          }\n        }\n      }\n\n      return isMultiple;\n    }\n\n    /**\n     * `modifyTransformStart` hook callback.\n     *\n     * @private\n     * @param {Object} delta The transformation delta.\n     */\n\n  }, {\n    key: 'onModifyTransformStart',\n    value: function onModifyTransformStart(delta) {\n      var priv = privatePool.get(this);\n      var currentlySelectedRange = this.hot.getSelectedRangeLast();\n      var newDelta = {\n        row: delta.row,\n        col: delta.col\n      };\n      var nextPosition = null;\n      var currentPosition = new _src.CellCoords(currentlySelectedRange.highlight.row, currentlySelectedRange.highlight.col);\n      var mergedParent = this.mergedCellsCollection.get(currentPosition.row, currentPosition.col);\n\n      if (!priv.lastDesiredCoords) {\n        priv.lastDesiredCoords = new _src.CellCoords(null, null);\n      }\n\n      if (mergedParent) {\n        // only merge selected\n        var mergeTopLeft = new _src.CellCoords(mergedParent.row, mergedParent.col);\n        var mergeBottomRight = new _src.CellCoords(mergedParent.row + mergedParent.rowspan - 1, mergedParent.col + mergedParent.colspan - 1);\n        var mergeRange = new _src.CellRange(mergeTopLeft, mergeTopLeft, mergeBottomRight);\n\n        if (!mergeRange.includes(priv.lastDesiredCoords)) {\n          priv.lastDesiredCoords = new _src.CellCoords(null, null); // reset outdated version of lastDesiredCoords\n        }\n\n        newDelta.row = priv.lastDesiredCoords.row ? priv.lastDesiredCoords.row - currentPosition.row : newDelta.row;\n        newDelta.col = priv.lastDesiredCoords.col ? priv.lastDesiredCoords.col - currentPosition.col : newDelta.col;\n\n        if (delta.row > 0) {\n          // moving down\n          newDelta.row = mergedParent.row + mergedParent.rowspan - 1 - currentPosition.row + delta.row;\n        } else if (delta.row < 0) {\n          // moving up\n          newDelta.row = currentPosition.row - mergedParent.row + delta.row;\n        }\n\n        if (delta.col > 0) {\n          // moving right\n          newDelta.col = mergedParent.col + mergedParent.colspan - 1 - currentPosition.col + delta.col;\n        } else if (delta.col < 0) {\n          // moving left\n          newDelta.col = currentPosition.col - mergedParent.col + delta.col;\n        }\n      }\n\n      nextPosition = new _src.CellCoords(currentlySelectedRange.highlight.row + newDelta.row, currentlySelectedRange.highlight.col + newDelta.col);\n\n      var nextParentIsMerged = this.mergedCellsCollection.get(nextPosition.row, nextPosition.col);\n\n      if (nextParentIsMerged) {\n        // skipping the invisible cells in the merge range\n        priv.lastDesiredCoords = nextPosition;\n        newDelta = {\n          row: nextParentIsMerged.row - currentPosition.row,\n          col: nextParentIsMerged.col - currentPosition.col\n        };\n      }\n\n      if (newDelta.row !== 0) {\n        delta.row = newDelta.row;\n      }\n      if (newDelta.col !== 0) {\n        delta.col = newDelta.col;\n      }\n    }\n\n    /**\n     * `modifyTransformEnd` hook callback. Needed to handle \"jumping over\" merged merged cells, while selecting.\n     *\n     * @private\n     * @param {Object} delta The transformation delta.\n     */\n\n  }, {\n    key: 'onModifyTransformEnd',\n    value: function onModifyTransformEnd(delta) {\n      var _this6 = this;\n\n      var currentSelectionRange = this.hot.getSelectedRangeLast();\n      var newDelta = (0, _object.clone)(delta);\n      var newSelectionRange = this.selectionCalculations.getUpdatedSelectionRange(currentSelectionRange, delta);\n      var tempDelta = (0, _object.clone)(newDelta);\n\n      var mergedCellsWithinRange = this.mergedCellsCollection.getWithinRange(newSelectionRange, true);\n\n      do {\n        tempDelta = (0, _object.clone)(newDelta);\n        this.selectionCalculations.getUpdatedSelectionRange(currentSelectionRange, newDelta);\n\n        (0, _array.arrayEach)(mergedCellsWithinRange, function (mergedCell) {\n          _this6.selectionCalculations.snapDelta(newDelta, currentSelectionRange, mergedCell);\n        });\n      } while (newDelta.row !== tempDelta.row || newDelta.col !== tempDelta.col);\n\n      delta.row = newDelta.row;\n      delta.col = newDelta.col;\n    }\n\n    /**\n     * `modifyGetCellCoords` hook callback. Swaps the `getCell` coords with the merged parent coords.\n     *\n     * @private\n     * @param {Number} row Row index.\n     * @param {Number} column Column index.\n     * @returns {Array}\n     */\n\n  }, {\n    key: 'onModifyGetCellCoords',\n    value: function onModifyGetCellCoords(row, column) {\n      var mergeParent = this.mergedCellsCollection.get(row, column);\n\n      return mergeParent ? [mergeParent.row, mergeParent.col, mergeParent.row + mergeParent.rowspan - 1, mergeParent.col + mergeParent.colspan - 1] : void 0;\n    }\n\n    /**\n     * `afterContextMenuDefaultOptions` hook callback.\n     *\n     * @private\n     * @param {Object} defaultOptions The default context menu options.\n     */\n\n  }, {\n    key: 'addMergeActionsToContextMenu',\n    value: function addMergeActionsToContextMenu(defaultOptions) {\n      defaultOptions.items.push({\n        name: '---------'\n      }, (0, _toggleMerge2.default)(this));\n    }\n\n    /**\n     * `afterRenderer` hook callback.\n     *\n     * @private\n     * @param {HTMLElement} TD The cell to be modified.\n     * @param {Number} row Row index.\n     * @param {Number} col Column index.\n     */\n\n  }, {\n    key: 'onAfterRenderer',\n    value: function onAfterRenderer(TD, row, col) {\n      var mergedCell = this.mergedCellsCollection.get(row, col);\n\n      (0, _utils.applySpanProperties)(TD, mergedCell, row, col);\n    }\n\n    /**\n     * `beforeSetRangeEnd` hook callback.\n     * While selecting cells with keyboard or mouse, make sure that rectangular area is expanded to the extent of the merged cell\n     *\n     * @private\n     * @param {Object} coords Cell coords.\n     */\n\n  }, {\n    key: 'onBeforeSetRangeEnd',\n    value: function onBeforeSetRangeEnd(coords) {\n      var selRange = this.hot.getSelectedRangeLast();\n      selRange.highlight = new _src.CellCoords(selRange.highlight.row, selRange.highlight.col); // clone in case we will modify its reference\n      selRange.to = coords;\n      var rangeExpanded = false;\n\n      if (selRange.from.row === 0 && selRange.to.row === this.hot.countRows() - 1 || selRange.from.col === 0 && selRange.to.col === this.hot.countCols() - 1) {\n        return;\n      }\n\n      do {\n        rangeExpanded = false;\n\n        for (var i = 0; i < this.mergedCellsCollection.mergedCells.length; i += 1) {\n          var cellInfo = this.mergedCellsCollection.mergedCells[i];\n          var mergedCellRange = cellInfo.getRange();\n\n          if (selRange.expandByRange(mergedCellRange)) {\n            coords.row = selRange.to.row;\n            coords.col = selRange.to.col;\n\n            rangeExpanded = true;\n          }\n        }\n      } while (rangeExpanded);\n    }\n\n    /**\n     * The `afterGetCellMeta` hook callback.\n     *\n     * @private\n     * @param {Number} row Row index.\n     * @param {Number} col Column index.\n     * @param {Object} cellProperties The cell properties object.\n     */\n\n  }, {\n    key: 'onAfterGetCellMeta',\n    value: function onAfterGetCellMeta(row, col, cellProperties) {\n      var mergeParent = this.mergedCellsCollection.get(row, col);\n\n      if (mergeParent && (mergeParent.row !== row || mergeParent.col !== col)) {\n        cellProperties.copyable = false;\n      }\n    }\n\n    /**\n     * `afterViewportRowCalculatorOverride` hook callback.\n     *\n     * @private\n     * @param {Object} calc The row calculator object.\n     */\n\n  }, {\n    key: 'onAfterViewportRowCalculatorOverride',\n    value: function onAfterViewportRowCalculatorOverride(calc) {\n      var _this7 = this;\n\n      var colCount = this.hot.countCols();\n      var mergeParent = void 0;\n\n      (0, _number.rangeEach)(0, colCount - 1, function (c) {\n        mergeParent = _this7.mergedCellsCollection.get(calc.startRow, c);\n        if (mergeParent) {\n          if (mergeParent.row < calc.startRow) {\n            calc.startRow = mergeParent.row;\n            return _this7.onAfterViewportRowCalculatorOverride.call(_this7, calc); // recursively search upwards\n          }\n        }\n\n        mergeParent = _this7.mergedCellsCollection.get(calc.endRow, c);\n\n        if (mergeParent) {\n          var mergeEnd = mergeParent.row + mergeParent.rowspan - 1;\n          if (mergeEnd > calc.endRow) {\n            calc.endRow = mergeEnd;\n            return _this7.onAfterViewportRowCalculatorOverride.call(_this7, calc); // recursively search upwards\n          }\n        }\n\n        return true;\n      });\n    }\n\n    /**\n     * `afterViewportColumnCalculatorOverride` hook callback.\n     *\n     * @private\n     * @param {Object} calc The column calculator object.\n     */\n\n  }, {\n    key: 'onAfterViewportColumnCalculatorOverride',\n    value: function onAfterViewportColumnCalculatorOverride(calc) {\n      var _this8 = this;\n\n      var rowCount = this.hot.countRows();\n      var mergeParent = void 0;\n\n      (0, _number.rangeEach)(0, rowCount - 1, function (r) {\n        mergeParent = _this8.mergedCellsCollection.get(r, calc.startColumn);\n\n        if (mergeParent && mergeParent.col < calc.startColumn) {\n          calc.startColumn = mergeParent.col;\n          return _this8.onAfterViewportColumnCalculatorOverride.call(_this8, calc); // recursively search upwards\n        }\n\n        mergeParent = _this8.mergedCellsCollection.get(r, calc.endColumn);\n\n        if (mergeParent) {\n          var mergeEnd = mergeParent.col + mergeParent.colspan - 1;\n          if (mergeEnd > calc.endColumn) {\n            calc.endColumn = mergeEnd;\n            return _this8.onAfterViewportColumnCalculatorOverride.call(_this8, calc); // recursively search upwards\n          }\n        }\n\n        return true;\n      });\n    }\n\n    /**\n     * The `modifyAutofillRange` hook callback.\n     *\n     * @private\n     * @param {Array} drag The drag area coordinates.\n     * @param {Array} select The selection information.\n     * @return {Array} The new drag area.\n     */\n\n  }, {\n    key: 'onModifyAutofillRange',\n    value: function onModifyAutofillRange(drag, select) {\n      this.autofillCalculations.correctSelectionAreaSize(select);\n      var dragDirection = this.autofillCalculations.getDirection(select, drag);\n      var dragArea = drag;\n\n      if (this.autofillCalculations.dragAreaOverlapsCollections(select, dragArea, dragDirection)) {\n        dragArea = select;\n\n        return dragArea;\n      }\n\n      var mergedCellsWithinSelectionArea = this.mergedCellsCollection.getWithinRange({\n        from: { row: select[0], col: select[1] },\n        to: { row: select[2], col: select[3] }\n      });\n\n      if (!mergedCellsWithinSelectionArea) {\n        return dragArea;\n      }\n\n      dragArea = this.autofillCalculations.snapDragArea(select, dragArea, dragDirection, mergedCellsWithinSelectionArea);\n\n      return dragArea;\n    }\n\n    /**\n     * `afterCreateCol` hook callback.\n     *\n     * @private\n     * @param {Number} column Column index.\n     * @param {Number} count Number of created columns.\n     */\n\n  }, {\n    key: 'onAfterCreateCol',\n    value: function onAfterCreateCol(column, count) {\n      this.mergedCellsCollection.shiftCollections('right', column, count);\n    }\n\n    /**\n     * `afterRemoveCol` hook callback.\n     *\n     * @private\n     * @param {Number} column Column index.\n     * @param {Number} count Number of removed columns.\n     */\n\n  }, {\n    key: 'onAfterRemoveCol',\n    value: function onAfterRemoveCol(column, count) {\n      this.mergedCellsCollection.shiftCollections('left', column, count);\n    }\n\n    /**\n     * `afterCreateRow` hook callback.\n     *\n     * @private\n     * @param {Number} row Row index.\n     * @param {Number} count Number of created rows.\n     * @param {String} source Source of change.\n     */\n\n  }, {\n    key: 'onAfterCreateRow',\n    value: function onAfterCreateRow(row, count, source) {\n      if (source === 'auto') {\n        return;\n      }\n\n      this.mergedCellsCollection.shiftCollections('down', row, count);\n    }\n\n    /**\n     * `afterRemoveRow` hook callback.\n     *\n     * @private\n     * @param {Number} row Row index.\n     * @param {Number} count Number of removed rows.\n     */\n\n  }, {\n    key: 'onAfterRemoveRow',\n    value: function onAfterRemoveRow(row, count) {\n      this.mergedCellsCollection.shiftCollections('up', row, count);\n    }\n\n    /**\n     * `afterChange` hook callback. Used to propagate merged cells after using Autofill.\n     *\n     * @private\n     * @param {Array} changes The changes array.\n     * @param {String} source Determines the source of the change.\n     */\n\n  }, {\n    key: 'onAfterChange',\n    value: function onAfterChange(changes, source) {\n      if (source !== 'Autofill.fill') {\n        return;\n      }\n\n      this.autofillCalculations.recreateAfterDataPopulation(changes);\n    }\n\n    /**\n     * `beforeDrawAreaBorders` hook callback.\n     *\n     * @private\n     * @param {Array} corners Coordinates of the area corners.\n     * @param {String} className Class name for the area.\n     */\n\n  }, {\n    key: 'onBeforeDrawAreaBorders',\n    value: function onBeforeDrawAreaBorders(corners, className) {\n      if (className && className === 'area') {\n        var selectedRange = this.hot.getSelectedRangeLast();\n        var mergedCellsWithinRange = this.mergedCellsCollection.getWithinRange(selectedRange);\n\n        (0, _array.arrayEach)(mergedCellsWithinRange, function (mergedCell) {\n          if (selectedRange.getBottomRightCorner().row === mergedCell.getLastRow() && selectedRange.getBottomRightCorner().col === mergedCell.getLastColumn()) {\n            corners[2] = mergedCell.row;\n            corners[3] = mergedCell.col;\n          }\n        });\n      }\n    }\n\n    /**\n     * `afterModifyTransformStart` hook callback. Fixes a problem with navigating through merged cells at the edges of the table\n     * with the ENTER/SHIFT+ENTER/TAB/SHIFT+TAB keys.\n     *\n     * @private\n     * @param {CellCoords} coords Coordinates of the to-be-selected cell.\n     * @param {Number} rowTransformDir Row transformation direction (negative value = up, 0 = none, positive value = down)\n     * @param {Number} colTransformDir Column transformation direction (negative value = up, 0 = none, positive value = down)\n     */\n\n  }, {\n    key: 'onAfterModifyTransformStart',\n    value: function onAfterModifyTransformStart(coords, rowTransformDir, colTransformDir) {\n      if (!this.enabled) {\n        return;\n      }\n\n      var mergedCellAtCoords = this.mergedCellsCollection.get(coords.row, coords.col);\n\n      if (!mergedCellAtCoords) {\n        return;\n      }\n\n      var goingDown = rowTransformDir > 0;\n      var goingUp = rowTransformDir < 0;\n      var goingLeft = colTransformDir < 0;\n      var goingRight = colTransformDir > 0;\n      var mergedCellOnBottomEdge = mergedCellAtCoords.row + mergedCellAtCoords.rowspan - 1 === this.hot.countRows() - 1;\n      var mergedCellOnTopEdge = mergedCellAtCoords.row === 0;\n      var mergedCellOnRightEdge = mergedCellAtCoords.col + mergedCellAtCoords.colspan - 1 === this.hot.countCols() - 1;\n      var mergedCellOnLeftEdge = mergedCellAtCoords.col === 0;\n\n      if (goingDown && mergedCellOnBottomEdge || goingUp && mergedCellOnTopEdge || goingRight && mergedCellOnRightEdge || goingLeft && mergedCellOnLeftEdge) {\n        coords.row = mergedCellAtCoords.row;\n        coords.col = mergedCellAtCoords.col;\n      }\n    }\n\n    /**\n     * `afterDrawSelection` hook callback. Used to add the additional class name for the entirely-selected merged cells.\n     *\n     * @private\n     * @param {Number} currentRow Row index of the currently processed cell.\n     * @param {Number} currentColumn Column index of the currently cell.\n     * @param {Array} cornersOfSelection Array of the current selection in a form of `[startRow, startColumn, endRow, endColumn]`.\n     * @param {Number|undefined} layerLevel Number indicating which layer of selection is currently processed.\n     * @returns {String|undefined} A `String`, which will act as an additional `className` to be added to the currently processed cell.\n     */\n\n  }, {\n    key: 'onAfterDrawSelection',\n    value: function onAfterDrawSelection(currentRow, currentColumn, cornersOfSelection, layerLevel) {\n      return this.selectionCalculations.getSelectedMergedCellClassName(currentRow, currentColumn, cornersOfSelection, layerLevel);\n    }\n\n    /**\n     * `beforeRemoveCellClassNames` hook callback. Used to remove additional class name from all cells in the table.\n     *\n     * @private\n     * @returns {String[]} An `Array` of `String`s. Each of these strings will act like class names to be removed from all the cells in the table.\n     */\n\n  }, {\n    key: 'onBeforeRemoveCellClassNames',\n    value: function onBeforeRemoveCellClassNames() {\n      return this.selectionCalculations.getSelectedMergedCellClassNameToRemove();\n    }\n  }]);\n\n  return MergeCells;\n}(_base2.default);\n\n(0, _plugins.registerPlugin)('mergeCells', MergeCells);\n\nexports.default = MergeCells;\n\n/***/ }),\n/* 351 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _templateObject = _taggedTemplateLiteral(['The merged cell declared at [', ', ', '], overlaps with the other declared merged \\n    cell. The overlapping merged cell was not added to the table, please fix your setup.'], ['The merged cell declared at [', ', ', '], overlaps with the other declared merged \\n    cell. The overlapping merged cell was not added to the table, please fix your setup.']);\n\nvar _cellCoords = __webpack_require__(97);\n\nvar _cellCoords2 = _interopRequireDefault(_cellCoords);\n\nvar _index = __webpack_require__(4);\n\nvar _number = __webpack_require__(6);\n\nvar _console = __webpack_require__(58);\n\nvar _array = __webpack_require__(2);\n\nvar _utils = __webpack_require__(206);\n\nvar _templateLiteralTag = __webpack_require__(42);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _taggedTemplateLiteral(strings, raw) { return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * Defines a container object for the merged cells.\n *\n * @class MergedCellsCollection\n * @plugin MergeCells\n */\nvar MergedCellsCollection = function () {\n  function MergedCellsCollection(plugin) {\n    _classCallCheck(this, MergedCellsCollection);\n\n    /**\n     * Reference to the Merge Cells plugin.\n     *\n     * @type {MergeCells}\n     */\n    this.plugin = plugin;\n    /**\n     * Array of merged cells.\n     *\n     * @type {Array}\n     */\n    this.mergedCells = [];\n    /**\n     * The Handsontable instance.\n     *\n     * @type {Handsontable}\n     */\n    this.hot = plugin.hot;\n  }\n\n  /**\n   * Get a warning message for when the declared merged cell data overlaps already existing merged cells.\n   *\n   * @param {Object} newMergedCell Object containg information about the merged cells that was about to be added.\n   * @return {String}\n   */\n\n\n  _createClass(MergedCellsCollection, [{\n    key: 'get',\n\n\n    /**\n     * Get a merged cell from the container, based on the provided arguments. You can provide either the \"starting coordinates\"\n     * of a merged cell, or any coordinates from the body of the merged cell.\n     *\n     * @param {Number} row Row index.\n     * @param {Number} column Column index.\n     * @returns {MergedCellCoords|Boolean} Returns a wanted merged cell on success and `false` on failure.\n     */\n    value: function get(row, column) {\n      var mergedCells = this.mergedCells;\n      var result = false;\n\n      (0, _array.arrayEach)(mergedCells, function (mergedCell) {\n        if (mergedCell.row <= row && mergedCell.row + mergedCell.rowspan - 1 >= row && mergedCell.col <= column && mergedCell.col + mergedCell.colspan - 1 >= column) {\n          result = mergedCell;\n          return false;\n        }\n\n        return true;\n      });\n\n      return result;\n    }\n\n    /**\n     * Get a merged cell containing the provided range.\n     *\n     * @param {CellRange|Object} range The range to search merged cells for.\n     * @return {MergedCellCoords|Boolean}\n     */\n\n  }, {\n    key: 'getByRange',\n    value: function getByRange(range) {\n      var mergedCells = this.mergedCells;\n      var result = false;\n\n      (0, _array.arrayEach)(mergedCells, function (mergedCell) {\n        if (mergedCell.row <= range.from.row && mergedCell.row + mergedCell.rowspan - 1 >= range.to.row && mergedCell.col <= range.from.col && mergedCell.col + mergedCell.colspan - 1 >= range.to.col) {\n          result = mergedCell;\n          return result;\n        }\n\n        return true;\n      });\n\n      return result;\n    }\n\n    /**\n     * Get a merged cell contained in the provided range.\n     *\n     * @param {CellRange|Object} range The range to search merged cells in.\n     * @param [countPartials=false] If set to `true`, all the merged cells overlapping the range will be taken into calculation.\n     * @return {Array|Boolean} Array of found merged cells of `false` if none were found.\n     */\n\n  }, {\n    key: 'getWithinRange',\n    value: function getWithinRange(range) {\n      var countPartials = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n      var mergedCells = this.mergedCells;\n      var foundMergedCells = [];\n      var testedRange = range;\n\n      if (!testedRange.includesRange) {\n        var from = new _index.CellCoords(testedRange.from.row, testedRange.from.col);\n        var to = new _index.CellCoords(testedRange.to.row, testedRange.to.col);\n        testedRange = new _index.CellRange(from, from, to);\n      }\n\n      (0, _array.arrayEach)(mergedCells, function (mergedCell) {\n        var mergedCellTopLeft = new _index.CellCoords(mergedCell.row, mergedCell.col);\n        var mergedCellBottomRight = new _index.CellCoords(mergedCell.row + mergedCell.rowspan - 1, mergedCell.col + mergedCell.colspan - 1);\n        var mergedCellRange = new _index.CellRange(mergedCellTopLeft, mergedCellTopLeft, mergedCellBottomRight);\n\n        if (countPartials) {\n          if (testedRange.overlaps(mergedCellRange)) {\n            foundMergedCells.push(mergedCell);\n          }\n        } else if (testedRange.includesRange(mergedCellRange)) {\n          foundMergedCells.push(mergedCell);\n        }\n      });\n\n      return foundMergedCells.length ? foundMergedCells : false;\n    }\n\n    /**\n     * Add a merged cell to the container.\n     *\n     * @param {Object} mergedCellInfo The merged cell information object. Has to contain `row`, `col`, `colspan` and `rowspan` properties.\n     * @return {MergedCellCoords|Boolean} Returns the new merged cell on success and `false` on failure.\n     */\n\n  }, {\n    key: 'add',\n    value: function add(mergedCellInfo) {\n      var mergedCells = this.mergedCells;\n      var row = mergedCellInfo.row;\n      var column = mergedCellInfo.col;\n      var rowspan = mergedCellInfo.rowspan;\n      var colspan = mergedCellInfo.colspan;\n      var newMergedCell = new _cellCoords2.default(row, column, rowspan, colspan);\n      var alreadyExists = this.get(row, column);\n      var isOverlapping = this.isOverlapping(newMergedCell);\n\n      if (!alreadyExists && !isOverlapping) {\n        if (this.hot) {\n          newMergedCell.normalize(this.hot);\n        }\n\n        mergedCells.push(newMergedCell);\n\n        return newMergedCell;\n      }\n\n      (0, _console.warn)(MergedCellsCollection.IS_OVERLAPPING_WARNING(newMergedCell));\n\n      return false;\n    }\n\n    /**\n     * Remove a merged cell from the container. You can provide either the \"starting coordinates\"\n     * of a merged cell, or any coordinates from the body of the merged cell.\n     *\n     * @param {Number} row Row index.\n     * @param {Number} column Column index.\n     * @return {MergedCellCoords|Boolean} Returns the removed merged cell on success and `false` on failure.\n     */\n\n  }, {\n    key: 'remove',\n    value: function remove(row, column) {\n      var mergedCells = this.mergedCells;\n      var wantedCollection = this.get(row, column);\n      var wantedCollectionIndex = wantedCollection ? this.mergedCells.indexOf(wantedCollection) : null;\n\n      if (wantedCollection && wantedCollectionIndex !== false) {\n        mergedCells.splice(wantedCollectionIndex, 1);\n        return wantedCollection;\n      }\n\n      return false;\n    }\n\n    /**\n     * Clear all the merged cells.\n     */\n\n  }, {\n    key: 'clear',\n    value: function clear() {\n      var _this = this;\n\n      var mergedCells = this.mergedCells;\n      var mergedCellParentsToClear = [];\n      var hiddenCollectionElements = [];\n\n      (0, _array.arrayEach)(mergedCells, function (mergedCell) {\n        var TD = _this.hot.getCell(mergedCell.row, mergedCell.col);\n\n        if (TD) {\n          mergedCellParentsToClear.push([TD, _this.get(mergedCell.row, mergedCell.col), mergedCell.row, mergedCell.col]);\n        }\n      });\n\n      this.mergedCells.length = 0;\n\n      (0, _array.arrayEach)(mergedCellParentsToClear, function (mergedCell, i) {\n        (0, _number.rangeEach)(0, mergedCell.rowspan - 1, function (j) {\n          (0, _number.rangeEach)(0, mergedCell.colspan - 1, function (k) {\n            if (k !== 0 || j !== 0) {\n              var TD = _this.hot.getCell(mergedCell.row + j, mergedCell.col + k);\n\n              if (TD) {\n                hiddenCollectionElements.push([TD, null, null, null]);\n              }\n            }\n          });\n        });\n\n        mergedCellParentsToClear[i][1] = null;\n      });\n\n      (0, _array.arrayEach)(mergedCellParentsToClear, function (mergedCellParents) {\n        _utils.applySpanProperties.apply(undefined, _toConsumableArray(mergedCellParents));\n      });\n\n      (0, _array.arrayEach)(hiddenCollectionElements, function (hiddenCollectionElement) {\n        _utils.applySpanProperties.apply(undefined, _toConsumableArray(hiddenCollectionElement));\n      });\n    }\n\n    /**\n     * Check if the provided merged cell overlaps with the others in the container.\n     *\n     * @param {MergedCellCoords} mergedCell The merged cell to check against all others in the container.\n     * @return {Boolean} `true` if the provided merged cell overlaps with the others, `false` otherwise.\n     */\n\n  }, {\n    key: 'isOverlapping',\n    value: function isOverlapping(mergedCell) {\n      var mergedCellRange = new _index.CellRange(null, new _index.CellCoords(mergedCell.row, mergedCell.col), new _index.CellCoords(mergedCell.row + mergedCell.rowspan - 1, mergedCell.col + mergedCell.colspan - 1));\n      var result = false;\n\n      (0, _array.arrayEach)(this.mergedCells, function (col) {\n        var currentRange = new _index.CellRange(null, new _index.CellCoords(col.row, col.col), new _index.CellCoords(col.row + col.rowspan - 1, col.col + col.colspan - 1));\n\n        if (currentRange.overlaps(mergedCellRange)) {\n          result = true;\n          return false;\n        }\n\n        return true;\n      });\n\n      return result;\n    }\n\n    /**\n     * Check whether the provided row/col coordinates direct to a merged parent.\n     *\n     * @param {Number} row Row index.\n     * @param {Number} column Column index.\n     * @return {Boolean}\n     */\n\n  }, {\n    key: 'isMergedParent',\n    value: function isMergedParent(row, column) {\n      var mergedCells = this.mergedCells;\n      var result = false;\n\n      (0, _array.arrayEach)(mergedCells, function (mergedCell) {\n        if (mergedCell.row === row && mergedCell.col === column) {\n          result = true;\n          return false;\n        }\n\n        return true;\n      });\n\n      return result;\n    }\n\n    /**\n     * Shift the merged cell in the direction and by an offset defined in the arguments.\n     *\n     * @param {String} direction `right`, `left`, `up` or `down`.\n     * @param {Number} index Index where the change, which caused the shifting took place.\n     * @param {Number} count Number of rows/columns added/removed in the preceding action.\n     */\n\n  }, {\n    key: 'shiftCollections',\n    value: function shiftCollections(direction, index, count) {\n      var _this2 = this;\n\n      var shiftVector = [0, 0];\n\n      switch (direction) {\n        case 'right':\n          shiftVector[0] += count;\n          break;\n\n        case 'left':\n          shiftVector[0] -= count;\n          break;\n\n        case 'down':\n          shiftVector[1] += count;\n          break;\n\n        case 'up':\n          shiftVector[1] -= count;\n          break;\n\n        default:\n      }\n\n      (0, _array.arrayEach)(this.mergedCells, function (currentMerge) {\n        currentMerge.shift(shiftVector, index);\n      });\n\n      (0, _number.rangeEachReverse)(this.mergedCells.length - 1, 0, function (i) {\n        var currentMerge = _this2.mergedCells[i];\n\n        if (currentMerge && currentMerge.removed) {\n          _this2.mergedCells.splice(_this2.mergedCells.indexOf(currentMerge), 1);\n        }\n      });\n    }\n  }], [{\n    key: 'IS_OVERLAPPING_WARNING',\n    value: function IS_OVERLAPPING_WARNING(newMergedCell) {\n      return (0, _templateLiteralTag.toSingleLine)(_templateObject, newMergedCell.row, newMergedCell.col);\n    }\n  }]);\n\n  return MergedCellsCollection;\n}();\n\nexports.default = MergedCellsCollection;\n\n/***/ }),\n/* 352 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _object = __webpack_require__(1);\n\nvar _src = __webpack_require__(4);\n\nvar _array = __webpack_require__(2);\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * Class responsible for all of the Autofill-related operations on merged cells.\n *\n * @class AutofillCalculations\n * @plugin MergeCells\n * @util\n */\nvar AutofillCalculations = function () {\n  function AutofillCalculations(plugin) {\n    _classCallCheck(this, AutofillCalculations);\n\n    /**\n     * Reference to the Merge Cells plugin.\n     *\n     * @type {MergeCells}\n     */\n    this.plugin = plugin;\n    /**\n     * Reference to the MergedCellsCollection class instance.\n     *\n     * @type {MergedCellsCollection}\n     */\n    this.mergedCellsCollection = this.plugin.mergedCellsCollection;\n    /**\n     * Cache of the currently processed autofill data.\n     *\n     * @private\n     * @type {Object}\n     */\n    this.currentFillData = null;\n  }\n\n  /**\n   * Correct the provided selection area, so it's not selecting only a part of a merged cell.\n   *\n   * @param {Array} selectionArea\n   */\n\n\n  _createClass(AutofillCalculations, [{\n    key: 'correctSelectionAreaSize',\n    value: function correctSelectionAreaSize(selectionArea) {\n      if (selectionArea[0] === selectionArea[2] && selectionArea[1] === selectionArea[3]) {\n        var mergedCell = this.mergedCellsCollection.get(selectionArea[0], selectionArea[1]);\n\n        if (mergedCell) {\n          selectionArea[2] = selectionArea[0] + mergedCell.rowspan - 1;\n          selectionArea[3] = selectionArea[1] + mergedCell.colspan - 1;\n        }\n      }\n    }\n\n    /**\n     * Get the direction of the autofill process.\n     *\n     * @param {Array} selectionArea The selection area.\n     * @param {Array} finalArea The final area (base + drag).\n     * @return {String} `up`, `down`, `left` or `right`.\n     */\n\n  }, {\n    key: 'getDirection',\n    value: function getDirection(selectionArea, finalArea) {\n      var direction = null;\n\n      if (finalArea[0] === selectionArea[0] && finalArea[1] === selectionArea[1] && finalArea[3] === selectionArea[3]) {\n        direction = 'down';\n      } else if (finalArea[2] === selectionArea[2] && finalArea[1] === selectionArea[1] && finalArea[3] === selectionArea[3]) {\n        direction = 'up';\n      } else if (finalArea[1] === selectionArea[1] && finalArea[2] === selectionArea[2]) {\n        direction = 'right';\n      } else {\n        direction = 'left';\n      }\n\n      return direction;\n    }\n\n    /**\n     * Snap the drag area to the farthest merged cell, so it won't clip any of the merged cells.\n     *\n     * @param {Array} baseArea The base selected area.\n     * @param {Array} dragArea The drag area.\n     * @param {String} dragDirection The autofill drag direction.\n     * @param {Array} foundMergedCells MergeCellCoords found in the base selection area.\n     * @return {Array} The new drag area\n     */\n\n  }, {\n    key: 'snapDragArea',\n    value: function snapDragArea(baseArea, dragArea, dragDirection, foundMergedCells) {\n      var newDragArea = dragArea.slice(0);\n      var fillSize = this.getAutofillSize(baseArea, dragArea, dragDirection);\n\n      var _baseArea = _slicedToArray(baseArea, 4),\n          baseAreaStartRow = _baseArea[0],\n          baseAreaStartColumn = _baseArea[1],\n          baseAreaEndRow = _baseArea[2],\n          baseAreaEndColumn = _baseArea[3];\n\n      var verticalDirection = ['up', 'down'].indexOf(dragDirection) > -1;\n      var fullCycle = verticalDirection ? baseAreaEndRow - baseAreaStartRow + 1 : baseAreaEndColumn - baseAreaStartColumn + 1;\n      var fulls = Math.floor(fillSize / fullCycle) * fullCycle;\n      var partials = fillSize - fulls;\n      var farthestCollection = this.getFarthestCollection(baseArea, dragArea, dragDirection, foundMergedCells);\n\n      if (farthestCollection) {\n        if (dragDirection === 'down') {\n          var fill = farthestCollection.row + farthestCollection.rowspan - baseAreaStartRow - partials;\n          var newLimit = newDragArea[2] + fill;\n\n          if (newLimit >= this.plugin.hot.countRows()) {\n            newDragArea[2] -= partials;\n          } else {\n            newDragArea[2] += partials ? fill : 0;\n          }\n        } else if (dragDirection === 'right') {\n          var _fill = farthestCollection.col + farthestCollection.colspan - baseAreaStartColumn - partials;\n          var _newLimit = newDragArea[3] + _fill;\n\n          if (_newLimit >= this.plugin.hot.countCols()) {\n            newDragArea[3] -= partials;\n          } else {\n            newDragArea[3] += partials ? _fill : 0;\n          }\n        } else if (dragDirection === 'up') {\n          var _fill2 = baseAreaEndRow - partials - farthestCollection.row + 1;\n          var _newLimit2 = newDragArea[0] + _fill2;\n\n          if (_newLimit2 < 0) {\n            newDragArea[0] += partials;\n          } else {\n            newDragArea[0] -= partials ? _fill2 : 0;\n          }\n        } else if (dragDirection === 'left') {\n          var _fill3 = baseAreaEndColumn - partials - farthestCollection.col + 1;\n          var _newLimit3 = newDragArea[1] + _fill3;\n\n          if (_newLimit3 < 0) {\n            newDragArea[1] += partials;\n          } else {\n            newDragArea[1] -= partials ? _fill3 : 0;\n          }\n        }\n      }\n\n      this.updateCurrentFillCache({\n        baseArea: baseArea,\n        dragDirection: dragDirection,\n        foundMergedCells: foundMergedCells,\n        fillSize: fillSize,\n        dragArea: newDragArea,\n        cycleLength: fullCycle\n      });\n\n      return newDragArea;\n    }\n\n    /**\n     * Update the current fill cache with the provided object.\n     *\n     * @private\n     * @param {Object} updateObject\n     */\n\n  }, {\n    key: 'updateCurrentFillCache',\n    value: function updateCurrentFillCache(updateObject) {\n      if (!this.currentFillData) {\n        this.currentFillData = {};\n      }\n\n      (0, _object.extend)(this.currentFillData, updateObject);\n    }\n\n    /**\n     * Get the \"length\" of the drag area.\n     *\n     * @private\n     * @param {Array} baseArea The base selection area.\n     * @param {Array} dragArea The drag area (containing the base area).\n     * @param {String} direction The drag direction.\n     * @return {Number|null} The \"length\" (height or width, depending on the direction) of the drag.\n     */\n\n  }, {\n    key: 'getAutofillSize',\n    value: function getAutofillSize(baseArea, dragArea, direction) {\n      var _baseArea2 = _slicedToArray(baseArea, 4),\n          baseAreaStartRow = _baseArea2[0],\n          baseAreaStartColumn = _baseArea2[1],\n          baseAreaEndRow = _baseArea2[2],\n          baseAreaEndColumn = _baseArea2[3];\n\n      var _dragArea = _slicedToArray(dragArea, 4),\n          dragAreaStartRow = _dragArea[0],\n          dragAreaStartColumn = _dragArea[1],\n          dragAreaEndRow = _dragArea[2],\n          dragAreaEndColumn = _dragArea[3];\n\n      switch (direction) {\n        case 'up':\n          return baseAreaStartRow - dragAreaStartRow;\n        case 'down':\n          return dragAreaEndRow - baseAreaEndRow;\n        case 'left':\n          return baseAreaStartColumn - dragAreaStartColumn;\n        case 'right':\n          return dragAreaEndColumn - baseAreaEndColumn;\n        default:\n          return null;\n      }\n    }\n\n    /**\n     * Trim the default drag area (containing the selection area) to the drag-only area.\n     *\n     * @private\n     * @param {Array} baseArea The base selection area.\n     * @param {Array} dragArea The base selection area extended by the drag area.\n     * @param {String} direction Drag direction.\n     * @return {Array|null} Array representing the drag area coordinates.\n     */\n\n  }, {\n    key: 'getDragArea',\n    value: function getDragArea(baseArea, dragArea, direction) {\n      var _baseArea3 = _slicedToArray(baseArea, 4),\n          baseAreaStartRow = _baseArea3[0],\n          baseAreaStartColumn = _baseArea3[1],\n          baseAreaEndRow = _baseArea3[2],\n          baseAreaEndColumn = _baseArea3[3];\n\n      var _dragArea2 = _slicedToArray(dragArea, 4),\n          dragAreaStartRow = _dragArea2[0],\n          dragAreaStartColumn = _dragArea2[1],\n          dragAreaEndRow = _dragArea2[2],\n          dragAreaEndColumn = _dragArea2[3];\n\n      switch (direction) {\n        case 'up':\n          return [dragAreaStartRow, dragAreaStartColumn, baseAreaStartRow - 1, baseAreaEndColumn];\n        case 'down':\n          return [baseAreaEndRow + 1, baseAreaStartColumn, dragAreaEndRow, baseAreaEndColumn];\n        case 'left':\n          return [dragAreaStartRow, dragAreaStartColumn, baseAreaEndRow, baseAreaStartColumn - 1];\n        case 'right':\n          return [baseAreaStartRow, baseAreaEndColumn + 1, dragAreaEndRow, dragAreaEndColumn];\n        default:\n          return null;\n      }\n    }\n\n    /**\n     * Get the to-be-farthest merged cell in the newly filled area.\n     *\n     * @private\n     * @param {Array} baseArea The base selection area.\n     * @param {Array} dragArea The drag area (containing the base area).\n     * @param {String} direction The drag direction.\n     * @param {Array} mergedCellArray Array of the merged cells found in the base area.\n     * @return {MergedCellCoords|null}\n     */\n\n  }, {\n    key: 'getFarthestCollection',\n    value: function getFarthestCollection(baseArea, dragArea, direction, mergedCellArray) {\n      var _baseArea4 = _slicedToArray(baseArea, 4),\n          baseAreaStartRow = _baseArea4[0],\n          baseAreaStartColumn = _baseArea4[1],\n          baseAreaEndRow = _baseArea4[2],\n          baseAreaEndColumn = _baseArea4[3];\n\n      var verticalDirection = ['up', 'down'].indexOf(direction) > -1;\n      var baseEnd = verticalDirection ? baseAreaEndRow : baseAreaEndColumn;\n      var baseStart = verticalDirection ? baseAreaStartRow : baseAreaStartColumn;\n      var fillSize = this.getAutofillSize(baseArea, dragArea, direction);\n      var fullCycle = verticalDirection ? baseAreaEndRow - baseAreaStartRow + 1 : baseAreaEndColumn - baseAreaStartColumn + 1;\n      var fulls = Math.floor(fillSize / fullCycle) * fullCycle;\n      var partials = fillSize - fulls;\n      var inclusionFunctionName = null;\n      var farthestCollection = null;\n      var endOfDragRecreationIndex = null;\n\n      switch (direction) {\n        case 'up':\n          inclusionFunctionName = 'includesVertically';\n          endOfDragRecreationIndex = baseEnd - partials + 1;\n          break;\n\n        case 'left':\n          inclusionFunctionName = 'includesHorizontally';\n          endOfDragRecreationIndex = baseEnd - partials + 1;\n          break;\n\n        case 'down':\n          inclusionFunctionName = 'includesVertically';\n          endOfDragRecreationIndex = baseStart + partials - 1;\n          break;\n\n        case 'right':\n          inclusionFunctionName = 'includesHorizontally';\n          endOfDragRecreationIndex = baseStart + partials - 1;\n          break;\n\n        default:\n      }\n\n      (0, _array.arrayEach)(mergedCellArray, function (currentCollection) {\n        if (currentCollection[inclusionFunctionName](endOfDragRecreationIndex) && currentCollection.isFarther(farthestCollection, direction)) {\n          farthestCollection = currentCollection;\n        }\n      });\n\n      return farthestCollection;\n    }\n\n    /**\n     * Recreate the merged cells after the autofill process.\n     *\n     * @param {Array} changes Changes made.\n     */\n\n  }, {\n    key: 'recreateAfterDataPopulation',\n    value: function recreateAfterDataPopulation(changes) {\n      if (!this.currentFillData) {\n        return;\n      }\n\n      var fillRange = this.getRangeFromChanges(changes);\n      var foundMergedCells = this.currentFillData.foundMergedCells;\n      var dragDirection = this.currentFillData.dragDirection;\n      var inBounds = function inBounds(current, offset) {\n        switch (dragDirection) {\n          case 'up':\n            return current.row - offset >= fillRange.from.row;\n          case 'down':\n            return current.row + current.rowspan - 1 + offset <= fillRange.to.row;\n          case 'left':\n            return current.col - offset >= fillRange.from.column;\n          case 'right':\n            return current.col + current.colspan - 1 + offset <= fillRange.to.column;\n          default:\n            return null;\n        }\n      };\n      var fillOffset = 0;\n      var current = null;\n      var multiplier = 1;\n\n      do {\n        for (var j = 0; j < foundMergedCells.length; j += 1) {\n          current = foundMergedCells[j];\n\n          fillOffset = multiplier * this.currentFillData.cycleLength;\n\n          if (inBounds(current, fillOffset)) {\n            switch (dragDirection) {\n              case 'up':\n                this.plugin.mergedCellsCollection.add({\n                  row: current.row - fillOffset,\n                  rowspan: current.rowspan,\n                  col: current.col,\n                  colspan: current.colspan\n                });\n                break;\n\n              case 'down':\n                this.plugin.mergedCellsCollection.add({\n                  row: current.row + fillOffset,\n                  rowspan: current.rowspan,\n                  col: current.col,\n                  colspan: current.colspan\n                });\n                break;\n\n              case 'left':\n                this.plugin.mergedCellsCollection.add({\n                  row: current.row,\n                  rowspan: current.rowspan,\n                  col: current.col - fillOffset,\n                  colspan: current.colspan\n                });\n                break;\n\n              case 'right':\n                this.plugin.mergedCellsCollection.add({\n                  row: current.row,\n                  rowspan: current.rowspan,\n                  col: current.col + fillOffset,\n                  colspan: current.colspan\n                });\n                break;\n\n              default:\n            }\n          }\n\n          if (j === foundMergedCells.length - 1) {\n            multiplier += 1;\n          }\n        }\n      } while (inBounds(current, fillOffset));\n\n      this.currentFillData = null;\n      this.plugin.hot.render();\n    }\n\n    /**\n     * Get the drag range from the changes made.\n     *\n     * @private\n     * @param {Array} changes The changes made.\n     * @returns {Object} Object with `from` and `to` properties, both containing `row` and `column` keys.\n     */\n\n  }, {\n    key: 'getRangeFromChanges',\n    value: function getRangeFromChanges(changes) {\n      var rows = { min: null, max: null };\n      var columns = { min: null, max: null };\n\n      (0, _array.arrayEach)(changes, function (change) {\n        if (rows.min === null || change[0] < rows.min) {\n          rows.min = change[0];\n        }\n\n        if (rows.max === null || change[0] > rows.max) {\n          rows.max = change[0];\n        }\n\n        if (columns.min === null || change[1] < columns.min) {\n          columns.min = change[1];\n        }\n\n        if (columns.max === null || change[1] > columns.max) {\n          columns.max = change[1];\n        }\n      });\n\n      return {\n        from: {\n          row: rows.min,\n          column: columns.min\n        },\n        to: {\n          row: rows.max,\n          column: columns.max\n        }\n      };\n    }\n\n    /**\n     * Check if the drag area contains any merged cells.\n     *\n     * @param {Array} baseArea The base selection area.\n     * @param {Array} fullArea The base area extended by the drag area.\n     * @param {String} direction Drag direction.\n     * @returns {Boolean}\n     */\n\n  }, {\n    key: 'dragAreaOverlapsCollections',\n    value: function dragAreaOverlapsCollections(baseArea, fullArea, direction) {\n      var dragArea = this.getDragArea(baseArea, fullArea, direction);\n\n      var _dragArea3 = _slicedToArray(dragArea, 4),\n          dragAreaStartRow = _dragArea3[0],\n          dragAreaStartColumn = _dragArea3[1],\n          dragAreaEndRow = _dragArea3[2],\n          dragAreaEndColumn = _dragArea3[3];\n\n      var topLeft = new _src.CellCoords(dragAreaStartRow, dragAreaStartColumn);\n      var bottomRight = new _src.CellCoords(dragAreaEndRow, dragAreaEndColumn);\n      var dragRange = new _src.CellRange(topLeft, topLeft, bottomRight);\n\n      return !!this.mergedCellsCollection.getWithinRange(dragRange, true);\n    }\n  }]);\n\n  return AutofillCalculations;\n}();\n\nexports.default = AutofillCalculations;\n\n/***/ }),\n/* 353 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _src = __webpack_require__(4);\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * Class responsible for all of the Selection-related operations on merged cells.\n *\n * @class SelectionCalculations\n * @plugin MergeCells\n * @util\n */\nvar SelectionCalculations = function () {\n  function SelectionCalculations(plugin) {\n    _classCallCheck(this, SelectionCalculations);\n\n    /**\n     * Reference to the Merge Cells plugin.\n     *\n     * @type {MergeCells}\n     */\n    this.plugin = plugin;\n    /**\n     * Class name used for fully selected merged cells.\n     *\n     * @type {String}\n     */\n    this.fullySelectedMergedCellClassName = 'fullySelectedMergedCell';\n  }\n\n  /**\n   * \"Snap\" the delta value according to defined merged cells. (In other words, compensate the rowspan -\n   * e.g. going up with `delta.row = -1` over a merged cell with `rowspan = 3`, `delta.row` should change to `-3`.)\n   *\n   * @param {Object} delta The delta object containing `row` and `col` properties.\n   * @param {CellRange} selectionRange The selection range.\n   * @param {Object} mergedCell A merged cell object.\n   */\n\n\n  _createClass(SelectionCalculations, [{\n    key: 'snapDelta',\n    value: function snapDelta(delta, selectionRange, mergedCell) {\n      var cellCoords = selectionRange.to;\n      var newRow = cellCoords.row + delta.row;\n      var newColumn = cellCoords.col + delta.col;\n\n      if (delta.row) {\n        this.jumpOverMergedCell(delta, mergedCell, newRow);\n      } else if (delta.col) {\n        this.jumpOverMergedCell(delta, mergedCell, newColumn);\n      }\n    }\n\n    /**\n     * \"Jump\" over the merged cell (compensate for the indexes within the merged cell to get past it)\n     *\n     * @private\n     * @param {Object} delta The delta object.\n     * @param {MergedCellCoords} mergedCell The merge cell object.\n     * @param {Number} newIndex New row/column index, created with the delta.\n     */\n\n  }, {\n    key: 'jumpOverMergedCell',\n    value: function jumpOverMergedCell(delta, mergedCell, newIndex) {\n      var flatDelta = delta.row || delta.col;\n      var includesIndex = null;\n      var firstIndex = null;\n      var lastIndex = null;\n\n      if (delta.row) {\n        includesIndex = mergedCell.includesVertically(newIndex);\n        firstIndex = mergedCell.row;\n        lastIndex = mergedCell.getLastRow();\n      } else if (delta.col) {\n        includesIndex = mergedCell.includesHorizontally(newIndex);\n        firstIndex = mergedCell.col;\n        lastIndex = mergedCell.getLastColumn();\n      }\n\n      if (flatDelta === 0) {\n        return;\n      } else if (flatDelta > 0) {\n        if (includesIndex && newIndex !== firstIndex) {\n          flatDelta += lastIndex - newIndex + 1;\n        }\n      } else if (includesIndex && newIndex !== lastIndex) {\n        flatDelta -= newIndex - firstIndex + 1;\n      }\n\n      if (delta.row) {\n        delta.row = flatDelta;\n      } else if (delta.col) {\n        delta.col = flatDelta;\n      }\n    }\n\n    /**\n     * Get a selection range with `to` property incremented by the provided delta.\n     *\n     * @param {CellRange} oldSelectionRange The base selection range.\n     * @param {Object} delta The delta object with `row` and `col` properties.\n     * @returns {CellRange} A new `CellRange` object.\n     */\n\n  }, {\n    key: 'getUpdatedSelectionRange',\n    value: function getUpdatedSelectionRange(oldSelectionRange, delta) {\n      return new _src.CellRange(oldSelectionRange.highlight, oldSelectionRange.from, new _src.CellCoords(oldSelectionRange.to.row + delta.row, oldSelectionRange.to.col + delta.col));\n    }\n\n    /**\n     * Generate an additional class name for the entirely-selected merged cells.\n     *\n     * @param {Number} currentRow Row index of the currently processed cell.\n     * @param {Number} currentColumn Column index of the currently cell.\n     * @param {Array} cornersOfSelection Array of the current selection in a form of `[startRow, startColumn, endRow, endColumn]`.\n     * @param {Number|undefined} layerLevel Number indicating which layer of selection is currently processed.\n     * @returns {String|undefined} A `String`, which will act as an additional `className` to be added to the currently processed cell.\n     */\n\n  }, {\n    key: 'getSelectedMergedCellClassName',\n    value: function getSelectedMergedCellClassName(currentRow, currentColumn, cornersOfSelection, layerLevel) {\n      var _cornersOfSelection = _slicedToArray(cornersOfSelection, 4),\n          startRow = _cornersOfSelection[0],\n          startColumn = _cornersOfSelection[1],\n          endRow = _cornersOfSelection[2],\n          endColumn = _cornersOfSelection[3];\n\n      if (layerLevel === void 0) {\n        return;\n      }\n\n      if (currentRow >= startRow && currentRow <= endRow && currentColumn >= startColumn && currentColumn <= endColumn) {\n\n        var isMergedCellParent = this.plugin.mergedCellsCollection.isMergedParent(currentRow, currentColumn);\n\n        if (!isMergedCellParent) {\n          return;\n        }\n\n        var mergedCell = this.plugin.mergedCellsCollection.get(currentRow, currentColumn);\n\n        if (!mergedCell) {\n          return;\n        }\n\n        if (mergedCell.row + mergedCell.rowspan - 1 <= endRow && mergedCell.col + mergedCell.colspan - 1 <= endColumn) {\n          return this.fullySelectedMergedCellClassName + '-' + layerLevel;\n        } else if (this.plugin.selectionCalculations.isMergeCellFullySelected(mergedCell, this.plugin.hot.getSelectedRange())) {\n          return this.fullySelectedMergedCellClassName + '-multiple';\n        }\n      }\n    }\n\n    /**\n     * Check if the provided merged cell is fully selected (by one or many layers of selection)\n     *\n     * @param {MergedCellCoords} mergedCell The merged cell to be processed.\n     * @param {CellRange[]} selectionRangesArray Array of selection ranges.\n     * @returns {Boolean}\n     */\n\n  }, {\n    key: 'isMergeCellFullySelected',\n    value: function isMergeCellFullySelected(mergedCell, selectionRangesArray) {\n      var mergedCellIndividualCoords = [];\n\n      if (!selectionRangesArray || !mergedCell) {\n        return false;\n      }\n\n      for (var r = 0; r < mergedCell.rowspan; r += 1) {\n        for (var c = 0; c < mergedCell.colspan; c += 1) {\n          mergedCellIndividualCoords.push(new _src.CellCoords(mergedCell.row + r, mergedCell.col + c));\n        }\n      }\n\n      for (var i = 0; i < mergedCellIndividualCoords.length; i += 1) {\n        var insideSelections = [];\n\n        for (var s = 0; s < selectionRangesArray.length; s += 1) {\n          insideSelections[s] = selectionRangesArray[s].includes(mergedCellIndividualCoords[i]);\n        }\n\n        if (!insideSelections.includes(true)) {\n          return false;\n        }\n      }\n\n      return true;\n    }\n\n    /**\n     * Generate an array of the entirely-selected merged cells' class names.\n     *\n     * @returns {String[]} An `Array` of `String`s. Each of these strings will act like class names to be removed from all the cells in the table.\n     */\n\n  }, {\n    key: 'getSelectedMergedCellClassNameToRemove',\n    value: function getSelectedMergedCellClassNameToRemove() {\n      var classNames = [];\n\n      for (var i = 0; i <= 7; i += 1) {\n        classNames.push(this.fullySelectedMergedCellClassName + '-' + i);\n      }\n\n      classNames.push(this.fullySelectedMergedCellClassName + '-multiple');\n\n      return classNames;\n    }\n  }]);\n\n  return SelectionCalculations;\n}();\n\nexports.default = SelectionCalculations;\n\n/***/ }),\n/* 354 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nexports.default = toggleMergeItem;\n\nvar _constants = __webpack_require__(7);\n\nvar C = _interopRequireWildcard(_constants);\n\nvar _cellCoords = __webpack_require__(97);\n\nvar _cellCoords2 = _interopRequireDefault(_cellCoords);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction toggleMergeItem(plugin) {\n  return {\n    key: 'mergeCells',\n    name: function name() {\n      var sel = this.getSelectedLast();\n\n      if (sel) {\n        var info = plugin.mergedCellsCollection.get(sel[0], sel[1]);\n\n        if (info.row === sel[0] && info.col === sel[1] && info.row + info.rowspan - 1 === sel[2] && info.col + info.colspan - 1 === sel[3]) {\n          return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_UNMERGE_CELLS);\n        }\n      }\n\n      return this.getTranslatedPhrase(C.CONTEXTMENU_ITEMS_MERGE_CELLS);\n    },\n    callback: function callback() {\n      plugin.toggleMergeOnSelection();\n    },\n    disabled: function disabled() {\n      var sel = this.getSelectedLast();\n\n      if (!sel) {\n        return true;\n      }\n\n      var isSingleCell = _cellCoords2.default.isSingleCell({\n        row: sel[0],\n        col: sel[1],\n        rowspan: sel[2] - sel[0] + 1,\n        colspan: sel[3] - sel[1] + 1\n      });\n\n      return isSingleCell || this.selection.isSelectedByCorner();\n    },\n\n    hidden: false\n  };\n}\n\n/***/ }),\n/* 355 */\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n/* 356 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _element = __webpack_require__(0);\n\nvar _browser = __webpack_require__(39);\n\nvar _base = __webpack_require__(10);\n\nvar _base2 = _interopRequireDefault(_base);\n\nvar _eventManager = __webpack_require__(5);\n\nvar _eventManager2 = _interopRequireDefault(_eventManager);\n\nvar _plugins = __webpack_require__(8);\n\nvar _src = __webpack_require__(4);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n/**\n * @private\n * @plugin MultipleSelectionHandles\n */\nvar MultipleSelectionHandles = function (_BasePlugin) {\n  _inherits(MultipleSelectionHandles, _BasePlugin);\n\n  /**\n   * @param {Object} hotInstance\n   */\n  function MultipleSelectionHandles(hotInstance) {\n    _classCallCheck(this, MultipleSelectionHandles);\n\n    /**\n     * @type {Array}\n     */\n    var _this2 = _possibleConstructorReturn(this, (MultipleSelectionHandles.__proto__ || Object.getPrototypeOf(MultipleSelectionHandles)).call(this, hotInstance));\n\n    _this2.dragged = [];\n    /**\n     * Instance of EventManager.\n     *\n     * @type {EventManager}\n     */\n    _this2.eventManager = null;\n    /**\n     * @type {null}\n     */\n    _this2.lastSetCell = null;\n    return _this2;\n  }\n\n  /**\n   * Check if the plugin is enabled in the handsontable settings.\n   *\n   * @returns {Boolean}\n   */\n\n\n  _createClass(MultipleSelectionHandles, [{\n    key: 'isEnabled',\n    value: function isEnabled() {\n      return (0, _browser.isMobileBrowser)();\n    }\n\n    /**\n     * Enable plugin for this Handsontable instance.\n     */\n\n  }, {\n    key: 'enablePlugin',\n    value: function enablePlugin() {\n      if (this.enabled) {\n        return;\n      }\n      if (!this.eventManager) {\n        this.eventManager = new _eventManager2.default(this);\n      }\n      this.registerListeners();\n      _get(MultipleSelectionHandles.prototype.__proto__ || Object.getPrototypeOf(MultipleSelectionHandles.prototype), 'enablePlugin', this).call(this);\n    }\n\n    /**\n     * Bind the touch events\n     * @private\n     */\n\n  }, {\n    key: 'registerListeners',\n    value: function registerListeners() {\n      var _this = this;\n\n      function removeFromDragged(query) {\n\n        if (_this.dragged.length === 1) {\n          // clear array\n          _this.dragged.splice(0, _this.dragged.length);\n\n          return true;\n        }\n\n        var entryPosition = _this.dragged.indexOf(query);\n\n        if (entryPosition === -1) {\n          return false;\n        } else if (entryPosition === 0) {\n          _this.dragged = _this.dragged.slice(0, 1);\n        } else if (entryPosition === 1) {\n          _this.dragged = _this.dragged.slice(-1);\n        }\n      }\n\n      this.eventManager.addEventListener(this.hot.rootElement, 'touchstart', function (event) {\n        var selectedRange = void 0;\n\n        if ((0, _element.hasClass)(event.target, 'topLeftSelectionHandle-HitArea')) {\n          selectedRange = _this.hot.getSelectedRangeLast();\n\n          _this.dragged.push('topLeft');\n\n          _this.touchStartRange = {\n            width: selectedRange.getWidth(),\n            height: selectedRange.getHeight(),\n            direction: selectedRange.getDirection()\n          };\n\n          event.preventDefault();\n          return false;\n        } else if ((0, _element.hasClass)(event.target, 'bottomRightSelectionHandle-HitArea')) {\n          selectedRange = _this.hot.getSelectedRangeLast();\n\n          _this.dragged.push('bottomRight');\n\n          _this.touchStartRange = {\n            width: selectedRange.getWidth(),\n            height: selectedRange.getHeight(),\n            direction: selectedRange.getDirection()\n          };\n\n          event.preventDefault();\n          return false;\n        }\n      });\n\n      this.eventManager.addEventListener(this.hot.rootElement, 'touchend', function (event) {\n        if ((0, _element.hasClass)(event.target, 'topLeftSelectionHandle-HitArea')) {\n          removeFromDragged.call(_this, 'topLeft');\n\n          _this.touchStartRange = void 0;\n\n          event.preventDefault();\n          return false;\n        } else if ((0, _element.hasClass)(event.target, 'bottomRightSelectionHandle-HitArea')) {\n          removeFromDragged.call(_this, 'bottomRight');\n\n          _this.touchStartRange = void 0;\n\n          event.preventDefault();\n          return false;\n        }\n      });\n\n      this.eventManager.addEventListener(this.hot.rootElement, 'touchmove', function (event) {\n        var scrollTop = (0, _element.getWindowScrollTop)();\n        var scrollLeft = (0, _element.getWindowScrollLeft)();\n        var targetCoords = void 0;\n        var selectedRange = void 0;\n        var rangeWidth = void 0;\n        var rangeHeight = void 0;\n        var rangeDirection = void 0;\n        var newRangeCoords = void 0;\n\n        if (_this.dragged.length === 0) {\n          return;\n        }\n\n        var endTarget = document.elementFromPoint(event.touches[0].screenX - scrollLeft, event.touches[0].screenY - scrollTop);\n\n        if (!endTarget || endTarget === _this.lastSetCell) {\n          return;\n        }\n\n        if (endTarget.nodeName === 'TD' || endTarget.nodeName === 'TH') {\n          targetCoords = _this.hot.getCoords(endTarget);\n\n          if (targetCoords.col === -1) {\n            targetCoords.col = 0;\n          }\n\n          selectedRange = _this.hot.getSelectedRangeLast();\n          rangeWidth = selectedRange.getWidth();\n          rangeHeight = selectedRange.getHeight();\n          rangeDirection = selectedRange.getDirection();\n\n          if (rangeWidth === 1 && rangeHeight === 1) {\n            _this.hot.selection.setRangeEnd(targetCoords);\n          }\n\n          newRangeCoords = _this.getCurrentRangeCoords(selectedRange, targetCoords, _this.touchStartRange.direction, rangeDirection, _this.dragged[0]);\n\n          if (newRangeCoords.start !== null) {\n            _this.hot.selection.setRangeStart(newRangeCoords.start);\n          }\n\n          _this.hot.selection.setRangeEnd(newRangeCoords.end);\n\n          _this.lastSetCell = endTarget;\n        }\n\n        event.preventDefault();\n      });\n    }\n  }, {\n    key: 'getCurrentRangeCoords',\n    value: function getCurrentRangeCoords(selectedRange, currentTouch, touchStartDirection, currentDirection, draggedHandle) {\n      var topLeftCorner = selectedRange.getTopLeftCorner();\n      var bottomRightCorner = selectedRange.getBottomRightCorner();\n      var bottomLeftCorner = selectedRange.getBottomLeftCorner();\n      var topRightCorner = selectedRange.getTopRightCorner();\n\n      var newCoords = {\n        start: null,\n        end: null\n      };\n\n      switch (touchStartDirection) {\n        case 'NE-SW':\n          switch (currentDirection) {\n            case 'NE-SW':\n            case 'NW-SE':\n              if (draggedHandle === 'topLeft') {\n                newCoords = {\n                  start: new _src.CellCoords(currentTouch.row, selectedRange.highlight.col),\n                  end: new _src.CellCoords(bottomLeftCorner.row, currentTouch.col)\n                };\n              } else {\n                newCoords = {\n                  start: new _src.CellCoords(selectedRange.highlight.row, currentTouch.col),\n                  end: new _src.CellCoords(currentTouch.row, topLeftCorner.col)\n                };\n              }\n              break;\n            case 'SE-NW':\n              if (draggedHandle === 'bottomRight') {\n                newCoords = {\n                  start: new _src.CellCoords(bottomRightCorner.row, currentTouch.col),\n                  end: new _src.CellCoords(currentTouch.row, topLeftCorner.col)\n                };\n              }\n              break;\n            default:\n              break;\n          }\n          break;\n        case 'NW-SE':\n          switch (currentDirection) {\n            case 'NE-SW':\n              if (draggedHandle === 'topLeft') {\n                newCoords = {\n                  start: currentTouch,\n                  end: bottomLeftCorner\n                };\n              } else {\n                newCoords.end = currentTouch;\n              }\n              break;\n            case 'NW-SE':\n              if (draggedHandle === 'topLeft') {\n                newCoords = {\n                  start: currentTouch,\n                  end: bottomRightCorner\n                };\n              } else {\n                newCoords.end = currentTouch;\n              }\n              break;\n            case 'SE-NW':\n              if (draggedHandle === 'topLeft') {\n                newCoords = {\n                  start: currentTouch,\n                  end: topLeftCorner\n                };\n              } else {\n                newCoords.end = currentTouch;\n              }\n              break;\n            case 'SW-NE':\n              if (draggedHandle === 'topLeft') {\n                newCoords = {\n                  start: currentTouch,\n                  end: topRightCorner\n                };\n              } else {\n                newCoords.end = currentTouch;\n              }\n              break;\n            default:\n              break;\n          }\n          break;\n        case 'SW-NE':\n          switch (currentDirection) {\n            case 'NW-SE':\n              if (draggedHandle === 'bottomRight') {\n                newCoords = {\n                  start: new _src.CellCoords(currentTouch.row, topLeftCorner.col),\n                  end: new _src.CellCoords(bottomLeftCorner.row, currentTouch.col)\n                };\n              } else {\n                newCoords = {\n                  start: new _src.CellCoords(topLeftCorner.row, currentTouch.col),\n                  end: new _src.CellCoords(currentTouch.row, bottomRightCorner.col)\n                };\n              }\n              break;\n            // case 'NE-SW':\n            //\n            //  break;\n            case 'SW-NE':\n              if (draggedHandle === 'topLeft') {\n                newCoords = {\n                  start: new _src.CellCoords(selectedRange.highlight.row, currentTouch.col),\n                  end: new _src.CellCoords(currentTouch.row, bottomRightCorner.col)\n                };\n              } else {\n                newCoords = {\n                  start: new _src.CellCoords(currentTouch.row, topLeftCorner.col),\n                  end: new _src.CellCoords(topLeftCorner.row, currentTouch.col)\n                };\n              }\n              break;\n            case 'SE-NW':\n              if (draggedHandle === 'bottomRight') {\n                newCoords = {\n                  start: new _src.CellCoords(currentTouch.row, topRightCorner.col),\n                  end: new _src.CellCoords(topLeftCorner.row, currentTouch.col)\n                };\n              } else if (draggedHandle === 'topLeft') {\n                newCoords = {\n                  start: bottomLeftCorner,\n                  end: currentTouch\n                };\n              }\n              break;\n            default:\n              break;\n          }\n          break;\n        case 'SE-NW':\n          switch (currentDirection) {\n            case 'NW-SE':\n            case 'NE-SW':\n            case 'SW-NE':\n              if (draggedHandle === 'topLeft') {\n                newCoords.end = currentTouch;\n              }\n              break;\n            case 'SE-NW':\n              if (draggedHandle === 'topLeft') {\n                newCoords.end = currentTouch;\n              } else {\n                newCoords = {\n                  start: currentTouch,\n                  end: topLeftCorner\n                };\n              }\n              break;\n            default:\n              break;\n          }\n          break;\n        default:\n          break;\n      }\n\n      return newCoords;\n    }\n\n    /**\n     * Check if user is currently dragging the handle.\n     *\n     * @returns {boolean} Dragging state\n     */\n\n  }, {\n    key: 'isDragged',\n    value: function isDragged() {\n      return this.dragged.length > 0;\n    }\n  }]);\n\n  return MultipleSelectionHandles;\n}(_base2.default);\n\n(0, _plugins.registerPlugin)('multipleSelectionHandles', MultipleSelectionHandles);\n\nexports.default = MultipleSelectionHandles;\n\n/***/ }),\n/* 357 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _base = __webpack_require__(10);\n\nvar _base2 = _interopRequireDefault(_base);\n\nvar _dataObserver = __webpack_require__(358);\n\nvar _dataObserver2 = _interopRequireDefault(_dataObserver);\n\nvar _array = __webpack_require__(2);\n\nvar _plugins = __webpack_require__(8);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n// Handsontable.hooks.register('afterChangesObserved');\n\n/**\n * @plugin ObserveChanges\n *\n * @description\n * This plugin allows to observe data source changes. By default, the plugin is declared as `undefined`, which makes it\n * disabled. Enabling this plugin switches the table into one-way data binding where changes are applied into the data\n * source (outside from the table) will be automatically reflected in the table.\n *\n * ```js\n * // as a boolean\n * observeChanges: true,\n * ```\n *\n * To configure this plugin see {@link Options#observeChanges}.\n */\nvar ObserveChanges = function (_BasePlugin) {\n  _inherits(ObserveChanges, _BasePlugin);\n\n  function ObserveChanges(hotInstance) {\n    _classCallCheck(this, ObserveChanges);\n\n    /**\n     * Instance of {@link DataObserver}.\n     *\n     * @private\n     * @type {DataObserver}\n     */\n    var _this = _possibleConstructorReturn(this, (ObserveChanges.__proto__ || Object.getPrototypeOf(ObserveChanges)).call(this, hotInstance));\n\n    _this.observer = null;\n    return _this;\n  }\n\n  /**\n   * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}\n   * hook and if it returns `true` than the {@link ObserveChanges#enablePlugin} method is called.\n   *\n   * @returns {Boolean}\n   */\n\n\n  _createClass(ObserveChanges, [{\n    key: 'isEnabled',\n    value: function isEnabled() {\n      return this.hot.getSettings().observeChanges;\n    }\n\n    /**\n     * Enables the plugin functionality for this Handsontable instance.\n     */\n\n  }, {\n    key: 'enablePlugin',\n    value: function enablePlugin() {\n      var _this2 = this;\n\n      if (this.enabled) {\n        return;\n      }\n      if (!this.observer) {\n        this.observer = new _dataObserver2.default(this.hot.getSourceData());\n        this._exposePublicApi();\n      }\n\n      this.observer.addLocalHook('change', function (patches) {\n        return _this2.onDataChange(patches);\n      });\n      this.addHook('afterCreateRow', function () {\n        return _this2.onAfterTableAlter();\n      });\n      this.addHook('afterRemoveRow', function () {\n        return _this2.onAfterTableAlter();\n      });\n      this.addHook('afterCreateCol', function () {\n        return _this2.onAfterTableAlter();\n      });\n      this.addHook('afterRemoveCol', function () {\n        return _this2.onAfterTableAlter();\n      });\n      this.addHook('afterChange', function (changes, source) {\n        return _this2.onAfterTableAlter(source);\n      });\n      this.addHook('afterLoadData', function (firstRun) {\n        return _this2.onAfterLoadData(firstRun);\n      });\n\n      _get(ObserveChanges.prototype.__proto__ || Object.getPrototypeOf(ObserveChanges.prototype), 'enablePlugin', this).call(this);\n    }\n\n    /**\n     * Disables the plugin functionality for this Handsontable instance.\n     */\n\n  }, {\n    key: 'disablePlugin',\n    value: function disablePlugin() {\n      if (this.observer) {\n        this.observer.destroy();\n        this.observer = null;\n        this._deletePublicApi();\n      }\n\n      _get(ObserveChanges.prototype.__proto__ || Object.getPrototypeOf(ObserveChanges.prototype), 'disablePlugin', this).call(this);\n    }\n\n    /**\n     * Data change observer.\n     *\n     * @private\n     * @param {Array} patches An array of objects which every item defines coordinates where data was changed.\n     */\n\n  }, {\n    key: 'onDataChange',\n    value: function onDataChange(patches) {\n      var _this3 = this;\n\n      if (!this.observer.isPaused()) {\n        var sourceName = this.pluginName + '.change';\n        var actions = {\n          add: function add(patch) {\n            if (isNaN(patch.col)) {\n              _this3.hot.runHooks('afterCreateRow', patch.row, 1, sourceName);\n            } else {\n              _this3.hot.runHooks('afterCreateCol', patch.col, 1, sourceName);\n            }\n          },\n          remove: function remove(patch) {\n            if (isNaN(patch.col)) {\n              _this3.hot.runHooks('afterRemoveRow', patch.row, 1, sourceName);\n            } else {\n              _this3.hot.runHooks('afterRemoveCol', patch.col, 1, sourceName);\n            }\n          },\n          replace: function replace(patch) {\n            _this3.hot.runHooks('afterChange', [[patch.row, patch.col, null, patch.value]], sourceName);\n          }\n        };\n\n        (0, _array.arrayEach)(patches, function (patch) {\n          if (actions[patch.op]) {\n            actions[patch.op](patch);\n          }\n        });\n        this.hot.render();\n      }\n\n      this.hot.runHooks('afterChangesObserved');\n    }\n\n    /**\n     * On after table alter listener. Prevents infinity loop between internal and external data changing.\n     *\n     * @private\n     * @param source\n     */\n\n  }, {\n    key: 'onAfterTableAlter',\n    value: function onAfterTableAlter(source) {\n      var _this4 = this;\n\n      if (source !== 'loadData') {\n        this.observer.pause();\n        this.hot.addHookOnce('afterChangesObserved', function () {\n          return _this4.observer.resume();\n        });\n      }\n    }\n\n    /**\n     * On after load data listener.\n     *\n     * @private\n     * @param {Boolean} firstRun `true` if event was fired first time.\n     */\n\n  }, {\n    key: 'onAfterLoadData',\n    value: function onAfterLoadData(firstRun) {\n      if (!firstRun) {\n        this.observer.setObservedData(this.hot.getSourceData());\n      }\n    }\n\n    /**\n     * Destroys the plugin instance.\n     */\n\n  }, {\n    key: 'destroy',\n    value: function destroy() {\n      if (this.observer) {\n        this.observer.destroy();\n        this._deletePublicApi();\n      }\n      _get(ObserveChanges.prototype.__proto__ || Object.getPrototypeOf(ObserveChanges.prototype), 'destroy', this).call(this);\n    }\n\n    /**\n     * Expose plugins methods to the core.\n     *\n     * @private\n     */\n\n  }, {\n    key: '_exposePublicApi',\n    value: function _exposePublicApi() {\n      var _this5 = this;\n\n      var hot = this.hot;\n\n      hot.pauseObservingChanges = function () {\n        return _this5.observer.pause();\n      };\n      hot.resumeObservingChanges = function () {\n        return _this5.observer.resume();\n      };\n      hot.isPausedObservingChanges = function () {\n        return _this5.observer.isPaused();\n      };\n    }\n\n    /**\n     * Deletes all previously exposed methods.\n     *\n     * @private\n     */\n\n  }, {\n    key: '_deletePublicApi',\n    value: function _deletePublicApi() {\n      var hot = this.hot;\n\n      delete hot.pauseObservingChanges;\n      delete hot.resumeObservingChanges;\n      delete hot.isPausedObservingChanges;\n    }\n  }]);\n\n  return ObserveChanges;\n}(_base2.default);\n\nexports.default = ObserveChanges;\n\n\n(0, _plugins.registerPlugin)('observeChanges', ObserveChanges);\n\n/***/ }),\n/* 358 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _jsonPatchDuplex = __webpack_require__(359);\n\nvar _jsonPatchDuplex2 = _interopRequireDefault(_jsonPatchDuplex);\n\nvar _localHooks = __webpack_require__(47);\n\nvar _localHooks2 = _interopRequireDefault(_localHooks);\n\nvar _object = __webpack_require__(1);\n\nvar _utils = __webpack_require__(360);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * @class DataObserver\n * @plugin ObserveChanges\n */\nvar DataObserver = function () {\n  function DataObserver(observedData) {\n    _classCallCheck(this, DataObserver);\n\n    /**\n     * Observed source data.\n     *\n     * @type {Array}\n     */\n    this.observedData = null;\n    /**\n     * JsonPatch observer.\n     *\n     * @type {Object}\n     */\n    this.observer = null;\n    /**\n     * Flag which determines if observer is paused or not. Paused observer doesn't emit `change` hooks.\n     *\n     * @type {Boolean}\n     * @default false\n     */\n    this.paused = false;\n\n    this.setObservedData(observedData);\n  }\n\n  /**\n   * Set data to observe.\n   *\n   * @param {*} observedData\n   */\n\n\n  _createClass(DataObserver, [{\n    key: 'setObservedData',\n    value: function setObservedData(observedData) {\n      var _this = this;\n\n      if (this.observer) {\n        _jsonPatchDuplex2.default.unobserve(this.observedData, this.observer);\n      }\n      this.observedData = observedData;\n      this.observer = _jsonPatchDuplex2.default.observe(this.observedData, function (patches) {\n        return _this.onChange(patches);\n      });\n    }\n\n    /**\n     * Check if observer was paused.\n     *\n     * @returns {Boolean}\n     */\n\n  }, {\n    key: 'isPaused',\n    value: function isPaused() {\n      return this.paused;\n    }\n\n    /**\n     * Pause observer (stop emitting all detected changes).\n     */\n\n  }, {\n    key: 'pause',\n    value: function pause() {\n      this.paused = true;\n    }\n\n    /**\n     * Resume observer (emit all detected changes).\n     */\n\n  }, {\n    key: 'resume',\n    value: function resume() {\n      this.paused = false;\n    }\n\n    /**\n     * JsonPatch on change listener.\n     *\n     * @private\n     * @param {Array} patches An array of object passed from jsonpatch.\n     */\n\n  }, {\n    key: 'onChange',\n    value: function onChange(patches) {\n      this.runLocalHooks('change', (0, _utils.cleanPatches)(patches));\n    }\n\n    /**\n     * Destroy observer instance.\n     */\n\n  }, {\n    key: 'destroy',\n    value: function destroy() {\n      _jsonPatchDuplex2.default.unobserve(this.observedData, this.observer);\n      this.observedData = null;\n      this.observer = null;\n    }\n  }]);\n\n  return DataObserver;\n}();\n\n(0, _object.mixin)(DataObserver, _localHooks2.default);\n\nexports.default = DataObserver;\n\n/***/ }),\n/* 359 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\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 && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n/*!\n * https://github.com/Starcounter-Jack/JSON-Patch\n * json-patch-duplex.js version: 0.5.7\n * (c) 2013 Joachim Wester\n * MIT license\n */\nvar __extends = undefined && undefined.__extends || function (d, b) {\n    for (var p in b) {\n        if (b.hasOwnProperty(p)) d[p] = b[p];\n    }function __() {\n        this.constructor = d;\n    }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\nvar OriginalError = Error;\nvar jsonpatch;\n(function (jsonpatch) {\n    var _objectKeys = function _objectKeys(obj) {\n        if (_isArray(obj)) {\n            var keys = new Array(obj.length);\n            for (var k = 0; k < keys.length; k++) {\n                keys[k] = \"\" + k;\n            }\n            return keys;\n        }\n        if (Object.keys) {\n            return Object.keys(obj);\n        }\n        var keys = [];\n        for (var i in obj) {\n            if (obj.hasOwnProperty(i)) {\n                keys.push(i);\n            }\n        }\n        return keys;\n    };\n    function _equals(a, b) {\n        switch (typeof a === 'undefined' ? 'undefined' : _typeof(a)) {\n            case 'undefined': //backward compatibility, but really I think we should return false\n            case 'boolean':\n            case 'string':\n            case 'number':\n                return a === b;\n            case 'object':\n                if (a === null) return b === null;\n                if (_isArray(a)) {\n                    if (!_isArray(b) || a.length !== b.length) return false;\n                    for (var i = 0, l = a.length; i < l; i++) {\n                        if (!_equals(a[i], b[i])) return false;\n                    }return true;\n                }\n                var bKeys = _objectKeys(b);\n                var bLength = bKeys.length;\n                if (_objectKeys(a).length !== bLength) return false;\n                for (var i = 0; i < bLength; i++) {\n                    if (!_equals(a[i], b[i])) return false;\n                }return true;\n            default:\n                return false;\n        }\n    }\n    /* We use a Javascript hash to store each\n     function. Each hash entry (property) uses\n     the operation identifiers specified in rfc6902.\n     In this way, we can map each patch operation\n     to its dedicated function in efficient way.\n     */\n    /* The operations applicable to an object */\n    var objOps = {\n        add: function add(obj, key) {\n            obj[key] = this.value;\n            return true;\n        },\n        remove: function remove(obj, key) {\n            delete obj[key];\n            return true;\n        },\n        replace: function replace(obj, key) {\n            obj[key] = this.value;\n            return true;\n        },\n        move: function move(obj, key, tree) {\n            var temp = { op: \"_get\", path: this.from };\n            apply(tree, [temp]);\n            apply(tree, [{ op: \"remove\", path: this.from }]);\n            apply(tree, [{ op: \"add\", path: this.path, value: temp.value }]);\n            return true;\n        },\n        copy: function copy(obj, key, tree) {\n            var temp = { op: \"_get\", path: this.from };\n            apply(tree, [temp]);\n            apply(tree, [{ op: \"add\", path: this.path, value: temp.value }]);\n            return true;\n        },\n        test: function test(obj, key) {\n            return _equals(obj[key], this.value);\n        },\n        _get: function _get(obj, key) {\n            this.value = obj[key];\n        }\n    };\n    /* The operations applicable to an array. Many are the same as for the object */\n    var arrOps = {\n        add: function add(arr, i) {\n            arr.splice(i, 0, this.value);\n            return true;\n        },\n        remove: function remove(arr, i) {\n            arr.splice(i, 1);\n            return true;\n        },\n        replace: function replace(arr, i) {\n            arr[i] = this.value;\n            return true;\n        },\n        move: objOps.move,\n        copy: objOps.copy,\n        test: objOps.test,\n        _get: objOps._get\n    };\n    /* The operations applicable to object root. Many are the same as for the object */\n    var rootOps = {\n        add: function add(obj) {\n            rootOps.remove.call(this, obj);\n            for (var key in this.value) {\n                if (this.value.hasOwnProperty(key)) {\n                    obj[key] = this.value[key];\n                }\n            }\n            return true;\n        },\n        remove: function remove(obj) {\n            for (var key in obj) {\n                if (obj.hasOwnProperty(key)) {\n                    objOps.remove.call(this, obj, key);\n                }\n            }\n            return true;\n        },\n        replace: function replace(obj) {\n            apply(obj, [{ op: \"remove\", path: this.path }]);\n            apply(obj, [{ op: \"add\", path: this.path, value: this.value }]);\n            return true;\n        },\n        move: objOps.move,\n        copy: objOps.copy,\n        test: function test(obj) {\n            return JSON.stringify(obj) === JSON.stringify(this.value);\n        },\n        _get: function _get(obj) {\n            this.value = obj;\n        }\n    };\n    var observeOps = {\n        add: function add(patches, path) {\n            var patch = {\n                op: \"add\",\n                path: path + escapePathComponent(this.name),\n                value: this.object[this.name] };\n            patches.push(patch);\n        },\n        'delete': function _delete(patches, path) {\n            var patch = {\n                op: \"remove\",\n                path: path + escapePathComponent(this.name)\n            };\n            patches.push(patch);\n        },\n        update: function update(patches, path) {\n            var patch = {\n                op: \"replace\",\n                path: path + escapePathComponent(this.name),\n                value: this.object[this.name]\n            };\n            patches.push(patch);\n        }\n    };\n    function escapePathComponent(str) {\n        if (str.indexOf('/') === -1 && str.indexOf('~') === -1) return str;\n        return str.replace(/~/g, '~0').replace(/\\//g, '~1');\n    }\n    function _getPathRecursive(root, obj) {\n        var found;\n        for (var key in root) {\n            if (root.hasOwnProperty(key)) {\n                if (root[key] === obj) {\n                    return escapePathComponent(key) + '/';\n                } else if (_typeof(root[key]) === 'object') {\n                    found = _getPathRecursive(root[key], obj);\n                    if (found != '') {\n                        return escapePathComponent(key) + '/' + found;\n                    }\n                }\n            }\n        }\n        return '';\n    }\n    function getPath(root, obj) {\n        if (root === obj) {\n            return '/';\n        }\n        var path = _getPathRecursive(root, obj);\n        if (path === '') {\n            throw new OriginalError(\"Object not found in root\");\n        }\n        return '/' + path;\n    }\n    var beforeDict = [];\n    var Mirror = function () {\n        function Mirror(obj) {\n            this.observers = [];\n            this.obj = obj;\n        }\n        return Mirror;\n    }();\n    var ObserverInfo = function () {\n        function ObserverInfo(callback, observer) {\n            this.callback = callback;\n            this.observer = observer;\n        }\n        return ObserverInfo;\n    }();\n    function getMirror(obj) {\n        for (var i = 0, ilen = beforeDict.length; i < ilen; i++) {\n            if (beforeDict[i].obj === obj) {\n                return beforeDict[i];\n            }\n        }\n    }\n    function getObserverFromMirror(mirror, callback) {\n        for (var j = 0, jlen = mirror.observers.length; j < jlen; j++) {\n            if (mirror.observers[j].callback === callback) {\n                return mirror.observers[j].observer;\n            }\n        }\n    }\n    function removeObserverFromMirror(mirror, observer) {\n        for (var j = 0, jlen = mirror.observers.length; j < jlen; j++) {\n            if (mirror.observers[j].observer === observer) {\n                mirror.observers.splice(j, 1);\n                return;\n            }\n        }\n    }\n    function unobserve(root, observer) {\n        observer.unobserve();\n    }\n    jsonpatch.unobserve = unobserve;\n    function deepClone(obj) {\n        if ((typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) === \"object\") {\n            return JSON.parse(JSON.stringify(obj)); //Faster than ES5 clone - http://jsperf.com/deep-cloning-of-objects/5\n        } else {\n            return obj; //no need to clone primitives\n        }\n    }\n    function observe(obj, callback) {\n        var patches = [];\n        var root = obj;\n        var observer;\n        var mirror = getMirror(obj);\n        if (!mirror) {\n            mirror = new Mirror(obj);\n            beforeDict.push(mirror);\n        } else {\n            observer = getObserverFromMirror(mirror, callback);\n        }\n        if (observer) {\n            return observer;\n        }\n        observer = {};\n        mirror.value = deepClone(obj);\n        if (callback) {\n            observer.callback = callback;\n            observer.next = null;\n            var intervals = this.intervals || [100, 1000, 10000, 60000];\n            if (intervals.push === void 0) {\n                throw new OriginalError(\"jsonpatch.intervals must be an array\");\n            }\n            var currentInterval = 0;\n            var dirtyCheck = function dirtyCheck() {\n                generate(observer);\n            };\n            var fastCheck = function fastCheck() {\n                clearTimeout(observer.next);\n                observer.next = setTimeout(function () {\n                    dirtyCheck();\n                    currentInterval = 0;\n                    observer.next = setTimeout(slowCheck, intervals[currentInterval++]);\n                }, 0);\n            };\n            var slowCheck = function slowCheck() {\n                dirtyCheck();\n                if (currentInterval == intervals.length) currentInterval = intervals.length - 1;\n                observer.next = setTimeout(slowCheck, intervals[currentInterval++]);\n            };\n            if (typeof window !== 'undefined') {\n                if (window.addEventListener) {\n                    window.addEventListener('mousedown', fastCheck);\n                    window.addEventListener('mouseup', fastCheck);\n                    window.addEventListener('keydown', fastCheck);\n                } else {\n                    document.documentElement.attachEvent('onmousedown', fastCheck);\n                    document.documentElement.attachEvent('onmouseup', fastCheck);\n                    document.documentElement.attachEvent('onkeydown', fastCheck);\n                }\n            }\n            observer.next = setTimeout(slowCheck, intervals[currentInterval++]);\n        }\n        observer.patches = patches;\n        observer.object = obj;\n        observer.unobserve = function () {\n            generate(observer);\n            clearTimeout(observer.next);\n            removeObserverFromMirror(mirror, observer);\n            if (typeof window !== 'undefined') {\n                if (window.removeEventListener) {\n                    window.removeEventListener('mousedown', fastCheck);\n                    window.removeEventListener('mouseup', fastCheck);\n                    window.removeEventListener('keydown', fastCheck);\n                } else {\n                    document.documentElement.detachEvent('onmousedown', fastCheck);\n                    document.documentElement.detachEvent('onmouseup', fastCheck);\n                    document.documentElement.detachEvent('onkeydown', fastCheck);\n                }\n            }\n        };\n        mirror.observers.push(new ObserverInfo(callback, observer));\n        return observer;\n    }\n    jsonpatch.observe = observe;\n    function generate(observer) {\n        var mirror;\n        for (var i = 0, ilen = beforeDict.length; i < ilen; i++) {\n            if (beforeDict[i].obj === observer.object) {\n                mirror = beforeDict[i];\n                break;\n            }\n        }\n        _generate(mirror.value, observer.object, observer.patches, \"\");\n        if (observer.patches.length) {\n            apply(mirror.value, observer.patches);\n        }\n        var temp = observer.patches;\n        if (temp.length > 0) {\n            observer.patches = [];\n            if (observer.callback) {\n                observer.callback(temp);\n            }\n        }\n        return temp;\n    }\n    jsonpatch.generate = generate;\n    // Dirty check if obj is different from mirror, generate patches and update mirror\n    function _generate(mirror, obj, patches, path) {\n        var newKeys = _objectKeys(obj);\n        var oldKeys = _objectKeys(mirror);\n        var changed = false;\n        var deleted = false;\n        //if ever \"move\" operation is implemented here, make sure this test runs OK: \"should not generate the same patch twice (move)\"\n        for (var t = oldKeys.length - 1; t >= 0; t--) {\n            var key = oldKeys[t];\n            var oldVal = mirror[key];\n            if (obj.hasOwnProperty(key)) {\n                var newVal = obj[key];\n                if ((typeof oldVal === 'undefined' ? 'undefined' : _typeof(oldVal)) == \"object\" && oldVal != null && (typeof newVal === 'undefined' ? 'undefined' : _typeof(newVal)) == \"object\" && newVal != null) {\n                    _generate(oldVal, newVal, patches, path + \"/\" + escapePathComponent(key));\n                } else {\n                    if (oldVal != newVal) {\n                        changed = true;\n                        patches.push({ op: \"replace\", path: path + \"/\" + escapePathComponent(key), value: deepClone(newVal) });\n                    }\n                }\n            } else {\n                patches.push({ op: \"remove\", path: path + \"/\" + escapePathComponent(key) });\n                deleted = true; // property has been deleted\n            }\n        }\n        if (!deleted && newKeys.length == oldKeys.length) {\n            return;\n        }\n        for (var t = 0; t < newKeys.length; t++) {\n            var key = newKeys[t];\n            if (!mirror.hasOwnProperty(key)) {\n                patches.push({ op: \"add\", path: path + \"/\" + escapePathComponent(key), value: deepClone(obj[key]) });\n            }\n        }\n    }\n    var _isArray;\n    if (Array.isArray) {\n        _isArray = Array.isArray;\n    } else {\n        _isArray = function _isArray(obj) {\n            return obj.push && typeof obj.length === 'number';\n        };\n    }\n    //3x faster than cached /^\\d+$/.test(str)\n    function isInteger(str) {\n        var i = 0;\n        var len = str.length;\n        var charCode;\n        while (i < len) {\n            charCode = str.charCodeAt(i);\n            if (charCode >= 48 && charCode <= 57) {\n                i++;\n                continue;\n            }\n            return false;\n        }\n        return true;\n    }\n    /// Apply a json-patch operation on an object tree\n    function apply(tree, patches, validate) {\n        var result = false,\n            p = 0,\n            plen = patches.length,\n            patch,\n            key;\n        while (p < plen) {\n            patch = patches[p];\n            p++;\n            // Find the object\n            var path = patch.path || \"\";\n            var keys = path.split('/');\n            var obj = tree;\n            var t = 1; //skip empty element - http://jsperf.com/to-shift-or-not-to-shift\n            var len = keys.length;\n            var existingPathFragment = undefined;\n            while (true) {\n                key = keys[t];\n                if (validate) {\n                    if (existingPathFragment === undefined) {\n                        if (obj[key] === undefined) {\n                            existingPathFragment = keys.slice(0, t).join('/');\n                        } else if (t == len - 1) {\n                            existingPathFragment = patch.path;\n                        }\n                        if (existingPathFragment !== undefined) {\n                            this.validator(patch, p - 1, tree, existingPathFragment);\n                        }\n                    }\n                }\n                t++;\n                if (key === undefined) {\n                    if (t >= len) {\n                        result = rootOps[patch.op].call(patch, obj, key, tree); // Apply patch\n                        break;\n                    }\n                }\n                if (_isArray(obj)) {\n                    if (key === '-') {\n                        key = obj.length;\n                    } else {\n                        if (validate && !isInteger(key)) {\n                            throw new JsonPatchError(\"Expected an unsigned base-10 integer value, making the new referenced value the array element with the zero-based index\", \"OPERATION_PATH_ILLEGAL_ARRAY_INDEX\", p - 1, patch.path, patch);\n                        }\n                        key = parseInt(key, 10);\n                    }\n                    if (t >= len) {\n                        if (validate && patch.op === \"add\" && key > obj.length) {\n                            throw new JsonPatchError(\"The specified index MUST NOT be greater than the number of elements in the array\", \"OPERATION_VALUE_OUT_OF_BOUNDS\", p - 1, patch.path, patch);\n                        }\n                        result = arrOps[patch.op].call(patch, obj, key, tree); // Apply patch\n                        break;\n                    }\n                } else {\n                    if (key && key.indexOf('~') != -1) key = key.replace(/~1/g, '/').replace(/~0/g, '~'); // escape chars\n                    if (t >= len) {\n                        result = objOps[patch.op].call(patch, obj, key, tree); // Apply patch\n                        break;\n                    }\n                }\n                obj = obj[key];\n            }\n        }\n        return result;\n    }\n    jsonpatch.apply = apply;\n    function compare(tree1, tree2) {\n        var patches = [];\n        _generate(tree1, tree2, patches, '');\n        return patches;\n    }\n    jsonpatch.compare = compare;\n    var JsonPatchError = function (_super) {\n        __extends(JsonPatchError, _super);\n        function JsonPatchError(message, name, index, operation, tree) {\n            _super.call(this, message);\n            this.message = message;\n            this.name = name;\n            this.index = index;\n            this.operation = operation;\n            this.tree = tree;\n        }\n        return JsonPatchError;\n    }(OriginalError);\n    jsonpatch.JsonPatchError = JsonPatchError;\n    jsonpatch.Error = JsonPatchError;\n    /**\n     * Recursively checks whether an object has any undefined values inside.\n     */\n    function hasUndefined(obj) {\n        if (obj === undefined) {\n            return true;\n        }\n        if (typeof obj == \"array\" || (typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) == \"object\") {\n            for (var i in obj) {\n                if (hasUndefined(obj[i])) {\n                    return true;\n                }\n            }\n        }\n        return false;\n    }\n    /**\n     * Validates a single operation. Called from `jsonpatch.validate`. Throws `JsonPatchError` in case of an error.\n     * @param {object} operation - operation object (patch)\n     * @param {number} index - index of operation in the sequence\n     * @param {object} [tree] - object where the operation is supposed to be applied\n     * @param {string} [existingPathFragment] - comes along with `tree`\n     */\n    function validator(operation, index, tree, existingPathFragment) {\n        if ((typeof operation === 'undefined' ? 'undefined' : _typeof(operation)) !== 'object' || operation === null || _isArray(operation)) {\n            throw new JsonPatchError('Operation is not an object', 'OPERATION_NOT_AN_OBJECT', index, operation, tree);\n        } else if (!objOps[operation.op]) {\n            throw new JsonPatchError('Operation `op` property is not one of operations defined in RFC-6902', 'OPERATION_OP_INVALID', index, operation, tree);\n        } else if (typeof operation.path !== 'string') {\n            throw new JsonPatchError('Operation `path` property is not a string', 'OPERATION_PATH_INVALID', index, operation, tree);\n        } else if ((operation.op === 'move' || operation.op === 'copy') && typeof operation.from !== 'string') {\n            throw new JsonPatchError('Operation `from` property is not present (applicable in `move` and `copy` operations)', 'OPERATION_FROM_REQUIRED', index, operation, tree);\n        } else if ((operation.op === 'add' || operation.op === 'replace' || operation.op === 'test') && operation.value === undefined) {\n            throw new JsonPatchError('Operation `value` property is not present (applicable in `add`, `replace` and `test` operations)', 'OPERATION_VALUE_REQUIRED', index, operation, tree);\n        } else if ((operation.op === 'add' || operation.op === 'replace' || operation.op === 'test') && hasUndefined(operation.value)) {\n            throw new JsonPatchError('Operation `value` property is not present (applicable in `add`, `replace` and `test` operations)', 'OPERATION_VALUE_CANNOT_CONTAIN_UNDEFINED', index, operation, tree);\n        } else if (tree) {\n            if (operation.op == \"add\") {\n                var pathLen = operation.path.split(\"/\").length;\n                var existingPathLen = existingPathFragment.split(\"/\").length;\n                if (pathLen !== existingPathLen + 1 && pathLen !== existingPathLen) {\n                    throw new JsonPatchError('Cannot perform an `add` operation at the desired path', 'OPERATION_PATH_CANNOT_ADD', index, operation, tree);\n                }\n            } else if (operation.op === 'replace' || operation.op === 'remove' || operation.op === '_get') {\n                if (operation.path !== existingPathFragment) {\n                    throw new JsonPatchError('Cannot perform the operation at a path that does not exist', 'OPERATION_PATH_UNRESOLVABLE', index, operation, tree);\n                }\n            } else if (operation.op === 'move' || operation.op === 'copy') {\n                var existingValue = { op: \"_get\", path: operation.from, value: undefined };\n                var error = jsonpatch.validate([existingValue], tree);\n                if (error && error.name === 'OPERATION_PATH_UNRESOLVABLE') {\n                    throw new JsonPatchError('Cannot perform the operation from a path that does not exist', 'OPERATION_FROM_UNRESOLVABLE', index, operation, tree);\n                }\n            }\n        }\n    }\n    jsonpatch.validator = validator;\n    /**\n     * Validates a sequence of operations. If `tree` parameter is provided, the sequence is additionally validated against the object tree.\n     * If error is encountered, returns a JsonPatchError object\n     * @param sequence\n     * @param tree\n     * @returns {JsonPatchError|undefined}\n     */\n    function validate(sequence, tree) {\n        try {\n            if (!_isArray(sequence)) {\n                throw new JsonPatchError('Patch sequence must be an array', 'SEQUENCE_NOT_AN_ARRAY');\n            }\n            if (tree) {\n                tree = JSON.parse(JSON.stringify(tree)); //clone tree so that we can safely try applying operations\n                apply.call(this, tree, sequence, true);\n            } else {\n                for (var i = 0; i < sequence.length; i++) {\n                    this.validator(sequence[i], i);\n                }\n            }\n        } catch (e) {\n            if (e instanceof JsonPatchError) {\n                return e;\n            } else {\n                throw e;\n            }\n        }\n    }\n    jsonpatch.validate = validate;\n})(jsonpatch || (jsonpatch = {}));\nif (true) {\n    exports.apply = jsonpatch.apply;\n    exports.observe = jsonpatch.observe;\n    exports.unobserve = jsonpatch.unobserve;\n    exports.generate = jsonpatch.generate;\n    exports.compare = jsonpatch.compare;\n    exports.validate = jsonpatch.validate;\n    exports.validator = jsonpatch.validator;\n    exports.JsonPatchError = jsonpatch.JsonPatchError;\n    exports.Error = jsonpatch.Error;\n}\n\n/***/ }),\n/* 360 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nexports.cleanPatches = cleanPatches;\nexports.parsePath = parsePath;\n\nvar _array = __webpack_require__(2);\n\n/**\n * Clean and extend patches from jsonpatch observer.\n *\n * @param {Array} patches\n * @returns {Array}\n */\nfunction cleanPatches(patches) {\n  var newOrRemovedColumns = [];\n\n  /**\n   * If observeChanges uses native Object.observe method, then it produces patches for length property. Filter them.\n   * If path can't be parsed. Filter it.\n   */\n  var cleanedPatches = (0, _array.arrayFilter)(patches, function (patch) {\n    if (/[/]length/ig.test(patch.path)) {\n      return false;\n    }\n    if (!parsePath(patch.path)) {\n      return false;\n    }\n\n    return true;\n  });\n  /**\n   * Extend patches with changed cells coords\n   */\n  cleanedPatches = (0, _array.arrayMap)(cleanedPatches, function (patch) {\n    var coords = parsePath(patch.path);\n\n    patch.row = coords.row;\n    patch.col = coords.col;\n\n    return patch;\n  });\n  /**\n   * Removing or adding column will produce one patch for each table row.\n   * Leaves only one patch for each column add/remove operation.\n   */\n  cleanedPatches = (0, _array.arrayFilter)(cleanedPatches, function (patch) {\n    if (['add', 'remove'].indexOf(patch.op) !== -1 && !isNaN(patch.col)) {\n      if (newOrRemovedColumns.indexOf(patch.col) !== -1) {\n        return false;\n      }\n      newOrRemovedColumns.push(patch.col);\n    }\n\n    return true;\n  });\n  newOrRemovedColumns.length = 0;\n\n  return cleanedPatches;\n}\n\n/**\n * Extract coordinates from path where data was changed.\n *\n * @param {String} path Path describing where data was changed.\n * @returns {Object|null} Returns an object with `row` and `col` properties or `null` if path doesn't have necessary information.\n */\nfunction parsePath(path) {\n  var match = path.match(/^\\/(\\d+)\\/?(.*)?$/);\n\n  if (!match) {\n    return null;\n  }\n\n  var _match = _slicedToArray(match, 3),\n      row = _match[1],\n      column = _match[2];\n\n  return {\n    row: parseInt(row, 10),\n    col: /^\\d*$/.test(column) ? parseInt(column, 10) : column\n  };\n}\n\n/***/ }),\n/* 361 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _base = __webpack_require__(10);\n\nvar _base2 = _interopRequireDefault(_base);\n\nvar _plugins = __webpack_require__(8);\n\nvar _object = __webpack_require__(1);\n\nvar _number = __webpack_require__(6);\n\nvar _mixed = __webpack_require__(11);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar DEFAULT_SEARCH_RESULT_CLASS = 'htSearchResult';\n\nvar DEFAULT_CALLBACK = function DEFAULT_CALLBACK(instance, row, col, data, testResult) {\n  instance.getCellMeta(row, col).isSearchResult = testResult;\n};\n\nvar DEFAULT_QUERY_METHOD = function DEFAULT_QUERY_METHOD(query, value) {\n  if ((0, _mixed.isUndefined)(query) || query === null || !query.toLowerCase || query.length === 0) {\n    return false;\n  }\n  if ((0, _mixed.isUndefined)(value) || value === null) {\n    return false;\n  }\n\n  return value.toString().toLowerCase().indexOf(query.toLowerCase()) !== -1;\n};\n\n/**\n * @plugin Search\n *\n * @description\n * The search plugin provides an easy interface to search data across Handsontable.\n *\n * In order to enable search mechanism, {@link Options#search} option must be set to `true`.\n *\n * @example\n * ```js\n * // as boolean\n * search: true\n * // as a object with one or more options\n * search: {\n *   callback: myNewCallbackFunction,\n *   queryMethod: myNewQueryMethod,\n *   searchResultClass: 'customClass'\n * }\n *\n * // Access to search plugin instance:\n * const searchPlugin = hot.getPlugin('search');\n *\n * // Set callback programmatically:\n * searchPlugin.setCallback(myNewCallbackFunction);\n * // Set query method programmatically:\n * searchPlugin.setQueryMethod(myNewQueryMethod);\n * // Set search result cells class programmatically:\n * searchPlugin.setSearchResultClass(customClass);\n * ```\n */\n\nvar Search = function (_BasePlugin) {\n  _inherits(Search, _BasePlugin);\n\n  function Search(hotInstance) {\n    _classCallCheck(this, Search);\n\n    /**\n     * Function called during querying for each cell from the {@link DataMap}.\n     *\n     * @private\n     * @type {Function}\n     */\n    var _this = _possibleConstructorReturn(this, (Search.__proto__ || Object.getPrototypeOf(Search)).call(this, hotInstance));\n\n    _this.callback = DEFAULT_CALLBACK;\n    /**\n     * Query function is responsible for determining whether a query matches the value stored in a cell.\n     *\n     * @private\n     * @type {Function}\n     */\n    _this.queryMethod = DEFAULT_QUERY_METHOD;\n    /**\n     * Class name added to each cell that belongs to the searched query.\n     *\n     * @private\n     * @type {String}\n     */\n    _this.searchResultClass = DEFAULT_SEARCH_RESULT_CLASS;\n    return _this;\n  }\n\n  /**\n   * Checks if the plugin is enabled in the handsontable settings. This method is executed in {@link Hooks#beforeInit}\n   * hook and if it returns `true` than the {@link AutoRowSize#enablePlugin} method is called.\n   *\n   * @returns {Boolean}\n   */\n\n\n  _createClass(Search, [{\n    key: 'isEnabled',\n    value: function isEnabled() {\n      return this.hot.getSettings().search;\n    }\n\n    /**\n     * Enables the plugin functionality for this Handsontable instance.\n     */\n\n  }, {\n    key: 'enablePlugin',\n    value: function enablePlugin() {\n      var _this2 = this;\n\n      if (this.enabled) {\n        return;\n      }\n\n      var searchSettings = this.hot.getSettings().search;\n      this.updatePluginSettings(searchSettings);\n\n      this.addHook('beforeRenderer', function () {\n        return _this2.onBeforeRenderer.apply(_this2, arguments);\n      });\n\n      _get(Search.prototype.__proto__ || Object.getPrototypeOf(Search.prototype), 'enablePlugin', this).call(this);\n    }\n\n    /**\n     * Disables the plugin functionality for this Handsontable instance.\n     */\n\n  }, {\n    key: 'disablePlugin',\n    value: function disablePlugin() {\n      var _this3 = this;\n\n      var beforeRendererCallback = function beforeRendererCallback() {\n        return _this3.onBeforeRenderer.apply(_this3, arguments);\n      };\n\n      this.hot.addHook('beforeRenderer', beforeRendererCallback);\n      this.hot.addHookOnce('afterRender', function () {\n        _this3.hot.removeHook('beforeRenderer', beforeRendererCallback);\n      });\n\n      _get(Search.prototype.__proto__ || Object.getPrototypeOf(Search.prototype), 'disablePlugin', this).call(this);\n    }\n\n    /**\n     * Updates the plugin state. This method is executed when {@link Core#updateSettings} is invoked.\n     */\n\n  }, {\n    key: 'updatePlugin',\n    value: function updatePlugin() {\n      this.disablePlugin();\n      this.enablePlugin();\n\n      _get(Search.prototype.__proto__ || Object.getPrototypeOf(Search.prototype), 'updatePlugin', this).call(this);\n    }\n\n    /**\n     * Makes the query.\n     *\n     * @param {String} queryStr Value to be search.\n     * @param {Function} [callback] Callback function performed on cells with values which matches to the searched query.\n     * @param {Function} [queryMethod] Query function responsible for determining whether a query matches the value stored in a cell.\n     * @returns {Object[]} Return an array of objects with `row`, `col`, `data` properties or empty array.\n     */\n\n  }, {\n    key: 'query',\n    value: function query(queryStr) {\n      var _this4 = this;\n\n      var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.getCallback();\n      var queryMethod = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.getQueryMethod();\n\n      var rowCount = this.hot.countRows();\n      var colCount = this.hot.countCols();\n      var queryResult = [];\n      var instance = this.hot;\n\n      (0, _number.rangeEach)(0, rowCount - 1, function (rowIndex) {\n        (0, _number.rangeEach)(0, colCount - 1, function (colIndex) {\n          var cellData = _this4.hot.getDataAtCell(rowIndex, colIndex);\n          var cellProperties = _this4.hot.getCellMeta(rowIndex, colIndex);\n          var cellCallback = cellProperties.search.callback || callback;\n          var cellQueryMethod = cellProperties.search.queryMethod || queryMethod;\n          var testResult = cellQueryMethod(queryStr, cellData);\n\n          if (testResult) {\n            var singleResult = {\n              row: rowIndex,\n              col: colIndex,\n              data: cellData\n            };\n\n            queryResult.push(singleResult);\n          }\n\n          if (cellCallback) {\n            cellCallback(instance, rowIndex, colIndex, cellData, testResult);\n          }\n        });\n      });\n\n      return queryResult;\n    }\n\n    /**\n     * Gets the callback function.\n     *\n     * @returns {Function} Return the callback function.\n     */\n\n  }, {\n    key: 'getCallback',\n    value: function getCallback() {\n      return this.callback;\n    }\n\n    /**\n     * Sets the callback function. This function will be called during querying for each cell.\n     *\n     * @param {Function} newCallback\n     */\n\n  }, {\n    key: 'setCallback',\n    value: function setCallback(newCallback) {\n      this.callback = newCallback;\n    }\n\n    /**\n     * Gets the query method function.\n     *\n     * @returns {Function} Return the query method.\n     */\n\n  }, {\n    key: 'getQueryMethod',\n    value: function getQueryMethod() {\n      return this.queryMethod;\n    }\n\n    /**\n     * Sets the query method function. The function is responsible for determining whether a query matches the value stored in a cell.\n     *\n     * @param {Function} newQueryMethod\n     */\n\n  }, {\n    key: 'setQueryMethod',\n    value: function setQueryMethod(newQueryMethod) {\n      this.queryMethod = newQueryMethod;\n    }\n\n    /**\n     * Gets search result cells class name.\n     *\n     * @returns {String} Return the cell class name.\n     */\n\n  }, {\n    key: 'getSearchResultClass',\n    value: function getSearchResultClass() {\n      return this.searchResultClass;\n    }\n\n    /**\n     * Sets search result cells class name. This class name will be added to each cell that belongs to the searched query.\n     *\n     * @param {String} newElementClass\n     */\n\n  }, {\n    key: 'setSearchResultClass',\n    value: function setSearchResultClass(newElementClass) {\n      this.searchResultClass = newElementClass;\n    }\n\n    /**\n     * Updates the settings of the plugin.\n     *\n     * @param {Object} searchSettings The plugin settings, taken from Handsontable configuration.\n     * @private\n     */\n\n  }, {\n    key: 'updatePluginSettings',\n    value: function updatePluginSettings(searchSettings) {\n      if ((0, _object.isObject)(searchSettings)) {\n        if (searchSettings.searchResultClass) {\n          this.setSearchResultClass(searchSettings.searchResultClass);\n        }\n\n        if (searchSettings.queryMethod) {\n          this.setQueryMethod(searchSettings.queryMethod);\n        }\n\n        if (searchSettings.callback) {\n          this.setCallback(searchSettings.callback);\n        }\n      }\n    }\n\n    /** *\n     * The `beforeRenderer` hook callback.\n     *\n     * @private\n     * @param {HTMLTableCellElement} TD The rendered `TD` element.\n     * @param {Number} row Visual row index.\n     * @param {Number} col Visual column index.\n     * @param {String | Number} prop Column property name or a column index, if datasource is an array of arrays.\n     * @param {String} value Value of the rendered cell.\n     * @param {Object} cellProperties Object containing the cell's properties.\n     */\n\n  }, {\n    key: 'onBeforeRenderer',\n    value: function onBeforeRenderer(TD, row, col, prop, value, cellProperties) {\n      // TODO: #4972\n      var className = cellProperties.className || [];\n      var classArray = [];\n\n      if (typeof className === 'string') {\n        classArray = className.split(' ');\n      } else {\n        var _classArray;\n\n        (_classArray = classArray).push.apply(_classArray, _toConsumableArray(className));\n      }\n\n      if (this.isEnabled() && cellProperties.isSearchResult) {\n        if (!classArray.includes(this.searchResultClass)) {\n          classArray.push('' + this.searchResultClass);\n        }\n      } else if (classArray.includes(this.searchResultClass)) {\n        classArray.splice(classArray.indexOf(this.searchResultClass), 1);\n      }\n\n      cellProperties.className = classArray.join(' ');\n    }\n\n    /**\n     * Destroys the plugin instance.\n     */\n\n  }, {\n    key: 'destroy',\n    value: function destroy() {\n      _get(Search.prototype.__proto__ || Object.getPrototypeOf(Search.prototype), 'destroy', this).call(this);\n    }\n  }]);\n\n  return Search;\n}(_base2.default);\n\n(0, _plugins.registerPlugin)('search', Search);\n\nexports.default = Search;\n\n/***/ }),\n/* 362 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _element = __webpack_require__(0);\n\nvar _array = __webpack_require__(2);\n\nvar _base = __webpack_require__(10);\n\nvar _base2 = _interopRequireDefault(_base);\n\nvar _plugins = __webpack_require__(8);\n\nvar _feature = __webpack_require__(40);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n/**\n * @private\n * @plugin TouchScroll\n * @class TouchScroll\n */\nvar TouchScroll = function (_BasePlugin) {\n  _inherits(TouchScroll, _BasePlugin);\n\n  function TouchScroll(hotInstance) {\n    _classCallCheck(this, TouchScroll);\n\n    /**\n     * Collection of scrollbars to update.\n     *\n     * @type {Array}\n     */\n    var _this = _possibleConstructorReturn(this, (TouchScroll.__proto__ || Object.getPrototypeOf(TouchScroll)).call(this, hotInstance));\n\n    _this.scrollbars = [];\n    /**\n     * Collection of overlays to update.\n     *\n     * @type {Array}\n     */\n    _this.clones = [];\n    /**\n     * Flag which determines if collection of overlays should be refilled on every table render.\n     *\n     * @type {Boolean}\n     * @default false\n     */\n    _this.lockedCollection = false;\n    /**\n     * Flag which determines if walkontable should freeze overlays while scrolling.\n     *\n     * @type {Boolean}\n     * @default false\n     */\n    _this.freezeOverlays = false;\n    return _this;\n  }\n\n  /**\n   * Check if plugin is enabled.\n   *\n   * @returns {Boolean}\n   */\n\n\n  _createClass(TouchScroll, [{\n    key: 'isEnabled',\n    value: function isEnabled() {\n      return (0, _feature.isTouchSupported)();\n    }\n\n    /**\n     * Enable the plugin.\n     */\n\n  }, {\n    key: 'enablePlugin',\n    value: function enablePlugin() {\n      var _this2 = this;\n\n      if (this.enabled) {\n        return;\n      }\n\n      this.addHook('afterRender', function () {\n        return _this2.onAfterRender();\n      });\n      this.registerEvents();\n\n      _get(TouchScroll.prototype.__proto__ || Object.getPrototypeOf(TouchScroll.prototype), 'enablePlugin', this).call(this);\n    }\n\n    /**\n     * Updates the plugin to use the latest options you have specified.\n     */\n\n  }, {\n    key: 'updatePlugin',\n    value: function updatePlugin() {\n      this.lockedCollection = false;\n\n      _get(TouchScroll.prototype.__proto__ || Object.getPrototypeOf(TouchScroll.prototype), 'updatePlugin', this).call(this);\n    }\n\n    /**\n     * Disable plugin for this Handsontable instance.\n     */\n\n  }, {\n    key: 'disablePlugin',\n    value: function disablePlugin() {\n      _get(TouchScroll.prototype.__proto__ || Object.getPrototypeOf(TouchScroll.prototype), 'disablePlugin', this).call(this);\n    }\n\n    /**\n     * Register all necessary events.\n     *\n     * @private\n     */\n\n  }, {\n    key: 'registerEvents',\n    value: function registerEvents() {\n      var _this3 = this;\n\n      this.addHook('beforeTouchScroll', function () {\n        return _this3.onBeforeTouchScroll();\n      });\n      this.addHook('afterMomentumScroll', function () {\n        return _this3.onAfterMomentumScroll();\n      });\n    }\n\n    /**\n     * After render listener.\n     *\n     * @private\n     */\n\n  }, {\n    key: 'onAfterRender',\n    value: function onAfterRender() {\n      if (this.lockedCollection) {\n        return;\n      }\n\n      var _hot$view$wt$wtOverla = this.hot.view.wt.wtOverlays,\n          topOverlay = _hot$view$wt$wtOverla.topOverlay,\n          bottomOverlay = _hot$view$wt$wtOverla.bottomOverlay,\n          leftOverlay = _hot$view$wt$wtOverla.leftOverlay,\n          topLeftCornerOverlay = _hot$view$wt$wtOverla.topLeftCornerOverlay,\n          bottomLeftCornerOverlay = _hot$view$wt$wtOverla.bottomLeftCornerOverlay;\n\n\n      this.lockedCollection = true;\n      this.scrollbars.length = 0;\n      this.scrollbars.push(topOverlay);\n\n      if (bottomOverlay.clone) {\n        this.scrollbars.push(bottomOverlay);\n      }\n      this.scrollbars.push(leftOverlay);\n\n      if (topLeftCornerOverlay) {\n        this.scrollbars.push(topLeftCornerOverlay);\n      }\n      if (bottomLeftCornerOverlay && bottomLeftCornerOverlay.clone) {\n        this.scrollbars.push(bottomLeftCornerOverlay);\n      }\n\n      this.clones.length = 0;\n\n      if (topOverlay.needFullRender) {\n        this.clones.push(topOverlay.clone.wtTable.holder.parentNode);\n      }\n      if (bottomOverlay.needFullRender) {\n        this.clones.push(bottomOverlay.clone.wtTable.holder.parentNode);\n      }\n      if (leftOverlay.needFullRender) {\n        this.clones.push(leftOverlay.clone.wtTable.holder.parentNode);\n      }\n      if (topLeftCornerOverlay) {\n        this.clones.push(topLeftCornerOverlay.clone.wtTable.holder.parentNode);\n      }\n      if (bottomLeftCornerOverlay && bottomLeftCornerOverlay.clone) {\n        this.clones.push(bottomLeftCornerOverlay.clone.wtTable.holder.parentNode);\n      }\n    }\n\n    /**\n     * Touch scroll listener.\n     *\n     * @private\n     */\n\n  }, {\n    key: 'onBeforeTouchScroll',\n    value: function onBeforeTouchScroll() {\n      this.freezeOverlays = true;\n\n      (0, _array.arrayEach)(this.clones, function (clone) {\n        (0, _element.addClass)(clone, 'hide-tween');\n      });\n    }\n\n    /**\n     * After momentum scroll listener.\n     *\n     * @private\n     */\n\n  }, {\n    key: 'onAfterMomentumScroll',\n    value: function onAfterMomentumScroll() {\n      var _this4 = this;\n\n      this.freezeOverlays = false;\n\n      (0, _array.arrayEach)(this.clones, function (clone) {\n        (0, _element.removeClass)(clone, 'hide-tween');\n        (0, _element.addClass)(clone, 'show-tween');\n      });\n\n      setTimeout(function () {\n        (0, _array.arrayEach)(_this4.clones, function (clone) {\n          (0, _element.removeClass)(clone, 'show-tween');\n        });\n      }, 400);\n\n      (0, _array.arrayEach)(this.scrollbars, function (scrollbar) {\n        scrollbar.refresh();\n        scrollbar.resetFixedPosition();\n      });\n\n      this.hot.view.wt.wtOverlays.syncScrollWithMaster();\n    }\n  }]);\n\n  return TouchScroll;\n}(_base2.default);\n\n(0, _plugins.registerPlugin)('touchScroll', TouchScroll);\n\nexports.default = TouchScroll;\n\n/***/ }),\n/* 363 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _pluginHooks = __webpack_require__(16);\n\nvar _pluginHooks2 = _interopRequireDefault(_pluginHooks);\n\nvar _array = __webpack_require__(2);\n\nvar _number = __webpack_require__(6);\n\nvar _object = __webpack_require__(1);\n\nvar _event = __webpack_require__(13);\n\nvar _utils = __webpack_require__(19);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                * Handsontable UndoRedo class\n                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                */\n\n\n/**\n * @description\n * Handsontable UndoRedo plugin allows to undo and redo certain actions done in the table.\n *\n * __Note__, that not all actions are currently undo-able. The UndoRedo plugin is enabled by default.\n *\n * @example\n * ```js\n * undo: true\n * ```\n * @class UndoRedo\n * @plugin UndoRedo\n */\nfunction UndoRedo(instance) {\n  var plugin = this;\n  this.instance = instance;\n  this.doneActions = [];\n  this.undoneActions = [];\n  this.ignoreNewActions = false;\n\n  instance.addHook('afterChange', function (changes, source) {\n    if (changes && source !== 'UndoRedo.undo' && source !== 'UndoRedo.redo' && source !== 'MergeCells') {\n      plugin.done(new UndoRedo.ChangeAction(changes));\n    }\n  });\n\n  instance.addHook('afterCreateRow', function (index, amount, source) {\n    if (source === 'UndoRedo.undo' || source === 'UndoRedo.undo' || source === 'auto') {\n      return;\n    }\n\n    var action = new UndoRedo.CreateRowAction(index, amount);\n    plugin.done(action);\n  });\n\n  instance.addHook('beforeRemoveRow', function (index, amount, logicRows, source) {\n    if (source === 'UndoRedo.undo' || source === 'UndoRedo.redo' || source === 'auto') {\n      return;\n    }\n\n    var originalData = plugin.instance.getSourceDataArray();\n    var rowIndex = (originalData.length + index) % originalData.length;\n    var removedData = (0, _object.deepClone)(originalData.slice(rowIndex, rowIndex + amount));\n\n    plugin.done(new UndoRedo.RemoveRowAction(rowIndex, removedData));\n  });\n\n  instance.addHook('afterCreateCol', function (index, amount, source) {\n    if (source === 'UndoRedo.undo' || source === 'UndoRedo.redo' || source === 'auto') {\n      return;\n    }\n\n    plugin.done(new UndoRedo.CreateColumnAction(index, amount));\n  });\n\n  instance.addHook('beforeRemoveCol', function (index, amount, logicColumns, source) {\n    if (source === 'UndoRedo.undo' || source === 'UndoRedo.redo' || source === 'auto') {\n      return;\n    }\n\n    var originalData = plugin.instance.getSourceDataArray();\n    var columnIndex = (plugin.instance.countCols() + index) % plugin.instance.countCols();\n    var removedData = [];\n    var headers = [];\n    var indexes = [];\n\n    (0, _number.rangeEach)(originalData.length - 1, function (i) {\n      var column = [];\n      var origRow = originalData[i];\n\n      (0, _number.rangeEach)(columnIndex, columnIndex + (amount - 1), function (j) {\n        column.push(origRow[instance.runHooks('modifyCol', j)]);\n      });\n      removedData.push(column);\n    });\n\n    (0, _number.rangeEach)(amount - 1, function (i) {\n      indexes.push(instance.runHooks('modifyCol', columnIndex + i));\n    });\n\n    if (Array.isArray(instance.getSettings().colHeaders)) {\n      (0, _number.rangeEach)(amount - 1, function (i) {\n        headers.push(instance.getSettings().colHeaders[instance.runHooks('modifyCol', columnIndex + i)] || null);\n      });\n    }\n\n    var manualColumnMovePlugin = plugin.instance.getPlugin('manualColumnMove');\n    var columnsMap = manualColumnMovePlugin.isEnabled() ? manualColumnMovePlugin.columnsMapper.__arrayMap : [];\n    var action = new UndoRedo.RemoveColumnAction(columnIndex, indexes, removedData, headers, columnsMap);\n\n    plugin.done(action);\n  });\n\n  instance.addHook('beforeCellAlignment', function (stateBefore, range, type, alignment) {\n    var action = new UndoRedo.CellAlignmentAction(stateBefore, range, type, alignment);\n    plugin.done(action);\n  });\n\n  instance.addHook('beforeFilter', function (conditionsStack) {\n    plugin.done(new UndoRedo.FiltersAction(conditionsStack));\n  });\n\n  instance.addHook('beforeRowMove', function (movedRows, target) {\n    if (movedRows === false) {\n      return;\n    }\n\n    plugin.done(new UndoRedo.RowMoveAction(movedRows, target));\n  });\n\n  instance.addHook('beforeMergeCells', function (cellRange, auto) {\n    if (auto) {\n      return;\n    }\n\n    plugin.done(new UndoRedo.MergeCellsAction(instance, cellRange));\n  });\n\n  instance.addHook('afterUnmergeCells', function (cellRange, auto) {\n    if (auto) {\n      return;\n    }\n\n    plugin.done(new UndoRedo.UnmergeCellsAction(instance, cellRange));\n  });\n}\n\nUndoRedo.prototype.done = function (action) {\n  if (!this.ignoreNewActions) {\n    this.doneActions.push(action);\n    this.undoneActions.length = 0;\n  }\n};\n\n/**\n * Undo the last action performed to the table.\n *\n * @function undo\n * @memberof UndoRedo#\n * @fires Hooks#beforeUndo\n * @fires Hooks#afterUndo\n */\nUndoRedo.prototype.undo = function () {\n  if (this.isUndoAvailable()) {\n    var action = this.doneActions.pop();\n    var actionClone = (0, _object.deepClone)(action);\n    var instance = this.instance;\n\n    var continueAction = instance.runHooks('beforeUndo', actionClone);\n\n    if (continueAction === false) {\n      return;\n    }\n\n    this.ignoreNewActions = true;\n    var that = this;\n    action.undo(this.instance, function () {\n      that.ignoreNewActions = false;\n      that.undoneActions.push(action);\n    });\n\n    instance.runHooks('afterUndo', actionClone);\n  }\n};\n\n/**\n * Redo the previous action performed to the table (used to reverse an undo).\n *\n * @function redo\n * @memberof UndoRedo#\n * @fires Hooks#beforeRedo\n * @fires Hooks#afterRedo\n */\nUndoRedo.prototype.redo = function () {\n  if (this.isRedoAvailable()) {\n    var action = this.undoneActions.pop();\n    var actionClone = (0, _object.deepClone)(action);\n    var instance = this.instance;\n\n    var continueAction = instance.runHooks('beforeRedo', actionClone);\n\n    if (continueAction === false) {\n      return;\n    }\n\n    this.ignoreNewActions = true;\n    var that = this;\n    action.redo(this.instance, function () {\n      that.ignoreNewActions = false;\n      that.doneActions.push(action);\n    });\n\n    instance.runHooks('afterRedo', actionClone);\n  }\n};\n\n/**\n * Checks if undo action is available.\n *\n * @function isUndoAvailable\n * @memberof UndoRedo#\n * @return {Boolean} Return `true` if undo can be performed, `false` otherwise.\n */\nUndoRedo.prototype.isUndoAvailable = function () {\n  return this.doneActions.length > 0;\n};\n\n/**\n * Checks if redo action is available.\n *\n * @function isRedoAvailable\n * @memberof UndoRedo#\n * @return {Boolean} Return `true` if redo can be performed, `false` otherwise.\n */\nUndoRedo.prototype.isRedoAvailable = function () {\n  return this.undoneActions.length > 0;\n};\n\n/**\n * Clears undo history.\n *\n * @function clear\n * @memberof UndoRedo#\n */\nUndoRedo.prototype.clear = function () {\n  this.doneActions.length = 0;\n  this.undoneActions.length = 0;\n};\n\nUndoRedo.Action = function () {};\nUndoRedo.Action.prototype.undo = function () {};\nUndoRedo.Action.prototype.redo = function () {};\n\n/**\n * Change action.\n *\n * @private\n */\nUndoRedo.ChangeAction = function (changes) {\n  this.changes = changes;\n  this.actionType = 'change';\n};\n(0, _object.inherit)(UndoRedo.ChangeAction, UndoRedo.Action);\n\nUndoRedo.ChangeAction.prototype.undo = function (instance, undoneCallback) {\n  var data = (0, _object.deepClone)(this.changes);\n  var emptyRowsAtTheEnd = instance.countEmptyRows(true);\n  var emptyColsAtTheEnd = instance.countEmptyCols(true);\n\n  for (var i = 0, len = data.length; i < len; i++) {\n    data[i].splice(3, 1);\n  }\n\n  instance.addHookOnce('afterChange', undoneCallback);\n\n  instance.setDataAtRowProp(data, null, null, 'UndoRedo.undo');\n\n  for (var _i = 0, _len = data.length; _i < _len; _i++) {\n    if (instance.getSettings().minSpareRows && data[_i][0] + 1 + instance.getSettings().minSpareRows === instance.countRows() && emptyRowsAtTheEnd === instance.getSettings().minSpareRows) {\n\n      instance.alter('remove_row', parseInt(data[_i][0] + 1, 10), instance.getSettings().minSpareRows);\n      instance.undoRedo.doneActions.pop();\n    }\n\n    if (instance.getSettings().minSpareCols && data[_i][1] + 1 + instance.getSettings().minSpareCols === instance.countCols() && emptyColsAtTheEnd === instance.getSettings().minSpareCols) {\n\n      instance.alter('remove_col', parseInt(data[_i][1] + 1, 10), instance.getSettings().minSpareCols);\n      instance.undoRedo.doneActions.pop();\n    }\n  }\n};\nUndoRedo.ChangeAction.prototype.redo = function (instance, onFinishCallback) {\n  var data = (0, _object.deepClone)(this.changes);\n\n  for (var i = 0, len = data.length; i < len; i++) {\n    data[i].splice(2, 1);\n  }\n\n  instance.addHookOnce('afterChange', onFinishCallback);\n  instance.setDataAtRowProp(data, null, null, 'UndoRedo.redo');\n};\n\n/**\n * Create row action.\n *\n * @private\n */\nUndoRedo.CreateRowAction = function (index, amount) {\n  this.index = index;\n  this.amount = amount;\n  this.actionType = 'insert_row';\n};\n(0, _object.inherit)(UndoRedo.CreateRowAction, UndoRedo.Action);\n\nUndoRedo.CreateRowAction.prototype.undo = function (instance, undoneCallback) {\n  var rowCount = instance.countRows();\n  var minSpareRows = instance.getSettings().minSpareRows;\n\n  if (this.index >= rowCount && this.index - minSpareRows < rowCount) {\n    this.index -= minSpareRows; // work around the situation where the needed row was removed due to an 'undo' of a made change\n  }\n\n  instance.addHookOnce('afterRemoveRow', undoneCallback);\n  instance.alter('remove_row', this.index, this.amount, 'UndoRedo.undo');\n};\nUndoRedo.CreateRowAction.prototype.redo = function (instance, redoneCallback) {\n  instance.addHookOnce('afterCreateRow', redoneCallback);\n  instance.alter('insert_row', this.index, this.amount, 'UndoRedo.redo');\n};\n\n/**\n * Remove row action.\n *\n * @private\n */\nUndoRedo.RemoveRowAction = function (index, data) {\n  this.index = index;\n  this.data = data;\n  this.actionType = 'remove_row';\n};\n(0, _object.inherit)(UndoRedo.RemoveRowAction, UndoRedo.Action);\n\nUndoRedo.RemoveRowAction.prototype.undo = function (instance, undoneCallback) {\n  instance.alter('insert_row', this.index, this.data.length, 'UndoRedo.undo');\n  instance.addHookOnce('afterRender', undoneCallback);\n  instance.populateFromArray(this.index, 0, this.data, void 0, void 0, 'UndoRedo.undo');\n};\nUndoRedo.RemoveRowAction.prototype.redo = function (instance, redoneCallback) {\n  instance.addHookOnce('afterRemoveRow', redoneCallback);\n  instance.alter('remove_row', this.index, this.data.length, 'UndoRedo.redo');\n};\n\n/**\n * Create column action.\n *\n * @private\n */\nUndoRedo.CreateColumnAction = function (index, amount) {\n  this.index = index;\n  this.amount = amount;\n  this.actionType = 'insert_col';\n};\n(0, _object.inherit)(UndoRedo.CreateColumnAction, UndoRedo.Action);\n\nUndoRedo.CreateColumnAction.prototype.undo = function (instance, undoneCallback) {\n  instance.addHookOnce('afterRemoveCol', undoneCallback);\n  instance.alter('remove_col', this.index, this.amount, 'UndoRedo.undo');\n};\nUndoRedo.CreateColumnAction.prototype.redo = function (instance, redoneCallback) {\n  instance.addHookOnce('afterCreateCol', redoneCallback);\n  instance.alter('insert_col', this.index, this.amount, 'UndoRedo.redo');\n};\n\n/**\n * Remove column action.\n *\n * @private\n */\nUndoRedo.RemoveColumnAction = function (index, indexes, data, headers, columnPositions) {\n  this.index = index;\n  this.indexes = indexes;\n  this.data = data;\n  this.amount = this.data[0].length;\n  this.headers = headers;\n  this.columnPositions = columnPositions.slice(0);\n  this.actionType = 'remove_col';\n};\n(0, _object.inherit)(UndoRedo.RemoveColumnAction, UndoRedo.Action);\n\nUndoRedo.RemoveColumnAction.prototype.undo = function (instance, undoneCallback) {\n  var _this = this;\n\n  var row = void 0;\n  var ascendingIndexes = this.indexes.slice(0).sort();\n  var sortByIndexes = function sortByIndexes(elem, j, arr) {\n    return arr[_this.indexes.indexOf(ascendingIndexes[j])];\n  };\n\n  var sortedData = [];\n  (0, _number.rangeEach)(this.data.length - 1, function (i) {\n    sortedData[i] = (0, _array.arrayMap)(_this.data[i], sortByIndexes);\n  });\n\n  var sortedHeaders = [];\n  sortedHeaders = (0, _array.arrayMap)(this.headers, sortByIndexes);\n\n  var changes = [];\n\n  // TODO: Temporary hook for undo/redo mess\n  instance.runHooks('beforeCreateCol', this.indexes[0], this.indexes.length, 'UndoRedo.undo');\n\n  (0, _number.rangeEach)(this.data.length - 1, function (i) {\n    row = instance.getSourceDataAtRow(i);\n\n    (0, _number.rangeEach)(ascendingIndexes.length - 1, function (j) {\n      row.splice(ascendingIndexes[j], 0, sortedData[i][j]);\n      changes.push([i, ascendingIndexes[j], null, sortedData[i][j]]);\n    });\n  });\n\n  // TODO: Temporary hook for undo/redo mess\n  if (instance.getPlugin('formulas')) {\n    instance.getPlugin('formulas').onAfterSetDataAtCell(changes);\n  }\n\n  if (typeof this.headers !== 'undefined') {\n    (0, _number.rangeEach)(sortedHeaders.length - 1, function (j) {\n      instance.getSettings().colHeaders.splice(ascendingIndexes[j], 0, sortedHeaders[j]);\n    });\n  }\n\n  if (instance.getPlugin('manualColumnMove')) {\n    instance.getPlugin('manualColumnMove').columnsMapper.__arrayMap = this.columnPositions;\n  }\n\n  instance.addHookOnce('afterRender', undoneCallback);\n\n  // TODO: Temporary hook for undo/redo mess\n  instance.runHooks('afterCreateCol', this.indexes[0], this.indexes.length, 'UndoRedo.undo');\n\n  if (instance.getPlugin('formulas')) {\n    instance.getPlugin('formulas').recalculateFull();\n  }\n\n  instance.render();\n};\n\nUndoRedo.RemoveColumnAction.prototype.redo = function (instance, redoneCallback) {\n  instance.addHookOnce('afterRemoveCol', redoneCallback);\n  instance.alter('remove_col', this.index, this.amount, 'UndoRedo.redo');\n};\n\n/**\n * Cell alignment action.\n *\n * @private\n */\nUndoRedo.CellAlignmentAction = function (stateBefore, range, type, alignment) {\n  this.stateBefore = stateBefore;\n  this.range = range;\n  this.type = type;\n  this.alignment = alignment;\n};\nUndoRedo.CellAlignmentAction.prototype.undo = function (instance, undoneCallback) {\n  var _this2 = this;\n\n  (0, _array.arrayEach)(this.range, function (_ref) {\n    var from = _ref.from,\n        to = _ref.to;\n\n    for (var row = from.row; row <= to.row; row += 1) {\n      for (var col = from.col; col <= to.col; col += 1) {\n        instance.setCellMeta(row, col, 'className', _this2.stateBefore[row][col] || ' htLeft');\n      }\n    }\n  });\n\n  instance.addHookOnce('afterRender', undoneCallback);\n  instance.render();\n};\nUndoRedo.CellAlignmentAction.prototype.redo = function (instance, undoneCallback) {\n  (0, _utils.align)(this.range, this.type, this.alignment, function (row, col) {\n    return instance.getCellMeta(row, col);\n  }, function (row, col, key, value) {\n    return instance.setCellMeta(row, col, key, value);\n  });\n\n  instance.addHookOnce('afterRender', undoneCallback);\n  instance.render();\n};\n\n/**\n * Filters action.\n *\n * @private\n */\nUndoRedo.FiltersAction = function (conditionsStack) {\n  this.conditionsStack = conditionsStack;\n  this.actionType = 'filter';\n};\n(0, _object.inherit)(UndoRedo.FiltersAction, UndoRedo.Action);\n\nUndoRedo.FiltersAction.prototype.undo = function (instance, undoneCallback) {\n  var filters = instance.getPlugin('filters');\n\n  instance.addHookOnce('afterRender', undoneCallback);\n\n  filters.conditionCollection.importAllConditions(this.conditionsStack.slice(0, this.conditionsStack.length - 1));\n  filters.filter();\n};\nUndoRedo.FiltersAction.prototype.redo = function (instance, redoneCallback) {\n  var filters = instance.getPlugin('filters');\n\n  instance.addHookOnce('afterRender', redoneCallback);\n\n  filters.conditionCollection.importAllConditions(this.conditionsStack);\n  filters.filter();\n};\n\n/**\n * Merge Cells action.\n * @util\n */\n\nvar MergeCellsAction = function (_UndoRedo$Action) {\n  _inherits(MergeCellsAction, _UndoRedo$Action);\n\n  function MergeCellsAction(instance, cellRange) {\n    _classCallCheck(this, MergeCellsAction);\n\n    var _this3 = _possibleConstructorReturn(this, (MergeCellsAction.__proto__ || Object.getPrototypeOf(MergeCellsAction)).call(this));\n\n    _this3.cellRange = cellRange;\n    _this3.rangeData = instance.getData(cellRange.from.row, cellRange.from.col, cellRange.to.row, cellRange.to.col);\n    return _this3;\n  }\n\n  _createClass(MergeCellsAction, [{\n    key: 'undo',\n    value: function undo(instance, undoneCallback) {\n      var mergeCellsPlugin = instance.getPlugin('mergeCells');\n      instance.addHookOnce('afterRender', undoneCallback);\n\n      mergeCellsPlugin.unmergeRange(this.cellRange, true);\n      instance.populateFromArray(this.cellRange.from.row, this.cellRange.from.col, this.rangeData, void 0, void 0, 'MergeCells');\n    }\n  }, {\n    key: 'redo',\n    value: function redo(instance, redoneCallback) {\n      var mergeCellsPlugin = instance.getPlugin('mergeCells');\n      instance.addHookOnce('afterRender', redoneCallback);\n\n      mergeCellsPlugin.mergeRange(this.cellRange);\n    }\n  }]);\n\n  return MergeCellsAction;\n}(UndoRedo.Action);\n\nUndoRedo.MergeCellsAction = MergeCellsAction;\n\n/**\n * Unmerge Cells action.\n * @util\n */\n\nvar UnmergeCellsAction = function (_UndoRedo$Action2) {\n  _inherits(UnmergeCellsAction, _UndoRedo$Action2);\n\n  function UnmergeCellsAction(instance, cellRange) {\n    _classCallCheck(this, UnmergeCellsAction);\n\n    var _this4 = _possibleConstructorReturn(this, (UnmergeCellsAction.__proto__ || Object.getPrototypeOf(UnmergeCellsAction)).call(this));\n\n    _this4.cellRange = cellRange;\n    return _this4;\n  }\n\n  _createClass(UnmergeCellsAction, [{\n    key: 'undo',\n    value: function undo(instance, undoneCallback) {\n      var mergeCellsPlugin = instance.getPlugin('mergeCells');\n      instance.addHookOnce('afterRender', undoneCallback);\n\n      mergeCellsPlugin.mergeRange(this.cellRange, true);\n    }\n  }, {\n    key: 'redo',\n    value: function redo(instance, redoneCallback) {\n      var mergeCellsPlugin = instance.getPlugin('mergeCells');\n      instance.addHookOnce('afterRender', redoneCallback);\n\n      mergeCellsPlugin.unmergeRange(this.cellRange, true);\n      instance.render();\n    }\n  }]);\n\n  return UnmergeCellsAction;\n}(UndoRedo.Action);\n\nUndoRedo.UnmergeCellsAction = UnmergeCellsAction;\n\n/**\n * ManualRowMove action.\n *\n * @private\n * @TODO: removeRow undo should works on logical index\n */\nUndoRedo.RowMoveAction = function (movedRows, target) {\n  this.rows = movedRows.slice();\n  this.target = target;\n};\n(0, _object.inherit)(UndoRedo.RowMoveAction, UndoRedo.Action);\n\nUndoRedo.RowMoveAction.prototype.undo = function (instance, undoneCallback) {\n  var manualRowMove = instance.getPlugin('manualRowMove');\n\n  instance.addHookOnce('afterRender', undoneCallback);\n\n  var mod = this.rows[0] < this.target ? -1 * this.rows.length : 0;\n  var newTarget = this.rows[0] > this.target ? this.rows[0] + this.rows.length : this.rows[0];\n  var newRows = [];\n  var rowsLen = this.rows.length + mod;\n\n  for (var i = mod; i < rowsLen; i += 1) {\n    newRows.push(this.target + i);\n  }\n\n  manualRowMove.moveRows(newRows.slice(), newTarget);\n  instance.render();\n\n  instance.selectCell(this.rows[0], 0, this.rows[this.rows.length - 1], instance.countCols() - 1, false, false);\n};\nUndoRedo.RowMoveAction.prototype.redo = function (instance, redoneCallback) {\n  var manualRowMove = instance.getPlugin('manualRowMove');\n\n  instance.addHookOnce('afterRender', redoneCallback);\n  manualRowMove.moveRows(this.rows.slice(), this.target);\n  instance.render();\n  var startSelection = this.rows[0] < this.target ? this.target - this.rows.length : this.target;\n\n  instance.selectCell(startSelection, 0, startSelection + this.rows.length - 1, instance.countCols() - 1, false, false);\n};\n\nfunction init() {\n  var instance = this;\n  var pluginEnabled = typeof instance.getSettings().undo === 'undefined' || instance.getSettings().undo;\n\n  if (pluginEnabled) {\n    if (!instance.undoRedo) {\n      /**\n       * Instance of Handsontable.UndoRedo Plugin {@link Handsontable.UndoRedo}\n       *\n       * @alias undoRedo\n       * @memberof! Handsontable.Core#\n       * @type {UndoRedo}\n       */\n      instance.undoRedo = new UndoRedo(instance);\n\n      exposeUndoRedoMethods(instance);\n\n      instance.addHook('beforeKeyDown', onBeforeKeyDown);\n      instance.addHook('afterChange', onAfterChange);\n    }\n  } else if (instance.undoRedo) {\n    delete instance.undoRedo;\n\n    removeExposedUndoRedoMethods(instance);\n\n    instance.removeHook('beforeKeyDown', onBeforeKeyDown);\n    instance.removeHook('afterChange', onAfterChange);\n  }\n}\n\nfunction onBeforeKeyDown(event) {\n  var instance = this;\n\n  var ctrlDown = (event.ctrlKey || event.metaKey) && !event.altKey;\n\n  if (ctrlDown) {\n    if (event.keyCode === 89 || event.shiftKey && event.keyCode === 90) {\n      // CTRL + Y or CTRL + SHIFT + Z\n      instance.undoRedo.redo();\n      (0, _event.stopImmediatePropagation)(event);\n    } else if (event.keyCode === 90) {\n      // CTRL + Z\n      instance.undoRedo.undo();\n      (0, _event.stopImmediatePropagation)(event);\n    }\n  }\n}\n\nfunction onAfterChange(changes, source) {\n  var instance = this;\n  if (source === 'loadData') {\n    return instance.undoRedo.clear();\n  }\n}\n\nfunction exposeUndoRedoMethods(instance) {\n  /**\n   * {@link UndoRedo#undo}\n   * @alias undo\n   * @memberof! Handsontable.Core#\n   */\n  instance.undo = function () {\n    return instance.undoRedo.undo();\n  };\n\n  /**\n   * {@link UndoRedo#redo}\n   * @alias redo\n   * @memberof! Handsontable.Core#\n   */\n  instance.redo = function () {\n    return instance.undoRedo.redo();\n  };\n\n  /**\n   * {@link UndoRedo#isUndoAvailable}\n   * @alias isUndoAvailable\n   * @memberof! Handsontable.Core#\n   */\n  instance.isUndoAvailable = function () {\n    return instance.undoRedo.isUndoAvailable();\n  };\n\n  /**\n   * {@link UndoRedo#isRedoAvailable}\n   * @alias isRedoAvailable\n   * @memberof! Handsontable.Core#\n   */\n  instance.isRedoAvailable = function () {\n    return instance.undoRedo.isRedoAvailable();\n  };\n\n  /**\n   * {@link UndoRedo#clear}\n   * @alias clearUndo\n   * @memberof! Handsontable.Core#\n   */\n  instance.clearUndo = function () {\n    return instance.undoRedo.clear();\n  };\n}\n\nfunction removeExposedUndoRedoMethods(instance) {\n  delete instance.undo;\n  delete instance.redo;\n  delete instance.isUndoAvailable;\n  delete instance.isRedoAvailable;\n  delete instance.clearUndo;\n}\n\nvar hook = _pluginHooks2.default.getSingleton();\n\nhook.add('afterInit', init);\nhook.add('afterUpdateSettings', init);\n\nhook.register('beforeUndo');\nhook.register('afterUndo');\nhook.register('beforeRedo');\nhook.register('afterRedo');\n\nexports.default = UndoRedo;\n\n/***/ })\n/******/ ])[\"default\"];\n});\n//# sourceMappingURL=handsontable.js.map\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../timers-browserify/main.js */ \"./node_modules/timers-browserify/main.js\").setImmediate, __webpack_require__(/*! ./../../timers-browserify/main.js */ \"./node_modules/timers-browserify/main.js\").clearImmediate))\n\n//# sourceURL=webpack:///./node_modules/handsontable/dist/handsontable.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale sync recursive ^\\.\\/.*$":
/*!****************************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale sync ^\.\/.*$ ***!
  \****************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var map = {\n\t\"./af\": \"./node_modules/handsontable/node_modules/moment/locale/af.js\",\n\t\"./af.js\": \"./node_modules/handsontable/node_modules/moment/locale/af.js\",\n\t\"./ar\": \"./node_modules/handsontable/node_modules/moment/locale/ar.js\",\n\t\"./ar-dz\": \"./node_modules/handsontable/node_modules/moment/locale/ar-dz.js\",\n\t\"./ar-dz.js\": \"./node_modules/handsontable/node_modules/moment/locale/ar-dz.js\",\n\t\"./ar-kw\": \"./node_modules/handsontable/node_modules/moment/locale/ar-kw.js\",\n\t\"./ar-kw.js\": \"./node_modules/handsontable/node_modules/moment/locale/ar-kw.js\",\n\t\"./ar-ly\": \"./node_modules/handsontable/node_modules/moment/locale/ar-ly.js\",\n\t\"./ar-ly.js\": \"./node_modules/handsontable/node_modules/moment/locale/ar-ly.js\",\n\t\"./ar-ma\": \"./node_modules/handsontable/node_modules/moment/locale/ar-ma.js\",\n\t\"./ar-ma.js\": \"./node_modules/handsontable/node_modules/moment/locale/ar-ma.js\",\n\t\"./ar-sa\": \"./node_modules/handsontable/node_modules/moment/locale/ar-sa.js\",\n\t\"./ar-sa.js\": \"./node_modules/handsontable/node_modules/moment/locale/ar-sa.js\",\n\t\"./ar-tn\": \"./node_modules/handsontable/node_modules/moment/locale/ar-tn.js\",\n\t\"./ar-tn.js\": \"./node_modules/handsontable/node_modules/moment/locale/ar-tn.js\",\n\t\"./ar.js\": \"./node_modules/handsontable/node_modules/moment/locale/ar.js\",\n\t\"./az\": \"./node_modules/handsontable/node_modules/moment/locale/az.js\",\n\t\"./az.js\": \"./node_modules/handsontable/node_modules/moment/locale/az.js\",\n\t\"./be\": \"./node_modules/handsontable/node_modules/moment/locale/be.js\",\n\t\"./be.js\": \"./node_modules/handsontable/node_modules/moment/locale/be.js\",\n\t\"./bg\": \"./node_modules/handsontable/node_modules/moment/locale/bg.js\",\n\t\"./bg.js\": \"./node_modules/handsontable/node_modules/moment/locale/bg.js\",\n\t\"./bm\": \"./node_modules/handsontable/node_modules/moment/locale/bm.js\",\n\t\"./bm.js\": \"./node_modules/handsontable/node_modules/moment/locale/bm.js\",\n\t\"./bn\": \"./node_modules/handsontable/node_modules/moment/locale/bn.js\",\n\t\"./bn.js\": \"./node_modules/handsontable/node_modules/moment/locale/bn.js\",\n\t\"./bo\": \"./node_modules/handsontable/node_modules/moment/locale/bo.js\",\n\t\"./bo.js\": \"./node_modules/handsontable/node_modules/moment/locale/bo.js\",\n\t\"./br\": \"./node_modules/handsontable/node_modules/moment/locale/br.js\",\n\t\"./br.js\": \"./node_modules/handsontable/node_modules/moment/locale/br.js\",\n\t\"./bs\": \"./node_modules/handsontable/node_modules/moment/locale/bs.js\",\n\t\"./bs.js\": \"./node_modules/handsontable/node_modules/moment/locale/bs.js\",\n\t\"./ca\": \"./node_modules/handsontable/node_modules/moment/locale/ca.js\",\n\t\"./ca.js\": \"./node_modules/handsontable/node_modules/moment/locale/ca.js\",\n\t\"./cs\": \"./node_modules/handsontable/node_modules/moment/locale/cs.js\",\n\t\"./cs.js\": \"./node_modules/handsontable/node_modules/moment/locale/cs.js\",\n\t\"./cv\": \"./node_modules/handsontable/node_modules/moment/locale/cv.js\",\n\t\"./cv.js\": \"./node_modules/handsontable/node_modules/moment/locale/cv.js\",\n\t\"./cy\": \"./node_modules/handsontable/node_modules/moment/locale/cy.js\",\n\t\"./cy.js\": \"./node_modules/handsontable/node_modules/moment/locale/cy.js\",\n\t\"./da\": \"./node_modules/handsontable/node_modules/moment/locale/da.js\",\n\t\"./da.js\": \"./node_modules/handsontable/node_modules/moment/locale/da.js\",\n\t\"./de\": \"./node_modules/handsontable/node_modules/moment/locale/de.js\",\n\t\"./de-at\": \"./node_modules/handsontable/node_modules/moment/locale/de-at.js\",\n\t\"./de-at.js\": \"./node_modules/handsontable/node_modules/moment/locale/de-at.js\",\n\t\"./de-ch\": \"./node_modules/handsontable/node_modules/moment/locale/de-ch.js\",\n\t\"./de-ch.js\": \"./node_modules/handsontable/node_modules/moment/locale/de-ch.js\",\n\t\"./de.js\": \"./node_modules/handsontable/node_modules/moment/locale/de.js\",\n\t\"./dv\": \"./node_modules/handsontable/node_modules/moment/locale/dv.js\",\n\t\"./dv.js\": \"./node_modules/handsontable/node_modules/moment/locale/dv.js\",\n\t\"./el\": \"./node_modules/handsontable/node_modules/moment/locale/el.js\",\n\t\"./el.js\": \"./node_modules/handsontable/node_modules/moment/locale/el.js\",\n\t\"./en-au\": \"./node_modules/handsontable/node_modules/moment/locale/en-au.js\",\n\t\"./en-au.js\": \"./node_modules/handsontable/node_modules/moment/locale/en-au.js\",\n\t\"./en-ca\": \"./node_modules/handsontable/node_modules/moment/locale/en-ca.js\",\n\t\"./en-ca.js\": \"./node_modules/handsontable/node_modules/moment/locale/en-ca.js\",\n\t\"./en-gb\": \"./node_modules/handsontable/node_modules/moment/locale/en-gb.js\",\n\t\"./en-gb.js\": \"./node_modules/handsontable/node_modules/moment/locale/en-gb.js\",\n\t\"./en-ie\": \"./node_modules/handsontable/node_modules/moment/locale/en-ie.js\",\n\t\"./en-ie.js\": \"./node_modules/handsontable/node_modules/moment/locale/en-ie.js\",\n\t\"./en-nz\": \"./node_modules/handsontable/node_modules/moment/locale/en-nz.js\",\n\t\"./en-nz.js\": \"./node_modules/handsontable/node_modules/moment/locale/en-nz.js\",\n\t\"./eo\": \"./node_modules/handsontable/node_modules/moment/locale/eo.js\",\n\t\"./eo.js\": \"./node_modules/handsontable/node_modules/moment/locale/eo.js\",\n\t\"./es\": \"./node_modules/handsontable/node_modules/moment/locale/es.js\",\n\t\"./es-do\": \"./node_modules/handsontable/node_modules/moment/locale/es-do.js\",\n\t\"./es-do.js\": \"./node_modules/handsontable/node_modules/moment/locale/es-do.js\",\n\t\"./es-us\": \"./node_modules/handsontable/node_modules/moment/locale/es-us.js\",\n\t\"./es-us.js\": \"./node_modules/handsontable/node_modules/moment/locale/es-us.js\",\n\t\"./es.js\": \"./node_modules/handsontable/node_modules/moment/locale/es.js\",\n\t\"./et\": \"./node_modules/handsontable/node_modules/moment/locale/et.js\",\n\t\"./et.js\": \"./node_modules/handsontable/node_modules/moment/locale/et.js\",\n\t\"./eu\": \"./node_modules/handsontable/node_modules/moment/locale/eu.js\",\n\t\"./eu.js\": \"./node_modules/handsontable/node_modules/moment/locale/eu.js\",\n\t\"./fa\": \"./node_modules/handsontable/node_modules/moment/locale/fa.js\",\n\t\"./fa.js\": \"./node_modules/handsontable/node_modules/moment/locale/fa.js\",\n\t\"./fi\": \"./node_modules/handsontable/node_modules/moment/locale/fi.js\",\n\t\"./fi.js\": \"./node_modules/handsontable/node_modules/moment/locale/fi.js\",\n\t\"./fo\": \"./node_modules/handsontable/node_modules/moment/locale/fo.js\",\n\t\"./fo.js\": \"./node_modules/handsontable/node_modules/moment/locale/fo.js\",\n\t\"./fr\": \"./node_modules/handsontable/node_modules/moment/locale/fr.js\",\n\t\"./fr-ca\": \"./node_modules/handsontable/node_modules/moment/locale/fr-ca.js\",\n\t\"./fr-ca.js\": \"./node_modules/handsontable/node_modules/moment/locale/fr-ca.js\",\n\t\"./fr-ch\": \"./node_modules/handsontable/node_modules/moment/locale/fr-ch.js\",\n\t\"./fr-ch.js\": \"./node_modules/handsontable/node_modules/moment/locale/fr-ch.js\",\n\t\"./fr.js\": \"./node_modules/handsontable/node_modules/moment/locale/fr.js\",\n\t\"./fy\": \"./node_modules/handsontable/node_modules/moment/locale/fy.js\",\n\t\"./fy.js\": \"./node_modules/handsontable/node_modules/moment/locale/fy.js\",\n\t\"./gd\": \"./node_modules/handsontable/node_modules/moment/locale/gd.js\",\n\t\"./gd.js\": \"./node_modules/handsontable/node_modules/moment/locale/gd.js\",\n\t\"./gl\": \"./node_modules/handsontable/node_modules/moment/locale/gl.js\",\n\t\"./gl.js\": \"./node_modules/handsontable/node_modules/moment/locale/gl.js\",\n\t\"./gom-latn\": \"./node_modules/handsontable/node_modules/moment/locale/gom-latn.js\",\n\t\"./gom-latn.js\": \"./node_modules/handsontable/node_modules/moment/locale/gom-latn.js\",\n\t\"./gu\": \"./node_modules/handsontable/node_modules/moment/locale/gu.js\",\n\t\"./gu.js\": \"./node_modules/handsontable/node_modules/moment/locale/gu.js\",\n\t\"./he\": \"./node_modules/handsontable/node_modules/moment/locale/he.js\",\n\t\"./he.js\": \"./node_modules/handsontable/node_modules/moment/locale/he.js\",\n\t\"./hi\": \"./node_modules/handsontable/node_modules/moment/locale/hi.js\",\n\t\"./hi.js\": \"./node_modules/handsontable/node_modules/moment/locale/hi.js\",\n\t\"./hr\": \"./node_modules/handsontable/node_modules/moment/locale/hr.js\",\n\t\"./hr.js\": \"./node_modules/handsontable/node_modules/moment/locale/hr.js\",\n\t\"./hu\": \"./node_modules/handsontable/node_modules/moment/locale/hu.js\",\n\t\"./hu.js\": \"./node_modules/handsontable/node_modules/moment/locale/hu.js\",\n\t\"./hy-am\": \"./node_modules/handsontable/node_modules/moment/locale/hy-am.js\",\n\t\"./hy-am.js\": \"./node_modules/handsontable/node_modules/moment/locale/hy-am.js\",\n\t\"./id\": \"./node_modules/handsontable/node_modules/moment/locale/id.js\",\n\t\"./id.js\": \"./node_modules/handsontable/node_modules/moment/locale/id.js\",\n\t\"./is\": \"./node_modules/handsontable/node_modules/moment/locale/is.js\",\n\t\"./is.js\": \"./node_modules/handsontable/node_modules/moment/locale/is.js\",\n\t\"./it\": \"./node_modules/handsontable/node_modules/moment/locale/it.js\",\n\t\"./it.js\": \"./node_modules/handsontable/node_modules/moment/locale/it.js\",\n\t\"./ja\": \"./node_modules/handsontable/node_modules/moment/locale/ja.js\",\n\t\"./ja.js\": \"./node_modules/handsontable/node_modules/moment/locale/ja.js\",\n\t\"./jv\": \"./node_modules/handsontable/node_modules/moment/locale/jv.js\",\n\t\"./jv.js\": \"./node_modules/handsontable/node_modules/moment/locale/jv.js\",\n\t\"./ka\": \"./node_modules/handsontable/node_modules/moment/locale/ka.js\",\n\t\"./ka.js\": \"./node_modules/handsontable/node_modules/moment/locale/ka.js\",\n\t\"./kk\": \"./node_modules/handsontable/node_modules/moment/locale/kk.js\",\n\t\"./kk.js\": \"./node_modules/handsontable/node_modules/moment/locale/kk.js\",\n\t\"./km\": \"./node_modules/handsontable/node_modules/moment/locale/km.js\",\n\t\"./km.js\": \"./node_modules/handsontable/node_modules/moment/locale/km.js\",\n\t\"./kn\": \"./node_modules/handsontable/node_modules/moment/locale/kn.js\",\n\t\"./kn.js\": \"./node_modules/handsontable/node_modules/moment/locale/kn.js\",\n\t\"./ko\": \"./node_modules/handsontable/node_modules/moment/locale/ko.js\",\n\t\"./ko.js\": \"./node_modules/handsontable/node_modules/moment/locale/ko.js\",\n\t\"./ky\": \"./node_modules/handsontable/node_modules/moment/locale/ky.js\",\n\t\"./ky.js\": \"./node_modules/handsontable/node_modules/moment/locale/ky.js\",\n\t\"./lb\": \"./node_modules/handsontable/node_modules/moment/locale/lb.js\",\n\t\"./lb.js\": \"./node_modules/handsontable/node_modules/moment/locale/lb.js\",\n\t\"./lo\": \"./node_modules/handsontable/node_modules/moment/locale/lo.js\",\n\t\"./lo.js\": \"./node_modules/handsontable/node_modules/moment/locale/lo.js\",\n\t\"./lt\": \"./node_modules/handsontable/node_modules/moment/locale/lt.js\",\n\t\"./lt.js\": \"./node_modules/handsontable/node_modules/moment/locale/lt.js\",\n\t\"./lv\": \"./node_modules/handsontable/node_modules/moment/locale/lv.js\",\n\t\"./lv.js\": \"./node_modules/handsontable/node_modules/moment/locale/lv.js\",\n\t\"./me\": \"./node_modules/handsontable/node_modules/moment/locale/me.js\",\n\t\"./me.js\": \"./node_modules/handsontable/node_modules/moment/locale/me.js\",\n\t\"./mi\": \"./node_modules/handsontable/node_modules/moment/locale/mi.js\",\n\t\"./mi.js\": \"./node_modules/handsontable/node_modules/moment/locale/mi.js\",\n\t\"./mk\": \"./node_modules/handsontable/node_modules/moment/locale/mk.js\",\n\t\"./mk.js\": \"./node_modules/handsontable/node_modules/moment/locale/mk.js\",\n\t\"./ml\": \"./node_modules/handsontable/node_modules/moment/locale/ml.js\",\n\t\"./ml.js\": \"./node_modules/handsontable/node_modules/moment/locale/ml.js\",\n\t\"./mr\": \"./node_modules/handsontable/node_modules/moment/locale/mr.js\",\n\t\"./mr.js\": \"./node_modules/handsontable/node_modules/moment/locale/mr.js\",\n\t\"./ms\": \"./node_modules/handsontable/node_modules/moment/locale/ms.js\",\n\t\"./ms-my\": \"./node_modules/handsontable/node_modules/moment/locale/ms-my.js\",\n\t\"./ms-my.js\": \"./node_modules/handsontable/node_modules/moment/locale/ms-my.js\",\n\t\"./ms.js\": \"./node_modules/handsontable/node_modules/moment/locale/ms.js\",\n\t\"./mt\": \"./node_modules/handsontable/node_modules/moment/locale/mt.js\",\n\t\"./mt.js\": \"./node_modules/handsontable/node_modules/moment/locale/mt.js\",\n\t\"./my\": \"./node_modules/handsontable/node_modules/moment/locale/my.js\",\n\t\"./my.js\": \"./node_modules/handsontable/node_modules/moment/locale/my.js\",\n\t\"./nb\": \"./node_modules/handsontable/node_modules/moment/locale/nb.js\",\n\t\"./nb.js\": \"./node_modules/handsontable/node_modules/moment/locale/nb.js\",\n\t\"./ne\": \"./node_modules/handsontable/node_modules/moment/locale/ne.js\",\n\t\"./ne.js\": \"./node_modules/handsontable/node_modules/moment/locale/ne.js\",\n\t\"./nl\": \"./node_modules/handsontable/node_modules/moment/locale/nl.js\",\n\t\"./nl-be\": \"./node_modules/handsontable/node_modules/moment/locale/nl-be.js\",\n\t\"./nl-be.js\": \"./node_modules/handsontable/node_modules/moment/locale/nl-be.js\",\n\t\"./nl.js\": \"./node_modules/handsontable/node_modules/moment/locale/nl.js\",\n\t\"./nn\": \"./node_modules/handsontable/node_modules/moment/locale/nn.js\",\n\t\"./nn.js\": \"./node_modules/handsontable/node_modules/moment/locale/nn.js\",\n\t\"./pa-in\": \"./node_modules/handsontable/node_modules/moment/locale/pa-in.js\",\n\t\"./pa-in.js\": \"./node_modules/handsontable/node_modules/moment/locale/pa-in.js\",\n\t\"./pl\": \"./node_modules/handsontable/node_modules/moment/locale/pl.js\",\n\t\"./pl.js\": \"./node_modules/handsontable/node_modules/moment/locale/pl.js\",\n\t\"./pt\": \"./node_modules/handsontable/node_modules/moment/locale/pt.js\",\n\t\"./pt-br\": \"./node_modules/handsontable/node_modules/moment/locale/pt-br.js\",\n\t\"./pt-br.js\": \"./node_modules/handsontable/node_modules/moment/locale/pt-br.js\",\n\t\"./pt.js\": \"./node_modules/handsontable/node_modules/moment/locale/pt.js\",\n\t\"./ro\": \"./node_modules/handsontable/node_modules/moment/locale/ro.js\",\n\t\"./ro.js\": \"./node_modules/handsontable/node_modules/moment/locale/ro.js\",\n\t\"./ru\": \"./node_modules/handsontable/node_modules/moment/locale/ru.js\",\n\t\"./ru.js\": \"./node_modules/handsontable/node_modules/moment/locale/ru.js\",\n\t\"./sd\": \"./node_modules/handsontable/node_modules/moment/locale/sd.js\",\n\t\"./sd.js\": \"./node_modules/handsontable/node_modules/moment/locale/sd.js\",\n\t\"./se\": \"./node_modules/handsontable/node_modules/moment/locale/se.js\",\n\t\"./se.js\": \"./node_modules/handsontable/node_modules/moment/locale/se.js\",\n\t\"./si\": \"./node_modules/handsontable/node_modules/moment/locale/si.js\",\n\t\"./si.js\": \"./node_modules/handsontable/node_modules/moment/locale/si.js\",\n\t\"./sk\": \"./node_modules/handsontable/node_modules/moment/locale/sk.js\",\n\t\"./sk.js\": \"./node_modules/handsontable/node_modules/moment/locale/sk.js\",\n\t\"./sl\": \"./node_modules/handsontable/node_modules/moment/locale/sl.js\",\n\t\"./sl.js\": \"./node_modules/handsontable/node_modules/moment/locale/sl.js\",\n\t\"./sq\": \"./node_modules/handsontable/node_modules/moment/locale/sq.js\",\n\t\"./sq.js\": \"./node_modules/handsontable/node_modules/moment/locale/sq.js\",\n\t\"./sr\": \"./node_modules/handsontable/node_modules/moment/locale/sr.js\",\n\t\"./sr-cyrl\": \"./node_modules/handsontable/node_modules/moment/locale/sr-cyrl.js\",\n\t\"./sr-cyrl.js\": \"./node_modules/handsontable/node_modules/moment/locale/sr-cyrl.js\",\n\t\"./sr.js\": \"./node_modules/handsontable/node_modules/moment/locale/sr.js\",\n\t\"./ss\": \"./node_modules/handsontable/node_modules/moment/locale/ss.js\",\n\t\"./ss.js\": \"./node_modules/handsontable/node_modules/moment/locale/ss.js\",\n\t\"./sv\": \"./node_modules/handsontable/node_modules/moment/locale/sv.js\",\n\t\"./sv.js\": \"./node_modules/handsontable/node_modules/moment/locale/sv.js\",\n\t\"./sw\": \"./node_modules/handsontable/node_modules/moment/locale/sw.js\",\n\t\"./sw.js\": \"./node_modules/handsontable/node_modules/moment/locale/sw.js\",\n\t\"./ta\": \"./node_modules/handsontable/node_modules/moment/locale/ta.js\",\n\t\"./ta.js\": \"./node_modules/handsontable/node_modules/moment/locale/ta.js\",\n\t\"./te\": \"./node_modules/handsontable/node_modules/moment/locale/te.js\",\n\t\"./te.js\": \"./node_modules/handsontable/node_modules/moment/locale/te.js\",\n\t\"./tet\": \"./node_modules/handsontable/node_modules/moment/locale/tet.js\",\n\t\"./tet.js\": \"./node_modules/handsontable/node_modules/moment/locale/tet.js\",\n\t\"./th\": \"./node_modules/handsontable/node_modules/moment/locale/th.js\",\n\t\"./th.js\": \"./node_modules/handsontable/node_modules/moment/locale/th.js\",\n\t\"./tl-ph\": \"./node_modules/handsontable/node_modules/moment/locale/tl-ph.js\",\n\t\"./tl-ph.js\": \"./node_modules/handsontable/node_modules/moment/locale/tl-ph.js\",\n\t\"./tlh\": \"./node_modules/handsontable/node_modules/moment/locale/tlh.js\",\n\t\"./tlh.js\": \"./node_modules/handsontable/node_modules/moment/locale/tlh.js\",\n\t\"./tr\": \"./node_modules/handsontable/node_modules/moment/locale/tr.js\",\n\t\"./tr.js\": \"./node_modules/handsontable/node_modules/moment/locale/tr.js\",\n\t\"./tzl\": \"./node_modules/handsontable/node_modules/moment/locale/tzl.js\",\n\t\"./tzl.js\": \"./node_modules/handsontable/node_modules/moment/locale/tzl.js\",\n\t\"./tzm\": \"./node_modules/handsontable/node_modules/moment/locale/tzm.js\",\n\t\"./tzm-latn\": \"./node_modules/handsontable/node_modules/moment/locale/tzm-latn.js\",\n\t\"./tzm-latn.js\": \"./node_modules/handsontable/node_modules/moment/locale/tzm-latn.js\",\n\t\"./tzm.js\": \"./node_modules/handsontable/node_modules/moment/locale/tzm.js\",\n\t\"./uk\": \"./node_modules/handsontable/node_modules/moment/locale/uk.js\",\n\t\"./uk.js\": \"./node_modules/handsontable/node_modules/moment/locale/uk.js\",\n\t\"./ur\": \"./node_modules/handsontable/node_modules/moment/locale/ur.js\",\n\t\"./ur.js\": \"./node_modules/handsontable/node_modules/moment/locale/ur.js\",\n\t\"./uz\": \"./node_modules/handsontable/node_modules/moment/locale/uz.js\",\n\t\"./uz-latn\": \"./node_modules/handsontable/node_modules/moment/locale/uz-latn.js\",\n\t\"./uz-latn.js\": \"./node_modules/handsontable/node_modules/moment/locale/uz-latn.js\",\n\t\"./uz.js\": \"./node_modules/handsontable/node_modules/moment/locale/uz.js\",\n\t\"./vi\": \"./node_modules/handsontable/node_modules/moment/locale/vi.js\",\n\t\"./vi.js\": \"./node_modules/handsontable/node_modules/moment/locale/vi.js\",\n\t\"./x-pseudo\": \"./node_modules/handsontable/node_modules/moment/locale/x-pseudo.js\",\n\t\"./x-pseudo.js\": \"./node_modules/handsontable/node_modules/moment/locale/x-pseudo.js\",\n\t\"./yo\": \"./node_modules/handsontable/node_modules/moment/locale/yo.js\",\n\t\"./yo.js\": \"./node_modules/handsontable/node_modules/moment/locale/yo.js\",\n\t\"./zh-cn\": \"./node_modules/handsontable/node_modules/moment/locale/zh-cn.js\",\n\t\"./zh-cn.js\": \"./node_modules/handsontable/node_modules/moment/locale/zh-cn.js\",\n\t\"./zh-hk\": \"./node_modules/handsontable/node_modules/moment/locale/zh-hk.js\",\n\t\"./zh-hk.js\": \"./node_modules/handsontable/node_modules/moment/locale/zh-hk.js\",\n\t\"./zh-tw\": \"./node_modules/handsontable/node_modules/moment/locale/zh-tw.js\",\n\t\"./zh-tw.js\": \"./node_modules/handsontable/node_modules/moment/locale/zh-tw.js\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\tvar module = __webpack_require__(id);\n\treturn module;\n}\nfunction webpackContextResolve(req) {\n\tvar id = map[req];\n\tif(!(id + 1)) { // check for number or string\n\t\tvar e = new Error('Cannot find module \"' + req + '\".');\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn id;\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"./node_modules/handsontable/node_modules/moment/locale sync recursive ^\\\\.\\\\/.*$\";\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale_sync_^\\.\\/.*$?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/af.js":
/*!********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/af.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Afrikaans [af]\n//! author : Werner Mollentze : https://github.com/wernerm\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar af = moment.defineLocale('af', {\n    months : 'Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember'.split('_'),\n    monthsShort : 'Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des'.split('_'),\n    weekdays : 'Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag'.split('_'),\n    weekdaysShort : 'Son_Maa_Din_Woe_Don_Vry_Sat'.split('_'),\n    weekdaysMin : 'So_Ma_Di_Wo_Do_Vr_Sa'.split('_'),\n    meridiemParse: /vm|nm/i,\n    isPM : function (input) {\n        return /^nm$/i.test(input);\n    },\n    meridiem : function (hours, minutes, isLower) {\n        if (hours < 12) {\n            return isLower ? 'vm' : 'VM';\n        } else {\n            return isLower ? 'nm' : 'NM';\n        }\n    },\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD/MM/YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY HH:mm',\n        LLLL : 'dddd, D MMMM YYYY HH:mm'\n    },\n    calendar : {\n        sameDay : '[Vandag om] LT',\n        nextDay : '[Môre om] LT',\n        nextWeek : 'dddd [om] LT',\n        lastDay : '[Gister om] LT',\n        lastWeek : '[Laas] dddd [om] LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : 'oor %s',\n        past : '%s gelede',\n        s : '\\'n paar sekondes',\n        ss : '%d sekondes',\n        m : '\\'n minuut',\n        mm : '%d minute',\n        h : '\\'n uur',\n        hh : '%d ure',\n        d : '\\'n dag',\n        dd : '%d dae',\n        M : '\\'n maand',\n        MM : '%d maande',\n        y : '\\'n jaar',\n        yy : '%d jaar'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n    ordinal : function (number) {\n        return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de'); // Thanks to Joris Röling : https://github.com/jjupiter\n    },\n    week : {\n        dow : 1, // Maandag is die eerste dag van die week.\n        doy : 4  // Die week wat die 4de Januarie bevat is die eerste week van die jaar.\n    }\n});\n\nreturn af;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/af.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/ar-dz.js":
/*!***********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/ar-dz.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Arabic (Algeria) [ar-dz]\n//! author : Noureddine LOUAHEDJ : https://github.com/noureddineme\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar arDz = moment.defineLocale('ar-dz', {\n    months : 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n    monthsShort : 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n    weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n    weekdaysShort : 'احد_اثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),\n    weekdaysMin : 'أح_إث_ثلا_أر_خم_جم_سب'.split('_'),\n    weekdaysParseExact : true,\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD/MM/YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY HH:mm',\n        LLLL : 'dddd D MMMM YYYY HH:mm'\n    },\n    calendar : {\n        sameDay: '[اليوم على الساعة] LT',\n        nextDay: '[غدا على الساعة] LT',\n        nextWeek: 'dddd [على الساعة] LT',\n        lastDay: '[أمس على الساعة] LT',\n        lastWeek: 'dddd [على الساعة] LT',\n        sameElse: 'L'\n    },\n    relativeTime : {\n        future : 'في %s',\n        past : 'منذ %s',\n        s : 'ثوان',\n        ss : '%d ثانية',\n        m : 'دقيقة',\n        mm : '%d دقائق',\n        h : 'ساعة',\n        hh : '%d ساعات',\n        d : 'يوم',\n        dd : '%d أيام',\n        M : 'شهر',\n        MM : '%d أشهر',\n        y : 'سنة',\n        yy : '%d سنوات'\n    },\n    week : {\n        dow : 0, // Sunday is the first day of the week.\n        doy : 4  // The week that contains Jan 1st is the first week of the year.\n    }\n});\n\nreturn arDz;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/ar-dz.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/ar-kw.js":
/*!***********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/ar-kw.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Arabic (Kuwait) [ar-kw]\n//! author : Nusret Parlak: https://github.com/nusretparlak\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar arKw = moment.defineLocale('ar-kw', {\n    months : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),\n    monthsShort : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),\n    weekdays : 'الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n    weekdaysShort : 'احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),\n    weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n    weekdaysParseExact : true,\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD/MM/YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY HH:mm',\n        LLLL : 'dddd D MMMM YYYY HH:mm'\n    },\n    calendar : {\n        sameDay: '[اليوم على الساعة] LT',\n        nextDay: '[غدا على الساعة] LT',\n        nextWeek: 'dddd [على الساعة] LT',\n        lastDay: '[أمس على الساعة] LT',\n        lastWeek: 'dddd [على الساعة] LT',\n        sameElse: 'L'\n    },\n    relativeTime : {\n        future : 'في %s',\n        past : 'منذ %s',\n        s : 'ثوان',\n        ss : '%d ثانية',\n        m : 'دقيقة',\n        mm : '%d دقائق',\n        h : 'ساعة',\n        hh : '%d ساعات',\n        d : 'يوم',\n        dd : '%d أيام',\n        M : 'شهر',\n        MM : '%d أشهر',\n        y : 'سنة',\n        yy : '%d سنوات'\n    },\n    week : {\n        dow : 0, // Sunday is the first day of the week.\n        doy : 12  // The week that contains Jan 1st is the first week of the year.\n    }\n});\n\nreturn arKw;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/ar-kw.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/ar-ly.js":
/*!***********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/ar-ly.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Arabic (Lybia) [ar-ly]\n//! author : Ali Hmer: https://github.com/kikoanis\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar symbolMap = {\n    '1': '1',\n    '2': '2',\n    '3': '3',\n    '4': '4',\n    '5': '5',\n    '6': '6',\n    '7': '7',\n    '8': '8',\n    '9': '9',\n    '0': '0'\n};\nvar pluralForm = function (n) {\n    return n === 0 ? 0 : n === 1 ? 1 : n === 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5;\n};\nvar plurals = {\n    s : ['أقل من ثانية', 'ثانية واحدة', ['ثانيتان', 'ثانيتين'], '%d ثوان', '%d ثانية', '%d ثانية'],\n    m : ['أقل من دقيقة', 'دقيقة واحدة', ['دقيقتان', 'دقيقتين'], '%d دقائق', '%d دقيقة', '%d دقيقة'],\n    h : ['أقل من ساعة', 'ساعة واحدة', ['ساعتان', 'ساعتين'], '%d ساعات', '%d ساعة', '%d ساعة'],\n    d : ['أقل من يوم', 'يوم واحد', ['يومان', 'يومين'], '%d أيام', '%d يومًا', '%d يوم'],\n    M : ['أقل من شهر', 'شهر واحد', ['شهران', 'شهرين'], '%d أشهر', '%d شهرا', '%d شهر'],\n    y : ['أقل من عام', 'عام واحد', ['عامان', 'عامين'], '%d أعوام', '%d عامًا', '%d عام']\n};\nvar pluralize = function (u) {\n    return function (number, withoutSuffix, string, isFuture) {\n        var f = pluralForm(number),\n            str = plurals[u][pluralForm(number)];\n        if (f === 2) {\n            str = str[withoutSuffix ? 0 : 1];\n        }\n        return str.replace(/%d/i, number);\n    };\n};\nvar months = [\n    'يناير',\n    'فبراير',\n    'مارس',\n    'أبريل',\n    'مايو',\n    'يونيو',\n    'يوليو',\n    'أغسطس',\n    'سبتمبر',\n    'أكتوبر',\n    'نوفمبر',\n    'ديسمبر'\n];\n\nvar arLy = moment.defineLocale('ar-ly', {\n    months : months,\n    monthsShort : months,\n    weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n    weekdaysShort : 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n    weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n    weekdaysParseExact : true,\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'D/\\u200FM/\\u200FYYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY HH:mm',\n        LLLL : 'dddd D MMMM YYYY HH:mm'\n    },\n    meridiemParse: /ص|م/,\n    isPM : function (input) {\n        return 'م' === input;\n    },\n    meridiem : function (hour, minute, isLower) {\n        if (hour < 12) {\n            return 'ص';\n        } else {\n            return 'م';\n        }\n    },\n    calendar : {\n        sameDay: '[اليوم عند الساعة] LT',\n        nextDay: '[غدًا عند الساعة] LT',\n        nextWeek: 'dddd [عند الساعة] LT',\n        lastDay: '[أمس عند الساعة] LT',\n        lastWeek: 'dddd [عند الساعة] LT',\n        sameElse: 'L'\n    },\n    relativeTime : {\n        future : 'بعد %s',\n        past : 'منذ %s',\n        s : pluralize('s'),\n        ss : pluralize('s'),\n        m : pluralize('m'),\n        mm : pluralize('m'),\n        h : pluralize('h'),\n        hh : pluralize('h'),\n        d : pluralize('d'),\n        dd : pluralize('d'),\n        M : pluralize('M'),\n        MM : pluralize('M'),\n        y : pluralize('y'),\n        yy : pluralize('y')\n    },\n    preparse: function (string) {\n        return string.replace(/،/g, ',');\n    },\n    postformat: function (string) {\n        return string.replace(/\\d/g, function (match) {\n            return symbolMap[match];\n        }).replace(/,/g, '،');\n    },\n    week : {\n        dow : 6, // Saturday is the first day of the week.\n        doy : 12  // The week that contains Jan 1st is the first week of the year.\n    }\n});\n\nreturn arLy;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/ar-ly.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/ar-ma.js":
/*!***********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/ar-ma.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Arabic (Morocco) [ar-ma]\n//! author : ElFadili Yassine : https://github.com/ElFadiliY\n//! author : Abdel Said : https://github.com/abdelsaid\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar arMa = moment.defineLocale('ar-ma', {\n    months : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),\n    monthsShort : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),\n    weekdays : 'الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n    weekdaysShort : 'احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),\n    weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n    weekdaysParseExact : true,\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD/MM/YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY HH:mm',\n        LLLL : 'dddd D MMMM YYYY HH:mm'\n    },\n    calendar : {\n        sameDay: '[اليوم على الساعة] LT',\n        nextDay: '[غدا على الساعة] LT',\n        nextWeek: 'dddd [على الساعة] LT',\n        lastDay: '[أمس على الساعة] LT',\n        lastWeek: 'dddd [على الساعة] LT',\n        sameElse: 'L'\n    },\n    relativeTime : {\n        future : 'في %s',\n        past : 'منذ %s',\n        s : 'ثوان',\n        ss : '%d ثانية',\n        m : 'دقيقة',\n        mm : '%d دقائق',\n        h : 'ساعة',\n        hh : '%d ساعات',\n        d : 'يوم',\n        dd : '%d أيام',\n        M : 'شهر',\n        MM : '%d أشهر',\n        y : 'سنة',\n        yy : '%d سنوات'\n    },\n    week : {\n        dow : 6, // Saturday is the first day of the week.\n        doy : 12  // The week that contains Jan 1st is the first week of the year.\n    }\n});\n\nreturn arMa;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/ar-ma.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/ar-sa.js":
/*!***********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/ar-sa.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Arabic (Saudi Arabia) [ar-sa]\n//! author : Suhail Alkowaileet : https://github.com/xsoh\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar symbolMap = {\n    '1': '١',\n    '2': '٢',\n    '3': '٣',\n    '4': '٤',\n    '5': '٥',\n    '6': '٦',\n    '7': '٧',\n    '8': '٨',\n    '9': '٩',\n    '0': '٠'\n};\nvar numberMap = {\n    '١': '1',\n    '٢': '2',\n    '٣': '3',\n    '٤': '4',\n    '٥': '5',\n    '٦': '6',\n    '٧': '7',\n    '٨': '8',\n    '٩': '9',\n    '٠': '0'\n};\n\nvar arSa = moment.defineLocale('ar-sa', {\n    months : 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n    monthsShort : 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n    weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n    weekdaysShort : 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n    weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n    weekdaysParseExact : true,\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD/MM/YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY HH:mm',\n        LLLL : 'dddd D MMMM YYYY HH:mm'\n    },\n    meridiemParse: /ص|م/,\n    isPM : function (input) {\n        return 'م' === input;\n    },\n    meridiem : function (hour, minute, isLower) {\n        if (hour < 12) {\n            return 'ص';\n        } else {\n            return 'م';\n        }\n    },\n    calendar : {\n        sameDay: '[اليوم على الساعة] LT',\n        nextDay: '[غدا على الساعة] LT',\n        nextWeek: 'dddd [على الساعة] LT',\n        lastDay: '[أمس على الساعة] LT',\n        lastWeek: 'dddd [على الساعة] LT',\n        sameElse: 'L'\n    },\n    relativeTime : {\n        future : 'في %s',\n        past : 'منذ %s',\n        s : 'ثوان',\n        ss : '%d ثانية',\n        m : 'دقيقة',\n        mm : '%d دقائق',\n        h : 'ساعة',\n        hh : '%d ساعات',\n        d : 'يوم',\n        dd : '%d أيام',\n        M : 'شهر',\n        MM : '%d أشهر',\n        y : 'سنة',\n        yy : '%d سنوات'\n    },\n    preparse: function (string) {\n        return string.replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {\n            return numberMap[match];\n        }).replace(/،/g, ',');\n    },\n    postformat: function (string) {\n        return string.replace(/\\d/g, function (match) {\n            return symbolMap[match];\n        }).replace(/,/g, '،');\n    },\n    week : {\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\nreturn arSa;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/ar-sa.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/ar-tn.js":
/*!***********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/ar-tn.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale  :  Arabic (Tunisia) [ar-tn]\n//! author : Nader Toukabri : https://github.com/naderio\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar arTn = moment.defineLocale('ar-tn', {\n    months: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n    monthsShort: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n    weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n    weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n    weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n    weekdaysParseExact : true,\n    longDateFormat: {\n        LT: 'HH:mm',\n        LTS: 'HH:mm:ss',\n        L: 'DD/MM/YYYY',\n        LL: 'D MMMM YYYY',\n        LLL: 'D MMMM YYYY HH:mm',\n        LLLL: 'dddd D MMMM YYYY HH:mm'\n    },\n    calendar: {\n        sameDay: '[اليوم على الساعة] LT',\n        nextDay: '[غدا على الساعة] LT',\n        nextWeek: 'dddd [على الساعة] LT',\n        lastDay: '[أمس على الساعة] LT',\n        lastWeek: 'dddd [على الساعة] LT',\n        sameElse: 'L'\n    },\n    relativeTime: {\n        future: 'في %s',\n        past: 'منذ %s',\n        s: 'ثوان',\n        ss : '%d ثانية',\n        m: 'دقيقة',\n        mm: '%d دقائق',\n        h: 'ساعة',\n        hh: '%d ساعات',\n        d: 'يوم',\n        dd: '%d أيام',\n        M: 'شهر',\n        MM: '%d أشهر',\n        y: 'سنة',\n        yy: '%d سنوات'\n    },\n    week: {\n        dow: 1, // Monday is the first day of the week.\n        doy: 4 // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn arTn;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/ar-tn.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/ar.js":
/*!********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/ar.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Arabic [ar]\n//! author : Abdel Said: https://github.com/abdelsaid\n//! author : Ahmed Elkhatib\n//! author : forabi https://github.com/forabi\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar symbolMap = {\n    '1': '١',\n    '2': '٢',\n    '3': '٣',\n    '4': '٤',\n    '5': '٥',\n    '6': '٦',\n    '7': '٧',\n    '8': '٨',\n    '9': '٩',\n    '0': '٠'\n};\nvar numberMap = {\n    '١': '1',\n    '٢': '2',\n    '٣': '3',\n    '٤': '4',\n    '٥': '5',\n    '٦': '6',\n    '٧': '7',\n    '٨': '8',\n    '٩': '9',\n    '٠': '0'\n};\nvar pluralForm = function (n) {\n    return n === 0 ? 0 : n === 1 ? 1 : n === 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5;\n};\nvar plurals = {\n    s : ['أقل من ثانية', 'ثانية واحدة', ['ثانيتان', 'ثانيتين'], '%d ثوان', '%d ثانية', '%d ثانية'],\n    m : ['أقل من دقيقة', 'دقيقة واحدة', ['دقيقتان', 'دقيقتين'], '%d دقائق', '%d دقيقة', '%d دقيقة'],\n    h : ['أقل من ساعة', 'ساعة واحدة', ['ساعتان', 'ساعتين'], '%d ساعات', '%d ساعة', '%d ساعة'],\n    d : ['أقل من يوم', 'يوم واحد', ['يومان', 'يومين'], '%d أيام', '%d يومًا', '%d يوم'],\n    M : ['أقل من شهر', 'شهر واحد', ['شهران', 'شهرين'], '%d أشهر', '%d شهرا', '%d شهر'],\n    y : ['أقل من عام', 'عام واحد', ['عامان', 'عامين'], '%d أعوام', '%d عامًا', '%d عام']\n};\nvar pluralize = function (u) {\n    return function (number, withoutSuffix, string, isFuture) {\n        var f = pluralForm(number),\n            str = plurals[u][pluralForm(number)];\n        if (f === 2) {\n            str = str[withoutSuffix ? 0 : 1];\n        }\n        return str.replace(/%d/i, number);\n    };\n};\nvar months = [\n    'يناير',\n    'فبراير',\n    'مارس',\n    'أبريل',\n    'مايو',\n    'يونيو',\n    'يوليو',\n    'أغسطس',\n    'سبتمبر',\n    'أكتوبر',\n    'نوفمبر',\n    'ديسمبر'\n];\n\nvar ar = moment.defineLocale('ar', {\n    months : months,\n    monthsShort : months,\n    weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n    weekdaysShort : 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n    weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n    weekdaysParseExact : true,\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'D/\\u200FM/\\u200FYYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY HH:mm',\n        LLLL : 'dddd D MMMM YYYY HH:mm'\n    },\n    meridiemParse: /ص|م/,\n    isPM : function (input) {\n        return 'م' === input;\n    },\n    meridiem : function (hour, minute, isLower) {\n        if (hour < 12) {\n            return 'ص';\n        } else {\n            return 'م';\n        }\n    },\n    calendar : {\n        sameDay: '[اليوم عند الساعة] LT',\n        nextDay: '[غدًا عند الساعة] LT',\n        nextWeek: 'dddd [عند الساعة] LT',\n        lastDay: '[أمس عند الساعة] LT',\n        lastWeek: 'dddd [عند الساعة] LT',\n        sameElse: 'L'\n    },\n    relativeTime : {\n        future : 'بعد %s',\n        past : 'منذ %s',\n        s : pluralize('s'),\n        ss : pluralize('s'),\n        m : pluralize('m'),\n        mm : pluralize('m'),\n        h : pluralize('h'),\n        hh : pluralize('h'),\n        d : pluralize('d'),\n        dd : pluralize('d'),\n        M : pluralize('M'),\n        MM : pluralize('M'),\n        y : pluralize('y'),\n        yy : pluralize('y')\n    },\n    preparse: function (string) {\n        return string.replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {\n            return numberMap[match];\n        }).replace(/،/g, ',');\n    },\n    postformat: function (string) {\n        return string.replace(/\\d/g, function (match) {\n            return symbolMap[match];\n        }).replace(/,/g, '،');\n    },\n    week : {\n        dow : 6, // Saturday is the first day of the week.\n        doy : 12  // The week that contains Jan 1st is the first week of the year.\n    }\n});\n\nreturn ar;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/ar.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/az.js":
/*!********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/az.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Azerbaijani [az]\n//! author : topchiyev : https://github.com/topchiyev\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar suffixes = {\n    1: '-inci',\n    5: '-inci',\n    8: '-inci',\n    70: '-inci',\n    80: '-inci',\n    2: '-nci',\n    7: '-nci',\n    20: '-nci',\n    50: '-nci',\n    3: '-üncü',\n    4: '-üncü',\n    100: '-üncü',\n    6: '-ncı',\n    9: '-uncu',\n    10: '-uncu',\n    30: '-uncu',\n    60: '-ıncı',\n    90: '-ıncı'\n};\n\nvar az = moment.defineLocale('az', {\n    months : 'yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr'.split('_'),\n    monthsShort : 'yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek'.split('_'),\n    weekdays : 'Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə'.split('_'),\n    weekdaysShort : 'Baz_BzE_ÇAx_Çər_CAx_Cüm_Şən'.split('_'),\n    weekdaysMin : 'Bz_BE_ÇA_Çə_CA_Cü_Şə'.split('_'),\n    weekdaysParseExact : true,\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD.MM.YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY HH:mm',\n        LLLL : 'dddd, D MMMM YYYY HH:mm'\n    },\n    calendar : {\n        sameDay : '[bugün saat] LT',\n        nextDay : '[sabah saat] LT',\n        nextWeek : '[gələn həftə] dddd [saat] LT',\n        lastDay : '[dünən] LT',\n        lastWeek : '[keçən həftə] dddd [saat] LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : '%s sonra',\n        past : '%s əvvəl',\n        s : 'birneçə saniyyə',\n        ss : '%d saniyə',\n        m : 'bir dəqiqə',\n        mm : '%d dəqiqə',\n        h : 'bir saat',\n        hh : '%d saat',\n        d : 'bir gün',\n        dd : '%d gün',\n        M : 'bir ay',\n        MM : '%d ay',\n        y : 'bir il',\n        yy : '%d il'\n    },\n    meridiemParse: /gecə|səhər|gündüz|axşam/,\n    isPM : function (input) {\n        return /^(gündüz|axşam)$/.test(input);\n    },\n    meridiem : function (hour, minute, isLower) {\n        if (hour < 4) {\n            return 'gecə';\n        } else if (hour < 12) {\n            return 'səhər';\n        } else if (hour < 17) {\n            return 'gündüz';\n        } else {\n            return 'axşam';\n        }\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}-(ıncı|inci|nci|üncü|ncı|uncu)/,\n    ordinal : function (number) {\n        if (number === 0) {  // special case for zero\n            return number + '-ıncı';\n        }\n        var a = number % 10,\n            b = number % 100 - a,\n            c = number >= 100 ? 100 : null;\n        return number + (suffixes[a] || suffixes[b] || suffixes[c]);\n    },\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 7  // The week that contains Jan 1st is the first week of the year.\n    }\n});\n\nreturn az;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/az.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/be.js":
/*!********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/be.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Belarusian [be]\n//! author : Dmitry Demidov : https://github.com/demidov91\n//! author: Praleska: http://praleska.pro/\n//! Author : Menelion Elensúle : https://github.com/Oire\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nfunction plural(word, num) {\n    var forms = word.split('_');\n    return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]);\n}\nfunction relativeTimeWithPlural(number, withoutSuffix, key) {\n    var format = {\n        'ss': withoutSuffix ? 'секунда_секунды_секунд' : 'секунду_секунды_секунд',\n        'mm': withoutSuffix ? 'хвіліна_хвіліны_хвілін' : 'хвіліну_хвіліны_хвілін',\n        'hh': withoutSuffix ? 'гадзіна_гадзіны_гадзін' : 'гадзіну_гадзіны_гадзін',\n        'dd': 'дзень_дні_дзён',\n        'MM': 'месяц_месяцы_месяцаў',\n        'yy': 'год_гады_гадоў'\n    };\n    if (key === 'm') {\n        return withoutSuffix ? 'хвіліна' : 'хвіліну';\n    }\n    else if (key === 'h') {\n        return withoutSuffix ? 'гадзіна' : 'гадзіну';\n    }\n    else {\n        return number + ' ' + plural(format[key], +number);\n    }\n}\n\nvar be = moment.defineLocale('be', {\n    months : {\n        format: 'студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня'.split('_'),\n        standalone: 'студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань'.split('_')\n    },\n    monthsShort : 'студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж'.split('_'),\n    weekdays : {\n        format: 'нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу'.split('_'),\n        standalone: 'нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота'.split('_'),\n        isFormat: /\\[ ?[Вв] ?(?:мінулую|наступную)? ?\\] ?dddd/\n    },\n    weekdaysShort : 'нд_пн_ат_ср_чц_пт_сб'.split('_'),\n    weekdaysMin : 'нд_пн_ат_ср_чц_пт_сб'.split('_'),\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD.MM.YYYY',\n        LL : 'D MMMM YYYY г.',\n        LLL : 'D MMMM YYYY г., HH:mm',\n        LLLL : 'dddd, D MMMM YYYY г., HH:mm'\n    },\n    calendar : {\n        sameDay: '[Сёння ў] LT',\n        nextDay: '[Заўтра ў] LT',\n        lastDay: '[Учора ў] LT',\n        nextWeek: function () {\n            return '[У] dddd [ў] LT';\n        },\n        lastWeek: function () {\n            switch (this.day()) {\n                case 0:\n                case 3:\n                case 5:\n                case 6:\n                    return '[У мінулую] dddd [ў] LT';\n                case 1:\n                case 2:\n                case 4:\n                    return '[У мінулы] dddd [ў] LT';\n            }\n        },\n        sameElse: 'L'\n    },\n    relativeTime : {\n        future : 'праз %s',\n        past : '%s таму',\n        s : 'некалькі секунд',\n        m : relativeTimeWithPlural,\n        mm : relativeTimeWithPlural,\n        h : relativeTimeWithPlural,\n        hh : relativeTimeWithPlural,\n        d : 'дзень',\n        dd : relativeTimeWithPlural,\n        M : 'месяц',\n        MM : relativeTimeWithPlural,\n        y : 'год',\n        yy : relativeTimeWithPlural\n    },\n    meridiemParse: /ночы|раніцы|дня|вечара/,\n    isPM : function (input) {\n        return /^(дня|вечара)$/.test(input);\n    },\n    meridiem : function (hour, minute, isLower) {\n        if (hour < 4) {\n            return 'ночы';\n        } else if (hour < 12) {\n            return 'раніцы';\n        } else if (hour < 17) {\n            return 'дня';\n        } else {\n            return 'вечара';\n        }\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}-(і|ы|га)/,\n    ordinal: function (number, period) {\n        switch (period) {\n            case 'M':\n            case 'd':\n            case 'DDD':\n            case 'w':\n            case 'W':\n                return (number % 10 === 2 || number % 10 === 3) && (number % 100 !== 12 && number % 100 !== 13) ? number + '-і' : number + '-ы';\n            case 'D':\n                return number + '-га';\n            default:\n                return number;\n        }\n    },\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 7  // The week that contains Jan 1st is the first week of the year.\n    }\n});\n\nreturn be;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/be.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/bg.js":
/*!********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/bg.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Bulgarian [bg]\n//! author : Krasen Borisov : https://github.com/kraz\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar bg = moment.defineLocale('bg', {\n    months : 'януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември'.split('_'),\n    monthsShort : 'янр_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек'.split('_'),\n    weekdays : 'неделя_понеделник_вторник_сряда_четвъртък_петък_събота'.split('_'),\n    weekdaysShort : 'нед_пон_вто_сря_чет_пет_съб'.split('_'),\n    weekdaysMin : 'нд_пн_вт_ср_чт_пт_сб'.split('_'),\n    longDateFormat : {\n        LT : 'H:mm',\n        LTS : 'H:mm:ss',\n        L : 'D.MM.YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY H:mm',\n        LLLL : 'dddd, D MMMM YYYY H:mm'\n    },\n    calendar : {\n        sameDay : '[Днес в] LT',\n        nextDay : '[Утре в] LT',\n        nextWeek : 'dddd [в] LT',\n        lastDay : '[Вчера в] LT',\n        lastWeek : function () {\n            switch (this.day()) {\n                case 0:\n                case 3:\n                case 6:\n                    return '[В изминалата] dddd [в] LT';\n                case 1:\n                case 2:\n                case 4:\n                case 5:\n                    return '[В изминалия] dddd [в] LT';\n            }\n        },\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : 'след %s',\n        past : 'преди %s',\n        s : 'няколко секунди',\n        ss : '%d секунди',\n        m : 'минута',\n        mm : '%d минути',\n        h : 'час',\n        hh : '%d часа',\n        d : 'ден',\n        dd : '%d дни',\n        M : 'месец',\n        MM : '%d месеца',\n        y : 'година',\n        yy : '%d години'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}-(ев|ен|ти|ви|ри|ми)/,\n    ordinal : function (number) {\n        var lastDigit = number % 10,\n            last2Digits = number % 100;\n        if (number === 0) {\n            return number + '-ев';\n        } else if (last2Digits === 0) {\n            return number + '-ен';\n        } else if (last2Digits > 10 && last2Digits < 20) {\n            return number + '-ти';\n        } else if (lastDigit === 1) {\n            return number + '-ви';\n        } else if (lastDigit === 2) {\n            return number + '-ри';\n        } else if (lastDigit === 7 || lastDigit === 8) {\n            return number + '-ми';\n        } else {\n            return number + '-ти';\n        }\n    },\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 7  // The week that contains Jan 1st is the first week of the year.\n    }\n});\n\nreturn bg;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/bg.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/bm.js":
/*!********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/bm.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Bambara [bm]\n//! author : Estelle Comment : https://github.com/estellecomment\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n// Language contact person : Abdoufata Kane : https://github.com/abdoufata\n\nvar bm = moment.defineLocale('bm', {\n    months : 'Zanwuyekalo_Fewuruyekalo_Marisikalo_Awirilikalo_Mɛkalo_Zuwɛnkalo_Zuluyekalo_Utikalo_Sɛtanburukalo_ɔkutɔburukalo_Nowanburukalo_Desanburukalo'.split('_'),\n    monthsShort : 'Zan_Few_Mar_Awi_Mɛ_Zuw_Zul_Uti_Sɛt_ɔku_Now_Des'.split('_'),\n    weekdays : 'Kari_Ntɛnɛn_Tarata_Araba_Alamisa_Juma_Sibiri'.split('_'),\n    weekdaysShort : 'Kar_Ntɛ_Tar_Ara_Ala_Jum_Sib'.split('_'),\n    weekdaysMin : 'Ka_Nt_Ta_Ar_Al_Ju_Si'.split('_'),\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD/MM/YYYY',\n        LL : 'MMMM [tile] D [san] YYYY',\n        LLL : 'MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm',\n        LLLL : 'dddd MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm'\n    },\n    calendar : {\n        sameDay : '[Bi lɛrɛ] LT',\n        nextDay : '[Sini lɛrɛ] LT',\n        nextWeek : 'dddd [don lɛrɛ] LT',\n        lastDay : '[Kunu lɛrɛ] LT',\n        lastWeek : 'dddd [tɛmɛnen lɛrɛ] LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : '%s kɔnɔ',\n        past : 'a bɛ %s bɔ',\n        s : 'sanga dama dama',\n        ss : 'sekondi %d',\n        m : 'miniti kelen',\n        mm : 'miniti %d',\n        h : 'lɛrɛ kelen',\n        hh : 'lɛrɛ %d',\n        d : 'tile kelen',\n        dd : 'tile %d',\n        M : 'kalo kelen',\n        MM : 'kalo %d',\n        y : 'san kelen',\n        yy : 'san %d'\n    },\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn bm;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/bm.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/bn.js":
/*!********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/bn.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Bengali [bn]\n//! author : Kaushik Gandhi : https://github.com/kaushikgandhi\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar symbolMap = {\n    '1': '১',\n    '2': '২',\n    '3': '৩',\n    '4': '৪',\n    '5': '৫',\n    '6': '৬',\n    '7': '৭',\n    '8': '৮',\n    '9': '৯',\n    '0': '০'\n};\nvar numberMap = {\n    '১': '1',\n    '২': '2',\n    '৩': '3',\n    '৪': '4',\n    '৫': '5',\n    '৬': '6',\n    '৭': '7',\n    '৮': '8',\n    '৯': '9',\n    '০': '0'\n};\n\nvar bn = moment.defineLocale('bn', {\n    months : 'জানুয়ারী_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর'.split('_'),\n    monthsShort : 'জানু_ফেব_মার্চ_এপ্র_মে_জুন_জুল_আগ_সেপ্ট_অক্টো_নভে_ডিসে'.split('_'),\n    weekdays : 'রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার'.split('_'),\n    weekdaysShort : 'রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি'.split('_'),\n    weekdaysMin : 'রবি_সোম_মঙ্গ_বুধ_বৃহঃ_শুক্র_শনি'.split('_'),\n    longDateFormat : {\n        LT : 'A h:mm সময়',\n        LTS : 'A h:mm:ss সময়',\n        L : 'DD/MM/YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY, A h:mm সময়',\n        LLLL : 'dddd, D MMMM YYYY, A h:mm সময়'\n    },\n    calendar : {\n        sameDay : '[আজ] LT',\n        nextDay : '[আগামীকাল] LT',\n        nextWeek : 'dddd, LT',\n        lastDay : '[গতকাল] LT',\n        lastWeek : '[গত] dddd, LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : '%s পরে',\n        past : '%s আগে',\n        s : 'কয়েক সেকেন্ড',\n        ss : '%d সেকেন্ড',\n        m : 'এক মিনিট',\n        mm : '%d মিনিট',\n        h : 'এক ঘন্টা',\n        hh : '%d ঘন্টা',\n        d : 'এক দিন',\n        dd : '%d দিন',\n        M : 'এক মাস',\n        MM : '%d মাস',\n        y : 'এক বছর',\n        yy : '%d বছর'\n    },\n    preparse: function (string) {\n        return string.replace(/[১২৩৪৫৬৭৮৯০]/g, function (match) {\n            return numberMap[match];\n        });\n    },\n    postformat: function (string) {\n        return string.replace(/\\d/g, function (match) {\n            return symbolMap[match];\n        });\n    },\n    meridiemParse: /রাত|সকাল|দুপুর|বিকাল|রাত/,\n    meridiemHour : function (hour, meridiem) {\n        if (hour === 12) {\n            hour = 0;\n        }\n        if ((meridiem === 'রাত' && hour >= 4) ||\n                (meridiem === 'দুপুর' && hour < 5) ||\n                meridiem === 'বিকাল') {\n            return hour + 12;\n        } else {\n            return hour;\n        }\n    },\n    meridiem : function (hour, minute, isLower) {\n        if (hour < 4) {\n            return 'রাত';\n        } else if (hour < 10) {\n            return 'সকাল';\n        } else if (hour < 17) {\n            return 'দুপুর';\n        } else if (hour < 20) {\n            return 'বিকাল';\n        } else {\n            return 'রাত';\n        }\n    },\n    week : {\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\nreturn bn;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/bn.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/bo.js":
/*!********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/bo.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Tibetan [bo]\n//! author : Thupten N. Chakrishar : https://github.com/vajradog\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar symbolMap = {\n    '1': '༡',\n    '2': '༢',\n    '3': '༣',\n    '4': '༤',\n    '5': '༥',\n    '6': '༦',\n    '7': '༧',\n    '8': '༨',\n    '9': '༩',\n    '0': '༠'\n};\nvar numberMap = {\n    '༡': '1',\n    '༢': '2',\n    '༣': '3',\n    '༤': '4',\n    '༥': '5',\n    '༦': '6',\n    '༧': '7',\n    '༨': '8',\n    '༩': '9',\n    '༠': '0'\n};\n\nvar bo = moment.defineLocale('bo', {\n    months : 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split('_'),\n    monthsShort : 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split('_'),\n    weekdays : 'གཟའ་ཉི་མ་_གཟའ་ཟླ་བ་_གཟའ་མིག་དམར་_གཟའ་ལྷག་པ་_གཟའ་ཕུར་བུ_གཟའ་པ་སངས་_གཟའ་སྤེན་པ་'.split('_'),\n    weekdaysShort : 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split('_'),\n    weekdaysMin : 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split('_'),\n    longDateFormat : {\n        LT : 'A h:mm',\n        LTS : 'A h:mm:ss',\n        L : 'DD/MM/YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY, A h:mm',\n        LLLL : 'dddd, D MMMM YYYY, A h:mm'\n    },\n    calendar : {\n        sameDay : '[དི་རིང] LT',\n        nextDay : '[སང་ཉིན] LT',\n        nextWeek : '[བདུན་ཕྲག་རྗེས་མ], LT',\n        lastDay : '[ཁ་སང] LT',\n        lastWeek : '[བདུན་ཕྲག་མཐའ་མ] dddd, LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : '%s ལ་',\n        past : '%s སྔན་ལ',\n        s : 'ལམ་སང',\n        ss : '%d སྐར་ཆ།',\n        m : 'སྐར་མ་གཅིག',\n        mm : '%d སྐར་མ',\n        h : 'ཆུ་ཚོད་གཅིག',\n        hh : '%d ཆུ་ཚོད',\n        d : 'ཉིན་གཅིག',\n        dd : '%d ཉིན་',\n        M : 'ཟླ་བ་གཅིག',\n        MM : '%d ཟླ་བ',\n        y : 'ལོ་གཅིག',\n        yy : '%d ལོ'\n    },\n    preparse: function (string) {\n        return string.replace(/[༡༢༣༤༥༦༧༨༩༠]/g, function (match) {\n            return numberMap[match];\n        });\n    },\n    postformat: function (string) {\n        return string.replace(/\\d/g, function (match) {\n            return symbolMap[match];\n        });\n    },\n    meridiemParse: /མཚན་མོ|ཞོགས་ཀས|ཉིན་གུང|དགོང་དག|མཚན་མོ/,\n    meridiemHour : function (hour, meridiem) {\n        if (hour === 12) {\n            hour = 0;\n        }\n        if ((meridiem === 'མཚན་མོ' && hour >= 4) ||\n                (meridiem === 'ཉིན་གུང' && hour < 5) ||\n                meridiem === 'དགོང་དག') {\n            return hour + 12;\n        } else {\n            return hour;\n        }\n    },\n    meridiem : function (hour, minute, isLower) {\n        if (hour < 4) {\n            return 'མཚན་མོ';\n        } else if (hour < 10) {\n            return 'ཞོགས་ཀས';\n        } else if (hour < 17) {\n            return 'ཉིན་གུང';\n        } else if (hour < 20) {\n            return 'དགོང་དག';\n        } else {\n            return 'མཚན་མོ';\n        }\n    },\n    week : {\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\nreturn bo;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/bo.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/br.js":
/*!********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/br.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Breton [br]\n//! author : Jean-Baptiste Le Duigou : https://github.com/jbleduigou\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nfunction relativeTimeWithMutation(number, withoutSuffix, key) {\n    var format = {\n        'mm': 'munutenn',\n        'MM': 'miz',\n        'dd': 'devezh'\n    };\n    return number + ' ' + mutation(format[key], number);\n}\nfunction specialMutationForYears(number) {\n    switch (lastNumber(number)) {\n        case 1:\n        case 3:\n        case 4:\n        case 5:\n        case 9:\n            return number + ' bloaz';\n        default:\n            return number + ' vloaz';\n    }\n}\nfunction lastNumber(number) {\n    if (number > 9) {\n        return lastNumber(number % 10);\n    }\n    return number;\n}\nfunction mutation(text, number) {\n    if (number === 2) {\n        return softMutation(text);\n    }\n    return text;\n}\nfunction softMutation(text) {\n    var mutationTable = {\n        'm': 'v',\n        'b': 'v',\n        'd': 'z'\n    };\n    if (mutationTable[text.charAt(0)] === undefined) {\n        return text;\n    }\n    return mutationTable[text.charAt(0)] + text.substring(1);\n}\n\nvar br = moment.defineLocale('br', {\n    months : 'Genver_C\\'hwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu'.split('_'),\n    monthsShort : 'Gen_C\\'hwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker'.split('_'),\n    weekdays : 'Sul_Lun_Meurzh_Merc\\'her_Yaou_Gwener_Sadorn'.split('_'),\n    weekdaysShort : 'Sul_Lun_Meu_Mer_Yao_Gwe_Sad'.split('_'),\n    weekdaysMin : 'Su_Lu_Me_Mer_Ya_Gw_Sa'.split('_'),\n    weekdaysParseExact : true,\n    longDateFormat : {\n        LT : 'h[e]mm A',\n        LTS : 'h[e]mm:ss A',\n        L : 'DD/MM/YYYY',\n        LL : 'D [a viz] MMMM YYYY',\n        LLL : 'D [a viz] MMMM YYYY h[e]mm A',\n        LLLL : 'dddd, D [a viz] MMMM YYYY h[e]mm A'\n    },\n    calendar : {\n        sameDay : '[Hiziv da] LT',\n        nextDay : '[Warc\\'hoazh da] LT',\n        nextWeek : 'dddd [da] LT',\n        lastDay : '[Dec\\'h da] LT',\n        lastWeek : 'dddd [paset da] LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : 'a-benn %s',\n        past : '%s \\'zo',\n        s : 'un nebeud segondennoù',\n        ss : '%d eilenn',\n        m : 'ur vunutenn',\n        mm : relativeTimeWithMutation,\n        h : 'un eur',\n        hh : '%d eur',\n        d : 'un devezh',\n        dd : relativeTimeWithMutation,\n        M : 'ur miz',\n        MM : relativeTimeWithMutation,\n        y : 'ur bloaz',\n        yy : specialMutationForYears\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(añ|vet)/,\n    ordinal : function (number) {\n        var output = (number === 1) ? 'añ' : 'vet';\n        return number + output;\n    },\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn br;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/br.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/bs.js":
/*!********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/bs.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Bosnian [bs]\n//! author : Nedim Cholich : https://github.com/frontyard\n//! based on (hr) translation by Bojan Marković\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nfunction translate(number, withoutSuffix, key) {\n    var result = number + ' ';\n    switch (key) {\n        case 'ss':\n            if (number === 1) {\n                result += 'sekunda';\n            } else if (number === 2 || number === 3 || number === 4) {\n                result += 'sekunde';\n            } else {\n                result += 'sekundi';\n            }\n            return result;\n        case 'm':\n            return withoutSuffix ? 'jedna minuta' : 'jedne minute';\n        case 'mm':\n            if (number === 1) {\n                result += 'minuta';\n            } else if (number === 2 || number === 3 || number === 4) {\n                result += 'minute';\n            } else {\n                result += 'minuta';\n            }\n            return result;\n        case 'h':\n            return withoutSuffix ? 'jedan sat' : 'jednog sata';\n        case 'hh':\n            if (number === 1) {\n                result += 'sat';\n            } else if (number === 2 || number === 3 || number === 4) {\n                result += 'sata';\n            } else {\n                result += 'sati';\n            }\n            return result;\n        case 'dd':\n            if (number === 1) {\n                result += 'dan';\n            } else {\n                result += 'dana';\n            }\n            return result;\n        case 'MM':\n            if (number === 1) {\n                result += 'mjesec';\n            } else if (number === 2 || number === 3 || number === 4) {\n                result += 'mjeseca';\n            } else {\n                result += 'mjeseci';\n            }\n            return result;\n        case 'yy':\n            if (number === 1) {\n                result += 'godina';\n            } else if (number === 2 || number === 3 || number === 4) {\n                result += 'godine';\n            } else {\n                result += 'godina';\n            }\n            return result;\n    }\n}\n\nvar bs = moment.defineLocale('bs', {\n    months : 'januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar'.split('_'),\n    monthsShort : 'jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.'.split('_'),\n    monthsParseExact: true,\n    weekdays : 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'),\n    weekdaysShort : 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),\n    weekdaysMin : 'ne_po_ut_sr_če_pe_su'.split('_'),\n    weekdaysParseExact : true,\n    longDateFormat : {\n        LT : 'H:mm',\n        LTS : 'H:mm:ss',\n        L : 'DD.MM.YYYY',\n        LL : 'D. MMMM YYYY',\n        LLL : 'D. MMMM YYYY H:mm',\n        LLLL : 'dddd, D. MMMM YYYY H:mm'\n    },\n    calendar : {\n        sameDay  : '[danas u] LT',\n        nextDay  : '[sutra u] LT',\n        nextWeek : function () {\n            switch (this.day()) {\n                case 0:\n                    return '[u] [nedjelju] [u] LT';\n                case 3:\n                    return '[u] [srijedu] [u] LT';\n                case 6:\n                    return '[u] [subotu] [u] LT';\n                case 1:\n                case 2:\n                case 4:\n                case 5:\n                    return '[u] dddd [u] LT';\n            }\n        },\n        lastDay  : '[jučer u] LT',\n        lastWeek : function () {\n            switch (this.day()) {\n                case 0:\n                case 3:\n                    return '[prošlu] dddd [u] LT';\n                case 6:\n                    return '[prošle] [subote] [u] LT';\n                case 1:\n                case 2:\n                case 4:\n                case 5:\n                    return '[prošli] dddd [u] LT';\n            }\n        },\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : 'za %s',\n        past   : 'prije %s',\n        s      : 'par sekundi',\n        ss     : translate,\n        m      : translate,\n        mm     : translate,\n        h      : translate,\n        hh     : translate,\n        d      : 'dan',\n        dd     : translate,\n        M      : 'mjesec',\n        MM     : translate,\n        y      : 'godinu',\n        yy     : translate\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal : '%d.',\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 7  // The week that contains Jan 1st is the first week of the year.\n    }\n});\n\nreturn bs;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/bs.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/ca.js":
/*!********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/ca.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Catalan [ca]\n//! author : Juan G. Hurtado : https://github.com/juanghurtado\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar ca = moment.defineLocale('ca', {\n    months : {\n        standalone: 'gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre'.split('_'),\n        format: 'de gener_de febrer_de març_d\\'abril_de maig_de juny_de juliol_d\\'agost_de setembre_d\\'octubre_de novembre_de desembre'.split('_'),\n        isFormat: /D[oD]?(\\s)+MMMM/\n    },\n    monthsShort : 'gen._febr._març_abr._maig_juny_jul._ag._set._oct._nov._des.'.split('_'),\n    monthsParseExact : true,\n    weekdays : 'diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte'.split('_'),\n    weekdaysShort : 'dg._dl._dt._dc._dj._dv._ds.'.split('_'),\n    weekdaysMin : 'dg_dl_dt_dc_dj_dv_ds'.split('_'),\n    weekdaysParseExact : true,\n    longDateFormat : {\n        LT : 'H:mm',\n        LTS : 'H:mm:ss',\n        L : 'DD/MM/YYYY',\n        LL : 'D MMMM [de] YYYY',\n        ll : 'D MMM YYYY',\n        LLL : 'D MMMM [de] YYYY [a les] H:mm',\n        lll : 'D MMM YYYY, H:mm',\n        LLLL : 'dddd D MMMM [de] YYYY [a les] H:mm',\n        llll : 'ddd D MMM YYYY, H:mm'\n    },\n    calendar : {\n        sameDay : function () {\n            return '[avui a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';\n        },\n        nextDay : function () {\n            return '[demà a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';\n        },\n        nextWeek : function () {\n            return 'dddd [a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';\n        },\n        lastDay : function () {\n            return '[ahir a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';\n        },\n        lastWeek : function () {\n            return '[el] dddd [passat a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';\n        },\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : 'd\\'aquí %s',\n        past : 'fa %s',\n        s : 'uns segons',\n        ss : '%d segons',\n        m : 'un minut',\n        mm : '%d minuts',\n        h : 'una hora',\n        hh : '%d hores',\n        d : 'un dia',\n        dd : '%d dies',\n        M : 'un mes',\n        MM : '%d mesos',\n        y : 'un any',\n        yy : '%d anys'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(r|n|t|è|a)/,\n    ordinal : function (number, period) {\n        var output = (number === 1) ? 'r' :\n            (number === 2) ? 'n' :\n            (number === 3) ? 'r' :\n            (number === 4) ? 't' : 'è';\n        if (period === 'w' || period === 'W') {\n            output = 'a';\n        }\n        return number + output;\n    },\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn ca;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/ca.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/cs.js":
/*!********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/cs.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Czech [cs]\n//! author : petrbela : https://github.com/petrbela\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar months = 'leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec'.split('_');\nvar monthsShort = 'led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro'.split('_');\nfunction plural(n) {\n    return (n > 1) && (n < 5) && (~~(n / 10) !== 1);\n}\nfunction translate(number, withoutSuffix, key, isFuture) {\n    var result = number + ' ';\n    switch (key) {\n        case 's':  // a few seconds / in a few seconds / a few seconds ago\n            return (withoutSuffix || isFuture) ? 'pár sekund' : 'pár sekundami';\n        case 'ss': // 9 seconds / in 9 seconds / 9 seconds ago\n            if (withoutSuffix || isFuture) {\n                return result + (plural(number) ? 'sekundy' : 'sekund');\n            } else {\n                return result + 'sekundami';\n            }\n            break;\n        case 'm':  // a minute / in a minute / a minute ago\n            return withoutSuffix ? 'minuta' : (isFuture ? 'minutu' : 'minutou');\n        case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago\n            if (withoutSuffix || isFuture) {\n                return result + (plural(number) ? 'minuty' : 'minut');\n            } else {\n                return result + 'minutami';\n            }\n            break;\n        case 'h':  // an hour / in an hour / an hour ago\n            return withoutSuffix ? 'hodina' : (isFuture ? 'hodinu' : 'hodinou');\n        case 'hh': // 9 hours / in 9 hours / 9 hours ago\n            if (withoutSuffix || isFuture) {\n                return result + (plural(number) ? 'hodiny' : 'hodin');\n            } else {\n                return result + 'hodinami';\n            }\n            break;\n        case 'd':  // a day / in a day / a day ago\n            return (withoutSuffix || isFuture) ? 'den' : 'dnem';\n        case 'dd': // 9 days / in 9 days / 9 days ago\n            if (withoutSuffix || isFuture) {\n                return result + (plural(number) ? 'dny' : 'dní');\n            } else {\n                return result + 'dny';\n            }\n            break;\n        case 'M':  // a month / in a month / a month ago\n            return (withoutSuffix || isFuture) ? 'měsíc' : 'měsícem';\n        case 'MM': // 9 months / in 9 months / 9 months ago\n            if (withoutSuffix || isFuture) {\n                return result + (plural(number) ? 'měsíce' : 'měsíců');\n            } else {\n                return result + 'měsíci';\n            }\n            break;\n        case 'y':  // a year / in a year / a year ago\n            return (withoutSuffix || isFuture) ? 'rok' : 'rokem';\n        case 'yy': // 9 years / in 9 years / 9 years ago\n            if (withoutSuffix || isFuture) {\n                return result + (plural(number) ? 'roky' : 'let');\n            } else {\n                return result + 'lety';\n            }\n            break;\n    }\n}\n\nvar cs = moment.defineLocale('cs', {\n    months : months,\n    monthsShort : monthsShort,\n    monthsParse : (function (months, monthsShort) {\n        var i, _monthsParse = [];\n        for (i = 0; i < 12; i++) {\n            // use custom parser to solve problem with July (červenec)\n            _monthsParse[i] = new RegExp('^' + months[i] + '$|^' + monthsShort[i] + '$', 'i');\n        }\n        return _monthsParse;\n    }(months, monthsShort)),\n    shortMonthsParse : (function (monthsShort) {\n        var i, _shortMonthsParse = [];\n        for (i = 0; i < 12; i++) {\n            _shortMonthsParse[i] = new RegExp('^' + monthsShort[i] + '$', 'i');\n        }\n        return _shortMonthsParse;\n    }(monthsShort)),\n    longMonthsParse : (function (months) {\n        var i, _longMonthsParse = [];\n        for (i = 0; i < 12; i++) {\n            _longMonthsParse[i] = new RegExp('^' + months[i] + '$', 'i');\n        }\n        return _longMonthsParse;\n    }(months)),\n    weekdays : 'neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota'.split('_'),\n    weekdaysShort : 'ne_po_út_st_čt_pá_so'.split('_'),\n    weekdaysMin : 'ne_po_út_st_čt_pá_so'.split('_'),\n    longDateFormat : {\n        LT: 'H:mm',\n        LTS : 'H:mm:ss',\n        L : 'DD.MM.YYYY',\n        LL : 'D. MMMM YYYY',\n        LLL : 'D. MMMM YYYY H:mm',\n        LLLL : 'dddd D. MMMM YYYY H:mm',\n        l : 'D. M. YYYY'\n    },\n    calendar : {\n        sameDay: '[dnes v] LT',\n        nextDay: '[zítra v] LT',\n        nextWeek: function () {\n            switch (this.day()) {\n                case 0:\n                    return '[v neděli v] LT';\n                case 1:\n                case 2:\n                    return '[v] dddd [v] LT';\n                case 3:\n                    return '[ve středu v] LT';\n                case 4:\n                    return '[ve čtvrtek v] LT';\n                case 5:\n                    return '[v pátek v] LT';\n                case 6:\n                    return '[v sobotu v] LT';\n            }\n        },\n        lastDay: '[včera v] LT',\n        lastWeek: function () {\n            switch (this.day()) {\n                case 0:\n                    return '[minulou neděli v] LT';\n                case 1:\n                case 2:\n                    return '[minulé] dddd [v] LT';\n                case 3:\n                    return '[minulou středu v] LT';\n                case 4:\n                case 5:\n                    return '[minulý] dddd [v] LT';\n                case 6:\n                    return '[minulou sobotu v] LT';\n            }\n        },\n        sameElse: 'L'\n    },\n    relativeTime : {\n        future : 'za %s',\n        past : 'před %s',\n        s : translate,\n        ss : translate,\n        m : translate,\n        mm : translate,\n        h : translate,\n        hh : translate,\n        d : translate,\n        dd : translate,\n        M : translate,\n        MM : translate,\n        y : translate,\n        yy : translate\n    },\n    dayOfMonthOrdinalParse : /\\d{1,2}\\./,\n    ordinal : '%d.',\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn cs;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/cs.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/cv.js":
/*!********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/cv.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Chuvash [cv]\n//! author : Anatoly Mironov : https://github.com/mirontoli\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar cv = moment.defineLocale('cv', {\n    months : 'кӑрлач_нарӑс_пуш_ака_май_ҫӗртме_утӑ_ҫурла_авӑн_юпа_чӳк_раштав'.split('_'),\n    monthsShort : 'кӑр_нар_пуш_ака_май_ҫӗр_утӑ_ҫур_авн_юпа_чӳк_раш'.split('_'),\n    weekdays : 'вырсарникун_тунтикун_ытларикун_юнкун_кӗҫнерникун_эрнекун_шӑматкун'.split('_'),\n    weekdaysShort : 'выр_тун_ытл_юн_кӗҫ_эрн_шӑм'.split('_'),\n    weekdaysMin : 'вр_тн_ыт_юн_кҫ_эр_шм'.split('_'),\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD-MM-YYYY',\n        LL : 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ]',\n        LLL : 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm',\n        LLLL : 'dddd, YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm'\n    },\n    calendar : {\n        sameDay: '[Паян] LT [сехетре]',\n        nextDay: '[Ыран] LT [сехетре]',\n        lastDay: '[Ӗнер] LT [сехетре]',\n        nextWeek: '[Ҫитес] dddd LT [сехетре]',\n        lastWeek: '[Иртнӗ] dddd LT [сехетре]',\n        sameElse: 'L'\n    },\n    relativeTime : {\n        future : function (output) {\n            var affix = /сехет$/i.exec(output) ? 'рен' : /ҫул$/i.exec(output) ? 'тан' : 'ран';\n            return output + affix;\n        },\n        past : '%s каялла',\n        s : 'пӗр-ик ҫеккунт',\n        ss : '%d ҫеккунт',\n        m : 'пӗр минут',\n        mm : '%d минут',\n        h : 'пӗр сехет',\n        hh : '%d сехет',\n        d : 'пӗр кун',\n        dd : '%d кун',\n        M : 'пӗр уйӑх',\n        MM : '%d уйӑх',\n        y : 'пӗр ҫул',\n        yy : '%d ҫул'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}-мӗш/,\n    ordinal : '%d-мӗш',\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 7  // The week that contains Jan 1st is the first week of the year.\n    }\n});\n\nreturn cv;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/cv.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/cy.js":
/*!********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/cy.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Welsh [cy]\n//! author : Robert Allen : https://github.com/robgallen\n//! author : https://github.com/ryangreaves\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar cy = moment.defineLocale('cy', {\n    months: 'Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr'.split('_'),\n    monthsShort: 'Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag'.split('_'),\n    weekdays: 'Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn'.split('_'),\n    weekdaysShort: 'Sul_Llun_Maw_Mer_Iau_Gwe_Sad'.split('_'),\n    weekdaysMin: 'Su_Ll_Ma_Me_Ia_Gw_Sa'.split('_'),\n    weekdaysParseExact : true,\n    // time formats are the same as en-gb\n    longDateFormat: {\n        LT: 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L: 'DD/MM/YYYY',\n        LL: 'D MMMM YYYY',\n        LLL: 'D MMMM YYYY HH:mm',\n        LLLL: 'dddd, D MMMM YYYY HH:mm'\n    },\n    calendar: {\n        sameDay: '[Heddiw am] LT',\n        nextDay: '[Yfory am] LT',\n        nextWeek: 'dddd [am] LT',\n        lastDay: '[Ddoe am] LT',\n        lastWeek: 'dddd [diwethaf am] LT',\n        sameElse: 'L'\n    },\n    relativeTime: {\n        future: 'mewn %s',\n        past: '%s yn ôl',\n        s: 'ychydig eiliadau',\n        ss: '%d eiliad',\n        m: 'munud',\n        mm: '%d munud',\n        h: 'awr',\n        hh: '%d awr',\n        d: 'diwrnod',\n        dd: '%d diwrnod',\n        M: 'mis',\n        MM: '%d mis',\n        y: 'blwyddyn',\n        yy: '%d flynedd'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(fed|ain|af|il|ydd|ed|eg)/,\n    // traditional ordinal numbers above 31 are not commonly used in colloquial Welsh\n    ordinal: function (number) {\n        var b = number,\n            output = '',\n            lookup = [\n                '', 'af', 'il', 'ydd', 'ydd', 'ed', 'ed', 'ed', 'fed', 'fed', 'fed', // 1af to 10fed\n                'eg', 'fed', 'eg', 'eg', 'fed', 'eg', 'eg', 'fed', 'eg', 'fed' // 11eg to 20fed\n            ];\n        if (b > 20) {\n            if (b === 40 || b === 50 || b === 60 || b === 80 || b === 100) {\n                output = 'fed'; // not 30ain, 70ain or 90ain\n            } else {\n                output = 'ain';\n            }\n        } else if (b > 0) {\n            output = lookup[b];\n        }\n        return number + output;\n    },\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn cy;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/cy.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/da.js":
/*!********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/da.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Danish [da]\n//! author : Ulrik Nielsen : https://github.com/mrbase\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar da = moment.defineLocale('da', {\n    months : 'januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december'.split('_'),\n    monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),\n    weekdays : 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),\n    weekdaysShort : 'søn_man_tir_ons_tor_fre_lør'.split('_'),\n    weekdaysMin : 'sø_ma_ti_on_to_fr_lø'.split('_'),\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD.MM.YYYY',\n        LL : 'D. MMMM YYYY',\n        LLL : 'D. MMMM YYYY HH:mm',\n        LLLL : 'dddd [d.] D. MMMM YYYY [kl.] HH:mm'\n    },\n    calendar : {\n        sameDay : '[i dag kl.] LT',\n        nextDay : '[i morgen kl.] LT',\n        nextWeek : 'på dddd [kl.] LT',\n        lastDay : '[i går kl.] LT',\n        lastWeek : '[i] dddd[s kl.] LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : 'om %s',\n        past : '%s siden',\n        s : 'få sekunder',\n        ss : '%d sekunder',\n        m : 'et minut',\n        mm : '%d minutter',\n        h : 'en time',\n        hh : '%d timer',\n        d : 'en dag',\n        dd : '%d dage',\n        M : 'en måned',\n        MM : '%d måneder',\n        y : 'et år',\n        yy : '%d år'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal : '%d.',\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn da;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/da.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/de-at.js":
/*!***********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/de-at.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : German (Austria) [de-at]\n//! author : lluchs : https://github.com/lluchs\n//! author: Menelion Elensúle: https://github.com/Oire\n//! author : Martin Groller : https://github.com/MadMG\n//! author : Mikolaj Dadela : https://github.com/mik01aj\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nfunction processRelativeTime(number, withoutSuffix, key, isFuture) {\n    var format = {\n        'm': ['eine Minute', 'einer Minute'],\n        'h': ['eine Stunde', 'einer Stunde'],\n        'd': ['ein Tag', 'einem Tag'],\n        'dd': [number + ' Tage', number + ' Tagen'],\n        'M': ['ein Monat', 'einem Monat'],\n        'MM': [number + ' Monate', number + ' Monaten'],\n        'y': ['ein Jahr', 'einem Jahr'],\n        'yy': [number + ' Jahre', number + ' Jahren']\n    };\n    return withoutSuffix ? format[key][0] : format[key][1];\n}\n\nvar deAt = moment.defineLocale('de-at', {\n    months : 'Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),\n    monthsShort : 'Jän._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'),\n    monthsParseExact : true,\n    weekdays : 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'),\n    weekdaysShort : 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),\n    weekdaysMin : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n    weekdaysParseExact : true,\n    longDateFormat : {\n        LT: 'HH:mm',\n        LTS: 'HH:mm:ss',\n        L : 'DD.MM.YYYY',\n        LL : 'D. MMMM YYYY',\n        LLL : 'D. MMMM YYYY HH:mm',\n        LLLL : 'dddd, D. MMMM YYYY HH:mm'\n    },\n    calendar : {\n        sameDay: '[heute um] LT [Uhr]',\n        sameElse: 'L',\n        nextDay: '[morgen um] LT [Uhr]',\n        nextWeek: 'dddd [um] LT [Uhr]',\n        lastDay: '[gestern um] LT [Uhr]',\n        lastWeek: '[letzten] dddd [um] LT [Uhr]'\n    },\n    relativeTime : {\n        future : 'in %s',\n        past : 'vor %s',\n        s : 'ein paar Sekunden',\n        ss : '%d Sekunden',\n        m : processRelativeTime,\n        mm : '%d Minuten',\n        h : processRelativeTime,\n        hh : '%d Stunden',\n        d : processRelativeTime,\n        dd : processRelativeTime,\n        M : processRelativeTime,\n        MM : processRelativeTime,\n        y : processRelativeTime,\n        yy : processRelativeTime\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal : '%d.',\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn deAt;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/de-at.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/de-ch.js":
/*!***********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/de-ch.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : German (Switzerland) [de-ch]\n//! author : sschueller : https://github.com/sschueller\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n// based on: https://www.bk.admin.ch/dokumentation/sprachen/04915/05016/index.html?lang=de#\n\nfunction processRelativeTime(number, withoutSuffix, key, isFuture) {\n    var format = {\n        'm': ['eine Minute', 'einer Minute'],\n        'h': ['eine Stunde', 'einer Stunde'],\n        'd': ['ein Tag', 'einem Tag'],\n        'dd': [number + ' Tage', number + ' Tagen'],\n        'M': ['ein Monat', 'einem Monat'],\n        'MM': [number + ' Monate', number + ' Monaten'],\n        'y': ['ein Jahr', 'einem Jahr'],\n        'yy': [number + ' Jahre', number + ' Jahren']\n    };\n    return withoutSuffix ? format[key][0] : format[key][1];\n}\n\nvar deCh = moment.defineLocale('de-ch', {\n    months : 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),\n    monthsShort : 'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'),\n    monthsParseExact : true,\n    weekdays : 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'),\n    weekdaysShort : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n    weekdaysMin : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n    weekdaysParseExact : true,\n    longDateFormat : {\n        LT: 'HH:mm',\n        LTS: 'HH:mm:ss',\n        L : 'DD.MM.YYYY',\n        LL : 'D. MMMM YYYY',\n        LLL : 'D. MMMM YYYY HH:mm',\n        LLLL : 'dddd, D. MMMM YYYY HH:mm'\n    },\n    calendar : {\n        sameDay: '[heute um] LT [Uhr]',\n        sameElse: 'L',\n        nextDay: '[morgen um] LT [Uhr]',\n        nextWeek: 'dddd [um] LT [Uhr]',\n        lastDay: '[gestern um] LT [Uhr]',\n        lastWeek: '[letzten] dddd [um] LT [Uhr]'\n    },\n    relativeTime : {\n        future : 'in %s',\n        past : 'vor %s',\n        s : 'ein paar Sekunden',\n        ss : '%d Sekunden',\n        m : processRelativeTime,\n        mm : '%d Minuten',\n        h : processRelativeTime,\n        hh : '%d Stunden',\n        d : processRelativeTime,\n        dd : processRelativeTime,\n        M : processRelativeTime,\n        MM : processRelativeTime,\n        y : processRelativeTime,\n        yy : processRelativeTime\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal : '%d.',\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn deCh;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/de-ch.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/de.js":
/*!********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/de.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : German [de]\n//! author : lluchs : https://github.com/lluchs\n//! author: Menelion Elensúle: https://github.com/Oire\n//! author : Mikolaj Dadela : https://github.com/mik01aj\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nfunction processRelativeTime(number, withoutSuffix, key, isFuture) {\n    var format = {\n        'm': ['eine Minute', 'einer Minute'],\n        'h': ['eine Stunde', 'einer Stunde'],\n        'd': ['ein Tag', 'einem Tag'],\n        'dd': [number + ' Tage', number + ' Tagen'],\n        'M': ['ein Monat', 'einem Monat'],\n        'MM': [number + ' Monate', number + ' Monaten'],\n        'y': ['ein Jahr', 'einem Jahr'],\n        'yy': [number + ' Jahre', number + ' Jahren']\n    };\n    return withoutSuffix ? format[key][0] : format[key][1];\n}\n\nvar de = moment.defineLocale('de', {\n    months : 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),\n    monthsShort : 'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'),\n    monthsParseExact : true,\n    weekdays : 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'),\n    weekdaysShort : 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),\n    weekdaysMin : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n    weekdaysParseExact : true,\n    longDateFormat : {\n        LT: 'HH:mm',\n        LTS: 'HH:mm:ss',\n        L : 'DD.MM.YYYY',\n        LL : 'D. MMMM YYYY',\n        LLL : 'D. MMMM YYYY HH:mm',\n        LLLL : 'dddd, D. MMMM YYYY HH:mm'\n    },\n    calendar : {\n        sameDay: '[heute um] LT [Uhr]',\n        sameElse: 'L',\n        nextDay: '[morgen um] LT [Uhr]',\n        nextWeek: 'dddd [um] LT [Uhr]',\n        lastDay: '[gestern um] LT [Uhr]',\n        lastWeek: '[letzten] dddd [um] LT [Uhr]'\n    },\n    relativeTime : {\n        future : 'in %s',\n        past : 'vor %s',\n        s : 'ein paar Sekunden',\n        ss : '%d Sekunden',\n        m : processRelativeTime,\n        mm : '%d Minuten',\n        h : processRelativeTime,\n        hh : '%d Stunden',\n        d : processRelativeTime,\n        dd : processRelativeTime,\n        M : processRelativeTime,\n        MM : processRelativeTime,\n        y : processRelativeTime,\n        yy : processRelativeTime\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal : '%d.',\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn de;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/de.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/dv.js":
/*!********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/dv.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Maldivian [dv]\n//! author : Jawish Hameed : https://github.com/jawish\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar months = [\n    'ޖެނުއަރީ',\n    'ފެބްރުއަރީ',\n    'މާރިޗު',\n    'އޭޕްރީލު',\n    'މޭ',\n    'ޖޫން',\n    'ޖުލައި',\n    'އޯގަސްޓު',\n    'ސެޕްޓެމްބަރު',\n    'އޮކްޓޯބަރު',\n    'ނޮވެމްބަރު',\n    'ޑިސެމްބަރު'\n];\nvar weekdays = [\n    'އާދިއްތަ',\n    'ހޯމަ',\n    'އަންގާރަ',\n    'ބުދަ',\n    'ބުރާސްފަތި',\n    'ހުކުރު',\n    'ހޮނިހިރު'\n];\n\nvar dv = moment.defineLocale('dv', {\n    months : months,\n    monthsShort : months,\n    weekdays : weekdays,\n    weekdaysShort : weekdays,\n    weekdaysMin : 'އާދި_ހޯމަ_އަން_ބުދަ_ބުރާ_ހުކު_ހޮނި'.split('_'),\n    longDateFormat : {\n\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'D/M/YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY HH:mm',\n        LLLL : 'dddd D MMMM YYYY HH:mm'\n    },\n    meridiemParse: /މކ|މފ/,\n    isPM : function (input) {\n        return 'މފ' === input;\n    },\n    meridiem : function (hour, minute, isLower) {\n        if (hour < 12) {\n            return 'މކ';\n        } else {\n            return 'މފ';\n        }\n    },\n    calendar : {\n        sameDay : '[މިއަދު] LT',\n        nextDay : '[މާދަމާ] LT',\n        nextWeek : 'dddd LT',\n        lastDay : '[އިއްޔެ] LT',\n        lastWeek : '[ފާއިތުވި] dddd LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : 'ތެރޭގައި %s',\n        past : 'ކުރިން %s',\n        s : 'ސިކުންތުކޮޅެއް',\n        ss : 'd% ސިކުންތު',\n        m : 'މިނިޓެއް',\n        mm : 'މިނިޓު %d',\n        h : 'ގަޑިއިރެއް',\n        hh : 'ގަޑިއިރު %d',\n        d : 'ދުވަހެއް',\n        dd : 'ދުވަސް %d',\n        M : 'މަހެއް',\n        MM : 'މަސް %d',\n        y : 'އަހަރެއް',\n        yy : 'އަހަރު %d'\n    },\n    preparse: function (string) {\n        return string.replace(/،/g, ',');\n    },\n    postformat: function (string) {\n        return string.replace(/,/g, '،');\n    },\n    week : {\n        dow : 7,  // Sunday is the first day of the week.\n        doy : 12  // The week that contains Jan 1st is the first week of the year.\n    }\n});\n\nreturn dv;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/dv.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/el.js":
/*!********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/el.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Greek [el]\n//! author : Aggelos Karalias : https://github.com/mehiel\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\nfunction isFunction(input) {\n    return input instanceof Function || Object.prototype.toString.call(input) === '[object Function]';\n}\n\n\nvar el = moment.defineLocale('el', {\n    monthsNominativeEl : 'Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος'.split('_'),\n    monthsGenitiveEl : 'Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου'.split('_'),\n    months : function (momentToFormat, format) {\n        if (!momentToFormat) {\n            return this._monthsNominativeEl;\n        } else if (typeof format === 'string' && /D/.test(format.substring(0, format.indexOf('MMMM')))) { // if there is a day number before 'MMMM'\n            return this._monthsGenitiveEl[momentToFormat.month()];\n        } else {\n            return this._monthsNominativeEl[momentToFormat.month()];\n        }\n    },\n    monthsShort : 'Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ'.split('_'),\n    weekdays : 'Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο'.split('_'),\n    weekdaysShort : 'Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ'.split('_'),\n    weekdaysMin : 'Κυ_Δε_Τρ_Τε_Πε_Πα_Σα'.split('_'),\n    meridiem : function (hours, minutes, isLower) {\n        if (hours > 11) {\n            return isLower ? 'μμ' : 'ΜΜ';\n        } else {\n            return isLower ? 'πμ' : 'ΠΜ';\n        }\n    },\n    isPM : function (input) {\n        return ((input + '').toLowerCase()[0] === 'μ');\n    },\n    meridiemParse : /[ΠΜ]\\.?Μ?\\.?/i,\n    longDateFormat : {\n        LT : 'h:mm A',\n        LTS : 'h:mm:ss A',\n        L : 'DD/MM/YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY h:mm A',\n        LLLL : 'dddd, D MMMM YYYY h:mm A'\n    },\n    calendarEl : {\n        sameDay : '[Σήμερα {}] LT',\n        nextDay : '[Αύριο {}] LT',\n        nextWeek : 'dddd [{}] LT',\n        lastDay : '[Χθες {}] LT',\n        lastWeek : function () {\n            switch (this.day()) {\n                case 6:\n                    return '[το προηγούμενο] dddd [{}] LT';\n                default:\n                    return '[την προηγούμενη] dddd [{}] LT';\n            }\n        },\n        sameElse : 'L'\n    },\n    calendar : function (key, mom) {\n        var output = this._calendarEl[key],\n            hours = mom && mom.hours();\n        if (isFunction(output)) {\n            output = output.apply(mom);\n        }\n        return output.replace('{}', (hours % 12 === 1 ? 'στη' : 'στις'));\n    },\n    relativeTime : {\n        future : 'σε %s',\n        past : '%s πριν',\n        s : 'λίγα δευτερόλεπτα',\n        ss : '%d δευτερόλεπτα',\n        m : 'ένα λεπτό',\n        mm : '%d λεπτά',\n        h : 'μία ώρα',\n        hh : '%d ώρες',\n        d : 'μία μέρα',\n        dd : '%d μέρες',\n        M : 'ένας μήνας',\n        MM : '%d μήνες',\n        y : 'ένας χρόνος',\n        yy : '%d χρόνια'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}η/,\n    ordinal: '%dη',\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4st is the first week of the year.\n    }\n});\n\nreturn el;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/el.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/en-au.js":
/*!***********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/en-au.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : English (Australia) [en-au]\n//! author : Jared Morse : https://github.com/jarcoal\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar enAu = moment.defineLocale('en-au', {\n    months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n    monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n    weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n    weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n    weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n    longDateFormat : {\n        LT : 'h:mm A',\n        LTS : 'h:mm:ss A',\n        L : 'DD/MM/YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY h:mm A',\n        LLLL : 'dddd, D MMMM YYYY h:mm A'\n    },\n    calendar : {\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    relativeTime : {\n        future : 'in %s',\n        past : '%s ago',\n        s : 'a few seconds',\n        ss : '%d 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    dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n    ordinal : function (number) {\n        var b = number % 10,\n            output = (~~(number % 100 / 10) === 1) ? 'th' :\n            (b === 1) ? 'st' :\n            (b === 2) ? 'nd' :\n            (b === 3) ? 'rd' : 'th';\n        return number + output;\n    },\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn enAu;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/en-au.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/en-ca.js":
/*!***********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/en-ca.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : English (Canada) [en-ca]\n//! author : Jonathan Abourbih : https://github.com/jonbca\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar enCa = moment.defineLocale('en-ca', {\n    months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n    monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n    weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n    weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n    weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n    longDateFormat : {\n        LT : 'h:mm A',\n        LTS : 'h:mm:ss A',\n        L : 'YYYY-MM-DD',\n        LL : 'MMMM D, YYYY',\n        LLL : 'MMMM D, YYYY h:mm A',\n        LLLL : 'dddd, MMMM D, YYYY h:mm A'\n    },\n    calendar : {\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    relativeTime : {\n        future : 'in %s',\n        past : '%s ago',\n        s : 'a few seconds',\n        ss : '%d 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    dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n    ordinal : function (number) {\n        var b = number % 10,\n            output = (~~(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\nreturn enCa;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/en-ca.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/en-gb.js":
/*!***********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/en-gb.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : English (United Kingdom) [en-gb]\n//! author : Chris Gedrim : https://github.com/chrisgedrim\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar enGb = moment.defineLocale('en-gb', {\n    months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n    monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n    weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n    weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n    weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD/MM/YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY HH:mm',\n        LLLL : 'dddd, D MMMM YYYY HH:mm'\n    },\n    calendar : {\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    relativeTime : {\n        future : 'in %s',\n        past : '%s ago',\n        s : 'a few seconds',\n        ss : '%d 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    dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n    ordinal : function (number) {\n        var b = number % 10,\n            output = (~~(number % 100 / 10) === 1) ? 'th' :\n            (b === 1) ? 'st' :\n            (b === 2) ? 'nd' :\n            (b === 3) ? 'rd' : 'th';\n        return number + output;\n    },\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn enGb;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/en-gb.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/en-ie.js":
/*!***********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/en-ie.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : English (Ireland) [en-ie]\n//! author : Chris Cartlidge : https://github.com/chriscartlidge\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar enIe = moment.defineLocale('en-ie', {\n    months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n    monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n    weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n    weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n    weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD-MM-YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY HH:mm',\n        LLLL : 'dddd D MMMM YYYY HH:mm'\n    },\n    calendar : {\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    relativeTime : {\n        future : 'in %s',\n        past : '%s ago',\n        s : 'a few seconds',\n        ss : '%d 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    dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n    ordinal : function (number) {\n        var b = number % 10,\n            output = (~~(number % 100 / 10) === 1) ? 'th' :\n            (b === 1) ? 'st' :\n            (b === 2) ? 'nd' :\n            (b === 3) ? 'rd' : 'th';\n        return number + output;\n    },\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn enIe;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/en-ie.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/en-nz.js":
/*!***********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/en-nz.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : English (New Zealand) [en-nz]\n//! author : Luke McGregor : https://github.com/lukemcgregor\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar enNz = moment.defineLocale('en-nz', {\n    months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n    monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n    weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n    weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n    weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n    longDateFormat : {\n        LT : 'h:mm A',\n        LTS : 'h:mm:ss A',\n        L : 'DD/MM/YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY h:mm A',\n        LLLL : 'dddd, D MMMM YYYY h:mm A'\n    },\n    calendar : {\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    relativeTime : {\n        future : 'in %s',\n        past : '%s ago',\n        s : 'a few seconds',\n        ss : '%d 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    dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n    ordinal : function (number) {\n        var b = number % 10,\n            output = (~~(number % 100 / 10) === 1) ? 'th' :\n            (b === 1) ? 'st' :\n            (b === 2) ? 'nd' :\n            (b === 3) ? 'rd' : 'th';\n        return number + output;\n    },\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn enNz;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/en-nz.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/eo.js":
/*!********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/eo.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Esperanto [eo]\n//! author : Colin Dean : https://github.com/colindean\n//! author : Mia Nordentoft Imperatori : https://github.com/miestasmia\n//! comment : miestasmia corrected the translation by colindean\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar eo = moment.defineLocale('eo', {\n    months : 'januaro_februaro_marto_aprilo_majo_junio_julio_aŭgusto_septembro_oktobro_novembro_decembro'.split('_'),\n    monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aŭg_sep_okt_nov_dec'.split('_'),\n    weekdays : 'dimanĉo_lundo_mardo_merkredo_ĵaŭdo_vendredo_sabato'.split('_'),\n    weekdaysShort : 'dim_lun_mard_merk_ĵaŭ_ven_sab'.split('_'),\n    weekdaysMin : 'di_lu_ma_me_ĵa_ve_sa'.split('_'),\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'YYYY-MM-DD',\n        LL : 'D[-a de] MMMM, YYYY',\n        LLL : 'D[-a de] MMMM, YYYY HH:mm',\n        LLLL : 'dddd, [la] D[-a de] MMMM, YYYY HH:mm'\n    },\n    meridiemParse: /[ap]\\.t\\.m/i,\n    isPM: function (input) {\n        return input.charAt(0).toLowerCase() === 'p';\n    },\n    meridiem : function (hours, minutes, isLower) {\n        if (hours > 11) {\n            return isLower ? 'p.t.m.' : 'P.T.M.';\n        } else {\n            return isLower ? 'a.t.m.' : 'A.T.M.';\n        }\n    },\n    calendar : {\n        sameDay : '[Hodiaŭ je] LT',\n        nextDay : '[Morgaŭ je] LT',\n        nextWeek : 'dddd [je] LT',\n        lastDay : '[Hieraŭ je] LT',\n        lastWeek : '[pasinta] dddd [je] LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : 'post %s',\n        past : 'antaŭ %s',\n        s : 'sekundoj',\n        ss : '%d sekundoj',\n        m : 'minuto',\n        mm : '%d minutoj',\n        h : 'horo',\n        hh : '%d horoj',\n        d : 'tago',//ne 'diurno', ĉar estas uzita por proksimumo\n        dd : '%d tagoj',\n        M : 'monato',\n        MM : '%d monatoj',\n        y : 'jaro',\n        yy : '%d jaroj'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}a/,\n    ordinal : '%da',\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 7  // The week that contains Jan 1st is the first week of the year.\n    }\n});\n\nreturn eo;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/eo.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/es-do.js":
/*!***********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/es-do.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Spanish (Dominican Republic) [es-do]\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_');\nvar monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_');\n\nvar monthsParse = [/^ene/i, /^feb/i, /^mar/i, /^abr/i, /^may/i, /^jun/i, /^jul/i, /^ago/i, /^sep/i, /^oct/i, /^nov/i, /^dic/i];\nvar monthsRegex = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;\n\nvar esDo = moment.defineLocale('es-do', {\n    months : 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'),\n    monthsShort : function (m, format) {\n        if (!m) {\n            return monthsShortDot;\n        } else if (/-MMM-/.test(format)) {\n            return monthsShort[m.month()];\n        } else {\n            return monthsShortDot[m.month()];\n        }\n    },\n    monthsRegex: monthsRegex,\n    monthsShortRegex: monthsRegex,\n    monthsStrictRegex: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,\n    monthsShortStrictRegex: /^(ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i,\n    monthsParse: monthsParse,\n    longMonthsParse: monthsParse,\n    shortMonthsParse: monthsParse,\n    weekdays : 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),\n    weekdaysShort : 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),\n    weekdaysMin : 'do_lu_ma_mi_ju_vi_sá'.split('_'),\n    weekdaysParseExact : true,\n    longDateFormat : {\n        LT : 'h:mm A',\n        LTS : 'h:mm:ss A',\n        L : 'DD/MM/YYYY',\n        LL : 'D [de] MMMM [de] YYYY',\n        LLL : 'D [de] MMMM [de] YYYY h:mm A',\n        LLLL : 'dddd, D [de] MMMM [de] YYYY h:mm A'\n    },\n    calendar : {\n        sameDay : function () {\n            return '[hoy a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n        },\n        nextDay : function () {\n            return '[mañana a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n        },\n        nextWeek : function () {\n            return 'dddd [a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n        },\n        lastDay : function () {\n            return '[ayer a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n        },\n        lastWeek : function () {\n            return '[el] dddd [pasado a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n        },\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : 'en %s',\n        past : 'hace %s',\n        s : 'unos segundos',\n        ss : '%d segundos',\n        m : 'un minuto',\n        mm : '%d minutos',\n        h : 'una hora',\n        hh : '%d horas',\n        d : 'un día',\n        dd : '%d días',\n        M : 'un mes',\n        MM : '%d meses',\n        y : 'un año',\n        yy : '%d años'\n    },\n    dayOfMonthOrdinalParse : /\\d{1,2}º/,\n    ordinal : '%dº',\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn esDo;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/es-do.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/es-us.js":
/*!***********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/es-us.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Spanish (United States) [es-us]\n//! author : bustta : https://github.com/bustta\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_');\nvar monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_');\n\nvar esUs = moment.defineLocale('es-us', {\n    months : 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'),\n    monthsShort : function (m, format) {\n        if (!m) {\n            return monthsShortDot;\n        } else if (/-MMM-/.test(format)) {\n            return monthsShort[m.month()];\n        } else {\n            return monthsShortDot[m.month()];\n        }\n    },\n    monthsParseExact : true,\n    weekdays : 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),\n    weekdaysShort : 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),\n    weekdaysMin : 'do_lu_ma_mi_ju_vi_sá'.split('_'),\n    weekdaysParseExact : true,\n    longDateFormat : {\n        LT : 'h:mm A',\n        LTS : 'h:mm:ss A',\n        L : 'MM/DD/YYYY',\n        LL : 'MMMM [de] D [de] YYYY',\n        LLL : 'MMMM [de] D [de] YYYY h:mm A',\n        LLLL : 'dddd, MMMM [de] D [de] YYYY h:mm A'\n    },\n    calendar : {\n        sameDay : function () {\n            return '[hoy a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n        },\n        nextDay : function () {\n            return '[mañana a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n        },\n        nextWeek : function () {\n            return 'dddd [a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n        },\n        lastDay : function () {\n            return '[ayer a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n        },\n        lastWeek : function () {\n            return '[el] dddd [pasado a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n        },\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : 'en %s',\n        past : 'hace %s',\n        s : 'unos segundos',\n        ss : '%d segundos',\n        m : 'un minuto',\n        mm : '%d minutos',\n        h : 'una hora',\n        hh : '%d horas',\n        d : 'un día',\n        dd : '%d días',\n        M : 'un mes',\n        MM : '%d meses',\n        y : 'un año',\n        yy : '%d años'\n    },\n    dayOfMonthOrdinalParse : /\\d{1,2}º/,\n    ordinal : '%dº',\n    week : {\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\nreturn esUs;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/es-us.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/es.js":
/*!********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/es.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Spanish [es]\n//! author : Julio Napurí : https://github.com/julionc\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_');\nvar monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_');\n\nvar monthsParse = [/^ene/i, /^feb/i, /^mar/i, /^abr/i, /^may/i, /^jun/i, /^jul/i, /^ago/i, /^sep/i, /^oct/i, /^nov/i, /^dic/i];\nvar monthsRegex = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;\n\nvar es = moment.defineLocale('es', {\n    months : 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'),\n    monthsShort : function (m, format) {\n        if (!m) {\n            return monthsShortDot;\n        } else if (/-MMM-/.test(format)) {\n            return monthsShort[m.month()];\n        } else {\n            return monthsShortDot[m.month()];\n        }\n    },\n    monthsRegex : monthsRegex,\n    monthsShortRegex : monthsRegex,\n    monthsStrictRegex : /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,\n    monthsShortStrictRegex : /^(ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i,\n    monthsParse : monthsParse,\n    longMonthsParse : monthsParse,\n    shortMonthsParse : monthsParse,\n    weekdays : 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),\n    weekdaysShort : 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),\n    weekdaysMin : 'do_lu_ma_mi_ju_vi_sá'.split('_'),\n    weekdaysParseExact : true,\n    longDateFormat : {\n        LT : 'H:mm',\n        LTS : 'H:mm:ss',\n        L : 'DD/MM/YYYY',\n        LL : 'D [de] MMMM [de] YYYY',\n        LLL : 'D [de] MMMM [de] YYYY H:mm',\n        LLLL : 'dddd, D [de] MMMM [de] YYYY H:mm'\n    },\n    calendar : {\n        sameDay : function () {\n            return '[hoy a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n        },\n        nextDay : function () {\n            return '[mañana a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n        },\n        nextWeek : function () {\n            return 'dddd [a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n        },\n        lastDay : function () {\n            return '[ayer a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n        },\n        lastWeek : function () {\n            return '[el] dddd [pasado a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n        },\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : 'en %s',\n        past : 'hace %s',\n        s : 'unos segundos',\n        ss : '%d segundos',\n        m : 'un minuto',\n        mm : '%d minutos',\n        h : 'una hora',\n        hh : '%d horas',\n        d : 'un día',\n        dd : '%d días',\n        M : 'un mes',\n        MM : '%d meses',\n        y : 'un año',\n        yy : '%d años'\n    },\n    dayOfMonthOrdinalParse : /\\d{1,2}º/,\n    ordinal : '%dº',\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn es;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/es.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/et.js":
/*!********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/et.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Estonian [et]\n//! author : Henry Kehlmann : https://github.com/madhenry\n//! improvements : Illimar Tambek : https://github.com/ragulka\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nfunction processRelativeTime(number, withoutSuffix, key, isFuture) {\n    var format = {\n        's' : ['mõne sekundi', 'mõni sekund', 'paar sekundit'],\n        'ss': [number + 'sekundi', number + 'sekundit'],\n        'm' : ['ühe minuti', 'üks minut'],\n        'mm': [number + ' minuti', number + ' minutit'],\n        'h' : ['ühe tunni', 'tund aega', 'üks tund'],\n        'hh': [number + ' tunni', number + ' tundi'],\n        'd' : ['ühe päeva', 'üks päev'],\n        'M' : ['kuu aja', 'kuu aega', 'üks kuu'],\n        'MM': [number + ' kuu', number + ' kuud'],\n        'y' : ['ühe aasta', 'aasta', 'üks aasta'],\n        'yy': [number + ' aasta', number + ' aastat']\n    };\n    if (withoutSuffix) {\n        return format[key][2] ? format[key][2] : format[key][1];\n    }\n    return isFuture ? format[key][0] : format[key][1];\n}\n\nvar et = moment.defineLocale('et', {\n    months        : 'jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember'.split('_'),\n    monthsShort   : 'jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets'.split('_'),\n    weekdays      : 'pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev'.split('_'),\n    weekdaysShort : 'P_E_T_K_N_R_L'.split('_'),\n    weekdaysMin   : 'P_E_T_K_N_R_L'.split('_'),\n    longDateFormat : {\n        LT   : 'H:mm',\n        LTS : 'H:mm:ss',\n        L    : 'DD.MM.YYYY',\n        LL   : 'D. MMMM YYYY',\n        LLL  : 'D. MMMM YYYY H:mm',\n        LLLL : 'dddd, D. MMMM YYYY H:mm'\n    },\n    calendar : {\n        sameDay  : '[Täna,] LT',\n        nextDay  : '[Homme,] LT',\n        nextWeek : '[Järgmine] dddd LT',\n        lastDay  : '[Eile,] LT',\n        lastWeek : '[Eelmine] dddd LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : '%s pärast',\n        past   : '%s tagasi',\n        s      : processRelativeTime,\n        ss     : processRelativeTime,\n        m      : processRelativeTime,\n        mm     : processRelativeTime,\n        h      : processRelativeTime,\n        hh     : processRelativeTime,\n        d      : processRelativeTime,\n        dd     : '%d päeva',\n        M      : processRelativeTime,\n        MM     : processRelativeTime,\n        y      : processRelativeTime,\n        yy     : processRelativeTime\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal : '%d.',\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn et;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/et.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/eu.js":
/*!********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/eu.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Basque [eu]\n//! author : Eneko Illarramendi : https://github.com/eillarra\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar eu = moment.defineLocale('eu', {\n    months : 'urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua'.split('_'),\n    monthsShort : 'urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.'.split('_'),\n    monthsParseExact : true,\n    weekdays : 'igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata'.split('_'),\n    weekdaysShort : 'ig._al._ar._az._og._ol._lr.'.split('_'),\n    weekdaysMin : 'ig_al_ar_az_og_ol_lr'.split('_'),\n    weekdaysParseExact : true,\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'YYYY-MM-DD',\n        LL : 'YYYY[ko] MMMM[ren] D[a]',\n        LLL : 'YYYY[ko] MMMM[ren] D[a] HH:mm',\n        LLLL : 'dddd, YYYY[ko] MMMM[ren] D[a] HH:mm',\n        l : 'YYYY-M-D',\n        ll : 'YYYY[ko] MMM D[a]',\n        lll : 'YYYY[ko] MMM D[a] HH:mm',\n        llll : 'ddd, YYYY[ko] MMM D[a] HH:mm'\n    },\n    calendar : {\n        sameDay : '[gaur] LT[etan]',\n        nextDay : '[bihar] LT[etan]',\n        nextWeek : 'dddd LT[etan]',\n        lastDay : '[atzo] LT[etan]',\n        lastWeek : '[aurreko] dddd LT[etan]',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : '%s barru',\n        past : 'duela %s',\n        s : 'segundo batzuk',\n        ss : '%d segundo',\n        m : 'minutu bat',\n        mm : '%d minutu',\n        h : 'ordu bat',\n        hh : '%d ordu',\n        d : 'egun bat',\n        dd : '%d egun',\n        M : 'hilabete bat',\n        MM : '%d hilabete',\n        y : 'urte bat',\n        yy : '%d urte'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal : '%d.',\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 7  // The week that contains Jan 1st is the first week of the year.\n    }\n});\n\nreturn eu;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/eu.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/fa.js":
/*!********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/fa.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Persian [fa]\n//! author : Ebrahim Byagowi : https://github.com/ebraminio\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar symbolMap = {\n    '1': '۱',\n    '2': '۲',\n    '3': '۳',\n    '4': '۴',\n    '5': '۵',\n    '6': '۶',\n    '7': '۷',\n    '8': '۸',\n    '9': '۹',\n    '0': '۰'\n};\nvar numberMap = {\n    '۱': '1',\n    '۲': '2',\n    '۳': '3',\n    '۴': '4',\n    '۵': '5',\n    '۶': '6',\n    '۷': '7',\n    '۸': '8',\n    '۹': '9',\n    '۰': '0'\n};\n\nvar fa = moment.defineLocale('fa', {\n    months : 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'),\n    monthsShort : 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'),\n    weekdays : 'یک\\u200cشنبه_دوشنبه_سه\\u200cشنبه_چهارشنبه_پنج\\u200cشنبه_جمعه_شنبه'.split('_'),\n    weekdaysShort : 'یک\\u200cشنبه_دوشنبه_سه\\u200cشنبه_چهارشنبه_پنج\\u200cشنبه_جمعه_شنبه'.split('_'),\n    weekdaysMin : 'ی_د_س_چ_پ_ج_ش'.split('_'),\n    weekdaysParseExact : true,\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD/MM/YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY HH:mm',\n        LLLL : 'dddd, D MMMM YYYY HH:mm'\n    },\n    meridiemParse: /قبل از ظهر|بعد از ظهر/,\n    isPM: function (input) {\n        return /بعد از ظهر/.test(input);\n    },\n    meridiem : function (hour, minute, isLower) {\n        if (hour < 12) {\n            return 'قبل از ظهر';\n        } else {\n            return 'بعد از ظهر';\n        }\n    },\n    calendar : {\n        sameDay : '[امروز ساعت] LT',\n        nextDay : '[فردا ساعت] LT',\n        nextWeek : 'dddd [ساعت] LT',\n        lastDay : '[دیروز ساعت] LT',\n        lastWeek : 'dddd [پیش] [ساعت] LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : 'در %s',\n        past : '%s پیش',\n        s : 'چند ثانیه',\n        ss : 'ثانیه d%',\n        m : 'یک دقیقه',\n        mm : '%d دقیقه',\n        h : 'یک ساعت',\n        hh : '%d ساعت',\n        d : 'یک روز',\n        dd : '%d روز',\n        M : 'یک ماه',\n        MM : '%d ماه',\n        y : 'یک سال',\n        yy : '%d سال'\n    },\n    preparse: function (string) {\n        return string.replace(/[۰-۹]/g, function (match) {\n            return numberMap[match];\n        }).replace(/،/g, ',');\n    },\n    postformat: function (string) {\n        return string.replace(/\\d/g, function (match) {\n            return symbolMap[match];\n        }).replace(/,/g, '،');\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}م/,\n    ordinal : '%dم',\n    week : {\n        dow : 6, // Saturday is the first day of the week.\n        doy : 12 // The week that contains Jan 1st is the first week of the year.\n    }\n});\n\nreturn fa;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/fa.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/fi.js":
/*!********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/fi.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Finnish [fi]\n//! author : Tarmo Aidantausta : https://github.com/bleadof\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar numbersPast = 'nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän'.split(' ');\nvar numbersFuture = [\n        'nolla', 'yhden', 'kahden', 'kolmen', 'neljän', 'viiden', 'kuuden',\n        numbersPast[7], numbersPast[8], numbersPast[9]\n    ];\nfunction translate(number, withoutSuffix, key, isFuture) {\n    var result = '';\n    switch (key) {\n        case 's':\n            return isFuture ? 'muutaman sekunnin' : 'muutama sekunti';\n        case 'ss':\n            return isFuture ? 'sekunnin' : 'sekuntia';\n        case 'm':\n            return isFuture ? 'minuutin' : 'minuutti';\n        case 'mm':\n            result = isFuture ? 'minuutin' : 'minuuttia';\n            break;\n        case 'h':\n            return isFuture ? 'tunnin' : 'tunti';\n        case 'hh':\n            result = isFuture ? 'tunnin' : 'tuntia';\n            break;\n        case 'd':\n            return isFuture ? 'päivän' : 'päivä';\n        case 'dd':\n            result = isFuture ? 'päivän' : 'päivää';\n            break;\n        case 'M':\n            return isFuture ? 'kuukauden' : 'kuukausi';\n        case 'MM':\n            result = isFuture ? 'kuukauden' : 'kuukautta';\n            break;\n        case 'y':\n            return isFuture ? 'vuoden' : 'vuosi';\n        case 'yy':\n            result = isFuture ? 'vuoden' : 'vuotta';\n            break;\n    }\n    result = verbalNumber(number, isFuture) + ' ' + result;\n    return result;\n}\nfunction verbalNumber(number, isFuture) {\n    return number < 10 ? (isFuture ? numbersFuture[number] : numbersPast[number]) : number;\n}\n\nvar fi = moment.defineLocale('fi', {\n    months : 'tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu'.split('_'),\n    monthsShort : 'tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu'.split('_'),\n    weekdays : 'sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai'.split('_'),\n    weekdaysShort : 'su_ma_ti_ke_to_pe_la'.split('_'),\n    weekdaysMin : 'su_ma_ti_ke_to_pe_la'.split('_'),\n    longDateFormat : {\n        LT : 'HH.mm',\n        LTS : 'HH.mm.ss',\n        L : 'DD.MM.YYYY',\n        LL : 'Do MMMM[ta] YYYY',\n        LLL : 'Do MMMM[ta] YYYY, [klo] HH.mm',\n        LLLL : 'dddd, Do MMMM[ta] YYYY, [klo] HH.mm',\n        l : 'D.M.YYYY',\n        ll : 'Do MMM YYYY',\n        lll : 'Do MMM YYYY, [klo] HH.mm',\n        llll : 'ddd, Do MMM YYYY, [klo] HH.mm'\n    },\n    calendar : {\n        sameDay : '[tänään] [klo] LT',\n        nextDay : '[huomenna] [klo] LT',\n        nextWeek : 'dddd [klo] LT',\n        lastDay : '[eilen] [klo] LT',\n        lastWeek : '[viime] dddd[na] [klo] LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : '%s päästä',\n        past : '%s sitten',\n        s : translate,\n        ss : translate,\n        m : translate,\n        mm : translate,\n        h : translate,\n        hh : translate,\n        d : translate,\n        dd : translate,\n        M : translate,\n        MM : translate,\n        y : translate,\n        yy : translate\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal : '%d.',\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn fi;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/fi.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/fo.js":
/*!********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/fo.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Faroese [fo]\n//! author : Ragnar Johannesen : https://github.com/ragnar123\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar fo = moment.defineLocale('fo', {\n    months : 'januar_februar_mars_apríl_mai_juni_juli_august_september_oktober_november_desember'.split('_'),\n    monthsShort : 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'),\n    weekdays : 'sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur'.split('_'),\n    weekdaysShort : 'sun_mán_týs_mik_hós_frí_ley'.split('_'),\n    weekdaysMin : 'su_má_tý_mi_hó_fr_le'.split('_'),\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD/MM/YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY HH:mm',\n        LLLL : 'dddd D. MMMM, YYYY HH:mm'\n    },\n    calendar : {\n        sameDay : '[Í dag kl.] LT',\n        nextDay : '[Í morgin kl.] LT',\n        nextWeek : 'dddd [kl.] LT',\n        lastDay : '[Í gjár kl.] LT',\n        lastWeek : '[síðstu] dddd [kl] LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : 'um %s',\n        past : '%s síðani',\n        s : 'fá sekund',\n        ss : '%d sekundir',\n        m : 'ein minutt',\n        mm : '%d minuttir',\n        h : 'ein tími',\n        hh : '%d tímar',\n        d : 'ein dagur',\n        dd : '%d dagar',\n        M : 'ein mánaði',\n        MM : '%d mánaðir',\n        y : 'eitt ár',\n        yy : '%d ár'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal : '%d.',\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn fo;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/fo.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/fr-ca.js":
/*!***********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/fr-ca.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : French (Canada) [fr-ca]\n//! author : Jonathan Abourbih : https://github.com/jonbca\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar frCa = moment.defineLocale('fr-ca', {\n    months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'),\n    monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'),\n    monthsParseExact : true,\n    weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),\n    weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),\n    weekdaysMin : 'di_lu_ma_me_je_ve_sa'.split('_'),\n    weekdaysParseExact : true,\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'YYYY-MM-DD',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY HH:mm',\n        LLLL : 'dddd D MMMM YYYY HH:mm'\n    },\n    calendar : {\n        sameDay : '[Aujourd’hui à] LT',\n        nextDay : '[Demain à] LT',\n        nextWeek : 'dddd [à] LT',\n        lastDay : '[Hier à] LT',\n        lastWeek : 'dddd [dernier à] LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : 'dans %s',\n        past : 'il y a %s',\n        s : 'quelques secondes',\n        ss : '%d secondes',\n        m : 'une minute',\n        mm : '%d minutes',\n        h : 'une heure',\n        hh : '%d heures',\n        d : 'un jour',\n        dd : '%d jours',\n        M : 'un mois',\n        MM : '%d mois',\n        y : 'un an',\n        yy : '%d ans'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(er|e)/,\n    ordinal : function (number, period) {\n        switch (period) {\n            // Words with masculine grammatical gender: mois, trimestre, jour\n            default:\n            case 'M':\n            case 'Q':\n            case 'D':\n            case 'DDD':\n            case 'd':\n                return number + (number === 1 ? 'er' : 'e');\n\n            // Words with feminine grammatical gender: semaine\n            case 'w':\n            case 'W':\n                return number + (number === 1 ? 're' : 'e');\n        }\n    }\n});\n\nreturn frCa;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/fr-ca.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/fr-ch.js":
/*!***********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/fr-ch.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : French (Switzerland) [fr-ch]\n//! author : Gaspard Bucher : https://github.com/gaspard\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar frCh = moment.defineLocale('fr-ch', {\n    months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'),\n    monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'),\n    monthsParseExact : true,\n    weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),\n    weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),\n    weekdaysMin : 'di_lu_ma_me_je_ve_sa'.split('_'),\n    weekdaysParseExact : true,\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD.MM.YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY HH:mm',\n        LLLL : 'dddd D MMMM YYYY HH:mm'\n    },\n    calendar : {\n        sameDay : '[Aujourd’hui à] LT',\n        nextDay : '[Demain à] LT',\n        nextWeek : 'dddd [à] LT',\n        lastDay : '[Hier à] LT',\n        lastWeek : 'dddd [dernier à] LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : 'dans %s',\n        past : 'il y a %s',\n        s : 'quelques secondes',\n        ss : '%d secondes',\n        m : 'une minute',\n        mm : '%d minutes',\n        h : 'une heure',\n        hh : '%d heures',\n        d : 'un jour',\n        dd : '%d jours',\n        M : 'un mois',\n        MM : '%d mois',\n        y : 'un an',\n        yy : '%d ans'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(er|e)/,\n    ordinal : function (number, period) {\n        switch (period) {\n            // Words with masculine grammatical gender: mois, trimestre, jour\n            default:\n            case 'M':\n            case 'Q':\n            case 'D':\n            case 'DDD':\n            case 'd':\n                return number + (number === 1 ? 'er' : 'e');\n\n            // Words with feminine grammatical gender: semaine\n            case 'w':\n            case 'W':\n                return number + (number === 1 ? 're' : 'e');\n        }\n    },\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn frCh;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/fr-ch.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/fr.js":
/*!********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/fr.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : French [fr]\n//! author : John Fischer : https://github.com/jfroffice\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar fr = moment.defineLocale('fr', {\n    months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'),\n    monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'),\n    monthsParseExact : true,\n    weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),\n    weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),\n    weekdaysMin : 'di_lu_ma_me_je_ve_sa'.split('_'),\n    weekdaysParseExact : true,\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD/MM/YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY HH:mm',\n        LLLL : 'dddd D MMMM YYYY HH:mm'\n    },\n    calendar : {\n        sameDay : '[Aujourd’hui à] LT',\n        nextDay : '[Demain à] LT',\n        nextWeek : 'dddd [à] LT',\n        lastDay : '[Hier à] LT',\n        lastWeek : 'dddd [dernier à] LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : 'dans %s',\n        past : 'il y a %s',\n        s : 'quelques secondes',\n        ss : '%d secondes',\n        m : 'une minute',\n        mm : '%d minutes',\n        h : 'une heure',\n        hh : '%d heures',\n        d : 'un jour',\n        dd : '%d jours',\n        M : 'un mois',\n        MM : '%d mois',\n        y : 'un an',\n        yy : '%d ans'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(er|)/,\n    ordinal : function (number, period) {\n        switch (period) {\n            // TODO: Return 'e' when day of month > 1. Move this case inside\n            // block for masculine words below.\n            // See https://github.com/moment/moment/issues/3375\n            case 'D':\n                return number + (number === 1 ? 'er' : '');\n\n            // Words with masculine grammatical gender: mois, trimestre, jour\n            default:\n            case 'M':\n            case 'Q':\n            case 'DDD':\n            case 'd':\n                return number + (number === 1 ? 'er' : 'e');\n\n            // Words with feminine grammatical gender: semaine\n            case 'w':\n            case 'W':\n                return number + (number === 1 ? 're' : 'e');\n        }\n    },\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn fr;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/fr.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/fy.js":
/*!********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/fy.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Frisian [fy]\n//! author : Robin van der Vliet : https://github.com/robin0van0der0v\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar monthsShortWithDots = 'jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.'.split('_');\nvar monthsShortWithoutDots = 'jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_');\n\nvar fy = moment.defineLocale('fy', {\n    months : 'jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber'.split('_'),\n    monthsShort : function (m, format) {\n        if (!m) {\n            return monthsShortWithDots;\n        } else if (/-MMM-/.test(format)) {\n            return monthsShortWithoutDots[m.month()];\n        } else {\n            return monthsShortWithDots[m.month()];\n        }\n    },\n    monthsParseExact : true,\n    weekdays : 'snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon'.split('_'),\n    weekdaysShort : 'si._mo._ti._wo._to._fr._so.'.split('_'),\n    weekdaysMin : 'Si_Mo_Ti_Wo_To_Fr_So'.split('_'),\n    weekdaysParseExact : true,\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD-MM-YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY HH:mm',\n        LLLL : 'dddd D MMMM YYYY HH:mm'\n    },\n    calendar : {\n        sameDay: '[hjoed om] LT',\n        nextDay: '[moarn om] LT',\n        nextWeek: 'dddd [om] LT',\n        lastDay: '[juster om] LT',\n        lastWeek: '[ôfrûne] dddd [om] LT',\n        sameElse: 'L'\n    },\n    relativeTime : {\n        future : 'oer %s',\n        past : '%s lyn',\n        s : 'in pear sekonden',\n        ss : '%d sekonden',\n        m : 'ien minút',\n        mm : '%d minuten',\n        h : 'ien oere',\n        hh : '%d oeren',\n        d : 'ien dei',\n        dd : '%d dagen',\n        M : 'ien moanne',\n        MM : '%d moannen',\n        y : 'ien jier',\n        yy : '%d jierren'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n    ordinal : function (number) {\n        return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de');\n    },\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn fy;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/fy.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/gd.js":
/*!********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/gd.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Scottish Gaelic [gd]\n//! author : Jon Ashdown : https://github.com/jonashdown\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar months = [\n    'Am Faoilleach', 'An Gearran', 'Am Màrt', 'An Giblean', 'An Cèitean', 'An t-Ògmhios', 'An t-Iuchar', 'An Lùnastal', 'An t-Sultain', 'An Dàmhair', 'An t-Samhain', 'An Dùbhlachd'\n];\n\nvar monthsShort = ['Faoi', 'Gear', 'Màrt', 'Gibl', 'Cèit', 'Ògmh', 'Iuch', 'Lùn', 'Sult', 'Dàmh', 'Samh', 'Dùbh'];\n\nvar weekdays = ['Didòmhnaich', 'Diluain', 'Dimàirt', 'Diciadain', 'Diardaoin', 'Dihaoine', 'Disathairne'];\n\nvar weekdaysShort = ['Did', 'Dil', 'Dim', 'Dic', 'Dia', 'Dih', 'Dis'];\n\nvar weekdaysMin = ['Dò', 'Lu', 'Mà', 'Ci', 'Ar', 'Ha', 'Sa'];\n\nvar gd = moment.defineLocale('gd', {\n    months : months,\n    monthsShort : monthsShort,\n    monthsParseExact : true,\n    weekdays : weekdays,\n    weekdaysShort : weekdaysShort,\n    weekdaysMin : weekdaysMin,\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD/MM/YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY HH:mm',\n        LLLL : 'dddd, D MMMM YYYY HH:mm'\n    },\n    calendar : {\n        sameDay : '[An-diugh aig] LT',\n        nextDay : '[A-màireach aig] LT',\n        nextWeek : 'dddd [aig] LT',\n        lastDay : '[An-dè aig] LT',\n        lastWeek : 'dddd [seo chaidh] [aig] LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : 'ann an %s',\n        past : 'bho chionn %s',\n        s : 'beagan diogan',\n        ss : '%d diogan',\n        m : 'mionaid',\n        mm : '%d mionaidean',\n        h : 'uair',\n        hh : '%d uairean',\n        d : 'latha',\n        dd : '%d latha',\n        M : 'mìos',\n        MM : '%d mìosan',\n        y : 'bliadhna',\n        yy : '%d bliadhna'\n    },\n    dayOfMonthOrdinalParse : /\\d{1,2}(d|na|mh)/,\n    ordinal : function (number) {\n        var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh';\n        return number + output;\n    },\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn gd;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/gd.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/gl.js":
/*!********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/gl.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Galician [gl]\n//! author : Juan G. Hurtado : https://github.com/juanghurtado\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar gl = moment.defineLocale('gl', {\n    months : 'xaneiro_febreiro_marzo_abril_maio_xuño_xullo_agosto_setembro_outubro_novembro_decembro'.split('_'),\n    monthsShort : 'xan._feb._mar._abr._mai._xuñ._xul._ago._set._out._nov._dec.'.split('_'),\n    monthsParseExact: true,\n    weekdays : 'domingo_luns_martes_mércores_xoves_venres_sábado'.split('_'),\n    weekdaysShort : 'dom._lun._mar._mér._xov._ven._sáb.'.split('_'),\n    weekdaysMin : 'do_lu_ma_mé_xo_ve_sá'.split('_'),\n    weekdaysParseExact : true,\n    longDateFormat : {\n        LT : 'H:mm',\n        LTS : 'H:mm:ss',\n        L : 'DD/MM/YYYY',\n        LL : 'D [de] MMMM [de] YYYY',\n        LLL : 'D [de] MMMM [de] YYYY H:mm',\n        LLLL : 'dddd, D [de] MMMM [de] YYYY H:mm'\n    },\n    calendar : {\n        sameDay : function () {\n            return '[hoxe ' + ((this.hours() !== 1) ? 'ás' : 'á') + '] LT';\n        },\n        nextDay : function () {\n            return '[mañá ' + ((this.hours() !== 1) ? 'ás' : 'á') + '] LT';\n        },\n        nextWeek : function () {\n            return 'dddd [' + ((this.hours() !== 1) ? 'ás' : 'a') + '] LT';\n        },\n        lastDay : function () {\n            return '[onte ' + ((this.hours() !== 1) ? 'á' : 'a') + '] LT';\n        },\n        lastWeek : function () {\n            return '[o] dddd [pasado ' + ((this.hours() !== 1) ? 'ás' : 'a') + '] LT';\n        },\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : function (str) {\n            if (str.indexOf('un') === 0) {\n                return 'n' + str;\n            }\n            return 'en ' + str;\n        },\n        past : 'hai %s',\n        s : 'uns segundos',\n        ss : '%d segundos',\n        m : 'un minuto',\n        mm : '%d minutos',\n        h : 'unha hora',\n        hh : '%d horas',\n        d : 'un día',\n        dd : '%d días',\n        M : 'un mes',\n        MM : '%d meses',\n        y : 'un ano',\n        yy : '%d anos'\n    },\n    dayOfMonthOrdinalParse : /\\d{1,2}º/,\n    ordinal : '%dº',\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn gl;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/gl.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/gom-latn.js":
/*!**************************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/gom-latn.js ***!
  \**************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Konkani Latin script [gom-latn]\n//! author : The Discoverer : https://github.com/WikiDiscoverer\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nfunction processRelativeTime(number, withoutSuffix, key, isFuture) {\n    var format = {\n        's': ['thodde secondanim', 'thodde second'],\n        'ss': [number + ' secondanim', number + ' second'],\n        'm': ['eka mintan', 'ek minute'],\n        'mm': [number + ' mintanim', number + ' mintam'],\n        'h': ['eka horan', 'ek hor'],\n        'hh': [number + ' horanim', number + ' hor'],\n        'd': ['eka disan', 'ek dis'],\n        'dd': [number + ' disanim', number + ' dis'],\n        'M': ['eka mhoinean', 'ek mhoino'],\n        'MM': [number + ' mhoineanim', number + ' mhoine'],\n        'y': ['eka vorsan', 'ek voros'],\n        'yy': [number + ' vorsanim', number + ' vorsam']\n    };\n    return withoutSuffix ? format[key][0] : format[key][1];\n}\n\nvar gomLatn = moment.defineLocale('gom-latn', {\n    months : 'Janer_Febrer_Mars_Abril_Mai_Jun_Julai_Agost_Setembr_Otubr_Novembr_Dezembr'.split('_'),\n    monthsShort : 'Jan._Feb._Mars_Abr._Mai_Jun_Jul._Ago._Set._Otu._Nov._Dez.'.split('_'),\n    monthsParseExact : true,\n    weekdays : 'Aitar_Somar_Mongllar_Budvar_Brestar_Sukrar_Son\\'var'.split('_'),\n    weekdaysShort : 'Ait._Som._Mon._Bud._Bre._Suk._Son.'.split('_'),\n    weekdaysMin : 'Ai_Sm_Mo_Bu_Br_Su_Sn'.split('_'),\n    weekdaysParseExact : true,\n    longDateFormat : {\n        LT : 'A h:mm [vazta]',\n        LTS : 'A h:mm:ss [vazta]',\n        L : 'DD-MM-YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY A h:mm [vazta]',\n        LLLL : 'dddd, MMMM[achea] Do, YYYY, A h:mm [vazta]',\n        llll: 'ddd, D MMM YYYY, A h:mm [vazta]'\n    },\n    calendar : {\n        sameDay: '[Aiz] LT',\n        nextDay: '[Faleam] LT',\n        nextWeek: '[Ieta to] dddd[,] LT',\n        lastDay: '[Kal] LT',\n        lastWeek: '[Fatlo] dddd[,] LT',\n        sameElse: 'L'\n    },\n    relativeTime : {\n        future : '%s',\n        past : '%s adim',\n        s : processRelativeTime,\n        ss : processRelativeTime,\n        m : processRelativeTime,\n        mm : processRelativeTime,\n        h : processRelativeTime,\n        hh : processRelativeTime,\n        d : processRelativeTime,\n        dd : processRelativeTime,\n        M : processRelativeTime,\n        MM : processRelativeTime,\n        y : processRelativeTime,\n        yy : processRelativeTime\n    },\n    dayOfMonthOrdinalParse : /\\d{1,2}(er)/,\n    ordinal : function (number, period) {\n        switch (period) {\n            // the ordinal 'er' only applies to day of the month\n            case 'D':\n                return number + 'er';\n            default:\n            case 'M':\n            case 'Q':\n            case 'DDD':\n            case 'd':\n            case 'w':\n            case 'W':\n                return number;\n        }\n    },\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    },\n    meridiemParse: /rati|sokalli|donparam|sanje/,\n    meridiemHour : function (hour, meridiem) {\n        if (hour === 12) {\n            hour = 0;\n        }\n        if (meridiem === 'rati') {\n            return hour < 4 ? hour : hour + 12;\n        } else if (meridiem === 'sokalli') {\n            return hour;\n        } else if (meridiem === 'donparam') {\n            return hour > 12 ? hour : hour + 12;\n        } else if (meridiem === 'sanje') {\n            return hour + 12;\n        }\n    },\n    meridiem : function (hour, minute, isLower) {\n        if (hour < 4) {\n            return 'rati';\n        } else if (hour < 12) {\n            return 'sokalli';\n        } else if (hour < 16) {\n            return 'donparam';\n        } else if (hour < 20) {\n            return 'sanje';\n        } else {\n            return 'rati';\n        }\n    }\n});\n\nreturn gomLatn;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/gom-latn.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/gu.js":
/*!********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/gu.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Gujarati [gu]\n//! author : Kaushik Thanki : https://github.com/Kaushik1987\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar symbolMap = {\n        '1': '૧',\n        '2': '૨',\n        '3': '૩',\n        '4': '૪',\n        '5': '૫',\n        '6': '૬',\n        '7': '૭',\n        '8': '૮',\n        '9': '૯',\n        '0': '૦'\n    };\nvar numberMap = {\n        '૧': '1',\n        '૨': '2',\n        '૩': '3',\n        '૪': '4',\n        '૫': '5',\n        '૬': '6',\n        '૭': '7',\n        '૮': '8',\n        '૯': '9',\n        '૦': '0'\n    };\n\nvar gu = moment.defineLocale('gu', {\n    months: 'જાન્યુઆરી_ફેબ્રુઆરી_માર્ચ_એપ્રિલ_મે_જૂન_જુલાઈ_ઑગસ્ટ_સપ્ટેમ્બર_ઑક્ટ્બર_નવેમ્બર_ડિસેમ્બર'.split('_'),\n    monthsShort: 'જાન્યુ._ફેબ્રુ._માર્ચ_એપ્રિ._મે_જૂન_જુલા._ઑગ._સપ્ટે._ઑક્ટ્._નવે._ડિસે.'.split('_'),\n    monthsParseExact: true,\n    weekdays: 'રવિવાર_સોમવાર_મંગળવાર_બુધ્વાર_ગુરુવાર_શુક્રવાર_શનિવાર'.split('_'),\n    weekdaysShort: 'રવિ_સોમ_મંગળ_બુધ્_ગુરુ_શુક્ર_શનિ'.split('_'),\n    weekdaysMin: 'ર_સો_મં_બુ_ગુ_શુ_શ'.split('_'),\n    longDateFormat: {\n        LT: 'A h:mm વાગ્યે',\n        LTS: 'A h:mm:ss વાગ્યે',\n        L: 'DD/MM/YYYY',\n        LL: 'D MMMM YYYY',\n        LLL: 'D MMMM YYYY, A h:mm વાગ્યે',\n        LLLL: 'dddd, D MMMM YYYY, A h:mm વાગ્યે'\n    },\n    calendar: {\n        sameDay: '[આજ] LT',\n        nextDay: '[કાલે] LT',\n        nextWeek: 'dddd, LT',\n        lastDay: '[ગઇકાલે] LT',\n        lastWeek: '[પાછલા] dddd, LT',\n        sameElse: 'L'\n    },\n    relativeTime: {\n        future: '%s મા',\n        past: '%s પેહલા',\n        s: 'અમુક પળો',\n        ss: '%d સેકંડ',\n        m: 'એક મિનિટ',\n        mm: '%d મિનિટ',\n        h: 'એક કલાક',\n        hh: '%d કલાક',\n        d: 'એક દિવસ',\n        dd: '%d દિવસ',\n        M: 'એક મહિનો',\n        MM: '%d મહિનો',\n        y: 'એક વર્ષ',\n        yy: '%d વર્ષ'\n    },\n    preparse: function (string) {\n        return string.replace(/[૧૨૩૪૫૬૭૮૯૦]/g, function (match) {\n            return numberMap[match];\n        });\n    },\n    postformat: function (string) {\n        return string.replace(/\\d/g, function (match) {\n            return symbolMap[match];\n        });\n    },\n    // Gujarati notation for meridiems are quite fuzzy in practice. While there exists\n    // a rigid notion of a 'Pahar' it is not used as rigidly in modern Gujarati.\n    meridiemParse: /રાત|બપોર|સવાર|સાંજ/,\n    meridiemHour: function (hour, meridiem) {\n        if (hour === 12) {\n            hour = 0;\n        }\n        if (meridiem === 'રાત') {\n            return hour < 4 ? hour : hour + 12;\n        } else if (meridiem === 'સવાર') {\n            return hour;\n        } else if (meridiem === 'બપોર') {\n            return hour >= 10 ? hour : hour + 12;\n        } else if (meridiem === 'સાંજ') {\n            return hour + 12;\n        }\n    },\n    meridiem: function (hour, minute, isLower) {\n        if (hour < 4) {\n            return 'રાત';\n        } else if (hour < 10) {\n            return 'સવાર';\n        } else if (hour < 17) {\n            return 'બપોર';\n        } else if (hour < 20) {\n            return 'સાંજ';\n        } else {\n            return 'રાત';\n        }\n    },\n    week: {\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\nreturn gu;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/gu.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/he.js":
/*!********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/he.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Hebrew [he]\n//! author : Tomer Cohen : https://github.com/tomer\n//! author : Moshe Simantov : https://github.com/DevelopmentIL\n//! author : Tal Ater : https://github.com/TalAter\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar he = moment.defineLocale('he', {\n    months : 'ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר'.split('_'),\n    monthsShort : 'ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳'.split('_'),\n    weekdays : 'ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת'.split('_'),\n    weekdaysShort : 'א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳'.split('_'),\n    weekdaysMin : 'א_ב_ג_ד_ה_ו_ש'.split('_'),\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD/MM/YYYY',\n        LL : 'D [ב]MMMM YYYY',\n        LLL : 'D [ב]MMMM YYYY HH:mm',\n        LLLL : 'dddd, D [ב]MMMM YYYY HH:mm',\n        l : 'D/M/YYYY',\n        ll : 'D MMM YYYY',\n        lll : 'D MMM YYYY HH:mm',\n        llll : 'ddd, D MMM YYYY HH:mm'\n    },\n    calendar : {\n        sameDay : '[היום ב־]LT',\n        nextDay : '[מחר ב־]LT',\n        nextWeek : 'dddd [בשעה] LT',\n        lastDay : '[אתמול ב־]LT',\n        lastWeek : '[ביום] dddd [האחרון בשעה] LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : 'בעוד %s',\n        past : 'לפני %s',\n        s : 'מספר שניות',\n        ss : '%d שניות',\n        m : 'דקה',\n        mm : '%d דקות',\n        h : 'שעה',\n        hh : function (number) {\n            if (number === 2) {\n                return 'שעתיים';\n            }\n            return number + ' שעות';\n        },\n        d : 'יום',\n        dd : function (number) {\n            if (number === 2) {\n                return 'יומיים';\n            }\n            return number + ' ימים';\n        },\n        M : 'חודש',\n        MM : function (number) {\n            if (number === 2) {\n                return 'חודשיים';\n            }\n            return number + ' חודשים';\n        },\n        y : 'שנה',\n        yy : function (number) {\n            if (number === 2) {\n                return 'שנתיים';\n            } else if (number % 10 === 0 && number !== 10) {\n                return number + ' שנה';\n            }\n            return number + ' שנים';\n        }\n    },\n    meridiemParse: /אחה\"צ|לפנה\"צ|אחרי הצהריים|לפני הצהריים|לפנות בוקר|בבוקר|בערב/i,\n    isPM : function (input) {\n        return /^(אחה\"צ|אחרי הצהריים|בערב)$/.test(input);\n    },\n    meridiem : function (hour, minute, isLower) {\n        if (hour < 5) {\n            return 'לפנות בוקר';\n        } else if (hour < 10) {\n            return 'בבוקר';\n        } else if (hour < 12) {\n            return isLower ? 'לפנה\"צ' : 'לפני הצהריים';\n        } else if (hour < 18) {\n            return isLower ? 'אחה\"צ' : 'אחרי הצהריים';\n        } else {\n            return 'בערב';\n        }\n    }\n});\n\nreturn he;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/he.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/hi.js":
/*!********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/hi.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Hindi [hi]\n//! author : Mayank Singhal : https://github.com/mayanksinghal\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar symbolMap = {\n    '1': '१',\n    '2': '२',\n    '3': '३',\n    '4': '४',\n    '5': '५',\n    '6': '६',\n    '7': '७',\n    '8': '८',\n    '9': '९',\n    '0': '०'\n};\nvar numberMap = {\n    '१': '1',\n    '२': '2',\n    '३': '3',\n    '४': '4',\n    '५': '5',\n    '६': '6',\n    '७': '7',\n    '८': '8',\n    '९': '9',\n    '०': '0'\n};\n\nvar hi = moment.defineLocale('hi', {\n    months : 'जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर'.split('_'),\n    monthsShort : 'जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.'.split('_'),\n    monthsParseExact: true,\n    weekdays : 'रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'),\n    weekdaysShort : 'रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि'.split('_'),\n    weekdaysMin : 'र_सो_मं_बु_गु_शु_श'.split('_'),\n    longDateFormat : {\n        LT : 'A h:mm बजे',\n        LTS : 'A h:mm:ss बजे',\n        L : 'DD/MM/YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY, A h:mm बजे',\n        LLLL : 'dddd, D MMMM YYYY, A h:mm बजे'\n    },\n    calendar : {\n        sameDay : '[आज] LT',\n        nextDay : '[कल] LT',\n        nextWeek : 'dddd, LT',\n        lastDay : '[कल] LT',\n        lastWeek : '[पिछले] dddd, LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : '%s में',\n        past : '%s पहले',\n        s : 'कुछ ही क्षण',\n        ss : '%d सेकंड',\n        m : 'एक मिनट',\n        mm : '%d मिनट',\n        h : 'एक घंटा',\n        hh : '%d घंटे',\n        d : 'एक दिन',\n        dd : '%d दिन',\n        M : 'एक महीने',\n        MM : '%d महीने',\n        y : 'एक वर्ष',\n        yy : '%d वर्ष'\n    },\n    preparse: function (string) {\n        return string.replace(/[१२३४५६७८९०]/g, function (match) {\n            return numberMap[match];\n        });\n    },\n    postformat: function (string) {\n        return string.replace(/\\d/g, function (match) {\n            return symbolMap[match];\n        });\n    },\n    // Hindi notation for meridiems are quite fuzzy in practice. While there exists\n    // a rigid notion of a 'Pahar' it is not used as rigidly in modern Hindi.\n    meridiemParse: /रात|सुबह|दोपहर|शाम/,\n    meridiemHour : function (hour, meridiem) {\n        if (hour === 12) {\n            hour = 0;\n        }\n        if (meridiem === 'रात') {\n            return hour < 4 ? hour : hour + 12;\n        } else if (meridiem === 'सुबह') {\n            return hour;\n        } else if (meridiem === 'दोपहर') {\n            return hour >= 10 ? hour : hour + 12;\n        } else if (meridiem === 'शाम') {\n            return hour + 12;\n        }\n    },\n    meridiem : function (hour, minute, isLower) {\n        if (hour < 4) {\n            return 'रात';\n        } else if (hour < 10) {\n            return 'सुबह';\n        } else if (hour < 17) {\n            return 'दोपहर';\n        } else if (hour < 20) {\n            return 'शाम';\n        } else {\n            return 'रात';\n        }\n    },\n    week : {\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\nreturn hi;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/hi.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/hr.js":
/*!********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/hr.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Croatian [hr]\n//! author : Bojan Marković : https://github.com/bmarkovic\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nfunction translate(number, withoutSuffix, key) {\n    var result = number + ' ';\n    switch (key) {\n        case 'ss':\n            if (number === 1) {\n                result += 'sekunda';\n            } else if (number === 2 || number === 3 || number === 4) {\n                result += 'sekunde';\n            } else {\n                result += 'sekundi';\n            }\n            return result;\n        case 'm':\n            return withoutSuffix ? 'jedna minuta' : 'jedne minute';\n        case 'mm':\n            if (number === 1) {\n                result += 'minuta';\n            } else if (number === 2 || number === 3 || number === 4) {\n                result += 'minute';\n            } else {\n                result += 'minuta';\n            }\n            return result;\n        case 'h':\n            return withoutSuffix ? 'jedan sat' : 'jednog sata';\n        case 'hh':\n            if (number === 1) {\n                result += 'sat';\n            } else if (number === 2 || number === 3 || number === 4) {\n                result += 'sata';\n            } else {\n                result += 'sati';\n            }\n            return result;\n        case 'dd':\n            if (number === 1) {\n                result += 'dan';\n            } else {\n                result += 'dana';\n            }\n            return result;\n        case 'MM':\n            if (number === 1) {\n                result += 'mjesec';\n            } else if (number === 2 || number === 3 || number === 4) {\n                result += 'mjeseca';\n            } else {\n                result += 'mjeseci';\n            }\n            return result;\n        case 'yy':\n            if (number === 1) {\n                result += 'godina';\n            } else if (number === 2 || number === 3 || number === 4) {\n                result += 'godine';\n            } else {\n                result += 'godina';\n            }\n            return result;\n    }\n}\n\nvar hr = moment.defineLocale('hr', {\n    months : {\n        format: 'siječnja_veljače_ožujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca'.split('_'),\n        standalone: 'siječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac'.split('_')\n    },\n    monthsShort : 'sij._velj._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.'.split('_'),\n    monthsParseExact: true,\n    weekdays : 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'),\n    weekdaysShort : 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),\n    weekdaysMin : 'ne_po_ut_sr_če_pe_su'.split('_'),\n    weekdaysParseExact : true,\n    longDateFormat : {\n        LT : 'H:mm',\n        LTS : 'H:mm:ss',\n        L : 'DD.MM.YYYY',\n        LL : 'D. MMMM YYYY',\n        LLL : 'D. MMMM YYYY H:mm',\n        LLLL : 'dddd, D. MMMM YYYY H:mm'\n    },\n    calendar : {\n        sameDay  : '[danas u] LT',\n        nextDay  : '[sutra u] LT',\n        nextWeek : function () {\n            switch (this.day()) {\n                case 0:\n                    return '[u] [nedjelju] [u] LT';\n                case 3:\n                    return '[u] [srijedu] [u] LT';\n                case 6:\n                    return '[u] [subotu] [u] LT';\n                case 1:\n                case 2:\n                case 4:\n                case 5:\n                    return '[u] dddd [u] LT';\n            }\n        },\n        lastDay  : '[jučer u] LT',\n        lastWeek : function () {\n            switch (this.day()) {\n                case 0:\n                case 3:\n                    return '[prošlu] dddd [u] LT';\n                case 6:\n                    return '[prošle] [subote] [u] LT';\n                case 1:\n                case 2:\n                case 4:\n                case 5:\n                    return '[prošli] dddd [u] LT';\n            }\n        },\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : 'za %s',\n        past   : 'prije %s',\n        s      : 'par sekundi',\n        ss     : translate,\n        m      : translate,\n        mm     : translate,\n        h      : translate,\n        hh     : translate,\n        d      : 'dan',\n        dd     : translate,\n        M      : 'mjesec',\n        MM     : translate,\n        y      : 'godinu',\n        yy     : translate\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal : '%d.',\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 7  // The week that contains Jan 1st is the first week of the year.\n    }\n});\n\nreturn hr;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/hr.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/hu.js":
/*!********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/hu.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Hungarian [hu]\n//! author : Adam Brunner : https://github.com/adambrunner\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar weekEndings = 'vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton'.split(' ');\nfunction translate(number, withoutSuffix, key, isFuture) {\n    var num = number;\n    switch (key) {\n        case 's':\n            return (isFuture || withoutSuffix) ? 'néhány másodperc' : 'néhány másodperce';\n        case 'ss':\n            return num + (isFuture || withoutSuffix) ? ' másodperc' : ' másodperce';\n        case 'm':\n            return 'egy' + (isFuture || withoutSuffix ? ' perc' : ' perce');\n        case 'mm':\n            return num + (isFuture || withoutSuffix ? ' perc' : ' perce');\n        case 'h':\n            return 'egy' + (isFuture || withoutSuffix ? ' óra' : ' órája');\n        case 'hh':\n            return num + (isFuture || withoutSuffix ? ' óra' : ' órája');\n        case 'd':\n            return 'egy' + (isFuture || withoutSuffix ? ' nap' : ' napja');\n        case 'dd':\n            return num + (isFuture || withoutSuffix ? ' nap' : ' napja');\n        case 'M':\n            return 'egy' + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');\n        case 'MM':\n            return num + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');\n        case 'y':\n            return 'egy' + (isFuture || withoutSuffix ? ' év' : ' éve');\n        case 'yy':\n            return num + (isFuture || withoutSuffix ? ' év' : ' éve');\n    }\n    return '';\n}\nfunction week(isFuture) {\n    return (isFuture ? '' : '[múlt] ') + '[' + weekEndings[this.day()] + '] LT[-kor]';\n}\n\nvar hu = moment.defineLocale('hu', {\n    months : 'január_február_március_április_május_június_július_augusztus_szeptember_október_november_december'.split('_'),\n    monthsShort : 'jan_feb_márc_ápr_máj_jún_júl_aug_szept_okt_nov_dec'.split('_'),\n    weekdays : 'vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat'.split('_'),\n    weekdaysShort : 'vas_hét_kedd_sze_csüt_pén_szo'.split('_'),\n    weekdaysMin : 'v_h_k_sze_cs_p_szo'.split('_'),\n    longDateFormat : {\n        LT : 'H:mm',\n        LTS : 'H:mm:ss',\n        L : 'YYYY.MM.DD.',\n        LL : 'YYYY. MMMM D.',\n        LLL : 'YYYY. MMMM D. H:mm',\n        LLLL : 'YYYY. MMMM D., dddd H:mm'\n    },\n    meridiemParse: /de|du/i,\n    isPM: function (input) {\n        return input.charAt(1).toLowerCase() === 'u';\n    },\n    meridiem : function (hours, minutes, isLower) {\n        if (hours < 12) {\n            return isLower === true ? 'de' : 'DE';\n        } else {\n            return isLower === true ? 'du' : 'DU';\n        }\n    },\n    calendar : {\n        sameDay : '[ma] LT[-kor]',\n        nextDay : '[holnap] LT[-kor]',\n        nextWeek : function () {\n            return week.call(this, true);\n        },\n        lastDay : '[tegnap] LT[-kor]',\n        lastWeek : function () {\n            return week.call(this, false);\n        },\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : '%s múlva',\n        past : '%s',\n        s : translate,\n        ss : translate,\n        m : translate,\n        mm : translate,\n        h : translate,\n        hh : translate,\n        d : translate,\n        dd : translate,\n        M : translate,\n        MM : translate,\n        y : translate,\n        yy : translate\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal : '%d.',\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn hu;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/hu.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/hy-am.js":
/*!***********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/hy-am.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Armenian [hy-am]\n//! author : Armendarabyan : https://github.com/armendarabyan\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar hyAm = moment.defineLocale('hy-am', {\n    months : {\n        format: 'հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի'.split('_'),\n        standalone: 'հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր'.split('_')\n    },\n    monthsShort : 'հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ'.split('_'),\n    weekdays : 'կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_հինգշաբթի_ուրբաթ_շաբաթ'.split('_'),\n    weekdaysShort : 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'),\n    weekdaysMin : 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'),\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD.MM.YYYY',\n        LL : 'D MMMM YYYY թ.',\n        LLL : 'D MMMM YYYY թ., HH:mm',\n        LLLL : 'dddd, D MMMM YYYY թ., HH:mm'\n    },\n    calendar : {\n        sameDay: '[այսօր] LT',\n        nextDay: '[վաղը] LT',\n        lastDay: '[երեկ] LT',\n        nextWeek: function () {\n            return 'dddd [օրը ժամը] LT';\n        },\n        lastWeek: function () {\n            return '[անցած] dddd [օրը ժամը] LT';\n        },\n        sameElse: 'L'\n    },\n    relativeTime : {\n        future : '%s հետո',\n        past : '%s առաջ',\n        s : 'մի քանի վայրկյան',\n        ss : '%d վայրկյան',\n        m : 'րոպե',\n        mm : '%d րոպե',\n        h : 'ժամ',\n        hh : '%d ժամ',\n        d : 'օր',\n        dd : '%d օր',\n        M : 'ամիս',\n        MM : '%d ամիս',\n        y : 'տարի',\n        yy : '%d տարի'\n    },\n    meridiemParse: /գիշերվա|առավոտվա|ցերեկվա|երեկոյան/,\n    isPM: function (input) {\n        return /^(ցերեկվա|երեկոյան)$/.test(input);\n    },\n    meridiem : function (hour) {\n        if (hour < 4) {\n            return 'գիշերվա';\n        } else if (hour < 12) {\n            return 'առավոտվա';\n        } else if (hour < 17) {\n            return 'ցերեկվա';\n        } else {\n            return 'երեկոյան';\n        }\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}|\\d{1,2}-(ին|րդ)/,\n    ordinal: function (number, period) {\n        switch (period) {\n            case 'DDD':\n            case 'w':\n            case 'W':\n            case 'DDDo':\n                if (number === 1) {\n                    return number + '-ին';\n                }\n                return number + '-րդ';\n            default:\n                return number;\n        }\n    },\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 7  // The week that contains Jan 1st is the first week of the year.\n    }\n});\n\nreturn hyAm;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/hy-am.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/id.js":
/*!********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/id.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Indonesian [id]\n//! author : Mohammad Satrio Utomo : https://github.com/tyok\n//! reference: http://id.wikisource.org/wiki/Pedoman_Umum_Ejaan_Bahasa_Indonesia_yang_Disempurnakan\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar id = moment.defineLocale('id', {\n    months : 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember'.split('_'),\n    monthsShort : 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nov_Des'.split('_'),\n    weekdays : 'Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu'.split('_'),\n    weekdaysShort : 'Min_Sen_Sel_Rab_Kam_Jum_Sab'.split('_'),\n    weekdaysMin : 'Mg_Sn_Sl_Rb_Km_Jm_Sb'.split('_'),\n    longDateFormat : {\n        LT : 'HH.mm',\n        LTS : 'HH.mm.ss',\n        L : 'DD/MM/YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY [pukul] HH.mm',\n        LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'\n    },\n    meridiemParse: /pagi|siang|sore|malam/,\n    meridiemHour : function (hour, meridiem) {\n        if (hour === 12) {\n            hour = 0;\n        }\n        if (meridiem === 'pagi') {\n            return hour;\n        } else if (meridiem === 'siang') {\n            return hour >= 11 ? hour : hour + 12;\n        } else if (meridiem === 'sore' || meridiem === 'malam') {\n            return hour + 12;\n        }\n    },\n    meridiem : function (hours, minutes, isLower) {\n        if (hours < 11) {\n            return 'pagi';\n        } else if (hours < 15) {\n            return 'siang';\n        } else if (hours < 19) {\n            return 'sore';\n        } else {\n            return 'malam';\n        }\n    },\n    calendar : {\n        sameDay : '[Hari ini pukul] LT',\n        nextDay : '[Besok pukul] LT',\n        nextWeek : 'dddd [pukul] LT',\n        lastDay : '[Kemarin pukul] LT',\n        lastWeek : 'dddd [lalu pukul] LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : 'dalam %s',\n        past : '%s yang lalu',\n        s : 'beberapa detik',\n        ss : '%d detik',\n        m : 'semenit',\n        mm : '%d menit',\n        h : 'sejam',\n        hh : '%d jam',\n        d : 'sehari',\n        dd : '%d hari',\n        M : 'sebulan',\n        MM : '%d bulan',\n        y : 'setahun',\n        yy : '%d tahun'\n    },\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 7  // The week that contains Jan 1st is the first week of the year.\n    }\n});\n\nreturn id;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/id.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/is.js":
/*!********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/is.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Icelandic [is]\n//! author : Hinrik Örn Sigurðsson : https://github.com/hinrik\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nfunction plural(n) {\n    if (n % 100 === 11) {\n        return true;\n    } else if (n % 10 === 1) {\n        return false;\n    }\n    return true;\n}\nfunction translate(number, withoutSuffix, key, isFuture) {\n    var result = number + ' ';\n    switch (key) {\n        case 's':\n            return withoutSuffix || isFuture ? 'nokkrar sekúndur' : 'nokkrum sekúndum';\n        case 'ss':\n            if (plural(number)) {\n                return result + (withoutSuffix || isFuture ? 'sekúndur' : 'sekúndum');\n            }\n            return result + 'sekúnda';\n        case 'm':\n            return withoutSuffix ? 'mínúta' : 'mínútu';\n        case 'mm':\n            if (plural(number)) {\n                return result + (withoutSuffix || isFuture ? 'mínútur' : 'mínútum');\n            } else if (withoutSuffix) {\n                return result + 'mínúta';\n            }\n            return result + 'mínútu';\n        case 'hh':\n            if (plural(number)) {\n                return result + (withoutSuffix || isFuture ? 'klukkustundir' : 'klukkustundum');\n            }\n            return result + 'klukkustund';\n        case 'd':\n            if (withoutSuffix) {\n                return 'dagur';\n            }\n            return isFuture ? 'dag' : 'degi';\n        case 'dd':\n            if (plural(number)) {\n                if (withoutSuffix) {\n                    return result + 'dagar';\n                }\n                return result + (isFuture ? 'daga' : 'dögum');\n            } else if (withoutSuffix) {\n                return result + 'dagur';\n            }\n            return result + (isFuture ? 'dag' : 'degi');\n        case 'M':\n            if (withoutSuffix) {\n                return 'mánuður';\n            }\n            return isFuture ? 'mánuð' : 'mánuði';\n        case 'MM':\n            if (plural(number)) {\n                if (withoutSuffix) {\n                    return result + 'mánuðir';\n                }\n                return result + (isFuture ? 'mánuði' : 'mánuðum');\n            } else if (withoutSuffix) {\n                return result + 'mánuður';\n            }\n            return result + (isFuture ? 'mánuð' : 'mánuði');\n        case 'y':\n            return withoutSuffix || isFuture ? 'ár' : 'ári';\n        case 'yy':\n            if (plural(number)) {\n                return result + (withoutSuffix || isFuture ? 'ár' : 'árum');\n            }\n            return result + (withoutSuffix || isFuture ? 'ár' : 'ári');\n    }\n}\n\nvar is = moment.defineLocale('is', {\n    months : 'janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember'.split('_'),\n    monthsShort : 'jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des'.split('_'),\n    weekdays : 'sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur'.split('_'),\n    weekdaysShort : 'sun_mán_þri_mið_fim_fös_lau'.split('_'),\n    weekdaysMin : 'Su_Má_Þr_Mi_Fi_Fö_La'.split('_'),\n    longDateFormat : {\n        LT : 'H:mm',\n        LTS : 'H:mm:ss',\n        L : 'DD.MM.YYYY',\n        LL : 'D. MMMM YYYY',\n        LLL : 'D. MMMM YYYY [kl.] H:mm',\n        LLLL : 'dddd, D. MMMM YYYY [kl.] H:mm'\n    },\n    calendar : {\n        sameDay : '[í dag kl.] LT',\n        nextDay : '[á morgun kl.] LT',\n        nextWeek : 'dddd [kl.] LT',\n        lastDay : '[í gær kl.] LT',\n        lastWeek : '[síðasta] dddd [kl.] LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : 'eftir %s',\n        past : 'fyrir %s síðan',\n        s : translate,\n        ss : translate,\n        m : translate,\n        mm : translate,\n        h : 'klukkustund',\n        hh : translate,\n        d : translate,\n        dd : translate,\n        M : translate,\n        MM : translate,\n        y : translate,\n        yy : translate\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal : '%d.',\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn is;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/is.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/it.js":
/*!********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/it.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Italian [it]\n//! author : Lorenzo : https://github.com/aliem\n//! author: Mattia Larentis: https://github.com/nostalgiaz\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar it = moment.defineLocale('it', {\n    months : 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split('_'),\n    monthsShort : 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'),\n    weekdays : 'domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato'.split('_'),\n    weekdaysShort : 'dom_lun_mar_mer_gio_ven_sab'.split('_'),\n    weekdaysMin : 'do_lu_ma_me_gi_ve_sa'.split('_'),\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD/MM/YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY HH:mm',\n        LLLL : 'dddd D MMMM YYYY HH:mm'\n    },\n    calendar : {\n        sameDay: '[Oggi alle] LT',\n        nextDay: '[Domani alle] LT',\n        nextWeek: 'dddd [alle] LT',\n        lastDay: '[Ieri alle] LT',\n        lastWeek: function () {\n            switch (this.day()) {\n                case 0:\n                    return '[la scorsa] dddd [alle] LT';\n                default:\n                    return '[lo scorso] dddd [alle] LT';\n            }\n        },\n        sameElse: 'L'\n    },\n    relativeTime : {\n        future : function (s) {\n            return ((/^[0-9].+$/).test(s) ? 'tra' : 'in') + ' ' + s;\n        },\n        past : '%s fa',\n        s : 'alcuni secondi',\n        ss : '%d secondi',\n        m : 'un minuto',\n        mm : '%d minuti',\n        h : 'un\\'ora',\n        hh : '%d ore',\n        d : 'un giorno',\n        dd : '%d giorni',\n        M : 'un mese',\n        MM : '%d mesi',\n        y : 'un anno',\n        yy : '%d anni'\n    },\n    dayOfMonthOrdinalParse : /\\d{1,2}º/,\n    ordinal: '%dº',\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn it;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/it.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/ja.js":
/*!********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/ja.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Japanese [ja]\n//! author : LI Long : https://github.com/baryon\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar ja = moment.defineLocale('ja', {\n    months : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n    monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n    weekdays : '日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日'.split('_'),\n    weekdaysShort : '日_月_火_水_木_金_土'.split('_'),\n    weekdaysMin : '日_月_火_水_木_金_土'.split('_'),\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'YYYY/MM/DD',\n        LL : 'YYYY年M月D日',\n        LLL : 'YYYY年M月D日 HH:mm',\n        LLLL : 'YYYY年M月D日 HH:mm dddd',\n        l : 'YYYY/MM/DD',\n        ll : 'YYYY年M月D日',\n        lll : 'YYYY年M月D日 HH:mm',\n        llll : 'YYYY年M月D日 HH:mm dddd'\n    },\n    meridiemParse: /午前|午後/i,\n    isPM : function (input) {\n        return input === '午後';\n    },\n    meridiem : function (hour, minute, isLower) {\n        if (hour < 12) {\n            return '午前';\n        } else {\n            return '午後';\n        }\n    },\n    calendar : {\n        sameDay : '[今日] LT',\n        nextDay : '[明日] LT',\n        nextWeek : '[来週]dddd LT',\n        lastDay : '[昨日] LT',\n        lastWeek : '[前週]dddd LT',\n        sameElse : 'L'\n    },\n    dayOfMonthOrdinalParse : /\\d{1,2}日/,\n    ordinal : function (number, period) {\n        switch (period) {\n            case 'd':\n            case 'D':\n            case 'DDD':\n                return number + '日';\n            default:\n                return number;\n        }\n    },\n    relativeTime : {\n        future : '%s後',\n        past : '%s前',\n        s : '数秒',\n        ss : '%d秒',\n        m : '1分',\n        mm : '%d分',\n        h : '1時間',\n        hh : '%d時間',\n        d : '1日',\n        dd : '%d日',\n        M : '1ヶ月',\n        MM : '%dヶ月',\n        y : '1年',\n        yy : '%d年'\n    }\n});\n\nreturn ja;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/ja.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/jv.js":
/*!********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/jv.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Javanese [jv]\n//! author : Rony Lantip : https://github.com/lantip\n//! reference: http://jv.wikipedia.org/wiki/Basa_Jawa\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar jv = moment.defineLocale('jv', {\n    months : 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember'.split('_'),\n    monthsShort : 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des'.split('_'),\n    weekdays : 'Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu'.split('_'),\n    weekdaysShort : 'Min_Sen_Sel_Reb_Kem_Jem_Sep'.split('_'),\n    weekdaysMin : 'Mg_Sn_Sl_Rb_Km_Jm_Sp'.split('_'),\n    longDateFormat : {\n        LT : 'HH.mm',\n        LTS : 'HH.mm.ss',\n        L : 'DD/MM/YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY [pukul] HH.mm',\n        LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'\n    },\n    meridiemParse: /enjing|siyang|sonten|ndalu/,\n    meridiemHour : function (hour, meridiem) {\n        if (hour === 12) {\n            hour = 0;\n        }\n        if (meridiem === 'enjing') {\n            return hour;\n        } else if (meridiem === 'siyang') {\n            return hour >= 11 ? hour : hour + 12;\n        } else if (meridiem === 'sonten' || meridiem === 'ndalu') {\n            return hour + 12;\n        }\n    },\n    meridiem : function (hours, minutes, isLower) {\n        if (hours < 11) {\n            return 'enjing';\n        } else if (hours < 15) {\n            return 'siyang';\n        } else if (hours < 19) {\n            return 'sonten';\n        } else {\n            return 'ndalu';\n        }\n    },\n    calendar : {\n        sameDay : '[Dinten puniko pukul] LT',\n        nextDay : '[Mbenjang pukul] LT',\n        nextWeek : 'dddd [pukul] LT',\n        lastDay : '[Kala wingi pukul] LT',\n        lastWeek : 'dddd [kepengker pukul] LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : 'wonten ing %s',\n        past : '%s ingkang kepengker',\n        s : 'sawetawis detik',\n        ss : '%d detik',\n        m : 'setunggal menit',\n        mm : '%d menit',\n        h : 'setunggal jam',\n        hh : '%d jam',\n        d : 'sedinten',\n        dd : '%d dinten',\n        M : 'sewulan',\n        MM : '%d wulan',\n        y : 'setaun',\n        yy : '%d taun'\n    },\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 7  // The week that contains Jan 1st is the first week of the year.\n    }\n});\n\nreturn jv;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/jv.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/ka.js":
/*!********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/ka.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Georgian [ka]\n//! author : Irakli Janiashvili : https://github.com/irakli-janiashvili\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar ka = moment.defineLocale('ka', {\n    months : {\n        standalone: 'იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი'.split('_'),\n        format: 'იანვარს_თებერვალს_მარტს_აპრილის_მაისს_ივნისს_ივლისს_აგვისტს_სექტემბერს_ოქტომბერს_ნოემბერს_დეკემბერს'.split('_')\n    },\n    monthsShort : 'იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ'.split('_'),\n    weekdays : {\n        standalone: 'კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი'.split('_'),\n        format: 'კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს'.split('_'),\n        isFormat: /(წინა|შემდეგ)/\n    },\n    weekdaysShort : 'კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ'.split('_'),\n    weekdaysMin : 'კვ_ორ_სა_ოთ_ხუ_პა_შა'.split('_'),\n    longDateFormat : {\n        LT : 'h:mm A',\n        LTS : 'h:mm:ss A',\n        L : 'DD/MM/YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY h:mm A',\n        LLLL : 'dddd, D MMMM YYYY h:mm A'\n    },\n    calendar : {\n        sameDay : '[დღეს] LT[-ზე]',\n        nextDay : '[ხვალ] LT[-ზე]',\n        lastDay : '[გუშინ] LT[-ზე]',\n        nextWeek : '[შემდეგ] dddd LT[-ზე]',\n        lastWeek : '[წინა] dddd LT-ზე',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : function (s) {\n            return (/(წამი|წუთი|საათი|წელი)/).test(s) ?\n                s.replace(/ი$/, 'ში') :\n                s + 'ში';\n        },\n        past : function (s) {\n            if ((/(წამი|წუთი|საათი|დღე|თვე)/).test(s)) {\n                return s.replace(/(ი|ე)$/, 'ის უკან');\n            }\n            if ((/წელი/).test(s)) {\n                return s.replace(/წელი$/, 'წლის უკან');\n            }\n        },\n        s : 'რამდენიმე წამი',\n        ss : '%d წამი',\n        m : 'წუთი',\n        mm : '%d წუთი',\n        h : 'საათი',\n        hh : '%d საათი',\n        d : 'დღე',\n        dd : '%d დღე',\n        M : 'თვე',\n        MM : '%d თვე',\n        y : 'წელი',\n        yy : '%d წელი'\n    },\n    dayOfMonthOrdinalParse: /0|1-ლი|მე-\\d{1,2}|\\d{1,2}-ე/,\n    ordinal : function (number) {\n        if (number === 0) {\n            return number;\n        }\n        if (number === 1) {\n            return number + '-ლი';\n        }\n        if ((number < 20) || (number <= 100 && (number % 20 === 0)) || (number % 100 === 0)) {\n            return 'მე-' + number;\n        }\n        return number + '-ე';\n    },\n    week : {\n        dow : 1,\n        doy : 7\n    }\n});\n\nreturn ka;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/ka.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/kk.js":
/*!********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/kk.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Kazakh [kk]\n//! authors : Nurlan Rakhimzhanov : https://github.com/nurlan\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar suffixes = {\n    0: '-ші',\n    1: '-ші',\n    2: '-ші',\n    3: '-ші',\n    4: '-ші',\n    5: '-ші',\n    6: '-шы',\n    7: '-ші',\n    8: '-ші',\n    9: '-шы',\n    10: '-шы',\n    20: '-шы',\n    30: '-шы',\n    40: '-шы',\n    50: '-ші',\n    60: '-шы',\n    70: '-ші',\n    80: '-ші',\n    90: '-шы',\n    100: '-ші'\n};\n\nvar kk = moment.defineLocale('kk', {\n    months : 'қаңтар_ақпан_наурыз_сәуір_мамыр_маусым_шілде_тамыз_қыркүйек_қазан_қараша_желтоқсан'.split('_'),\n    monthsShort : 'қаң_ақп_нау_сәу_мам_мау_шіл_там_қыр_қаз_қар_жел'.split('_'),\n    weekdays : 'жексенбі_дүйсенбі_сейсенбі_сәрсенбі_бейсенбі_жұма_сенбі'.split('_'),\n    weekdaysShort : 'жек_дүй_сей_сәр_бей_жұм_сен'.split('_'),\n    weekdaysMin : 'жк_дй_сй_ср_бй_жм_сн'.split('_'),\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD.MM.YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY HH:mm',\n        LLLL : 'dddd, D MMMM YYYY HH:mm'\n    },\n    calendar : {\n        sameDay : '[Бүгін сағат] LT',\n        nextDay : '[Ертең сағат] LT',\n        nextWeek : 'dddd [сағат] LT',\n        lastDay : '[Кеше сағат] LT',\n        lastWeek : '[Өткен аптаның] dddd [сағат] LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : '%s ішінде',\n        past : '%s бұрын',\n        s : 'бірнеше секунд',\n        ss : '%d секунд',\n        m : 'бір минут',\n        mm : '%d минут',\n        h : 'бір сағат',\n        hh : '%d сағат',\n        d : 'бір күн',\n        dd : '%d күн',\n        M : 'бір ай',\n        MM : '%d ай',\n        y : 'бір жыл',\n        yy : '%d жыл'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}-(ші|шы)/,\n    ordinal : function (number) {\n        var a = number % 10,\n            b = number >= 100 ? 100 : null;\n        return number + (suffixes[number] || suffixes[a] || suffixes[b]);\n    },\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 7  // The week that contains Jan 1st is the first week of the year.\n    }\n});\n\nreturn kk;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/kk.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/km.js":
/*!********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/km.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Cambodian [km]\n//! author : Kruy Vanna : https://github.com/kruyvanna\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar km = moment.defineLocale('km', {\n    months: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split('_'),\n    monthsShort: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split('_'),\n    weekdays: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'),\n    weekdaysShort: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'),\n    weekdaysMin: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'),\n    longDateFormat: {\n        LT: 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L: 'DD/MM/YYYY',\n        LL: 'D MMMM YYYY',\n        LLL: 'D MMMM YYYY HH:mm',\n        LLLL: 'dddd, D MMMM YYYY HH:mm'\n    },\n    calendar: {\n        sameDay: '[ថ្ងៃនេះ ម៉ោង] LT',\n        nextDay: '[ស្អែក ម៉ោង] LT',\n        nextWeek: 'dddd [ម៉ោង] LT',\n        lastDay: '[ម្សិលមិញ ម៉ោង] LT',\n        lastWeek: 'dddd [សប្តាហ៍មុន] [ម៉ោង] LT',\n        sameElse: 'L'\n    },\n    relativeTime: {\n        future: '%sទៀត',\n        past: '%sមុន',\n        s: 'ប៉ុន្មានវិនាទី',\n        ss: '%d វិនាទី',\n        m: 'មួយនាទី',\n        mm: '%d នាទី',\n        h: 'មួយម៉ោង',\n        hh: '%d ម៉ោង',\n        d: 'មួយថ្ងៃ',\n        dd: '%d ថ្ងៃ',\n        M: 'មួយខែ',\n        MM: '%d ខែ',\n        y: 'មួយឆ្នាំ',\n        yy: '%d ឆ្នាំ'\n    },\n    week: {\n        dow: 1, // Monday is the first day of the week.\n        doy: 4 // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn km;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/km.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/kn.js":
/*!********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/kn.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Kannada [kn]\n//! author : Rajeev Naik : https://github.com/rajeevnaikte\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar symbolMap = {\n    '1': '೧',\n    '2': '೨',\n    '3': '೩',\n    '4': '೪',\n    '5': '೫',\n    '6': '೬',\n    '7': '೭',\n    '8': '೮',\n    '9': '೯',\n    '0': '೦'\n};\nvar numberMap = {\n    '೧': '1',\n    '೨': '2',\n    '೩': '3',\n    '೪': '4',\n    '೫': '5',\n    '೬': '6',\n    '೭': '7',\n    '೮': '8',\n    '೯': '9',\n    '೦': '0'\n};\n\nvar kn = moment.defineLocale('kn', {\n    months : 'ಜನವರಿ_ಫೆಬ್ರವರಿ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂಬರ್_ಅಕ್ಟೋಬರ್_ನವೆಂಬರ್_ಡಿಸೆಂಬರ್'.split('_'),\n    monthsShort : 'ಜನ_ಫೆಬ್ರ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂಬ_ಅಕ್ಟೋಬ_ನವೆಂಬ_ಡಿಸೆಂಬ'.split('_'),\n    monthsParseExact: true,\n    weekdays : 'ಭಾನುವಾರ_ಸೋಮವಾರ_ಮಂಗಳವಾರ_ಬುಧವಾರ_ಗುರುವಾರ_ಶುಕ್ರವಾರ_ಶನಿವಾರ'.split('_'),\n    weekdaysShort : 'ಭಾನು_ಸೋಮ_ಮಂಗಳ_ಬುಧ_ಗುರು_ಶುಕ್ರ_ಶನಿ'.split('_'),\n    weekdaysMin : 'ಭಾ_ಸೋ_ಮಂ_ಬು_ಗು_ಶು_ಶ'.split('_'),\n    longDateFormat : {\n        LT : 'A h:mm',\n        LTS : 'A h:mm:ss',\n        L : 'DD/MM/YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY, A h:mm',\n        LLLL : 'dddd, D MMMM YYYY, A h:mm'\n    },\n    calendar : {\n        sameDay : '[ಇಂದು] LT',\n        nextDay : '[ನಾಳೆ] LT',\n        nextWeek : 'dddd, LT',\n        lastDay : '[ನಿನ್ನೆ] LT',\n        lastWeek : '[ಕೊನೆಯ] dddd, LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : '%s ನಂತರ',\n        past : '%s ಹಿಂದೆ',\n        s : 'ಕೆಲವು ಕ್ಷಣಗಳು',\n        ss : '%d ಸೆಕೆಂಡುಗಳು',\n        m : 'ಒಂದು ನಿಮಿಷ',\n        mm : '%d ನಿಮಿಷ',\n        h : 'ಒಂದು ಗಂಟೆ',\n        hh : '%d ಗಂಟೆ',\n        d : 'ಒಂದು ದಿನ',\n        dd : '%d ದಿನ',\n        M : 'ಒಂದು ತಿಂಗಳು',\n        MM : '%d ತಿಂಗಳು',\n        y : 'ಒಂದು ವರ್ಷ',\n        yy : '%d ವರ್ಷ'\n    },\n    preparse: function (string) {\n        return string.replace(/[೧೨೩೪೫೬೭೮೯೦]/g, function (match) {\n            return numberMap[match];\n        });\n    },\n    postformat: function (string) {\n        return string.replace(/\\d/g, function (match) {\n            return symbolMap[match];\n        });\n    },\n    meridiemParse: /ರಾತ್ರಿ|ಬೆಳಿಗ್ಗೆ|ಮಧ್ಯಾಹ್ನ|ಸಂಜೆ/,\n    meridiemHour : function (hour, meridiem) {\n        if (hour === 12) {\n            hour = 0;\n        }\n        if (meridiem === 'ರಾತ್ರಿ') {\n            return hour < 4 ? hour : hour + 12;\n        } else if (meridiem === 'ಬೆಳಿಗ್ಗೆ') {\n            return hour;\n        } else if (meridiem === 'ಮಧ್ಯಾಹ್ನ') {\n            return hour >= 10 ? hour : hour + 12;\n        } else if (meridiem === 'ಸಂಜೆ') {\n            return hour + 12;\n        }\n    },\n    meridiem : function (hour, minute, isLower) {\n        if (hour < 4) {\n            return 'ರಾತ್ರಿ';\n        } else if (hour < 10) {\n            return 'ಬೆಳಿಗ್ಗೆ';\n        } else if (hour < 17) {\n            return 'ಮಧ್ಯಾಹ್ನ';\n        } else if (hour < 20) {\n            return 'ಸಂಜೆ';\n        } else {\n            return 'ರಾತ್ರಿ';\n        }\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(ನೇ)/,\n    ordinal : function (number) {\n        return number + 'ನೇ';\n    },\n    week : {\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\nreturn kn;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/kn.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/ko.js":
/*!********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/ko.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Korean [ko]\n//! author : Kyungwook, Park : https://github.com/kyungw00k\n//! author : Jeeeyul Lee <jeeeyul@gmail.com>\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar ko = moment.defineLocale('ko', {\n    months : '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'),\n    monthsShort : '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'),\n    weekdays : '일요일_월요일_화요일_수요일_목요일_금요일_토요일'.split('_'),\n    weekdaysShort : '일_월_화_수_목_금_토'.split('_'),\n    weekdaysMin : '일_월_화_수_목_금_토'.split('_'),\n    longDateFormat : {\n        LT : 'A h:mm',\n        LTS : 'A h:mm:ss',\n        L : 'YYYY.MM.DD',\n        LL : 'YYYY년 MMMM D일',\n        LLL : 'YYYY년 MMMM D일 A h:mm',\n        LLLL : 'YYYY년 MMMM D일 dddd A h:mm',\n        l : 'YYYY.MM.DD',\n        ll : 'YYYY년 MMMM D일',\n        lll : 'YYYY년 MMMM D일 A h:mm',\n        llll : 'YYYY년 MMMM D일 dddd A h:mm'\n    },\n    calendar : {\n        sameDay : '오늘 LT',\n        nextDay : '내일 LT',\n        nextWeek : 'dddd LT',\n        lastDay : '어제 LT',\n        lastWeek : '지난주 dddd LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : '%s 후',\n        past : '%s 전',\n        s : '몇 초',\n        ss : '%d초',\n        m : '1분',\n        mm : '%d분',\n        h : '한 시간',\n        hh : '%d시간',\n        d : '하루',\n        dd : '%d일',\n        M : '한 달',\n        MM : '%d달',\n        y : '일 년',\n        yy : '%d년'\n    },\n    dayOfMonthOrdinalParse : /\\d{1,2}(일|월|주)/,\n    ordinal : function (number, period) {\n        switch (period) {\n            case 'd':\n            case 'D':\n            case 'DDD':\n                return number + '일';\n            case 'M':\n                return number + '월';\n            case 'w':\n            case 'W':\n                return number + '주';\n            default:\n                return number;\n        }\n    },\n    meridiemParse : /오전|오후/,\n    isPM : function (token) {\n        return token === '오후';\n    },\n    meridiem : function (hour, minute, isUpper) {\n        return hour < 12 ? '오전' : '오후';\n    }\n});\n\nreturn ko;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/ko.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/ky.js":
/*!********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/ky.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Kyrgyz [ky]\n//! author : Chyngyz Arystan uulu : https://github.com/chyngyz\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n\nvar suffixes = {\n    0: '-чү',\n    1: '-чи',\n    2: '-чи',\n    3: '-чү',\n    4: '-чү',\n    5: '-чи',\n    6: '-чы',\n    7: '-чи',\n    8: '-чи',\n    9: '-чу',\n    10: '-чу',\n    20: '-чы',\n    30: '-чу',\n    40: '-чы',\n    50: '-чү',\n    60: '-чы',\n    70: '-чи',\n    80: '-чи',\n    90: '-чу',\n    100: '-чү'\n};\n\nvar ky = moment.defineLocale('ky', {\n    months : 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split('_'),\n    monthsShort : 'янв_фев_март_апр_май_июнь_июль_авг_сен_окт_ноя_дек'.split('_'),\n    weekdays : 'Жекшемби_Дүйшөмбү_Шейшемби_Шаршемби_Бейшемби_Жума_Ишемби'.split('_'),\n    weekdaysShort : 'Жек_Дүй_Шей_Шар_Бей_Жум_Ише'.split('_'),\n    weekdaysMin : 'Жк_Дй_Шй_Шр_Бй_Жм_Иш'.split('_'),\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD.MM.YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY HH:mm',\n        LLLL : 'dddd, D MMMM YYYY HH:mm'\n    },\n    calendar : {\n        sameDay : '[Бүгүн саат] LT',\n        nextDay : '[Эртең саат] LT',\n        nextWeek : 'dddd [саат] LT',\n        lastDay : '[Кече саат] LT',\n        lastWeek : '[Өткен аптанын] dddd [күнү] [саат] LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : '%s ичинде',\n        past : '%s мурун',\n        s : 'бирнече секунд',\n        ss : '%d секунд',\n        m : 'бир мүнөт',\n        mm : '%d мүнөт',\n        h : 'бир саат',\n        hh : '%d саат',\n        d : 'бир күн',\n        dd : '%d күн',\n        M : 'бир ай',\n        MM : '%d ай',\n        y : 'бир жыл',\n        yy : '%d жыл'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}-(чи|чы|чү|чу)/,\n    ordinal : function (number) {\n        var a = number % 10,\n            b = number >= 100 ? 100 : null;\n        return number + (suffixes[number] || suffixes[a] || suffixes[b]);\n    },\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 7  // The week that contains Jan 1st is the first week of the year.\n    }\n});\n\nreturn ky;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/ky.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/lb.js":
/*!********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/lb.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Luxembourgish [lb]\n//! author : mweimerskirch : https://github.com/mweimerskirch\n//! author : David Raison : https://github.com/kwisatz\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nfunction processRelativeTime(number, withoutSuffix, key, isFuture) {\n    var format = {\n        'm': ['eng Minutt', 'enger Minutt'],\n        'h': ['eng Stonn', 'enger Stonn'],\n        'd': ['een Dag', 'engem Dag'],\n        'M': ['ee Mount', 'engem Mount'],\n        'y': ['ee Joer', 'engem Joer']\n    };\n    return withoutSuffix ? format[key][0] : format[key][1];\n}\nfunction processFutureTime(string) {\n    var number = string.substr(0, string.indexOf(' '));\n    if (eifelerRegelAppliesToNumber(number)) {\n        return 'a ' + string;\n    }\n    return 'an ' + string;\n}\nfunction processPastTime(string) {\n    var number = string.substr(0, string.indexOf(' '));\n    if (eifelerRegelAppliesToNumber(number)) {\n        return 'viru ' + string;\n    }\n    return 'virun ' + string;\n}\n/**\n * Returns true if the word before the given number loses the '-n' ending.\n * e.g. 'an 10 Deeg' but 'a 5 Deeg'\n *\n * @param number {integer}\n * @returns {boolean}\n */\nfunction eifelerRegelAppliesToNumber(number) {\n    number = parseInt(number, 10);\n    if (isNaN(number)) {\n        return false;\n    }\n    if (number < 0) {\n        // Negative Number --> always true\n        return true;\n    } else if (number < 10) {\n        // Only 1 digit\n        if (4 <= number && number <= 7) {\n            return true;\n        }\n        return false;\n    } else if (number < 100) {\n        // 2 digits\n        var lastDigit = number % 10, firstDigit = number / 10;\n        if (lastDigit === 0) {\n            return eifelerRegelAppliesToNumber(firstDigit);\n        }\n        return eifelerRegelAppliesToNumber(lastDigit);\n    } else if (number < 10000) {\n        // 3 or 4 digits --> recursively check first digit\n        while (number >= 10) {\n            number = number / 10;\n        }\n        return eifelerRegelAppliesToNumber(number);\n    } else {\n        // Anything larger than 4 digits: recursively check first n-3 digits\n        number = number / 1000;\n        return eifelerRegelAppliesToNumber(number);\n    }\n}\n\nvar lb = moment.defineLocale('lb', {\n    months: 'Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),\n    monthsShort: 'Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split('_'),\n    monthsParseExact : true,\n    weekdays: 'Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg'.split('_'),\n    weekdaysShort: 'So._Mé._Dë._Më._Do._Fr._Sa.'.split('_'),\n    weekdaysMin: 'So_Mé_Dë_Më_Do_Fr_Sa'.split('_'),\n    weekdaysParseExact : true,\n    longDateFormat: {\n        LT: 'H:mm [Auer]',\n        LTS: 'H:mm:ss [Auer]',\n        L: 'DD.MM.YYYY',\n        LL: 'D. MMMM YYYY',\n        LLL: 'D. MMMM YYYY H:mm [Auer]',\n        LLLL: 'dddd, D. MMMM YYYY H:mm [Auer]'\n    },\n    calendar: {\n        sameDay: '[Haut um] LT',\n        sameElse: 'L',\n        nextDay: '[Muer um] LT',\n        nextWeek: 'dddd [um] LT',\n        lastDay: '[Gëschter um] LT',\n        lastWeek: function () {\n            // Different date string for 'Dënschdeg' (Tuesday) and 'Donneschdeg' (Thursday) due to phonological rule\n            switch (this.day()) {\n                case 2:\n                case 4:\n                    return '[Leschten] dddd [um] LT';\n                default:\n                    return '[Leschte] dddd [um] LT';\n            }\n        }\n    },\n    relativeTime : {\n        future : processFutureTime,\n        past : processPastTime,\n        s : 'e puer Sekonnen',\n        ss : '%d Sekonnen',\n        m : processRelativeTime,\n        mm : '%d Minutten',\n        h : processRelativeTime,\n        hh : '%d Stonnen',\n        d : processRelativeTime,\n        dd : '%d Deeg',\n        M : processRelativeTime,\n        MM : '%d Méint',\n        y : processRelativeTime,\n        yy : '%d Joer'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal: '%d.',\n    week: {\n        dow: 1, // Monday is the first day of the week.\n        doy: 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn lb;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/lb.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/lo.js":
/*!********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/lo.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Lao [lo]\n//! author : Ryan Hart : https://github.com/ryanhart2\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar lo = moment.defineLocale('lo', {\n    months : 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split('_'),\n    monthsShort : 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split('_'),\n    weekdays : 'ອາທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'),\n    weekdaysShort : 'ທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'),\n    weekdaysMin : 'ທ_ຈ_ອຄ_ພ_ພຫ_ສກ_ສ'.split('_'),\n    weekdaysParseExact : true,\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD/MM/YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY HH:mm',\n        LLLL : 'ວັນdddd D MMMM YYYY HH:mm'\n    },\n    meridiemParse: /ຕອນເຊົ້າ|ຕອນແລງ/,\n    isPM: function (input) {\n        return input === 'ຕອນແລງ';\n    },\n    meridiem : function (hour, minute, isLower) {\n        if (hour < 12) {\n            return 'ຕອນເຊົ້າ';\n        } else {\n            return 'ຕອນແລງ';\n        }\n    },\n    calendar : {\n        sameDay : '[ມື້ນີ້ເວລາ] LT',\n        nextDay : '[ມື້ອື່ນເວລາ] LT',\n        nextWeek : '[ວັນ]dddd[ໜ້າເວລາ] LT',\n        lastDay : '[ມື້ວານນີ້ເວລາ] LT',\n        lastWeek : '[ວັນ]dddd[ແລ້ວນີ້ເວລາ] LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : 'ອີກ %s',\n        past : '%sຜ່ານມາ',\n        s : 'ບໍ່ເທົ່າໃດວິນາທີ',\n        ss : '%d ວິນາທີ' ,\n        m : '1 ນາທີ',\n        mm : '%d ນາທີ',\n        h : '1 ຊົ່ວໂມງ',\n        hh : '%d ຊົ່ວໂມງ',\n        d : '1 ມື້',\n        dd : '%d ມື້',\n        M : '1 ເດືອນ',\n        MM : '%d ເດືອນ',\n        y : '1 ປີ',\n        yy : '%d ປີ'\n    },\n    dayOfMonthOrdinalParse: /(ທີ່)\\d{1,2}/,\n    ordinal : function (number) {\n        return 'ທີ່' + number;\n    }\n});\n\nreturn lo;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/lo.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/lt.js":
/*!********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/lt.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Lithuanian [lt]\n//! author : Mindaugas Mozūras : https://github.com/mmozuras\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar units = {\n    'ss' : 'sekundė_sekundžių_sekundes',\n    'm' : 'minutė_minutės_minutę',\n    'mm': 'minutės_minučių_minutes',\n    'h' : 'valanda_valandos_valandą',\n    'hh': 'valandos_valandų_valandas',\n    'd' : 'diena_dienos_dieną',\n    'dd': 'dienos_dienų_dienas',\n    'M' : 'mėnuo_mėnesio_mėnesį',\n    'MM': 'mėnesiai_mėnesių_mėnesius',\n    'y' : 'metai_metų_metus',\n    'yy': 'metai_metų_metus'\n};\nfunction translateSeconds(number, withoutSuffix, key, isFuture) {\n    if (withoutSuffix) {\n        return 'kelios sekundės';\n    } else {\n        return isFuture ? 'kelių sekundžių' : 'kelias sekundes';\n    }\n}\nfunction translateSingular(number, withoutSuffix, key, isFuture) {\n    return withoutSuffix ? forms(key)[0] : (isFuture ? forms(key)[1] : forms(key)[2]);\n}\nfunction special(number) {\n    return number % 10 === 0 || (number > 10 && number < 20);\n}\nfunction forms(key) {\n    return units[key].split('_');\n}\nfunction translate(number, withoutSuffix, key, isFuture) {\n    var result = number + ' ';\n    if (number === 1) {\n        return result + translateSingular(number, withoutSuffix, key[0], isFuture);\n    } else if (withoutSuffix) {\n        return result + (special(number) ? forms(key)[1] : forms(key)[0]);\n    } else {\n        if (isFuture) {\n            return result + forms(key)[1];\n        } else {\n            return result + (special(number) ? forms(key)[1] : forms(key)[2]);\n        }\n    }\n}\nvar lt = moment.defineLocale('lt', {\n    months : {\n        format: 'sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio'.split('_'),\n        standalone: 'sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis'.split('_'),\n        isFormat: /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?|MMMM?(\\[[^\\[\\]]*\\]|\\s)+D[oD]?/\n    },\n    monthsShort : 'sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd'.split('_'),\n    weekdays : {\n        format: 'sekmadienį_pirmadienį_antradienį_trečiadienį_ketvirtadienį_penktadienį_šeštadienį'.split('_'),\n        standalone: 'sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis'.split('_'),\n        isFormat: /dddd HH:mm/\n    },\n    weekdaysShort : 'Sek_Pir_Ant_Tre_Ket_Pen_Šeš'.split('_'),\n    weekdaysMin : 'S_P_A_T_K_Pn_Š'.split('_'),\n    weekdaysParseExact : true,\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'YYYY-MM-DD',\n        LL : 'YYYY [m.] MMMM D [d.]',\n        LLL : 'YYYY [m.] MMMM D [d.], HH:mm [val.]',\n        LLLL : 'YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]',\n        l : 'YYYY-MM-DD',\n        ll : 'YYYY [m.] MMMM D [d.]',\n        lll : 'YYYY [m.] MMMM D [d.], HH:mm [val.]',\n        llll : 'YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]'\n    },\n    calendar : {\n        sameDay : '[Šiandien] LT',\n        nextDay : '[Rytoj] LT',\n        nextWeek : 'dddd LT',\n        lastDay : '[Vakar] LT',\n        lastWeek : '[Praėjusį] dddd LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : 'po %s',\n        past : 'prieš %s',\n        s : translateSeconds,\n        ss : translate,\n        m : translateSingular,\n        mm : translate,\n        h : translateSingular,\n        hh : translate,\n        d : translateSingular,\n        dd : translate,\n        M : translateSingular,\n        MM : translate,\n        y : translateSingular,\n        yy : translate\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}-oji/,\n    ordinal : function (number) {\n        return number + '-oji';\n    },\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn lt;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/lt.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/lv.js":
/*!********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/lv.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Latvian [lv]\n//! author : Kristaps Karlsons : https://github.com/skakri\n//! author : Jānis Elmeris : https://github.com/JanisE\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar units = {\n    'ss': 'sekundes_sekundēm_sekunde_sekundes'.split('_'),\n    'm': 'minūtes_minūtēm_minūte_minūtes'.split('_'),\n    'mm': 'minūtes_minūtēm_minūte_minūtes'.split('_'),\n    'h': 'stundas_stundām_stunda_stundas'.split('_'),\n    'hh': 'stundas_stundām_stunda_stundas'.split('_'),\n    'd': 'dienas_dienām_diena_dienas'.split('_'),\n    'dd': 'dienas_dienām_diena_dienas'.split('_'),\n    'M': 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'),\n    'MM': 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'),\n    'y': 'gada_gadiem_gads_gadi'.split('_'),\n    'yy': 'gada_gadiem_gads_gadi'.split('_')\n};\n/**\n * @param withoutSuffix boolean true = a length of time; false = before/after a period of time.\n */\nfunction format(forms, number, withoutSuffix) {\n    if (withoutSuffix) {\n        // E.g. \"21 minūte\", \"3 minūtes\".\n        return number % 10 === 1 && number % 100 !== 11 ? forms[2] : forms[3];\n    } else {\n        // E.g. \"21 minūtes\" as in \"pēc 21 minūtes\".\n        // E.g. \"3 minūtēm\" as in \"pēc 3 minūtēm\".\n        return number % 10 === 1 && number % 100 !== 11 ? forms[0] : forms[1];\n    }\n}\nfunction relativeTimeWithPlural(number, withoutSuffix, key) {\n    return number + ' ' + format(units[key], number, withoutSuffix);\n}\nfunction relativeTimeWithSingular(number, withoutSuffix, key) {\n    return format(units[key], number, withoutSuffix);\n}\nfunction relativeSeconds(number, withoutSuffix) {\n    return withoutSuffix ? 'dažas sekundes' : 'dažām sekundēm';\n}\n\nvar lv = moment.defineLocale('lv', {\n    months : 'janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris'.split('_'),\n    monthsShort : 'jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec'.split('_'),\n    weekdays : 'svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena'.split('_'),\n    weekdaysShort : 'Sv_P_O_T_C_Pk_S'.split('_'),\n    weekdaysMin : 'Sv_P_O_T_C_Pk_S'.split('_'),\n    weekdaysParseExact : true,\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD.MM.YYYY.',\n        LL : 'YYYY. [gada] D. MMMM',\n        LLL : 'YYYY. [gada] D. MMMM, HH:mm',\n        LLLL : 'YYYY. [gada] D. MMMM, dddd, HH:mm'\n    },\n    calendar : {\n        sameDay : '[Šodien pulksten] LT',\n        nextDay : '[Rīt pulksten] LT',\n        nextWeek : 'dddd [pulksten] LT',\n        lastDay : '[Vakar pulksten] LT',\n        lastWeek : '[Pagājušā] dddd [pulksten] LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : 'pēc %s',\n        past : 'pirms %s',\n        s : relativeSeconds,\n        ss : relativeTimeWithPlural,\n        m : relativeTimeWithSingular,\n        mm : relativeTimeWithPlural,\n        h : relativeTimeWithSingular,\n        hh : relativeTimeWithPlural,\n        d : relativeTimeWithSingular,\n        dd : relativeTimeWithPlural,\n        M : relativeTimeWithSingular,\n        MM : relativeTimeWithPlural,\n        y : relativeTimeWithSingular,\n        yy : relativeTimeWithPlural\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal : '%d.',\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn lv;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/lv.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/me.js":
/*!********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/me.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Montenegrin [me]\n//! author : Miodrag Nikač <miodrag@restartit.me> : https://github.com/miodragnikac\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar translator = {\n    words: { //Different grammatical cases\n        ss: ['sekund', 'sekunda', 'sekundi'],\n        m: ['jedan minut', 'jednog minuta'],\n        mm: ['minut', 'minuta', 'minuta'],\n        h: ['jedan sat', 'jednog sata'],\n        hh: ['sat', 'sata', 'sati'],\n        dd: ['dan', 'dana', 'dana'],\n        MM: ['mjesec', 'mjeseca', 'mjeseci'],\n        yy: ['godina', 'godine', 'godina']\n    },\n    correctGrammaticalCase: function (number, wordKey) {\n        return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]);\n    },\n    translate: function (number, withoutSuffix, key) {\n        var wordKey = translator.words[key];\n        if (key.length === 1) {\n            return withoutSuffix ? wordKey[0] : wordKey[1];\n        } else {\n            return number + ' ' + translator.correctGrammaticalCase(number, wordKey);\n        }\n    }\n};\n\nvar me = moment.defineLocale('me', {\n    months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split('_'),\n    monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'),\n    monthsParseExact : true,\n    weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'),\n    weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),\n    weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),\n    weekdaysParseExact : true,\n    longDateFormat: {\n        LT: 'H:mm',\n        LTS : 'H:mm:ss',\n        L: 'DD.MM.YYYY',\n        LL: 'D. MMMM YYYY',\n        LLL: 'D. MMMM YYYY H:mm',\n        LLLL: 'dddd, D. MMMM YYYY H:mm'\n    },\n    calendar: {\n        sameDay: '[danas u] LT',\n        nextDay: '[sjutra u] LT',\n\n        nextWeek: function () {\n            switch (this.day()) {\n                case 0:\n                    return '[u] [nedjelju] [u] LT';\n                case 3:\n                    return '[u] [srijedu] [u] LT';\n                case 6:\n                    return '[u] [subotu] [u] LT';\n                case 1:\n                case 2:\n                case 4:\n                case 5:\n                    return '[u] dddd [u] LT';\n            }\n        },\n        lastDay  : '[juče u] LT',\n        lastWeek : function () {\n            var lastWeekDays = [\n                '[prošle] [nedjelje] [u] LT',\n                '[prošlog] [ponedjeljka] [u] LT',\n                '[prošlog] [utorka] [u] LT',\n                '[prošle] [srijede] [u] LT',\n                '[prošlog] [četvrtka] [u] LT',\n                '[prošlog] [petka] [u] LT',\n                '[prošle] [subote] [u] LT'\n            ];\n            return lastWeekDays[this.day()];\n        },\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : 'za %s',\n        past   : 'prije %s',\n        s      : 'nekoliko sekundi',\n        ss     : translator.translate,\n        m      : translator.translate,\n        mm     : translator.translate,\n        h      : translator.translate,\n        hh     : translator.translate,\n        d      : 'dan',\n        dd     : translator.translate,\n        M      : 'mjesec',\n        MM     : translator.translate,\n        y      : 'godinu',\n        yy     : translator.translate\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal : '%d.',\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 7  // The week that contains Jan 1st is the first week of the year.\n    }\n});\n\nreturn me;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/me.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/mi.js":
/*!********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/mi.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Maori [mi]\n//! author : John Corrigan <robbiecloset@gmail.com> : https://github.com/johnideal\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar mi = moment.defineLocale('mi', {\n    months: 'Kohi-tāte_Hui-tanguru_Poutū-te-rangi_Paenga-whāwhā_Haratua_Pipiri_Hōngoingoi_Here-turi-kōkā_Mahuru_Whiringa-ā-nuku_Whiringa-ā-rangi_Hakihea'.split('_'),\n    monthsShort: 'Kohi_Hui_Pou_Pae_Hara_Pipi_Hōngoi_Here_Mahu_Whi-nu_Whi-ra_Haki'.split('_'),\n    monthsRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,3}/i,\n    monthsStrictRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,3}/i,\n    monthsShortRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,3}/i,\n    monthsShortStrictRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,2}/i,\n    weekdays: 'Rātapu_Mane_Tūrei_Wenerei_Tāite_Paraire_Hātarei'.split('_'),\n    weekdaysShort: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'),\n    weekdaysMin: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'),\n    longDateFormat: {\n        LT: 'HH:mm',\n        LTS: 'HH:mm:ss',\n        L: 'DD/MM/YYYY',\n        LL: 'D MMMM YYYY',\n        LLL: 'D MMMM YYYY [i] HH:mm',\n        LLLL: 'dddd, D MMMM YYYY [i] HH:mm'\n    },\n    calendar: {\n        sameDay: '[i teie mahana, i] LT',\n        nextDay: '[apopo i] LT',\n        nextWeek: 'dddd [i] LT',\n        lastDay: '[inanahi i] LT',\n        lastWeek: 'dddd [whakamutunga i] LT',\n        sameElse: 'L'\n    },\n    relativeTime: {\n        future: 'i roto i %s',\n        past: '%s i mua',\n        s: 'te hēkona ruarua',\n        ss: '%d hēkona',\n        m: 'he meneti',\n        mm: '%d meneti',\n        h: 'te haora',\n        hh: '%d haora',\n        d: 'he ra',\n        dd: '%d ra',\n        M: 'he marama',\n        MM: '%d marama',\n        y: 'he tau',\n        yy: '%d tau'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}º/,\n    ordinal: '%dº',\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn mi;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/mi.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/mk.js":
/*!********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/mk.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Macedonian [mk]\n//! author : Borislav Mickov : https://github.com/B0k0\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar mk = moment.defineLocale('mk', {\n    months : 'јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември'.split('_'),\n    monthsShort : 'јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек'.split('_'),\n    weekdays : 'недела_понеделник_вторник_среда_четврток_петок_сабота'.split('_'),\n    weekdaysShort : 'нед_пон_вто_сре_чет_пет_саб'.split('_'),\n    weekdaysMin : 'нe_пo_вт_ср_че_пе_сa'.split('_'),\n    longDateFormat : {\n        LT : 'H:mm',\n        LTS : 'H:mm:ss',\n        L : 'D.MM.YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY H:mm',\n        LLLL : 'dddd, D MMMM YYYY H:mm'\n    },\n    calendar : {\n        sameDay : '[Денес во] LT',\n        nextDay : '[Утре во] LT',\n        nextWeek : '[Во] dddd [во] LT',\n        lastDay : '[Вчера во] LT',\n        lastWeek : function () {\n            switch (this.day()) {\n                case 0:\n                case 3:\n                case 6:\n                    return '[Изминатата] dddd [во] LT';\n                case 1:\n                case 2:\n                case 4:\n                case 5:\n                    return '[Изминатиот] dddd [во] LT';\n            }\n        },\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : 'после %s',\n        past : 'пред %s',\n        s : 'неколку секунди',\n        ss : '%d секунди',\n        m : 'минута',\n        mm : '%d минути',\n        h : 'час',\n        hh : '%d часа',\n        d : 'ден',\n        dd : '%d дена',\n        M : 'месец',\n        MM : '%d месеци',\n        y : 'година',\n        yy : '%d години'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}-(ев|ен|ти|ви|ри|ми)/,\n    ordinal : function (number) {\n        var lastDigit = number % 10,\n            last2Digits = number % 100;\n        if (number === 0) {\n            return number + '-ев';\n        } else if (last2Digits === 0) {\n            return number + '-ен';\n        } else if (last2Digits > 10 && last2Digits < 20) {\n            return number + '-ти';\n        } else if (lastDigit === 1) {\n            return number + '-ви';\n        } else if (lastDigit === 2) {\n            return number + '-ри';\n        } else if (lastDigit === 7 || lastDigit === 8) {\n            return number + '-ми';\n        } else {\n            return number + '-ти';\n        }\n    },\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 7  // The week that contains Jan 1st is the first week of the year.\n    }\n});\n\nreturn mk;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/mk.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/ml.js":
/*!********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/ml.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Malayalam [ml]\n//! author : Floyd Pink : https://github.com/floydpink\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar ml = moment.defineLocale('ml', {\n    months : 'ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ'.split('_'),\n    monthsShort : 'ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.'.split('_'),\n    monthsParseExact : true,\n    weekdays : 'ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച'.split('_'),\n    weekdaysShort : 'ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി'.split('_'),\n    weekdaysMin : 'ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ'.split('_'),\n    longDateFormat : {\n        LT : 'A h:mm -നു',\n        LTS : 'A h:mm:ss -നു',\n        L : 'DD/MM/YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY, A h:mm -നു',\n        LLLL : 'dddd, D MMMM YYYY, A h:mm -നു'\n    },\n    calendar : {\n        sameDay : '[ഇന്ന്] LT',\n        nextDay : '[നാളെ] LT',\n        nextWeek : 'dddd, LT',\n        lastDay : '[ഇന്നലെ] LT',\n        lastWeek : '[കഴിഞ്ഞ] dddd, LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : '%s കഴിഞ്ഞ്',\n        past : '%s മുൻപ്',\n        s : 'അൽപ നിമിഷങ്ങൾ',\n        ss : '%d സെക്കൻഡ്',\n        m : 'ഒരു മിനിറ്റ്',\n        mm : '%d മിനിറ്റ്',\n        h : 'ഒരു മണിക്കൂർ',\n        hh : '%d മണിക്കൂർ',\n        d : 'ഒരു ദിവസം',\n        dd : '%d ദിവസം',\n        M : 'ഒരു മാസം',\n        MM : '%d മാസം',\n        y : 'ഒരു വർഷം',\n        yy : '%d വർഷം'\n    },\n    meridiemParse: /രാത്രി|രാവിലെ|ഉച്ച കഴിഞ്ഞ്|വൈകുന്നേരം|രാത്രി/i,\n    meridiemHour : function (hour, meridiem) {\n        if (hour === 12) {\n            hour = 0;\n        }\n        if ((meridiem === 'രാത്രി' && hour >= 4) ||\n                meridiem === 'ഉച്ച കഴിഞ്ഞ്' ||\n                meridiem === 'വൈകുന്നേരം') {\n            return hour + 12;\n        } else {\n            return hour;\n        }\n    },\n    meridiem : function (hour, minute, isLower) {\n        if (hour < 4) {\n            return 'രാത്രി';\n        } else if (hour < 12) {\n            return 'രാവിലെ';\n        } else if (hour < 17) {\n            return 'ഉച്ച കഴിഞ്ഞ്';\n        } else if (hour < 20) {\n            return 'വൈകുന്നേരം';\n        } else {\n            return 'രാത്രി';\n        }\n    }\n});\n\nreturn ml;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/ml.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/mr.js":
/*!********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/mr.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Marathi [mr]\n//! author : Harshad Kale : https://github.com/kalehv\n//! author : Vivek Athalye : https://github.com/vnathalye\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar symbolMap = {\n    '1': '१',\n    '2': '२',\n    '3': '३',\n    '4': '४',\n    '5': '५',\n    '6': '६',\n    '7': '७',\n    '8': '८',\n    '9': '९',\n    '0': '०'\n};\nvar numberMap = {\n    '१': '1',\n    '२': '2',\n    '३': '3',\n    '४': '4',\n    '५': '5',\n    '६': '6',\n    '७': '7',\n    '८': '8',\n    '९': '9',\n    '०': '0'\n};\n\nfunction relativeTimeMr(number, withoutSuffix, string, isFuture)\n{\n    var output = '';\n    if (withoutSuffix) {\n        switch (string) {\n            case 's': output = 'काही सेकंद'; break;\n            case 'ss': output = '%d सेकंद'; break;\n            case 'm': output = 'एक मिनिट'; break;\n            case 'mm': output = '%d मिनिटे'; break;\n            case 'h': output = 'एक तास'; break;\n            case 'hh': output = '%d तास'; break;\n            case 'd': output = 'एक दिवस'; break;\n            case 'dd': output = '%d दिवस'; break;\n            case 'M': output = 'एक महिना'; break;\n            case 'MM': output = '%d महिने'; break;\n            case 'y': output = 'एक वर्ष'; break;\n            case 'yy': output = '%d वर्षे'; break;\n        }\n    }\n    else {\n        switch (string) {\n            case 's': output = 'काही सेकंदां'; break;\n            case 'ss': output = '%d सेकंदां'; break;\n            case 'm': output = 'एका मिनिटा'; break;\n            case 'mm': output = '%d मिनिटां'; break;\n            case 'h': output = 'एका तासा'; break;\n            case 'hh': output = '%d तासां'; break;\n            case 'd': output = 'एका दिवसा'; break;\n            case 'dd': output = '%d दिवसां'; break;\n            case 'M': output = 'एका महिन्या'; break;\n            case 'MM': output = '%d महिन्यां'; break;\n            case 'y': output = 'एका वर्षा'; break;\n            case 'yy': output = '%d वर्षां'; break;\n        }\n    }\n    return output.replace(/%d/i, number);\n}\n\nvar mr = moment.defineLocale('mr', {\n    months : 'जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर'.split('_'),\n    monthsShort: 'जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.'.split('_'),\n    monthsParseExact : true,\n    weekdays : 'रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'),\n    weekdaysShort : 'रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि'.split('_'),\n    weekdaysMin : 'र_सो_मं_बु_गु_शु_श'.split('_'),\n    longDateFormat : {\n        LT : 'A h:mm वाजता',\n        LTS : 'A h:mm:ss वाजता',\n        L : 'DD/MM/YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY, A h:mm वाजता',\n        LLLL : 'dddd, D MMMM YYYY, A h:mm वाजता'\n    },\n    calendar : {\n        sameDay : '[आज] LT',\n        nextDay : '[उद्या] LT',\n        nextWeek : 'dddd, LT',\n        lastDay : '[काल] LT',\n        lastWeek: '[मागील] dddd, LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future: '%sमध्ये',\n        past: '%sपूर्वी',\n        s: relativeTimeMr,\n        ss: relativeTimeMr,\n        m: relativeTimeMr,\n        mm: relativeTimeMr,\n        h: relativeTimeMr,\n        hh: relativeTimeMr,\n        d: relativeTimeMr,\n        dd: relativeTimeMr,\n        M: relativeTimeMr,\n        MM: relativeTimeMr,\n        y: relativeTimeMr,\n        yy: relativeTimeMr\n    },\n    preparse: function (string) {\n        return string.replace(/[१२३४५६७८९०]/g, function (match) {\n            return numberMap[match];\n        });\n    },\n    postformat: function (string) {\n        return string.replace(/\\d/g, function (match) {\n            return symbolMap[match];\n        });\n    },\n    meridiemParse: /रात्री|सकाळी|दुपारी|सायंकाळी/,\n    meridiemHour : function (hour, meridiem) {\n        if (hour === 12) {\n            hour = 0;\n        }\n        if (meridiem === 'रात्री') {\n            return hour < 4 ? hour : hour + 12;\n        } else if (meridiem === 'सकाळी') {\n            return hour;\n        } else if (meridiem === 'दुपारी') {\n            return hour >= 10 ? hour : hour + 12;\n        } else if (meridiem === 'सायंकाळी') {\n            return hour + 12;\n        }\n    },\n    meridiem: function (hour, minute, isLower) {\n        if (hour < 4) {\n            return 'रात्री';\n        } else if (hour < 10) {\n            return 'सकाळी';\n        } else if (hour < 17) {\n            return 'दुपारी';\n        } else if (hour < 20) {\n            return 'सायंकाळी';\n        } else {\n            return 'रात्री';\n        }\n    },\n    week : {\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\nreturn mr;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/mr.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/ms-my.js":
/*!***********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/ms-my.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Malay [ms-my]\n//! note : DEPRECATED, the correct one is [ms]\n//! author : Weldan Jamili : https://github.com/weldan\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar msMy = moment.defineLocale('ms-my', {\n    months : 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split('_'),\n    monthsShort : 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),\n    weekdays : 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),\n    weekdaysShort : 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),\n    weekdaysMin : 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),\n    longDateFormat : {\n        LT : 'HH.mm',\n        LTS : 'HH.mm.ss',\n        L : 'DD/MM/YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY [pukul] HH.mm',\n        LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'\n    },\n    meridiemParse: /pagi|tengahari|petang|malam/,\n    meridiemHour: function (hour, meridiem) {\n        if (hour === 12) {\n            hour = 0;\n        }\n        if (meridiem === 'pagi') {\n            return hour;\n        } else if (meridiem === 'tengahari') {\n            return hour >= 11 ? hour : hour + 12;\n        } else if (meridiem === 'petang' || meridiem === 'malam') {\n            return hour + 12;\n        }\n    },\n    meridiem : function (hours, minutes, isLower) {\n        if (hours < 11) {\n            return 'pagi';\n        } else if (hours < 15) {\n            return 'tengahari';\n        } else if (hours < 19) {\n            return 'petang';\n        } else {\n            return 'malam';\n        }\n    },\n    calendar : {\n        sameDay : '[Hari ini pukul] LT',\n        nextDay : '[Esok pukul] LT',\n        nextWeek : 'dddd [pukul] LT',\n        lastDay : '[Kelmarin pukul] LT',\n        lastWeek : 'dddd [lepas pukul] LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : 'dalam %s',\n        past : '%s yang lepas',\n        s : 'beberapa saat',\n        ss : '%d saat',\n        m : 'seminit',\n        mm : '%d minit',\n        h : 'sejam',\n        hh : '%d jam',\n        d : 'sehari',\n        dd : '%d hari',\n        M : 'sebulan',\n        MM : '%d bulan',\n        y : 'setahun',\n        yy : '%d tahun'\n    },\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 7  // The week that contains Jan 1st is the first week of the year.\n    }\n});\n\nreturn msMy;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/ms-my.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/ms.js":
/*!********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/ms.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Malay [ms]\n//! author : Weldan Jamili : https://github.com/weldan\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar ms = moment.defineLocale('ms', {\n    months : 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split('_'),\n    monthsShort : 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),\n    weekdays : 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),\n    weekdaysShort : 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),\n    weekdaysMin : 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),\n    longDateFormat : {\n        LT : 'HH.mm',\n        LTS : 'HH.mm.ss',\n        L : 'DD/MM/YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY [pukul] HH.mm',\n        LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'\n    },\n    meridiemParse: /pagi|tengahari|petang|malam/,\n    meridiemHour: function (hour, meridiem) {\n        if (hour === 12) {\n            hour = 0;\n        }\n        if (meridiem === 'pagi') {\n            return hour;\n        } else if (meridiem === 'tengahari') {\n            return hour >= 11 ? hour : hour + 12;\n        } else if (meridiem === 'petang' || meridiem === 'malam') {\n            return hour + 12;\n        }\n    },\n    meridiem : function (hours, minutes, isLower) {\n        if (hours < 11) {\n            return 'pagi';\n        } else if (hours < 15) {\n            return 'tengahari';\n        } else if (hours < 19) {\n            return 'petang';\n        } else {\n            return 'malam';\n        }\n    },\n    calendar : {\n        sameDay : '[Hari ini pukul] LT',\n        nextDay : '[Esok pukul] LT',\n        nextWeek : 'dddd [pukul] LT',\n        lastDay : '[Kelmarin pukul] LT',\n        lastWeek : 'dddd [lepas pukul] LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : 'dalam %s',\n        past : '%s yang lepas',\n        s : 'beberapa saat',\n        ss : '%d saat',\n        m : 'seminit',\n        mm : '%d minit',\n        h : 'sejam',\n        hh : '%d jam',\n        d : 'sehari',\n        dd : '%d hari',\n        M : 'sebulan',\n        MM : '%d bulan',\n        y : 'setahun',\n        yy : '%d tahun'\n    },\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 7  // The week that contains Jan 1st is the first week of the year.\n    }\n});\n\nreturn ms;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/ms.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/mt.js":
/*!********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/mt.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Maltese (Malta) [mt]\n//! author : Alessandro Maruccia : https://github.com/alesma\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar mt = moment.defineLocale('mt', {\n    months : 'Jannar_Frar_Marzu_April_Mejju_Ġunju_Lulju_Awwissu_Settembru_Ottubru_Novembru_Diċembru'.split('_'),\n    monthsShort : 'Jan_Fra_Mar_Apr_Mej_Ġun_Lul_Aww_Set_Ott_Nov_Diċ'.split('_'),\n    weekdays : 'Il-Ħadd_It-Tnejn_It-Tlieta_L-Erbgħa_Il-Ħamis_Il-Ġimgħa_Is-Sibt'.split('_'),\n    weekdaysShort : 'Ħad_Tne_Tli_Erb_Ħam_Ġim_Sib'.split('_'),\n    weekdaysMin : 'Ħa_Tn_Tl_Er_Ħa_Ġi_Si'.split('_'),\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD/MM/YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY HH:mm',\n        LLLL : 'dddd, D MMMM YYYY HH:mm'\n    },\n    calendar : {\n        sameDay : '[Illum fil-]LT',\n        nextDay : '[Għada fil-]LT',\n        nextWeek : 'dddd [fil-]LT',\n        lastDay : '[Il-bieraħ fil-]LT',\n        lastWeek : 'dddd [li għadda] [fil-]LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : 'f’ %s',\n        past : '%s ilu',\n        s : 'ftit sekondi',\n        ss : '%d sekondi',\n        m : 'minuta',\n        mm : '%d minuti',\n        h : 'siegħa',\n        hh : '%d siegħat',\n        d : 'ġurnata',\n        dd : '%d ġranet',\n        M : 'xahar',\n        MM : '%d xhur',\n        y : 'sena',\n        yy : '%d sni'\n    },\n    dayOfMonthOrdinalParse : /\\d{1,2}º/,\n    ordinal: '%dº',\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn mt;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/mt.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/my.js":
/*!********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/my.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Burmese [my]\n//! author : Squar team, mysquar.com\n//! author : David Rossellat : https://github.com/gholadr\n//! author : Tin Aung Lin : https://github.com/thanyawzinmin\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar symbolMap = {\n    '1': '၁',\n    '2': '၂',\n    '3': '၃',\n    '4': '၄',\n    '5': '၅',\n    '6': '၆',\n    '7': '၇',\n    '8': '၈',\n    '9': '၉',\n    '0': '၀'\n};\nvar numberMap = {\n    '၁': '1',\n    '၂': '2',\n    '၃': '3',\n    '၄': '4',\n    '၅': '5',\n    '၆': '6',\n    '၇': '7',\n    '၈': '8',\n    '၉': '9',\n    '၀': '0'\n};\n\nvar my = moment.defineLocale('my', {\n    months: 'ဇန်နဝါရီ_ဖေဖော်ဝါရီ_မတ်_ဧပြီ_မေ_ဇွန်_ဇူလိုင်_သြဂုတ်_စက်တင်ဘာ_အောက်တိုဘာ_နိုဝင်ဘာ_ဒီဇင်ဘာ'.split('_'),\n    monthsShort: 'ဇန်_ဖေ_မတ်_ပြီ_မေ_ဇွန်_လိုင်_သြ_စက်_အောက်_နို_ဒီ'.split('_'),\n    weekdays: 'တနင်္ဂနွေ_တနင်္လာ_အင်္ဂါ_ဗုဒ္ဓဟူး_ကြာသပတေး_သောကြာ_စနေ'.split('_'),\n    weekdaysShort: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'),\n    weekdaysMin: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'),\n\n    longDateFormat: {\n        LT: 'HH:mm',\n        LTS: 'HH:mm:ss',\n        L: 'DD/MM/YYYY',\n        LL: 'D MMMM YYYY',\n        LLL: 'D MMMM YYYY HH:mm',\n        LLLL: 'dddd D MMMM YYYY HH:mm'\n    },\n    calendar: {\n        sameDay: '[ယနေ.] LT [မှာ]',\n        nextDay: '[မနက်ဖြန်] LT [မှာ]',\n        nextWeek: 'dddd LT [မှာ]',\n        lastDay: '[မနေ.က] LT [မှာ]',\n        lastWeek: '[ပြီးခဲ့သော] dddd LT [မှာ]',\n        sameElse: 'L'\n    },\n    relativeTime: {\n        future: 'လာမည့် %s မှာ',\n        past: 'လွန်ခဲ့သော %s က',\n        s: 'စက္ကန်.အနည်းငယ်',\n        ss : '%d စက္ကန့်',\n        m: 'တစ်မိနစ်',\n        mm: '%d မိနစ်',\n        h: 'တစ်နာရီ',\n        hh: '%d နာရီ',\n        d: 'တစ်ရက်',\n        dd: '%d ရက်',\n        M: 'တစ်လ',\n        MM: '%d လ',\n        y: 'တစ်နှစ်',\n        yy: '%d နှစ်'\n    },\n    preparse: function (string) {\n        return string.replace(/[၁၂၃၄၅၆၇၈၉၀]/g, function (match) {\n            return numberMap[match];\n        });\n    },\n    postformat: function (string) {\n        return string.replace(/\\d/g, function (match) {\n            return symbolMap[match];\n        });\n    },\n    week: {\n        dow: 1, // Monday is the first day of the week.\n        doy: 4 // The week that contains Jan 1st is the first week of the year.\n    }\n});\n\nreturn my;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/my.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/nb.js":
/*!********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/nb.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Norwegian Bokmål [nb]\n//! authors : Espen Hovlandsdal : https://github.com/rexxars\n//!           Sigurd Gartmann : https://github.com/sigurdga\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar nb = moment.defineLocale('nb', {\n    months : 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split('_'),\n    monthsShort : 'jan._feb._mars_april_mai_juni_juli_aug._sep._okt._nov._des.'.split('_'),\n    monthsParseExact : true,\n    weekdays : 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),\n    weekdaysShort : 'sø._ma._ti._on._to._fr._lø.'.split('_'),\n    weekdaysMin : 'sø_ma_ti_on_to_fr_lø'.split('_'),\n    weekdaysParseExact : true,\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD.MM.YYYY',\n        LL : 'D. MMMM YYYY',\n        LLL : 'D. MMMM YYYY [kl.] HH:mm',\n        LLLL : 'dddd D. MMMM YYYY [kl.] HH:mm'\n    },\n    calendar : {\n        sameDay: '[i dag kl.] LT',\n        nextDay: '[i morgen kl.] LT',\n        nextWeek: 'dddd [kl.] LT',\n        lastDay: '[i går kl.] LT',\n        lastWeek: '[forrige] dddd [kl.] LT',\n        sameElse: 'L'\n    },\n    relativeTime : {\n        future : 'om %s',\n        past : '%s siden',\n        s : 'noen sekunder',\n        ss : '%d sekunder',\n        m : 'ett minutt',\n        mm : '%d minutter',\n        h : 'en time',\n        hh : '%d timer',\n        d : 'en dag',\n        dd : '%d dager',\n        M : 'en måned',\n        MM : '%d måneder',\n        y : 'ett år',\n        yy : '%d år'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal : '%d.',\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn nb;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/nb.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/ne.js":
/*!********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/ne.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Nepalese [ne]\n//! author : suvash : https://github.com/suvash\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar symbolMap = {\n    '1': '१',\n    '2': '२',\n    '3': '३',\n    '4': '४',\n    '5': '५',\n    '6': '६',\n    '7': '७',\n    '8': '८',\n    '9': '९',\n    '0': '०'\n};\nvar numberMap = {\n    '१': '1',\n    '२': '2',\n    '३': '3',\n    '४': '4',\n    '५': '5',\n    '६': '6',\n    '७': '7',\n    '८': '8',\n    '९': '9',\n    '०': '0'\n};\n\nvar ne = moment.defineLocale('ne', {\n    months : 'जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर'.split('_'),\n    monthsShort : 'जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.'.split('_'),\n    monthsParseExact : true,\n    weekdays : 'आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार'.split('_'),\n    weekdaysShort : 'आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.'.split('_'),\n    weekdaysMin : 'आ._सो._मं._बु._बि._शु._श.'.split('_'),\n    weekdaysParseExact : true,\n    longDateFormat : {\n        LT : 'Aको h:mm बजे',\n        LTS : 'Aको h:mm:ss बजे',\n        L : 'DD/MM/YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY, Aको h:mm बजे',\n        LLLL : 'dddd, D MMMM YYYY, Aको h:mm बजे'\n    },\n    preparse: function (string) {\n        return string.replace(/[१२३४५६७८९०]/g, function (match) {\n            return numberMap[match];\n        });\n    },\n    postformat: function (string) {\n        return string.replace(/\\d/g, function (match) {\n            return symbolMap[match];\n        });\n    },\n    meridiemParse: /राति|बिहान|दिउँसो|साँझ/,\n    meridiemHour : function (hour, meridiem) {\n        if (hour === 12) {\n            hour = 0;\n        }\n        if (meridiem === 'राति') {\n            return hour < 4 ? hour : hour + 12;\n        } else if (meridiem === 'बिहान') {\n            return hour;\n        } else if (meridiem === 'दिउँसो') {\n            return hour >= 10 ? hour : hour + 12;\n        } else if (meridiem === 'साँझ') {\n            return hour + 12;\n        }\n    },\n    meridiem : function (hour, minute, isLower) {\n        if (hour < 3) {\n            return 'राति';\n        } else if (hour < 12) {\n            return 'बिहान';\n        } else if (hour < 16) {\n            return 'दिउँसो';\n        } else if (hour < 20) {\n            return 'साँझ';\n        } else {\n            return 'राति';\n        }\n    },\n    calendar : {\n        sameDay : '[आज] LT',\n        nextDay : '[भोलि] LT',\n        nextWeek : '[आउँदो] dddd[,] LT',\n        lastDay : '[हिजो] LT',\n        lastWeek : '[गएको] dddd[,] LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : '%sमा',\n        past : '%s अगाडि',\n        s : 'केही क्षण',\n        ss : '%d सेकेण्ड',\n        m : 'एक मिनेट',\n        mm : '%d मिनेट',\n        h : 'एक घण्टा',\n        hh : '%d घण्टा',\n        d : 'एक दिन',\n        dd : '%d दिन',\n        M : 'एक महिना',\n        MM : '%d महिना',\n        y : 'एक बर्ष',\n        yy : '%d बर्ष'\n    },\n    week : {\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\nreturn ne;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/ne.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/nl-be.js":
/*!***********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/nl-be.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Dutch (Belgium) [nl-be]\n//! author : Joris Röling : https://github.com/jorisroling\n//! author : Jacob Middag : https://github.com/middagj\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar monthsShortWithDots = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_');\nvar monthsShortWithoutDots = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_');\n\nvar monthsParse = [/^jan/i, /^feb/i, /^maart|mrt.?$/i, /^apr/i, /^mei$/i, /^jun[i.]?$/i, /^jul[i.]?$/i, /^aug/i, /^sep/i, /^okt/i, /^nov/i, /^dec/i];\nvar monthsRegex = /^(januari|februari|maart|april|mei|april|ju[nl]i|augustus|september|oktober|november|december|jan\\.?|feb\\.?|mrt\\.?|apr\\.?|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i;\n\nvar nlBe = moment.defineLocale('nl-be', {\n    months : 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split('_'),\n    monthsShort : function (m, format) {\n        if (!m) {\n            return monthsShortWithDots;\n        } else if (/-MMM-/.test(format)) {\n            return monthsShortWithoutDots[m.month()];\n        } else {\n            return monthsShortWithDots[m.month()];\n        }\n    },\n\n    monthsRegex: monthsRegex,\n    monthsShortRegex: monthsRegex,\n    monthsStrictRegex: /^(januari|februari|maart|mei|ju[nl]i|april|augustus|september|oktober|november|december)/i,\n    monthsShortStrictRegex: /^(jan\\.?|feb\\.?|mrt\\.?|apr\\.?|mei|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i,\n\n    monthsParse : monthsParse,\n    longMonthsParse : monthsParse,\n    shortMonthsParse : monthsParse,\n\n    weekdays : 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'),\n    weekdaysShort : 'zo._ma._di._wo._do._vr._za.'.split('_'),\n    weekdaysMin : 'zo_ma_di_wo_do_vr_za'.split('_'),\n    weekdaysParseExact : true,\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD/MM/YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY HH:mm',\n        LLLL : 'dddd D MMMM YYYY HH:mm'\n    },\n    calendar : {\n        sameDay: '[vandaag om] LT',\n        nextDay: '[morgen om] LT',\n        nextWeek: 'dddd [om] LT',\n        lastDay: '[gisteren om] LT',\n        lastWeek: '[afgelopen] dddd [om] LT',\n        sameElse: 'L'\n    },\n    relativeTime : {\n        future : 'over %s',\n        past : '%s geleden',\n        s : 'een paar seconden',\n        ss : '%d seconden',\n        m : 'één minuut',\n        mm : '%d minuten',\n        h : 'één uur',\n        hh : '%d uur',\n        d : 'één dag',\n        dd : '%d dagen',\n        M : 'één maand',\n        MM : '%d maanden',\n        y : 'één jaar',\n        yy : '%d jaar'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n    ordinal : function (number) {\n        return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de');\n    },\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn nlBe;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/nl-be.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/nl.js":
/*!********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/nl.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Dutch [nl]\n//! author : Joris Röling : https://github.com/jorisroling\n//! author : Jacob Middag : https://github.com/middagj\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar monthsShortWithDots = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_');\nvar monthsShortWithoutDots = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_');\n\nvar monthsParse = [/^jan/i, /^feb/i, /^maart|mrt.?$/i, /^apr/i, /^mei$/i, /^jun[i.]?$/i, /^jul[i.]?$/i, /^aug/i, /^sep/i, /^okt/i, /^nov/i, /^dec/i];\nvar monthsRegex = /^(januari|februari|maart|april|mei|april|ju[nl]i|augustus|september|oktober|november|december|jan\\.?|feb\\.?|mrt\\.?|apr\\.?|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i;\n\nvar nl = moment.defineLocale('nl', {\n    months : 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split('_'),\n    monthsShort : function (m, format) {\n        if (!m) {\n            return monthsShortWithDots;\n        } else if (/-MMM-/.test(format)) {\n            return monthsShortWithoutDots[m.month()];\n        } else {\n            return monthsShortWithDots[m.month()];\n        }\n    },\n\n    monthsRegex: monthsRegex,\n    monthsShortRegex: monthsRegex,\n    monthsStrictRegex: /^(januari|februari|maart|mei|ju[nl]i|april|augustus|september|oktober|november|december)/i,\n    monthsShortStrictRegex: /^(jan\\.?|feb\\.?|mrt\\.?|apr\\.?|mei|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i,\n\n    monthsParse : monthsParse,\n    longMonthsParse : monthsParse,\n    shortMonthsParse : monthsParse,\n\n    weekdays : 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'),\n    weekdaysShort : 'zo._ma._di._wo._do._vr._za.'.split('_'),\n    weekdaysMin : 'zo_ma_di_wo_do_vr_za'.split('_'),\n    weekdaysParseExact : true,\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD-MM-YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY HH:mm',\n        LLLL : 'dddd D MMMM YYYY HH:mm'\n    },\n    calendar : {\n        sameDay: '[vandaag om] LT',\n        nextDay: '[morgen om] LT',\n        nextWeek: 'dddd [om] LT',\n        lastDay: '[gisteren om] LT',\n        lastWeek: '[afgelopen] dddd [om] LT',\n        sameElse: 'L'\n    },\n    relativeTime : {\n        future : 'over %s',\n        past : '%s geleden',\n        s : 'een paar seconden',\n        ss : '%d seconden',\n        m : 'één minuut',\n        mm : '%d minuten',\n        h : 'één uur',\n        hh : '%d uur',\n        d : 'één dag',\n        dd : '%d dagen',\n        M : 'één maand',\n        MM : '%d maanden',\n        y : 'één jaar',\n        yy : '%d jaar'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n    ordinal : function (number) {\n        return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de');\n    },\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn nl;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/nl.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/nn.js":
/*!********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/nn.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Nynorsk [nn]\n//! author : https://github.com/mechuwind\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar nn = moment.defineLocale('nn', {\n    months : 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split('_'),\n    monthsShort : 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'),\n    weekdays : 'sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag'.split('_'),\n    weekdaysShort : 'sun_mån_tys_ons_tor_fre_lau'.split('_'),\n    weekdaysMin : 'su_må_ty_on_to_fr_lø'.split('_'),\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD.MM.YYYY',\n        LL : 'D. MMMM YYYY',\n        LLL : 'D. MMMM YYYY [kl.] H:mm',\n        LLLL : 'dddd D. MMMM YYYY [kl.] HH:mm'\n    },\n    calendar : {\n        sameDay: '[I dag klokka] LT',\n        nextDay: '[I morgon klokka] LT',\n        nextWeek: 'dddd [klokka] LT',\n        lastDay: '[I går klokka] LT',\n        lastWeek: '[Føregåande] dddd [klokka] LT',\n        sameElse: 'L'\n    },\n    relativeTime : {\n        future : 'om %s',\n        past : '%s sidan',\n        s : 'nokre sekund',\n        ss : '%d sekund',\n        m : 'eit minutt',\n        mm : '%d minutt',\n        h : 'ein time',\n        hh : '%d timar',\n        d : 'ein dag',\n        dd : '%d dagar',\n        M : 'ein månad',\n        MM : '%d månader',\n        y : 'eit år',\n        yy : '%d år'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal : '%d.',\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn nn;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/nn.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/pa-in.js":
/*!***********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/pa-in.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Punjabi (India) [pa-in]\n//! author : Harpreet Singh : https://github.com/harpreetkhalsagtbit\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar symbolMap = {\n    '1': '੧',\n    '2': '੨',\n    '3': '੩',\n    '4': '੪',\n    '5': '੫',\n    '6': '੬',\n    '7': '੭',\n    '8': '੮',\n    '9': '੯',\n    '0': '੦'\n};\nvar numberMap = {\n    '੧': '1',\n    '੨': '2',\n    '੩': '3',\n    '੪': '4',\n    '੫': '5',\n    '੬': '6',\n    '੭': '7',\n    '੮': '8',\n    '੯': '9',\n    '੦': '0'\n};\n\nvar paIn = moment.defineLocale('pa-in', {\n    // There are months name as per Nanakshahi Calender but they are not used as rigidly in modern Punjabi.\n    months : 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split('_'),\n    monthsShort : 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split('_'),\n    weekdays : 'ਐਤਵਾਰ_ਸੋਮਵਾਰ_ਮੰਗਲਵਾਰ_ਬੁਧਵਾਰ_ਵੀਰਵਾਰ_ਸ਼ੁੱਕਰਵਾਰ_ਸ਼ਨੀਚਰਵਾਰ'.split('_'),\n    weekdaysShort : 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'),\n    weekdaysMin : 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'),\n    longDateFormat : {\n        LT : 'A h:mm ਵਜੇ',\n        LTS : 'A h:mm:ss ਵਜੇ',\n        L : 'DD/MM/YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY, A h:mm ਵਜੇ',\n        LLLL : 'dddd, D MMMM YYYY, A h:mm ਵਜੇ'\n    },\n    calendar : {\n        sameDay : '[ਅਜ] LT',\n        nextDay : '[ਕਲ] LT',\n        nextWeek : 'dddd, LT',\n        lastDay : '[ਕਲ] LT',\n        lastWeek : '[ਪਿਛਲੇ] dddd, LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : '%s ਵਿੱਚ',\n        past : '%s ਪਿਛਲੇ',\n        s : 'ਕੁਝ ਸਕਿੰਟ',\n        ss : '%d ਸਕਿੰਟ',\n        m : 'ਇਕ ਮਿੰਟ',\n        mm : '%d ਮਿੰਟ',\n        h : 'ਇੱਕ ਘੰਟਾ',\n        hh : '%d ਘੰਟੇ',\n        d : 'ਇੱਕ ਦਿਨ',\n        dd : '%d ਦਿਨ',\n        M : 'ਇੱਕ ਮਹੀਨਾ',\n        MM : '%d ਮਹੀਨੇ',\n        y : 'ਇੱਕ ਸਾਲ',\n        yy : '%d ਸਾਲ'\n    },\n    preparse: function (string) {\n        return string.replace(/[੧੨੩੪੫੬੭੮੯੦]/g, function (match) {\n            return numberMap[match];\n        });\n    },\n    postformat: function (string) {\n        return string.replace(/\\d/g, function (match) {\n            return symbolMap[match];\n        });\n    },\n    // Punjabi notation for meridiems are quite fuzzy in practice. While there exists\n    // a rigid notion of a 'Pahar' it is not used as rigidly in modern Punjabi.\n    meridiemParse: /ਰਾਤ|ਸਵੇਰ|ਦੁਪਹਿਰ|ਸ਼ਾਮ/,\n    meridiemHour : function (hour, meridiem) {\n        if (hour === 12) {\n            hour = 0;\n        }\n        if (meridiem === 'ਰਾਤ') {\n            return hour < 4 ? hour : hour + 12;\n        } else if (meridiem === 'ਸਵੇਰ') {\n            return hour;\n        } else if (meridiem === 'ਦੁਪਹਿਰ') {\n            return hour >= 10 ? hour : hour + 12;\n        } else if (meridiem === 'ਸ਼ਾਮ') {\n            return hour + 12;\n        }\n    },\n    meridiem : function (hour, minute, isLower) {\n        if (hour < 4) {\n            return 'ਰਾਤ';\n        } else if (hour < 10) {\n            return 'ਸਵੇਰ';\n        } else if (hour < 17) {\n            return 'ਦੁਪਹਿਰ';\n        } else if (hour < 20) {\n            return 'ਸ਼ਾਮ';\n        } else {\n            return 'ਰਾਤ';\n        }\n    },\n    week : {\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\nreturn paIn;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/pa-in.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/pl.js":
/*!********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/pl.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Polish [pl]\n//! author : Rafal Hirsz : https://github.com/evoL\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar monthsNominative = 'styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień'.split('_');\nvar monthsSubjective = 'stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia'.split('_');\nfunction plural(n) {\n    return (n % 10 < 5) && (n % 10 > 1) && ((~~(n / 10) % 10) !== 1);\n}\nfunction translate(number, withoutSuffix, key) {\n    var result = number + ' ';\n    switch (key) {\n        case 'ss':\n            return result + (plural(number) ? 'sekundy' : 'sekund');\n        case 'm':\n            return withoutSuffix ? 'minuta' : 'minutę';\n        case 'mm':\n            return result + (plural(number) ? 'minuty' : 'minut');\n        case 'h':\n            return withoutSuffix  ? 'godzina'  : 'godzinę';\n        case 'hh':\n            return result + (plural(number) ? 'godziny' : 'godzin');\n        case 'MM':\n            return result + (plural(number) ? 'miesiące' : 'miesięcy');\n        case 'yy':\n            return result + (plural(number) ? 'lata' : 'lat');\n    }\n}\n\nvar pl = moment.defineLocale('pl', {\n    months : function (momentToFormat, format) {\n        if (!momentToFormat) {\n            return monthsNominative;\n        } else if (format === '') {\n            // Hack: if format empty we know this is used to generate\n            // RegExp by moment. Give then back both valid forms of months\n            // in RegExp ready format.\n            return '(' + monthsSubjective[momentToFormat.month()] + '|' + monthsNominative[momentToFormat.month()] + ')';\n        } else if (/D MMMM/.test(format)) {\n            return monthsSubjective[momentToFormat.month()];\n        } else {\n            return monthsNominative[momentToFormat.month()];\n        }\n    },\n    monthsShort : 'sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru'.split('_'),\n    weekdays : 'niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota'.split('_'),\n    weekdaysShort : 'ndz_pon_wt_śr_czw_pt_sob'.split('_'),\n    weekdaysMin : 'Nd_Pn_Wt_Śr_Cz_Pt_So'.split('_'),\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD.MM.YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY HH:mm',\n        LLLL : 'dddd, D MMMM YYYY HH:mm'\n    },\n    calendar : {\n        sameDay: '[Dziś o] LT',\n        nextDay: '[Jutro o] LT',\n        nextWeek: function () {\n            switch (this.day()) {\n                case 0:\n                    return '[W niedzielę o] LT';\n\n                case 2:\n                    return '[We wtorek o] LT';\n\n                case 3:\n                    return '[W środę o] LT';\n\n                case 6:\n                    return '[W sobotę o] LT';\n\n                default:\n                    return '[W] dddd [o] LT';\n            }\n        },\n        lastDay: '[Wczoraj o] LT',\n        lastWeek: function () {\n            switch (this.day()) {\n                case 0:\n                    return '[W zeszłą niedzielę o] LT';\n                case 3:\n                    return '[W zeszłą środę o] LT';\n                case 6:\n                    return '[W zeszłą sobotę o] LT';\n                default:\n                    return '[W zeszły] dddd [o] LT';\n            }\n        },\n        sameElse: 'L'\n    },\n    relativeTime : {\n        future : 'za %s',\n        past : '%s temu',\n        s : 'kilka sekund',\n        ss : translate,\n        m : translate,\n        mm : translate,\n        h : translate,\n        hh : translate,\n        d : '1 dzień',\n        dd : '%d dni',\n        M : 'miesiąc',\n        MM : translate,\n        y : 'rok',\n        yy : translate\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal : '%d.',\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn pl;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/pl.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/pt-br.js":
/*!***********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/pt-br.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Portuguese (Brazil) [pt-br]\n//! author : Caio Ribeiro Pereira : https://github.com/caio-ribeiro-pereira\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar ptBr = moment.defineLocale('pt-br', {\n    months : 'janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro'.split('_'),\n    monthsShort : 'jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez'.split('_'),\n    weekdays : 'Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado'.split('_'),\n    weekdaysShort : 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'),\n    weekdaysMin : 'Do_2ª_3ª_4ª_5ª_6ª_Sá'.split('_'),\n    weekdaysParseExact : true,\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD/MM/YYYY',\n        LL : 'D [de] MMMM [de] YYYY',\n        LLL : 'D [de] MMMM [de] YYYY [às] HH:mm',\n        LLLL : 'dddd, D [de] MMMM [de] YYYY [às] HH:mm'\n    },\n    calendar : {\n        sameDay: '[Hoje às] LT',\n        nextDay: '[Amanhã às] LT',\n        nextWeek: 'dddd [às] LT',\n        lastDay: '[Ontem às] LT',\n        lastWeek: function () {\n            return (this.day() === 0 || this.day() === 6) ?\n                '[Último] dddd [às] LT' : // Saturday + Sunday\n                '[Última] dddd [às] LT'; // Monday - Friday\n        },\n        sameElse: 'L'\n    },\n    relativeTime : {\n        future : 'em %s',\n        past : '%s atrás',\n        s : 'poucos segundos',\n        ss : '%d segundos',\n        m : 'um minuto',\n        mm : '%d minutos',\n        h : 'uma hora',\n        hh : '%d horas',\n        d : 'um dia',\n        dd : '%d dias',\n        M : 'um mês',\n        MM : '%d meses',\n        y : 'um ano',\n        yy : '%d anos'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}º/,\n    ordinal : '%dº'\n});\n\nreturn ptBr;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/pt-br.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/pt.js":
/*!********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/pt.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Portuguese [pt]\n//! author : Jefferson : https://github.com/jalex79\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar pt = moment.defineLocale('pt', {\n    months : 'janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro'.split('_'),\n    monthsShort : 'jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez'.split('_'),\n    weekdays : 'Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado'.split('_'),\n    weekdaysShort : 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'),\n    weekdaysMin : 'Do_2ª_3ª_4ª_5ª_6ª_Sá'.split('_'),\n    weekdaysParseExact : true,\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD/MM/YYYY',\n        LL : 'D [de] MMMM [de] YYYY',\n        LLL : 'D [de] MMMM [de] YYYY HH:mm',\n        LLLL : 'dddd, D [de] MMMM [de] YYYY HH:mm'\n    },\n    calendar : {\n        sameDay: '[Hoje às] LT',\n        nextDay: '[Amanhã às] LT',\n        nextWeek: 'dddd [às] LT',\n        lastDay: '[Ontem às] LT',\n        lastWeek: function () {\n            return (this.day() === 0 || this.day() === 6) ?\n                '[Último] dddd [às] LT' : // Saturday + Sunday\n                '[Última] dddd [às] LT'; // Monday - Friday\n        },\n        sameElse: 'L'\n    },\n    relativeTime : {\n        future : 'em %s',\n        past : 'há %s',\n        s : 'segundos',\n        ss : '%d segundos',\n        m : 'um minuto',\n        mm : '%d minutos',\n        h : 'uma hora',\n        hh : '%d horas',\n        d : 'um dia',\n        dd : '%d dias',\n        M : 'um mês',\n        MM : '%d meses',\n        y : 'um ano',\n        yy : '%d anos'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}º/,\n    ordinal : '%dº',\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn pt;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/pt.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/ro.js":
/*!********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/ro.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Romanian [ro]\n//! author : Vlad Gurdiga : https://github.com/gurdiga\n//! author : Valentin Agachi : https://github.com/avaly\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nfunction relativeTimeWithPlural(number, withoutSuffix, key) {\n    var format = {\n            'ss': 'secunde',\n            'mm': 'minute',\n            'hh': 'ore',\n            'dd': 'zile',\n            'MM': 'luni',\n            'yy': 'ani'\n        },\n        separator = ' ';\n    if (number % 100 >= 20 || (number >= 100 && number % 100 === 0)) {\n        separator = ' de ';\n    }\n    return number + separator + format[key];\n}\n\nvar ro = moment.defineLocale('ro', {\n    months : 'ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie'.split('_'),\n    monthsShort : 'ian._febr._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.'.split('_'),\n    monthsParseExact: true,\n    weekdays : 'duminică_luni_marți_miercuri_joi_vineri_sâmbătă'.split('_'),\n    weekdaysShort : 'Dum_Lun_Mar_Mie_Joi_Vin_Sâm'.split('_'),\n    weekdaysMin : 'Du_Lu_Ma_Mi_Jo_Vi_Sâ'.split('_'),\n    longDateFormat : {\n        LT : 'H:mm',\n        LTS : 'H:mm:ss',\n        L : 'DD.MM.YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY H:mm',\n        LLLL : 'dddd, D MMMM YYYY H:mm'\n    },\n    calendar : {\n        sameDay: '[azi la] LT',\n        nextDay: '[mâine la] LT',\n        nextWeek: 'dddd [la] LT',\n        lastDay: '[ieri la] LT',\n        lastWeek: '[fosta] dddd [la] LT',\n        sameElse: 'L'\n    },\n    relativeTime : {\n        future : 'peste %s',\n        past : '%s în urmă',\n        s : 'câteva secunde',\n        ss : relativeTimeWithPlural,\n        m : 'un minut',\n        mm : relativeTimeWithPlural,\n        h : 'o oră',\n        hh : relativeTimeWithPlural,\n        d : 'o zi',\n        dd : relativeTimeWithPlural,\n        M : 'o lună',\n        MM : relativeTimeWithPlural,\n        y : 'un an',\n        yy : relativeTimeWithPlural\n    },\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 7  // The week that contains Jan 1st is the first week of the year.\n    }\n});\n\nreturn ro;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/ro.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/ru.js":
/*!********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/ru.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Russian [ru]\n//! author : Viktorminator : https://github.com/Viktorminator\n//! Author : Menelion Elensúle : https://github.com/Oire\n//! author : Коренберг Марк : https://github.com/socketpair\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nfunction plural(word, num) {\n    var forms = word.split('_');\n    return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]);\n}\nfunction relativeTimeWithPlural(number, withoutSuffix, key) {\n    var format = {\n        'ss': withoutSuffix ? 'секунда_секунды_секунд' : 'секунду_секунды_секунд',\n        'mm': withoutSuffix ? 'минута_минуты_минут' : 'минуту_минуты_минут',\n        'hh': 'час_часа_часов',\n        'dd': 'день_дня_дней',\n        'MM': 'месяц_месяца_месяцев',\n        'yy': 'год_года_лет'\n    };\n    if (key === 'm') {\n        return withoutSuffix ? 'минута' : 'минуту';\n    }\n    else {\n        return number + ' ' + plural(format[key], +number);\n    }\n}\nvar monthsParse = [/^янв/i, /^фев/i, /^мар/i, /^апр/i, /^ма[йя]/i, /^июн/i, /^июл/i, /^авг/i, /^сен/i, /^окт/i, /^ноя/i, /^дек/i];\n\n// http://new.gramota.ru/spravka/rules/139-prop : § 103\n// Сокращения месяцев: http://new.gramota.ru/spravka/buro/search-answer?s=242637\n// CLDR data:          http://www.unicode.org/cldr/charts/28/summary/ru.html#1753\nvar ru = moment.defineLocale('ru', {\n    months : {\n        format: 'января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря'.split('_'),\n        standalone: 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split('_')\n    },\n    monthsShort : {\n        // по CLDR именно \"июл.\" и \"июн.\", но какой смысл менять букву на точку ?\n        format: 'янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.'.split('_'),\n        standalone: 'янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.'.split('_')\n    },\n    weekdays : {\n        standalone: 'воскресенье_понедельник_вторник_среда_четверг_пятница_суббота'.split('_'),\n        format: 'воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу'.split('_'),\n        isFormat: /\\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?\\] ?dddd/\n    },\n    weekdaysShort : 'вс_пн_вт_ср_чт_пт_сб'.split('_'),\n    weekdaysMin : 'вс_пн_вт_ср_чт_пт_сб'.split('_'),\n    monthsParse : monthsParse,\n    longMonthsParse : monthsParse,\n    shortMonthsParse : monthsParse,\n\n    // полные названия с падежами, по три буквы, для некоторых, по 4 буквы, сокращения с точкой и без точки\n    monthsRegex: /^(январ[ья]|янв\\.?|феврал[ья]|февр?\\.?|марта?|мар\\.?|апрел[ья]|апр\\.?|ма[йя]|июн[ья]|июн\\.?|июл[ья]|июл\\.?|августа?|авг\\.?|сентябр[ья]|сент?\\.?|октябр[ья]|окт\\.?|ноябр[ья]|нояб?\\.?|декабр[ья]|дек\\.?)/i,\n\n    // копия предыдущего\n    monthsShortRegex: /^(январ[ья]|янв\\.?|феврал[ья]|февр?\\.?|марта?|мар\\.?|апрел[ья]|апр\\.?|ма[йя]|июн[ья]|июн\\.?|июл[ья]|июл\\.?|августа?|авг\\.?|сентябр[ья]|сент?\\.?|октябр[ья]|окт\\.?|ноябр[ья]|нояб?\\.?|декабр[ья]|дек\\.?)/i,\n\n    // полные названия с падежами\n    monthsStrictRegex: /^(январ[яь]|феврал[яь]|марта?|апрел[яь]|ма[яй]|июн[яь]|июл[яь]|августа?|сентябр[яь]|октябр[яь]|ноябр[яь]|декабр[яь])/i,\n\n    // Выражение, которое соотвествует только сокращённым формам\n    monthsShortStrictRegex: /^(янв\\.|февр?\\.|мар[т.]|апр\\.|ма[яй]|июн[ья.]|июл[ья.]|авг\\.|сент?\\.|окт\\.|нояб?\\.|дек\\.)/i,\n    longDateFormat : {\n        LT : 'H:mm',\n        LTS : 'H:mm:ss',\n        L : 'DD.MM.YYYY',\n        LL : 'D MMMM YYYY г.',\n        LLL : 'D MMMM YYYY г., H:mm',\n        LLLL : 'dddd, D MMMM YYYY г., H:mm'\n    },\n    calendar : {\n        sameDay: '[Сегодня в] LT',\n        nextDay: '[Завтра в] LT',\n        lastDay: '[Вчера в] LT',\n        nextWeek: function (now) {\n            if (now.week() !== this.week()) {\n                switch (this.day()) {\n                    case 0:\n                        return '[В следующее] dddd [в] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                        return '[В следующий] dddd [в] LT';\n                    case 3:\n                    case 5:\n                    case 6:\n                        return '[В следующую] dddd [в] LT';\n                }\n            } else {\n                if (this.day() === 2) {\n                    return '[Во] dddd [в] LT';\n                } else {\n                    return '[В] dddd [в] LT';\n                }\n            }\n        },\n        lastWeek: function (now) {\n            if (now.week() !== this.week()) {\n                switch (this.day()) {\n                    case 0:\n                        return '[В прошлое] dddd [в] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                        return '[В прошлый] dddd [в] LT';\n                    case 3:\n                    case 5:\n                    case 6:\n                        return '[В прошлую] dddd [в] LT';\n                }\n            } else {\n                if (this.day() === 2) {\n                    return '[Во] dddd [в] LT';\n                } else {\n                    return '[В] dddd [в] LT';\n                }\n            }\n        },\n        sameElse: 'L'\n    },\n    relativeTime : {\n        future : 'через %s',\n        past : '%s назад',\n        s : 'несколько секунд',\n        ss : relativeTimeWithPlural,\n        m : relativeTimeWithPlural,\n        mm : relativeTimeWithPlural,\n        h : 'час',\n        hh : relativeTimeWithPlural,\n        d : 'день',\n        dd : relativeTimeWithPlural,\n        M : 'месяц',\n        MM : relativeTimeWithPlural,\n        y : 'год',\n        yy : relativeTimeWithPlural\n    },\n    meridiemParse: /ночи|утра|дня|вечера/i,\n    isPM : function (input) {\n        return /^(дня|вечера)$/.test(input);\n    },\n    meridiem : function (hour, minute, isLower) {\n        if (hour < 4) {\n            return 'ночи';\n        } else if (hour < 12) {\n            return 'утра';\n        } else if (hour < 17) {\n            return 'дня';\n        } else {\n            return 'вечера';\n        }\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}-(й|го|я)/,\n    ordinal: function (number, period) {\n        switch (period) {\n            case 'M':\n            case 'd':\n            case 'DDD':\n                return number + '-й';\n            case 'D':\n                return number + '-го';\n            case 'w':\n            case 'W':\n                return number + '-я';\n            default:\n                return number;\n        }\n    },\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn ru;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/ru.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/sd.js":
/*!********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/sd.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Sindhi [sd]\n//! author : Narain Sagar : https://github.com/narainsagar\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar months = [\n    'جنوري',\n    'فيبروري',\n    'مارچ',\n    'اپريل',\n    'مئي',\n    'جون',\n    'جولاءِ',\n    'آگسٽ',\n    'سيپٽمبر',\n    'آڪٽوبر',\n    'نومبر',\n    'ڊسمبر'\n];\nvar days = [\n    'آچر',\n    'سومر',\n    'اڱارو',\n    'اربع',\n    'خميس',\n    'جمع',\n    'ڇنڇر'\n];\n\nvar sd = moment.defineLocale('sd', {\n    months : months,\n    monthsShort : months,\n    weekdays : days,\n    weekdaysShort : days,\n    weekdaysMin : days,\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD/MM/YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY HH:mm',\n        LLLL : 'dddd، D MMMM YYYY HH:mm'\n    },\n    meridiemParse: /صبح|شام/,\n    isPM : function (input) {\n        return 'شام' === input;\n    },\n    meridiem : function (hour, minute, isLower) {\n        if (hour < 12) {\n            return 'صبح';\n        }\n        return 'شام';\n    },\n    calendar : {\n        sameDay : '[اڄ] LT',\n        nextDay : '[سڀاڻي] LT',\n        nextWeek : 'dddd [اڳين هفتي تي] LT',\n        lastDay : '[ڪالهه] LT',\n        lastWeek : '[گزريل هفتي] dddd [تي] LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : '%s پوء',\n        past : '%s اڳ',\n        s : 'چند سيڪنڊ',\n        ss : '%d سيڪنڊ',\n        m : 'هڪ منٽ',\n        mm : '%d منٽ',\n        h : 'هڪ ڪلاڪ',\n        hh : '%d ڪلاڪ',\n        d : 'هڪ ڏينهن',\n        dd : '%d ڏينهن',\n        M : 'هڪ مهينو',\n        MM : '%d مهينا',\n        y : 'هڪ سال',\n        yy : '%d سال'\n    },\n    preparse: function (string) {\n        return string.replace(/،/g, ',');\n    },\n    postformat: function (string) {\n        return string.replace(/,/g, '،');\n    },\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn sd;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/sd.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/se.js":
/*!********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/se.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Northern Sami [se]\n//! authors : Bård Rolstad Henriksen : https://github.com/karamell\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n\nvar se = moment.defineLocale('se', {\n    months : 'ođđajagemánnu_guovvamánnu_njukčamánnu_cuoŋománnu_miessemánnu_geassemánnu_suoidnemánnu_borgemánnu_čakčamánnu_golggotmánnu_skábmamánnu_juovlamánnu'.split('_'),\n    monthsShort : 'ođđj_guov_njuk_cuo_mies_geas_suoi_borg_čakč_golg_skáb_juov'.split('_'),\n    weekdays : 'sotnabeaivi_vuossárga_maŋŋebárga_gaskavahkku_duorastat_bearjadat_lávvardat'.split('_'),\n    weekdaysShort : 'sotn_vuos_maŋ_gask_duor_bear_láv'.split('_'),\n    weekdaysMin : 's_v_m_g_d_b_L'.split('_'),\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD.MM.YYYY',\n        LL : 'MMMM D. [b.] YYYY',\n        LLL : 'MMMM D. [b.] YYYY [ti.] HH:mm',\n        LLLL : 'dddd, MMMM D. [b.] YYYY [ti.] HH:mm'\n    },\n    calendar : {\n        sameDay: '[otne ti] LT',\n        nextDay: '[ihttin ti] LT',\n        nextWeek: 'dddd [ti] LT',\n        lastDay: '[ikte ti] LT',\n        lastWeek: '[ovddit] dddd [ti] LT',\n        sameElse: 'L'\n    },\n    relativeTime : {\n        future : '%s geažes',\n        past : 'maŋit %s',\n        s : 'moadde sekunddat',\n        ss: '%d sekunddat',\n        m : 'okta minuhta',\n        mm : '%d minuhtat',\n        h : 'okta diimmu',\n        hh : '%d diimmut',\n        d : 'okta beaivi',\n        dd : '%d beaivvit',\n        M : 'okta mánnu',\n        MM : '%d mánut',\n        y : 'okta jahki',\n        yy : '%d jagit'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal : '%d.',\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn se;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/se.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/si.js":
/*!********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/si.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Sinhalese [si]\n//! author : Sampath Sitinamaluwa : https://github.com/sampathsris\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n/*jshint -W100*/\nvar si = moment.defineLocale('si', {\n    months : 'ජනවාරි_පෙබරවාරි_මාර්තු_අප්‍රේල්_මැයි_ජූනි_ජූලි_අගෝස්තු_සැප්තැම්බර්_ඔක්තෝබර්_නොවැම්බර්_දෙසැම්බර්'.split('_'),\n    monthsShort : 'ජන_පෙබ_මාර්_අප්_මැයි_ජූනි_ජූලි_අගෝ_සැප්_ඔක්_නොවැ_දෙසැ'.split('_'),\n    weekdays : 'ඉරිදා_සඳුදා_අඟහරුවාදා_බදාදා_බ්‍රහස්පතින්දා_සිකුරාදා_සෙනසුරාදා'.split('_'),\n    weekdaysShort : 'ඉරි_සඳු_අඟ_බදා_බ්‍රහ_සිකු_සෙන'.split('_'),\n    weekdaysMin : 'ඉ_ස_අ_බ_බ්‍ර_සි_සෙ'.split('_'),\n    weekdaysParseExact : true,\n    longDateFormat : {\n        LT : 'a h:mm',\n        LTS : 'a h:mm:ss',\n        L : 'YYYY/MM/DD',\n        LL : 'YYYY MMMM D',\n        LLL : 'YYYY MMMM D, a h:mm',\n        LLLL : 'YYYY MMMM D [වැනි] dddd, a h:mm:ss'\n    },\n    calendar : {\n        sameDay : '[අද] LT[ට]',\n        nextDay : '[හෙට] LT[ට]',\n        nextWeek : 'dddd LT[ට]',\n        lastDay : '[ඊයේ] LT[ට]',\n        lastWeek : '[පසුගිය] dddd LT[ට]',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : '%sකින්',\n        past : '%sකට පෙර',\n        s : 'තත්පර කිහිපය',\n        ss : 'තත්පර %d',\n        m : 'මිනිත්තුව',\n        mm : 'මිනිත්තු %d',\n        h : 'පැය',\n        hh : 'පැය %d',\n        d : 'දිනය',\n        dd : 'දින %d',\n        M : 'මාසය',\n        MM : 'මාස %d',\n        y : 'වසර',\n        yy : 'වසර %d'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2} වැනි/,\n    ordinal : function (number) {\n        return number + ' වැනි';\n    },\n    meridiemParse : /පෙර වරු|පස් වරු|පෙ.ව|ප.ව./,\n    isPM : function (input) {\n        return input === 'ප.ව.' || input === 'පස් වරු';\n    },\n    meridiem : function (hours, minutes, isLower) {\n        if (hours > 11) {\n            return isLower ? 'ප.ව.' : 'පස් වරු';\n        } else {\n            return isLower ? 'පෙ.ව.' : 'පෙර වරු';\n        }\n    }\n});\n\nreturn si;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/si.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/sk.js":
/*!********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/sk.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Slovak [sk]\n//! author : Martin Minka : https://github.com/k2s\n//! based on work of petrbela : https://github.com/petrbela\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar months = 'január_február_marec_apríl_máj_jún_júl_august_september_október_november_december'.split('_');\nvar monthsShort = 'jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec'.split('_');\nfunction plural(n) {\n    return (n > 1) && (n < 5);\n}\nfunction translate(number, withoutSuffix, key, isFuture) {\n    var result = number + ' ';\n    switch (key) {\n        case 's':  // a few seconds / in a few seconds / a few seconds ago\n            return (withoutSuffix || isFuture) ? 'pár sekúnd' : 'pár sekundami';\n        case 'ss': // 9 seconds / in 9 seconds / 9 seconds ago\n            if (withoutSuffix || isFuture) {\n                return result + (plural(number) ? 'sekundy' : 'sekúnd');\n            } else {\n                return result + 'sekundami';\n            }\n            break;\n        case 'm':  // a minute / in a minute / a minute ago\n            return withoutSuffix ? 'minúta' : (isFuture ? 'minútu' : 'minútou');\n        case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago\n            if (withoutSuffix || isFuture) {\n                return result + (plural(number) ? 'minúty' : 'minút');\n            } else {\n                return result + 'minútami';\n            }\n            break;\n        case 'h':  // an hour / in an hour / an hour ago\n            return withoutSuffix ? 'hodina' : (isFuture ? 'hodinu' : 'hodinou');\n        case 'hh': // 9 hours / in 9 hours / 9 hours ago\n            if (withoutSuffix || isFuture) {\n                return result + (plural(number) ? 'hodiny' : 'hodín');\n            } else {\n                return result + 'hodinami';\n            }\n            break;\n        case 'd':  // a day / in a day / a day ago\n            return (withoutSuffix || isFuture) ? 'deň' : 'dňom';\n        case 'dd': // 9 days / in 9 days / 9 days ago\n            if (withoutSuffix || isFuture) {\n                return result + (plural(number) ? 'dni' : 'dní');\n            } else {\n                return result + 'dňami';\n            }\n            break;\n        case 'M':  // a month / in a month / a month ago\n            return (withoutSuffix || isFuture) ? 'mesiac' : 'mesiacom';\n        case 'MM': // 9 months / in 9 months / 9 months ago\n            if (withoutSuffix || isFuture) {\n                return result + (plural(number) ? 'mesiace' : 'mesiacov');\n            } else {\n                return result + 'mesiacmi';\n            }\n            break;\n        case 'y':  // a year / in a year / a year ago\n            return (withoutSuffix || isFuture) ? 'rok' : 'rokom';\n        case 'yy': // 9 years / in 9 years / 9 years ago\n            if (withoutSuffix || isFuture) {\n                return result + (plural(number) ? 'roky' : 'rokov');\n            } else {\n                return result + 'rokmi';\n            }\n            break;\n    }\n}\n\nvar sk = moment.defineLocale('sk', {\n    months : months,\n    monthsShort : monthsShort,\n    weekdays : 'nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota'.split('_'),\n    weekdaysShort : 'ne_po_ut_st_št_pi_so'.split('_'),\n    weekdaysMin : 'ne_po_ut_st_št_pi_so'.split('_'),\n    longDateFormat : {\n        LT: 'H:mm',\n        LTS : 'H:mm:ss',\n        L : 'DD.MM.YYYY',\n        LL : 'D. MMMM YYYY',\n        LLL : 'D. MMMM YYYY H:mm',\n        LLLL : 'dddd D. MMMM YYYY H:mm'\n    },\n    calendar : {\n        sameDay: '[dnes o] LT',\n        nextDay: '[zajtra o] LT',\n        nextWeek: function () {\n            switch (this.day()) {\n                case 0:\n                    return '[v nedeľu o] LT';\n                case 1:\n                case 2:\n                    return '[v] dddd [o] LT';\n                case 3:\n                    return '[v stredu o] LT';\n                case 4:\n                    return '[vo štvrtok o] LT';\n                case 5:\n                    return '[v piatok o] LT';\n                case 6:\n                    return '[v sobotu o] LT';\n            }\n        },\n        lastDay: '[včera o] LT',\n        lastWeek: function () {\n            switch (this.day()) {\n                case 0:\n                    return '[minulú nedeľu o] LT';\n                case 1:\n                case 2:\n                    return '[minulý] dddd [o] LT';\n                case 3:\n                    return '[minulú stredu o] LT';\n                case 4:\n                case 5:\n                    return '[minulý] dddd [o] LT';\n                case 6:\n                    return '[minulú sobotu o] LT';\n            }\n        },\n        sameElse: 'L'\n    },\n    relativeTime : {\n        future : 'za %s',\n        past : 'pred %s',\n        s : translate,\n        ss : translate,\n        m : translate,\n        mm : translate,\n        h : translate,\n        hh : translate,\n        d : translate,\n        dd : translate,\n        M : translate,\n        MM : translate,\n        y : translate,\n        yy : translate\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal : '%d.',\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn sk;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/sk.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/sl.js":
/*!********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/sl.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Slovenian [sl]\n//! author : Robert Sedovšek : https://github.com/sedovsek\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nfunction processRelativeTime(number, withoutSuffix, key, isFuture) {\n    var result = number + ' ';\n    switch (key) {\n        case 's':\n            return withoutSuffix || isFuture ? 'nekaj sekund' : 'nekaj sekundami';\n        case 'ss':\n            if (number === 1) {\n                result += withoutSuffix ? 'sekundo' : 'sekundi';\n            } else if (number === 2) {\n                result += withoutSuffix || isFuture ? 'sekundi' : 'sekundah';\n            } else if (number < 5) {\n                result += withoutSuffix || isFuture ? 'sekunde' : 'sekundah';\n            } else {\n                result += withoutSuffix || isFuture ? 'sekund' : 'sekund';\n            }\n            return result;\n        case 'm':\n            return withoutSuffix ? 'ena minuta' : 'eno minuto';\n        case 'mm':\n            if (number === 1) {\n                result += withoutSuffix ? 'minuta' : 'minuto';\n            } else if (number === 2) {\n                result += withoutSuffix || isFuture ? 'minuti' : 'minutama';\n            } else if (number < 5) {\n                result += withoutSuffix || isFuture ? 'minute' : 'minutami';\n            } else {\n                result += withoutSuffix || isFuture ? 'minut' : 'minutami';\n            }\n            return result;\n        case 'h':\n            return withoutSuffix ? 'ena ura' : 'eno uro';\n        case 'hh':\n            if (number === 1) {\n                result += withoutSuffix ? 'ura' : 'uro';\n            } else if (number === 2) {\n                result += withoutSuffix || isFuture ? 'uri' : 'urama';\n            } else if (number < 5) {\n                result += withoutSuffix || isFuture ? 'ure' : 'urami';\n            } else {\n                result += withoutSuffix || isFuture ? 'ur' : 'urami';\n            }\n            return result;\n        case 'd':\n            return withoutSuffix || isFuture ? 'en dan' : 'enim dnem';\n        case 'dd':\n            if (number === 1) {\n                result += withoutSuffix || isFuture ? 'dan' : 'dnem';\n            } else if (number === 2) {\n                result += withoutSuffix || isFuture ? 'dni' : 'dnevoma';\n            } else {\n                result += withoutSuffix || isFuture ? 'dni' : 'dnevi';\n            }\n            return result;\n        case 'M':\n            return withoutSuffix || isFuture ? 'en mesec' : 'enim mesecem';\n        case 'MM':\n            if (number === 1) {\n                result += withoutSuffix || isFuture ? 'mesec' : 'mesecem';\n            } else if (number === 2) {\n                result += withoutSuffix || isFuture ? 'meseca' : 'mesecema';\n            } else if (number < 5) {\n                result += withoutSuffix || isFuture ? 'mesece' : 'meseci';\n            } else {\n                result += withoutSuffix || isFuture ? 'mesecev' : 'meseci';\n            }\n            return result;\n        case 'y':\n            return withoutSuffix || isFuture ? 'eno leto' : 'enim letom';\n        case 'yy':\n            if (number === 1) {\n                result += withoutSuffix || isFuture ? 'leto' : 'letom';\n            } else if (number === 2) {\n                result += withoutSuffix || isFuture ? 'leti' : 'letoma';\n            } else if (number < 5) {\n                result += withoutSuffix || isFuture ? 'leta' : 'leti';\n            } else {\n                result += withoutSuffix || isFuture ? 'let' : 'leti';\n            }\n            return result;\n    }\n}\n\nvar sl = moment.defineLocale('sl', {\n    months : 'januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december'.split('_'),\n    monthsShort : 'jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.'.split('_'),\n    monthsParseExact: true,\n    weekdays : 'nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota'.split('_'),\n    weekdaysShort : 'ned._pon._tor._sre._čet._pet._sob.'.split('_'),\n    weekdaysMin : 'ne_po_to_sr_če_pe_so'.split('_'),\n    weekdaysParseExact : true,\n    longDateFormat : {\n        LT : 'H:mm',\n        LTS : 'H:mm:ss',\n        L : 'DD.MM.YYYY',\n        LL : 'D. MMMM YYYY',\n        LLL : 'D. MMMM YYYY H:mm',\n        LLLL : 'dddd, D. MMMM YYYY H:mm'\n    },\n    calendar : {\n        sameDay  : '[danes ob] LT',\n        nextDay  : '[jutri ob] LT',\n\n        nextWeek : function () {\n            switch (this.day()) {\n                case 0:\n                    return '[v] [nedeljo] [ob] LT';\n                case 3:\n                    return '[v] [sredo] [ob] LT';\n                case 6:\n                    return '[v] [soboto] [ob] LT';\n                case 1:\n                case 2:\n                case 4:\n                case 5:\n                    return '[v] dddd [ob] LT';\n            }\n        },\n        lastDay  : '[včeraj ob] LT',\n        lastWeek : function () {\n            switch (this.day()) {\n                case 0:\n                    return '[prejšnjo] [nedeljo] [ob] LT';\n                case 3:\n                    return '[prejšnjo] [sredo] [ob] LT';\n                case 6:\n                    return '[prejšnjo] [soboto] [ob] LT';\n                case 1:\n                case 2:\n                case 4:\n                case 5:\n                    return '[prejšnji] dddd [ob] LT';\n            }\n        },\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : 'čez %s',\n        past   : 'pred %s',\n        s      : processRelativeTime,\n        ss     : processRelativeTime,\n        m      : processRelativeTime,\n        mm     : processRelativeTime,\n        h      : processRelativeTime,\n        hh     : processRelativeTime,\n        d      : processRelativeTime,\n        dd     : processRelativeTime,\n        M      : processRelativeTime,\n        MM     : processRelativeTime,\n        y      : processRelativeTime,\n        yy     : processRelativeTime\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal : '%d.',\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 7  // The week that contains Jan 1st is the first week of the year.\n    }\n});\n\nreturn sl;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/sl.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/sq.js":
/*!********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/sq.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Albanian [sq]\n//! author : Flakërim Ismani : https://github.com/flakerimi\n//! author : Menelion Elensúle : https://github.com/Oire\n//! author : Oerd Cukalla : https://github.com/oerd\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar sq = moment.defineLocale('sq', {\n    months : 'Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor'.split('_'),\n    monthsShort : 'Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj'.split('_'),\n    weekdays : 'E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë'.split('_'),\n    weekdaysShort : 'Die_Hën_Mar_Mër_Enj_Pre_Sht'.split('_'),\n    weekdaysMin : 'D_H_Ma_Më_E_P_Sh'.split('_'),\n    weekdaysParseExact : true,\n    meridiemParse: /PD|MD/,\n    isPM: function (input) {\n        return input.charAt(0) === 'M';\n    },\n    meridiem : function (hours, minutes, isLower) {\n        return hours < 12 ? 'PD' : 'MD';\n    },\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD/MM/YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY HH:mm',\n        LLLL : 'dddd, D MMMM YYYY HH:mm'\n    },\n    calendar : {\n        sameDay : '[Sot në] LT',\n        nextDay : '[Nesër në] LT',\n        nextWeek : 'dddd [në] LT',\n        lastDay : '[Dje në] LT',\n        lastWeek : 'dddd [e kaluar në] LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : 'në %s',\n        past : '%s më parë',\n        s : 'disa sekonda',\n        ss : '%d sekonda',\n        m : 'një minutë',\n        mm : '%d minuta',\n        h : 'një orë',\n        hh : '%d orë',\n        d : 'një ditë',\n        dd : '%d ditë',\n        M : 'një muaj',\n        MM : '%d muaj',\n        y : 'një vit',\n        yy : '%d vite'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal : '%d.',\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn sq;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/sq.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/sr-cyrl.js":
/*!*************************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/sr-cyrl.js ***!
  \*************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Serbian Cyrillic [sr-cyrl]\n//! author : Milan Janačković<milanjanackovic@gmail.com> : https://github.com/milan-j\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar translator = {\n    words: { //Different grammatical cases\n        ss: ['секунда', 'секунде', 'секунди'],\n        m: ['један минут', 'једне минуте'],\n        mm: ['минут', 'минуте', 'минута'],\n        h: ['један сат', 'једног сата'],\n        hh: ['сат', 'сата', 'сати'],\n        dd: ['дан', 'дана', 'дана'],\n        MM: ['месец', 'месеца', 'месеци'],\n        yy: ['година', 'године', 'година']\n    },\n    correctGrammaticalCase: function (number, wordKey) {\n        return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]);\n    },\n    translate: function (number, withoutSuffix, key) {\n        var wordKey = translator.words[key];\n        if (key.length === 1) {\n            return withoutSuffix ? wordKey[0] : wordKey[1];\n        } else {\n            return number + ' ' + translator.correctGrammaticalCase(number, wordKey);\n        }\n    }\n};\n\nvar srCyrl = moment.defineLocale('sr-cyrl', {\n    months: 'јануар_фебруар_март_април_мај_јун_јул_август_септембар_октобар_новембар_децембар'.split('_'),\n    monthsShort: 'јан._феб._мар._апр._мај_јун_јул_авг._сеп._окт._нов._дец.'.split('_'),\n    monthsParseExact: true,\n    weekdays: 'недеља_понедељак_уторак_среда_четвртак_петак_субота'.split('_'),\n    weekdaysShort: 'нед._пон._уто._сре._чет._пет._суб.'.split('_'),\n    weekdaysMin: 'не_по_ут_ср_че_пе_су'.split('_'),\n    weekdaysParseExact : true,\n    longDateFormat: {\n        LT: 'H:mm',\n        LTS : 'H:mm:ss',\n        L: 'DD.MM.YYYY',\n        LL: 'D. MMMM YYYY',\n        LLL: 'D. MMMM YYYY H:mm',\n        LLLL: 'dddd, D. MMMM YYYY H:mm'\n    },\n    calendar: {\n        sameDay: '[данас у] LT',\n        nextDay: '[сутра у] LT',\n        nextWeek: function () {\n            switch (this.day()) {\n                case 0:\n                    return '[у] [недељу] [у] LT';\n                case 3:\n                    return '[у] [среду] [у] LT';\n                case 6:\n                    return '[у] [суботу] [у] LT';\n                case 1:\n                case 2:\n                case 4:\n                case 5:\n                    return '[у] dddd [у] LT';\n            }\n        },\n        lastDay  : '[јуче у] LT',\n        lastWeek : function () {\n            var lastWeekDays = [\n                '[прошле] [недеље] [у] LT',\n                '[прошлог] [понедељка] [у] LT',\n                '[прошлог] [уторка] [у] LT',\n                '[прошле] [среде] [у] LT',\n                '[прошлог] [четвртка] [у] LT',\n                '[прошлог] [петка] [у] LT',\n                '[прошле] [суботе] [у] LT'\n            ];\n            return lastWeekDays[this.day()];\n        },\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : 'за %s',\n        past   : 'пре %s',\n        s      : 'неколико секунди',\n        ss     : translator.translate,\n        m      : translator.translate,\n        mm     : translator.translate,\n        h      : translator.translate,\n        hh     : translator.translate,\n        d      : 'дан',\n        dd     : translator.translate,\n        M      : 'месец',\n        MM     : translator.translate,\n        y      : 'годину',\n        yy     : translator.translate\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal : '%d.',\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 7  // The week that contains Jan 1st is the first week of the year.\n    }\n});\n\nreturn srCyrl;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/sr-cyrl.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/sr.js":
/*!********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/sr.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Serbian [sr]\n//! author : Milan Janačković<milanjanackovic@gmail.com> : https://github.com/milan-j\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar translator = {\n    words: { //Different grammatical cases\n        ss: ['sekunda', 'sekunde', 'sekundi'],\n        m: ['jedan minut', 'jedne minute'],\n        mm: ['minut', 'minute', 'minuta'],\n        h: ['jedan sat', 'jednog sata'],\n        hh: ['sat', 'sata', 'sati'],\n        dd: ['dan', 'dana', 'dana'],\n        MM: ['mesec', 'meseca', 'meseci'],\n        yy: ['godina', 'godine', 'godina']\n    },\n    correctGrammaticalCase: function (number, wordKey) {\n        return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]);\n    },\n    translate: function (number, withoutSuffix, key) {\n        var wordKey = translator.words[key];\n        if (key.length === 1) {\n            return withoutSuffix ? wordKey[0] : wordKey[1];\n        } else {\n            return number + ' ' + translator.correctGrammaticalCase(number, wordKey);\n        }\n    }\n};\n\nvar sr = moment.defineLocale('sr', {\n    months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split('_'),\n    monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'),\n    monthsParseExact: true,\n    weekdays: 'nedelja_ponedeljak_utorak_sreda_četvrtak_petak_subota'.split('_'),\n    weekdaysShort: 'ned._pon._uto._sre._čet._pet._sub.'.split('_'),\n    weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),\n    weekdaysParseExact : true,\n    longDateFormat: {\n        LT: 'H:mm',\n        LTS : 'H:mm:ss',\n        L: 'DD.MM.YYYY',\n        LL: 'D. MMMM YYYY',\n        LLL: 'D. MMMM YYYY H:mm',\n        LLLL: 'dddd, D. MMMM YYYY H:mm'\n    },\n    calendar: {\n        sameDay: '[danas u] LT',\n        nextDay: '[sutra u] LT',\n        nextWeek: function () {\n            switch (this.day()) {\n                case 0:\n                    return '[u] [nedelju] [u] LT';\n                case 3:\n                    return '[u] [sredu] [u] LT';\n                case 6:\n                    return '[u] [subotu] [u] LT';\n                case 1:\n                case 2:\n                case 4:\n                case 5:\n                    return '[u] dddd [u] LT';\n            }\n        },\n        lastDay  : '[juče u] LT',\n        lastWeek : function () {\n            var lastWeekDays = [\n                '[prošle] [nedelje] [u] LT',\n                '[prošlog] [ponedeljka] [u] LT',\n                '[prošlog] [utorka] [u] LT',\n                '[prošle] [srede] [u] LT',\n                '[prošlog] [četvrtka] [u] LT',\n                '[prošlog] [petka] [u] LT',\n                '[prošle] [subote] [u] LT'\n            ];\n            return lastWeekDays[this.day()];\n        },\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : 'za %s',\n        past   : 'pre %s',\n        s      : 'nekoliko sekundi',\n        ss     : translator.translate,\n        m      : translator.translate,\n        mm     : translator.translate,\n        h      : translator.translate,\n        hh     : translator.translate,\n        d      : 'dan',\n        dd     : translator.translate,\n        M      : 'mesec',\n        MM     : translator.translate,\n        y      : 'godinu',\n        yy     : translator.translate\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal : '%d.',\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 7  // The week that contains Jan 1st is the first week of the year.\n    }\n});\n\nreturn sr;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/sr.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/ss.js":
/*!********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/ss.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : siSwati [ss]\n//! author : Nicolai Davies<mail@nicolai.io> : https://github.com/nicolaidavies\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n\nvar ss = moment.defineLocale('ss', {\n    months : \"Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni\".split('_'),\n    monthsShort : 'Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo'.split('_'),\n    weekdays : 'Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo'.split('_'),\n    weekdaysShort : 'Lis_Umb_Lsb_Les_Lsi_Lsh_Umg'.split('_'),\n    weekdaysMin : 'Li_Us_Lb_Lt_Ls_Lh_Ug'.split('_'),\n    weekdaysParseExact : true,\n    longDateFormat : {\n        LT : 'h:mm A',\n        LTS : 'h:mm:ss A',\n        L : 'DD/MM/YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY h:mm A',\n        LLLL : 'dddd, D MMMM YYYY h:mm A'\n    },\n    calendar : {\n        sameDay : '[Namuhla nga] LT',\n        nextDay : '[Kusasa nga] LT',\n        nextWeek : 'dddd [nga] LT',\n        lastDay : '[Itolo nga] LT',\n        lastWeek : 'dddd [leliphelile] [nga] LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : 'nga %s',\n        past : 'wenteka nga %s',\n        s : 'emizuzwana lomcane',\n        ss : '%d mzuzwana',\n        m : 'umzuzu',\n        mm : '%d emizuzu',\n        h : 'lihora',\n        hh : '%d emahora',\n        d : 'lilanga',\n        dd : '%d emalanga',\n        M : 'inyanga',\n        MM : '%d tinyanga',\n        y : 'umnyaka',\n        yy : '%d iminyaka'\n    },\n    meridiemParse: /ekuseni|emini|entsambama|ebusuku/,\n    meridiem : function (hours, minutes, isLower) {\n        if (hours < 11) {\n            return 'ekuseni';\n        } else if (hours < 15) {\n            return 'emini';\n        } else if (hours < 19) {\n            return 'entsambama';\n        } else {\n            return 'ebusuku';\n        }\n    },\n    meridiemHour : function (hour, meridiem) {\n        if (hour === 12) {\n            hour = 0;\n        }\n        if (meridiem === 'ekuseni') {\n            return hour;\n        } else if (meridiem === 'emini') {\n            return hour >= 11 ? hour : hour + 12;\n        } else if (meridiem === 'entsambama' || meridiem === 'ebusuku') {\n            if (hour === 0) {\n                return 0;\n            }\n            return hour + 12;\n        }\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}/,\n    ordinal : '%d',\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn ss;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/ss.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/sv.js":
/*!********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/sv.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Swedish [sv]\n//! author : Jens Alm : https://github.com/ulmus\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar sv = moment.defineLocale('sv', {\n    months : 'januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december'.split('_'),\n    monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),\n    weekdays : 'söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag'.split('_'),\n    weekdaysShort : 'sön_mån_tis_ons_tor_fre_lör'.split('_'),\n    weekdaysMin : 'sö_må_ti_on_to_fr_lö'.split('_'),\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'YYYY-MM-DD',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY [kl.] HH:mm',\n        LLLL : 'dddd D MMMM YYYY [kl.] HH:mm',\n        lll : 'D MMM YYYY HH:mm',\n        llll : 'ddd D MMM YYYY HH:mm'\n    },\n    calendar : {\n        sameDay: '[Idag] LT',\n        nextDay: '[Imorgon] LT',\n        lastDay: '[Igår] LT',\n        nextWeek: '[På] dddd LT',\n        lastWeek: '[I] dddd[s] LT',\n        sameElse: 'L'\n    },\n    relativeTime : {\n        future : 'om %s',\n        past : 'för %s sedan',\n        s : 'några sekunder',\n        ss : '%d sekunder',\n        m : 'en minut',\n        mm : '%d minuter',\n        h : 'en timme',\n        hh : '%d timmar',\n        d : 'en dag',\n        dd : '%d dagar',\n        M : 'en månad',\n        MM : '%d månader',\n        y : 'ett år',\n        yy : '%d år'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(e|a)/,\n    ordinal : function (number) {\n        var b = number % 10,\n            output = (~~(number % 100 / 10) === 1) ? 'e' :\n            (b === 1) ? 'a' :\n            (b === 2) ? 'a' :\n            (b === 3) ? 'e' : 'e';\n        return number + output;\n    },\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn sv;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/sv.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/sw.js":
/*!********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/sw.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Swahili [sw]\n//! author : Fahad Kassim : https://github.com/fadsel\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar sw = moment.defineLocale('sw', {\n    months : 'Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba'.split('_'),\n    monthsShort : 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des'.split('_'),\n    weekdays : 'Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi'.split('_'),\n    weekdaysShort : 'Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos'.split('_'),\n    weekdaysMin : 'J2_J3_J4_J5_Al_Ij_J1'.split('_'),\n    weekdaysParseExact : true,\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD.MM.YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY HH:mm',\n        LLLL : 'dddd, D MMMM YYYY HH:mm'\n    },\n    calendar : {\n        sameDay : '[leo saa] LT',\n        nextDay : '[kesho saa] LT',\n        nextWeek : '[wiki ijayo] dddd [saat] LT',\n        lastDay : '[jana] LT',\n        lastWeek : '[wiki iliyopita] dddd [saat] LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : '%s baadaye',\n        past : 'tokea %s',\n        s : 'hivi punde',\n        ss : 'sekunde %d',\n        m : 'dakika moja',\n        mm : 'dakika %d',\n        h : 'saa limoja',\n        hh : 'masaa %d',\n        d : 'siku moja',\n        dd : 'masiku %d',\n        M : 'mwezi mmoja',\n        MM : 'miezi %d',\n        y : 'mwaka mmoja',\n        yy : 'miaka %d'\n    },\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 7  // The week that contains Jan 1st is the first week of the year.\n    }\n});\n\nreturn sw;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/sw.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/ta.js":
/*!********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/ta.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Tamil [ta]\n//! author : Arjunkumar Krishnamoorthy : https://github.com/tk120404\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar symbolMap = {\n    '1': '௧',\n    '2': '௨',\n    '3': '௩',\n    '4': '௪',\n    '5': '௫',\n    '6': '௬',\n    '7': '௭',\n    '8': '௮',\n    '9': '௯',\n    '0': '௦'\n};\nvar numberMap = {\n    '௧': '1',\n    '௨': '2',\n    '௩': '3',\n    '௪': '4',\n    '௫': '5',\n    '௬': '6',\n    '௭': '7',\n    '௮': '8',\n    '௯': '9',\n    '௦': '0'\n};\n\nvar ta = moment.defineLocale('ta', {\n    months : 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split('_'),\n    monthsShort : 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split('_'),\n    weekdays : 'ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை'.split('_'),\n    weekdaysShort : 'ஞாயிறு_திங்கள்_செவ்வாய்_புதன்_வியாழன்_வெள்ளி_சனி'.split('_'),\n    weekdaysMin : 'ஞா_தி_செ_பு_வி_வெ_ச'.split('_'),\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD/MM/YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY, HH:mm',\n        LLLL : 'dddd, D MMMM YYYY, HH:mm'\n    },\n    calendar : {\n        sameDay : '[இன்று] LT',\n        nextDay : '[நாளை] LT',\n        nextWeek : 'dddd, LT',\n        lastDay : '[நேற்று] LT',\n        lastWeek : '[கடந்த வாரம்] dddd, LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : '%s இல்',\n        past : '%s முன்',\n        s : 'ஒரு சில விநாடிகள்',\n        ss : '%d விநாடிகள்',\n        m : 'ஒரு நிமிடம்',\n        mm : '%d நிமிடங்கள்',\n        h : 'ஒரு மணி நேரம்',\n        hh : '%d மணி நேரம்',\n        d : 'ஒரு நாள்',\n        dd : '%d நாட்கள்',\n        M : 'ஒரு மாதம்',\n        MM : '%d மாதங்கள்',\n        y : 'ஒரு வருடம்',\n        yy : '%d ஆண்டுகள்'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}வது/,\n    ordinal : function (number) {\n        return number + 'வது';\n    },\n    preparse: function (string) {\n        return string.replace(/[௧௨௩௪௫௬௭௮௯௦]/g, function (match) {\n            return numberMap[match];\n        });\n    },\n    postformat: function (string) {\n        return string.replace(/\\d/g, function (match) {\n            return symbolMap[match];\n        });\n    },\n    // refer http://ta.wikipedia.org/s/1er1\n    meridiemParse: /யாமம்|வைகறை|காலை|நண்பகல்|எற்பாடு|மாலை/,\n    meridiem : function (hour, minute, isLower) {\n        if (hour < 2) {\n            return ' யாமம்';\n        } else if (hour < 6) {\n            return ' வைகறை';  // வைகறை\n        } else if (hour < 10) {\n            return ' காலை'; // காலை\n        } else if (hour < 14) {\n            return ' நண்பகல்'; // நண்பகல்\n        } else if (hour < 18) {\n            return ' எற்பாடு'; // எற்பாடு\n        } else if (hour < 22) {\n            return ' மாலை'; // மாலை\n        } else {\n            return ' யாமம்';\n        }\n    },\n    meridiemHour : function (hour, meridiem) {\n        if (hour === 12) {\n            hour = 0;\n        }\n        if (meridiem === 'யாமம்') {\n            return hour < 2 ? hour : hour + 12;\n        } else if (meridiem === 'வைகறை' || meridiem === 'காலை') {\n            return hour;\n        } else if (meridiem === 'நண்பகல்') {\n            return hour >= 10 ? hour : hour + 12;\n        } else {\n            return hour + 12;\n        }\n    },\n    week : {\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\nreturn ta;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/ta.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/te.js":
/*!********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/te.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Telugu [te]\n//! author : Krishna Chaitanya Thota : https://github.com/kcthota\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar te = moment.defineLocale('te', {\n    months : 'జనవరి_ఫిబ్రవరి_మార్చి_ఏప్రిల్_మే_జూన్_జూలై_ఆగస్టు_సెప్టెంబర్_అక్టోబర్_నవంబర్_డిసెంబర్'.split('_'),\n    monthsShort : 'జన._ఫిబ్ర._మార్చి_ఏప్రి._మే_జూన్_జూలై_ఆగ._సెప్._అక్టో._నవ._డిసె.'.split('_'),\n    monthsParseExact : true,\n    weekdays : 'ఆదివారం_సోమవారం_మంగళవారం_బుధవారం_గురువారం_శుక్రవారం_శనివారం'.split('_'),\n    weekdaysShort : 'ఆది_సోమ_మంగళ_బుధ_గురు_శుక్ర_శని'.split('_'),\n    weekdaysMin : 'ఆ_సో_మం_బు_గు_శు_శ'.split('_'),\n    longDateFormat : {\n        LT : 'A h:mm',\n        LTS : 'A h:mm:ss',\n        L : 'DD/MM/YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY, A h:mm',\n        LLLL : 'dddd, D MMMM YYYY, A h:mm'\n    },\n    calendar : {\n        sameDay : '[నేడు] LT',\n        nextDay : '[రేపు] LT',\n        nextWeek : 'dddd, LT',\n        lastDay : '[నిన్న] LT',\n        lastWeek : '[గత] dddd, LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : '%s లో',\n        past : '%s క్రితం',\n        s : 'కొన్ని క్షణాలు',\n        ss : '%d సెకన్లు',\n        m : 'ఒక నిమిషం',\n        mm : '%d నిమిషాలు',\n        h : 'ఒక గంట',\n        hh : '%d గంటలు',\n        d : 'ఒక రోజు',\n        dd : '%d రోజులు',\n        M : 'ఒక నెల',\n        MM : '%d నెలలు',\n        y : 'ఒక సంవత్సరం',\n        yy : '%d సంవత్సరాలు'\n    },\n    dayOfMonthOrdinalParse : /\\d{1,2}వ/,\n    ordinal : '%dవ',\n    meridiemParse: /రాత్రి|ఉదయం|మధ్యాహ్నం|సాయంత్రం/,\n    meridiemHour : function (hour, meridiem) {\n        if (hour === 12) {\n            hour = 0;\n        }\n        if (meridiem === 'రాత్రి') {\n            return hour < 4 ? hour : hour + 12;\n        } else if (meridiem === 'ఉదయం') {\n            return hour;\n        } else if (meridiem === 'మధ్యాహ్నం') {\n            return hour >= 10 ? hour : hour + 12;\n        } else if (meridiem === 'సాయంత్రం') {\n            return hour + 12;\n        }\n    },\n    meridiem : function (hour, minute, isLower) {\n        if (hour < 4) {\n            return 'రాత్రి';\n        } else if (hour < 10) {\n            return 'ఉదయం';\n        } else if (hour < 17) {\n            return 'మధ్యాహ్నం';\n        } else if (hour < 20) {\n            return 'సాయంత్రం';\n        } else {\n            return 'రాత్రి';\n        }\n    },\n    week : {\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\nreturn te;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/te.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/tet.js":
/*!*********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/tet.js ***!
  \*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Tetun Dili (East Timor) [tet]\n//! author : Joshua Brooks : https://github.com/joshbrooks\n//! author : Onorio De J. Afonso : https://github.com/marobo\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar tet = moment.defineLocale('tet', {\n    months : 'Janeiru_Fevereiru_Marsu_Abril_Maiu_Juniu_Juliu_Augustu_Setembru_Outubru_Novembru_Dezembru'.split('_'),\n    monthsShort : 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Aug_Set_Out_Nov_Dez'.split('_'),\n    weekdays : 'Domingu_Segunda_Tersa_Kuarta_Kinta_Sexta_Sabadu'.split('_'),\n    weekdaysShort : 'Dom_Seg_Ters_Kua_Kint_Sext_Sab'.split('_'),\n    weekdaysMin : 'Do_Seg_Te_Ku_Ki_Sex_Sa'.split('_'),\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD/MM/YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY HH:mm',\n        LLLL : 'dddd, D MMMM YYYY HH:mm'\n    },\n    calendar : {\n        sameDay: '[Ohin iha] LT',\n        nextDay: '[Aban iha] LT',\n        nextWeek: 'dddd [iha] LT',\n        lastDay: '[Horiseik iha] LT',\n        lastWeek: 'dddd [semana kotuk] [iha] LT',\n        sameElse: 'L'\n    },\n    relativeTime : {\n        future : 'iha %s',\n        past : '%s liuba',\n        s : 'minutu balun',\n        ss : 'minutu %d',\n        m : 'minutu ida',\n        mm : 'minutus %d',\n        h : 'horas ida',\n        hh : 'horas %d',\n        d : 'loron ida',\n        dd : 'loron %d',\n        M : 'fulan ida',\n        MM : 'fulan %d',\n        y : 'tinan ida',\n        yy : 'tinan %d'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n    ordinal : function (number) {\n        var b = number % 10,\n            output = (~~(number % 100 / 10) === 1) ? 'th' :\n            (b === 1) ? 'st' :\n            (b === 2) ? 'nd' :\n            (b === 3) ? 'rd' : 'th';\n        return number + output;\n    },\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn tet;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/tet.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/th.js":
/*!********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/th.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Thai [th]\n//! author : Kridsada Thanabulpong : https://github.com/sirn\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar th = moment.defineLocale('th', {\n    months : 'มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม'.split('_'),\n    monthsShort : 'ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.'.split('_'),\n    monthsParseExact: true,\n    weekdays : 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์'.split('_'),\n    weekdaysShort : 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์'.split('_'), // yes, three characters difference\n    weekdaysMin : 'อา._จ._อ._พ._พฤ._ศ._ส.'.split('_'),\n    weekdaysParseExact : true,\n    longDateFormat : {\n        LT : 'H:mm',\n        LTS : 'H:mm:ss',\n        L : 'DD/MM/YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY เวลา H:mm',\n        LLLL : 'วันddddที่ D MMMM YYYY เวลา H:mm'\n    },\n    meridiemParse: /ก่อนเที่ยง|หลังเที่ยง/,\n    isPM: function (input) {\n        return input === 'หลังเที่ยง';\n    },\n    meridiem : function (hour, minute, isLower) {\n        if (hour < 12) {\n            return 'ก่อนเที่ยง';\n        } else {\n            return 'หลังเที่ยง';\n        }\n    },\n    calendar : {\n        sameDay : '[วันนี้ เวลา] LT',\n        nextDay : '[พรุ่งนี้ เวลา] LT',\n        nextWeek : 'dddd[หน้า เวลา] LT',\n        lastDay : '[เมื่อวานนี้ เวลา] LT',\n        lastWeek : '[วัน]dddd[ที่แล้ว เวลา] LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : 'อีก %s',\n        past : '%sที่แล้ว',\n        s : 'ไม่กี่วินาที',\n        ss : '%d วินาที',\n        m : '1 นาที',\n        mm : '%d นาที',\n        h : '1 ชั่วโมง',\n        hh : '%d ชั่วโมง',\n        d : '1 วัน',\n        dd : '%d วัน',\n        M : '1 เดือน',\n        MM : '%d เดือน',\n        y : '1 ปี',\n        yy : '%d ปี'\n    }\n});\n\nreturn th;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/th.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/tl-ph.js":
/*!***********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/tl-ph.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Tagalog (Philippines) [tl-ph]\n//! author : Dan Hagman : https://github.com/hagmandan\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar tlPh = moment.defineLocale('tl-ph', {\n    months : 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split('_'),\n    monthsShort : 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'),\n    weekdays : 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split('_'),\n    weekdaysShort : 'Lin_Lun_Mar_Miy_Huw_Biy_Sab'.split('_'),\n    weekdaysMin : 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'),\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'MM/D/YYYY',\n        LL : 'MMMM D, YYYY',\n        LLL : 'MMMM D, YYYY HH:mm',\n        LLLL : 'dddd, MMMM DD, YYYY HH:mm'\n    },\n    calendar : {\n        sameDay: 'LT [ngayong araw]',\n        nextDay: '[Bukas ng] LT',\n        nextWeek: 'LT [sa susunod na] dddd',\n        lastDay: 'LT [kahapon]',\n        lastWeek: 'LT [noong nakaraang] dddd',\n        sameElse: 'L'\n    },\n    relativeTime : {\n        future : 'sa loob ng %s',\n        past : '%s ang nakalipas',\n        s : 'ilang segundo',\n        ss : '%d segundo',\n        m : 'isang minuto',\n        mm : '%d minuto',\n        h : 'isang oras',\n        hh : '%d oras',\n        d : 'isang araw',\n        dd : '%d araw',\n        M : 'isang buwan',\n        MM : '%d buwan',\n        y : 'isang taon',\n        yy : '%d taon'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}/,\n    ordinal : function (number) {\n        return number;\n    },\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn tlPh;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/tl-ph.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/tlh.js":
/*!*********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/tlh.js ***!
  \*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Klingon [tlh]\n//! author : Dominika Kruk : https://github.com/amaranthrose\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar numbersNouns = 'pagh_wa’_cha’_wej_loS_vagh_jav_Soch_chorgh_Hut'.split('_');\n\nfunction translateFuture(output) {\n    var time = output;\n    time = (output.indexOf('jaj') !== -1) ?\n    time.slice(0, -3) + 'leS' :\n    (output.indexOf('jar') !== -1) ?\n    time.slice(0, -3) + 'waQ' :\n    (output.indexOf('DIS') !== -1) ?\n    time.slice(0, -3) + 'nem' :\n    time + ' pIq';\n    return time;\n}\n\nfunction translatePast(output) {\n    var time = output;\n    time = (output.indexOf('jaj') !== -1) ?\n    time.slice(0, -3) + 'Hu’' :\n    (output.indexOf('jar') !== -1) ?\n    time.slice(0, -3) + 'wen' :\n    (output.indexOf('DIS') !== -1) ?\n    time.slice(0, -3) + 'ben' :\n    time + ' ret';\n    return time;\n}\n\nfunction translate(number, withoutSuffix, string, isFuture) {\n    var numberNoun = numberAsNoun(number);\n    switch (string) {\n        case 'ss':\n            return numberNoun + ' lup';\n        case 'mm':\n            return numberNoun + ' tup';\n        case 'hh':\n            return numberNoun + ' rep';\n        case 'dd':\n            return numberNoun + ' jaj';\n        case 'MM':\n            return numberNoun + ' jar';\n        case 'yy':\n            return numberNoun + ' DIS';\n    }\n}\n\nfunction numberAsNoun(number) {\n    var hundred = Math.floor((number % 1000) / 100),\n    ten = Math.floor((number % 100) / 10),\n    one = number % 10,\n    word = '';\n    if (hundred > 0) {\n        word += numbersNouns[hundred] + 'vatlh';\n    }\n    if (ten > 0) {\n        word += ((word !== '') ? ' ' : '') + numbersNouns[ten] + 'maH';\n    }\n    if (one > 0) {\n        word += ((word !== '') ? ' ' : '') + numbersNouns[one];\n    }\n    return (word === '') ? 'pagh' : word;\n}\n\nvar tlh = moment.defineLocale('tlh', {\n    months : 'tera’ jar wa’_tera’ jar cha’_tera’ jar wej_tera’ jar loS_tera’ jar vagh_tera’ jar jav_tera’ jar Soch_tera’ jar chorgh_tera’ jar Hut_tera’ jar wa’maH_tera’ jar wa’maH wa’_tera’ jar wa’maH cha’'.split('_'),\n    monthsShort : 'jar wa’_jar cha’_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa’maH_jar wa’maH wa’_jar wa’maH cha’'.split('_'),\n    monthsParseExact : true,\n    weekdays : 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),\n    weekdaysShort : 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),\n    weekdaysMin : 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD.MM.YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY HH:mm',\n        LLLL : 'dddd, D MMMM YYYY HH:mm'\n    },\n    calendar : {\n        sameDay: '[DaHjaj] LT',\n        nextDay: '[wa’leS] LT',\n        nextWeek: 'LLL',\n        lastDay: '[wa’Hu’] LT',\n        lastWeek: 'LLL',\n        sameElse: 'L'\n    },\n    relativeTime : {\n        future : translateFuture,\n        past : translatePast,\n        s : 'puS lup',\n        ss : translate,\n        m : 'wa’ tup',\n        mm : translate,\n        h : 'wa’ rep',\n        hh : translate,\n        d : 'wa’ jaj',\n        dd : translate,\n        M : 'wa’ jar',\n        MM : translate,\n        y : 'wa’ DIS',\n        yy : translate\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal : '%d.',\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn tlh;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/tlh.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/tr.js":
/*!********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/tr.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Turkish [tr]\n//! authors : Erhan Gundogan : https://github.com/erhangundogan,\n//!           Burak Yiğit Kaya: https://github.com/BYK\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar suffixes = {\n    1: '\\'inci',\n    5: '\\'inci',\n    8: '\\'inci',\n    70: '\\'inci',\n    80: '\\'inci',\n    2: '\\'nci',\n    7: '\\'nci',\n    20: '\\'nci',\n    50: '\\'nci',\n    3: '\\'üncü',\n    4: '\\'üncü',\n    100: '\\'üncü',\n    6: '\\'ncı',\n    9: '\\'uncu',\n    10: '\\'uncu',\n    30: '\\'uncu',\n    60: '\\'ıncı',\n    90: '\\'ıncı'\n};\n\nvar tr = moment.defineLocale('tr', {\n    months : 'Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık'.split('_'),\n    monthsShort : 'Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara'.split('_'),\n    weekdays : 'Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi'.split('_'),\n    weekdaysShort : 'Paz_Pts_Sal_Çar_Per_Cum_Cts'.split('_'),\n    weekdaysMin : 'Pz_Pt_Sa_Ça_Pe_Cu_Ct'.split('_'),\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD.MM.YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY HH:mm',\n        LLLL : 'dddd, D MMMM YYYY HH:mm'\n    },\n    calendar : {\n        sameDay : '[bugün saat] LT',\n        nextDay : '[yarın saat] LT',\n        nextWeek : '[gelecek] dddd [saat] LT',\n        lastDay : '[dün] LT',\n        lastWeek : '[geçen] dddd [saat] LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : '%s sonra',\n        past : '%s önce',\n        s : 'birkaç saniye',\n        ss : '%d saniye',\n        m : 'bir dakika',\n        mm : '%d dakika',\n        h : 'bir saat',\n        hh : '%d saat',\n        d : 'bir gün',\n        dd : '%d gün',\n        M : 'bir ay',\n        MM : '%d ay',\n        y : 'bir yıl',\n        yy : '%d yıl'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}'(inci|nci|üncü|ncı|uncu|ıncı)/,\n    ordinal : function (number) {\n        if (number === 0) {  // special case for zero\n            return number + '\\'ıncı';\n        }\n        var a = number % 10,\n            b = number % 100 - a,\n            c = number >= 100 ? 100 : null;\n        return number + (suffixes[a] || suffixes[b] || suffixes[c]);\n    },\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 7  // The week that contains Jan 1st is the first week of the year.\n    }\n});\n\nreturn tr;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/tr.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/tzl.js":
/*!*********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/tzl.js ***!
  \*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Talossan [tzl]\n//! author : Robin van der Vliet : https://github.com/robin0van0der0v\n//! author : Iustì Canun\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n// After the year there should be a slash and the amount of years since December 26, 1979 in Roman numerals.\n// This is currently too difficult (maybe even impossible) to add.\nvar tzl = moment.defineLocale('tzl', {\n    months : 'Januar_Fevraglh_Març_Avrïu_Mai_Gün_Julia_Guscht_Setemvar_Listopäts_Noemvar_Zecemvar'.split('_'),\n    monthsShort : 'Jan_Fev_Mar_Avr_Mai_Gün_Jul_Gus_Set_Lis_Noe_Zec'.split('_'),\n    weekdays : 'Súladi_Lúneçi_Maitzi_Márcuri_Xhúadi_Viénerçi_Sáturi'.split('_'),\n    weekdaysShort : 'Súl_Lún_Mai_Már_Xhú_Vié_Sát'.split('_'),\n    weekdaysMin : 'Sú_Lú_Ma_Má_Xh_Vi_Sá'.split('_'),\n    longDateFormat : {\n        LT : 'HH.mm',\n        LTS : 'HH.mm.ss',\n        L : 'DD.MM.YYYY',\n        LL : 'D. MMMM [dallas] YYYY',\n        LLL : 'D. MMMM [dallas] YYYY HH.mm',\n        LLLL : 'dddd, [li] D. MMMM [dallas] YYYY HH.mm'\n    },\n    meridiemParse: /d\\'o|d\\'a/i,\n    isPM : function (input) {\n        return 'd\\'o' === input.toLowerCase();\n    },\n    meridiem : function (hours, minutes, isLower) {\n        if (hours > 11) {\n            return isLower ? 'd\\'o' : 'D\\'O';\n        } else {\n            return isLower ? 'd\\'a' : 'D\\'A';\n        }\n    },\n    calendar : {\n        sameDay : '[oxhi à] LT',\n        nextDay : '[demà à] LT',\n        nextWeek : 'dddd [à] LT',\n        lastDay : '[ieiri à] LT',\n        lastWeek : '[sür el] dddd [lasteu à] LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : 'osprei %s',\n        past : 'ja%s',\n        s : processRelativeTime,\n        ss : processRelativeTime,\n        m : processRelativeTime,\n        mm : processRelativeTime,\n        h : processRelativeTime,\n        hh : processRelativeTime,\n        d : processRelativeTime,\n        dd : processRelativeTime,\n        M : processRelativeTime,\n        MM : processRelativeTime,\n        y : processRelativeTime,\n        yy : processRelativeTime\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal : '%d.',\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nfunction processRelativeTime(number, withoutSuffix, key, isFuture) {\n    var format = {\n        's': ['viensas secunds', '\\'iensas secunds'],\n        'ss': [number + ' secunds', '' + number + ' secunds'],\n        'm': ['\\'n míut', '\\'iens míut'],\n        'mm': [number + ' míuts', '' + number + ' míuts'],\n        'h': ['\\'n þora', '\\'iensa þora'],\n        'hh': [number + ' þoras', '' + number + ' þoras'],\n        'd': ['\\'n ziua', '\\'iensa ziua'],\n        'dd': [number + ' ziuas', '' + number + ' ziuas'],\n        'M': ['\\'n mes', '\\'iens mes'],\n        'MM': [number + ' mesen', '' + number + ' mesen'],\n        'y': ['\\'n ar', '\\'iens ar'],\n        'yy': [number + ' ars', '' + number + ' ars']\n    };\n    return isFuture ? format[key][0] : (withoutSuffix ? format[key][0] : format[key][1]);\n}\n\nreturn tzl;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/tzl.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/tzm-latn.js":
/*!**************************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/tzm-latn.js ***!
  \**************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Central Atlas Tamazight Latin [tzm-latn]\n//! author : Abdel Said : https://github.com/abdelsaid\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar tzmLatn = moment.defineLocale('tzm-latn', {\n    months : 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split('_'),\n    monthsShort : 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split('_'),\n    weekdays : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),\n    weekdaysShort : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),\n    weekdaysMin : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD/MM/YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY HH:mm',\n        LLLL : 'dddd D MMMM YYYY HH:mm'\n    },\n    calendar : {\n        sameDay: '[asdkh g] LT',\n        nextDay: '[aska g] LT',\n        nextWeek: 'dddd [g] LT',\n        lastDay: '[assant g] LT',\n        lastWeek: 'dddd [g] LT',\n        sameElse: 'L'\n    },\n    relativeTime : {\n        future : 'dadkh s yan %s',\n        past : 'yan %s',\n        s : 'imik',\n        ss : '%d imik',\n        m : 'minuḍ',\n        mm : '%d minuḍ',\n        h : 'saɛa',\n        hh : '%d tassaɛin',\n        d : 'ass',\n        dd : '%d ossan',\n        M : 'ayowr',\n        MM : '%d iyyirn',\n        y : 'asgas',\n        yy : '%d isgasn'\n    },\n    week : {\n        dow : 6, // Saturday is the first day of the week.\n        doy : 12  // The week that contains Jan 1st is the first week of the year.\n    }\n});\n\nreturn tzmLatn;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/tzm-latn.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/tzm.js":
/*!*********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/tzm.js ***!
  \*********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Central Atlas Tamazight [tzm]\n//! author : Abdel Said : https://github.com/abdelsaid\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar tzm = moment.defineLocale('tzm', {\n    months : 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split('_'),\n    monthsShort : 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split('_'),\n    weekdays : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),\n    weekdaysShort : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),\n    weekdaysMin : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS: 'HH:mm:ss',\n        L : 'DD/MM/YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY HH:mm',\n        LLLL : 'dddd D MMMM YYYY HH:mm'\n    },\n    calendar : {\n        sameDay: '[ⴰⵙⴷⵅ ⴴ] LT',\n        nextDay: '[ⴰⵙⴽⴰ ⴴ] LT',\n        nextWeek: 'dddd [ⴴ] LT',\n        lastDay: '[ⴰⵚⴰⵏⵜ ⴴ] LT',\n        lastWeek: 'dddd [ⴴ] LT',\n        sameElse: 'L'\n    },\n    relativeTime : {\n        future : 'ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s',\n        past : 'ⵢⴰⵏ %s',\n        s : 'ⵉⵎⵉⴽ',\n        ss : '%d ⵉⵎⵉⴽ',\n        m : 'ⵎⵉⵏⵓⴺ',\n        mm : '%d ⵎⵉⵏⵓⴺ',\n        h : 'ⵙⴰⵄⴰ',\n        hh : '%d ⵜⴰⵙⵙⴰⵄⵉⵏ',\n        d : 'ⴰⵙⵙ',\n        dd : '%d oⵙⵙⴰⵏ',\n        M : 'ⴰⵢoⵓⵔ',\n        MM : '%d ⵉⵢⵢⵉⵔⵏ',\n        y : 'ⴰⵙⴳⴰⵙ',\n        yy : '%d ⵉⵙⴳⴰⵙⵏ'\n    },\n    week : {\n        dow : 6, // Saturday is the first day of the week.\n        doy : 12  // The week that contains Jan 1st is the first week of the year.\n    }\n});\n\nreturn tzm;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/tzm.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/uk.js":
/*!********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/uk.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Ukrainian [uk]\n//! author : zemlanin : https://github.com/zemlanin\n//! Author : Menelion Elensúle : https://github.com/Oire\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nfunction plural(word, num) {\n    var forms = word.split('_');\n    return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]);\n}\nfunction relativeTimeWithPlural(number, withoutSuffix, key) {\n    var format = {\n        'ss': withoutSuffix ? 'секунда_секунди_секунд' : 'секунду_секунди_секунд',\n        'mm': withoutSuffix ? 'хвилина_хвилини_хвилин' : 'хвилину_хвилини_хвилин',\n        'hh': withoutSuffix ? 'година_години_годин' : 'годину_години_годин',\n        'dd': 'день_дні_днів',\n        'MM': 'місяць_місяці_місяців',\n        'yy': 'рік_роки_років'\n    };\n    if (key === 'm') {\n        return withoutSuffix ? 'хвилина' : 'хвилину';\n    }\n    else if (key === 'h') {\n        return withoutSuffix ? 'година' : 'годину';\n    }\n    else {\n        return number + ' ' + plural(format[key], +number);\n    }\n}\nfunction weekdaysCaseReplace(m, format) {\n    var weekdays = {\n        'nominative': 'неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота'.split('_'),\n        'accusative': 'неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу'.split('_'),\n        'genitive': 'неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи'.split('_')\n    };\n\n    if (!m) {\n        return weekdays['nominative'];\n    }\n\n    var nounCase = (/(\\[[ВвУу]\\]) ?dddd/).test(format) ?\n        'accusative' :\n        ((/\\[?(?:минулої|наступної)? ?\\] ?dddd/).test(format) ?\n            'genitive' :\n            'nominative');\n    return weekdays[nounCase][m.day()];\n}\nfunction processHoursFunction(str) {\n    return function () {\n        return str + 'о' + (this.hours() === 11 ? 'б' : '') + '] LT';\n    };\n}\n\nvar uk = moment.defineLocale('uk', {\n    months : {\n        'format': 'січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня'.split('_'),\n        'standalone': 'січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень'.split('_')\n    },\n    monthsShort : 'січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд'.split('_'),\n    weekdays : weekdaysCaseReplace,\n    weekdaysShort : 'нд_пн_вт_ср_чт_пт_сб'.split('_'),\n    weekdaysMin : 'нд_пн_вт_ср_чт_пт_сб'.split('_'),\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD.MM.YYYY',\n        LL : 'D MMMM YYYY р.',\n        LLL : 'D MMMM YYYY р., HH:mm',\n        LLLL : 'dddd, D MMMM YYYY р., HH:mm'\n    },\n    calendar : {\n        sameDay: processHoursFunction('[Сьогодні '),\n        nextDay: processHoursFunction('[Завтра '),\n        lastDay: processHoursFunction('[Вчора '),\n        nextWeek: processHoursFunction('[У] dddd ['),\n        lastWeek: function () {\n            switch (this.day()) {\n                case 0:\n                case 3:\n                case 5:\n                case 6:\n                    return processHoursFunction('[Минулої] dddd [').call(this);\n                case 1:\n                case 2:\n                case 4:\n                    return processHoursFunction('[Минулого] dddd [').call(this);\n            }\n        },\n        sameElse: 'L'\n    },\n    relativeTime : {\n        future : 'за %s',\n        past : '%s тому',\n        s : 'декілька секунд',\n        ss : relativeTimeWithPlural,\n        m : relativeTimeWithPlural,\n        mm : relativeTimeWithPlural,\n        h : 'годину',\n        hh : relativeTimeWithPlural,\n        d : 'день',\n        dd : relativeTimeWithPlural,\n        M : 'місяць',\n        MM : relativeTimeWithPlural,\n        y : 'рік',\n        yy : relativeTimeWithPlural\n    },\n    // M. E.: those two are virtually unused but a user might want to implement them for his/her website for some reason\n    meridiemParse: /ночі|ранку|дня|вечора/,\n    isPM: function (input) {\n        return /^(дня|вечора)$/.test(input);\n    },\n    meridiem : function (hour, minute, isLower) {\n        if (hour < 4) {\n            return 'ночі';\n        } else if (hour < 12) {\n            return 'ранку';\n        } else if (hour < 17) {\n            return 'дня';\n        } else {\n            return 'вечора';\n        }\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}-(й|го)/,\n    ordinal: function (number, period) {\n        switch (period) {\n            case 'M':\n            case 'd':\n            case 'DDD':\n            case 'w':\n            case 'W':\n                return number + '-й';\n            case 'D':\n                return number + '-го';\n            default:\n                return number;\n        }\n    },\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 7  // The week that contains Jan 1st is the first week of the year.\n    }\n});\n\nreturn uk;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/uk.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/ur.js":
/*!********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/ur.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Urdu [ur]\n//! author : Sawood Alam : https://github.com/ibnesayeed\n//! author : Zack : https://github.com/ZackVision\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar months = [\n    'جنوری',\n    'فروری',\n    'مارچ',\n    'اپریل',\n    'مئی',\n    'جون',\n    'جولائی',\n    'اگست',\n    'ستمبر',\n    'اکتوبر',\n    'نومبر',\n    'دسمبر'\n];\nvar days = [\n    'اتوار',\n    'پیر',\n    'منگل',\n    'بدھ',\n    'جمعرات',\n    'جمعہ',\n    'ہفتہ'\n];\n\nvar ur = moment.defineLocale('ur', {\n    months : months,\n    monthsShort : months,\n    weekdays : days,\n    weekdaysShort : days,\n    weekdaysMin : days,\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD/MM/YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY HH:mm',\n        LLLL : 'dddd، D MMMM YYYY HH:mm'\n    },\n    meridiemParse: /صبح|شام/,\n    isPM : function (input) {\n        return 'شام' === input;\n    },\n    meridiem : function (hour, minute, isLower) {\n        if (hour < 12) {\n            return 'صبح';\n        }\n        return 'شام';\n    },\n    calendar : {\n        sameDay : '[آج بوقت] LT',\n        nextDay : '[کل بوقت] LT',\n        nextWeek : 'dddd [بوقت] LT',\n        lastDay : '[گذشتہ روز بوقت] LT',\n        lastWeek : '[گذشتہ] dddd [بوقت] LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : '%s بعد',\n        past : '%s قبل',\n        s : 'چند سیکنڈ',\n        ss : '%d سیکنڈ',\n        m : 'ایک منٹ',\n        mm : '%d منٹ',\n        h : 'ایک گھنٹہ',\n        hh : '%d گھنٹے',\n        d : 'ایک دن',\n        dd : '%d دن',\n        M : 'ایک ماہ',\n        MM : '%d ماہ',\n        y : 'ایک سال',\n        yy : '%d سال'\n    },\n    preparse: function (string) {\n        return string.replace(/،/g, ',');\n    },\n    postformat: function (string) {\n        return string.replace(/,/g, '،');\n    },\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn ur;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/ur.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/uz-latn.js":
/*!*************************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/uz-latn.js ***!
  \*************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Uzbek Latin [uz-latn]\n//! author : Rasulbek Mirzayev : github.com/Rasulbeeek\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar uzLatn = moment.defineLocale('uz-latn', {\n    months : 'Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr'.split('_'),\n    monthsShort : 'Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek'.split('_'),\n    weekdays : 'Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba'.split('_'),\n    weekdaysShort : 'Yak_Dush_Sesh_Chor_Pay_Jum_Shan'.split('_'),\n    weekdaysMin : 'Ya_Du_Se_Cho_Pa_Ju_Sha'.split('_'),\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD/MM/YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY HH:mm',\n        LLLL : 'D MMMM YYYY, dddd HH:mm'\n    },\n    calendar : {\n        sameDay : '[Bugun soat] LT [da]',\n        nextDay : '[Ertaga] LT [da]',\n        nextWeek : 'dddd [kuni soat] LT [da]',\n        lastDay : '[Kecha soat] LT [da]',\n        lastWeek : '[O\\'tgan] dddd [kuni soat] LT [da]',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : 'Yaqin %s ichida',\n        past : 'Bir necha %s oldin',\n        s : 'soniya',\n        ss : '%d soniya',\n        m : 'bir daqiqa',\n        mm : '%d daqiqa',\n        h : 'bir soat',\n        hh : '%d soat',\n        d : 'bir kun',\n        dd : '%d kun',\n        M : 'bir oy',\n        MM : '%d oy',\n        y : 'bir yil',\n        yy : '%d yil'\n    },\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 7  // The week that contains Jan 1st is the first week of the year.\n    }\n});\n\nreturn uzLatn;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/uz-latn.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/uz.js":
/*!********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/uz.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Uzbek [uz]\n//! author : Sardor Muminov : https://github.com/muminoff\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar uz = moment.defineLocale('uz', {\n    months : 'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split('_'),\n    monthsShort : 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'),\n    weekdays : 'Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба'.split('_'),\n    weekdaysShort : 'Якш_Душ_Сеш_Чор_Пай_Жум_Шан'.split('_'),\n    weekdaysMin : 'Як_Ду_Се_Чо_Па_Жу_Ша'.split('_'),\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD/MM/YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY HH:mm',\n        LLLL : 'D MMMM YYYY, dddd HH:mm'\n    },\n    calendar : {\n        sameDay : '[Бугун соат] LT [да]',\n        nextDay : '[Эртага] LT [да]',\n        nextWeek : 'dddd [куни соат] LT [да]',\n        lastDay : '[Кеча соат] LT [да]',\n        lastWeek : '[Утган] dddd [куни соат] LT [да]',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : 'Якин %s ичида',\n        past : 'Бир неча %s олдин',\n        s : 'фурсат',\n        ss : '%d фурсат',\n        m : 'бир дакика',\n        mm : '%d дакика',\n        h : 'бир соат',\n        hh : '%d соат',\n        d : 'бир кун',\n        dd : '%d кун',\n        M : 'бир ой',\n        MM : '%d ой',\n        y : 'бир йил',\n        yy : '%d йил'\n    },\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 7  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn uz;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/uz.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/vi.js":
/*!********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/vi.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Vietnamese [vi]\n//! author : Bang Nguyen : https://github.com/bangnk\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar vi = moment.defineLocale('vi', {\n    months : 'tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12'.split('_'),\n    monthsShort : 'Th01_Th02_Th03_Th04_Th05_Th06_Th07_Th08_Th09_Th10_Th11_Th12'.split('_'),\n    monthsParseExact : true,\n    weekdays : 'chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy'.split('_'),\n    weekdaysShort : 'CN_T2_T3_T4_T5_T6_T7'.split('_'),\n    weekdaysMin : 'CN_T2_T3_T4_T5_T6_T7'.split('_'),\n    weekdaysParseExact : true,\n    meridiemParse: /sa|ch/i,\n    isPM : function (input) {\n        return /^ch$/i.test(input);\n    },\n    meridiem : function (hours, minutes, isLower) {\n        if (hours < 12) {\n            return isLower ? 'sa' : 'SA';\n        } else {\n            return isLower ? 'ch' : 'CH';\n        }\n    },\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'DD/MM/YYYY',\n        LL : 'D MMMM [năm] YYYY',\n        LLL : 'D MMMM [năm] YYYY HH:mm',\n        LLLL : 'dddd, D MMMM [năm] YYYY HH:mm',\n        l : 'DD/M/YYYY',\n        ll : 'D MMM YYYY',\n        lll : 'D MMM YYYY HH:mm',\n        llll : 'ddd, D MMM YYYY HH:mm'\n    },\n    calendar : {\n        sameDay: '[Hôm nay lúc] LT',\n        nextDay: '[Ngày mai lúc] LT',\n        nextWeek: 'dddd [tuần tới lúc] LT',\n        lastDay: '[Hôm qua lúc] LT',\n        lastWeek: 'dddd [tuần rồi lúc] LT',\n        sameElse: 'L'\n    },\n    relativeTime : {\n        future : '%s tới',\n        past : '%s trước',\n        s : 'vài giây',\n        ss : '%d giây' ,\n        m : 'một phút',\n        mm : '%d phút',\n        h : 'một giờ',\n        hh : '%d giờ',\n        d : 'một ngày',\n        dd : '%d ngày',\n        M : 'một tháng',\n        MM : '%d tháng',\n        y : 'một năm',\n        yy : '%d năm'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}/,\n    ordinal : function (number) {\n        return number;\n    },\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn vi;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/vi.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/x-pseudo.js":
/*!**************************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/x-pseudo.js ***!
  \**************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Pseudo [x-pseudo]\n//! author : Andrew Hood : https://github.com/andrewhood125\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar xPseudo = moment.defineLocale('x-pseudo', {\n    months : 'J~áñúá~rý_F~ébrú~árý_~Márc~h_Áp~ríl_~Máý_~Júñé~_Júl~ý_Áú~gúst~_Sép~témb~ér_Ó~ctób~ér_Ñ~óvém~bér_~Décé~mbér'.split('_'),\n    monthsShort : 'J~áñ_~Féb_~Már_~Ápr_~Máý_~Júñ_~Júl_~Áúg_~Sép_~Óct_~Ñóv_~Déc'.split('_'),\n    monthsParseExact : true,\n    weekdays : 'S~úñdá~ý_Mó~ñdáý~_Túé~sdáý~_Wéd~ñésd~áý_T~húrs~dáý_~Fríd~áý_S~átúr~dáý'.split('_'),\n    weekdaysShort : 'S~úñ_~Móñ_~Túé_~Wéd_~Thú_~Frí_~Sát'.split('_'),\n    weekdaysMin : 'S~ú_Mó~_Tú_~Wé_T~h_Fr~_Sá'.split('_'),\n    weekdaysParseExact : true,\n    longDateFormat : {\n        LT : 'HH:mm',\n        L : 'DD/MM/YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY HH:mm',\n        LLLL : 'dddd, D MMMM YYYY HH:mm'\n    },\n    calendar : {\n        sameDay : '[T~ódá~ý át] LT',\n        nextDay : '[T~ómó~rró~w át] LT',\n        nextWeek : 'dddd [át] LT',\n        lastDay : '[Ý~ést~érdá~ý át] LT',\n        lastWeek : '[L~ást] dddd [át] LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : 'í~ñ %s',\n        past : '%s á~gó',\n        s : 'á ~féw ~sécó~ñds',\n        ss : '%d s~écóñ~ds',\n        m : 'á ~míñ~úté',\n        mm : '%d m~íñú~tés',\n        h : 'á~ñ hó~úr',\n        hh : '%d h~óúrs',\n        d : 'á ~dáý',\n        dd : '%d d~áýs',\n        M : 'á ~móñ~th',\n        MM : '%d m~óñt~hs',\n        y : 'á ~ýéár',\n        yy : '%d ý~éárs'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n    ordinal : function (number) {\n        var b = number % 10,\n            output = (~~(number % 100 / 10) === 1) ? 'th' :\n            (b === 1) ? 'st' :\n            (b === 2) ? 'nd' :\n            (b === 3) ? 'rd' : 'th';\n        return number + output;\n    },\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn xPseudo;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/x-pseudo.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/yo.js":
/*!********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/yo.js ***!
  \********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Yoruba Nigeria [yo]\n//! author : Atolagbe Abisoye : https://github.com/andela-batolagbe\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar yo = moment.defineLocale('yo', {\n    months : 'Sẹ́rẹ́_Èrèlè_Ẹrẹ̀nà_Ìgbé_Èbibi_Òkùdu_Agẹmo_Ògún_Owewe_Ọ̀wàrà_Bélú_Ọ̀pẹ̀̀'.split('_'),\n    monthsShort : 'Sẹ́r_Èrl_Ẹrn_Ìgb_Èbi_Òkù_Agẹ_Ògú_Owe_Ọ̀wà_Bél_Ọ̀pẹ̀̀'.split('_'),\n    weekdays : 'Àìkú_Ajé_Ìsẹ́gun_Ọjọ́rú_Ọjọ́bọ_Ẹtì_Àbámẹ́ta'.split('_'),\n    weekdaysShort : 'Àìk_Ajé_Ìsẹ́_Ọjr_Ọjb_Ẹtì_Àbá'.split('_'),\n    weekdaysMin : 'Àì_Aj_Ìs_Ọr_Ọb_Ẹt_Àb'.split('_'),\n    longDateFormat : {\n        LT : 'h:mm A',\n        LTS : 'h:mm:ss A',\n        L : 'DD/MM/YYYY',\n        LL : 'D MMMM YYYY',\n        LLL : 'D MMMM YYYY h:mm A',\n        LLLL : 'dddd, D MMMM YYYY h:mm A'\n    },\n    calendar : {\n        sameDay : '[Ònì ni] LT',\n        nextDay : '[Ọ̀la ni] LT',\n        nextWeek : 'dddd [Ọsẹ̀ tón\\'bọ] [ni] LT',\n        lastDay : '[Àna ni] LT',\n        lastWeek : 'dddd [Ọsẹ̀ tólọ́] [ni] LT',\n        sameElse : 'L'\n    },\n    relativeTime : {\n        future : 'ní %s',\n        past : '%s kọjá',\n        s : 'ìsẹjú aayá die',\n        ss :'aayá %d',\n        m : 'ìsẹjú kan',\n        mm : 'ìsẹjú %d',\n        h : 'wákati kan',\n        hh : 'wákati %d',\n        d : 'ọjọ́ kan',\n        dd : 'ọjọ́ %d',\n        M : 'osù kan',\n        MM : 'osù %d',\n        y : 'ọdún kan',\n        yy : 'ọdún %d'\n    },\n    dayOfMonthOrdinalParse : /ọjọ́\\s\\d{1,2}/,\n    ordinal : 'ọjọ́ %d',\n    week : {\n        dow : 1, // Monday is the first day of the week.\n        doy : 4 // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn yo;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/yo.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/zh-cn.js":
/*!***********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/zh-cn.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Chinese (China) [zh-cn]\n//! author : suupic : https://github.com/suupic\n//! author : Zeno Zeng : https://github.com/zenozeng\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar zhCn = moment.defineLocale('zh-cn', {\n    months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),\n    monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n    weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n    weekdaysShort : '周日_周一_周二_周三_周四_周五_周六'.split('_'),\n    weekdaysMin : '日_一_二_三_四_五_六'.split('_'),\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'YYYY/MM/DD',\n        LL : 'YYYY年M月D日',\n        LLL : 'YYYY年M月D日Ah点mm分',\n        LLLL : 'YYYY年M月D日ddddAh点mm分',\n        l : 'YYYY/M/D',\n        ll : 'YYYY年M月D日',\n        lll : 'YYYY年M月D日 HH:mm',\n        llll : 'YYYY年M月D日dddd HH:mm'\n    },\n    meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n    meridiemHour: function (hour, meridiem) {\n        if (hour === 12) {\n            hour = 0;\n        }\n        if (meridiem === '凌晨' || meridiem === '早上' ||\n                meridiem === '上午') {\n            return hour;\n        } else if (meridiem === '下午' || meridiem === '晚上') {\n            return hour + 12;\n        } else {\n            // '中午'\n            return hour >= 11 ? hour : hour + 12;\n        }\n    },\n    meridiem : function (hour, minute, isLower) {\n        var hm = hour * 100 + minute;\n        if (hm < 600) {\n            return '凌晨';\n        } else if (hm < 900) {\n            return '早上';\n        } else if (hm < 1130) {\n            return '上午';\n        } else if (hm < 1230) {\n            return '中午';\n        } else if (hm < 1800) {\n            return '下午';\n        } else {\n            return '晚上';\n        }\n    },\n    calendar : {\n        sameDay : '[今天]LT',\n        nextDay : '[明天]LT',\n        nextWeek : '[下]ddddLT',\n        lastDay : '[昨天]LT',\n        lastWeek : '[上]ddddLT',\n        sameElse : 'L'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(日|月|周)/,\n    ordinal : function (number, period) {\n        switch (period) {\n            case 'd':\n            case 'D':\n            case 'DDD':\n                return number + '日';\n            case 'M':\n                return number + '月';\n            case 'w':\n            case 'W':\n                return number + '周';\n            default:\n                return number;\n        }\n    },\n    relativeTime : {\n        future : '%s内',\n        past : '%s前',\n        s : '几秒',\n        ss : '%d 秒',\n        m : '1 分钟',\n        mm : '%d 分钟',\n        h : '1 小时',\n        hh : '%d 小时',\n        d : '1 天',\n        dd : '%d 天',\n        M : '1 个月',\n        MM : '%d 个月',\n        y : '1 年',\n        yy : '%d 年'\n    },\n    week : {\n        // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效\n        dow : 1, // Monday is the first day of the week.\n        doy : 4  // The week that contains Jan 4th is the first week of the year.\n    }\n});\n\nreturn zhCn;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/zh-cn.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/zh-hk.js":
/*!***********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/zh-hk.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Chinese (Hong Kong) [zh-hk]\n//! author : Ben : https://github.com/ben-lin\n//! author : Chris Lam : https://github.com/hehachris\n//! author : Konstantin : https://github.com/skfd\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar zhHk = moment.defineLocale('zh-hk', {\n    months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),\n    monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n    weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n    weekdaysShort : '週日_週一_週二_週三_週四_週五_週六'.split('_'),\n    weekdaysMin : '日_一_二_三_四_五_六'.split('_'),\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'YYYY/MM/DD',\n        LL : 'YYYY年M月D日',\n        LLL : 'YYYY年M月D日 HH:mm',\n        LLLL : 'YYYY年M月D日dddd HH:mm',\n        l : 'YYYY/M/D',\n        ll : 'YYYY年M月D日',\n        lll : 'YYYY年M月D日 HH:mm',\n        llll : 'YYYY年M月D日dddd HH:mm'\n    },\n    meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n    meridiemHour : function (hour, meridiem) {\n        if (hour === 12) {\n            hour = 0;\n        }\n        if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {\n            return hour;\n        } else if (meridiem === '中午') {\n            return hour >= 11 ? hour : hour + 12;\n        } else if (meridiem === '下午' || meridiem === '晚上') {\n            return hour + 12;\n        }\n    },\n    meridiem : function (hour, minute, isLower) {\n        var hm = hour * 100 + minute;\n        if (hm < 600) {\n            return '凌晨';\n        } else if (hm < 900) {\n            return '早上';\n        } else if (hm < 1130) {\n            return '上午';\n        } else if (hm < 1230) {\n            return '中午';\n        } else if (hm < 1800) {\n            return '下午';\n        } else {\n            return '晚上';\n        }\n    },\n    calendar : {\n        sameDay : '[今天]LT',\n        nextDay : '[明天]LT',\n        nextWeek : '[下]ddddLT',\n        lastDay : '[昨天]LT',\n        lastWeek : '[上]ddddLT',\n        sameElse : 'L'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(日|月|週)/,\n    ordinal : function (number, period) {\n        switch (period) {\n            case 'd' :\n            case 'D' :\n            case 'DDD' :\n                return number + '日';\n            case 'M' :\n                return number + '月';\n            case 'w' :\n            case 'W' :\n                return number + '週';\n            default :\n                return number;\n        }\n    },\n    relativeTime : {\n        future : '%s內',\n        past : '%s前',\n        s : '幾秒',\n        ss : '%d 秒',\n        m : '1 分鐘',\n        mm : '%d 分鐘',\n        h : '1 小時',\n        hh : '%d 小時',\n        d : '1 天',\n        dd : '%d 天',\n        M : '1 個月',\n        MM : '%d 個月',\n        y : '1 年',\n        yy : '%d 年'\n    }\n});\n\nreturn zhHk;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/zh-hk.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/locale/zh-tw.js":
/*!***********************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/locale/zh-tw.js ***!
  \***********************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n//! locale : Chinese (Taiwan) [zh-tw]\n//! author : Ben : https://github.com/ben-lin\n//! author : Chris Lam : https://github.com/hehachris\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/handsontable/node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\nvar zhTw = moment.defineLocale('zh-tw', {\n    months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),\n    monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n    weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n    weekdaysShort : '週日_週一_週二_週三_週四_週五_週六'.split('_'),\n    weekdaysMin : '日_一_二_三_四_五_六'.split('_'),\n    longDateFormat : {\n        LT : 'HH:mm',\n        LTS : 'HH:mm:ss',\n        L : 'YYYY/MM/DD',\n        LL : 'YYYY年M月D日',\n        LLL : 'YYYY年M月D日 HH:mm',\n        LLLL : 'YYYY年M月D日dddd HH:mm',\n        l : 'YYYY/M/D',\n        ll : 'YYYY年M月D日',\n        lll : 'YYYY年M月D日 HH:mm',\n        llll : 'YYYY年M月D日dddd HH:mm'\n    },\n    meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n    meridiemHour : function (hour, meridiem) {\n        if (hour === 12) {\n            hour = 0;\n        }\n        if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {\n            return hour;\n        } else if (meridiem === '中午') {\n            return hour >= 11 ? hour : hour + 12;\n        } else if (meridiem === '下午' || meridiem === '晚上') {\n            return hour + 12;\n        }\n    },\n    meridiem : function (hour, minute, isLower) {\n        var hm = hour * 100 + minute;\n        if (hm < 600) {\n            return '凌晨';\n        } else if (hm < 900) {\n            return '早上';\n        } else if (hm < 1130) {\n            return '上午';\n        } else if (hm < 1230) {\n            return '中午';\n        } else if (hm < 1800) {\n            return '下午';\n        } else {\n            return '晚上';\n        }\n    },\n    calendar : {\n        sameDay : '[今天]LT',\n        nextDay : '[明天]LT',\n        nextWeek : '[下]ddddLT',\n        lastDay : '[昨天]LT',\n        lastWeek : '[上]ddddLT',\n        sameElse : 'L'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(日|月|週)/,\n    ordinal : function (number, period) {\n        switch (period) {\n            case 'd' :\n            case 'D' :\n            case 'DDD' :\n                return number + '日';\n            case 'M' :\n                return number + '月';\n            case 'w' :\n            case 'W' :\n                return number + '週';\n            default :\n                return number;\n        }\n    },\n    relativeTime : {\n        future : '%s內',\n        past : '%s前',\n        s : '幾秒',\n        ss : '%d 秒',\n        m : '1 分鐘',\n        mm : '%d 分鐘',\n        h : '1 小時',\n        hh : '%d 小時',\n        d : '1 天',\n        dd : '%d 天',\n        M : '1 個月',\n        MM : '%d 個月',\n        y : '1 年',\n        yy : '%d 年'\n    }\n});\n\nreturn zhTw;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/locale/zh-tw.js?");

/***/ }),

/***/ "./node_modules/handsontable/node_modules/moment/moment.js":
/*!*****************************************************************!*\
  !*** ./node_modules/handsontable/node_modules/moment/moment.js ***!
  \*****************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("/* WEBPACK VAR INJECTION */(function(module) {var require;//! moment.js\n//! version : 2.20.1\n//! authors : Tim Wood, Iskren Chernev, Moment.js contributors\n//! license : MIT\n//! momentjs.com\n\n;(function (global, factory) {\n     true ? module.exports = factory() :\n    undefined\n}(this, (function () { 'use strict';\n\nvar hookCallback;\n\nfunction 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.\nfunction setHookCallback (callback) {\n    hookCallback = callback;\n}\n\nfunction isArray(input) {\n    return input instanceof Array || Object.prototype.toString.call(input) === '[object Array]';\n}\n\nfunction isObject(input) {\n    // IE8 will treat undefined and null as object if it wasn't for\n    // input != null\n    return input != null && Object.prototype.toString.call(input) === '[object Object]';\n}\n\nfunction isObjectEmpty(obj) {\n    if (Object.getOwnPropertyNames) {\n        return (Object.getOwnPropertyNames(obj).length === 0);\n    } else {\n        var k;\n        for (k in obj) {\n            if (obj.hasOwnProperty(k)) {\n                return false;\n            }\n        }\n        return true;\n    }\n}\n\nfunction isUndefined(input) {\n    return input === void 0;\n}\n\nfunction isNumber(input) {\n    return typeof input === 'number' || Object.prototype.toString.call(input) === '[object Number]';\n}\n\nfunction isDate(input) {\n    return input instanceof Date || Object.prototype.toString.call(input) === '[object Date]';\n}\n\nfunction 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\nfunction hasOwnProp(a, b) {\n    return Object.prototype.hasOwnProperty.call(a, b);\n}\n\nfunction 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\nfunction createUTC (input, format, locale, strict) {\n    return createLocalOrUTC(input, format, locale, strict, true).utc();\n}\n\nfunction 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        rfc2822         : false,\n        weekdayMismatch : false\n    };\n}\n\nfunction getParsingFlags(m) {\n    if (m._pf == null) {\n        m._pf = defaultParsingFlags();\n    }\n    return m._pf;\n}\n\nvar some;\nif (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\nfunction 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        var isNowValid = !isNaN(m._d.getTime()) &&\n            flags.overflow < 0 &&\n            !flags.empty &&\n            !flags.invalidMonth &&\n            !flags.invalidWeekday &&\n            !flags.weekdayMismatch &&\n            !flags.nullInput &&\n            !flags.invalidFormat &&\n            !flags.userInvalidated &&\n            (!flags.meridiem || (flags.meridiem && parsedParts));\n\n        if (m._strict) {\n            isNowValid = isNowValid &&\n                flags.charsLeftOver === 0 &&\n                flags.unusedTokens.length === 0 &&\n                flags.bigHour === undefined;\n        }\n\n        if (Object.isFrozen == null || !Object.isFrozen(m)) {\n            m._isValid = isNowValid;\n        }\n        else {\n            return isNowValid;\n        }\n    }\n    return m._isValid;\n}\n\nfunction createInvalid (flags) {\n    var m = 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// Plugins that add properties should also add the key here (null value),\n// so we can properly clone ourselves.\nvar momentProperties = hooks.momentProperties = [];\n\nfunction 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 = 0; i < momentProperties.length; i++) {\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\nvar updateInProgress = false;\n\n// Moment prototype object\nfunction Moment(config) {\n    copyConfig(this, config);\n    this._d = new Date(config._d != null ? config._d.getTime() : NaN);\n    if (!this.isValid()) {\n        this._d = new Date(NaN);\n    }\n    // Prevent infinite loop in case updateOffset creates new moment\n    // objects.\n    if (updateInProgress === false) {\n        updateInProgress = true;\n        hooks.updateOffset(this);\n        updateInProgress = false;\n    }\n}\n\nfunction isMoment (obj) {\n    return obj instanceof Moment || (obj != null && obj._isAMomentObject != null);\n}\n\nfunction 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\nfunction 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\nfunction 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\nfunction warn(msg) {\n    if (hooks.suppressDeprecationWarnings === false &&\n            (typeof console !==  'undefined') && console.warn) {\n        console.warn('Deprecation warning: ' + msg);\n    }\n}\n\nfunction deprecate(msg, fn) {\n    var firstTime = true;\n\n    return extend(function () {\n        if (hooks.deprecationHandler != null) {\n            hooks.deprecationHandler(null, msg);\n        }\n        if (firstTime) {\n            var args = [];\n            var arg;\n            for (var i = 0; i < arguments.length; i++) {\n                arg = '';\n                if (typeof arguments[i] === 'object') {\n                    arg += '\\n[' + i + '] ';\n                    for (var key in arguments[0]) {\n                        arg += key + ': ' + arguments[0][key] + ', ';\n                    }\n                    arg = arg.slice(0, -2); // Remove trailing comma and space\n                } else {\n                    arg = arguments[i];\n                }\n                args.push(arg);\n            }\n            warn(msg + '\\nArguments: ' + Array.prototype.slice.call(args).join('') + '\\n' + (new Error()).stack);\n            firstTime = false;\n        }\n        return fn.apply(this, arguments);\n    }, fn);\n}\n\nvar deprecations = {};\n\nfunction deprecateSimple(name, msg) {\n    if (hooks.deprecationHandler != null) {\n        hooks.deprecationHandler(name, msg);\n    }\n    if (!deprecations[name]) {\n        warn(msg);\n        deprecations[name] = true;\n    }\n}\n\nhooks.suppressDeprecationWarnings = false;\nhooks.deprecationHandler = null;\n\nfunction isFunction(input) {\n    return input instanceof Function || Object.prototype.toString.call(input) === '[object Function]';\n}\n\nfunction 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 _dayOfMonthOrdinalParse.\n    // TODO: Remove \"ordinalParse\" fallback in next major release.\n    this._dayOfMonthOrdinalParseLenient = new RegExp(\n        (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +\n            '|' + (/\\d{1,2}/).source);\n}\n\nfunction 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\nfunction Locale(config) {\n    if (config != null) {\n        this.set(config);\n    }\n}\n\nvar keys;\n\nif (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\nvar 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\nfunction calendar (key, mom, now) {\n    var output = this._calendar[key] || this._calendar['sameElse'];\n    return isFunction(output) ? output.call(mom, now) : output;\n}\n\nvar 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\nfunction 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\nvar defaultInvalidDate = 'Invalid date';\n\nfunction invalidDate () {\n    return this._invalidDate;\n}\n\nvar defaultOrdinal = '%d';\nvar defaultDayOfMonthOrdinalParse = /\\d{1,2}/;\n\nfunction ordinal (number) {\n    return this._ordinal.replace('%d', number);\n}\n\nvar defaultRelativeTime = {\n    future : 'in %s',\n    past   : '%s ago',\n    s  : 'a few seconds',\n    ss : '%d 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\nfunction 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\nfunction 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\nvar aliases = {};\n\nfunction addUnitAlias (unit, shorthand) {\n    var lowerCase = unit.toLowerCase();\n    aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;\n}\n\nfunction normalizeUnits(units) {\n    return typeof units === 'string' ? aliases[units] || aliases[units.toLowerCase()] : undefined;\n}\n\nfunction 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\nvar priorities = {};\n\nfunction addUnitPriority(unit, priority) {\n    priorities[unit] = priority;\n}\n\nfunction 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\nfunction 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\nvar 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\nvar localFormattingTokens = /(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g;\n\nvar formatFunctions = {};\n\nvar formatTokenFunctions = {};\n\n// token:    'M'\n// padded:   ['MM', 2]\n// ordinal:  'Mo'\n// callback: function () { this.month() + 1 }\nfunction 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\nfunction removeFormattingTokens(input) {\n    if (input.match(/\\[[\\s\\S]/)) {\n        return input.replace(/^\\[|\\]$/g, '');\n    }\n    return input.replace(/\\\\/g, '');\n}\n\nfunction 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 += isFunction(array[i]) ? array[i].call(mom, format) : array[i];\n        }\n        return output;\n    };\n}\n\n// format date using native date object\nfunction 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\nfunction 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\nvar match1         = /\\d/;            //       0 - 9\nvar match2         = /\\d\\d/;          //      00 - 99\nvar match3         = /\\d{3}/;         //     000 - 999\nvar match4         = /\\d{4}/;         //    0000 - 9999\nvar match6         = /[+-]?\\d{6}/;    // -999999 - 999999\nvar match1to2      = /\\d\\d?/;         //       0 - 99\nvar match3to4      = /\\d\\d\\d\\d?/;     //     999 - 9999\nvar match5to6      = /\\d\\d\\d\\d\\d\\d?/; //   99999 - 999999\nvar match1to3      = /\\d{1,3}/;       //       0 - 999\nvar match1to4      = /\\d{1,4}/;       //       0 - 9999\nvar match1to6      = /[+-]?\\d{1,6}/;  // -999999 - 999999\n\nvar matchUnsigned  = /\\d+/;           //       0 - inf\nvar matchSigned    = /[+-]?\\d+/;      //    -inf - inf\n\nvar matchOffset    = /Z|[+-]\\d\\d:?\\d\\d/gi; // +00:00 -00:00 +0000 -0000 or Z\nvar matchShortOffset = /Z|[+-]\\d\\d(?::?\\d\\d)?/gi; // +00 -00 +00:00 -00:00 +0000 -0000 or Z\n\nvar 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\nvar matchWord = /[0-9]{0,256}['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF07\\uFF10-\\uFFEF]{1,256}|[\\u0600-\\u06FF\\/]{1,256}(\\s*?[\\u0600-\\u06FF]{1,256}){1,2}/i;\n\n\nvar regexes = {};\n\nfunction addRegexToken (token, regex, strictRegex) {\n    regexes[token] = isFunction(regex) ? regex : function (isStrict, localeData) {\n        return (isStrict && strictRegex) ? strictRegex : regex;\n    };\n}\n\nfunction 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\nfunction unescapeFormat(s) {\n    return regexEscape(s.replace('\\\\', '').replace(/\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g, function (matched, p1, p2, p3, p4) {\n        return p1 || p2 || p3 || p4;\n    }));\n}\n\nfunction regexEscape(s) {\n    return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n}\n\nvar tokens = {};\n\nfunction addParseToken (token, callback) {\n    var i, func = callback;\n    if (typeof token === 'string') {\n        token = [token];\n    }\n    if (isNumber(callback)) {\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\nfunction 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\nfunction addTimeToArrayFromToken(token, input, config) {\n    if (input != null && hasOwnProp(tokens, token)) {\n        tokens[token](input, config._a, config, token);\n    }\n}\n\nvar YEAR = 0;\nvar MONTH = 1;\nvar DATE = 2;\nvar HOUR = 3;\nvar MINUTE = 4;\nvar SECOND = 5;\nvar MILLISECOND = 6;\nvar WEEK = 7;\nvar WEEKDAY = 8;\n\n// FORMATTING\n\naddFormatToken('Y', 0, 0, function () {\n    var y = this.year();\n    return y <= 9999 ? '' + y : '+' + y;\n});\n\naddFormatToken(0, ['YY', 2], 0, function () {\n    return this.year() % 100;\n});\n\naddFormatToken(0, ['YYYY',   4],       0, 'year');\naddFormatToken(0, ['YYYYY',  5],       0, 'year');\naddFormatToken(0, ['YYYYYY', 6, true], 0, 'year');\n\n// ALIASES\n\naddUnitAlias('year', 'y');\n\n// PRIORITIES\n\naddUnitPriority('year', 1);\n\n// PARSING\n\naddRegexToken('Y',      matchSigned);\naddRegexToken('YY',     match1to2, match2);\naddRegexToken('YYYY',   match1to4, match4);\naddRegexToken('YYYYY',  match1to6, match6);\naddRegexToken('YYYYYY', match1to6, match6);\n\naddParseToken(['YYYYY', 'YYYYYY'], YEAR);\naddParseToken('YYYY', function (input, array) {\n    array[YEAR] = input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);\n});\naddParseToken('YY', function (input, array) {\n    array[YEAR] = hooks.parseTwoDigitYear(input);\n});\naddParseToken('Y', function (input, array) {\n    array[YEAR] = parseInt(input, 10);\n});\n\n// HELPERS\n\nfunction daysInYear(year) {\n    return isLeapYear(year) ? 366 : 365;\n}\n\nfunction isLeapYear(year) {\n    return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n}\n\n// HOOKS\n\nhooks.parseTwoDigitYear = function (input) {\n    return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);\n};\n\n// MOMENTS\n\nvar getSetYear = makeGetSet('FullYear', true);\n\nfunction getIsLeapYear () {\n    return isLeapYear(this.year());\n}\n\nfunction makeGetSet (unit, keepTime) {\n    return function (value) {\n        if (value != null) {\n            set$1(this, unit, value);\n            hooks.updateOffset(this, keepTime);\n            return this;\n        } else {\n            return get(this, unit);\n        }\n    };\n}\n\nfunction get (mom, unit) {\n    return mom.isValid() ?\n        mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]() : NaN;\n}\n\nfunction set$1 (mom, unit, value) {\n    if (mom.isValid() && !isNaN(value)) {\n        if (unit === 'FullYear' && isLeapYear(mom.year()) && mom.month() === 1 && mom.date() === 29) {\n            mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value, mom.month(), daysInMonth(value, mom.month()));\n        }\n        else {\n            mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);\n        }\n    }\n}\n\n// MOMENTS\n\nfunction stringGet (units) {\n    units = normalizeUnits(units);\n    if (isFunction(this[units])) {\n        return this[units]();\n    }\n    return this;\n}\n\n\nfunction 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\nfunction mod(n, x) {\n    return ((n % x) + x) % x;\n}\n\nvar indexOf;\n\nif (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\nfunction daysInMonth(year, month) {\n    if (isNaN(year) || isNaN(month)) {\n        return NaN;\n    }\n    var modMonth = mod(month, 12);\n    year += (month - modMonth) / 12;\n    return modMonth === 1 ? (isLeapYear(year) ? 29 : 28) : (31 - modMonth % 7 % 2);\n}\n\n// FORMATTING\n\naddFormatToken('M', ['MM', 2], 'Mo', function () {\n    return this.month() + 1;\n});\n\naddFormatToken('MMM', 0, 0, function (format) {\n    return this.localeData().monthsShort(this, format);\n});\n\naddFormatToken('MMMM', 0, 0, function (format) {\n    return this.localeData().months(this, format);\n});\n\n// ALIASES\n\naddUnitAlias('month', 'M');\n\n// PRIORITY\n\naddUnitPriority('month', 8);\n\n// PARSING\n\naddRegexToken('M',    match1to2);\naddRegexToken('MM',   match1to2, match2);\naddRegexToken('MMM',  function (isStrict, locale) {\n    return locale.monthsShortRegex(isStrict);\n});\naddRegexToken('MMMM', function (isStrict, locale) {\n    return locale.monthsRegex(isStrict);\n});\n\naddParseToken(['M', 'MM'], function (input, array) {\n    array[MONTH] = toInt(input) - 1;\n});\n\naddParseToken(['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\nvar MONTHS_IN_FORMAT = /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/;\nvar defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_');\nfunction localeMonths (m, format) {\n    if (!m) {\n        return isArray(this._months) ? this._months :\n            this._months['standalone'];\n    }\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\nvar defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_');\nfunction localeMonthsShort (m, format) {\n    if (!m) {\n        return isArray(this._monthsShort) ? this._monthsShort :\n            this._monthsShort['standalone'];\n    }\n    return isArray(this._monthsShort) ? this._monthsShort[m.month()] :\n        this._monthsShort[MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'][m.month()];\n}\n\nfunction 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 = 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\nfunction localeMonthsParse (monthName, format, strict) {\n    var i, mom, regex;\n\n    if (this._monthsParseExact) {\n        return 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 = 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\nfunction 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 (!isNumber(value)) {\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\nfunction getSetMonth (value) {\n    if (value != null) {\n        setMonth(this, value);\n        hooks.updateOffset(this, true);\n        return this;\n    } else {\n        return get(this, 'Month');\n    }\n}\n\nfunction getDaysInMonth () {\n    return daysInMonth(this.year(), this.month());\n}\n\nvar defaultMonthsShortRegex = matchWord;\nfunction 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\nvar defaultMonthsRegex = matchWord;\nfunction 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\nfunction 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 = 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\nfunction createDate (y, m, d, h, M, s, ms) {\n    // can't just apply() to create a date:\n    // https://stackoverflow.com/q/181348\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\nfunction 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\nfunction 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// https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday\nfunction 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\nfunction 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\nfunction 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\naddFormatToken('w', ['ww', 2], 'wo', 'week');\naddFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');\n\n// ALIASES\n\naddUnitAlias('week', 'w');\naddUnitAlias('isoWeek', 'W');\n\n// PRIORITIES\n\naddUnitPriority('week', 5);\naddUnitPriority('isoWeek', 5);\n\n// PARSING\n\naddRegexToken('w',  match1to2);\naddRegexToken('ww', match1to2, match2);\naddRegexToken('W',  match1to2);\naddRegexToken('WW', match1to2, match2);\n\naddWeekParseToken(['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\nfunction localeWeek (mom) {\n    return weekOfYear(mom, this._week.dow, this._week.doy).week;\n}\n\nvar 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\nfunction localeFirstDayOfWeek () {\n    return this._week.dow;\n}\n\nfunction localeFirstDayOfYear () {\n    return this._week.doy;\n}\n\n// MOMENTS\n\nfunction getSetWeek (input) {\n    var week = this.localeData().week(this);\n    return input == null ? week : this.add((input - week) * 7, 'd');\n}\n\nfunction 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\naddFormatToken('d', 0, 'do', 'day');\n\naddFormatToken('dd', 0, 0, function (format) {\n    return this.localeData().weekdaysMin(this, format);\n});\n\naddFormatToken('ddd', 0, 0, function (format) {\n    return this.localeData().weekdaysShort(this, format);\n});\n\naddFormatToken('dddd', 0, 0, function (format) {\n    return this.localeData().weekdays(this, format);\n});\n\naddFormatToken('e', 0, 0, 'weekday');\naddFormatToken('E', 0, 0, 'isoWeekday');\n\n// ALIASES\n\naddUnitAlias('day', 'd');\naddUnitAlias('weekday', 'e');\naddUnitAlias('isoWeekday', 'E');\n\n// PRIORITY\naddUnitPriority('day', 11);\naddUnitPriority('weekday', 11);\naddUnitPriority('isoWeekday', 11);\n\n// PARSING\n\naddRegexToken('d',    match1to2);\naddRegexToken('e',    match1to2);\naddRegexToken('E',    match1to2);\naddRegexToken('dd',   function (isStrict, locale) {\n    return locale.weekdaysMinRegex(isStrict);\n});\naddRegexToken('ddd',   function (isStrict, locale) {\n    return locale.weekdaysShortRegex(isStrict);\n});\naddRegexToken('dddd',   function (isStrict, locale) {\n    return locale.weekdaysRegex(isStrict);\n});\n\naddWeekParseToken(['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\naddWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {\n    week[token] = toInt(input);\n});\n\n// HELPERS\n\nfunction 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\nfunction 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\nvar defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_');\nfunction localeWeekdays (m, format) {\n    if (!m) {\n        return isArray(this._weekdays) ? this._weekdays :\n            this._weekdays['standalone'];\n    }\n    return isArray(this._weekdays) ? this._weekdays[m.day()] :\n        this._weekdays[this._weekdays.isFormat.test(format) ? 'format' : 'standalone'][m.day()];\n}\n\nvar defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_');\nfunction localeWeekdaysShort (m) {\n    return (m) ? this._weekdaysShort[m.day()] : this._weekdaysShort;\n}\n\nvar defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_');\nfunction localeWeekdaysMin (m) {\n    return (m) ? this._weekdaysMin[m.day()] : this._weekdaysMin;\n}\n\nfunction handleStrictParse$1(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 = 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\nfunction localeWeekdaysParse (weekdayName, format, strict) {\n    var i, mom, regex;\n\n    if (this._weekdaysParseExact) {\n        return handleStrictParse$1.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 = 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\nfunction 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\nfunction 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\nfunction 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\nvar defaultWeekdaysRegex = matchWord;\nfunction 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\nvar defaultWeekdaysShortRegex = matchWord;\nfunction 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\nvar defaultWeekdaysMinRegex = matchWord;\nfunction 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\nfunction 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 = 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\nfunction hFormat() {\n    return this.hours() % 12 || 12;\n}\n\nfunction kFormat() {\n    return this.hours() || 24;\n}\n\naddFormatToken('H', ['HH', 2], 0, 'hour');\naddFormatToken('h', ['hh', 2], 0, hFormat);\naddFormatToken('k', ['kk', 2], 0, kFormat);\n\naddFormatToken('hmm', 0, 0, function () {\n    return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);\n});\n\naddFormatToken('hmmss', 0, 0, function () {\n    return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2) +\n        zeroFill(this.seconds(), 2);\n});\n\naddFormatToken('Hmm', 0, 0, function () {\n    return '' + this.hours() + zeroFill(this.minutes(), 2);\n});\n\naddFormatToken('Hmmss', 0, 0, function () {\n    return '' + this.hours() + zeroFill(this.minutes(), 2) +\n        zeroFill(this.seconds(), 2);\n});\n\nfunction meridiem (token, lowercase) {\n    addFormatToken(token, 0, 0, function () {\n        return this.localeData().meridiem(this.hours(), this.minutes(), lowercase);\n    });\n}\n\nmeridiem('a', true);\nmeridiem('A', false);\n\n// ALIASES\n\naddUnitAlias('hour', 'h');\n\n// PRIORITY\naddUnitPriority('hour', 13);\n\n// PARSING\n\nfunction matchMeridiem (isStrict, locale) {\n    return locale._meridiemParse;\n}\n\naddRegexToken('a',  matchMeridiem);\naddRegexToken('A',  matchMeridiem);\naddRegexToken('H',  match1to2);\naddRegexToken('h',  match1to2);\naddRegexToken('k',  match1to2);\naddRegexToken('HH', match1to2, match2);\naddRegexToken('hh', match1to2, match2);\naddRegexToken('kk', match1to2, match2);\n\naddRegexToken('hmm', match3to4);\naddRegexToken('hmmss', match5to6);\naddRegexToken('Hmm', match3to4);\naddRegexToken('Hmmss', match5to6);\n\naddParseToken(['H', 'HH'], HOUR);\naddParseToken(['k', 'kk'], function (input, array, config) {\n    var kInput = toInt(input);\n    array[HOUR] = kInput === 24 ? 0 : kInput;\n});\naddParseToken(['a', 'A'], function (input, array, config) {\n    config._isPm = config._locale.isPM(input);\n    config._meridiem = input;\n});\naddParseToken(['h', 'hh'], function (input, array, config) {\n    array[HOUR] = toInt(input);\n    getParsingFlags(config).bigHour = true;\n});\naddParseToken('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});\naddParseToken('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});\naddParseToken('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});\naddParseToken('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\nfunction 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\nvar defaultLocaleMeridiemParse = /[ap]\\.?m?\\.?/i;\nfunction 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.\nvar getSetHour = makeGetSet('Hours', true);\n\n// months\n// week\n// weekdays\n// meridiem\nvar baseConfig = {\n    calendar: defaultCalendar,\n    longDateFormat: defaultLongDateFormat,\n    invalidDate: defaultInvalidDate,\n    ordinal: defaultOrdinal,\n    dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,\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\nvar locales = {};\nvar localeFamilies = {};\nvar globalLocale;\n\nfunction 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\nfunction 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\nfunction 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            var aliasedRequire = require;\n            __webpack_require__(\"./node_modules/handsontable/node_modules/moment/locale sync recursive ^\\\\.\\\\/.*$\")(\"./\" + name);\n            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.\nfunction getSetGlobalLocale (key, values) {\n    var data;\n    if (key) {\n        if (isUndefined(values)) {\n            data = 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\nfunction 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                if (!localeFamilies[config.parentLocale]) {\n                    localeFamilies[config.parentLocale] = [];\n                }\n                localeFamilies[config.parentLocale].push({\n                    name: name,\n                    config: config\n                });\n                return null;\n            }\n        }\n        locales[name] = new Locale(mergeConfigs(parentConfig, config));\n\n        if (localeFamilies[name]) {\n            localeFamilies[name].forEach(function (x) {\n                defineLocale(x.name, x.config);\n            });\n        }\n\n        // backwards compat for now: also set the locale\n        // make sure we set the locale AFTER all child locales have been\n        // created, so we won't end up with the child locale set.\n        getSetGlobalLocale(name);\n\n\n        return locales[name];\n    } else {\n        // useful for testing\n        delete locales[name];\n        return null;\n    }\n}\n\nfunction updateLocale(name, config) {\n    if (config != null) {\n        var locale, tmpLocale, parentConfig = baseConfig;\n        // MERGE\n        tmpLocale = loadLocale(name);\n        if (tmpLocale != null) {\n            parentConfig = tmpLocale._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        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\nfunction 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\nfunction listLocales() {\n    return keys(locales);\n}\n\nfunction 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// Pick the first defined of two or three arguments.\nfunction 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\nfunction currentDateArray(config) {\n    // hooks is actually the exported moment object\n    var nowValue = new Date(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]\nfunction configFromArray (config) {\n    var i, date, input = [], currentDate, expectedWeekday, 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 != null) {\n        yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);\n\n        if (config._dayOfYear > daysInYear(yearToUse) || config._dayOfYear === 0) {\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    expectedWeekday = config._useUTC ? config._d.getUTCDay() : config._d.getDay();\n\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    // check for mismatching day of week\n    if (config._w && typeof config._w.d !== 'undefined' && config._w.d !== expectedWeekday) {\n        getParsingFlags(config).weekdayMismatch = true;\n    }\n}\n\nfunction 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(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        var curWeek = weekOfYear(createLocal(), dow, doy);\n\n        weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);\n\n        // Default to current week.\n        week = defaults(w.w, curWeek.week);\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// 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)\nvar 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)?)?$/;\nvar 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\nvar tzRegex = /Z|[+-]\\d\\d(?::?\\d\\d)?/;\n\nvar 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\nvar 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\nvar aspNetJsonRegex = /^\\/?Date\\((\\-?\\d+)/i;\n\n// date from iso format\nfunction 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// RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3\nvar rfc2822 = /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\\d{4}))$/;\n\nfunction extractFromRFC2822Strings(yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr) {\n    var result = [\n        untruncateYear(yearStr),\n        defaultLocaleMonthsShort.indexOf(monthStr),\n        parseInt(dayStr, 10),\n        parseInt(hourStr, 10),\n        parseInt(minuteStr, 10)\n    ];\n\n    if (secondStr) {\n        result.push(parseInt(secondStr, 10));\n    }\n\n    return result;\n}\n\nfunction untruncateYear(yearStr) {\n    var year = parseInt(yearStr, 10);\n    if (year <= 49) {\n        return 2000 + year;\n    } else if (year <= 999) {\n        return 1900 + year;\n    }\n    return year;\n}\n\nfunction preprocessRFC2822(s) {\n    // Remove comments and folding whitespace and replace multiple-spaces with a single space\n    return s.replace(/\\([^)]*\\)|[\\n\\t]/g, ' ').replace(/(\\s\\s+)/g, ' ').trim();\n}\n\nfunction checkWeekday(weekdayStr, parsedInput, config) {\n    if (weekdayStr) {\n        // TODO: Replace the vanilla JS Date object with an indepentent day-of-week check.\n        var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),\n            weekdayActual = new Date(parsedInput[0], parsedInput[1], parsedInput[2]).getDay();\n        if (weekdayProvided !== weekdayActual) {\n            getParsingFlags(config).weekdayMismatch = true;\n            config._isValid = false;\n            return false;\n        }\n    }\n    return true;\n}\n\nvar obsOffsets = {\n    UT: 0,\n    GMT: 0,\n    EDT: -4 * 60,\n    EST: -5 * 60,\n    CDT: -5 * 60,\n    CST: -6 * 60,\n    MDT: -6 * 60,\n    MST: -7 * 60,\n    PDT: -7 * 60,\n    PST: -8 * 60\n};\n\nfunction calculateOffset(obsOffset, militaryOffset, numOffset) {\n    if (obsOffset) {\n        return obsOffsets[obsOffset];\n    } else if (militaryOffset) {\n        // the only allowed military tz is Z\n        return 0;\n    } else {\n        var hm = parseInt(numOffset, 10);\n        var m = hm % 100, h = (hm - m) / 100;\n        return h * 60 + m;\n    }\n}\n\n// date and time from ref 2822 format\nfunction configFromRFC2822(config) {\n    var match = rfc2822.exec(preprocessRFC2822(config._i));\n    if (match) {\n        var parsedArray = extractFromRFC2822Strings(match[4], match[3], match[2], match[5], match[6], match[7]);\n        if (!checkWeekday(match[1], parsedArray, config)) {\n            return;\n        }\n\n        config._a = parsedArray;\n        config._tzm = calculateOffset(match[8], match[9], match[10]);\n\n        config._d = createUTCDate.apply(null, config._a);\n        config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n\n        getParsingFlags(config).rfc2822 = true;\n    } else {\n        config._isValid = false;\n    }\n}\n\n// date from iso format or fallback\nfunction 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    } else {\n        return;\n    }\n\n    configFromRFC2822(config);\n    if (config._isValid === false) {\n        delete config._isValid;\n    } else {\n        return;\n    }\n\n    // Final attempt, use Input Fallback\n    hooks.createFromInputFallback(config);\n}\n\nhooks.createFromInputFallback = deprecate(\n    'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +\n    'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +\n    'discouraged and will be removed in an upcoming major 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// constant that refers to the ISO standard\nhooks.ISO_8601 = function () {};\n\n// constant that refers to the RFC 2822 form\nhooks.RFC_2822 = function () {};\n\n// date from string and format string\nfunction configFromStringAndFormat(config) {\n    // TODO: Move this to another part of the creation flow to prevent circular deps\n    if (config._f === hooks.ISO_8601) {\n        configFromISO(config);\n        return;\n    }\n    if (config._f === hooks.RFC_2822) {\n        configFromRFC2822(config);\n        return;\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\nfunction 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\nfunction 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 (!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\nfunction 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\nfunction 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\nfunction prepareConfig (config) {\n    var input = config._i,\n        format = config._f;\n\n    config._locale = config._locale || getLocale(config._l);\n\n    if (input === null || (format === undefined && input === '')) {\n        return 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 (isDate(input)) {\n        config._d = input;\n    } else if (isArray(format)) {\n        configFromStringAndArray(config);\n    } else if (format) {\n        configFromStringAndFormat(config);\n    }  else {\n        configFromInput(config);\n    }\n\n    if (!isValid(config)) {\n        config._d = null;\n    }\n\n    return config;\n}\n\nfunction configFromInput(config) {\n    var input = config._i;\n    if (isUndefined(input)) {\n        config._d = new Date(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 (isObject(input)) {\n        configFromObject(config);\n    } else if (isNumber(input)) {\n        // from milliseconds\n        config._d = new Date(input);\n    } else {\n        hooks.createFromInputFallback(config);\n    }\n}\n\nfunction createLocalOrUTC (input, format, locale, strict, isUTC) {\n    var c = {};\n\n    if (locale === true || locale === false) {\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\nfunction createLocal (input, format, locale, strict) {\n    return createLocalOrUTC(input, format, locale, strict, false);\n}\n\nvar prototypeMin = deprecate(\n    'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',\n    function () {\n        var other = createLocal.apply(null, arguments);\n        if (this.isValid() && other.isValid()) {\n            return other < this ? this : other;\n        } else {\n            return createInvalid();\n        }\n    }\n);\n\nvar prototypeMax = deprecate(\n    'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',\n    function () {\n        var other = createLocal.apply(null, arguments);\n        if (this.isValid() && other.isValid()) {\n            return other > this ? this : other;\n        } else {\n            return 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.\nfunction 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 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?\nfunction min () {\n    var args = [].slice.call(arguments, 0);\n\n    return pickBy('isBefore', args);\n}\n\nfunction max () {\n    var args = [].slice.call(arguments, 0);\n\n    return pickBy('isAfter', args);\n}\n\nvar now = function () {\n    return Date.now ? Date.now() : +(new Date());\n};\n\nvar ordering = ['year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', 'millisecond'];\n\nfunction isDurationValid(m) {\n    for (var key in m) {\n        if (!(indexOf.call(ordering, key) !== -1 && (m[key] == null || !isNaN(m[key])))) {\n            return false;\n        }\n    }\n\n    var unitHasDecimal = false;\n    for (var i = 0; i < ordering.length; ++i) {\n        if (m[ordering[i]]) {\n            if (unitHasDecimal) {\n                return false; // only allow non-integers for smallest unit\n            }\n            if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {\n                unitHasDecimal = true;\n            }\n        }\n    }\n\n    return true;\n}\n\nfunction isValid$1() {\n    return this._isValid;\n}\n\nfunction createInvalid$1() {\n    return createDuration(NaN);\n}\n\nfunction 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    this._isValid = isDurationValid(normalizedInput);\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 to 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 = getLocale();\n\n    this._bubble();\n}\n\nfunction isDuration (obj) {\n    return obj instanceof Duration;\n}\n\nfunction absRound (number) {\n    if (number < 0) {\n        return Math.round(-1 * number) * -1;\n    } else {\n        return Math.round(number);\n    }\n}\n\n// FORMATTING\n\nfunction 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\noffset('Z', ':');\noffset('ZZ', '');\n\n// PARSING\n\naddRegexToken('Z',  matchShortOffset);\naddRegexToken('ZZ', matchShortOffset);\naddParseToken(['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']\nvar chunkOffset = /([\\+\\-]|\\d\\d)/gi;\n\nfunction offsetFromString(matcher, string) {\n    var matches = (string || '').match(matcher);\n\n    if (matches === null) {\n        return null;\n    }\n\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 minutes === 0 ?\n      0 :\n      parts[0] === '+' ? minutes : -minutes;\n}\n\n// Return a moment from input, that is local/utc/zone equivalent to model.\nfunction cloneWithOffset(input, model) {\n    var res, diff;\n    if (model._isUTC) {\n        res = model.clone();\n        diff = (isMoment(input) || isDate(input) ? input.valueOf() : 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        hooks.updateOffset(res, false);\n        return res;\n    } else {\n        return createLocal(input).local();\n    }\n}\n\nfunction 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.\nhooks.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.\nfunction getSetOffset (input, keepLocalTime, keepMinutes) {\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            if (input === null) {\n                return this;\n            }\n        } else if (Math.abs(input) < 16 && !keepMinutes) {\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                addSubtract(this, createDuration(input - offset, 'm'), 1, false);\n            } else if (!this._changeInProgress) {\n                this._changeInProgress = true;\n                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\nfunction 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\nfunction setOffsetToUTC (keepLocalTime) {\n    return this.utcOffset(0, keepLocalTime);\n}\n\nfunction 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\nfunction setOffsetToParsedOffset () {\n    if (this._tzm != null) {\n        this.utcOffset(this._tzm, false, true);\n    } else if (typeof this._i === 'string') {\n        var tZone = offsetFromString(matchOffset, this._i);\n        if (tZone != null) {\n            this.utcOffset(tZone);\n        }\n        else {\n            this.utcOffset(0, true);\n        }\n    }\n    return this;\n}\n\nfunction hasAlignedHourOffset (input) {\n    if (!this.isValid()) {\n        return false;\n    }\n    input = input ? createLocal(input).utcOffset() : 0;\n\n    return (this.utcOffset() - input) % 60 === 0;\n}\n\nfunction isDaylightSavingTime () {\n    return (\n        this.utcOffset() > this.clone().month(0).utcOffset() ||\n        this.utcOffset() > this.clone().month(5).utcOffset()\n    );\n}\n\nfunction 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 ? createUTC(c._a) : 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\nfunction isLocal () {\n    return this.isValid() ? !this._isUTC : false;\n}\n\nfunction isUtcOffset () {\n    return this.isValid() ? this._isUTC : false;\n}\n\nfunction isUtc () {\n    return this.isValid() ? this._isUTC && this._offset === 0 : false;\n}\n\n// ASP.NET json date format regex\nvar aspNetRegex = /^(\\-|\\+)?(?:(\\d*)[. ])?(\\d+)\\:(\\d+)(?:\\:(\\d+)(\\.\\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\nvar 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\nfunction 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 (isNumber(input)) {\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(absRound(match[MILLISECOND] * 1000)) * sign // the millisecond decimal point is included in the match\n        };\n    } else if (!!(match = isoRegex.exec(input))) {\n        sign = (match[1] === '-') ? -1 : (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(createLocal(duration.from), 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\ncreateDuration.fn = Duration.prototype;\ncreateDuration.invalid = createInvalid$1;\n\nfunction 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\nfunction 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\nfunction 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// TODO: remove 'name' arg after deprecation is removed\nfunction 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 = createDuration(val, period);\n        addSubtract(this, dur, direction);\n        return this;\n    };\n}\n\nfunction 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 (months) {\n        setMonth(mom, get(mom, 'Month') + months * isAdding);\n    }\n    if (days) {\n        set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);\n    }\n    if (milliseconds) {\n        mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);\n    }\n    if (updateOffset) {\n        hooks.updateOffset(mom, days || months);\n    }\n}\n\nvar add      = createAdder(1, 'add');\nvar subtract = createAdder(-1, 'subtract');\n\nfunction 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\nfunction calendar$1 (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 || createLocal(),\n        sod = cloneWithOffset(now, this).startOf('day'),\n        format = 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, createLocal(now)));\n}\n\nfunction clone () {\n    return new Moment(this);\n}\n\nfunction isAfter (input, units) {\n    var localInput = isMoment(input) ? input : 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\nfunction isBefore (input, units) {\n    var localInput = isMoment(input) ? input : 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\nfunction 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\nfunction isSame (input, units) {\n    var localInput = isMoment(input) ? input : 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\nfunction isSameOrAfter (input, units) {\n    return this.isSame(input, units) || this.isAfter(input,units);\n}\n\nfunction isSameOrBefore (input, units) {\n    return this.isSame(input, units) || this.isBefore(input,units);\n}\n\nfunction 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    switch (units) {\n        case 'year': output = monthDiff(this, that) / 12; break;\n        case 'month': output = monthDiff(this, that); break;\n        case 'quarter': output = monthDiff(this, that) / 3; break;\n        case 'second': output = (this - that) / 1e3; break; // 1000\n        case 'minute': output = (this - that) / 6e4; break; // 1000 * 60\n        case 'hour': output = (this - that) / 36e5; break; // 1000 * 60 * 60\n        case 'day': output = (this - that - zoneDelta) / 864e5; break; // 1000 * 60 * 60 * 24, negate dst\n        case 'week': output = (this - that - zoneDelta) / 6048e5; break; // 1000 * 60 * 60 * 24 * 7, negate dst\n        default: output = this - that;\n    }\n\n    return asFloat ? output : absFloor(output);\n}\n\nfunction 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\nhooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';\nhooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';\n\nfunction toString () {\n    return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');\n}\n\nfunction toISOString(keepOffset) {\n    if (!this.isValid()) {\n        return null;\n    }\n    var utc = keepOffset !== true;\n    var m = utc ? this.clone().utc() : this;\n    if (m.year() < 0 || m.year() > 9999) {\n        return formatMoment(m, utc ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ');\n    }\n    if (isFunction(Date.prototype.toISOString)) {\n        // native implementation is ~50x faster, use it when we can\n        if (utc) {\n            return this.toDate().toISOString();\n        } else {\n            return new Date(this._d.valueOf()).toISOString().replace('Z', formatMoment(m, 'Z'));\n        }\n    }\n    return formatMoment(m, utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ');\n}\n\n/**\n * Return a human readable representation of a moment that can\n * also be evaluated to get a new moment which is the same\n *\n * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects\n */\nfunction inspect () {\n    if (!this.isValid()) {\n        return 'moment.invalid(/* ' + this._i + ' */)';\n    }\n    var func = 'moment';\n    var zone = '';\n    if (!this.isLocal()) {\n        func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';\n        zone = 'Z';\n    }\n    var prefix = '[' + func + '(\"]';\n    var year = (0 <= this.year() && this.year() <= 9999) ? 'YYYY' : 'YYYYYY';\n    var datetime = '-MM-DD[T]HH:mm:ss.SSS';\n    var suffix = zone + '[\")]';\n\n    return this.format(prefix + year + datetime + suffix);\n}\n\nfunction format (inputString) {\n    if (!inputString) {\n        inputString = this.isUtc() ? hooks.defaultFormatUtc : hooks.defaultFormat;\n    }\n    var output = formatMoment(this, inputString);\n    return this.localeData().postformat(output);\n}\n\nfunction from (time, withoutSuffix) {\n    if (this.isValid() &&\n            ((isMoment(time) && time.isValid()) ||\n             createLocal(time).isValid())) {\n        return createDuration({to: this, from: time}).locale(this.locale()).humanize(!withoutSuffix);\n    } else {\n        return this.localeData().invalidDate();\n    }\n}\n\nfunction fromNow (withoutSuffix) {\n    return this.from(createLocal(), withoutSuffix);\n}\n\nfunction to (time, withoutSuffix) {\n    if (this.isValid() &&\n            ((isMoment(time) && time.isValid()) ||\n             createLocal(time).isValid())) {\n        return createDuration({from: this, to: time}).locale(this.locale()).humanize(!withoutSuffix);\n    } else {\n        return this.localeData().invalidDate();\n    }\n}\n\nfunction toNow (withoutSuffix) {\n    return this.to(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.\nfunction locale (key) {\n    var newLocaleData;\n\n    if (key === undefined) {\n        return this._locale._abbr;\n    } else {\n        newLocaleData = getLocale(key);\n        if (newLocaleData != null) {\n            this._locale = newLocaleData;\n        }\n        return this;\n    }\n}\n\nvar 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\nfunction localeData () {\n    return this._locale;\n}\n\nfunction 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\nfunction 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\nfunction valueOf () {\n    return this._d.valueOf() - ((this._offset || 0) * 60000);\n}\n\nfunction unix () {\n    return Math.floor(this.valueOf() / 1000);\n}\n\nfunction toDate () {\n    return new Date(this.valueOf());\n}\n\nfunction toArray () {\n    var m = this;\n    return [m.year(), m.month(), m.date(), m.hour(), m.minute(), m.second(), m.millisecond()];\n}\n\nfunction 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\nfunction toJSON () {\n    // new Date(NaN).toJSON() === null\n    return this.isValid() ? this.toISOString() : null;\n}\n\nfunction isValid$2 () {\n    return isValid(this);\n}\n\nfunction parsingFlags () {\n    return extend({}, getParsingFlags(this));\n}\n\nfunction invalidAt () {\n    return getParsingFlags(this).overflow;\n}\n\nfunction 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\naddFormatToken(0, ['gg', 2], 0, function () {\n    return this.weekYear() % 100;\n});\n\naddFormatToken(0, ['GG', 2], 0, function () {\n    return this.isoWeekYear() % 100;\n});\n\nfunction addWeekYearFormatToken (token, getter) {\n    addFormatToken(0, [token, token.length], 0, getter);\n}\n\naddWeekYearFormatToken('gggg',     'weekYear');\naddWeekYearFormatToken('ggggg',    'weekYear');\naddWeekYearFormatToken('GGGG',  'isoWeekYear');\naddWeekYearFormatToken('GGGGG', 'isoWeekYear');\n\n// ALIASES\n\naddUnitAlias('weekYear', 'gg');\naddUnitAlias('isoWeekYear', 'GG');\n\n// PRIORITY\n\naddUnitPriority('weekYear', 1);\naddUnitPriority('isoWeekYear', 1);\n\n\n// PARSING\n\naddRegexToken('G',      matchSigned);\naddRegexToken('g',      matchSigned);\naddRegexToken('GG',     match1to2, match2);\naddRegexToken('gg',     match1to2, match2);\naddRegexToken('GGGG',   match1to4, match4);\naddRegexToken('gggg',   match1to4, match4);\naddRegexToken('GGGGG',  match1to6, match6);\naddRegexToken('ggggg',  match1to6, match6);\n\naddWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (input, week, config, token) {\n    week[token.substr(0, 2)] = toInt(input);\n});\n\naddWeekParseToken(['gg', 'GG'], function (input, week, config, token) {\n    week[token] = hooks.parseTwoDigitYear(input);\n});\n\n// MOMENTS\n\nfunction 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\nfunction getSetISOWeekYear (input) {\n    return getSetWeekYearHelper.call(this,\n            input, this.isoWeek(), this.isoWeekday(), 1, 4);\n}\n\nfunction getISOWeeksInYear () {\n    return weeksInYear(this.year(), 1, 4);\n}\n\nfunction getWeeksInYear () {\n    var weekInfo = this.localeData()._week;\n    return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);\n}\n\nfunction 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\nfunction 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\naddFormatToken('Q', 0, 'Qo', 'quarter');\n\n// ALIASES\n\naddUnitAlias('quarter', 'Q');\n\n// PRIORITY\n\naddUnitPriority('quarter', 7);\n\n// PARSING\n\naddRegexToken('Q', match1);\naddParseToken('Q', function (input, array) {\n    array[MONTH] = (toInt(input) - 1) * 3;\n});\n\n// MOMENTS\n\nfunction 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\naddFormatToken('D', ['DD', 2], 'Do', 'date');\n\n// ALIASES\n\naddUnitAlias('date', 'D');\n\n// PRIOROITY\naddUnitPriority('date', 9);\n\n// PARSING\n\naddRegexToken('D',  match1to2);\naddRegexToken('DD', match1to2, match2);\naddRegexToken('Do', function (isStrict, locale) {\n    // TODO: Remove \"ordinalParse\" fallback in next major release.\n    return isStrict ?\n      (locale._dayOfMonthOrdinalParse || locale._ordinalParse) :\n      locale._dayOfMonthOrdinalParseLenient;\n});\n\naddParseToken(['D', 'DD'], DATE);\naddParseToken('Do', function (input, array) {\n    array[DATE] = toInt(input.match(match1to2)[0]);\n});\n\n// MOMENTS\n\nvar getSetDayOfMonth = makeGetSet('Date', true);\n\n// FORMATTING\n\naddFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');\n\n// ALIASES\n\naddUnitAlias('dayOfYear', 'DDD');\n\n// PRIORITY\naddUnitPriority('dayOfYear', 4);\n\n// PARSING\n\naddRegexToken('DDD',  match1to3);\naddRegexToken('DDDD', match3);\naddParseToken(['DDD', 'DDDD'], function (input, array, config) {\n    config._dayOfYear = toInt(input);\n});\n\n// HELPERS\n\n// MOMENTS\n\nfunction 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\naddFormatToken('m', ['mm', 2], 0, 'minute');\n\n// ALIASES\n\naddUnitAlias('minute', 'm');\n\n// PRIORITY\n\naddUnitPriority('minute', 14);\n\n// PARSING\n\naddRegexToken('m',  match1to2);\naddRegexToken('mm', match1to2, match2);\naddParseToken(['m', 'mm'], MINUTE);\n\n// MOMENTS\n\nvar getSetMinute = makeGetSet('Minutes', false);\n\n// FORMATTING\n\naddFormatToken('s', ['ss', 2], 0, 'second');\n\n// ALIASES\n\naddUnitAlias('second', 's');\n\n// PRIORITY\n\naddUnitPriority('second', 15);\n\n// PARSING\n\naddRegexToken('s',  match1to2);\naddRegexToken('ss', match1to2, match2);\naddParseToken(['s', 'ss'], SECOND);\n\n// MOMENTS\n\nvar getSetSecond = makeGetSet('Seconds', false);\n\n// FORMATTING\n\naddFormatToken('S', 0, 0, function () {\n    return ~~(this.millisecond() / 100);\n});\n\naddFormatToken(0, ['SS', 2], 0, function () {\n    return ~~(this.millisecond() / 10);\n});\n\naddFormatToken(0, ['SSS', 3], 0, 'millisecond');\naddFormatToken(0, ['SSSS', 4], 0, function () {\n    return this.millisecond() * 10;\n});\naddFormatToken(0, ['SSSSS', 5], 0, function () {\n    return this.millisecond() * 100;\n});\naddFormatToken(0, ['SSSSSS', 6], 0, function () {\n    return this.millisecond() * 1000;\n});\naddFormatToken(0, ['SSSSSSS', 7], 0, function () {\n    return this.millisecond() * 10000;\n});\naddFormatToken(0, ['SSSSSSSS', 8], 0, function () {\n    return this.millisecond() * 100000;\n});\naddFormatToken(0, ['SSSSSSSSS', 9], 0, function () {\n    return this.millisecond() * 1000000;\n});\n\n\n// ALIASES\n\naddUnitAlias('millisecond', 'ms');\n\n// PRIORITY\n\naddUnitPriority('millisecond', 16);\n\n// PARSING\n\naddRegexToken('S',    match1to3, match1);\naddRegexToken('SS',   match1to3, match2);\naddRegexToken('SSS',  match1to3, match3);\n\nvar token;\nfor (token = 'SSSS'; token.length <= 9; token += 'S') {\n    addRegexToken(token, matchUnsigned);\n}\n\nfunction parseMs(input, array) {\n    array[MILLISECOND] = toInt(('0.' + input) * 1000);\n}\n\nfor (token = 'S'; token.length <= 9; token += 'S') {\n    addParseToken(token, parseMs);\n}\n// MOMENTS\n\nvar getSetMillisecond = makeGetSet('Milliseconds', false);\n\n// FORMATTING\n\naddFormatToken('z',  0, 0, 'zoneAbbr');\naddFormatToken('zz', 0, 0, 'zoneName');\n\n// MOMENTS\n\nfunction getZoneAbbr () {\n    return this._isUTC ? 'UTC' : '';\n}\n\nfunction getZoneName () {\n    return this._isUTC ? 'Coordinated Universal Time' : '';\n}\n\nvar proto = Moment.prototype;\n\nproto.add               = add;\nproto.calendar          = calendar$1;\nproto.clone             = clone;\nproto.diff              = diff;\nproto.endOf             = endOf;\nproto.format            = format;\nproto.from              = from;\nproto.fromNow           = fromNow;\nproto.to                = to;\nproto.toNow             = toNow;\nproto.get               = stringGet;\nproto.invalidAt         = invalidAt;\nproto.isAfter           = isAfter;\nproto.isBefore          = isBefore;\nproto.isBetween         = isBetween;\nproto.isSame            = isSame;\nproto.isSameOrAfter     = isSameOrAfter;\nproto.isSameOrBefore    = isSameOrBefore;\nproto.isValid           = isValid$2;\nproto.lang              = lang;\nproto.locale            = locale;\nproto.localeData        = localeData;\nproto.max               = prototypeMax;\nproto.min               = prototypeMin;\nproto.parsingFlags      = parsingFlags;\nproto.set               = stringSet;\nproto.startOf           = startOf;\nproto.subtract          = subtract;\nproto.toArray           = toArray;\nproto.toObject          = toObject;\nproto.toDate            = toDate;\nproto.toISOString       = toISOString;\nproto.inspect           = inspect;\nproto.toJSON            = toJSON;\nproto.toString          = toString;\nproto.unix              = unix;\nproto.valueOf           = valueOf;\nproto.creationData      = creationData;\n\n// Year\nproto.year       = getSetYear;\nproto.isLeapYear = getIsLeapYear;\n\n// Week Year\nproto.weekYear    = getSetWeekYear;\nproto.isoWeekYear = getSetISOWeekYear;\n\n// Quarter\nproto.quarter = proto.quarters = getSetQuarter;\n\n// Month\nproto.month       = getSetMonth;\nproto.daysInMonth = getDaysInMonth;\n\n// Week\nproto.week           = proto.weeks        = getSetWeek;\nproto.isoWeek        = proto.isoWeeks     = getSetISOWeek;\nproto.weeksInYear    = getWeeksInYear;\nproto.isoWeeksInYear = getISOWeeksInYear;\n\n// Day\nproto.date       = getSetDayOfMonth;\nproto.day        = proto.days             = getSetDayOfWeek;\nproto.weekday    = getSetLocaleDayOfWeek;\nproto.isoWeekday = getSetISODayOfWeek;\nproto.dayOfYear  = getSetDayOfYear;\n\n// Hour\nproto.hour = proto.hours = getSetHour;\n\n// Minute\nproto.minute = proto.minutes = getSetMinute;\n\n// Second\nproto.second = proto.seconds = getSetSecond;\n\n// Millisecond\nproto.millisecond = proto.milliseconds = getSetMillisecond;\n\n// Offset\nproto.utcOffset            = getSetOffset;\nproto.utc                  = setOffsetToUTC;\nproto.local                = setOffsetToLocal;\nproto.parseZone            = setOffsetToParsedOffset;\nproto.hasAlignedHourOffset = hasAlignedHourOffset;\nproto.isDST                = isDaylightSavingTime;\nproto.isLocal              = isLocal;\nproto.isUtcOffset          = isUtcOffset;\nproto.isUtc                = isUtc;\nproto.isUTC                = isUtc;\n\n// Timezone\nproto.zoneAbbr = getZoneAbbr;\nproto.zoneName = getZoneName;\n\n// Deprecations\nproto.dates  = deprecate('dates accessor is deprecated. Use date instead.', getSetDayOfMonth);\nproto.months = deprecate('months accessor is deprecated. Use month instead', getSetMonth);\nproto.years  = deprecate('years accessor is deprecated. Use year instead', getSetYear);\nproto.zone   = deprecate('moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/', getSetZone);\nproto.isDSTShifted = deprecate('isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information', isDaylightSavingTimeShifted);\n\nfunction createUnix (input) {\n    return createLocal(input * 1000);\n}\n\nfunction createInZone () {\n    return createLocal.apply(null, arguments).parseZone();\n}\n\nfunction preParsePostFormat (string) {\n    return string;\n}\n\nvar proto$1 = Locale.prototype;\n\nproto$1.calendar        = calendar;\nproto$1.longDateFormat  = longDateFormat;\nproto$1.invalidDate     = invalidDate;\nproto$1.ordinal         = ordinal;\nproto$1.preparse        = preParsePostFormat;\nproto$1.postformat      = preParsePostFormat;\nproto$1.relativeTime    = relativeTime;\nproto$1.pastFuture      = pastFuture;\nproto$1.set             = set;\n\n// Month\nproto$1.months            =        localeMonths;\nproto$1.monthsShort       =        localeMonthsShort;\nproto$1.monthsParse       =        localeMonthsParse;\nproto$1.monthsRegex       = monthsRegex;\nproto$1.monthsShortRegex  = monthsShortRegex;\n\n// Week\nproto$1.week = localeWeek;\nproto$1.firstDayOfYear = localeFirstDayOfYear;\nproto$1.firstDayOfWeek = localeFirstDayOfWeek;\n\n// Day of Week\nproto$1.weekdays       =        localeWeekdays;\nproto$1.weekdaysMin    =        localeWeekdaysMin;\nproto$1.weekdaysShort  =        localeWeekdaysShort;\nproto$1.weekdaysParse  =        localeWeekdaysParse;\n\nproto$1.weekdaysRegex       =        weekdaysRegex;\nproto$1.weekdaysShortRegex  =        weekdaysShortRegex;\nproto$1.weekdaysMinRegex    =        weekdaysMinRegex;\n\n// Hours\nproto$1.isPM = localeIsPM;\nproto$1.meridiem = localeMeridiem;\n\nfunction get$1 (format, index, field, setter) {\n    var locale = getLocale();\n    var utc = createUTC().set(setter, index);\n    return locale[field](utc, format);\n}\n\nfunction listMonthsImpl (format, index, field) {\n    if (isNumber(format)) {\n        index = format;\n        format = undefined;\n    }\n\n    format = format || '';\n\n    if (index != null) {\n        return get$1(format, index, field, 'month');\n    }\n\n    var i;\n    var out = [];\n    for (i = 0; i < 12; i++) {\n        out[i] = get$1(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)\nfunction listWeekdaysImpl (localeSorted, format, index, field) {\n    if (typeof localeSorted === 'boolean') {\n        if (isNumber(format)) {\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 (isNumber(format)) {\n            index = format;\n            format = undefined;\n        }\n\n        format = format || '';\n    }\n\n    var locale = getLocale(),\n        shift = localeSorted ? locale._week.dow : 0;\n\n    if (index != null) {\n        return get$1(format, (index + shift) % 7, field, 'day');\n    }\n\n    var i;\n    var out = [];\n    for (i = 0; i < 7; i++) {\n        out[i] = get$1(format, (i + shift) % 7, field, 'day');\n    }\n    return out;\n}\n\nfunction listMonths (format, index) {\n    return listMonthsImpl(format, index, 'months');\n}\n\nfunction listMonthsShort (format, index) {\n    return listMonthsImpl(format, index, 'monthsShort');\n}\n\nfunction listWeekdays (localeSorted, format, index) {\n    return listWeekdaysImpl(localeSorted, format, index, 'weekdays');\n}\n\nfunction listWeekdaysShort (localeSorted, format, index) {\n    return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');\n}\n\nfunction listWeekdaysMin (localeSorted, format, index) {\n    return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');\n}\n\ngetSetGlobalLocale('en', {\n    dayOfMonthOrdinalParse: /\\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\nhooks.lang = deprecate('moment.lang is deprecated. Use moment.locale instead.', getSetGlobalLocale);\nhooks.langData = deprecate('moment.langData is deprecated. Use moment.localeData instead.', getLocale);\n\nvar mathAbs = Math.abs;\n\nfunction 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\nfunction addSubtract$1 (duration, input, value, direction) {\n    var other = 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)\nfunction add$1 (input, value) {\n    return addSubtract$1(this, input, value, 1);\n}\n\n// supports only 2.0-style subtract(1, 's') or subtract(duration)\nfunction subtract$1 (input, value) {\n    return addSubtract$1(this, input, value, -1);\n}\n\nfunction absCeil (number) {\n    if (number < 0) {\n        return Math.floor(number);\n    } else {\n        return Math.ceil(number);\n    }\n}\n\nfunction 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\nfunction 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\nfunction monthsToDays (months) {\n    // the reverse of daysToMonths\n    return months * 146097 / 4800;\n}\n\nfunction as (units) {\n    if (!this.isValid()) {\n        return NaN;\n    }\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')?\nfunction valueOf$1 () {\n    if (!this.isValid()) {\n        return NaN;\n    }\n    return (\n        this._milliseconds +\n        this._days * 864e5 +\n        (this._months % 12) * 2592e6 +\n        toInt(this._months / 12) * 31536e6\n    );\n}\n\nfunction makeAs (alias) {\n    return function () {\n        return this.as(alias);\n    };\n}\n\nvar asMilliseconds = makeAs('ms');\nvar asSeconds      = makeAs('s');\nvar asMinutes      = makeAs('m');\nvar asHours        = makeAs('h');\nvar asDays         = makeAs('d');\nvar asWeeks        = makeAs('w');\nvar asMonths       = makeAs('M');\nvar asYears        = makeAs('y');\n\nfunction clone$1 () {\n    return createDuration(this);\n}\n\nfunction get$2 (units) {\n    units = normalizeUnits(units);\n    return this.isValid() ? this[units + 's']() : NaN;\n}\n\nfunction makeGetter(name) {\n    return function () {\n        return this.isValid() ? this._data[name] : NaN;\n    };\n}\n\nvar milliseconds = makeGetter('milliseconds');\nvar seconds      = makeGetter('seconds');\nvar minutes      = makeGetter('minutes');\nvar hours        = makeGetter('hours');\nvar days         = makeGetter('days');\nvar months       = makeGetter('months');\nvar years        = makeGetter('years');\n\nfunction weeks () {\n    return absFloor(this.days() / 7);\n}\n\nvar round = Math.round;\nvar thresholds = {\n    ss: 44,         // a few seconds to seconds\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\nfunction substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {\n    return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);\n}\n\nfunction relativeTime$1 (posNegDuration, withoutSuffix, locale) {\n    var duration = 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.ss && ['s', seconds]  ||\n            seconds < thresholds.s   && ['ss', 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\nfunction 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\nfunction 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    if (threshold === 's') {\n        thresholds.ss = limit - 1;\n    }\n    return true;\n}\n\nfunction humanize (withSuffix) {\n    if (!this.isValid()) {\n        return this.localeData().invalidDate();\n    }\n\n    var locale = this.localeData();\n    var output = relativeTime$1(this, !withSuffix, locale);\n\n    if (withSuffix) {\n        output = locale.pastFuture(+this, output);\n    }\n\n    return locale.postformat(output);\n}\n\nvar abs$1 = Math.abs;\n\nfunction sign(x) {\n    return ((x > 0) - (x < 0)) || +x;\n}\n\nfunction toISOString$1() {\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    if (!this.isValid()) {\n        return this.localeData().invalidDate();\n    }\n\n    var seconds = abs$1(this._milliseconds) / 1000;\n    var days         = abs$1(this._days);\n    var months       = abs$1(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 ? seconds.toFixed(3).replace(/\\.?0+$/, '') : '';\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    var totalSign = total < 0 ? '-' : '';\n    var ymSign = sign(this._months) !== sign(total) ? '-' : '';\n    var daysSign = sign(this._days) !== sign(total) ? '-' : '';\n    var hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';\n\n    return totalSign + 'P' +\n        (Y ? ymSign + Y + 'Y' : '') +\n        (M ? ymSign + M + 'M' : '') +\n        (D ? daysSign + D + 'D' : '') +\n        ((h || m || s) ? 'T' : '') +\n        (h ? hmsSign + h + 'H' : '') +\n        (m ? hmsSign + m + 'M' : '') +\n        (s ? hmsSign + s + 'S' : '');\n}\n\nvar proto$2 = Duration.prototype;\n\nproto$2.isValid        = isValid$1;\nproto$2.abs            = abs;\nproto$2.add            = add$1;\nproto$2.subtract       = subtract$1;\nproto$2.as             = as;\nproto$2.asMilliseconds = asMilliseconds;\nproto$2.asSeconds      = asSeconds;\nproto$2.asMinutes      = asMinutes;\nproto$2.asHours        = asHours;\nproto$2.asDays         = asDays;\nproto$2.asWeeks        = asWeeks;\nproto$2.asMonths       = asMonths;\nproto$2.asYears        = asYears;\nproto$2.valueOf        = valueOf$1;\nproto$2._bubble        = bubble;\nproto$2.clone          = clone$1;\nproto$2.get            = get$2;\nproto$2.milliseconds   = milliseconds;\nproto$2.seconds        = seconds;\nproto$2.minutes        = minutes;\nproto$2.hours          = hours;\nproto$2.days           = days;\nproto$2.weeks          = weeks;\nproto$2.months         = months;\nproto$2.years          = years;\nproto$2.humanize       = humanize;\nproto$2.toISOString    = toISOString$1;\nproto$2.toString       = toISOString$1;\nproto$2.toJSON         = toISOString$1;\nproto$2.locale         = locale;\nproto$2.localeData     = localeData;\n\n// Deprecations\nproto$2.toIsoString = deprecate('toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)', toISOString$1);\nproto$2.lang = lang;\n\n// Side effect imports\n\n// FORMATTING\n\naddFormatToken('X', 0, 0, 'unix');\naddFormatToken('x', 0, 0, 'valueOf');\n\n// PARSING\n\naddRegexToken('x', matchSigned);\naddRegexToken('X', matchTimestamp);\naddParseToken('X', function (input, array, config) {\n    config._d = new Date(parseFloat(input, 10) * 1000);\n});\naddParseToken('x', function (input, array, config) {\n    config._d = new Date(toInt(input));\n});\n\n// Side effect imports\n\n\nhooks.version = '2.20.1';\n\nsetHookCallback(createLocal);\n\nhooks.fn                    = proto;\nhooks.min                   = min;\nhooks.max                   = max;\nhooks.now                   = now;\nhooks.utc                   = createUTC;\nhooks.unix                  = createUnix;\nhooks.months                = listMonths;\nhooks.isDate                = isDate;\nhooks.locale                = getSetGlobalLocale;\nhooks.invalid               = createInvalid;\nhooks.duration              = createDuration;\nhooks.isMoment              = isMoment;\nhooks.weekdays              = listWeekdays;\nhooks.parseZone             = createInZone;\nhooks.localeData            = getLocale;\nhooks.isDuration            = isDuration;\nhooks.monthsShort           = listMonthsShort;\nhooks.weekdaysMin           = listWeekdaysMin;\nhooks.defineLocale          = defineLocale;\nhooks.updateLocale          = updateLocale;\nhooks.locales               = listLocales;\nhooks.weekdaysShort         = listWeekdaysShort;\nhooks.normalizeUnits        = normalizeUnits;\nhooks.relativeTimeRounding  = getSetRelativeTimeRounding;\nhooks.relativeTimeThreshold = getSetRelativeTimeThreshold;\nhooks.calendarFormat        = getCalendarFormat;\nhooks.prototype             = proto;\n\n// currently HTML5 input type only supports 24-hour formats\nhooks.HTML5_FMT = {\n    DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm',             // <input type=\"datetime-local\" />\n    DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss',  // <input type=\"datetime-local\" step=\"1\" />\n    DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS',   // <input type=\"datetime-local\" step=\"0.001\" />\n    DATE: 'YYYY-MM-DD',                             // <input type=\"date\" />\n    TIME: 'HH:mm',                                  // <input type=\"time\" />\n    TIME_SECONDS: 'HH:mm:ss',                       // <input type=\"time\" step=\"1\" />\n    TIME_MS: 'HH:mm:ss.SSS',                        // <input type=\"time\" step=\"0.001\" />\n    WEEK: 'YYYY-[W]WW',                             // <input type=\"week\" />\n    MONTH: 'YYYY-MM'                                // <input type=\"month\" />\n};\n\nreturn hooks;\n\n})));\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack:///./node_modules/handsontable/node_modules/moment/moment.js?");

/***/ }),

/***/ "./node_modules/moment/locale sync recursive ^\\.\\/.*$":
/*!**************************************************!*\
  !*** ./node_modules/moment/locale sync ^\.\/.*$ ***!
  \**************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var map = {\n\t\"./af\": \"./node_modules/moment/locale/af.js\",\n\t\"./af.js\": \"./node_modules/moment/locale/af.js\",\n\t\"./ar\": \"./node_modules/moment/locale/ar.js\",\n\t\"./ar-dz\": \"./node_modules/moment/locale/ar-dz.js\",\n\t\"./ar-dz.js\": \"./node_modules/moment/locale/ar-dz.js\",\n\t\"./ar-kw\": \"./node_modules/moment/locale/ar-kw.js\",\n\t\"./ar-kw.js\": \"./node_modules/moment/locale/ar-kw.js\",\n\t\"./ar-ly\": \"./node_modules/moment/locale/ar-ly.js\",\n\t\"./ar-ly.js\": \"./node_modules/moment/locale/ar-ly.js\",\n\t\"./ar-ma\": \"./node_modules/moment/locale/ar-ma.js\",\n\t\"./ar-ma.js\": \"./node_modules/moment/locale/ar-ma.js\",\n\t\"./ar-sa\": \"./node_modules/moment/locale/ar-sa.js\",\n\t\"./ar-sa.js\": \"./node_modules/moment/locale/ar-sa.js\",\n\t\"./ar-tn\": \"./node_modules/moment/locale/ar-tn.js\",\n\t\"./ar-tn.js\": \"./node_modules/moment/locale/ar-tn.js\",\n\t\"./ar.js\": \"./node_modules/moment/locale/ar.js\",\n\t\"./az\": \"./node_modules/moment/locale/az.js\",\n\t\"./az.js\": \"./node_modules/moment/locale/az.js\",\n\t\"./be\": \"./node_modules/moment/locale/be.js\",\n\t\"./be.js\": \"./node_modules/moment/locale/be.js\",\n\t\"./bg\": \"./node_modules/moment/locale/bg.js\",\n\t\"./bg.js\": \"./node_modules/moment/locale/bg.js\",\n\t\"./bm\": \"./node_modules/moment/locale/bm.js\",\n\t\"./bm.js\": \"./node_modules/moment/locale/bm.js\",\n\t\"./bn\": \"./node_modules/moment/locale/bn.js\",\n\t\"./bn.js\": \"./node_modules/moment/locale/bn.js\",\n\t\"./bo\": \"./node_modules/moment/locale/bo.js\",\n\t\"./bo.js\": \"./node_modules/moment/locale/bo.js\",\n\t\"./br\": \"./node_modules/moment/locale/br.js\",\n\t\"./br.js\": \"./node_modules/moment/locale/br.js\",\n\t\"./bs\": \"./node_modules/moment/locale/bs.js\",\n\t\"./bs.js\": \"./node_modules/moment/locale/bs.js\",\n\t\"./ca\": \"./node_modules/moment/locale/ca.js\",\n\t\"./ca.js\": \"./node_modules/moment/locale/ca.js\",\n\t\"./cs\": \"./node_modules/moment/locale/cs.js\",\n\t\"./cs.js\": \"./node_modules/moment/locale/cs.js\",\n\t\"./cv\": \"./node_modules/moment/locale/cv.js\",\n\t\"./cv.js\": \"./node_modules/moment/locale/cv.js\",\n\t\"./cy\": \"./node_modules/moment/locale/cy.js\",\n\t\"./cy.js\": \"./node_modules/moment/locale/cy.js\",\n\t\"./da\": \"./node_modules/moment/locale/da.js\",\n\t\"./da.js\": \"./node_modules/moment/locale/da.js\",\n\t\"./de\": \"./node_modules/moment/locale/de.js\",\n\t\"./de-at\": \"./node_modules/moment/locale/de-at.js\",\n\t\"./de-at.js\": \"./node_modules/moment/locale/de-at.js\",\n\t\"./de-ch\": \"./node_modules/moment/locale/de-ch.js\",\n\t\"./de-ch.js\": \"./node_modules/moment/locale/de-ch.js\",\n\t\"./de.js\": \"./node_modules/moment/locale/de.js\",\n\t\"./dv\": \"./node_modules/moment/locale/dv.js\",\n\t\"./dv.js\": \"./node_modules/moment/locale/dv.js\",\n\t\"./el\": \"./node_modules/moment/locale/el.js\",\n\t\"./el.js\": \"./node_modules/moment/locale/el.js\",\n\t\"./en-au\": \"./node_modules/moment/locale/en-au.js\",\n\t\"./en-au.js\": \"./node_modules/moment/locale/en-au.js\",\n\t\"./en-ca\": \"./node_modules/moment/locale/en-ca.js\",\n\t\"./en-ca.js\": \"./node_modules/moment/locale/en-ca.js\",\n\t\"./en-gb\": \"./node_modules/moment/locale/en-gb.js\",\n\t\"./en-gb.js\": \"./node_modules/moment/locale/en-gb.js\",\n\t\"./en-ie\": \"./node_modules/moment/locale/en-ie.js\",\n\t\"./en-ie.js\": \"./node_modules/moment/locale/en-ie.js\",\n\t\"./en-il\": \"./node_modules/moment/locale/en-il.js\",\n\t\"./en-il.js\": \"./node_modules/moment/locale/en-il.js\",\n\t\"./en-nz\": \"./node_modules/moment/locale/en-nz.js\",\n\t\"./en-nz.js\": \"./node_modules/moment/locale/en-nz.js\",\n\t\"./eo\": \"./node_modules/moment/locale/eo.js\",\n\t\"./eo.js\": \"./node_modules/moment/locale/eo.js\",\n\t\"./es\": \"./node_modules/moment/locale/es.js\",\n\t\"./es-do\": \"./node_modules/moment/locale/es-do.js\",\n\t\"./es-do.js\": \"./node_modules/moment/locale/es-do.js\",\n\t\"./es-us\": \"./node_modules/moment/locale/es-us.js\",\n\t\"./es-us.js\": \"./node_modules/moment/locale/es-us.js\",\n\t\"./es.js\": \"./node_modules/moment/locale/es.js\",\n\t\"./et\": \"./node_modules/moment/locale/et.js\",\n\t\"./et.js\": \"./node_modules/moment/locale/et.js\",\n\t\"./eu\": \"./node_modules/moment/locale/eu.js\",\n\t\"./eu.js\": \"./node_modules/moment/locale/eu.js\",\n\t\"./fa\": \"./node_modules/moment/locale/fa.js\",\n\t\"./fa.js\": \"./node_modules/moment/locale/fa.js\",\n\t\"./fi\": \"./node_modules/moment/locale/fi.js\",\n\t\"./fi.js\": \"./node_modules/moment/locale/fi.js\",\n\t\"./fo\": \"./node_modules/moment/locale/fo.js\",\n\t\"./fo.js\": \"./node_modules/moment/locale/fo.js\",\n\t\"./fr\": \"./node_modules/moment/locale/fr.js\",\n\t\"./fr-ca\": \"./node_modules/moment/locale/fr-ca.js\",\n\t\"./fr-ca.js\": \"./node_modules/moment/locale/fr-ca.js\",\n\t\"./fr-ch\": \"./node_modules/moment/locale/fr-ch.js\",\n\t\"./fr-ch.js\": \"./node_modules/moment/locale/fr-ch.js\",\n\t\"./fr.js\": \"./node_modules/moment/locale/fr.js\",\n\t\"./fy\": \"./node_modules/moment/locale/fy.js\",\n\t\"./fy.js\": \"./node_modules/moment/locale/fy.js\",\n\t\"./gd\": \"./node_modules/moment/locale/gd.js\",\n\t\"./gd.js\": \"./node_modules/moment/locale/gd.js\",\n\t\"./gl\": \"./node_modules/moment/locale/gl.js\",\n\t\"./gl.js\": \"./node_modules/moment/locale/gl.js\",\n\t\"./gom-latn\": \"./node_modules/moment/locale/gom-latn.js\",\n\t\"./gom-latn.js\": \"./node_modules/moment/locale/gom-latn.js\",\n\t\"./gu\": \"./node_modules/moment/locale/gu.js\",\n\t\"./gu.js\": \"./node_modules/moment/locale/gu.js\",\n\t\"./he\": \"./node_modules/moment/locale/he.js\",\n\t\"./he.js\": \"./node_modules/moment/locale/he.js\",\n\t\"./hi\": \"./node_modules/moment/locale/hi.js\",\n\t\"./hi.js\": \"./node_modules/moment/locale/hi.js\",\n\t\"./hr\": \"./node_modules/moment/locale/hr.js\",\n\t\"./hr.js\": \"./node_modules/moment/locale/hr.js\",\n\t\"./hu\": \"./node_modules/moment/locale/hu.js\",\n\t\"./hu.js\": \"./node_modules/moment/locale/hu.js\",\n\t\"./hy-am\": \"./node_modules/moment/locale/hy-am.js\",\n\t\"./hy-am.js\": \"./node_modules/moment/locale/hy-am.js\",\n\t\"./id\": \"./node_modules/moment/locale/id.js\",\n\t\"./id.js\": \"./node_modules/moment/locale/id.js\",\n\t\"./is\": \"./node_modules/moment/locale/is.js\",\n\t\"./is.js\": \"./node_modules/moment/locale/is.js\",\n\t\"./it\": \"./node_modules/moment/locale/it.js\",\n\t\"./it.js\": \"./node_modules/moment/locale/it.js\",\n\t\"./ja\": \"./node_modules/moment/locale/ja.js\",\n\t\"./ja.js\": \"./node_modules/moment/locale/ja.js\",\n\t\"./jv\": \"./node_modules/moment/locale/jv.js\",\n\t\"./jv.js\": \"./node_modules/moment/locale/jv.js\",\n\t\"./ka\": \"./node_modules/moment/locale/ka.js\",\n\t\"./ka.js\": \"./node_modules/moment/locale/ka.js\",\n\t\"./kk\": \"./node_modules/moment/locale/kk.js\",\n\t\"./kk.js\": \"./node_modules/moment/locale/kk.js\",\n\t\"./km\": \"./node_modules/moment/locale/km.js\",\n\t\"./km.js\": \"./node_modules/moment/locale/km.js\",\n\t\"./kn\": \"./node_modules/moment/locale/kn.js\",\n\t\"./kn.js\": \"./node_modules/moment/locale/kn.js\",\n\t\"./ko\": \"./node_modules/moment/locale/ko.js\",\n\t\"./ko.js\": \"./node_modules/moment/locale/ko.js\",\n\t\"./ky\": \"./node_modules/moment/locale/ky.js\",\n\t\"./ky.js\": \"./node_modules/moment/locale/ky.js\",\n\t\"./lb\": \"./node_modules/moment/locale/lb.js\",\n\t\"./lb.js\": \"./node_modules/moment/locale/lb.js\",\n\t\"./lo\": \"./node_modules/moment/locale/lo.js\",\n\t\"./lo.js\": \"./node_modules/moment/locale/lo.js\",\n\t\"./lt\": \"./node_modules/moment/locale/lt.js\",\n\t\"./lt.js\": \"./node_modules/moment/locale/lt.js\",\n\t\"./lv\": \"./node_modules/moment/locale/lv.js\",\n\t\"./lv.js\": \"./node_modules/moment/locale/lv.js\",\n\t\"./me\": \"./node_modules/moment/locale/me.js\",\n\t\"./me.js\": \"./node_modules/moment/locale/me.js\",\n\t\"./mi\": \"./node_modules/moment/locale/mi.js\",\n\t\"./mi.js\": \"./node_modules/moment/locale/mi.js\",\n\t\"./mk\": \"./node_modules/moment/locale/mk.js\",\n\t\"./mk.js\": \"./node_modules/moment/locale/mk.js\",\n\t\"./ml\": \"./node_modules/moment/locale/ml.js\",\n\t\"./ml.js\": \"./node_modules/moment/locale/ml.js\",\n\t\"./mn\": \"./node_modules/moment/locale/mn.js\",\n\t\"./mn.js\": \"./node_modules/moment/locale/mn.js\",\n\t\"./mr\": \"./node_modules/moment/locale/mr.js\",\n\t\"./mr.js\": \"./node_modules/moment/locale/mr.js\",\n\t\"./ms\": \"./node_modules/moment/locale/ms.js\",\n\t\"./ms-my\": \"./node_modules/moment/locale/ms-my.js\",\n\t\"./ms-my.js\": \"./node_modules/moment/locale/ms-my.js\",\n\t\"./ms.js\": \"./node_modules/moment/locale/ms.js\",\n\t\"./mt\": \"./node_modules/moment/locale/mt.js\",\n\t\"./mt.js\": \"./node_modules/moment/locale/mt.js\",\n\t\"./my\": \"./node_modules/moment/locale/my.js\",\n\t\"./my.js\": \"./node_modules/moment/locale/my.js\",\n\t\"./nb\": \"./node_modules/moment/locale/nb.js\",\n\t\"./nb.js\": \"./node_modules/moment/locale/nb.js\",\n\t\"./ne\": \"./node_modules/moment/locale/ne.js\",\n\t\"./ne.js\": \"./node_modules/moment/locale/ne.js\",\n\t\"./nl\": \"./node_modules/moment/locale/nl.js\",\n\t\"./nl-be\": \"./node_modules/moment/locale/nl-be.js\",\n\t\"./nl-be.js\": \"./node_modules/moment/locale/nl-be.js\",\n\t\"./nl.js\": \"./node_modules/moment/locale/nl.js\",\n\t\"./nn\": \"./node_modules/moment/locale/nn.js\",\n\t\"./nn.js\": \"./node_modules/moment/locale/nn.js\",\n\t\"./pa-in\": \"./node_modules/moment/locale/pa-in.js\",\n\t\"./pa-in.js\": \"./node_modules/moment/locale/pa-in.js\",\n\t\"./pl\": \"./node_modules/moment/locale/pl.js\",\n\t\"./pl.js\": \"./node_modules/moment/locale/pl.js\",\n\t\"./pt\": \"./node_modules/moment/locale/pt.js\",\n\t\"./pt-br\": \"./node_modules/moment/locale/pt-br.js\",\n\t\"./pt-br.js\": \"./node_modules/moment/locale/pt-br.js\",\n\t\"./pt.js\": \"./node_modules/moment/locale/pt.js\",\n\t\"./ro\": \"./node_modules/moment/locale/ro.js\",\n\t\"./ro.js\": \"./node_modules/moment/locale/ro.js\",\n\t\"./ru\": \"./node_modules/moment/locale/ru.js\",\n\t\"./ru.js\": \"./node_modules/moment/locale/ru.js\",\n\t\"./sd\": \"./node_modules/moment/locale/sd.js\",\n\t\"./sd.js\": \"./node_modules/moment/locale/sd.js\",\n\t\"./se\": \"./node_modules/moment/locale/se.js\",\n\t\"./se.js\": \"./node_modules/moment/locale/se.js\",\n\t\"./si\": \"./node_modules/moment/locale/si.js\",\n\t\"./si.js\": \"./node_modules/moment/locale/si.js\",\n\t\"./sk\": \"./node_modules/moment/locale/sk.js\",\n\t\"./sk.js\": \"./node_modules/moment/locale/sk.js\",\n\t\"./sl\": \"./node_modules/moment/locale/sl.js\",\n\t\"./sl.js\": \"./node_modules/moment/locale/sl.js\",\n\t\"./sq\": \"./node_modules/moment/locale/sq.js\",\n\t\"./sq.js\": \"./node_modules/moment/locale/sq.js\",\n\t\"./sr\": \"./node_modules/moment/locale/sr.js\",\n\t\"./sr-cyrl\": \"./node_modules/moment/locale/sr-cyrl.js\",\n\t\"./sr-cyrl.js\": \"./node_modules/moment/locale/sr-cyrl.js\",\n\t\"./sr.js\": \"./node_modules/moment/locale/sr.js\",\n\t\"./ss\": \"./node_modules/moment/locale/ss.js\",\n\t\"./ss.js\": \"./node_modules/moment/locale/ss.js\",\n\t\"./sv\": \"./node_modules/moment/locale/sv.js\",\n\t\"./sv.js\": \"./node_modules/moment/locale/sv.js\",\n\t\"./sw\": \"./node_modules/moment/locale/sw.js\",\n\t\"./sw.js\": \"./node_modules/moment/locale/sw.js\",\n\t\"./ta\": \"./node_modules/moment/locale/ta.js\",\n\t\"./ta.js\": \"./node_modules/moment/locale/ta.js\",\n\t\"./te\": \"./node_modules/moment/locale/te.js\",\n\t\"./te.js\": \"./node_modules/moment/locale/te.js\",\n\t\"./tet\": \"./node_modules/moment/locale/tet.js\",\n\t\"./tet.js\": \"./node_modules/moment/locale/tet.js\",\n\t\"./tg\": \"./node_modules/moment/locale/tg.js\",\n\t\"./tg.js\": \"./node_modules/moment/locale/tg.js\",\n\t\"./th\": \"./node_modules/moment/locale/th.js\",\n\t\"./th.js\": \"./node_modules/moment/locale/th.js\",\n\t\"./tl-ph\": \"./node_modules/moment/locale/tl-ph.js\",\n\t\"./tl-ph.js\": \"./node_modules/moment/locale/tl-ph.js\",\n\t\"./tlh\": \"./node_modules/moment/locale/tlh.js\",\n\t\"./tlh.js\": \"./node_modules/moment/locale/tlh.js\",\n\t\"./tr\": \"./node_modules/moment/locale/tr.js\",\n\t\"./tr.js\": \"./node_modules/moment/locale/tr.js\",\n\t\"./tzl\": \"./node_modules/moment/locale/tzl.js\",\n\t\"./tzl.js\": \"./node_modules/moment/locale/tzl.js\",\n\t\"./tzm\": \"./node_modules/moment/locale/tzm.js\",\n\t\"./tzm-latn\": \"./node_modules/moment/locale/tzm-latn.js\",\n\t\"./tzm-latn.js\": \"./node_modules/moment/locale/tzm-latn.js\",\n\t\"./tzm.js\": \"./node_modules/moment/locale/tzm.js\",\n\t\"./ug-cn\": \"./node_modules/moment/locale/ug-cn.js\",\n\t\"./ug-cn.js\": \"./node_modules/moment/locale/ug-cn.js\",\n\t\"./uk\": \"./node_modules/moment/locale/uk.js\",\n\t\"./uk.js\": \"./node_modules/moment/locale/uk.js\",\n\t\"./ur\": \"./node_modules/moment/locale/ur.js\",\n\t\"./ur.js\": \"./node_modules/moment/locale/ur.js\",\n\t\"./uz\": \"./node_modules/moment/locale/uz.js\",\n\t\"./uz-latn\": \"./node_modules/moment/locale/uz-latn.js\",\n\t\"./uz-latn.js\": \"./node_modules/moment/locale/uz-latn.js\",\n\t\"./uz.js\": \"./node_modules/moment/locale/uz.js\",\n\t\"./vi\": \"./node_modules/moment/locale/vi.js\",\n\t\"./vi.js\": \"./node_modules/moment/locale/vi.js\",\n\t\"./x-pseudo\": \"./node_modules/moment/locale/x-pseudo.js\",\n\t\"./x-pseudo.js\": \"./node_modules/moment/locale/x-pseudo.js\",\n\t\"./yo\": \"./node_modules/moment/locale/yo.js\",\n\t\"./yo.js\": \"./node_modules/moment/locale/yo.js\",\n\t\"./zh-cn\": \"./node_modules/moment/locale/zh-cn.js\",\n\t\"./zh-cn.js\": \"./node_modules/moment/locale/zh-cn.js\",\n\t\"./zh-hk\": \"./node_modules/moment/locale/zh-hk.js\",\n\t\"./zh-hk.js\": \"./node_modules/moment/locale/zh-hk.js\",\n\t\"./zh-tw\": \"./node_modules/moment/locale/zh-tw.js\",\n\t\"./zh-tw.js\": \"./node_modules/moment/locale/zh-tw.js\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\tvar module = __webpack_require__(id);\n\treturn module;\n}\nfunction webpackContextResolve(req) {\n\tvar id = map[req];\n\tif(!(id + 1)) { // check for number or string\n\t\tvar e = new Error('Cannot find module \"' + req + '\".');\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn id;\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"./node_modules/moment/locale sync recursive ^\\\\.\\\\/.*$\";\n\n//# sourceURL=webpack:///./node_modules/moment/locale_sync_^\\.\\/.*$?");

/***/ }),

/***/ "./node_modules/moment/locale/af.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/af.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var af = moment.defineLocale('af', {\n        months : 'Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember'.split('_'),\n        monthsShort : 'Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des'.split('_'),\n        weekdays : 'Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag'.split('_'),\n        weekdaysShort : 'Son_Maa_Din_Woe_Don_Vry_Sat'.split('_'),\n        weekdaysMin : 'So_Ma_Di_Wo_Do_Vr_Sa'.split('_'),\n        meridiemParse: /vm|nm/i,\n        isPM : function (input) {\n            return /^nm$/i.test(input);\n        },\n        meridiem : function (hours, minutes, isLower) {\n            if (hours < 12) {\n                return isLower ? 'vm' : 'VM';\n            } else {\n                return isLower ? 'nm' : 'NM';\n            }\n        },\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[Vandag om] LT',\n            nextDay : '[Môre om] LT',\n            nextWeek : 'dddd [om] LT',\n            lastDay : '[Gister om] LT',\n            lastWeek : '[Laas] dddd [om] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'oor %s',\n            past : '%s gelede',\n            s : '\\'n paar sekondes',\n            ss : '%d sekondes',\n            m : '\\'n minuut',\n            mm : '%d minute',\n            h : '\\'n uur',\n            hh : '%d ure',\n            d : '\\'n dag',\n            dd : '%d dae',\n            M : '\\'n maand',\n            MM : '%d maande',\n            y : '\\'n jaar',\n            yy : '%d jaar'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n        ordinal : function (number) {\n            return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de'); // Thanks to Joris Röling : https://github.com/jjupiter\n        },\n        week : {\n            dow : 1, // Maandag is die eerste dag van die week.\n            doy : 4  // Die week wat die 4de Januarie bevat is die eerste week van die jaar.\n        }\n    });\n\n    return af;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/af.js?");

/***/ }),

/***/ "./node_modules/moment/locale/ar-dz.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/ar-dz.js ***!
  \*********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var arDz = moment.defineLocale('ar-dz', {\n        months : 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n        monthsShort : 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n        weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort : 'احد_اثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin : 'أح_إث_ثلا_أر_خم_جم_سب'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[اليوم على الساعة] LT',\n            nextDay: '[غدا على الساعة] LT',\n            nextWeek: 'dddd [على الساعة] LT',\n            lastDay: '[أمس على الساعة] LT',\n            lastWeek: 'dddd [على الساعة] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'في %s',\n            past : 'منذ %s',\n            s : 'ثوان',\n            ss : '%d ثانية',\n            m : 'دقيقة',\n            mm : '%d دقائق',\n            h : 'ساعة',\n            hh : '%d ساعات',\n            d : 'يوم',\n            dd : '%d أيام',\n            M : 'شهر',\n            MM : '%d أشهر',\n            y : 'سنة',\n            yy : '%d سنوات'\n        },\n        week : {\n            dow : 0, // Sunday is the first day of the week.\n            doy : 4  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return arDz;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/ar-dz.js?");

/***/ }),

/***/ "./node_modules/moment/locale/ar-kw.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/ar-kw.js ***!
  \*********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var arKw = moment.defineLocale('ar-kw', {\n        months : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),\n        monthsShort : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),\n        weekdays : 'الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort : 'احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[اليوم على الساعة] LT',\n            nextDay: '[غدا على الساعة] LT',\n            nextWeek: 'dddd [على الساعة] LT',\n            lastDay: '[أمس على الساعة] LT',\n            lastWeek: 'dddd [على الساعة] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'في %s',\n            past : 'منذ %s',\n            s : 'ثوان',\n            ss : '%d ثانية',\n            m : 'دقيقة',\n            mm : '%d دقائق',\n            h : 'ساعة',\n            hh : '%d ساعات',\n            d : 'يوم',\n            dd : '%d أيام',\n            M : 'شهر',\n            MM : '%d أشهر',\n            y : 'سنة',\n            yy : '%d سنوات'\n        },\n        week : {\n            dow : 0, // Sunday is the first day of the week.\n            doy : 12  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return arKw;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/ar-kw.js?");

/***/ }),

/***/ "./node_modules/moment/locale/ar-ly.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/ar-ly.js ***!
  \*********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '1',\n        '2': '2',\n        '3': '3',\n        '4': '4',\n        '5': '5',\n        '6': '6',\n        '7': '7',\n        '8': '8',\n        '9': '9',\n        '0': '0'\n    }, pluralForm = function (n) {\n        return n === 0 ? 0 : n === 1 ? 1 : n === 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5;\n    }, plurals = {\n        s : ['أقل من ثانية', 'ثانية واحدة', ['ثانيتان', 'ثانيتين'], '%d ثوان', '%d ثانية', '%d ثانية'],\n        m : ['أقل من دقيقة', 'دقيقة واحدة', ['دقيقتان', 'دقيقتين'], '%d دقائق', '%d دقيقة', '%d دقيقة'],\n        h : ['أقل من ساعة', 'ساعة واحدة', ['ساعتان', 'ساعتين'], '%d ساعات', '%d ساعة', '%d ساعة'],\n        d : ['أقل من يوم', 'يوم واحد', ['يومان', 'يومين'], '%d أيام', '%d يومًا', '%d يوم'],\n        M : ['أقل من شهر', 'شهر واحد', ['شهران', 'شهرين'], '%d أشهر', '%d شهرا', '%d شهر'],\n        y : ['أقل من عام', 'عام واحد', ['عامان', 'عامين'], '%d أعوام', '%d عامًا', '%d عام']\n    }, pluralize = function (u) {\n        return function (number, withoutSuffix, string, isFuture) {\n            var f = pluralForm(number),\n                str = plurals[u][pluralForm(number)];\n            if (f === 2) {\n                str = str[withoutSuffix ? 0 : 1];\n            }\n            return str.replace(/%d/i, number);\n        };\n    }, months = [\n        'يناير',\n        'فبراير',\n        'مارس',\n        'أبريل',\n        'مايو',\n        'يونيو',\n        'يوليو',\n        'أغسطس',\n        'سبتمبر',\n        'أكتوبر',\n        'نوفمبر',\n        'ديسمبر'\n    ];\n\n    var arLy = moment.defineLocale('ar-ly', {\n        months : months,\n        monthsShort : months,\n        weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort : 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'D/\\u200FM/\\u200FYYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        meridiemParse: /ص|م/,\n        isPM : function (input) {\n            return 'م' === input;\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ص';\n            } else {\n                return 'م';\n            }\n        },\n        calendar : {\n            sameDay: '[اليوم عند الساعة] LT',\n            nextDay: '[غدًا عند الساعة] LT',\n            nextWeek: 'dddd [عند الساعة] LT',\n            lastDay: '[أمس عند الساعة] LT',\n            lastWeek: 'dddd [عند الساعة] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'بعد %s',\n            past : 'منذ %s',\n            s : pluralize('s'),\n            ss : pluralize('s'),\n            m : pluralize('m'),\n            mm : pluralize('m'),\n            h : pluralize('h'),\n            hh : pluralize('h'),\n            d : pluralize('d'),\n            dd : pluralize('d'),\n            M : pluralize('M'),\n            MM : pluralize('M'),\n            y : pluralize('y'),\n            yy : pluralize('y')\n        },\n        preparse: function (string) {\n            return string.replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            }).replace(/,/g, '،');\n        },\n        week : {\n            dow : 6, // Saturday is the first day of the week.\n            doy : 12  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return arLy;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/ar-ly.js?");

/***/ }),

/***/ "./node_modules/moment/locale/ar-ma.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/ar-ma.js ***!
  \*********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var arMa = moment.defineLocale('ar-ma', {\n        months : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),\n        monthsShort : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),\n        weekdays : 'الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort : 'احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[اليوم على الساعة] LT',\n            nextDay: '[غدا على الساعة] LT',\n            nextWeek: 'dddd [على الساعة] LT',\n            lastDay: '[أمس على الساعة] LT',\n            lastWeek: 'dddd [على الساعة] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'في %s',\n            past : 'منذ %s',\n            s : 'ثوان',\n            ss : '%d ثانية',\n            m : 'دقيقة',\n            mm : '%d دقائق',\n            h : 'ساعة',\n            hh : '%d ساعات',\n            d : 'يوم',\n            dd : '%d أيام',\n            M : 'شهر',\n            MM : '%d أشهر',\n            y : 'سنة',\n            yy : '%d سنوات'\n        },\n        week : {\n            dow : 6, // Saturday is the first day of the week.\n            doy : 12  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return arMa;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/ar-ma.js?");

/***/ }),

/***/ "./node_modules/moment/locale/ar-sa.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/ar-sa.js ***!
  \*********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '١',\n        '2': '٢',\n        '3': '٣',\n        '4': '٤',\n        '5': '٥',\n        '6': '٦',\n        '7': '٧',\n        '8': '٨',\n        '9': '٩',\n        '0': '٠'\n    }, numberMap = {\n        '١': '1',\n        '٢': '2',\n        '٣': '3',\n        '٤': '4',\n        '٥': '5',\n        '٦': '6',\n        '٧': '7',\n        '٨': '8',\n        '٩': '9',\n        '٠': '0'\n    };\n\n    var arSa = moment.defineLocale('ar-sa', {\n        months : 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n        monthsShort : 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n        weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort : 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        meridiemParse: /ص|م/,\n        isPM : function (input) {\n            return 'م' === input;\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ص';\n            } else {\n                return 'م';\n            }\n        },\n        calendar : {\n            sameDay: '[اليوم على الساعة] LT',\n            nextDay: '[غدا على الساعة] LT',\n            nextWeek: 'dddd [على الساعة] LT',\n            lastDay: '[أمس على الساعة] LT',\n            lastWeek: 'dddd [على الساعة] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'في %s',\n            past : 'منذ %s',\n            s : 'ثوان',\n            ss : '%d ثانية',\n            m : 'دقيقة',\n            mm : '%d دقائق',\n            h : 'ساعة',\n            hh : '%d ساعات',\n            d : 'يوم',\n            dd : '%d أيام',\n            M : 'شهر',\n            MM : '%d أشهر',\n            y : 'سنة',\n            yy : '%d سنوات'\n        },\n        preparse: function (string) {\n            return string.replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {\n                return numberMap[match];\n            }).replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            }).replace(/,/g, '،');\n        },\n        week : {\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\n    return arSa;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/ar-sa.js?");

/***/ }),

/***/ "./node_modules/moment/locale/ar-tn.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/ar-tn.js ***!
  \*********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var arTn = moment.defineLocale('ar-tn', {\n        months: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n        monthsShort: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n        weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar: {\n            sameDay: '[اليوم على الساعة] LT',\n            nextDay: '[غدا على الساعة] LT',\n            nextWeek: 'dddd [على الساعة] LT',\n            lastDay: '[أمس على الساعة] LT',\n            lastWeek: 'dddd [على الساعة] LT',\n            sameElse: 'L'\n        },\n        relativeTime: {\n            future: 'في %s',\n            past: 'منذ %s',\n            s: 'ثوان',\n            ss : '%d ثانية',\n            m: 'دقيقة',\n            mm: '%d دقائق',\n            h: 'ساعة',\n            hh: '%d ساعات',\n            d: 'يوم',\n            dd: '%d أيام',\n            M: 'شهر',\n            MM: '%d أشهر',\n            y: 'سنة',\n            yy: '%d سنوات'\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4 // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return arTn;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/ar-tn.js?");

/***/ }),

/***/ "./node_modules/moment/locale/ar.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/ar.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '١',\n        '2': '٢',\n        '3': '٣',\n        '4': '٤',\n        '5': '٥',\n        '6': '٦',\n        '7': '٧',\n        '8': '٨',\n        '9': '٩',\n        '0': '٠'\n    }, numberMap = {\n        '١': '1',\n        '٢': '2',\n        '٣': '3',\n        '٤': '4',\n        '٥': '5',\n        '٦': '6',\n        '٧': '7',\n        '٨': '8',\n        '٩': '9',\n        '٠': '0'\n    }, pluralForm = function (n) {\n        return n === 0 ? 0 : n === 1 ? 1 : n === 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5;\n    }, plurals = {\n        s : ['أقل من ثانية', 'ثانية واحدة', ['ثانيتان', 'ثانيتين'], '%d ثوان', '%d ثانية', '%d ثانية'],\n        m : ['أقل من دقيقة', 'دقيقة واحدة', ['دقيقتان', 'دقيقتين'], '%d دقائق', '%d دقيقة', '%d دقيقة'],\n        h : ['أقل من ساعة', 'ساعة واحدة', ['ساعتان', 'ساعتين'], '%d ساعات', '%d ساعة', '%d ساعة'],\n        d : ['أقل من يوم', 'يوم واحد', ['يومان', 'يومين'], '%d أيام', '%d يومًا', '%d يوم'],\n        M : ['أقل من شهر', 'شهر واحد', ['شهران', 'شهرين'], '%d أشهر', '%d شهرا', '%d شهر'],\n        y : ['أقل من عام', 'عام واحد', ['عامان', 'عامين'], '%d أعوام', '%d عامًا', '%d عام']\n    }, pluralize = function (u) {\n        return function (number, withoutSuffix, string, isFuture) {\n            var f = pluralForm(number),\n                str = plurals[u][pluralForm(number)];\n            if (f === 2) {\n                str = str[withoutSuffix ? 0 : 1];\n            }\n            return str.replace(/%d/i, number);\n        };\n    }, months = [\n        'يناير',\n        'فبراير',\n        'مارس',\n        'أبريل',\n        'مايو',\n        'يونيو',\n        'يوليو',\n        'أغسطس',\n        'سبتمبر',\n        'أكتوبر',\n        'نوفمبر',\n        'ديسمبر'\n    ];\n\n    var ar = moment.defineLocale('ar', {\n        months : months,\n        monthsShort : months,\n        weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort : 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'D/\\u200FM/\\u200FYYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        meridiemParse: /ص|م/,\n        isPM : function (input) {\n            return 'م' === input;\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ص';\n            } else {\n                return 'م';\n            }\n        },\n        calendar : {\n            sameDay: '[اليوم عند الساعة] LT',\n            nextDay: '[غدًا عند الساعة] LT',\n            nextWeek: 'dddd [عند الساعة] LT',\n            lastDay: '[أمس عند الساعة] LT',\n            lastWeek: 'dddd [عند الساعة] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'بعد %s',\n            past : 'منذ %s',\n            s : pluralize('s'),\n            ss : pluralize('s'),\n            m : pluralize('m'),\n            mm : pluralize('m'),\n            h : pluralize('h'),\n            hh : pluralize('h'),\n            d : pluralize('d'),\n            dd : pluralize('d'),\n            M : pluralize('M'),\n            MM : pluralize('M'),\n            y : pluralize('y'),\n            yy : pluralize('y')\n        },\n        preparse: function (string) {\n            return string.replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {\n                return numberMap[match];\n            }).replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            }).replace(/,/g, '،');\n        },\n        week : {\n            dow : 6, // Saturday is the first day of the week.\n            doy : 12  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return ar;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/ar.js?");

/***/ }),

/***/ "./node_modules/moment/locale/az.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/az.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var suffixes = {\n        1: '-inci',\n        5: '-inci',\n        8: '-inci',\n        70: '-inci',\n        80: '-inci',\n        2: '-nci',\n        7: '-nci',\n        20: '-nci',\n        50: '-nci',\n        3: '-üncü',\n        4: '-üncü',\n        100: '-üncü',\n        6: '-ncı',\n        9: '-uncu',\n        10: '-uncu',\n        30: '-uncu',\n        60: '-ıncı',\n        90: '-ıncı'\n    };\n\n    var az = moment.defineLocale('az', {\n        months : 'yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr'.split('_'),\n        monthsShort : 'yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek'.split('_'),\n        weekdays : 'Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə'.split('_'),\n        weekdaysShort : 'Baz_BzE_ÇAx_Çər_CAx_Cüm_Şən'.split('_'),\n        weekdaysMin : 'Bz_BE_ÇA_Çə_CA_Cü_Şə'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[bugün saat] LT',\n            nextDay : '[sabah saat] LT',\n            nextWeek : '[gələn həftə] dddd [saat] LT',\n            lastDay : '[dünən] LT',\n            lastWeek : '[keçən həftə] dddd [saat] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s sonra',\n            past : '%s əvvəl',\n            s : 'birneçə saniyə',\n            ss : '%d saniyə',\n            m : 'bir dəqiqə',\n            mm : '%d dəqiqə',\n            h : 'bir saat',\n            hh : '%d saat',\n            d : 'bir gün',\n            dd : '%d gün',\n            M : 'bir ay',\n            MM : '%d ay',\n            y : 'bir il',\n            yy : '%d il'\n        },\n        meridiemParse: /gecə|səhər|gündüz|axşam/,\n        isPM : function (input) {\n            return /^(gündüz|axşam)$/.test(input);\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'gecə';\n            } else if (hour < 12) {\n                return 'səhər';\n            } else if (hour < 17) {\n                return 'gündüz';\n            } else {\n                return 'axşam';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(ıncı|inci|nci|üncü|ncı|uncu)/,\n        ordinal : function (number) {\n            if (number === 0) {  // special case for zero\n                return number + '-ıncı';\n            }\n            var a = number % 10,\n                b = number % 100 - a,\n                c = number >= 100 ? 100 : null;\n            return number + (suffixes[a] || suffixes[b] || suffixes[c]);\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return az;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/az.js?");

/***/ }),

/***/ "./node_modules/moment/locale/be.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/be.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    function plural(word, num) {\n        var forms = word.split('_');\n        return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]);\n    }\n    function relativeTimeWithPlural(number, withoutSuffix, key) {\n        var format = {\n            'ss': withoutSuffix ? 'секунда_секунды_секунд' : 'секунду_секунды_секунд',\n            'mm': withoutSuffix ? 'хвіліна_хвіліны_хвілін' : 'хвіліну_хвіліны_хвілін',\n            'hh': withoutSuffix ? 'гадзіна_гадзіны_гадзін' : 'гадзіну_гадзіны_гадзін',\n            'dd': 'дзень_дні_дзён',\n            'MM': 'месяц_месяцы_месяцаў',\n            'yy': 'год_гады_гадоў'\n        };\n        if (key === 'm') {\n            return withoutSuffix ? 'хвіліна' : 'хвіліну';\n        }\n        else if (key === 'h') {\n            return withoutSuffix ? 'гадзіна' : 'гадзіну';\n        }\n        else {\n            return number + ' ' + plural(format[key], +number);\n        }\n    }\n\n    var be = moment.defineLocale('be', {\n        months : {\n            format: 'студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня'.split('_'),\n            standalone: 'студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань'.split('_')\n        },\n        monthsShort : 'студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж'.split('_'),\n        weekdays : {\n            format: 'нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу'.split('_'),\n            standalone: 'нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота'.split('_'),\n            isFormat: /\\[ ?[Ууў] ?(?:мінулую|наступную)? ?\\] ?dddd/\n        },\n        weekdaysShort : 'нд_пн_ат_ср_чц_пт_сб'.split('_'),\n        weekdaysMin : 'нд_пн_ат_ср_чц_пт_сб'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY г.',\n            LLL : 'D MMMM YYYY г., HH:mm',\n            LLLL : 'dddd, D MMMM YYYY г., HH:mm'\n        },\n        calendar : {\n            sameDay: '[Сёння ў] LT',\n            nextDay: '[Заўтра ў] LT',\n            lastDay: '[Учора ў] LT',\n            nextWeek: function () {\n                return '[У] dddd [ў] LT';\n            },\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                    case 3:\n                    case 5:\n                    case 6:\n                        return '[У мінулую] dddd [ў] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                        return '[У мінулы] dddd [ў] LT';\n                }\n            },\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'праз %s',\n            past : '%s таму',\n            s : 'некалькі секунд',\n            m : relativeTimeWithPlural,\n            mm : relativeTimeWithPlural,\n            h : relativeTimeWithPlural,\n            hh : relativeTimeWithPlural,\n            d : 'дзень',\n            dd : relativeTimeWithPlural,\n            M : 'месяц',\n            MM : relativeTimeWithPlural,\n            y : 'год',\n            yy : relativeTimeWithPlural\n        },\n        meridiemParse: /ночы|раніцы|дня|вечара/,\n        isPM : function (input) {\n            return /^(дня|вечара)$/.test(input);\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'ночы';\n            } else if (hour < 12) {\n                return 'раніцы';\n            } else if (hour < 17) {\n                return 'дня';\n            } else {\n                return 'вечара';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(і|ы|га)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'M':\n                case 'd':\n                case 'DDD':\n                case 'w':\n                case 'W':\n                    return (number % 10 === 2 || number % 10 === 3) && (number % 100 !== 12 && number % 100 !== 13) ? number + '-і' : number + '-ы';\n                case 'D':\n                    return number + '-га';\n                default:\n                    return number;\n            }\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return be;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/be.js?");

/***/ }),

/***/ "./node_modules/moment/locale/bg.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/bg.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var bg = moment.defineLocale('bg', {\n        months : 'януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември'.split('_'),\n        monthsShort : 'янр_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек'.split('_'),\n        weekdays : 'неделя_понеделник_вторник_сряда_четвъртък_петък_събота'.split('_'),\n        weekdaysShort : 'нед_пон_вто_сря_чет_пет_съб'.split('_'),\n        weekdaysMin : 'нд_пн_вт_ср_чт_пт_сб'.split('_'),\n        longDateFormat : {\n            LT : 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'D.MM.YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY H:mm',\n            LLLL : 'dddd, D MMMM YYYY H:mm'\n        },\n        calendar : {\n            sameDay : '[Днес в] LT',\n            nextDay : '[Утре в] LT',\n            nextWeek : 'dddd [в] LT',\n            lastDay : '[Вчера в] LT',\n            lastWeek : function () {\n                switch (this.day()) {\n                    case 0:\n                    case 3:\n                    case 6:\n                        return '[В изминалата] dddd [в] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[В изминалия] dddd [в] LT';\n                }\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'след %s',\n            past : 'преди %s',\n            s : 'няколко секунди',\n            ss : '%d секунди',\n            m : 'минута',\n            mm : '%d минути',\n            h : 'час',\n            hh : '%d часа',\n            d : 'ден',\n            dd : '%d дни',\n            M : 'месец',\n            MM : '%d месеца',\n            y : 'година',\n            yy : '%d години'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(ев|ен|ти|ви|ри|ми)/,\n        ordinal : function (number) {\n            var lastDigit = number % 10,\n                last2Digits = number % 100;\n            if (number === 0) {\n                return number + '-ев';\n            } else if (last2Digits === 0) {\n                return number + '-ен';\n            } else if (last2Digits > 10 && last2Digits < 20) {\n                return number + '-ти';\n            } else if (lastDigit === 1) {\n                return number + '-ви';\n            } else if (lastDigit === 2) {\n                return number + '-ри';\n            } else if (lastDigit === 7 || lastDigit === 8) {\n                return number + '-ми';\n            } else {\n                return number + '-ти';\n            }\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return bg;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/bg.js?");

/***/ }),

/***/ "./node_modules/moment/locale/bm.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/bm.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var bm = moment.defineLocale('bm', {\n        months : 'Zanwuyekalo_Fewuruyekalo_Marisikalo_Awirilikalo_Mɛkalo_Zuwɛnkalo_Zuluyekalo_Utikalo_Sɛtanburukalo_ɔkutɔburukalo_Nowanburukalo_Desanburukalo'.split('_'),\n        monthsShort : 'Zan_Few_Mar_Awi_Mɛ_Zuw_Zul_Uti_Sɛt_ɔku_Now_Des'.split('_'),\n        weekdays : 'Kari_Ntɛnɛn_Tarata_Araba_Alamisa_Juma_Sibiri'.split('_'),\n        weekdaysShort : 'Kar_Ntɛ_Tar_Ara_Ala_Jum_Sib'.split('_'),\n        weekdaysMin : 'Ka_Nt_Ta_Ar_Al_Ju_Si'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'MMMM [tile] D [san] YYYY',\n            LLL : 'MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm',\n            LLLL : 'dddd MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm'\n        },\n        calendar : {\n            sameDay : '[Bi lɛrɛ] LT',\n            nextDay : '[Sini lɛrɛ] LT',\n            nextWeek : 'dddd [don lɛrɛ] LT',\n            lastDay : '[Kunu lɛrɛ] LT',\n            lastWeek : 'dddd [tɛmɛnen lɛrɛ] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s kɔnɔ',\n            past : 'a bɛ %s bɔ',\n            s : 'sanga dama dama',\n            ss : 'sekondi %d',\n            m : 'miniti kelen',\n            mm : 'miniti %d',\n            h : 'lɛrɛ kelen',\n            hh : 'lɛrɛ %d',\n            d : 'tile kelen',\n            dd : 'tile %d',\n            M : 'kalo kelen',\n            MM : 'kalo %d',\n            y : 'san kelen',\n            yy : 'san %d'\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return bm;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/bm.js?");

/***/ }),

/***/ "./node_modules/moment/locale/bn.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/bn.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '১',\n        '2': '২',\n        '3': '৩',\n        '4': '৪',\n        '5': '৫',\n        '6': '৬',\n        '7': '৭',\n        '8': '৮',\n        '9': '৯',\n        '0': '০'\n    },\n    numberMap = {\n        '১': '1',\n        '২': '2',\n        '৩': '3',\n        '৪': '4',\n        '৫': '5',\n        '৬': '6',\n        '৭': '7',\n        '৮': '8',\n        '৯': '9',\n        '০': '0'\n    };\n\n    var bn = moment.defineLocale('bn', {\n        months : 'জানুয়ারী_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর'.split('_'),\n        monthsShort : 'জানু_ফেব_মার্চ_এপ্র_মে_জুন_জুল_আগ_সেপ্ট_অক্টো_নভে_ডিসে'.split('_'),\n        weekdays : 'রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার'.split('_'),\n        weekdaysShort : 'রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি'.split('_'),\n        weekdaysMin : 'রবি_সোম_মঙ্গ_বুধ_বৃহঃ_শুক্র_শনি'.split('_'),\n        longDateFormat : {\n            LT : 'A h:mm সময়',\n            LTS : 'A h:mm:ss সময়',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY, A h:mm সময়',\n            LLLL : 'dddd, D MMMM YYYY, A h:mm সময়'\n        },\n        calendar : {\n            sameDay : '[আজ] LT',\n            nextDay : '[আগামীকাল] LT',\n            nextWeek : 'dddd, LT',\n            lastDay : '[গতকাল] LT',\n            lastWeek : '[গত] dddd, LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s পরে',\n            past : '%s আগে',\n            s : 'কয়েক সেকেন্ড',\n            ss : '%d সেকেন্ড',\n            m : 'এক মিনিট',\n            mm : '%d মিনিট',\n            h : 'এক ঘন্টা',\n            hh : '%d ঘন্টা',\n            d : 'এক দিন',\n            dd : '%d দিন',\n            M : 'এক মাস',\n            MM : '%d মাস',\n            y : 'এক বছর',\n            yy : '%d বছর'\n        },\n        preparse: function (string) {\n            return string.replace(/[১২৩৪৫৬৭৮৯০]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        meridiemParse: /রাত|সকাল|দুপুর|বিকাল|রাত/,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if ((meridiem === 'রাত' && hour >= 4) ||\n                    (meridiem === 'দুপুর' && hour < 5) ||\n                    meridiem === 'বিকাল') {\n                return hour + 12;\n            } else {\n                return hour;\n            }\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'রাত';\n            } else if (hour < 10) {\n                return 'সকাল';\n            } else if (hour < 17) {\n                return 'দুপুর';\n            } else if (hour < 20) {\n                return 'বিকাল';\n            } else {\n                return 'রাত';\n            }\n        },\n        week : {\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\n    return bn;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/bn.js?");

/***/ }),

/***/ "./node_modules/moment/locale/bo.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/bo.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '༡',\n        '2': '༢',\n        '3': '༣',\n        '4': '༤',\n        '5': '༥',\n        '6': '༦',\n        '7': '༧',\n        '8': '༨',\n        '9': '༩',\n        '0': '༠'\n    },\n    numberMap = {\n        '༡': '1',\n        '༢': '2',\n        '༣': '3',\n        '༤': '4',\n        '༥': '5',\n        '༦': '6',\n        '༧': '7',\n        '༨': '8',\n        '༩': '9',\n        '༠': '0'\n    };\n\n    var bo = moment.defineLocale('bo', {\n        months : 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split('_'),\n        monthsShort : 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split('_'),\n        weekdays : 'གཟའ་ཉི་མ་_གཟའ་ཟླ་བ་_གཟའ་མིག་དམར་_གཟའ་ལྷག་པ་_གཟའ་ཕུར་བུ_གཟའ་པ་སངས་_གཟའ་སྤེན་པ་'.split('_'),\n        weekdaysShort : 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split('_'),\n        weekdaysMin : 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split('_'),\n        longDateFormat : {\n            LT : 'A h:mm',\n            LTS : 'A h:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY, A h:mm',\n            LLLL : 'dddd, D MMMM YYYY, A h:mm'\n        },\n        calendar : {\n            sameDay : '[དི་རིང] LT',\n            nextDay : '[སང་ཉིན] LT',\n            nextWeek : '[བདུན་ཕྲག་རྗེས་མ], LT',\n            lastDay : '[ཁ་སང] LT',\n            lastWeek : '[བདུན་ཕྲག་མཐའ་མ] dddd, LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s ལ་',\n            past : '%s སྔན་ལ',\n            s : 'ལམ་སང',\n            ss : '%d སྐར་ཆ།',\n            m : 'སྐར་མ་གཅིག',\n            mm : '%d སྐར་མ',\n            h : 'ཆུ་ཚོད་གཅིག',\n            hh : '%d ཆུ་ཚོད',\n            d : 'ཉིན་གཅིག',\n            dd : '%d ཉིན་',\n            M : 'ཟླ་བ་གཅིག',\n            MM : '%d ཟླ་བ',\n            y : 'ལོ་གཅིག',\n            yy : '%d ལོ'\n        },\n        preparse: function (string) {\n            return string.replace(/[༡༢༣༤༥༦༧༨༩༠]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        meridiemParse: /མཚན་མོ|ཞོགས་ཀས|ཉིན་གུང|དགོང་དག|མཚན་མོ/,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if ((meridiem === 'མཚན་མོ' && hour >= 4) ||\n                    (meridiem === 'ཉིན་གུང' && hour < 5) ||\n                    meridiem === 'དགོང་དག') {\n                return hour + 12;\n            } else {\n                return hour;\n            }\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'མཚན་མོ';\n            } else if (hour < 10) {\n                return 'ཞོགས་ཀས';\n            } else if (hour < 17) {\n                return 'ཉིན་གུང';\n            } else if (hour < 20) {\n                return 'དགོང་དག';\n            } else {\n                return 'མཚན་མོ';\n            }\n        },\n        week : {\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\n    return bo;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/bo.js?");

/***/ }),

/***/ "./node_modules/moment/locale/br.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/br.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    function relativeTimeWithMutation(number, withoutSuffix, key) {\n        var format = {\n            'mm': 'munutenn',\n            'MM': 'miz',\n            'dd': 'devezh'\n        };\n        return number + ' ' + mutation(format[key], number);\n    }\n    function specialMutationForYears(number) {\n        switch (lastNumber(number)) {\n            case 1:\n            case 3:\n            case 4:\n            case 5:\n            case 9:\n                return number + ' bloaz';\n            default:\n                return number + ' vloaz';\n        }\n    }\n    function lastNumber(number) {\n        if (number > 9) {\n            return lastNumber(number % 10);\n        }\n        return number;\n    }\n    function mutation(text, number) {\n        if (number === 2) {\n            return softMutation(text);\n        }\n        return text;\n    }\n    function softMutation(text) {\n        var mutationTable = {\n            'm': 'v',\n            'b': 'v',\n            'd': 'z'\n        };\n        if (mutationTable[text.charAt(0)] === undefined) {\n            return text;\n        }\n        return mutationTable[text.charAt(0)] + text.substring(1);\n    }\n\n    var br = moment.defineLocale('br', {\n        months : 'Genver_C\\'hwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu'.split('_'),\n        monthsShort : 'Gen_C\\'hwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker'.split('_'),\n        weekdays : 'Sul_Lun_Meurzh_Merc\\'her_Yaou_Gwener_Sadorn'.split('_'),\n        weekdaysShort : 'Sul_Lun_Meu_Mer_Yao_Gwe_Sad'.split('_'),\n        weekdaysMin : 'Su_Lu_Me_Mer_Ya_Gw_Sa'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'h[e]mm A',\n            LTS : 'h[e]mm:ss A',\n            L : 'DD/MM/YYYY',\n            LL : 'D [a viz] MMMM YYYY',\n            LLL : 'D [a viz] MMMM YYYY h[e]mm A',\n            LLLL : 'dddd, D [a viz] MMMM YYYY h[e]mm A'\n        },\n        calendar : {\n            sameDay : '[Hiziv da] LT',\n            nextDay : '[Warc\\'hoazh da] LT',\n            nextWeek : 'dddd [da] LT',\n            lastDay : '[Dec\\'h da] LT',\n            lastWeek : 'dddd [paset da] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'a-benn %s',\n            past : '%s \\'zo',\n            s : 'un nebeud segondennoù',\n            ss : '%d eilenn',\n            m : 'ur vunutenn',\n            mm : relativeTimeWithMutation,\n            h : 'un eur',\n            hh : '%d eur',\n            d : 'un devezh',\n            dd : relativeTimeWithMutation,\n            M : 'ur miz',\n            MM : relativeTimeWithMutation,\n            y : 'ur bloaz',\n            yy : specialMutationForYears\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(añ|vet)/,\n        ordinal : function (number) {\n            var output = (number === 1) ? 'añ' : 'vet';\n            return number + output;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return br;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/br.js?");

/***/ }),

/***/ "./node_modules/moment/locale/bs.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/bs.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    function translate(number, withoutSuffix, key) {\n        var result = number + ' ';\n        switch (key) {\n            case 'ss':\n                if (number === 1) {\n                    result += 'sekunda';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'sekunde';\n                } else {\n                    result += 'sekundi';\n                }\n                return result;\n            case 'm':\n                return withoutSuffix ? 'jedna minuta' : 'jedne minute';\n            case 'mm':\n                if (number === 1) {\n                    result += 'minuta';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'minute';\n                } else {\n                    result += 'minuta';\n                }\n                return result;\n            case 'h':\n                return withoutSuffix ? 'jedan sat' : 'jednog sata';\n            case 'hh':\n                if (number === 1) {\n                    result += 'sat';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'sata';\n                } else {\n                    result += 'sati';\n                }\n                return result;\n            case 'dd':\n                if (number === 1) {\n                    result += 'dan';\n                } else {\n                    result += 'dana';\n                }\n                return result;\n            case 'MM':\n                if (number === 1) {\n                    result += 'mjesec';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'mjeseca';\n                } else {\n                    result += 'mjeseci';\n                }\n                return result;\n            case 'yy':\n                if (number === 1) {\n                    result += 'godina';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'godine';\n                } else {\n                    result += 'godina';\n                }\n                return result;\n        }\n    }\n\n    var bs = moment.defineLocale('bs', {\n        months : 'januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar'.split('_'),\n        monthsShort : 'jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.'.split('_'),\n        monthsParseExact: true,\n        weekdays : 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'),\n        weekdaysShort : 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),\n        weekdaysMin : 'ne_po_ut_sr_če_pe_su'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D. MMMM YYYY',\n            LLL : 'D. MMMM YYYY H:mm',\n            LLLL : 'dddd, D. MMMM YYYY H:mm'\n        },\n        calendar : {\n            sameDay  : '[danas u] LT',\n            nextDay  : '[sutra u] LT',\n            nextWeek : function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[u] [nedjelju] [u] LT';\n                    case 3:\n                        return '[u] [srijedu] [u] LT';\n                    case 6:\n                        return '[u] [subotu] [u] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[u] dddd [u] LT';\n                }\n            },\n            lastDay  : '[jučer u] LT',\n            lastWeek : function () {\n                switch (this.day()) {\n                    case 0:\n                    case 3:\n                        return '[prošlu] dddd [u] LT';\n                    case 6:\n                        return '[prošle] [subote] [u] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[prošli] dddd [u] LT';\n                }\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'za %s',\n            past   : 'prije %s',\n            s      : 'par sekundi',\n            ss     : translate,\n            m      : translate,\n            mm     : translate,\n            h      : translate,\n            hh     : translate,\n            d      : 'dan',\n            dd     : translate,\n            M      : 'mjesec',\n            MM     : translate,\n            y      : 'godinu',\n            yy     : translate\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return bs;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/bs.js?");

/***/ }),

/***/ "./node_modules/moment/locale/ca.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/ca.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var ca = moment.defineLocale('ca', {\n        months : {\n            standalone: 'gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre'.split('_'),\n            format: 'de gener_de febrer_de març_d\\'abril_de maig_de juny_de juliol_d\\'agost_de setembre_d\\'octubre_de novembre_de desembre'.split('_'),\n            isFormat: /D[oD]?(\\s)+MMMM/\n        },\n        monthsShort : 'gen._febr._març_abr._maig_juny_jul._ag._set._oct._nov._des.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte'.split('_'),\n        weekdaysShort : 'dg._dl._dt._dc._dj._dv._ds.'.split('_'),\n        weekdaysMin : 'dg_dl_dt_dc_dj_dv_ds'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM [de] YYYY',\n            ll : 'D MMM YYYY',\n            LLL : 'D MMMM [de] YYYY [a les] H:mm',\n            lll : 'D MMM YYYY, H:mm',\n            LLLL : 'dddd D MMMM [de] YYYY [a les] H:mm',\n            llll : 'ddd D MMM YYYY, H:mm'\n        },\n        calendar : {\n            sameDay : function () {\n                return '[avui a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';\n            },\n            nextDay : function () {\n                return '[demà a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';\n            },\n            nextWeek : function () {\n                return 'dddd [a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';\n            },\n            lastDay : function () {\n                return '[ahir a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';\n            },\n            lastWeek : function () {\n                return '[el] dddd [passat a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'd\\'aquí %s',\n            past : 'fa %s',\n            s : 'uns segons',\n            ss : '%d segons',\n            m : 'un minut',\n            mm : '%d minuts',\n            h : 'una hora',\n            hh : '%d hores',\n            d : 'un dia',\n            dd : '%d dies',\n            M : 'un mes',\n            MM : '%d mesos',\n            y : 'un any',\n            yy : '%d anys'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(r|n|t|è|a)/,\n        ordinal : function (number, period) {\n            var output = (number === 1) ? 'r' :\n                (number === 2) ? 'n' :\n                (number === 3) ? 'r' :\n                (number === 4) ? 't' : 'è';\n            if (period === 'w' || period === 'W') {\n                output = 'a';\n            }\n            return number + output;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return ca;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/ca.js?");

/***/ }),

/***/ "./node_modules/moment/locale/cs.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/cs.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var months = 'leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec'.split('_'),\n        monthsShort = 'led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro'.split('_');\n    function plural(n) {\n        return (n > 1) && (n < 5) && (~~(n / 10) !== 1);\n    }\n    function translate(number, withoutSuffix, key, isFuture) {\n        var result = number + ' ';\n        switch (key) {\n            case 's':  // a few seconds / in a few seconds / a few seconds ago\n                return (withoutSuffix || isFuture) ? 'pár sekund' : 'pár sekundami';\n            case 'ss': // 9 seconds / in 9 seconds / 9 seconds ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'sekundy' : 'sekund');\n                } else {\n                    return result + 'sekundami';\n                }\n                break;\n            case 'm':  // a minute / in a minute / a minute ago\n                return withoutSuffix ? 'minuta' : (isFuture ? 'minutu' : 'minutou');\n            case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'minuty' : 'minut');\n                } else {\n                    return result + 'minutami';\n                }\n                break;\n            case 'h':  // an hour / in an hour / an hour ago\n                return withoutSuffix ? 'hodina' : (isFuture ? 'hodinu' : 'hodinou');\n            case 'hh': // 9 hours / in 9 hours / 9 hours ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'hodiny' : 'hodin');\n                } else {\n                    return result + 'hodinami';\n                }\n                break;\n            case 'd':  // a day / in a day / a day ago\n                return (withoutSuffix || isFuture) ? 'den' : 'dnem';\n            case 'dd': // 9 days / in 9 days / 9 days ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'dny' : 'dní');\n                } else {\n                    return result + 'dny';\n                }\n                break;\n            case 'M':  // a month / in a month / a month ago\n                return (withoutSuffix || isFuture) ? 'měsíc' : 'měsícem';\n            case 'MM': // 9 months / in 9 months / 9 months ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'měsíce' : 'měsíců');\n                } else {\n                    return result + 'měsíci';\n                }\n                break;\n            case 'y':  // a year / in a year / a year ago\n                return (withoutSuffix || isFuture) ? 'rok' : 'rokem';\n            case 'yy': // 9 years / in 9 years / 9 years ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'roky' : 'let');\n                } else {\n                    return result + 'lety';\n                }\n                break;\n        }\n    }\n\n    var cs = moment.defineLocale('cs', {\n        months : months,\n        monthsShort : monthsShort,\n        monthsParse : (function (months, monthsShort) {\n            var i, _monthsParse = [];\n            for (i = 0; i < 12; i++) {\n                // use custom parser to solve problem with July (červenec)\n                _monthsParse[i] = new RegExp('^' + months[i] + '$|^' + monthsShort[i] + '$', 'i');\n            }\n            return _monthsParse;\n        }(months, monthsShort)),\n        shortMonthsParse : (function (monthsShort) {\n            var i, _shortMonthsParse = [];\n            for (i = 0; i < 12; i++) {\n                _shortMonthsParse[i] = new RegExp('^' + monthsShort[i] + '$', 'i');\n            }\n            return _shortMonthsParse;\n        }(monthsShort)),\n        longMonthsParse : (function (months) {\n            var i, _longMonthsParse = [];\n            for (i = 0; i < 12; i++) {\n                _longMonthsParse[i] = new RegExp('^' + months[i] + '$', 'i');\n            }\n            return _longMonthsParse;\n        }(months)),\n        weekdays : 'neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota'.split('_'),\n        weekdaysShort : 'ne_po_út_st_čt_pá_so'.split('_'),\n        weekdaysMin : 'ne_po_út_st_čt_pá_so'.split('_'),\n        longDateFormat : {\n            LT: 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D. MMMM YYYY',\n            LLL : 'D. MMMM YYYY H:mm',\n            LLLL : 'dddd D. MMMM YYYY H:mm',\n            l : 'D. M. YYYY'\n        },\n        calendar : {\n            sameDay: '[dnes v] LT',\n            nextDay: '[zítra v] LT',\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[v neděli v] LT';\n                    case 1:\n                    case 2:\n                        return '[v] dddd [v] LT';\n                    case 3:\n                        return '[ve středu v] LT';\n                    case 4:\n                        return '[ve čtvrtek v] LT';\n                    case 5:\n                        return '[v pátek v] LT';\n                    case 6:\n                        return '[v sobotu v] LT';\n                }\n            },\n            lastDay: '[včera v] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[minulou neděli v] LT';\n                    case 1:\n                    case 2:\n                        return '[minulé] dddd [v] LT';\n                    case 3:\n                        return '[minulou středu v] LT';\n                    case 4:\n                    case 5:\n                        return '[minulý] dddd [v] LT';\n                    case 6:\n                        return '[minulou sobotu v] LT';\n                }\n            },\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'za %s',\n            past : 'před %s',\n            s : translate,\n            ss : translate,\n            m : translate,\n            mm : translate,\n            h : translate,\n            hh : translate,\n            d : translate,\n            dd : translate,\n            M : translate,\n            MM : translate,\n            y : translate,\n            yy : translate\n        },\n        dayOfMonthOrdinalParse : /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return cs;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/cs.js?");

/***/ }),

/***/ "./node_modules/moment/locale/cv.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/cv.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var cv = moment.defineLocale('cv', {\n        months : 'кӑрлач_нарӑс_пуш_ака_май_ҫӗртме_утӑ_ҫурла_авӑн_юпа_чӳк_раштав'.split('_'),\n        monthsShort : 'кӑр_нар_пуш_ака_май_ҫӗр_утӑ_ҫур_авн_юпа_чӳк_раш'.split('_'),\n        weekdays : 'вырсарникун_тунтикун_ытларикун_юнкун_кӗҫнерникун_эрнекун_шӑматкун'.split('_'),\n        weekdaysShort : 'выр_тун_ытл_юн_кӗҫ_эрн_шӑм'.split('_'),\n        weekdaysMin : 'вр_тн_ыт_юн_кҫ_эр_шм'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD-MM-YYYY',\n            LL : 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ]',\n            LLL : 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm',\n            LLLL : 'dddd, YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm'\n        },\n        calendar : {\n            sameDay: '[Паян] LT [сехетре]',\n            nextDay: '[Ыран] LT [сехетре]',\n            lastDay: '[Ӗнер] LT [сехетре]',\n            nextWeek: '[Ҫитес] dddd LT [сехетре]',\n            lastWeek: '[Иртнӗ] dddd LT [сехетре]',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : function (output) {\n                var affix = /сехет$/i.exec(output) ? 'рен' : /ҫул$/i.exec(output) ? 'тан' : 'ран';\n                return output + affix;\n            },\n            past : '%s каялла',\n            s : 'пӗр-ик ҫеккунт',\n            ss : '%d ҫеккунт',\n            m : 'пӗр минут',\n            mm : '%d минут',\n            h : 'пӗр сехет',\n            hh : '%d сехет',\n            d : 'пӗр кун',\n            dd : '%d кун',\n            M : 'пӗр уйӑх',\n            MM : '%d уйӑх',\n            y : 'пӗр ҫул',\n            yy : '%d ҫул'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-мӗш/,\n        ordinal : '%d-мӗш',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return cv;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/cv.js?");

/***/ }),

/***/ "./node_modules/moment/locale/cy.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/cy.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var cy = moment.defineLocale('cy', {\n        months: 'Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr'.split('_'),\n        monthsShort: 'Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag'.split('_'),\n        weekdays: 'Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn'.split('_'),\n        weekdaysShort: 'Sul_Llun_Maw_Mer_Iau_Gwe_Sad'.split('_'),\n        weekdaysMin: 'Su_Ll_Ma_Me_Ia_Gw_Sa'.split('_'),\n        weekdaysParseExact : true,\n        // time formats are the same as en-gb\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar: {\n            sameDay: '[Heddiw am] LT',\n            nextDay: '[Yfory am] LT',\n            nextWeek: 'dddd [am] LT',\n            lastDay: '[Ddoe am] LT',\n            lastWeek: 'dddd [diwethaf am] LT',\n            sameElse: 'L'\n        },\n        relativeTime: {\n            future: 'mewn %s',\n            past: '%s yn ôl',\n            s: 'ychydig eiliadau',\n            ss: '%d eiliad',\n            m: 'munud',\n            mm: '%d munud',\n            h: 'awr',\n            hh: '%d awr',\n            d: 'diwrnod',\n            dd: '%d diwrnod',\n            M: 'mis',\n            MM: '%d mis',\n            y: 'blwyddyn',\n            yy: '%d flynedd'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(fed|ain|af|il|ydd|ed|eg)/,\n        // traditional ordinal numbers above 31 are not commonly used in colloquial Welsh\n        ordinal: function (number) {\n            var b = number,\n                output = '',\n                lookup = [\n                    '', 'af', 'il', 'ydd', 'ydd', 'ed', 'ed', 'ed', 'fed', 'fed', 'fed', // 1af to 10fed\n                    'eg', 'fed', 'eg', 'eg', 'fed', 'eg', 'eg', 'fed', 'eg', 'fed' // 11eg to 20fed\n                ];\n            if (b > 20) {\n                if (b === 40 || b === 50 || b === 60 || b === 80 || b === 100) {\n                    output = 'fed'; // not 30ain, 70ain or 90ain\n                } else {\n                    output = 'ain';\n                }\n            } else if (b > 0) {\n                output = lookup[b];\n            }\n            return number + output;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return cy;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/cy.js?");

/***/ }),

/***/ "./node_modules/moment/locale/da.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/da.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var da = moment.defineLocale('da', {\n        months : 'januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december'.split('_'),\n        monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),\n        weekdays : 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),\n        weekdaysShort : 'søn_man_tir_ons_tor_fre_lør'.split('_'),\n        weekdaysMin : 'sø_ma_ti_on_to_fr_lø'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D. MMMM YYYY',\n            LLL : 'D. MMMM YYYY HH:mm',\n            LLLL : 'dddd [d.] D. MMMM YYYY [kl.] HH:mm'\n        },\n        calendar : {\n            sameDay : '[i dag kl.] LT',\n            nextDay : '[i morgen kl.] LT',\n            nextWeek : 'på dddd [kl.] LT',\n            lastDay : '[i går kl.] LT',\n            lastWeek : '[i] dddd[s kl.] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'om %s',\n            past : '%s siden',\n            s : 'få sekunder',\n            ss : '%d sekunder',\n            m : 'et minut',\n            mm : '%d minutter',\n            h : 'en time',\n            hh : '%d timer',\n            d : 'en dag',\n            dd : '%d dage',\n            M : 'en måned',\n            MM : '%d måneder',\n            y : 'et år',\n            yy : '%d år'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return da;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/da.js?");

/***/ }),

/***/ "./node_modules/moment/locale/de-at.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/de-at.js ***!
  \*********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            'm': ['eine Minute', 'einer Minute'],\n            'h': ['eine Stunde', 'einer Stunde'],\n            'd': ['ein Tag', 'einem Tag'],\n            'dd': [number + ' Tage', number + ' Tagen'],\n            'M': ['ein Monat', 'einem Monat'],\n            'MM': [number + ' Monate', number + ' Monaten'],\n            'y': ['ein Jahr', 'einem Jahr'],\n            'yy': [number + ' Jahre', number + ' Jahren']\n        };\n        return withoutSuffix ? format[key][0] : format[key][1];\n    }\n\n    var deAt = moment.defineLocale('de-at', {\n        months : 'Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),\n        monthsShort : 'Jän._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'),\n        weekdaysShort : 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),\n        weekdaysMin : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D. MMMM YYYY',\n            LLL : 'D. MMMM YYYY HH:mm',\n            LLLL : 'dddd, D. MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[heute um] LT [Uhr]',\n            sameElse: 'L',\n            nextDay: '[morgen um] LT [Uhr]',\n            nextWeek: 'dddd [um] LT [Uhr]',\n            lastDay: '[gestern um] LT [Uhr]',\n            lastWeek: '[letzten] dddd [um] LT [Uhr]'\n        },\n        relativeTime : {\n            future : 'in %s',\n            past : 'vor %s',\n            s : 'ein paar Sekunden',\n            ss : '%d Sekunden',\n            m : processRelativeTime,\n            mm : '%d Minuten',\n            h : processRelativeTime,\n            hh : '%d Stunden',\n            d : processRelativeTime,\n            dd : processRelativeTime,\n            M : processRelativeTime,\n            MM : processRelativeTime,\n            y : processRelativeTime,\n            yy : processRelativeTime\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return deAt;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/de-at.js?");

/***/ }),

/***/ "./node_modules/moment/locale/de-ch.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/de-ch.js ***!
  \*********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            'm': ['eine Minute', 'einer Minute'],\n            'h': ['eine Stunde', 'einer Stunde'],\n            'd': ['ein Tag', 'einem Tag'],\n            'dd': [number + ' Tage', number + ' Tagen'],\n            'M': ['ein Monat', 'einem Monat'],\n            'MM': [number + ' Monate', number + ' Monaten'],\n            'y': ['ein Jahr', 'einem Jahr'],\n            'yy': [number + ' Jahre', number + ' Jahren']\n        };\n        return withoutSuffix ? format[key][0] : format[key][1];\n    }\n\n    var deCh = moment.defineLocale('de-ch', {\n        months : 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),\n        monthsShort : 'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'),\n        weekdaysShort : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n        weekdaysMin : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D. MMMM YYYY',\n            LLL : 'D. MMMM YYYY HH:mm',\n            LLLL : 'dddd, D. MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[heute um] LT [Uhr]',\n            sameElse: 'L',\n            nextDay: '[morgen um] LT [Uhr]',\n            nextWeek: 'dddd [um] LT [Uhr]',\n            lastDay: '[gestern um] LT [Uhr]',\n            lastWeek: '[letzten] dddd [um] LT [Uhr]'\n        },\n        relativeTime : {\n            future : 'in %s',\n            past : 'vor %s',\n            s : 'ein paar Sekunden',\n            ss : '%d Sekunden',\n            m : processRelativeTime,\n            mm : '%d Minuten',\n            h : processRelativeTime,\n            hh : '%d Stunden',\n            d : processRelativeTime,\n            dd : processRelativeTime,\n            M : processRelativeTime,\n            MM : processRelativeTime,\n            y : processRelativeTime,\n            yy : processRelativeTime\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return deCh;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/de-ch.js?");

/***/ }),

/***/ "./node_modules/moment/locale/de.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/de.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            'm': ['eine Minute', 'einer Minute'],\n            'h': ['eine Stunde', 'einer Stunde'],\n            'd': ['ein Tag', 'einem Tag'],\n            'dd': [number + ' Tage', number + ' Tagen'],\n            'M': ['ein Monat', 'einem Monat'],\n            'MM': [number + ' Monate', number + ' Monaten'],\n            'y': ['ein Jahr', 'einem Jahr'],\n            'yy': [number + ' Jahre', number + ' Jahren']\n        };\n        return withoutSuffix ? format[key][0] : format[key][1];\n    }\n\n    var de = moment.defineLocale('de', {\n        months : 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),\n        monthsShort : 'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'),\n        weekdaysShort : 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),\n        weekdaysMin : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D. MMMM YYYY',\n            LLL : 'D. MMMM YYYY HH:mm',\n            LLLL : 'dddd, D. MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[heute um] LT [Uhr]',\n            sameElse: 'L',\n            nextDay: '[morgen um] LT [Uhr]',\n            nextWeek: 'dddd [um] LT [Uhr]',\n            lastDay: '[gestern um] LT [Uhr]',\n            lastWeek: '[letzten] dddd [um] LT [Uhr]'\n        },\n        relativeTime : {\n            future : 'in %s',\n            past : 'vor %s',\n            s : 'ein paar Sekunden',\n            ss : '%d Sekunden',\n            m : processRelativeTime,\n            mm : '%d Minuten',\n            h : processRelativeTime,\n            hh : '%d Stunden',\n            d : processRelativeTime,\n            dd : processRelativeTime,\n            M : processRelativeTime,\n            MM : processRelativeTime,\n            y : processRelativeTime,\n            yy : processRelativeTime\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return de;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/de.js?");

/***/ }),

/***/ "./node_modules/moment/locale/dv.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/dv.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var months = [\n        'ޖެނުއަރީ',\n        'ފެބްރުއަރީ',\n        'މާރިޗު',\n        'އޭޕްރީލު',\n        'މޭ',\n        'ޖޫން',\n        'ޖުލައި',\n        'އޯގަސްޓު',\n        'ސެޕްޓެމްބަރު',\n        'އޮކްޓޯބަރު',\n        'ނޮވެމްބަރު',\n        'ޑިސެމްބަރު'\n    ], weekdays = [\n        'އާދިއްތަ',\n        'ހޯމަ',\n        'އަންގާރަ',\n        'ބުދަ',\n        'ބުރާސްފަތި',\n        'ހުކުރު',\n        'ހޮނިހިރު'\n    ];\n\n    var dv = moment.defineLocale('dv', {\n        months : months,\n        monthsShort : months,\n        weekdays : weekdays,\n        weekdaysShort : weekdays,\n        weekdaysMin : 'އާދި_ހޯމަ_އަން_ބުދަ_ބުރާ_ހުކު_ހޮނި'.split('_'),\n        longDateFormat : {\n\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'D/M/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        meridiemParse: /މކ|މފ/,\n        isPM : function (input) {\n            return 'މފ' === input;\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'މކ';\n            } else {\n                return 'މފ';\n            }\n        },\n        calendar : {\n            sameDay : '[މިއަދު] LT',\n            nextDay : '[މާދަމާ] LT',\n            nextWeek : 'dddd LT',\n            lastDay : '[އިއްޔެ] LT',\n            lastWeek : '[ފާއިތުވި] dddd LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'ތެރޭގައި %s',\n            past : 'ކުރިން %s',\n            s : 'ސިކުންތުކޮޅެއް',\n            ss : 'd% ސިކުންތު',\n            m : 'މިނިޓެއް',\n            mm : 'މިނިޓު %d',\n            h : 'ގަޑިއިރެއް',\n            hh : 'ގަޑިއިރު %d',\n            d : 'ދުވަހެއް',\n            dd : 'ދުވަސް %d',\n            M : 'މަހެއް',\n            MM : 'މަސް %d',\n            y : 'އަހަރެއް',\n            yy : 'އަހަރު %d'\n        },\n        preparse: function (string) {\n            return string.replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string.replace(/,/g, '،');\n        },\n        week : {\n            dow : 7,  // Sunday is the first day of the week.\n            doy : 12  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return dv;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/dv.js?");

/***/ }),

/***/ "./node_modules/moment/locale/el.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/el.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n    function isFunction(input) {\n        return input instanceof Function || Object.prototype.toString.call(input) === '[object Function]';\n    }\n\n\n    var el = moment.defineLocale('el', {\n        monthsNominativeEl : 'Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος'.split('_'),\n        monthsGenitiveEl : 'Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου'.split('_'),\n        months : function (momentToFormat, format) {\n            if (!momentToFormat) {\n                return this._monthsNominativeEl;\n            } else if (typeof format === 'string' && /D/.test(format.substring(0, format.indexOf('MMMM')))) { // if there is a day number before 'MMMM'\n                return this._monthsGenitiveEl[momentToFormat.month()];\n            } else {\n                return this._monthsNominativeEl[momentToFormat.month()];\n            }\n        },\n        monthsShort : 'Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ'.split('_'),\n        weekdays : 'Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο'.split('_'),\n        weekdaysShort : 'Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ'.split('_'),\n        weekdaysMin : 'Κυ_Δε_Τρ_Τε_Πε_Πα_Σα'.split('_'),\n        meridiem : function (hours, minutes, isLower) {\n            if (hours > 11) {\n                return isLower ? 'μμ' : 'ΜΜ';\n            } else {\n                return isLower ? 'πμ' : 'ΠΜ';\n            }\n        },\n        isPM : function (input) {\n            return ((input + '').toLowerCase()[0] === 'μ');\n        },\n        meridiemParse : /[ΠΜ]\\.?Μ?\\.?/i,\n        longDateFormat : {\n            LT : 'h:mm A',\n            LTS : 'h:mm:ss A',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY h:mm A',\n            LLLL : 'dddd, D MMMM YYYY h:mm A'\n        },\n        calendarEl : {\n            sameDay : '[Σήμερα {}] LT',\n            nextDay : '[Αύριο {}] LT',\n            nextWeek : 'dddd [{}] LT',\n            lastDay : '[Χθες {}] LT',\n            lastWeek : function () {\n                switch (this.day()) {\n                    case 6:\n                        return '[το προηγούμενο] dddd [{}] LT';\n                    default:\n                        return '[την προηγούμενη] dddd [{}] LT';\n                }\n            },\n            sameElse : 'L'\n        },\n        calendar : function (key, mom) {\n            var output = this._calendarEl[key],\n                hours = mom && mom.hours();\n            if (isFunction(output)) {\n                output = output.apply(mom);\n            }\n            return output.replace('{}', (hours % 12 === 1 ? 'στη' : 'στις'));\n        },\n        relativeTime : {\n            future : 'σε %s',\n            past : '%s πριν',\n            s : 'λίγα δευτερόλεπτα',\n            ss : '%d δευτερόλεπτα',\n            m : 'ένα λεπτό',\n            mm : '%d λεπτά',\n            h : 'μία ώρα',\n            hh : '%d ώρες',\n            d : 'μία μέρα',\n            dd : '%d μέρες',\n            M : 'ένας μήνας',\n            MM : '%d μήνες',\n            y : 'ένας χρόνος',\n            yy : '%d χρόνια'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}η/,\n        ordinal: '%dη',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4st is the first week of the year.\n        }\n    });\n\n    return el;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/el.js?");

/***/ }),

/***/ "./node_modules/moment/locale/en-au.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/en-au.js ***!
  \*********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var enAu = moment.defineLocale('en-au', {\n        months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n        monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n        weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat : {\n            LT : 'h:mm A',\n            LTS : 'h:mm:ss A',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY h:mm A',\n            LLLL : 'dddd, D MMMM YYYY h:mm A'\n        },\n        calendar : {\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        relativeTime : {\n            future : 'in %s',\n            past : '%s ago',\n            s : 'a few seconds',\n            ss : '%d 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        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal : function (number) {\n            var b = number % 10,\n                output = (~~(number % 100 / 10) === 1) ? 'th' :\n                (b === 1) ? 'st' :\n                (b === 2) ? 'nd' :\n                (b === 3) ? 'rd' : 'th';\n            return number + output;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return enAu;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/en-au.js?");

/***/ }),

/***/ "./node_modules/moment/locale/en-ca.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/en-ca.js ***!
  \*********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var enCa = moment.defineLocale('en-ca', {\n        months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n        monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n        weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat : {\n            LT : 'h:mm A',\n            LTS : 'h:mm:ss A',\n            L : 'YYYY-MM-DD',\n            LL : 'MMMM D, YYYY',\n            LLL : 'MMMM D, YYYY h:mm A',\n            LLLL : 'dddd, MMMM D, YYYY h:mm A'\n        },\n        calendar : {\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        relativeTime : {\n            future : 'in %s',\n            past : '%s ago',\n            s : 'a few seconds',\n            ss : '%d 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        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal : function (number) {\n            var b = number % 10,\n                output = (~~(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    return enCa;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/en-ca.js?");

/***/ }),

/***/ "./node_modules/moment/locale/en-gb.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/en-gb.js ***!
  \*********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var enGb = moment.defineLocale('en-gb', {\n        months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n        monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n        weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\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        relativeTime : {\n            future : 'in %s',\n            past : '%s ago',\n            s : 'a few seconds',\n            ss : '%d 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        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal : function (number) {\n            var b = number % 10,\n                output = (~~(number % 100 / 10) === 1) ? 'th' :\n                (b === 1) ? 'st' :\n                (b === 2) ? 'nd' :\n                (b === 3) ? 'rd' : 'th';\n            return number + output;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return enGb;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/en-gb.js?");

/***/ }),

/***/ "./node_modules/moment/locale/en-ie.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/en-ie.js ***!
  \*********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var enIe = moment.defineLocale('en-ie', {\n        months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n        monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n        weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD-MM-YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\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        relativeTime : {\n            future : 'in %s',\n            past : '%s ago',\n            s : 'a few seconds',\n            ss : '%d 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        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal : function (number) {\n            var b = number % 10,\n                output = (~~(number % 100 / 10) === 1) ? 'th' :\n                (b === 1) ? 'st' :\n                (b === 2) ? 'nd' :\n                (b === 3) ? 'rd' : 'th';\n            return number + output;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return enIe;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/en-ie.js?");

/***/ }),

/***/ "./node_modules/moment/locale/en-il.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/en-il.js ***!
  \*********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var enIl = moment.defineLocale('en-il', {\n        months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n        monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n        weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\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        relativeTime : {\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        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal : function (number) {\n            var b = number % 10,\n                output = (~~(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    return enIl;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/en-il.js?");

/***/ }),

/***/ "./node_modules/moment/locale/en-nz.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/en-nz.js ***!
  \*********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var enNz = moment.defineLocale('en-nz', {\n        months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n        monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n        weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat : {\n            LT : 'h:mm A',\n            LTS : 'h:mm:ss A',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY h:mm A',\n            LLLL : 'dddd, D MMMM YYYY h:mm A'\n        },\n        calendar : {\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        relativeTime : {\n            future : 'in %s',\n            past : '%s ago',\n            s : 'a few seconds',\n            ss : '%d 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        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal : function (number) {\n            var b = number % 10,\n                output = (~~(number % 100 / 10) === 1) ? 'th' :\n                (b === 1) ? 'st' :\n                (b === 2) ? 'nd' :\n                (b === 3) ? 'rd' : 'th';\n            return number + output;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return enNz;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/en-nz.js?");

/***/ }),

/***/ "./node_modules/moment/locale/eo.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/eo.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var eo = moment.defineLocale('eo', {\n        months : 'januaro_februaro_marto_aprilo_majo_junio_julio_aŭgusto_septembro_oktobro_novembro_decembro'.split('_'),\n        monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aŭg_sep_okt_nov_dec'.split('_'),\n        weekdays : 'dimanĉo_lundo_mardo_merkredo_ĵaŭdo_vendredo_sabato'.split('_'),\n        weekdaysShort : 'dim_lun_mard_merk_ĵaŭ_ven_sab'.split('_'),\n        weekdaysMin : 'di_lu_ma_me_ĵa_ve_sa'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'YYYY-MM-DD',\n            LL : 'D[-a de] MMMM, YYYY',\n            LLL : 'D[-a de] MMMM, YYYY HH:mm',\n            LLLL : 'dddd, [la] D[-a de] MMMM, YYYY HH:mm'\n        },\n        meridiemParse: /[ap]\\.t\\.m/i,\n        isPM: function (input) {\n            return input.charAt(0).toLowerCase() === 'p';\n        },\n        meridiem : function (hours, minutes, isLower) {\n            if (hours > 11) {\n                return isLower ? 'p.t.m.' : 'P.T.M.';\n            } else {\n                return isLower ? 'a.t.m.' : 'A.T.M.';\n            }\n        },\n        calendar : {\n            sameDay : '[Hodiaŭ je] LT',\n            nextDay : '[Morgaŭ je] LT',\n            nextWeek : 'dddd [je] LT',\n            lastDay : '[Hieraŭ je] LT',\n            lastWeek : '[pasinta] dddd [je] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'post %s',\n            past : 'antaŭ %s',\n            s : 'sekundoj',\n            ss : '%d sekundoj',\n            m : 'minuto',\n            mm : '%d minutoj',\n            h : 'horo',\n            hh : '%d horoj',\n            d : 'tago',//ne 'diurno', ĉar estas uzita por proksimumo\n            dd : '%d tagoj',\n            M : 'monato',\n            MM : '%d monatoj',\n            y : 'jaro',\n            yy : '%d jaroj'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}a/,\n        ordinal : '%da',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return eo;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/eo.js?");

/***/ }),

/***/ "./node_modules/moment/locale/es-do.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/es-do.js ***!
  \*********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_'),\n        monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_');\n\n    var monthsParse = [/^ene/i, /^feb/i, /^mar/i, /^abr/i, /^may/i, /^jun/i, /^jul/i, /^ago/i, /^sep/i, /^oct/i, /^nov/i, /^dic/i];\n    var monthsRegex = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;\n\n    var esDo = moment.defineLocale('es-do', {\n        months : 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'),\n        monthsShort : function (m, format) {\n            if (!m) {\n                return monthsShortDot;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShort[m.month()];\n            } else {\n                return monthsShortDot[m.month()];\n            }\n        },\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        monthsStrictRegex: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,\n        monthsShortStrictRegex: /^(ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i,\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n        weekdays : 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),\n        weekdaysShort : 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),\n        weekdaysMin : 'do_lu_ma_mi_ju_vi_sá'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'h:mm A',\n            LTS : 'h:mm:ss A',\n            L : 'DD/MM/YYYY',\n            LL : 'D [de] MMMM [de] YYYY',\n            LLL : 'D [de] MMMM [de] YYYY h:mm A',\n            LLLL : 'dddd, D [de] MMMM [de] YYYY h:mm A'\n        },\n        calendar : {\n            sameDay : function () {\n                return '[hoy a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            nextDay : function () {\n                return '[mañana a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            nextWeek : function () {\n                return 'dddd [a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            lastDay : function () {\n                return '[ayer a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            lastWeek : function () {\n                return '[el] dddd [pasado a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'en %s',\n            past : 'hace %s',\n            s : 'unos segundos',\n            ss : '%d segundos',\n            m : 'un minuto',\n            mm : '%d minutos',\n            h : 'una hora',\n            hh : '%d horas',\n            d : 'un día',\n            dd : '%d días',\n            M : 'un mes',\n            MM : '%d meses',\n            y : 'un año',\n            yy : '%d años'\n        },\n        dayOfMonthOrdinalParse : /\\d{1,2}º/,\n        ordinal : '%dº',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return esDo;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/es-do.js?");

/***/ }),

/***/ "./node_modules/moment/locale/es-us.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/es-us.js ***!
  \*********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_'),\n        monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_');\n\n    var esUs = moment.defineLocale('es-us', {\n        months : 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'),\n        monthsShort : function (m, format) {\n            if (!m) {\n                return monthsShortDot;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShort[m.month()];\n            } else {\n                return monthsShortDot[m.month()];\n            }\n        },\n        monthsParseExact : true,\n        weekdays : 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),\n        weekdaysShort : 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),\n        weekdaysMin : 'do_lu_ma_mi_ju_vi_sá'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'h:mm A',\n            LTS : 'h:mm:ss A',\n            L : 'MM/DD/YYYY',\n            LL : 'MMMM [de] D [de] YYYY',\n            LLL : 'MMMM [de] D [de] YYYY h:mm A',\n            LLLL : 'dddd, MMMM [de] D [de] YYYY h:mm A'\n        },\n        calendar : {\n            sameDay : function () {\n                return '[hoy a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            nextDay : function () {\n                return '[mañana a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            nextWeek : function () {\n                return 'dddd [a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            lastDay : function () {\n                return '[ayer a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            lastWeek : function () {\n                return '[el] dddd [pasado a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'en %s',\n            past : 'hace %s',\n            s : 'unos segundos',\n            ss : '%d segundos',\n            m : 'un minuto',\n            mm : '%d minutos',\n            h : 'una hora',\n            hh : '%d horas',\n            d : 'un día',\n            dd : '%d días',\n            M : 'un mes',\n            MM : '%d meses',\n            y : 'un año',\n            yy : '%d años'\n        },\n        dayOfMonthOrdinalParse : /\\d{1,2}º/,\n        ordinal : '%dº',\n        week : {\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\n    return esUs;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/es-us.js?");

/***/ }),

/***/ "./node_modules/moment/locale/es.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/es.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_'),\n        monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_');\n\n    var monthsParse = [/^ene/i, /^feb/i, /^mar/i, /^abr/i, /^may/i, /^jun/i, /^jul/i, /^ago/i, /^sep/i, /^oct/i, /^nov/i, /^dic/i];\n    var monthsRegex = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;\n\n    var es = moment.defineLocale('es', {\n        months : 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'),\n        monthsShort : function (m, format) {\n            if (!m) {\n                return monthsShortDot;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShort[m.month()];\n            } else {\n                return monthsShortDot[m.month()];\n            }\n        },\n        monthsRegex : monthsRegex,\n        monthsShortRegex : monthsRegex,\n        monthsStrictRegex : /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,\n        monthsShortStrictRegex : /^(ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i,\n        monthsParse : monthsParse,\n        longMonthsParse : monthsParse,\n        shortMonthsParse : monthsParse,\n        weekdays : 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),\n        weekdaysShort : 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),\n        weekdaysMin : 'do_lu_ma_mi_ju_vi_sá'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D [de] MMMM [de] YYYY',\n            LLL : 'D [de] MMMM [de] YYYY H:mm',\n            LLLL : 'dddd, D [de] MMMM [de] YYYY H:mm'\n        },\n        calendar : {\n            sameDay : function () {\n                return '[hoy a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            nextDay : function () {\n                return '[mañana a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            nextWeek : function () {\n                return 'dddd [a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            lastDay : function () {\n                return '[ayer a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            lastWeek : function () {\n                return '[el] dddd [pasado a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'en %s',\n            past : 'hace %s',\n            s : 'unos segundos',\n            ss : '%d segundos',\n            m : 'un minuto',\n            mm : '%d minutos',\n            h : 'una hora',\n            hh : '%d horas',\n            d : 'un día',\n            dd : '%d días',\n            M : 'un mes',\n            MM : '%d meses',\n            y : 'un año',\n            yy : '%d años'\n        },\n        dayOfMonthOrdinalParse : /\\d{1,2}º/,\n        ordinal : '%dº',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return es;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/es.js?");

/***/ }),

/***/ "./node_modules/moment/locale/et.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/et.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            's' : ['mõne sekundi', 'mõni sekund', 'paar sekundit'],\n            'ss': [number + 'sekundi', number + 'sekundit'],\n            'm' : ['ühe minuti', 'üks minut'],\n            'mm': [number + ' minuti', number + ' minutit'],\n            'h' : ['ühe tunni', 'tund aega', 'üks tund'],\n            'hh': [number + ' tunni', number + ' tundi'],\n            'd' : ['ühe päeva', 'üks päev'],\n            'M' : ['kuu aja', 'kuu aega', 'üks kuu'],\n            'MM': [number + ' kuu', number + ' kuud'],\n            'y' : ['ühe aasta', 'aasta', 'üks aasta'],\n            'yy': [number + ' aasta', number + ' aastat']\n        };\n        if (withoutSuffix) {\n            return format[key][2] ? format[key][2] : format[key][1];\n        }\n        return isFuture ? format[key][0] : format[key][1];\n    }\n\n    var et = moment.defineLocale('et', {\n        months        : 'jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember'.split('_'),\n        monthsShort   : 'jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets'.split('_'),\n        weekdays      : 'pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev'.split('_'),\n        weekdaysShort : 'P_E_T_K_N_R_L'.split('_'),\n        weekdaysMin   : 'P_E_T_K_N_R_L'.split('_'),\n        longDateFormat : {\n            LT   : 'H:mm',\n            LTS : 'H:mm:ss',\n            L    : 'DD.MM.YYYY',\n            LL   : 'D. MMMM YYYY',\n            LLL  : 'D. MMMM YYYY H:mm',\n            LLLL : 'dddd, D. MMMM YYYY H:mm'\n        },\n        calendar : {\n            sameDay  : '[Täna,] LT',\n            nextDay  : '[Homme,] LT',\n            nextWeek : '[Järgmine] dddd LT',\n            lastDay  : '[Eile,] LT',\n            lastWeek : '[Eelmine] dddd LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s pärast',\n            past   : '%s tagasi',\n            s      : processRelativeTime,\n            ss     : processRelativeTime,\n            m      : processRelativeTime,\n            mm     : processRelativeTime,\n            h      : processRelativeTime,\n            hh     : processRelativeTime,\n            d      : processRelativeTime,\n            dd     : '%d päeva',\n            M      : processRelativeTime,\n            MM     : processRelativeTime,\n            y      : processRelativeTime,\n            yy     : processRelativeTime\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return et;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/et.js?");

/***/ }),

/***/ "./node_modules/moment/locale/eu.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/eu.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var eu = moment.defineLocale('eu', {\n        months : 'urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua'.split('_'),\n        monthsShort : 'urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata'.split('_'),\n        weekdaysShort : 'ig._al._ar._az._og._ol._lr.'.split('_'),\n        weekdaysMin : 'ig_al_ar_az_og_ol_lr'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'YYYY-MM-DD',\n            LL : 'YYYY[ko] MMMM[ren] D[a]',\n            LLL : 'YYYY[ko] MMMM[ren] D[a] HH:mm',\n            LLLL : 'dddd, YYYY[ko] MMMM[ren] D[a] HH:mm',\n            l : 'YYYY-M-D',\n            ll : 'YYYY[ko] MMM D[a]',\n            lll : 'YYYY[ko] MMM D[a] HH:mm',\n            llll : 'ddd, YYYY[ko] MMM D[a] HH:mm'\n        },\n        calendar : {\n            sameDay : '[gaur] LT[etan]',\n            nextDay : '[bihar] LT[etan]',\n            nextWeek : 'dddd LT[etan]',\n            lastDay : '[atzo] LT[etan]',\n            lastWeek : '[aurreko] dddd LT[etan]',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s barru',\n            past : 'duela %s',\n            s : 'segundo batzuk',\n            ss : '%d segundo',\n            m : 'minutu bat',\n            mm : '%d minutu',\n            h : 'ordu bat',\n            hh : '%d ordu',\n            d : 'egun bat',\n            dd : '%d egun',\n            M : 'hilabete bat',\n            MM : '%d hilabete',\n            y : 'urte bat',\n            yy : '%d urte'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return eu;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/eu.js?");

/***/ }),

/***/ "./node_modules/moment/locale/fa.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/fa.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '۱',\n        '2': '۲',\n        '3': '۳',\n        '4': '۴',\n        '5': '۵',\n        '6': '۶',\n        '7': '۷',\n        '8': '۸',\n        '9': '۹',\n        '0': '۰'\n    }, numberMap = {\n        '۱': '1',\n        '۲': '2',\n        '۳': '3',\n        '۴': '4',\n        '۵': '5',\n        '۶': '6',\n        '۷': '7',\n        '۸': '8',\n        '۹': '9',\n        '۰': '0'\n    };\n\n    var fa = moment.defineLocale('fa', {\n        months : 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'),\n        monthsShort : 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'),\n        weekdays : 'یک\\u200cشنبه_دوشنبه_سه\\u200cشنبه_چهارشنبه_پنج\\u200cشنبه_جمعه_شنبه'.split('_'),\n        weekdaysShort : 'یک\\u200cشنبه_دوشنبه_سه\\u200cشنبه_چهارشنبه_پنج\\u200cشنبه_جمعه_شنبه'.split('_'),\n        weekdaysMin : 'ی_د_س_چ_پ_ج_ش'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        meridiemParse: /قبل از ظهر|بعد از ظهر/,\n        isPM: function (input) {\n            return /بعد از ظهر/.test(input);\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'قبل از ظهر';\n            } else {\n                return 'بعد از ظهر';\n            }\n        },\n        calendar : {\n            sameDay : '[امروز ساعت] LT',\n            nextDay : '[فردا ساعت] LT',\n            nextWeek : 'dddd [ساعت] LT',\n            lastDay : '[دیروز ساعت] LT',\n            lastWeek : 'dddd [پیش] [ساعت] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'در %s',\n            past : '%s پیش',\n            s : 'چند ثانیه',\n            ss : 'ثانیه d%',\n            m : 'یک دقیقه',\n            mm : '%d دقیقه',\n            h : 'یک ساعت',\n            hh : '%d ساعت',\n            d : 'یک روز',\n            dd : '%d روز',\n            M : 'یک ماه',\n            MM : '%d ماه',\n            y : 'یک سال',\n            yy : '%d سال'\n        },\n        preparse: function (string) {\n            return string.replace(/[۰-۹]/g, function (match) {\n                return numberMap[match];\n            }).replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            }).replace(/,/g, '،');\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}م/,\n        ordinal : '%dم',\n        week : {\n            dow : 6, // Saturday is the first day of the week.\n            doy : 12 // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return fa;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/fa.js?");

/***/ }),

/***/ "./node_modules/moment/locale/fi.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/fi.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var numbersPast = 'nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän'.split(' '),\n        numbersFuture = [\n            'nolla', 'yhden', 'kahden', 'kolmen', 'neljän', 'viiden', 'kuuden',\n            numbersPast[7], numbersPast[8], numbersPast[9]\n        ];\n    function translate(number, withoutSuffix, key, isFuture) {\n        var result = '';\n        switch (key) {\n            case 's':\n                return isFuture ? 'muutaman sekunnin' : 'muutama sekunti';\n            case 'ss':\n                return isFuture ? 'sekunnin' : 'sekuntia';\n            case 'm':\n                return isFuture ? 'minuutin' : 'minuutti';\n            case 'mm':\n                result = isFuture ? 'minuutin' : 'minuuttia';\n                break;\n            case 'h':\n                return isFuture ? 'tunnin' : 'tunti';\n            case 'hh':\n                result = isFuture ? 'tunnin' : 'tuntia';\n                break;\n            case 'd':\n                return isFuture ? 'päivän' : 'päivä';\n            case 'dd':\n                result = isFuture ? 'päivän' : 'päivää';\n                break;\n            case 'M':\n                return isFuture ? 'kuukauden' : 'kuukausi';\n            case 'MM':\n                result = isFuture ? 'kuukauden' : 'kuukautta';\n                break;\n            case 'y':\n                return isFuture ? 'vuoden' : 'vuosi';\n            case 'yy':\n                result = isFuture ? 'vuoden' : 'vuotta';\n                break;\n        }\n        result = verbalNumber(number, isFuture) + ' ' + result;\n        return result;\n    }\n    function verbalNumber(number, isFuture) {\n        return number < 10 ? (isFuture ? numbersFuture[number] : numbersPast[number]) : number;\n    }\n\n    var fi = moment.defineLocale('fi', {\n        months : 'tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu'.split('_'),\n        monthsShort : 'tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu'.split('_'),\n        weekdays : 'sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai'.split('_'),\n        weekdaysShort : 'su_ma_ti_ke_to_pe_la'.split('_'),\n        weekdaysMin : 'su_ma_ti_ke_to_pe_la'.split('_'),\n        longDateFormat : {\n            LT : 'HH.mm',\n            LTS : 'HH.mm.ss',\n            L : 'DD.MM.YYYY',\n            LL : 'Do MMMM[ta] YYYY',\n            LLL : 'Do MMMM[ta] YYYY, [klo] HH.mm',\n            LLLL : 'dddd, Do MMMM[ta] YYYY, [klo] HH.mm',\n            l : 'D.M.YYYY',\n            ll : 'Do MMM YYYY',\n            lll : 'Do MMM YYYY, [klo] HH.mm',\n            llll : 'ddd, Do MMM YYYY, [klo] HH.mm'\n        },\n        calendar : {\n            sameDay : '[tänään] [klo] LT',\n            nextDay : '[huomenna] [klo] LT',\n            nextWeek : 'dddd [klo] LT',\n            lastDay : '[eilen] [klo] LT',\n            lastWeek : '[viime] dddd[na] [klo] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s päästä',\n            past : '%s sitten',\n            s : translate,\n            ss : translate,\n            m : translate,\n            mm : translate,\n            h : translate,\n            hh : translate,\n            d : translate,\n            dd : translate,\n            M : translate,\n            MM : translate,\n            y : translate,\n            yy : translate\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return fi;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/fi.js?");

/***/ }),

/***/ "./node_modules/moment/locale/fo.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/fo.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var fo = moment.defineLocale('fo', {\n        months : 'januar_februar_mars_apríl_mai_juni_juli_august_september_oktober_november_desember'.split('_'),\n        monthsShort : 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'),\n        weekdays : 'sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur'.split('_'),\n        weekdaysShort : 'sun_mán_týs_mik_hós_frí_ley'.split('_'),\n        weekdaysMin : 'su_má_tý_mi_hó_fr_le'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D. MMMM, YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[Í dag kl.] LT',\n            nextDay : '[Í morgin kl.] LT',\n            nextWeek : 'dddd [kl.] LT',\n            lastDay : '[Í gjár kl.] LT',\n            lastWeek : '[síðstu] dddd [kl] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'um %s',\n            past : '%s síðani',\n            s : 'fá sekund',\n            ss : '%d sekundir',\n            m : 'ein minutt',\n            mm : '%d minuttir',\n            h : 'ein tími',\n            hh : '%d tímar',\n            d : 'ein dagur',\n            dd : '%d dagar',\n            M : 'ein mánaði',\n            MM : '%d mánaðir',\n            y : 'eitt ár',\n            yy : '%d ár'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return fo;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/fo.js?");

/***/ }),

/***/ "./node_modules/moment/locale/fr-ca.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/fr-ca.js ***!
  \*********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var frCa = moment.defineLocale('fr-ca', {\n        months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'),\n        monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),\n        weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),\n        weekdaysMin : 'di_lu_ma_me_je_ve_sa'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'YYYY-MM-DD',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[Aujourd’hui à] LT',\n            nextDay : '[Demain à] LT',\n            nextWeek : 'dddd [à] LT',\n            lastDay : '[Hier à] LT',\n            lastWeek : 'dddd [dernier à] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'dans %s',\n            past : 'il y a %s',\n            s : 'quelques secondes',\n            ss : '%d secondes',\n            m : 'une minute',\n            mm : '%d minutes',\n            h : 'une heure',\n            hh : '%d heures',\n            d : 'un jour',\n            dd : '%d jours',\n            M : 'un mois',\n            MM : '%d mois',\n            y : 'un an',\n            yy : '%d ans'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(er|e)/,\n        ordinal : function (number, period) {\n            switch (period) {\n                // Words with masculine grammatical gender: mois, trimestre, jour\n                default:\n                case 'M':\n                case 'Q':\n                case 'D':\n                case 'DDD':\n                case 'd':\n                    return number + (number === 1 ? 'er' : 'e');\n\n                // Words with feminine grammatical gender: semaine\n                case 'w':\n                case 'W':\n                    return number + (number === 1 ? 're' : 'e');\n            }\n        }\n    });\n\n    return frCa;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/fr-ca.js?");

/***/ }),

/***/ "./node_modules/moment/locale/fr-ch.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/fr-ch.js ***!
  \*********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var frCh = moment.defineLocale('fr-ch', {\n        months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'),\n        monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),\n        weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),\n        weekdaysMin : 'di_lu_ma_me_je_ve_sa'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[Aujourd’hui à] LT',\n            nextDay : '[Demain à] LT',\n            nextWeek : 'dddd [à] LT',\n            lastDay : '[Hier à] LT',\n            lastWeek : 'dddd [dernier à] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'dans %s',\n            past : 'il y a %s',\n            s : 'quelques secondes',\n            ss : '%d secondes',\n            m : 'une minute',\n            mm : '%d minutes',\n            h : 'une heure',\n            hh : '%d heures',\n            d : 'un jour',\n            dd : '%d jours',\n            M : 'un mois',\n            MM : '%d mois',\n            y : 'un an',\n            yy : '%d ans'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(er|e)/,\n        ordinal : function (number, period) {\n            switch (period) {\n                // Words with masculine grammatical gender: mois, trimestre, jour\n                default:\n                case 'M':\n                case 'Q':\n                case 'D':\n                case 'DDD':\n                case 'd':\n                    return number + (number === 1 ? 'er' : 'e');\n\n                // Words with feminine grammatical gender: semaine\n                case 'w':\n                case 'W':\n                    return number + (number === 1 ? 're' : 'e');\n            }\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return frCh;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/fr-ch.js?");

/***/ }),

/***/ "./node_modules/moment/locale/fr.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/fr.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var fr = moment.defineLocale('fr', {\n        months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'),\n        monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),\n        weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),\n        weekdaysMin : 'di_lu_ma_me_je_ve_sa'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[Aujourd’hui à] LT',\n            nextDay : '[Demain à] LT',\n            nextWeek : 'dddd [à] LT',\n            lastDay : '[Hier à] LT',\n            lastWeek : 'dddd [dernier à] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'dans %s',\n            past : 'il y a %s',\n            s : 'quelques secondes',\n            ss : '%d secondes',\n            m : 'une minute',\n            mm : '%d minutes',\n            h : 'une heure',\n            hh : '%d heures',\n            d : 'un jour',\n            dd : '%d jours',\n            M : 'un mois',\n            MM : '%d mois',\n            y : 'un an',\n            yy : '%d ans'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(er|)/,\n        ordinal : function (number, period) {\n            switch (period) {\n                // TODO: Return 'e' when day of month > 1. Move this case inside\n                // block for masculine words below.\n                // See https://github.com/moment/moment/issues/3375\n                case 'D':\n                    return number + (number === 1 ? 'er' : '');\n\n                // Words with masculine grammatical gender: mois, trimestre, jour\n                default:\n                case 'M':\n                case 'Q':\n                case 'DDD':\n                case 'd':\n                    return number + (number === 1 ? 'er' : 'e');\n\n                // Words with feminine grammatical gender: semaine\n                case 'w':\n                case 'W':\n                    return number + (number === 1 ? 're' : 'e');\n            }\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return fr;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/fr.js?");

/***/ }),

/***/ "./node_modules/moment/locale/fy.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/fy.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var monthsShortWithDots = 'jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.'.split('_'),\n        monthsShortWithoutDots = 'jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_');\n\n    var fy = moment.defineLocale('fy', {\n        months : 'jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber'.split('_'),\n        monthsShort : function (m, format) {\n            if (!m) {\n                return monthsShortWithDots;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShortWithoutDots[m.month()];\n            } else {\n                return monthsShortWithDots[m.month()];\n            }\n        },\n        monthsParseExact : true,\n        weekdays : 'snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon'.split('_'),\n        weekdaysShort : 'si._mo._ti._wo._to._fr._so.'.split('_'),\n        weekdaysMin : 'Si_Mo_Ti_Wo_To_Fr_So'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD-MM-YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[hjoed om] LT',\n            nextDay: '[moarn om] LT',\n            nextWeek: 'dddd [om] LT',\n            lastDay: '[juster om] LT',\n            lastWeek: '[ôfrûne] dddd [om] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'oer %s',\n            past : '%s lyn',\n            s : 'in pear sekonden',\n            ss : '%d sekonden',\n            m : 'ien minút',\n            mm : '%d minuten',\n            h : 'ien oere',\n            hh : '%d oeren',\n            d : 'ien dei',\n            dd : '%d dagen',\n            M : 'ien moanne',\n            MM : '%d moannen',\n            y : 'ien jier',\n            yy : '%d jierren'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n        ordinal : function (number) {\n            return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de');\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return fy;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/fy.js?");

/***/ }),

/***/ "./node_modules/moment/locale/gd.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/gd.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var months = [\n        'Am Faoilleach', 'An Gearran', 'Am Màrt', 'An Giblean', 'An Cèitean', 'An t-Ògmhios', 'An t-Iuchar', 'An Lùnastal', 'An t-Sultain', 'An Dàmhair', 'An t-Samhain', 'An Dùbhlachd'\n    ];\n\n    var monthsShort = ['Faoi', 'Gear', 'Màrt', 'Gibl', 'Cèit', 'Ògmh', 'Iuch', 'Lùn', 'Sult', 'Dàmh', 'Samh', 'Dùbh'];\n\n    var weekdays = ['Didòmhnaich', 'Diluain', 'Dimàirt', 'Diciadain', 'Diardaoin', 'Dihaoine', 'Disathairne'];\n\n    var weekdaysShort = ['Did', 'Dil', 'Dim', 'Dic', 'Dia', 'Dih', 'Dis'];\n\n    var weekdaysMin = ['Dò', 'Lu', 'Mà', 'Ci', 'Ar', 'Ha', 'Sa'];\n\n    var gd = moment.defineLocale('gd', {\n        months : months,\n        monthsShort : monthsShort,\n        monthsParseExact : true,\n        weekdays : weekdays,\n        weekdaysShort : weekdaysShort,\n        weekdaysMin : weekdaysMin,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[An-diugh aig] LT',\n            nextDay : '[A-màireach aig] LT',\n            nextWeek : 'dddd [aig] LT',\n            lastDay : '[An-dè aig] LT',\n            lastWeek : 'dddd [seo chaidh] [aig] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'ann an %s',\n            past : 'bho chionn %s',\n            s : 'beagan diogan',\n            ss : '%d diogan',\n            m : 'mionaid',\n            mm : '%d mionaidean',\n            h : 'uair',\n            hh : '%d uairean',\n            d : 'latha',\n            dd : '%d latha',\n            M : 'mìos',\n            MM : '%d mìosan',\n            y : 'bliadhna',\n            yy : '%d bliadhna'\n        },\n        dayOfMonthOrdinalParse : /\\d{1,2}(d|na|mh)/,\n        ordinal : function (number) {\n            var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh';\n            return number + output;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return gd;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/gd.js?");

/***/ }),

/***/ "./node_modules/moment/locale/gl.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/gl.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var gl = moment.defineLocale('gl', {\n        months : 'xaneiro_febreiro_marzo_abril_maio_xuño_xullo_agosto_setembro_outubro_novembro_decembro'.split('_'),\n        monthsShort : 'xan._feb._mar._abr._mai._xuñ._xul._ago._set._out._nov._dec.'.split('_'),\n        monthsParseExact: true,\n        weekdays : 'domingo_luns_martes_mércores_xoves_venres_sábado'.split('_'),\n        weekdaysShort : 'dom._lun._mar._mér._xov._ven._sáb.'.split('_'),\n        weekdaysMin : 'do_lu_ma_mé_xo_ve_sá'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D [de] MMMM [de] YYYY',\n            LLL : 'D [de] MMMM [de] YYYY H:mm',\n            LLLL : 'dddd, D [de] MMMM [de] YYYY H:mm'\n        },\n        calendar : {\n            sameDay : function () {\n                return '[hoxe ' + ((this.hours() !== 1) ? 'ás' : 'á') + '] LT';\n            },\n            nextDay : function () {\n                return '[mañá ' + ((this.hours() !== 1) ? 'ás' : 'á') + '] LT';\n            },\n            nextWeek : function () {\n                return 'dddd [' + ((this.hours() !== 1) ? 'ás' : 'a') + '] LT';\n            },\n            lastDay : function () {\n                return '[onte ' + ((this.hours() !== 1) ? 'á' : 'a') + '] LT';\n            },\n            lastWeek : function () {\n                return '[o] dddd [pasado ' + ((this.hours() !== 1) ? 'ás' : 'a') + '] LT';\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : function (str) {\n                if (str.indexOf('un') === 0) {\n                    return 'n' + str;\n                }\n                return 'en ' + str;\n            },\n            past : 'hai %s',\n            s : 'uns segundos',\n            ss : '%d segundos',\n            m : 'un minuto',\n            mm : '%d minutos',\n            h : 'unha hora',\n            hh : '%d horas',\n            d : 'un día',\n            dd : '%d días',\n            M : 'un mes',\n            MM : '%d meses',\n            y : 'un ano',\n            yy : '%d anos'\n        },\n        dayOfMonthOrdinalParse : /\\d{1,2}º/,\n        ordinal : '%dº',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return gl;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/gl.js?");

/***/ }),

/***/ "./node_modules/moment/locale/gom-latn.js":
/*!************************************************!*\
  !*** ./node_modules/moment/locale/gom-latn.js ***!
  \************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            's': ['thodde secondanim', 'thodde second'],\n            'ss': [number + ' secondanim', number + ' second'],\n            'm': ['eka mintan', 'ek minute'],\n            'mm': [number + ' mintanim', number + ' mintam'],\n            'h': ['eka horan', 'ek hor'],\n            'hh': [number + ' horanim', number + ' horam'],\n            'd': ['eka disan', 'ek dis'],\n            'dd': [number + ' disanim', number + ' dis'],\n            'M': ['eka mhoinean', 'ek mhoino'],\n            'MM': [number + ' mhoineanim', number + ' mhoine'],\n            'y': ['eka vorsan', 'ek voros'],\n            'yy': [number + ' vorsanim', number + ' vorsam']\n        };\n        return withoutSuffix ? format[key][0] : format[key][1];\n    }\n\n    var gomLatn = moment.defineLocale('gom-latn', {\n        months : 'Janer_Febrer_Mars_Abril_Mai_Jun_Julai_Agost_Setembr_Otubr_Novembr_Dezembr'.split('_'),\n        monthsShort : 'Jan._Feb._Mars_Abr._Mai_Jun_Jul._Ago._Set._Otu._Nov._Dez.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'Aitar_Somar_Mongllar_Budvar_Brestar_Sukrar_Son\\'var'.split('_'),\n        weekdaysShort : 'Ait._Som._Mon._Bud._Bre._Suk._Son.'.split('_'),\n        weekdaysMin : 'Ai_Sm_Mo_Bu_Br_Su_Sn'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'A h:mm [vazta]',\n            LTS : 'A h:mm:ss [vazta]',\n            L : 'DD-MM-YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY A h:mm [vazta]',\n            LLLL : 'dddd, MMMM[achea] Do, YYYY, A h:mm [vazta]',\n            llll: 'ddd, D MMM YYYY, A h:mm [vazta]'\n        },\n        calendar : {\n            sameDay: '[Aiz] LT',\n            nextDay: '[Faleam] LT',\n            nextWeek: '[Ieta to] dddd[,] LT',\n            lastDay: '[Kal] LT',\n            lastWeek: '[Fatlo] dddd[,] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : '%s',\n            past : '%s adim',\n            s : processRelativeTime,\n            ss : processRelativeTime,\n            m : processRelativeTime,\n            mm : processRelativeTime,\n            h : processRelativeTime,\n            hh : processRelativeTime,\n            d : processRelativeTime,\n            dd : processRelativeTime,\n            M : processRelativeTime,\n            MM : processRelativeTime,\n            y : processRelativeTime,\n            yy : processRelativeTime\n        },\n        dayOfMonthOrdinalParse : /\\d{1,2}(er)/,\n        ordinal : function (number, period) {\n            switch (period) {\n                // the ordinal 'er' only applies to day of the month\n                case 'D':\n                    return number + 'er';\n                default:\n                case 'M':\n                case 'Q':\n                case 'DDD':\n                case 'd':\n                case 'w':\n                case 'W':\n                    return number;\n            }\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        },\n        meridiemParse: /rati|sokalli|donparam|sanje/,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'rati') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'sokalli') {\n                return hour;\n            } else if (meridiem === 'donparam') {\n                return hour > 12 ? hour : hour + 12;\n            } else if (meridiem === 'sanje') {\n                return hour + 12;\n            }\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'rati';\n            } else if (hour < 12) {\n                return 'sokalli';\n            } else if (hour < 16) {\n                return 'donparam';\n            } else if (hour < 20) {\n                return 'sanje';\n            } else {\n                return 'rati';\n            }\n        }\n    });\n\n    return gomLatn;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/gom-latn.js?");

/***/ }),

/***/ "./node_modules/moment/locale/gu.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/gu.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n            '1': '૧',\n            '2': '૨',\n            '3': '૩',\n            '4': '૪',\n            '5': '૫',\n            '6': '૬',\n            '7': '૭',\n            '8': '૮',\n            '9': '૯',\n            '0': '૦'\n        },\n        numberMap = {\n            '૧': '1',\n            '૨': '2',\n            '૩': '3',\n            '૪': '4',\n            '૫': '5',\n            '૬': '6',\n            '૭': '7',\n            '૮': '8',\n            '૯': '9',\n            '૦': '0'\n        };\n\n    var gu = moment.defineLocale('gu', {\n        months: 'જાન્યુઆરી_ફેબ્રુઆરી_માર્ચ_એપ્રિલ_મે_જૂન_જુલાઈ_ઑગસ્ટ_સપ્ટેમ્બર_ઑક્ટ્બર_નવેમ્બર_ડિસેમ્બર'.split('_'),\n        monthsShort: 'જાન્યુ._ફેબ્રુ._માર્ચ_એપ્રિ._મે_જૂન_જુલા._ઑગ._સપ્ટે._ઑક્ટ્._નવે._ડિસે.'.split('_'),\n        monthsParseExact: true,\n        weekdays: 'રવિવાર_સોમવાર_મંગળવાર_બુધ્વાર_ગુરુવાર_શુક્રવાર_શનિવાર'.split('_'),\n        weekdaysShort: 'રવિ_સોમ_મંગળ_બુધ્_ગુરુ_શુક્ર_શનિ'.split('_'),\n        weekdaysMin: 'ર_સો_મં_બુ_ગુ_શુ_શ'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm વાગ્યે',\n            LTS: 'A h:mm:ss વાગ્યે',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, A h:mm વાગ્યે',\n            LLLL: 'dddd, D MMMM YYYY, A h:mm વાગ્યે'\n        },\n        calendar: {\n            sameDay: '[આજ] LT',\n            nextDay: '[કાલે] LT',\n            nextWeek: 'dddd, LT',\n            lastDay: '[ગઇકાલે] LT',\n            lastWeek: '[પાછલા] dddd, LT',\n            sameElse: 'L'\n        },\n        relativeTime: {\n            future: '%s મા',\n            past: '%s પેહલા',\n            s: 'અમુક પળો',\n            ss: '%d સેકંડ',\n            m: 'એક મિનિટ',\n            mm: '%d મિનિટ',\n            h: 'એક કલાક',\n            hh: '%d કલાક',\n            d: 'એક દિવસ',\n            dd: '%d દિવસ',\n            M: 'એક મહિનો',\n            MM: '%d મહિનો',\n            y: 'એક વર્ષ',\n            yy: '%d વર્ષ'\n        },\n        preparse: function (string) {\n            return string.replace(/[૧૨૩૪૫૬૭૮૯૦]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        // Gujarati notation for meridiems are quite fuzzy in practice. While there exists\n        // a rigid notion of a 'Pahar' it is not used as rigidly in modern Gujarati.\n        meridiemParse: /રાત|બપોર|સવાર|સાંજ/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'રાત') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'સવાર') {\n                return hour;\n            } else if (meridiem === 'બપોર') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'સાંજ') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'રાત';\n            } else if (hour < 10) {\n                return 'સવાર';\n            } else if (hour < 17) {\n                return 'બપોર';\n            } else if (hour < 20) {\n                return 'સાંજ';\n            } else {\n                return 'રાત';\n            }\n        },\n        week: {\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\n    return gu;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/gu.js?");

/***/ }),

/***/ "./node_modules/moment/locale/he.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/he.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var he = moment.defineLocale('he', {\n        months : 'ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר'.split('_'),\n        monthsShort : 'ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳'.split('_'),\n        weekdays : 'ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת'.split('_'),\n        weekdaysShort : 'א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳'.split('_'),\n        weekdaysMin : 'א_ב_ג_ד_ה_ו_ש'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D [ב]MMMM YYYY',\n            LLL : 'D [ב]MMMM YYYY HH:mm',\n            LLLL : 'dddd, D [ב]MMMM YYYY HH:mm',\n            l : 'D/M/YYYY',\n            ll : 'D MMM YYYY',\n            lll : 'D MMM YYYY HH:mm',\n            llll : 'ddd, D MMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[היום ב־]LT',\n            nextDay : '[מחר ב־]LT',\n            nextWeek : 'dddd [בשעה] LT',\n            lastDay : '[אתמול ב־]LT',\n            lastWeek : '[ביום] dddd [האחרון בשעה] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'בעוד %s',\n            past : 'לפני %s',\n            s : 'מספר שניות',\n            ss : '%d שניות',\n            m : 'דקה',\n            mm : '%d דקות',\n            h : 'שעה',\n            hh : function (number) {\n                if (number === 2) {\n                    return 'שעתיים';\n                }\n                return number + ' שעות';\n            },\n            d : 'יום',\n            dd : function (number) {\n                if (number === 2) {\n                    return 'יומיים';\n                }\n                return number + ' ימים';\n            },\n            M : 'חודש',\n            MM : function (number) {\n                if (number === 2) {\n                    return 'חודשיים';\n                }\n                return number + ' חודשים';\n            },\n            y : 'שנה',\n            yy : function (number) {\n                if (number === 2) {\n                    return 'שנתיים';\n                } else if (number % 10 === 0 && number !== 10) {\n                    return number + ' שנה';\n                }\n                return number + ' שנים';\n            }\n        },\n        meridiemParse: /אחה\"צ|לפנה\"צ|אחרי הצהריים|לפני הצהריים|לפנות בוקר|בבוקר|בערב/i,\n        isPM : function (input) {\n            return /^(אחה\"צ|אחרי הצהריים|בערב)$/.test(input);\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 5) {\n                return 'לפנות בוקר';\n            } else if (hour < 10) {\n                return 'בבוקר';\n            } else if (hour < 12) {\n                return isLower ? 'לפנה\"צ' : 'לפני הצהריים';\n            } else if (hour < 18) {\n                return isLower ? 'אחה\"צ' : 'אחרי הצהריים';\n            } else {\n                return 'בערב';\n            }\n        }\n    });\n\n    return he;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/he.js?");

/***/ }),

/***/ "./node_modules/moment/locale/hi.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/hi.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '१',\n        '2': '२',\n        '3': '३',\n        '4': '४',\n        '5': '५',\n        '6': '६',\n        '7': '७',\n        '8': '८',\n        '9': '९',\n        '0': '०'\n    },\n    numberMap = {\n        '१': '1',\n        '२': '2',\n        '३': '3',\n        '४': '4',\n        '५': '5',\n        '६': '6',\n        '७': '7',\n        '८': '8',\n        '९': '9',\n        '०': '0'\n    };\n\n    var hi = moment.defineLocale('hi', {\n        months : 'जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर'.split('_'),\n        monthsShort : 'जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.'.split('_'),\n        monthsParseExact: true,\n        weekdays : 'रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'),\n        weekdaysShort : 'रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि'.split('_'),\n        weekdaysMin : 'र_सो_मं_बु_गु_शु_श'.split('_'),\n        longDateFormat : {\n            LT : 'A h:mm बजे',\n            LTS : 'A h:mm:ss बजे',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY, A h:mm बजे',\n            LLLL : 'dddd, D MMMM YYYY, A h:mm बजे'\n        },\n        calendar : {\n            sameDay : '[आज] LT',\n            nextDay : '[कल] LT',\n            nextWeek : 'dddd, LT',\n            lastDay : '[कल] LT',\n            lastWeek : '[पिछले] dddd, LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s में',\n            past : '%s पहले',\n            s : 'कुछ ही क्षण',\n            ss : '%d सेकंड',\n            m : 'एक मिनट',\n            mm : '%d मिनट',\n            h : 'एक घंटा',\n            hh : '%d घंटे',\n            d : 'एक दिन',\n            dd : '%d दिन',\n            M : 'एक महीने',\n            MM : '%d महीने',\n            y : 'एक वर्ष',\n            yy : '%d वर्ष'\n        },\n        preparse: function (string) {\n            return string.replace(/[१२३४५६७८९०]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        // Hindi notation for meridiems are quite fuzzy in practice. While there exists\n        // a rigid notion of a 'Pahar' it is not used as rigidly in modern Hindi.\n        meridiemParse: /रात|सुबह|दोपहर|शाम/,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'रात') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'सुबह') {\n                return hour;\n            } else if (meridiem === 'दोपहर') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'शाम') {\n                return hour + 12;\n            }\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'रात';\n            } else if (hour < 10) {\n                return 'सुबह';\n            } else if (hour < 17) {\n                return 'दोपहर';\n            } else if (hour < 20) {\n                return 'शाम';\n            } else {\n                return 'रात';\n            }\n        },\n        week : {\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\n    return hi;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/hi.js?");

/***/ }),

/***/ "./node_modules/moment/locale/hr.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/hr.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    function translate(number, withoutSuffix, key) {\n        var result = number + ' ';\n        switch (key) {\n            case 'ss':\n                if (number === 1) {\n                    result += 'sekunda';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'sekunde';\n                } else {\n                    result += 'sekundi';\n                }\n                return result;\n            case 'm':\n                return withoutSuffix ? 'jedna minuta' : 'jedne minute';\n            case 'mm':\n                if (number === 1) {\n                    result += 'minuta';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'minute';\n                } else {\n                    result += 'minuta';\n                }\n                return result;\n            case 'h':\n                return withoutSuffix ? 'jedan sat' : 'jednog sata';\n            case 'hh':\n                if (number === 1) {\n                    result += 'sat';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'sata';\n                } else {\n                    result += 'sati';\n                }\n                return result;\n            case 'dd':\n                if (number === 1) {\n                    result += 'dan';\n                } else {\n                    result += 'dana';\n                }\n                return result;\n            case 'MM':\n                if (number === 1) {\n                    result += 'mjesec';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'mjeseca';\n                } else {\n                    result += 'mjeseci';\n                }\n                return result;\n            case 'yy':\n                if (number === 1) {\n                    result += 'godina';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'godine';\n                } else {\n                    result += 'godina';\n                }\n                return result;\n        }\n    }\n\n    var hr = moment.defineLocale('hr', {\n        months : {\n            format: 'siječnja_veljače_ožujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca'.split('_'),\n            standalone: 'siječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac'.split('_')\n        },\n        monthsShort : 'sij._velj._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.'.split('_'),\n        monthsParseExact: true,\n        weekdays : 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'),\n        weekdaysShort : 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),\n        weekdaysMin : 'ne_po_ut_sr_če_pe_su'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D. MMMM YYYY',\n            LLL : 'D. MMMM YYYY H:mm',\n            LLLL : 'dddd, D. MMMM YYYY H:mm'\n        },\n        calendar : {\n            sameDay  : '[danas u] LT',\n            nextDay  : '[sutra u] LT',\n            nextWeek : function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[u] [nedjelju] [u] LT';\n                    case 3:\n                        return '[u] [srijedu] [u] LT';\n                    case 6:\n                        return '[u] [subotu] [u] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[u] dddd [u] LT';\n                }\n            },\n            lastDay  : '[jučer u] LT',\n            lastWeek : function () {\n                switch (this.day()) {\n                    case 0:\n                    case 3:\n                        return '[prošlu] dddd [u] LT';\n                    case 6:\n                        return '[prošle] [subote] [u] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[prošli] dddd [u] LT';\n                }\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'za %s',\n            past   : 'prije %s',\n            s      : 'par sekundi',\n            ss     : translate,\n            m      : translate,\n            mm     : translate,\n            h      : translate,\n            hh     : translate,\n            d      : 'dan',\n            dd     : translate,\n            M      : 'mjesec',\n            MM     : translate,\n            y      : 'godinu',\n            yy     : translate\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return hr;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/hr.js?");

/***/ }),

/***/ "./node_modules/moment/locale/hu.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/hu.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var weekEndings = 'vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton'.split(' ');\n    function translate(number, withoutSuffix, key, isFuture) {\n        var num = number;\n        switch (key) {\n            case 's':\n                return (isFuture || withoutSuffix) ? 'néhány másodperc' : 'néhány másodperce';\n            case 'ss':\n                return num + (isFuture || withoutSuffix) ? ' másodperc' : ' másodperce';\n            case 'm':\n                return 'egy' + (isFuture || withoutSuffix ? ' perc' : ' perce');\n            case 'mm':\n                return num + (isFuture || withoutSuffix ? ' perc' : ' perce');\n            case 'h':\n                return 'egy' + (isFuture || withoutSuffix ? ' óra' : ' órája');\n            case 'hh':\n                return num + (isFuture || withoutSuffix ? ' óra' : ' órája');\n            case 'd':\n                return 'egy' + (isFuture || withoutSuffix ? ' nap' : ' napja');\n            case 'dd':\n                return num + (isFuture || withoutSuffix ? ' nap' : ' napja');\n            case 'M':\n                return 'egy' + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');\n            case 'MM':\n                return num + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');\n            case 'y':\n                return 'egy' + (isFuture || withoutSuffix ? ' év' : ' éve');\n            case 'yy':\n                return num + (isFuture || withoutSuffix ? ' év' : ' éve');\n        }\n        return '';\n    }\n    function week(isFuture) {\n        return (isFuture ? '' : '[múlt] ') + '[' + weekEndings[this.day()] + '] LT[-kor]';\n    }\n\n    var hu = moment.defineLocale('hu', {\n        months : 'január_február_március_április_május_június_július_augusztus_szeptember_október_november_december'.split('_'),\n        monthsShort : 'jan_feb_márc_ápr_máj_jún_júl_aug_szept_okt_nov_dec'.split('_'),\n        weekdays : 'vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat'.split('_'),\n        weekdaysShort : 'vas_hét_kedd_sze_csüt_pén_szo'.split('_'),\n        weekdaysMin : 'v_h_k_sze_cs_p_szo'.split('_'),\n        longDateFormat : {\n            LT : 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'YYYY.MM.DD.',\n            LL : 'YYYY. MMMM D.',\n            LLL : 'YYYY. MMMM D. H:mm',\n            LLLL : 'YYYY. MMMM D., dddd H:mm'\n        },\n        meridiemParse: /de|du/i,\n        isPM: function (input) {\n            return input.charAt(1).toLowerCase() === 'u';\n        },\n        meridiem : function (hours, minutes, isLower) {\n            if (hours < 12) {\n                return isLower === true ? 'de' : 'DE';\n            } else {\n                return isLower === true ? 'du' : 'DU';\n            }\n        },\n        calendar : {\n            sameDay : '[ma] LT[-kor]',\n            nextDay : '[holnap] LT[-kor]',\n            nextWeek : function () {\n                return week.call(this, true);\n            },\n            lastDay : '[tegnap] LT[-kor]',\n            lastWeek : function () {\n                return week.call(this, false);\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s múlva',\n            past : '%s',\n            s : translate,\n            ss : translate,\n            m : translate,\n            mm : translate,\n            h : translate,\n            hh : translate,\n            d : translate,\n            dd : translate,\n            M : translate,\n            MM : translate,\n            y : translate,\n            yy : translate\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return hu;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/hu.js?");

/***/ }),

/***/ "./node_modules/moment/locale/hy-am.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/hy-am.js ***!
  \*********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var hyAm = moment.defineLocale('hy-am', {\n        months : {\n            format: 'հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի'.split('_'),\n            standalone: 'հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր'.split('_')\n        },\n        monthsShort : 'հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ'.split('_'),\n        weekdays : 'կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_հինգշաբթի_ուրբաթ_շաբաթ'.split('_'),\n        weekdaysShort : 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'),\n        weekdaysMin : 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY թ.',\n            LLL : 'D MMMM YYYY թ., HH:mm',\n            LLLL : 'dddd, D MMMM YYYY թ., HH:mm'\n        },\n        calendar : {\n            sameDay: '[այսօր] LT',\n            nextDay: '[վաղը] LT',\n            lastDay: '[երեկ] LT',\n            nextWeek: function () {\n                return 'dddd [օրը ժամը] LT';\n            },\n            lastWeek: function () {\n                return '[անցած] dddd [օրը ժամը] LT';\n            },\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : '%s հետո',\n            past : '%s առաջ',\n            s : 'մի քանի վայրկյան',\n            ss : '%d վայրկյան',\n            m : 'րոպե',\n            mm : '%d րոպե',\n            h : 'ժամ',\n            hh : '%d ժամ',\n            d : 'օր',\n            dd : '%d օր',\n            M : 'ամիս',\n            MM : '%d ամիս',\n            y : 'տարի',\n            yy : '%d տարի'\n        },\n        meridiemParse: /գիշերվա|առավոտվա|ցերեկվա|երեկոյան/,\n        isPM: function (input) {\n            return /^(ցերեկվա|երեկոյան)$/.test(input);\n        },\n        meridiem : function (hour) {\n            if (hour < 4) {\n                return 'գիշերվա';\n            } else if (hour < 12) {\n                return 'առավոտվա';\n            } else if (hour < 17) {\n                return 'ցերեկվա';\n            } else {\n                return 'երեկոյան';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}|\\d{1,2}-(ին|րդ)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'DDD':\n                case 'w':\n                case 'W':\n                case 'DDDo':\n                    if (number === 1) {\n                        return number + '-ին';\n                    }\n                    return number + '-րդ';\n                default:\n                    return number;\n            }\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return hyAm;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/hy-am.js?");

/***/ }),

/***/ "./node_modules/moment/locale/id.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/id.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var id = moment.defineLocale('id', {\n        months : 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember'.split('_'),\n        monthsShort : 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Agt_Sep_Okt_Nov_Des'.split('_'),\n        weekdays : 'Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu'.split('_'),\n        weekdaysShort : 'Min_Sen_Sel_Rab_Kam_Jum_Sab'.split('_'),\n        weekdaysMin : 'Mg_Sn_Sl_Rb_Km_Jm_Sb'.split('_'),\n        longDateFormat : {\n            LT : 'HH.mm',\n            LTS : 'HH.mm.ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY [pukul] HH.mm',\n            LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'\n        },\n        meridiemParse: /pagi|siang|sore|malam/,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'pagi') {\n                return hour;\n            } else if (meridiem === 'siang') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === 'sore' || meridiem === 'malam') {\n                return hour + 12;\n            }\n        },\n        meridiem : function (hours, minutes, isLower) {\n            if (hours < 11) {\n                return 'pagi';\n            } else if (hours < 15) {\n                return 'siang';\n            } else if (hours < 19) {\n                return 'sore';\n            } else {\n                return 'malam';\n            }\n        },\n        calendar : {\n            sameDay : '[Hari ini pukul] LT',\n            nextDay : '[Besok pukul] LT',\n            nextWeek : 'dddd [pukul] LT',\n            lastDay : '[Kemarin pukul] LT',\n            lastWeek : 'dddd [lalu pukul] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'dalam %s',\n            past : '%s yang lalu',\n            s : 'beberapa detik',\n            ss : '%d detik',\n            m : 'semenit',\n            mm : '%d menit',\n            h : 'sejam',\n            hh : '%d jam',\n            d : 'sehari',\n            dd : '%d hari',\n            M : 'sebulan',\n            MM : '%d bulan',\n            y : 'setahun',\n            yy : '%d tahun'\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return id;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/id.js?");

/***/ }),

/***/ "./node_modules/moment/locale/is.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/is.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    function plural(n) {\n        if (n % 100 === 11) {\n            return true;\n        } else if (n % 10 === 1) {\n            return false;\n        }\n        return true;\n    }\n    function translate(number, withoutSuffix, key, isFuture) {\n        var result = number + ' ';\n        switch (key) {\n            case 's':\n                return withoutSuffix || isFuture ? 'nokkrar sekúndur' : 'nokkrum sekúndum';\n            case 'ss':\n                if (plural(number)) {\n                    return result + (withoutSuffix || isFuture ? 'sekúndur' : 'sekúndum');\n                }\n                return result + 'sekúnda';\n            case 'm':\n                return withoutSuffix ? 'mínúta' : 'mínútu';\n            case 'mm':\n                if (plural(number)) {\n                    return result + (withoutSuffix || isFuture ? 'mínútur' : 'mínútum');\n                } else if (withoutSuffix) {\n                    return result + 'mínúta';\n                }\n                return result + 'mínútu';\n            case 'hh':\n                if (plural(number)) {\n                    return result + (withoutSuffix || isFuture ? 'klukkustundir' : 'klukkustundum');\n                }\n                return result + 'klukkustund';\n            case 'd':\n                if (withoutSuffix) {\n                    return 'dagur';\n                }\n                return isFuture ? 'dag' : 'degi';\n            case 'dd':\n                if (plural(number)) {\n                    if (withoutSuffix) {\n                        return result + 'dagar';\n                    }\n                    return result + (isFuture ? 'daga' : 'dögum');\n                } else if (withoutSuffix) {\n                    return result + 'dagur';\n                }\n                return result + (isFuture ? 'dag' : 'degi');\n            case 'M':\n                if (withoutSuffix) {\n                    return 'mánuður';\n                }\n                return isFuture ? 'mánuð' : 'mánuði';\n            case 'MM':\n                if (plural(number)) {\n                    if (withoutSuffix) {\n                        return result + 'mánuðir';\n                    }\n                    return result + (isFuture ? 'mánuði' : 'mánuðum');\n                } else if (withoutSuffix) {\n                    return result + 'mánuður';\n                }\n                return result + (isFuture ? 'mánuð' : 'mánuði');\n            case 'y':\n                return withoutSuffix || isFuture ? 'ár' : 'ári';\n            case 'yy':\n                if (plural(number)) {\n                    return result + (withoutSuffix || isFuture ? 'ár' : 'árum');\n                }\n                return result + (withoutSuffix || isFuture ? 'ár' : 'ári');\n        }\n    }\n\n    var is = moment.defineLocale('is', {\n        months : 'janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember'.split('_'),\n        monthsShort : 'jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des'.split('_'),\n        weekdays : 'sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur'.split('_'),\n        weekdaysShort : 'sun_mán_þri_mið_fim_fös_lau'.split('_'),\n        weekdaysMin : 'Su_Má_Þr_Mi_Fi_Fö_La'.split('_'),\n        longDateFormat : {\n            LT : 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D. MMMM YYYY',\n            LLL : 'D. MMMM YYYY [kl.] H:mm',\n            LLLL : 'dddd, D. MMMM YYYY [kl.] H:mm'\n        },\n        calendar : {\n            sameDay : '[í dag kl.] LT',\n            nextDay : '[á morgun kl.] LT',\n            nextWeek : 'dddd [kl.] LT',\n            lastDay : '[í gær kl.] LT',\n            lastWeek : '[síðasta] dddd [kl.] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'eftir %s',\n            past : 'fyrir %s síðan',\n            s : translate,\n            ss : translate,\n            m : translate,\n            mm : translate,\n            h : 'klukkustund',\n            hh : translate,\n            d : translate,\n            dd : translate,\n            M : translate,\n            MM : translate,\n            y : translate,\n            yy : translate\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return is;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/is.js?");

/***/ }),

/***/ "./node_modules/moment/locale/it.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/it.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var it = moment.defineLocale('it', {\n        months : 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split('_'),\n        monthsShort : 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'),\n        weekdays : 'domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato'.split('_'),\n        weekdaysShort : 'dom_lun_mar_mer_gio_ven_sab'.split('_'),\n        weekdaysMin : 'do_lu_ma_me_gi_ve_sa'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[Oggi alle] LT',\n            nextDay: '[Domani alle] LT',\n            nextWeek: 'dddd [alle] LT',\n            lastDay: '[Ieri alle] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[la scorsa] dddd [alle] LT';\n                    default:\n                        return '[lo scorso] dddd [alle] LT';\n                }\n            },\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : function (s) {\n                return ((/^[0-9].+$/).test(s) ? 'tra' : 'in') + ' ' + s;\n            },\n            past : '%s fa',\n            s : 'alcuni secondi',\n            ss : '%d secondi',\n            m : 'un minuto',\n            mm : '%d minuti',\n            h : 'un\\'ora',\n            hh : '%d ore',\n            d : 'un giorno',\n            dd : '%d giorni',\n            M : 'un mese',\n            MM : '%d mesi',\n            y : 'un anno',\n            yy : '%d anni'\n        },\n        dayOfMonthOrdinalParse : /\\d{1,2}º/,\n        ordinal: '%dº',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return it;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/it.js?");

/***/ }),

/***/ "./node_modules/moment/locale/ja.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/ja.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var ja = moment.defineLocale('ja', {\n        months : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n        monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n        weekdays : '日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日'.split('_'),\n        weekdaysShort : '日_月_火_水_木_金_土'.split('_'),\n        weekdaysMin : '日_月_火_水_木_金_土'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'YYYY/MM/DD',\n            LL : 'YYYY年M月D日',\n            LLL : 'YYYY年M月D日 HH:mm',\n            LLLL : 'YYYY年M月D日 dddd HH:mm',\n            l : 'YYYY/MM/DD',\n            ll : 'YYYY年M月D日',\n            lll : 'YYYY年M月D日 HH:mm',\n            llll : 'YYYY年M月D日(ddd) HH:mm'\n        },\n        meridiemParse: /午前|午後/i,\n        isPM : function (input) {\n            return input === '午後';\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 12) {\n                return '午前';\n            } else {\n                return '午後';\n            }\n        },\n        calendar : {\n            sameDay : '[今日] LT',\n            nextDay : '[明日] LT',\n            nextWeek : function (now) {\n                if (now.week() < this.week()) {\n                    return '[来週]dddd LT';\n                } else {\n                    return 'dddd LT';\n                }\n            },\n            lastDay : '[昨日] LT',\n            lastWeek : function (now) {\n                if (this.week() < now.week()) {\n                    return '[先週]dddd LT';\n                } else {\n                    return 'dddd LT';\n                }\n            },\n            sameElse : 'L'\n        },\n        dayOfMonthOrdinalParse : /\\d{1,2}日/,\n        ordinal : function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + '日';\n                default:\n                    return number;\n            }\n        },\n        relativeTime : {\n            future : '%s後',\n            past : '%s前',\n            s : '数秒',\n            ss : '%d秒',\n            m : '1分',\n            mm : '%d分',\n            h : '1時間',\n            hh : '%d時間',\n            d : '1日',\n            dd : '%d日',\n            M : '1ヶ月',\n            MM : '%dヶ月',\n            y : '1年',\n            yy : '%d年'\n        }\n    });\n\n    return ja;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/ja.js?");

/***/ }),

/***/ "./node_modules/moment/locale/jv.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/jv.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var jv = moment.defineLocale('jv', {\n        months : 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember'.split('_'),\n        monthsShort : 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des'.split('_'),\n        weekdays : 'Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu'.split('_'),\n        weekdaysShort : 'Min_Sen_Sel_Reb_Kem_Jem_Sep'.split('_'),\n        weekdaysMin : 'Mg_Sn_Sl_Rb_Km_Jm_Sp'.split('_'),\n        longDateFormat : {\n            LT : 'HH.mm',\n            LTS : 'HH.mm.ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY [pukul] HH.mm',\n            LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'\n        },\n        meridiemParse: /enjing|siyang|sonten|ndalu/,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'enjing') {\n                return hour;\n            } else if (meridiem === 'siyang') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === 'sonten' || meridiem === 'ndalu') {\n                return hour + 12;\n            }\n        },\n        meridiem : function (hours, minutes, isLower) {\n            if (hours < 11) {\n                return 'enjing';\n            } else if (hours < 15) {\n                return 'siyang';\n            } else if (hours < 19) {\n                return 'sonten';\n            } else {\n                return 'ndalu';\n            }\n        },\n        calendar : {\n            sameDay : '[Dinten puniko pukul] LT',\n            nextDay : '[Mbenjang pukul] LT',\n            nextWeek : 'dddd [pukul] LT',\n            lastDay : '[Kala wingi pukul] LT',\n            lastWeek : 'dddd [kepengker pukul] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'wonten ing %s',\n            past : '%s ingkang kepengker',\n            s : 'sawetawis detik',\n            ss : '%d detik',\n            m : 'setunggal menit',\n            mm : '%d menit',\n            h : 'setunggal jam',\n            hh : '%d jam',\n            d : 'sedinten',\n            dd : '%d dinten',\n            M : 'sewulan',\n            MM : '%d wulan',\n            y : 'setaun',\n            yy : '%d taun'\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return jv;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/jv.js?");

/***/ }),

/***/ "./node_modules/moment/locale/ka.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/ka.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var ka = moment.defineLocale('ka', {\n        months : {\n            standalone: 'იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი'.split('_'),\n            format: 'იანვარს_თებერვალს_მარტს_აპრილის_მაისს_ივნისს_ივლისს_აგვისტს_სექტემბერს_ოქტომბერს_ნოემბერს_დეკემბერს'.split('_')\n        },\n        monthsShort : 'იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ'.split('_'),\n        weekdays : {\n            standalone: 'კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი'.split('_'),\n            format: 'კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს'.split('_'),\n            isFormat: /(წინა|შემდეგ)/\n        },\n        weekdaysShort : 'კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ'.split('_'),\n        weekdaysMin : 'კვ_ორ_სა_ოთ_ხუ_პა_შა'.split('_'),\n        longDateFormat : {\n            LT : 'h:mm A',\n            LTS : 'h:mm:ss A',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY h:mm A',\n            LLLL : 'dddd, D MMMM YYYY h:mm A'\n        },\n        calendar : {\n            sameDay : '[დღეს] LT[-ზე]',\n            nextDay : '[ხვალ] LT[-ზე]',\n            lastDay : '[გუშინ] LT[-ზე]',\n            nextWeek : '[შემდეგ] dddd LT[-ზე]',\n            lastWeek : '[წინა] dddd LT-ზე',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : function (s) {\n                return (/(წამი|წუთი|საათი|წელი)/).test(s) ?\n                    s.replace(/ი$/, 'ში') :\n                    s + 'ში';\n            },\n            past : function (s) {\n                if ((/(წამი|წუთი|საათი|დღე|თვე)/).test(s)) {\n                    return s.replace(/(ი|ე)$/, 'ის წინ');\n                }\n                if ((/წელი/).test(s)) {\n                    return s.replace(/წელი$/, 'წლის წინ');\n                }\n            },\n            s : 'რამდენიმე წამი',\n            ss : '%d წამი',\n            m : 'წუთი',\n            mm : '%d წუთი',\n            h : 'საათი',\n            hh : '%d საათი',\n            d : 'დღე',\n            dd : '%d დღე',\n            M : 'თვე',\n            MM : '%d თვე',\n            y : 'წელი',\n            yy : '%d წელი'\n        },\n        dayOfMonthOrdinalParse: /0|1-ლი|მე-\\d{1,2}|\\d{1,2}-ე/,\n        ordinal : function (number) {\n            if (number === 0) {\n                return number;\n            }\n            if (number === 1) {\n                return number + '-ლი';\n            }\n            if ((number < 20) || (number <= 100 && (number % 20 === 0)) || (number % 100 === 0)) {\n                return 'მე-' + number;\n            }\n            return number + '-ე';\n        },\n        week : {\n            dow : 1,\n            doy : 7\n        }\n    });\n\n    return ka;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/ka.js?");

/***/ }),

/***/ "./node_modules/moment/locale/kk.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/kk.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var suffixes = {\n        0: '-ші',\n        1: '-ші',\n        2: '-ші',\n        3: '-ші',\n        4: '-ші',\n        5: '-ші',\n        6: '-шы',\n        7: '-ші',\n        8: '-ші',\n        9: '-шы',\n        10: '-шы',\n        20: '-шы',\n        30: '-шы',\n        40: '-шы',\n        50: '-ші',\n        60: '-шы',\n        70: '-ші',\n        80: '-ші',\n        90: '-шы',\n        100: '-ші'\n    };\n\n    var kk = moment.defineLocale('kk', {\n        months : 'қаңтар_ақпан_наурыз_сәуір_мамыр_маусым_шілде_тамыз_қыркүйек_қазан_қараша_желтоқсан'.split('_'),\n        monthsShort : 'қаң_ақп_нау_сәу_мам_мау_шіл_там_қыр_қаз_қар_жел'.split('_'),\n        weekdays : 'жексенбі_дүйсенбі_сейсенбі_сәрсенбі_бейсенбі_жұма_сенбі'.split('_'),\n        weekdaysShort : 'жек_дүй_сей_сәр_бей_жұм_сен'.split('_'),\n        weekdaysMin : 'жк_дй_сй_ср_бй_жм_сн'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[Бүгін сағат] LT',\n            nextDay : '[Ертең сағат] LT',\n            nextWeek : 'dddd [сағат] LT',\n            lastDay : '[Кеше сағат] LT',\n            lastWeek : '[Өткен аптаның] dddd [сағат] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s ішінде',\n            past : '%s бұрын',\n            s : 'бірнеше секунд',\n            ss : '%d секунд',\n            m : 'бір минут',\n            mm : '%d минут',\n            h : 'бір сағат',\n            hh : '%d сағат',\n            d : 'бір күн',\n            dd : '%d күн',\n            M : 'бір ай',\n            MM : '%d ай',\n            y : 'бір жыл',\n            yy : '%d жыл'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(ші|шы)/,\n        ordinal : function (number) {\n            var a = number % 10,\n                b = number >= 100 ? 100 : null;\n            return number + (suffixes[number] || suffixes[a] || suffixes[b]);\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return kk;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/kk.js?");

/***/ }),

/***/ "./node_modules/moment/locale/km.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/km.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '១',\n        '2': '២',\n        '3': '៣',\n        '4': '៤',\n        '5': '៥',\n        '6': '៦',\n        '7': '៧',\n        '8': '៨',\n        '9': '៩',\n        '0': '០'\n    }, numberMap = {\n        '១': '1',\n        '២': '2',\n        '៣': '3',\n        '៤': '4',\n        '៥': '5',\n        '៦': '6',\n        '៧': '7',\n        '៨': '8',\n        '៩': '9',\n        '០': '0'\n    };\n\n    var km = moment.defineLocale('km', {\n        months: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split(\n            '_'\n        ),\n        monthsShort: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split(\n            '_'\n        ),\n        weekdays: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'),\n        weekdaysShort: 'អា_ច_អ_ព_ព្រ_សុ_ស'.split('_'),\n        weekdaysMin: 'អា_ច_អ_ព_ព្រ_សុ_ស'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm'\n        },\n        meridiemParse: /ព្រឹក|ល្ងាច/,\n        isPM: function (input) {\n            return input === 'ល្ងាច';\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ព្រឹក';\n            } else {\n                return 'ល្ងាច';\n            }\n        },\n        calendar: {\n            sameDay: '[ថ្ងៃនេះ ម៉ោង] LT',\n            nextDay: '[ស្អែក ម៉ោង] LT',\n            nextWeek: 'dddd [ម៉ោង] LT',\n            lastDay: '[ម្សិលមិញ ម៉ោង] LT',\n            lastWeek: 'dddd [សប្តាហ៍មុន] [ម៉ោង] LT',\n            sameElse: 'L'\n        },\n        relativeTime: {\n            future: '%sទៀត',\n            past: '%sមុន',\n            s: 'ប៉ុន្មានវិនាទី',\n            ss: '%d វិនាទី',\n            m: 'មួយនាទី',\n            mm: '%d នាទី',\n            h: 'មួយម៉ោង',\n            hh: '%d ម៉ោង',\n            d: 'មួយថ្ងៃ',\n            dd: '%d ថ្ងៃ',\n            M: 'មួយខែ',\n            MM: '%d ខែ',\n            y: 'មួយឆ្នាំ',\n            yy: '%d ឆ្នាំ'\n        },\n        dayOfMonthOrdinalParse : /ទី\\d{1,2}/,\n        ordinal : 'ទី%d',\n        preparse: function (string) {\n            return string.replace(/[១២៣៤៥៦៧៨៩០]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4 // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return km;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/km.js?");

/***/ }),

/***/ "./node_modules/moment/locale/kn.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/kn.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '೧',\n        '2': '೨',\n        '3': '೩',\n        '4': '೪',\n        '5': '೫',\n        '6': '೬',\n        '7': '೭',\n        '8': '೮',\n        '9': '೯',\n        '0': '೦'\n    },\n    numberMap = {\n        '೧': '1',\n        '೨': '2',\n        '೩': '3',\n        '೪': '4',\n        '೫': '5',\n        '೬': '6',\n        '೭': '7',\n        '೮': '8',\n        '೯': '9',\n        '೦': '0'\n    };\n\n    var kn = moment.defineLocale('kn', {\n        months : 'ಜನವರಿ_ಫೆಬ್ರವರಿ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂಬರ್_ಅಕ್ಟೋಬರ್_ನವೆಂಬರ್_ಡಿಸೆಂಬರ್'.split('_'),\n        monthsShort : 'ಜನ_ಫೆಬ್ರ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂ_ಅಕ್ಟೋ_ನವೆಂ_ಡಿಸೆಂ'.split('_'),\n        monthsParseExact: true,\n        weekdays : 'ಭಾನುವಾರ_ಸೋಮವಾರ_ಮಂಗಳವಾರ_ಬುಧವಾರ_ಗುರುವಾರ_ಶುಕ್ರವಾರ_ಶನಿವಾರ'.split('_'),\n        weekdaysShort : 'ಭಾನು_ಸೋಮ_ಮಂಗಳ_ಬುಧ_ಗುರು_ಶುಕ್ರ_ಶನಿ'.split('_'),\n        weekdaysMin : 'ಭಾ_ಸೋ_ಮಂ_ಬು_ಗು_ಶು_ಶ'.split('_'),\n        longDateFormat : {\n            LT : 'A h:mm',\n            LTS : 'A h:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY, A h:mm',\n            LLLL : 'dddd, D MMMM YYYY, A h:mm'\n        },\n        calendar : {\n            sameDay : '[ಇಂದು] LT',\n            nextDay : '[ನಾಳೆ] LT',\n            nextWeek : 'dddd, LT',\n            lastDay : '[ನಿನ್ನೆ] LT',\n            lastWeek : '[ಕೊನೆಯ] dddd, LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s ನಂತರ',\n            past : '%s ಹಿಂದೆ',\n            s : 'ಕೆಲವು ಕ್ಷಣಗಳು',\n            ss : '%d ಸೆಕೆಂಡುಗಳು',\n            m : 'ಒಂದು ನಿಮಿಷ',\n            mm : '%d ನಿಮಿಷ',\n            h : 'ಒಂದು ಗಂಟೆ',\n            hh : '%d ಗಂಟೆ',\n            d : 'ಒಂದು ದಿನ',\n            dd : '%d ದಿನ',\n            M : 'ಒಂದು ತಿಂಗಳು',\n            MM : '%d ತಿಂಗಳು',\n            y : 'ಒಂದು ವರ್ಷ',\n            yy : '%d ವರ್ಷ'\n        },\n        preparse: function (string) {\n            return string.replace(/[೧೨೩೪೫೬೭೮೯೦]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        meridiemParse: /ರಾತ್ರಿ|ಬೆಳಿಗ್ಗೆ|ಮಧ್ಯಾಹ್ನ|ಸಂಜೆ/,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'ರಾತ್ರಿ') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'ಬೆಳಿಗ್ಗೆ') {\n                return hour;\n            } else if (meridiem === 'ಮಧ್ಯಾಹ್ನ') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'ಸಂಜೆ') {\n                return hour + 12;\n            }\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'ರಾತ್ರಿ';\n            } else if (hour < 10) {\n                return 'ಬೆಳಿಗ್ಗೆ';\n            } else if (hour < 17) {\n                return 'ಮಧ್ಯಾಹ್ನ';\n            } else if (hour < 20) {\n                return 'ಸಂಜೆ';\n            } else {\n                return 'ರಾತ್ರಿ';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(ನೇ)/,\n        ordinal : function (number) {\n            return number + 'ನೇ';\n        },\n        week : {\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\n    return kn;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/kn.js?");

/***/ }),

/***/ "./node_modules/moment/locale/ko.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/ko.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var ko = moment.defineLocale('ko', {\n        months : '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'),\n        monthsShort : '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'),\n        weekdays : '일요일_월요일_화요일_수요일_목요일_금요일_토요일'.split('_'),\n        weekdaysShort : '일_월_화_수_목_금_토'.split('_'),\n        weekdaysMin : '일_월_화_수_목_금_토'.split('_'),\n        longDateFormat : {\n            LT : 'A h:mm',\n            LTS : 'A h:mm:ss',\n            L : 'YYYY.MM.DD.',\n            LL : 'YYYY년 MMMM D일',\n            LLL : 'YYYY년 MMMM D일 A h:mm',\n            LLLL : 'YYYY년 MMMM D일 dddd A h:mm',\n            l : 'YYYY.MM.DD.',\n            ll : 'YYYY년 MMMM D일',\n            lll : 'YYYY년 MMMM D일 A h:mm',\n            llll : 'YYYY년 MMMM D일 dddd A h:mm'\n        },\n        calendar : {\n            sameDay : '오늘 LT',\n            nextDay : '내일 LT',\n            nextWeek : 'dddd LT',\n            lastDay : '어제 LT',\n            lastWeek : '지난주 dddd LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s 후',\n            past : '%s 전',\n            s : '몇 초',\n            ss : '%d초',\n            m : '1분',\n            mm : '%d분',\n            h : '한 시간',\n            hh : '%d시간',\n            d : '하루',\n            dd : '%d일',\n            M : '한 달',\n            MM : '%d달',\n            y : '일 년',\n            yy : '%d년'\n        },\n        dayOfMonthOrdinalParse : /\\d{1,2}(일|월|주)/,\n        ordinal : function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + '일';\n                case 'M':\n                    return number + '월';\n                case 'w':\n                case 'W':\n                    return number + '주';\n                default:\n                    return number;\n            }\n        },\n        meridiemParse : /오전|오후/,\n        isPM : function (token) {\n            return token === '오후';\n        },\n        meridiem : function (hour, minute, isUpper) {\n            return hour < 12 ? '오전' : '오후';\n        }\n    });\n\n    return ko;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/ko.js?");

/***/ }),

/***/ "./node_modules/moment/locale/ky.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/ky.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var suffixes = {\n        0: '-чү',\n        1: '-чи',\n        2: '-чи',\n        3: '-чү',\n        4: '-чү',\n        5: '-чи',\n        6: '-чы',\n        7: '-чи',\n        8: '-чи',\n        9: '-чу',\n        10: '-чу',\n        20: '-чы',\n        30: '-чу',\n        40: '-чы',\n        50: '-чү',\n        60: '-чы',\n        70: '-чи',\n        80: '-чи',\n        90: '-чу',\n        100: '-чү'\n    };\n\n    var ky = moment.defineLocale('ky', {\n        months : 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split('_'),\n        monthsShort : 'янв_фев_март_апр_май_июнь_июль_авг_сен_окт_ноя_дек'.split('_'),\n        weekdays : 'Жекшемби_Дүйшөмбү_Шейшемби_Шаршемби_Бейшемби_Жума_Ишемби'.split('_'),\n        weekdaysShort : 'Жек_Дүй_Шей_Шар_Бей_Жум_Ише'.split('_'),\n        weekdaysMin : 'Жк_Дй_Шй_Шр_Бй_Жм_Иш'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[Бүгүн саат] LT',\n            nextDay : '[Эртең саат] LT',\n            nextWeek : 'dddd [саат] LT',\n            lastDay : '[Кече саат] LT',\n            lastWeek : '[Өткен аптанын] dddd [күнү] [саат] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s ичинде',\n            past : '%s мурун',\n            s : 'бирнече секунд',\n            ss : '%d секунд',\n            m : 'бир мүнөт',\n            mm : '%d мүнөт',\n            h : 'бир саат',\n            hh : '%d саат',\n            d : 'бир күн',\n            dd : '%d күн',\n            M : 'бир ай',\n            MM : '%d ай',\n            y : 'бир жыл',\n            yy : '%d жыл'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(чи|чы|чү|чу)/,\n        ordinal : function (number) {\n            var a = number % 10,\n                b = number >= 100 ? 100 : null;\n            return number + (suffixes[number] || suffixes[a] || suffixes[b]);\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return ky;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/ky.js?");

/***/ }),

/***/ "./node_modules/moment/locale/lb.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/lb.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            'm': ['eng Minutt', 'enger Minutt'],\n            'h': ['eng Stonn', 'enger Stonn'],\n            'd': ['een Dag', 'engem Dag'],\n            'M': ['ee Mount', 'engem Mount'],\n            'y': ['ee Joer', 'engem Joer']\n        };\n        return withoutSuffix ? format[key][0] : format[key][1];\n    }\n    function processFutureTime(string) {\n        var number = string.substr(0, string.indexOf(' '));\n        if (eifelerRegelAppliesToNumber(number)) {\n            return 'a ' + string;\n        }\n        return 'an ' + string;\n    }\n    function processPastTime(string) {\n        var number = string.substr(0, string.indexOf(' '));\n        if (eifelerRegelAppliesToNumber(number)) {\n            return 'viru ' + string;\n        }\n        return 'virun ' + string;\n    }\n    /**\n     * Returns true if the word before the given number loses the '-n' ending.\n     * e.g. 'an 10 Deeg' but 'a 5 Deeg'\n     *\n     * @param number {integer}\n     * @returns {boolean}\n     */\n    function eifelerRegelAppliesToNumber(number) {\n        number = parseInt(number, 10);\n        if (isNaN(number)) {\n            return false;\n        }\n        if (number < 0) {\n            // Negative Number --> always true\n            return true;\n        } else if (number < 10) {\n            // Only 1 digit\n            if (4 <= number && number <= 7) {\n                return true;\n            }\n            return false;\n        } else if (number < 100) {\n            // 2 digits\n            var lastDigit = number % 10, firstDigit = number / 10;\n            if (lastDigit === 0) {\n                return eifelerRegelAppliesToNumber(firstDigit);\n            }\n            return eifelerRegelAppliesToNumber(lastDigit);\n        } else if (number < 10000) {\n            // 3 or 4 digits --> recursively check first digit\n            while (number >= 10) {\n                number = number / 10;\n            }\n            return eifelerRegelAppliesToNumber(number);\n        } else {\n            // Anything larger than 4 digits: recursively check first n-3 digits\n            number = number / 1000;\n            return eifelerRegelAppliesToNumber(number);\n        }\n    }\n\n    var lb = moment.defineLocale('lb', {\n        months: 'Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),\n        monthsShort: 'Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split('_'),\n        monthsParseExact : true,\n        weekdays: 'Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg'.split('_'),\n        weekdaysShort: 'So._Mé._Dë._Më._Do._Fr._Sa.'.split('_'),\n        weekdaysMin: 'So_Mé_Dë_Më_Do_Fr_Sa'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat: {\n            LT: 'H:mm [Auer]',\n            LTS: 'H:mm:ss [Auer]',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY H:mm [Auer]',\n            LLLL: 'dddd, D. MMMM YYYY H:mm [Auer]'\n        },\n        calendar: {\n            sameDay: '[Haut um] LT',\n            sameElse: 'L',\n            nextDay: '[Muer um] LT',\n            nextWeek: 'dddd [um] LT',\n            lastDay: '[Gëschter um] LT',\n            lastWeek: function () {\n                // Different date string for 'Dënschdeg' (Tuesday) and 'Donneschdeg' (Thursday) due to phonological rule\n                switch (this.day()) {\n                    case 2:\n                    case 4:\n                        return '[Leschten] dddd [um] LT';\n                    default:\n                        return '[Leschte] dddd [um] LT';\n                }\n            }\n        },\n        relativeTime : {\n            future : processFutureTime,\n            past : processPastTime,\n            s : 'e puer Sekonnen',\n            ss : '%d Sekonnen',\n            m : processRelativeTime,\n            mm : '%d Minutten',\n            h : processRelativeTime,\n            hh : '%d Stonnen',\n            d : processRelativeTime,\n            dd : '%d Deeg',\n            M : processRelativeTime,\n            MM : '%d Méint',\n            y : processRelativeTime,\n            yy : '%d Joer'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return lb;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/lb.js?");

/***/ }),

/***/ "./node_modules/moment/locale/lo.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/lo.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var lo = moment.defineLocale('lo', {\n        months : 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split('_'),\n        monthsShort : 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split('_'),\n        weekdays : 'ອາທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'),\n        weekdaysShort : 'ທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'),\n        weekdaysMin : 'ທ_ຈ_ອຄ_ພ_ພຫ_ສກ_ສ'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'ວັນdddd D MMMM YYYY HH:mm'\n        },\n        meridiemParse: /ຕອນເຊົ້າ|ຕອນແລງ/,\n        isPM: function (input) {\n            return input === 'ຕອນແລງ';\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ຕອນເຊົ້າ';\n            } else {\n                return 'ຕອນແລງ';\n            }\n        },\n        calendar : {\n            sameDay : '[ມື້ນີ້ເວລາ] LT',\n            nextDay : '[ມື້ອື່ນເວລາ] LT',\n            nextWeek : '[ວັນ]dddd[ໜ້າເວລາ] LT',\n            lastDay : '[ມື້ວານນີ້ເວລາ] LT',\n            lastWeek : '[ວັນ]dddd[ແລ້ວນີ້ເວລາ] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'ອີກ %s',\n            past : '%sຜ່ານມາ',\n            s : 'ບໍ່ເທົ່າໃດວິນາທີ',\n            ss : '%d ວິນາທີ' ,\n            m : '1 ນາທີ',\n            mm : '%d ນາທີ',\n            h : '1 ຊົ່ວໂມງ',\n            hh : '%d ຊົ່ວໂມງ',\n            d : '1 ມື້',\n            dd : '%d ມື້',\n            M : '1 ເດືອນ',\n            MM : '%d ເດືອນ',\n            y : '1 ປີ',\n            yy : '%d ປີ'\n        },\n        dayOfMonthOrdinalParse: /(ທີ່)\\d{1,2}/,\n        ordinal : function (number) {\n            return 'ທີ່' + number;\n        }\n    });\n\n    return lo;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/lo.js?");

/***/ }),

/***/ "./node_modules/moment/locale/lt.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/lt.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var units = {\n        'ss' : 'sekundė_sekundžių_sekundes',\n        'm' : 'minutė_minutės_minutę',\n        'mm': 'minutės_minučių_minutes',\n        'h' : 'valanda_valandos_valandą',\n        'hh': 'valandos_valandų_valandas',\n        'd' : 'diena_dienos_dieną',\n        'dd': 'dienos_dienų_dienas',\n        'M' : 'mėnuo_mėnesio_mėnesį',\n        'MM': 'mėnesiai_mėnesių_mėnesius',\n        'y' : 'metai_metų_metus',\n        'yy': 'metai_metų_metus'\n    };\n    function translateSeconds(number, withoutSuffix, key, isFuture) {\n        if (withoutSuffix) {\n            return 'kelios sekundės';\n        } else {\n            return isFuture ? 'kelių sekundžių' : 'kelias sekundes';\n        }\n    }\n    function translateSingular(number, withoutSuffix, key, isFuture) {\n        return withoutSuffix ? forms(key)[0] : (isFuture ? forms(key)[1] : forms(key)[2]);\n    }\n    function special(number) {\n        return number % 10 === 0 || (number > 10 && number < 20);\n    }\n    function forms(key) {\n        return units[key].split('_');\n    }\n    function translate(number, withoutSuffix, key, isFuture) {\n        var result = number + ' ';\n        if (number === 1) {\n            return result + translateSingular(number, withoutSuffix, key[0], isFuture);\n        } else if (withoutSuffix) {\n            return result + (special(number) ? forms(key)[1] : forms(key)[0]);\n        } else {\n            if (isFuture) {\n                return result + forms(key)[1];\n            } else {\n                return result + (special(number) ? forms(key)[1] : forms(key)[2]);\n            }\n        }\n    }\n    var lt = moment.defineLocale('lt', {\n        months : {\n            format: 'sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio'.split('_'),\n            standalone: 'sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis'.split('_'),\n            isFormat: /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?|MMMM?(\\[[^\\[\\]]*\\]|\\s)+D[oD]?/\n        },\n        monthsShort : 'sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd'.split('_'),\n        weekdays : {\n            format: 'sekmadienį_pirmadienį_antradienį_trečiadienį_ketvirtadienį_penktadienį_šeštadienį'.split('_'),\n            standalone: 'sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis'.split('_'),\n            isFormat: /dddd HH:mm/\n        },\n        weekdaysShort : 'Sek_Pir_Ant_Tre_Ket_Pen_Šeš'.split('_'),\n        weekdaysMin : 'S_P_A_T_K_Pn_Š'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'YYYY-MM-DD',\n            LL : 'YYYY [m.] MMMM D [d.]',\n            LLL : 'YYYY [m.] MMMM D [d.], HH:mm [val.]',\n            LLLL : 'YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]',\n            l : 'YYYY-MM-DD',\n            ll : 'YYYY [m.] MMMM D [d.]',\n            lll : 'YYYY [m.] MMMM D [d.], HH:mm [val.]',\n            llll : 'YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]'\n        },\n        calendar : {\n            sameDay : '[Šiandien] LT',\n            nextDay : '[Rytoj] LT',\n            nextWeek : 'dddd LT',\n            lastDay : '[Vakar] LT',\n            lastWeek : '[Praėjusį] dddd LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'po %s',\n            past : 'prieš %s',\n            s : translateSeconds,\n            ss : translate,\n            m : translateSingular,\n            mm : translate,\n            h : translateSingular,\n            hh : translate,\n            d : translateSingular,\n            dd : translate,\n            M : translateSingular,\n            MM : translate,\n            y : translateSingular,\n            yy : translate\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-oji/,\n        ordinal : function (number) {\n            return number + '-oji';\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return lt;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/lt.js?");

/***/ }),

/***/ "./node_modules/moment/locale/lv.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/lv.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var units = {\n        'ss': 'sekundes_sekundēm_sekunde_sekundes'.split('_'),\n        'm': 'minūtes_minūtēm_minūte_minūtes'.split('_'),\n        'mm': 'minūtes_minūtēm_minūte_minūtes'.split('_'),\n        'h': 'stundas_stundām_stunda_stundas'.split('_'),\n        'hh': 'stundas_stundām_stunda_stundas'.split('_'),\n        'd': 'dienas_dienām_diena_dienas'.split('_'),\n        'dd': 'dienas_dienām_diena_dienas'.split('_'),\n        'M': 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'),\n        'MM': 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'),\n        'y': 'gada_gadiem_gads_gadi'.split('_'),\n        'yy': 'gada_gadiem_gads_gadi'.split('_')\n    };\n    /**\n     * @param withoutSuffix boolean true = a length of time; false = before/after a period of time.\n     */\n    function format(forms, number, withoutSuffix) {\n        if (withoutSuffix) {\n            // E.g. \"21 minūte\", \"3 minūtes\".\n            return number % 10 === 1 && number % 100 !== 11 ? forms[2] : forms[3];\n        } else {\n            // E.g. \"21 minūtes\" as in \"pēc 21 minūtes\".\n            // E.g. \"3 minūtēm\" as in \"pēc 3 minūtēm\".\n            return number % 10 === 1 && number % 100 !== 11 ? forms[0] : forms[1];\n        }\n    }\n    function relativeTimeWithPlural(number, withoutSuffix, key) {\n        return number + ' ' + format(units[key], number, withoutSuffix);\n    }\n    function relativeTimeWithSingular(number, withoutSuffix, key) {\n        return format(units[key], number, withoutSuffix);\n    }\n    function relativeSeconds(number, withoutSuffix) {\n        return withoutSuffix ? 'dažas sekundes' : 'dažām sekundēm';\n    }\n\n    var lv = moment.defineLocale('lv', {\n        months : 'janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris'.split('_'),\n        monthsShort : 'jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec'.split('_'),\n        weekdays : 'svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena'.split('_'),\n        weekdaysShort : 'Sv_P_O_T_C_Pk_S'.split('_'),\n        weekdaysMin : 'Sv_P_O_T_C_Pk_S'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY.',\n            LL : 'YYYY. [gada] D. MMMM',\n            LLL : 'YYYY. [gada] D. MMMM, HH:mm',\n            LLLL : 'YYYY. [gada] D. MMMM, dddd, HH:mm'\n        },\n        calendar : {\n            sameDay : '[Šodien pulksten] LT',\n            nextDay : '[Rīt pulksten] LT',\n            nextWeek : 'dddd [pulksten] LT',\n            lastDay : '[Vakar pulksten] LT',\n            lastWeek : '[Pagājušā] dddd [pulksten] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'pēc %s',\n            past : 'pirms %s',\n            s : relativeSeconds,\n            ss : relativeTimeWithPlural,\n            m : relativeTimeWithSingular,\n            mm : relativeTimeWithPlural,\n            h : relativeTimeWithSingular,\n            hh : relativeTimeWithPlural,\n            d : relativeTimeWithSingular,\n            dd : relativeTimeWithPlural,\n            M : relativeTimeWithSingular,\n            MM : relativeTimeWithPlural,\n            y : relativeTimeWithSingular,\n            yy : relativeTimeWithPlural\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return lv;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/lv.js?");

/***/ }),

/***/ "./node_modules/moment/locale/me.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/me.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var translator = {\n        words: { //Different grammatical cases\n            ss: ['sekund', 'sekunda', 'sekundi'],\n            m: ['jedan minut', 'jednog minuta'],\n            mm: ['minut', 'minuta', 'minuta'],\n            h: ['jedan sat', 'jednog sata'],\n            hh: ['sat', 'sata', 'sati'],\n            dd: ['dan', 'dana', 'dana'],\n            MM: ['mjesec', 'mjeseca', 'mjeseci'],\n            yy: ['godina', 'godine', 'godina']\n        },\n        correctGrammaticalCase: function (number, wordKey) {\n            return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]);\n        },\n        translate: function (number, withoutSuffix, key) {\n            var wordKey = translator.words[key];\n            if (key.length === 1) {\n                return withoutSuffix ? wordKey[0] : wordKey[1];\n            } else {\n                return number + ' ' + translator.correctGrammaticalCase(number, wordKey);\n            }\n        }\n    };\n\n    var me = moment.defineLocale('me', {\n        months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split('_'),\n        monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'),\n        monthsParseExact : true,\n        weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'),\n        weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),\n        weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS : 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY H:mm',\n            LLLL: 'dddd, D. MMMM YYYY H:mm'\n        },\n        calendar: {\n            sameDay: '[danas u] LT',\n            nextDay: '[sjutra u] LT',\n\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[u] [nedjelju] [u] LT';\n                    case 3:\n                        return '[u] [srijedu] [u] LT';\n                    case 6:\n                        return '[u] [subotu] [u] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[u] dddd [u] LT';\n                }\n            },\n            lastDay  : '[juče u] LT',\n            lastWeek : function () {\n                var lastWeekDays = [\n                    '[prošle] [nedjelje] [u] LT',\n                    '[prošlog] [ponedjeljka] [u] LT',\n                    '[prošlog] [utorka] [u] LT',\n                    '[prošle] [srijede] [u] LT',\n                    '[prošlog] [četvrtka] [u] LT',\n                    '[prošlog] [petka] [u] LT',\n                    '[prošle] [subote] [u] LT'\n                ];\n                return lastWeekDays[this.day()];\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'za %s',\n            past   : 'prije %s',\n            s      : 'nekoliko sekundi',\n            ss     : translator.translate,\n            m      : translator.translate,\n            mm     : translator.translate,\n            h      : translator.translate,\n            hh     : translator.translate,\n            d      : 'dan',\n            dd     : translator.translate,\n            M      : 'mjesec',\n            MM     : translator.translate,\n            y      : 'godinu',\n            yy     : translator.translate\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return me;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/me.js?");

/***/ }),

/***/ "./node_modules/moment/locale/mi.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/mi.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var mi = moment.defineLocale('mi', {\n        months: 'Kohi-tāte_Hui-tanguru_Poutū-te-rangi_Paenga-whāwhā_Haratua_Pipiri_Hōngoingoi_Here-turi-kōkā_Mahuru_Whiringa-ā-nuku_Whiringa-ā-rangi_Hakihea'.split('_'),\n        monthsShort: 'Kohi_Hui_Pou_Pae_Hara_Pipi_Hōngoi_Here_Mahu_Whi-nu_Whi-ra_Haki'.split('_'),\n        monthsRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,3}/i,\n        monthsStrictRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,3}/i,\n        monthsShortRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,3}/i,\n        monthsShortStrictRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,2}/i,\n        weekdays: 'Rātapu_Mane_Tūrei_Wenerei_Tāite_Paraire_Hātarei'.split('_'),\n        weekdaysShort: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'),\n        weekdaysMin: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY [i] HH:mm',\n            LLLL: 'dddd, D MMMM YYYY [i] HH:mm'\n        },\n        calendar: {\n            sameDay: '[i teie mahana, i] LT',\n            nextDay: '[apopo i] LT',\n            nextWeek: 'dddd [i] LT',\n            lastDay: '[inanahi i] LT',\n            lastWeek: 'dddd [whakamutunga i] LT',\n            sameElse: 'L'\n        },\n        relativeTime: {\n            future: 'i roto i %s',\n            past: '%s i mua',\n            s: 'te hēkona ruarua',\n            ss: '%d hēkona',\n            m: 'he meneti',\n            mm: '%d meneti',\n            h: 'te haora',\n            hh: '%d haora',\n            d: 'he ra',\n            dd: '%d ra',\n            M: 'he marama',\n            MM: '%d marama',\n            y: 'he tau',\n            yy: '%d tau'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return mi;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/mi.js?");

/***/ }),

/***/ "./node_modules/moment/locale/mk.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/mk.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var mk = moment.defineLocale('mk', {\n        months : 'јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември'.split('_'),\n        monthsShort : 'јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек'.split('_'),\n        weekdays : 'недела_понеделник_вторник_среда_четврток_петок_сабота'.split('_'),\n        weekdaysShort : 'нед_пон_вто_сре_чет_пет_саб'.split('_'),\n        weekdaysMin : 'нe_пo_вт_ср_че_пе_сa'.split('_'),\n        longDateFormat : {\n            LT : 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'D.MM.YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY H:mm',\n            LLLL : 'dddd, D MMMM YYYY H:mm'\n        },\n        calendar : {\n            sameDay : '[Денес во] LT',\n            nextDay : '[Утре во] LT',\n            nextWeek : '[Во] dddd [во] LT',\n            lastDay : '[Вчера во] LT',\n            lastWeek : function () {\n                switch (this.day()) {\n                    case 0:\n                    case 3:\n                    case 6:\n                        return '[Изминатата] dddd [во] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[Изминатиот] dddd [во] LT';\n                }\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'после %s',\n            past : 'пред %s',\n            s : 'неколку секунди',\n            ss : '%d секунди',\n            m : 'минута',\n            mm : '%d минути',\n            h : 'час',\n            hh : '%d часа',\n            d : 'ден',\n            dd : '%d дена',\n            M : 'месец',\n            MM : '%d месеци',\n            y : 'година',\n            yy : '%d години'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(ев|ен|ти|ви|ри|ми)/,\n        ordinal : function (number) {\n            var lastDigit = number % 10,\n                last2Digits = number % 100;\n            if (number === 0) {\n                return number + '-ев';\n            } else if (last2Digits === 0) {\n                return number + '-ен';\n            } else if (last2Digits > 10 && last2Digits < 20) {\n                return number + '-ти';\n            } else if (lastDigit === 1) {\n                return number + '-ви';\n            } else if (lastDigit === 2) {\n                return number + '-ри';\n            } else if (lastDigit === 7 || lastDigit === 8) {\n                return number + '-ми';\n            } else {\n                return number + '-ти';\n            }\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return mk;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/mk.js?");

/***/ }),

/***/ "./node_modules/moment/locale/ml.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/ml.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var ml = moment.defineLocale('ml', {\n        months : 'ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ'.split('_'),\n        monthsShort : 'ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച'.split('_'),\n        weekdaysShort : 'ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി'.split('_'),\n        weekdaysMin : 'ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ'.split('_'),\n        longDateFormat : {\n            LT : 'A h:mm -നു',\n            LTS : 'A h:mm:ss -നു',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY, A h:mm -നു',\n            LLLL : 'dddd, D MMMM YYYY, A h:mm -നു'\n        },\n        calendar : {\n            sameDay : '[ഇന്ന്] LT',\n            nextDay : '[നാളെ] LT',\n            nextWeek : 'dddd, LT',\n            lastDay : '[ഇന്നലെ] LT',\n            lastWeek : '[കഴിഞ്ഞ] dddd, LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s കഴിഞ്ഞ്',\n            past : '%s മുൻപ്',\n            s : 'അൽപ നിമിഷങ്ങൾ',\n            ss : '%d സെക്കൻഡ്',\n            m : 'ഒരു മിനിറ്റ്',\n            mm : '%d മിനിറ്റ്',\n            h : 'ഒരു മണിക്കൂർ',\n            hh : '%d മണിക്കൂർ',\n            d : 'ഒരു ദിവസം',\n            dd : '%d ദിവസം',\n            M : 'ഒരു മാസം',\n            MM : '%d മാസം',\n            y : 'ഒരു വർഷം',\n            yy : '%d വർഷം'\n        },\n        meridiemParse: /രാത്രി|രാവിലെ|ഉച്ച കഴിഞ്ഞ്|വൈകുന്നേരം|രാത്രി/i,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if ((meridiem === 'രാത്രി' && hour >= 4) ||\n                    meridiem === 'ഉച്ച കഴിഞ്ഞ്' ||\n                    meridiem === 'വൈകുന്നേരം') {\n                return hour + 12;\n            } else {\n                return hour;\n            }\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'രാത്രി';\n            } else if (hour < 12) {\n                return 'രാവിലെ';\n            } else if (hour < 17) {\n                return 'ഉച്ച കഴിഞ്ഞ്';\n            } else if (hour < 20) {\n                return 'വൈകുന്നേരം';\n            } else {\n                return 'രാത്രി';\n            }\n        }\n    });\n\n    return ml;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/ml.js?");

/***/ }),

/***/ "./node_modules/moment/locale/mn.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/mn.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    function translate(number, withoutSuffix, key, isFuture) {\n        switch (key) {\n            case 's':\n                return withoutSuffix ? 'хэдхэн секунд' : 'хэдхэн секундын';\n            case 'ss':\n                return number + (withoutSuffix ? ' секунд' : ' секундын');\n            case 'm':\n            case 'mm':\n                return number + (withoutSuffix ? ' минут' : ' минутын');\n            case 'h':\n            case 'hh':\n                return number + (withoutSuffix ? ' цаг' : ' цагийн');\n            case 'd':\n            case 'dd':\n                return number + (withoutSuffix ? ' өдөр' : ' өдрийн');\n            case 'M':\n            case 'MM':\n                return number + (withoutSuffix ? ' сар' : ' сарын');\n            case 'y':\n            case 'yy':\n                return number + (withoutSuffix ? ' жил' : ' жилийн');\n            default:\n                return number;\n        }\n    }\n\n    var mn = moment.defineLocale('mn', {\n        months : 'Нэгдүгээр сар_Хоёрдугаар сар_Гуравдугаар сар_Дөрөвдүгээр сар_Тавдугаар сар_Зургадугаар сар_Долдугаар сар_Наймдугаар сар_Есдүгээр сар_Аравдугаар сар_Арван нэгдүгээр сар_Арван хоёрдугаар сар'.split('_'),\n        monthsShort : '1 сар_2 сар_3 сар_4 сар_5 сар_6 сар_7 сар_8 сар_9 сар_10 сар_11 сар_12 сар'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'Ням_Даваа_Мягмар_Лхагва_Пүрэв_Баасан_Бямба'.split('_'),\n        weekdaysShort : 'Ням_Дав_Мяг_Лха_Пүр_Баа_Бям'.split('_'),\n        weekdaysMin : 'Ня_Да_Мя_Лх_Пү_Ба_Бя'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'YYYY-MM-DD',\n            LL : 'YYYY оны MMMMын D',\n            LLL : 'YYYY оны MMMMын D HH:mm',\n            LLLL : 'dddd, YYYY оны MMMMын D HH:mm'\n        },\n        meridiemParse: /ҮӨ|ҮХ/i,\n        isPM : function (input) {\n            return input === 'ҮХ';\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ҮӨ';\n            } else {\n                return 'ҮХ';\n            }\n        },\n        calendar : {\n            sameDay : '[Өнөөдөр] LT',\n            nextDay : '[Маргааш] LT',\n            nextWeek : '[Ирэх] dddd LT',\n            lastDay : '[Өчигдөр] LT',\n            lastWeek : '[Өнгөрсөн] dddd LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s дараа',\n            past : '%s өмнө',\n            s : translate,\n            ss : translate,\n            m : translate,\n            mm : translate,\n            h : translate,\n            hh : translate,\n            d : translate,\n            dd : translate,\n            M : translate,\n            MM : translate,\n            y : translate,\n            yy : translate\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2} өдөр/,\n        ordinal : function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + ' өдөр';\n                default:\n                    return number;\n            }\n        }\n    });\n\n    return mn;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/mn.js?");

/***/ }),

/***/ "./node_modules/moment/locale/mr.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/mr.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '१',\n        '2': '२',\n        '3': '३',\n        '4': '४',\n        '5': '५',\n        '6': '६',\n        '7': '७',\n        '8': '८',\n        '9': '९',\n        '0': '०'\n    },\n    numberMap = {\n        '१': '1',\n        '२': '2',\n        '३': '3',\n        '४': '4',\n        '५': '5',\n        '६': '6',\n        '७': '7',\n        '८': '8',\n        '९': '9',\n        '०': '0'\n    };\n\n    function relativeTimeMr(number, withoutSuffix, string, isFuture)\n    {\n        var output = '';\n        if (withoutSuffix) {\n            switch (string) {\n                case 's': output = 'काही सेकंद'; break;\n                case 'ss': output = '%d सेकंद'; break;\n                case 'm': output = 'एक मिनिट'; break;\n                case 'mm': output = '%d मिनिटे'; break;\n                case 'h': output = 'एक तास'; break;\n                case 'hh': output = '%d तास'; break;\n                case 'd': output = 'एक दिवस'; break;\n                case 'dd': output = '%d दिवस'; break;\n                case 'M': output = 'एक महिना'; break;\n                case 'MM': output = '%d महिने'; break;\n                case 'y': output = 'एक वर्ष'; break;\n                case 'yy': output = '%d वर्षे'; break;\n            }\n        }\n        else {\n            switch (string) {\n                case 's': output = 'काही सेकंदां'; break;\n                case 'ss': output = '%d सेकंदां'; break;\n                case 'm': output = 'एका मिनिटा'; break;\n                case 'mm': output = '%d मिनिटां'; break;\n                case 'h': output = 'एका तासा'; break;\n                case 'hh': output = '%d तासां'; break;\n                case 'd': output = 'एका दिवसा'; break;\n                case 'dd': output = '%d दिवसां'; break;\n                case 'M': output = 'एका महिन्या'; break;\n                case 'MM': output = '%d महिन्यां'; break;\n                case 'y': output = 'एका वर्षा'; break;\n                case 'yy': output = '%d वर्षां'; break;\n            }\n        }\n        return output.replace(/%d/i, number);\n    }\n\n    var mr = moment.defineLocale('mr', {\n        months : 'जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर'.split('_'),\n        monthsShort: 'जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'),\n        weekdaysShort : 'रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि'.split('_'),\n        weekdaysMin : 'र_सो_मं_बु_गु_शु_श'.split('_'),\n        longDateFormat : {\n            LT : 'A h:mm वाजता',\n            LTS : 'A h:mm:ss वाजता',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY, A h:mm वाजता',\n            LLLL : 'dddd, D MMMM YYYY, A h:mm वाजता'\n        },\n        calendar : {\n            sameDay : '[आज] LT',\n            nextDay : '[उद्या] LT',\n            nextWeek : 'dddd, LT',\n            lastDay : '[काल] LT',\n            lastWeek: '[मागील] dddd, LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future: '%sमध्ये',\n            past: '%sपूर्वी',\n            s: relativeTimeMr,\n            ss: relativeTimeMr,\n            m: relativeTimeMr,\n            mm: relativeTimeMr,\n            h: relativeTimeMr,\n            hh: relativeTimeMr,\n            d: relativeTimeMr,\n            dd: relativeTimeMr,\n            M: relativeTimeMr,\n            MM: relativeTimeMr,\n            y: relativeTimeMr,\n            yy: relativeTimeMr\n        },\n        preparse: function (string) {\n            return string.replace(/[१२३४५६७८९०]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        meridiemParse: /रात्री|सकाळी|दुपारी|सायंकाळी/,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'रात्री') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'सकाळी') {\n                return hour;\n            } else if (meridiem === 'दुपारी') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'सायंकाळी') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'रात्री';\n            } else if (hour < 10) {\n                return 'सकाळी';\n            } else if (hour < 17) {\n                return 'दुपारी';\n            } else if (hour < 20) {\n                return 'सायंकाळी';\n            } else {\n                return 'रात्री';\n            }\n        },\n        week : {\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\n    return mr;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/mr.js?");

/***/ }),

/***/ "./node_modules/moment/locale/ms-my.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/ms-my.js ***!
  \*********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var msMy = moment.defineLocale('ms-my', {\n        months : 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split('_'),\n        monthsShort : 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),\n        weekdays : 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),\n        weekdaysShort : 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),\n        weekdaysMin : 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),\n        longDateFormat : {\n            LT : 'HH.mm',\n            LTS : 'HH.mm.ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY [pukul] HH.mm',\n            LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'\n        },\n        meridiemParse: /pagi|tengahari|petang|malam/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'pagi') {\n                return hour;\n            } else if (meridiem === 'tengahari') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === 'petang' || meridiem === 'malam') {\n                return hour + 12;\n            }\n        },\n        meridiem : function (hours, minutes, isLower) {\n            if (hours < 11) {\n                return 'pagi';\n            } else if (hours < 15) {\n                return 'tengahari';\n            } else if (hours < 19) {\n                return 'petang';\n            } else {\n                return 'malam';\n            }\n        },\n        calendar : {\n            sameDay : '[Hari ini pukul] LT',\n            nextDay : '[Esok pukul] LT',\n            nextWeek : 'dddd [pukul] LT',\n            lastDay : '[Kelmarin pukul] LT',\n            lastWeek : 'dddd [lepas pukul] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'dalam %s',\n            past : '%s yang lepas',\n            s : 'beberapa saat',\n            ss : '%d saat',\n            m : 'seminit',\n            mm : '%d minit',\n            h : 'sejam',\n            hh : '%d jam',\n            d : 'sehari',\n            dd : '%d hari',\n            M : 'sebulan',\n            MM : '%d bulan',\n            y : 'setahun',\n            yy : '%d tahun'\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return msMy;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/ms-my.js?");

/***/ }),

/***/ "./node_modules/moment/locale/ms.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/ms.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var ms = moment.defineLocale('ms', {\n        months : 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split('_'),\n        monthsShort : 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),\n        weekdays : 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),\n        weekdaysShort : 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),\n        weekdaysMin : 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),\n        longDateFormat : {\n            LT : 'HH.mm',\n            LTS : 'HH.mm.ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY [pukul] HH.mm',\n            LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'\n        },\n        meridiemParse: /pagi|tengahari|petang|malam/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'pagi') {\n                return hour;\n            } else if (meridiem === 'tengahari') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === 'petang' || meridiem === 'malam') {\n                return hour + 12;\n            }\n        },\n        meridiem : function (hours, minutes, isLower) {\n            if (hours < 11) {\n                return 'pagi';\n            } else if (hours < 15) {\n                return 'tengahari';\n            } else if (hours < 19) {\n                return 'petang';\n            } else {\n                return 'malam';\n            }\n        },\n        calendar : {\n            sameDay : '[Hari ini pukul] LT',\n            nextDay : '[Esok pukul] LT',\n            nextWeek : 'dddd [pukul] LT',\n            lastDay : '[Kelmarin pukul] LT',\n            lastWeek : 'dddd [lepas pukul] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'dalam %s',\n            past : '%s yang lepas',\n            s : 'beberapa saat',\n            ss : '%d saat',\n            m : 'seminit',\n            mm : '%d minit',\n            h : 'sejam',\n            hh : '%d jam',\n            d : 'sehari',\n            dd : '%d hari',\n            M : 'sebulan',\n            MM : '%d bulan',\n            y : 'setahun',\n            yy : '%d tahun'\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return ms;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/ms.js?");

/***/ }),

/***/ "./node_modules/moment/locale/mt.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/mt.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var mt = moment.defineLocale('mt', {\n        months : 'Jannar_Frar_Marzu_April_Mejju_Ġunju_Lulju_Awwissu_Settembru_Ottubru_Novembru_Diċembru'.split('_'),\n        monthsShort : 'Jan_Fra_Mar_Apr_Mej_Ġun_Lul_Aww_Set_Ott_Nov_Diċ'.split('_'),\n        weekdays : 'Il-Ħadd_It-Tnejn_It-Tlieta_L-Erbgħa_Il-Ħamis_Il-Ġimgħa_Is-Sibt'.split('_'),\n        weekdaysShort : 'Ħad_Tne_Tli_Erb_Ħam_Ġim_Sib'.split('_'),\n        weekdaysMin : 'Ħa_Tn_Tl_Er_Ħa_Ġi_Si'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[Illum fil-]LT',\n            nextDay : '[Għada fil-]LT',\n            nextWeek : 'dddd [fil-]LT',\n            lastDay : '[Il-bieraħ fil-]LT',\n            lastWeek : 'dddd [li għadda] [fil-]LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'f’ %s',\n            past : '%s ilu',\n            s : 'ftit sekondi',\n            ss : '%d sekondi',\n            m : 'minuta',\n            mm : '%d minuti',\n            h : 'siegħa',\n            hh : '%d siegħat',\n            d : 'ġurnata',\n            dd : '%d ġranet',\n            M : 'xahar',\n            MM : '%d xhur',\n            y : 'sena',\n            yy : '%d sni'\n        },\n        dayOfMonthOrdinalParse : /\\d{1,2}º/,\n        ordinal: '%dº',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return mt;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/mt.js?");

/***/ }),

/***/ "./node_modules/moment/locale/my.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/my.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '၁',\n        '2': '၂',\n        '3': '၃',\n        '4': '၄',\n        '5': '၅',\n        '6': '၆',\n        '7': '၇',\n        '8': '၈',\n        '9': '၉',\n        '0': '၀'\n    }, numberMap = {\n        '၁': '1',\n        '၂': '2',\n        '၃': '3',\n        '၄': '4',\n        '၅': '5',\n        '၆': '6',\n        '၇': '7',\n        '၈': '8',\n        '၉': '9',\n        '၀': '0'\n    };\n\n    var my = moment.defineLocale('my', {\n        months: 'ဇန်နဝါရီ_ဖေဖော်ဝါရီ_မတ်_ဧပြီ_မေ_ဇွန်_ဇူလိုင်_သြဂုတ်_စက်တင်ဘာ_အောက်တိုဘာ_နိုဝင်ဘာ_ဒီဇင်ဘာ'.split('_'),\n        monthsShort: 'ဇန်_ဖေ_မတ်_ပြီ_မေ_ဇွန်_လိုင်_သြ_စက်_အောက်_နို_ဒီ'.split('_'),\n        weekdays: 'တနင်္ဂနွေ_တနင်္လာ_အင်္ဂါ_ဗုဒ္ဓဟူး_ကြာသပတေး_သောကြာ_စနေ'.split('_'),\n        weekdaysShort: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'),\n        weekdaysMin: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'),\n\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar: {\n            sameDay: '[ယနေ.] LT [မှာ]',\n            nextDay: '[မနက်ဖြန်] LT [မှာ]',\n            nextWeek: 'dddd LT [မှာ]',\n            lastDay: '[မနေ.က] LT [မှာ]',\n            lastWeek: '[ပြီးခဲ့သော] dddd LT [မှာ]',\n            sameElse: 'L'\n        },\n        relativeTime: {\n            future: 'လာမည့် %s မှာ',\n            past: 'လွန်ခဲ့သော %s က',\n            s: 'စက္ကန်.အနည်းငယ်',\n            ss : '%d စက္ကန့်',\n            m: 'တစ်မိနစ်',\n            mm: '%d မိနစ်',\n            h: 'တစ်နာရီ',\n            hh: '%d နာရီ',\n            d: 'တစ်ရက်',\n            dd: '%d ရက်',\n            M: 'တစ်လ',\n            MM: '%d လ',\n            y: 'တစ်နှစ်',\n            yy: '%d နှစ်'\n        },\n        preparse: function (string) {\n            return string.replace(/[၁၂၃၄၅၆၇၈၉၀]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4 // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return my;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/my.js?");

/***/ }),

/***/ "./node_modules/moment/locale/nb.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/nb.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var nb = moment.defineLocale('nb', {\n        months : 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split('_'),\n        monthsShort : 'jan._feb._mars_april_mai_juni_juli_aug._sep._okt._nov._des.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),\n        weekdaysShort : 'sø._ma._ti._on._to._fr._lø.'.split('_'),\n        weekdaysMin : 'sø_ma_ti_on_to_fr_lø'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D. MMMM YYYY',\n            LLL : 'D. MMMM YYYY [kl.] HH:mm',\n            LLLL : 'dddd D. MMMM YYYY [kl.] HH:mm'\n        },\n        calendar : {\n            sameDay: '[i dag kl.] LT',\n            nextDay: '[i morgen kl.] LT',\n            nextWeek: 'dddd [kl.] LT',\n            lastDay: '[i går kl.] LT',\n            lastWeek: '[forrige] dddd [kl.] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'om %s',\n            past : '%s siden',\n            s : 'noen sekunder',\n            ss : '%d sekunder',\n            m : 'ett minutt',\n            mm : '%d minutter',\n            h : 'en time',\n            hh : '%d timer',\n            d : 'en dag',\n            dd : '%d dager',\n            M : 'en måned',\n            MM : '%d måneder',\n            y : 'ett år',\n            yy : '%d år'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return nb;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/nb.js?");

/***/ }),

/***/ "./node_modules/moment/locale/ne.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/ne.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '१',\n        '2': '२',\n        '3': '३',\n        '4': '४',\n        '5': '५',\n        '6': '६',\n        '7': '७',\n        '8': '८',\n        '9': '९',\n        '0': '०'\n    },\n    numberMap = {\n        '१': '1',\n        '२': '2',\n        '३': '3',\n        '४': '4',\n        '५': '5',\n        '६': '6',\n        '७': '7',\n        '८': '8',\n        '९': '9',\n        '०': '0'\n    };\n\n    var ne = moment.defineLocale('ne', {\n        months : 'जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर'.split('_'),\n        monthsShort : 'जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार'.split('_'),\n        weekdaysShort : 'आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.'.split('_'),\n        weekdaysMin : 'आ._सो._मं._बु._बि._शु._श.'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'Aको h:mm बजे',\n            LTS : 'Aको h:mm:ss बजे',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY, Aको h:mm बजे',\n            LLLL : 'dddd, D MMMM YYYY, Aको h:mm बजे'\n        },\n        preparse: function (string) {\n            return string.replace(/[१२३४५६७८९०]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        meridiemParse: /राति|बिहान|दिउँसो|साँझ/,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'राति') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'बिहान') {\n                return hour;\n            } else if (meridiem === 'दिउँसो') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'साँझ') {\n                return hour + 12;\n            }\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 3) {\n                return 'राति';\n            } else if (hour < 12) {\n                return 'बिहान';\n            } else if (hour < 16) {\n                return 'दिउँसो';\n            } else if (hour < 20) {\n                return 'साँझ';\n            } else {\n                return 'राति';\n            }\n        },\n        calendar : {\n            sameDay : '[आज] LT',\n            nextDay : '[भोलि] LT',\n            nextWeek : '[आउँदो] dddd[,] LT',\n            lastDay : '[हिजो] LT',\n            lastWeek : '[गएको] dddd[,] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%sमा',\n            past : '%s अगाडि',\n            s : 'केही क्षण',\n            ss : '%d सेकेण्ड',\n            m : 'एक मिनेट',\n            mm : '%d मिनेट',\n            h : 'एक घण्टा',\n            hh : '%d घण्टा',\n            d : 'एक दिन',\n            dd : '%d दिन',\n            M : 'एक महिना',\n            MM : '%d महिना',\n            y : 'एक बर्ष',\n            yy : '%d बर्ष'\n        },\n        week : {\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\n    return ne;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/ne.js?");

/***/ }),

/***/ "./node_modules/moment/locale/nl-be.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/nl-be.js ***!
  \*********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var monthsShortWithDots = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_'),\n        monthsShortWithoutDots = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_');\n\n    var monthsParse = [/^jan/i, /^feb/i, /^maart|mrt.?$/i, /^apr/i, /^mei$/i, /^jun[i.]?$/i, /^jul[i.]?$/i, /^aug/i, /^sep/i, /^okt/i, /^nov/i, /^dec/i];\n    var monthsRegex = /^(januari|februari|maart|april|mei|april|ju[nl]i|augustus|september|oktober|november|december|jan\\.?|feb\\.?|mrt\\.?|apr\\.?|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i;\n\n    var nlBe = moment.defineLocale('nl-be', {\n        months : 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split('_'),\n        monthsShort : function (m, format) {\n            if (!m) {\n                return monthsShortWithDots;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShortWithoutDots[m.month()];\n            } else {\n                return monthsShortWithDots[m.month()];\n            }\n        },\n\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        monthsStrictRegex: /^(januari|februari|maart|mei|ju[nl]i|april|augustus|september|oktober|november|december)/i,\n        monthsShortStrictRegex: /^(jan\\.?|feb\\.?|mrt\\.?|apr\\.?|mei|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i,\n\n        monthsParse : monthsParse,\n        longMonthsParse : monthsParse,\n        shortMonthsParse : monthsParse,\n\n        weekdays : 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'),\n        weekdaysShort : 'zo._ma._di._wo._do._vr._za.'.split('_'),\n        weekdaysMin : 'zo_ma_di_wo_do_vr_za'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[vandaag om] LT',\n            nextDay: '[morgen om] LT',\n            nextWeek: 'dddd [om] LT',\n            lastDay: '[gisteren om] LT',\n            lastWeek: '[afgelopen] dddd [om] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'over %s',\n            past : '%s geleden',\n            s : 'een paar seconden',\n            ss : '%d seconden',\n            m : 'één minuut',\n            mm : '%d minuten',\n            h : 'één uur',\n            hh : '%d uur',\n            d : 'één dag',\n            dd : '%d dagen',\n            M : 'één maand',\n            MM : '%d maanden',\n            y : 'één jaar',\n            yy : '%d jaar'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n        ordinal : function (number) {\n            return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de');\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return nlBe;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/nl-be.js?");

/***/ }),

/***/ "./node_modules/moment/locale/nl.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/nl.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var monthsShortWithDots = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_'),\n        monthsShortWithoutDots = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_');\n\n    var monthsParse = [/^jan/i, /^feb/i, /^maart|mrt.?$/i, /^apr/i, /^mei$/i, /^jun[i.]?$/i, /^jul[i.]?$/i, /^aug/i, /^sep/i, /^okt/i, /^nov/i, /^dec/i];\n    var monthsRegex = /^(januari|februari|maart|april|mei|april|ju[nl]i|augustus|september|oktober|november|december|jan\\.?|feb\\.?|mrt\\.?|apr\\.?|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i;\n\n    var nl = moment.defineLocale('nl', {\n        months : 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split('_'),\n        monthsShort : function (m, format) {\n            if (!m) {\n                return monthsShortWithDots;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShortWithoutDots[m.month()];\n            } else {\n                return monthsShortWithDots[m.month()];\n            }\n        },\n\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        monthsStrictRegex: /^(januari|februari|maart|mei|ju[nl]i|april|augustus|september|oktober|november|december)/i,\n        monthsShortStrictRegex: /^(jan\\.?|feb\\.?|mrt\\.?|apr\\.?|mei|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i,\n\n        monthsParse : monthsParse,\n        longMonthsParse : monthsParse,\n        shortMonthsParse : monthsParse,\n\n        weekdays : 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'),\n        weekdaysShort : 'zo._ma._di._wo._do._vr._za.'.split('_'),\n        weekdaysMin : 'zo_ma_di_wo_do_vr_za'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD-MM-YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[vandaag om] LT',\n            nextDay: '[morgen om] LT',\n            nextWeek: 'dddd [om] LT',\n            lastDay: '[gisteren om] LT',\n            lastWeek: '[afgelopen] dddd [om] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'over %s',\n            past : '%s geleden',\n            s : 'een paar seconden',\n            ss : '%d seconden',\n            m : 'één minuut',\n            mm : '%d minuten',\n            h : 'één uur',\n            hh : '%d uur',\n            d : 'één dag',\n            dd : '%d dagen',\n            M : 'één maand',\n            MM : '%d maanden',\n            y : 'één jaar',\n            yy : '%d jaar'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n        ordinal : function (number) {\n            return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de');\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return nl;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/nl.js?");

/***/ }),

/***/ "./node_modules/moment/locale/nn.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/nn.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var nn = moment.defineLocale('nn', {\n        months : 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split('_'),\n        monthsShort : 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'),\n        weekdays : 'sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag'.split('_'),\n        weekdaysShort : 'sun_mån_tys_ons_tor_fre_lau'.split('_'),\n        weekdaysMin : 'su_må_ty_on_to_fr_lø'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D. MMMM YYYY',\n            LLL : 'D. MMMM YYYY [kl.] H:mm',\n            LLLL : 'dddd D. MMMM YYYY [kl.] HH:mm'\n        },\n        calendar : {\n            sameDay: '[I dag klokka] LT',\n            nextDay: '[I morgon klokka] LT',\n            nextWeek: 'dddd [klokka] LT',\n            lastDay: '[I går klokka] LT',\n            lastWeek: '[Føregåande] dddd [klokka] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'om %s',\n            past : '%s sidan',\n            s : 'nokre sekund',\n            ss : '%d sekund',\n            m : 'eit minutt',\n            mm : '%d minutt',\n            h : 'ein time',\n            hh : '%d timar',\n            d : 'ein dag',\n            dd : '%d dagar',\n            M : 'ein månad',\n            MM : '%d månader',\n            y : 'eit år',\n            yy : '%d år'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return nn;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/nn.js?");

/***/ }),

/***/ "./node_modules/moment/locale/pa-in.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/pa-in.js ***!
  \*********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '੧',\n        '2': '੨',\n        '3': '੩',\n        '4': '੪',\n        '5': '੫',\n        '6': '੬',\n        '7': '੭',\n        '8': '੮',\n        '9': '੯',\n        '0': '੦'\n    },\n    numberMap = {\n        '੧': '1',\n        '੨': '2',\n        '੩': '3',\n        '੪': '4',\n        '੫': '5',\n        '੬': '6',\n        '੭': '7',\n        '੮': '8',\n        '੯': '9',\n        '੦': '0'\n    };\n\n    var paIn = moment.defineLocale('pa-in', {\n        // There are months name as per Nanakshahi Calender but they are not used as rigidly in modern Punjabi.\n        months : 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split('_'),\n        monthsShort : 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split('_'),\n        weekdays : 'ਐਤਵਾਰ_ਸੋਮਵਾਰ_ਮੰਗਲਵਾਰ_ਬੁਧਵਾਰ_ਵੀਰਵਾਰ_ਸ਼ੁੱਕਰਵਾਰ_ਸ਼ਨੀਚਰਵਾਰ'.split('_'),\n        weekdaysShort : 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'),\n        weekdaysMin : 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'),\n        longDateFormat : {\n            LT : 'A h:mm ਵਜੇ',\n            LTS : 'A h:mm:ss ਵਜੇ',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY, A h:mm ਵਜੇ',\n            LLLL : 'dddd, D MMMM YYYY, A h:mm ਵਜੇ'\n        },\n        calendar : {\n            sameDay : '[ਅਜ] LT',\n            nextDay : '[ਕਲ] LT',\n            nextWeek : '[ਅਗਲਾ] dddd, LT',\n            lastDay : '[ਕਲ] LT',\n            lastWeek : '[ਪਿਛਲੇ] dddd, LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s ਵਿੱਚ',\n            past : '%s ਪਿਛਲੇ',\n            s : 'ਕੁਝ ਸਕਿੰਟ',\n            ss : '%d ਸਕਿੰਟ',\n            m : 'ਇਕ ਮਿੰਟ',\n            mm : '%d ਮਿੰਟ',\n            h : 'ਇੱਕ ਘੰਟਾ',\n            hh : '%d ਘੰਟੇ',\n            d : 'ਇੱਕ ਦਿਨ',\n            dd : '%d ਦਿਨ',\n            M : 'ਇੱਕ ਮਹੀਨਾ',\n            MM : '%d ਮਹੀਨੇ',\n            y : 'ਇੱਕ ਸਾਲ',\n            yy : '%d ਸਾਲ'\n        },\n        preparse: function (string) {\n            return string.replace(/[੧੨੩੪੫੬੭੮੯੦]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        // Punjabi notation for meridiems are quite fuzzy in practice. While there exists\n        // a rigid notion of a 'Pahar' it is not used as rigidly in modern Punjabi.\n        meridiemParse: /ਰਾਤ|ਸਵੇਰ|ਦੁਪਹਿਰ|ਸ਼ਾਮ/,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'ਰਾਤ') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'ਸਵੇਰ') {\n                return hour;\n            } else if (meridiem === 'ਦੁਪਹਿਰ') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'ਸ਼ਾਮ') {\n                return hour + 12;\n            }\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'ਰਾਤ';\n            } else if (hour < 10) {\n                return 'ਸਵੇਰ';\n            } else if (hour < 17) {\n                return 'ਦੁਪਹਿਰ';\n            } else if (hour < 20) {\n                return 'ਸ਼ਾਮ';\n            } else {\n                return 'ਰਾਤ';\n            }\n        },\n        week : {\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\n    return paIn;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/pa-in.js?");

/***/ }),

/***/ "./node_modules/moment/locale/pl.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/pl.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var monthsNominative = 'styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień'.split('_'),\n        monthsSubjective = 'stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia'.split('_');\n    function plural(n) {\n        return (n % 10 < 5) && (n % 10 > 1) && ((~~(n / 10) % 10) !== 1);\n    }\n    function translate(number, withoutSuffix, key) {\n        var result = number + ' ';\n        switch (key) {\n            case 'ss':\n                return result + (plural(number) ? 'sekundy' : 'sekund');\n            case 'm':\n                return withoutSuffix ? 'minuta' : 'minutę';\n            case 'mm':\n                return result + (plural(number) ? 'minuty' : 'minut');\n            case 'h':\n                return withoutSuffix  ? 'godzina'  : 'godzinę';\n            case 'hh':\n                return result + (plural(number) ? 'godziny' : 'godzin');\n            case 'MM':\n                return result + (plural(number) ? 'miesiące' : 'miesięcy');\n            case 'yy':\n                return result + (plural(number) ? 'lata' : 'lat');\n        }\n    }\n\n    var pl = moment.defineLocale('pl', {\n        months : function (momentToFormat, format) {\n            if (!momentToFormat) {\n                return monthsNominative;\n            } else if (format === '') {\n                // Hack: if format empty we know this is used to generate\n                // RegExp by moment. Give then back both valid forms of months\n                // in RegExp ready format.\n                return '(' + monthsSubjective[momentToFormat.month()] + '|' + monthsNominative[momentToFormat.month()] + ')';\n            } else if (/D MMMM/.test(format)) {\n                return monthsSubjective[momentToFormat.month()];\n            } else {\n                return monthsNominative[momentToFormat.month()];\n            }\n        },\n        monthsShort : 'sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru'.split('_'),\n        weekdays : 'niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota'.split('_'),\n        weekdaysShort : 'ndz_pon_wt_śr_czw_pt_sob'.split('_'),\n        weekdaysMin : 'Nd_Pn_Wt_Śr_Cz_Pt_So'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[Dziś o] LT',\n            nextDay: '[Jutro o] LT',\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[W niedzielę o] LT';\n\n                    case 2:\n                        return '[We wtorek o] LT';\n\n                    case 3:\n                        return '[W środę o] LT';\n\n                    case 6:\n                        return '[W sobotę o] LT';\n\n                    default:\n                        return '[W] dddd [o] LT';\n                }\n            },\n            lastDay: '[Wczoraj o] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[W zeszłą niedzielę o] LT';\n                    case 3:\n                        return '[W zeszłą środę o] LT';\n                    case 6:\n                        return '[W zeszłą sobotę o] LT';\n                    default:\n                        return '[W zeszły] dddd [o] LT';\n                }\n            },\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'za %s',\n            past : '%s temu',\n            s : 'kilka sekund',\n            ss : translate,\n            m : translate,\n            mm : translate,\n            h : translate,\n            hh : translate,\n            d : '1 dzień',\n            dd : '%d dni',\n            M : 'miesiąc',\n            MM : translate,\n            y : 'rok',\n            yy : translate\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return pl;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/pl.js?");

/***/ }),

/***/ "./node_modules/moment/locale/pt-br.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/pt-br.js ***!
  \*********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var ptBr = moment.defineLocale('pt-br', {\n        months : 'janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro'.split('_'),\n        monthsShort : 'jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez'.split('_'),\n        weekdays : 'Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado'.split('_'),\n        weekdaysShort : 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'),\n        weekdaysMin : 'Do_2ª_3ª_4ª_5ª_6ª_Sá'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D [de] MMMM [de] YYYY',\n            LLL : 'D [de] MMMM [de] YYYY [às] HH:mm',\n            LLLL : 'dddd, D [de] MMMM [de] YYYY [às] HH:mm'\n        },\n        calendar : {\n            sameDay: '[Hoje às] LT',\n            nextDay: '[Amanhã às] LT',\n            nextWeek: 'dddd [às] LT',\n            lastDay: '[Ontem às] LT',\n            lastWeek: function () {\n                return (this.day() === 0 || this.day() === 6) ?\n                    '[Último] dddd [às] LT' : // Saturday + Sunday\n                    '[Última] dddd [às] LT'; // Monday - Friday\n            },\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'em %s',\n            past : 'há %s',\n            s : 'poucos segundos',\n            ss : '%d segundos',\n            m : 'um minuto',\n            mm : '%d minutos',\n            h : 'uma hora',\n            hh : '%d horas',\n            d : 'um dia',\n            dd : '%d dias',\n            M : 'um mês',\n            MM : '%d meses',\n            y : 'um ano',\n            yy : '%d anos'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal : '%dº'\n    });\n\n    return ptBr;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/pt-br.js?");

/***/ }),

/***/ "./node_modules/moment/locale/pt.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/pt.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var pt = moment.defineLocale('pt', {\n        months : 'janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro'.split('_'),\n        monthsShort : 'jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez'.split('_'),\n        weekdays : 'Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado'.split('_'),\n        weekdaysShort : 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'),\n        weekdaysMin : 'Do_2ª_3ª_4ª_5ª_6ª_Sá'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D [de] MMMM [de] YYYY',\n            LLL : 'D [de] MMMM [de] YYYY HH:mm',\n            LLLL : 'dddd, D [de] MMMM [de] YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[Hoje às] LT',\n            nextDay: '[Amanhã às] LT',\n            nextWeek: 'dddd [às] LT',\n            lastDay: '[Ontem às] LT',\n            lastWeek: function () {\n                return (this.day() === 0 || this.day() === 6) ?\n                    '[Último] dddd [às] LT' : // Saturday + Sunday\n                    '[Última] dddd [às] LT'; // Monday - Friday\n            },\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'em %s',\n            past : 'há %s',\n            s : 'segundos',\n            ss : '%d segundos',\n            m : 'um minuto',\n            mm : '%d minutos',\n            h : 'uma hora',\n            hh : '%d horas',\n            d : 'um dia',\n            dd : '%d dias',\n            M : 'um mês',\n            MM : '%d meses',\n            y : 'um ano',\n            yy : '%d anos'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal : '%dº',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return pt;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/pt.js?");

/***/ }),

/***/ "./node_modules/moment/locale/ro.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/ro.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    function relativeTimeWithPlural(number, withoutSuffix, key) {\n        var format = {\n                'ss': 'secunde',\n                'mm': 'minute',\n                'hh': 'ore',\n                'dd': 'zile',\n                'MM': 'luni',\n                'yy': 'ani'\n            },\n            separator = ' ';\n        if (number % 100 >= 20 || (number >= 100 && number % 100 === 0)) {\n            separator = ' de ';\n        }\n        return number + separator + format[key];\n    }\n\n    var ro = moment.defineLocale('ro', {\n        months : 'ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie'.split('_'),\n        monthsShort : 'ian._febr._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.'.split('_'),\n        monthsParseExact: true,\n        weekdays : 'duminică_luni_marți_miercuri_joi_vineri_sâmbătă'.split('_'),\n        weekdaysShort : 'Dum_Lun_Mar_Mie_Joi_Vin_Sâm'.split('_'),\n        weekdaysMin : 'Du_Lu_Ma_Mi_Jo_Vi_Sâ'.split('_'),\n        longDateFormat : {\n            LT : 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY H:mm',\n            LLLL : 'dddd, D MMMM YYYY H:mm'\n        },\n        calendar : {\n            sameDay: '[azi la] LT',\n            nextDay: '[mâine la] LT',\n            nextWeek: 'dddd [la] LT',\n            lastDay: '[ieri la] LT',\n            lastWeek: '[fosta] dddd [la] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'peste %s',\n            past : '%s în urmă',\n            s : 'câteva secunde',\n            ss : relativeTimeWithPlural,\n            m : 'un minut',\n            mm : relativeTimeWithPlural,\n            h : 'o oră',\n            hh : relativeTimeWithPlural,\n            d : 'o zi',\n            dd : relativeTimeWithPlural,\n            M : 'o lună',\n            MM : relativeTimeWithPlural,\n            y : 'un an',\n            yy : relativeTimeWithPlural\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return ro;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/ro.js?");

/***/ }),

/***/ "./node_modules/moment/locale/ru.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/ru.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    function plural(word, num) {\n        var forms = word.split('_');\n        return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]);\n    }\n    function relativeTimeWithPlural(number, withoutSuffix, key) {\n        var format = {\n            'ss': withoutSuffix ? 'секунда_секунды_секунд' : 'секунду_секунды_секунд',\n            'mm': withoutSuffix ? 'минута_минуты_минут' : 'минуту_минуты_минут',\n            'hh': 'час_часа_часов',\n            'dd': 'день_дня_дней',\n            'MM': 'месяц_месяца_месяцев',\n            'yy': 'год_года_лет'\n        };\n        if (key === 'm') {\n            return withoutSuffix ? 'минута' : 'минуту';\n        }\n        else {\n            return number + ' ' + plural(format[key], +number);\n        }\n    }\n    var monthsParse = [/^янв/i, /^фев/i, /^мар/i, /^апр/i, /^ма[йя]/i, /^июн/i, /^июл/i, /^авг/i, /^сен/i, /^окт/i, /^ноя/i, /^дек/i];\n\n    // http://new.gramota.ru/spravka/rules/139-prop : § 103\n    // Сокращения месяцев: http://new.gramota.ru/spravka/buro/search-answer?s=242637\n    // CLDR data:          http://www.unicode.org/cldr/charts/28/summary/ru.html#1753\n    var ru = moment.defineLocale('ru', {\n        months : {\n            format: 'января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря'.split('_'),\n            standalone: 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split('_')\n        },\n        monthsShort : {\n            // по CLDR именно \"июл.\" и \"июн.\", но какой смысл менять букву на точку ?\n            format: 'янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.'.split('_'),\n            standalone: 'янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.'.split('_')\n        },\n        weekdays : {\n            standalone: 'воскресенье_понедельник_вторник_среда_четверг_пятница_суббота'.split('_'),\n            format: 'воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу'.split('_'),\n            isFormat: /\\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?\\] ?dddd/\n        },\n        weekdaysShort : 'вс_пн_вт_ср_чт_пт_сб'.split('_'),\n        weekdaysMin : 'вс_пн_вт_ср_чт_пт_сб'.split('_'),\n        monthsParse : monthsParse,\n        longMonthsParse : monthsParse,\n        shortMonthsParse : monthsParse,\n\n        // полные названия с падежами, по три буквы, для некоторых, по 4 буквы, сокращения с точкой и без точки\n        monthsRegex: /^(январ[ья]|янв\\.?|феврал[ья]|февр?\\.?|марта?|мар\\.?|апрел[ья]|апр\\.?|ма[йя]|июн[ья]|июн\\.?|июл[ья]|июл\\.?|августа?|авг\\.?|сентябр[ья]|сент?\\.?|октябр[ья]|окт\\.?|ноябр[ья]|нояб?\\.?|декабр[ья]|дек\\.?)/i,\n\n        // копия предыдущего\n        monthsShortRegex: /^(январ[ья]|янв\\.?|феврал[ья]|февр?\\.?|марта?|мар\\.?|апрел[ья]|апр\\.?|ма[йя]|июн[ья]|июн\\.?|июл[ья]|июл\\.?|августа?|авг\\.?|сентябр[ья]|сент?\\.?|октябр[ья]|окт\\.?|ноябр[ья]|нояб?\\.?|декабр[ья]|дек\\.?)/i,\n\n        // полные названия с падежами\n        monthsStrictRegex: /^(январ[яь]|феврал[яь]|марта?|апрел[яь]|ма[яй]|июн[яь]|июл[яь]|августа?|сентябр[яь]|октябр[яь]|ноябр[яь]|декабр[яь])/i,\n\n        // Выражение, которое соотвествует только сокращённым формам\n        monthsShortStrictRegex: /^(янв\\.|февр?\\.|мар[т.]|апр\\.|ма[яй]|июн[ья.]|июл[ья.]|авг\\.|сент?\\.|окт\\.|нояб?\\.|дек\\.)/i,\n        longDateFormat : {\n            LT : 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY г.',\n            LLL : 'D MMMM YYYY г., H:mm',\n            LLLL : 'dddd, D MMMM YYYY г., H:mm'\n        },\n        calendar : {\n            sameDay: '[Сегодня, в] LT',\n            nextDay: '[Завтра, в] LT',\n            lastDay: '[Вчера, в] LT',\n            nextWeek: function (now) {\n                if (now.week() !== this.week()) {\n                    switch (this.day()) {\n                        case 0:\n                            return '[В следующее] dddd, [в] LT';\n                        case 1:\n                        case 2:\n                        case 4:\n                            return '[В следующий] dddd, [в] LT';\n                        case 3:\n                        case 5:\n                        case 6:\n                            return '[В следующую] dddd, [в] LT';\n                    }\n                } else {\n                    if (this.day() === 2) {\n                        return '[Во] dddd, [в] LT';\n                    } else {\n                        return '[В] dddd, [в] LT';\n                    }\n                }\n            },\n            lastWeek: function (now) {\n                if (now.week() !== this.week()) {\n                    switch (this.day()) {\n                        case 0:\n                            return '[В прошлое] dddd, [в] LT';\n                        case 1:\n                        case 2:\n                        case 4:\n                            return '[В прошлый] dddd, [в] LT';\n                        case 3:\n                        case 5:\n                        case 6:\n                            return '[В прошлую] dddd, [в] LT';\n                    }\n                } else {\n                    if (this.day() === 2) {\n                        return '[Во] dddd, [в] LT';\n                    } else {\n                        return '[В] dddd, [в] LT';\n                    }\n                }\n            },\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'через %s',\n            past : '%s назад',\n            s : 'несколько секунд',\n            ss : relativeTimeWithPlural,\n            m : relativeTimeWithPlural,\n            mm : relativeTimeWithPlural,\n            h : 'час',\n            hh : relativeTimeWithPlural,\n            d : 'день',\n            dd : relativeTimeWithPlural,\n            M : 'месяц',\n            MM : relativeTimeWithPlural,\n            y : 'год',\n            yy : relativeTimeWithPlural\n        },\n        meridiemParse: /ночи|утра|дня|вечера/i,\n        isPM : function (input) {\n            return /^(дня|вечера)$/.test(input);\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'ночи';\n            } else if (hour < 12) {\n                return 'утра';\n            } else if (hour < 17) {\n                return 'дня';\n            } else {\n                return 'вечера';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(й|го|я)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'M':\n                case 'd':\n                case 'DDD':\n                    return number + '-й';\n                case 'D':\n                    return number + '-го';\n                case 'w':\n                case 'W':\n                    return number + '-я';\n                default:\n                    return number;\n            }\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return ru;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/ru.js?");

/***/ }),

/***/ "./node_modules/moment/locale/sd.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/sd.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var months = [\n        'جنوري',\n        'فيبروري',\n        'مارچ',\n        'اپريل',\n        'مئي',\n        'جون',\n        'جولاءِ',\n        'آگسٽ',\n        'سيپٽمبر',\n        'آڪٽوبر',\n        'نومبر',\n        'ڊسمبر'\n    ];\n    var days = [\n        'آچر',\n        'سومر',\n        'اڱارو',\n        'اربع',\n        'خميس',\n        'جمع',\n        'ڇنڇر'\n    ];\n\n    var sd = moment.defineLocale('sd', {\n        months : months,\n        monthsShort : months,\n        weekdays : days,\n        weekdaysShort : days,\n        weekdaysMin : days,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd، D MMMM YYYY HH:mm'\n        },\n        meridiemParse: /صبح|شام/,\n        isPM : function (input) {\n            return 'شام' === input;\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'صبح';\n            }\n            return 'شام';\n        },\n        calendar : {\n            sameDay : '[اڄ] LT',\n            nextDay : '[سڀاڻي] LT',\n            nextWeek : 'dddd [اڳين هفتي تي] LT',\n            lastDay : '[ڪالهه] LT',\n            lastWeek : '[گزريل هفتي] dddd [تي] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s پوء',\n            past : '%s اڳ',\n            s : 'چند سيڪنڊ',\n            ss : '%d سيڪنڊ',\n            m : 'هڪ منٽ',\n            mm : '%d منٽ',\n            h : 'هڪ ڪلاڪ',\n            hh : '%d ڪلاڪ',\n            d : 'هڪ ڏينهن',\n            dd : '%d ڏينهن',\n            M : 'هڪ مهينو',\n            MM : '%d مهينا',\n            y : 'هڪ سال',\n            yy : '%d سال'\n        },\n        preparse: function (string) {\n            return string.replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string.replace(/,/g, '،');\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return sd;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/sd.js?");

/***/ }),

/***/ "./node_modules/moment/locale/se.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/se.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var se = moment.defineLocale('se', {\n        months : 'ođđajagemánnu_guovvamánnu_njukčamánnu_cuoŋománnu_miessemánnu_geassemánnu_suoidnemánnu_borgemánnu_čakčamánnu_golggotmánnu_skábmamánnu_juovlamánnu'.split('_'),\n        monthsShort : 'ođđj_guov_njuk_cuo_mies_geas_suoi_borg_čakč_golg_skáb_juov'.split('_'),\n        weekdays : 'sotnabeaivi_vuossárga_maŋŋebárga_gaskavahkku_duorastat_bearjadat_lávvardat'.split('_'),\n        weekdaysShort : 'sotn_vuos_maŋ_gask_duor_bear_láv'.split('_'),\n        weekdaysMin : 's_v_m_g_d_b_L'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'MMMM D. [b.] YYYY',\n            LLL : 'MMMM D. [b.] YYYY [ti.] HH:mm',\n            LLLL : 'dddd, MMMM D. [b.] YYYY [ti.] HH:mm'\n        },\n        calendar : {\n            sameDay: '[otne ti] LT',\n            nextDay: '[ihttin ti] LT',\n            nextWeek: 'dddd [ti] LT',\n            lastDay: '[ikte ti] LT',\n            lastWeek: '[ovddit] dddd [ti] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : '%s geažes',\n            past : 'maŋit %s',\n            s : 'moadde sekunddat',\n            ss: '%d sekunddat',\n            m : 'okta minuhta',\n            mm : '%d minuhtat',\n            h : 'okta diimmu',\n            hh : '%d diimmut',\n            d : 'okta beaivi',\n            dd : '%d beaivvit',\n            M : 'okta mánnu',\n            MM : '%d mánut',\n            y : 'okta jahki',\n            yy : '%d jagit'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return se;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/se.js?");

/***/ }),

/***/ "./node_modules/moment/locale/si.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/si.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    /*jshint -W100*/\n    var si = moment.defineLocale('si', {\n        months : 'ජනවාරි_පෙබරවාරි_මාර්තු_අප්‍රේල්_මැයි_ජූනි_ජූලි_අගෝස්තු_සැප්තැම්බර්_ඔක්තෝබර්_නොවැම්බර්_දෙසැම්බර්'.split('_'),\n        monthsShort : 'ජන_පෙබ_මාර්_අප්_මැයි_ජූනි_ජූලි_අගෝ_සැප්_ඔක්_නොවැ_දෙසැ'.split('_'),\n        weekdays : 'ඉරිදා_සඳුදා_අඟහරුවාදා_බදාදා_බ්‍රහස්පතින්දා_සිකුරාදා_සෙනසුරාදා'.split('_'),\n        weekdaysShort : 'ඉරි_සඳු_අඟ_බදා_බ්‍රහ_සිකු_සෙන'.split('_'),\n        weekdaysMin : 'ඉ_ස_අ_බ_බ්‍ර_සි_සෙ'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'a h:mm',\n            LTS : 'a h:mm:ss',\n            L : 'YYYY/MM/DD',\n            LL : 'YYYY MMMM D',\n            LLL : 'YYYY MMMM D, a h:mm',\n            LLLL : 'YYYY MMMM D [වැනි] dddd, a h:mm:ss'\n        },\n        calendar : {\n            sameDay : '[අද] LT[ට]',\n            nextDay : '[හෙට] LT[ට]',\n            nextWeek : 'dddd LT[ට]',\n            lastDay : '[ඊයේ] LT[ට]',\n            lastWeek : '[පසුගිය] dddd LT[ට]',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%sකින්',\n            past : '%sකට පෙර',\n            s : 'තත්පර කිහිපය',\n            ss : 'තත්පර %d',\n            m : 'මිනිත්තුව',\n            mm : 'මිනිත්තු %d',\n            h : 'පැය',\n            hh : 'පැය %d',\n            d : 'දිනය',\n            dd : 'දින %d',\n            M : 'මාසය',\n            MM : 'මාස %d',\n            y : 'වසර',\n            yy : 'වසර %d'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2} වැනි/,\n        ordinal : function (number) {\n            return number + ' වැනි';\n        },\n        meridiemParse : /පෙර වරු|පස් වරු|පෙ.ව|ප.ව./,\n        isPM : function (input) {\n            return input === 'ප.ව.' || input === 'පස් වරු';\n        },\n        meridiem : function (hours, minutes, isLower) {\n            if (hours > 11) {\n                return isLower ? 'ප.ව.' : 'පස් වරු';\n            } else {\n                return isLower ? 'පෙ.ව.' : 'පෙර වරු';\n            }\n        }\n    });\n\n    return si;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/si.js?");

/***/ }),

/***/ "./node_modules/moment/locale/sk.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/sk.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var months = 'január_február_marec_apríl_máj_jún_júl_august_september_október_november_december'.split('_'),\n        monthsShort = 'jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec'.split('_');\n    function plural(n) {\n        return (n > 1) && (n < 5);\n    }\n    function translate(number, withoutSuffix, key, isFuture) {\n        var result = number + ' ';\n        switch (key) {\n            case 's':  // a few seconds / in a few seconds / a few seconds ago\n                return (withoutSuffix || isFuture) ? 'pár sekúnd' : 'pár sekundami';\n            case 'ss': // 9 seconds / in 9 seconds / 9 seconds ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'sekundy' : 'sekúnd');\n                } else {\n                    return result + 'sekundami';\n                }\n                break;\n            case 'm':  // a minute / in a minute / a minute ago\n                return withoutSuffix ? 'minúta' : (isFuture ? 'minútu' : 'minútou');\n            case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'minúty' : 'minút');\n                } else {\n                    return result + 'minútami';\n                }\n                break;\n            case 'h':  // an hour / in an hour / an hour ago\n                return withoutSuffix ? 'hodina' : (isFuture ? 'hodinu' : 'hodinou');\n            case 'hh': // 9 hours / in 9 hours / 9 hours ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'hodiny' : 'hodín');\n                } else {\n                    return result + 'hodinami';\n                }\n                break;\n            case 'd':  // a day / in a day / a day ago\n                return (withoutSuffix || isFuture) ? 'deň' : 'dňom';\n            case 'dd': // 9 days / in 9 days / 9 days ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'dni' : 'dní');\n                } else {\n                    return result + 'dňami';\n                }\n                break;\n            case 'M':  // a month / in a month / a month ago\n                return (withoutSuffix || isFuture) ? 'mesiac' : 'mesiacom';\n            case 'MM': // 9 months / in 9 months / 9 months ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'mesiace' : 'mesiacov');\n                } else {\n                    return result + 'mesiacmi';\n                }\n                break;\n            case 'y':  // a year / in a year / a year ago\n                return (withoutSuffix || isFuture) ? 'rok' : 'rokom';\n            case 'yy': // 9 years / in 9 years / 9 years ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'roky' : 'rokov');\n                } else {\n                    return result + 'rokmi';\n                }\n                break;\n        }\n    }\n\n    var sk = moment.defineLocale('sk', {\n        months : months,\n        monthsShort : monthsShort,\n        weekdays : 'nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota'.split('_'),\n        weekdaysShort : 'ne_po_ut_st_št_pi_so'.split('_'),\n        weekdaysMin : 'ne_po_ut_st_št_pi_so'.split('_'),\n        longDateFormat : {\n            LT: 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D. MMMM YYYY',\n            LLL : 'D. MMMM YYYY H:mm',\n            LLLL : 'dddd D. MMMM YYYY H:mm'\n        },\n        calendar : {\n            sameDay: '[dnes o] LT',\n            nextDay: '[zajtra o] LT',\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[v nedeľu o] LT';\n                    case 1:\n                    case 2:\n                        return '[v] dddd [o] LT';\n                    case 3:\n                        return '[v stredu o] LT';\n                    case 4:\n                        return '[vo štvrtok o] LT';\n                    case 5:\n                        return '[v piatok o] LT';\n                    case 6:\n                        return '[v sobotu o] LT';\n                }\n            },\n            lastDay: '[včera o] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[minulú nedeľu o] LT';\n                    case 1:\n                    case 2:\n                        return '[minulý] dddd [o] LT';\n                    case 3:\n                        return '[minulú stredu o] LT';\n                    case 4:\n                    case 5:\n                        return '[minulý] dddd [o] LT';\n                    case 6:\n                        return '[minulú sobotu o] LT';\n                }\n            },\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'za %s',\n            past : 'pred %s',\n            s : translate,\n            ss : translate,\n            m : translate,\n            mm : translate,\n            h : translate,\n            hh : translate,\n            d : translate,\n            dd : translate,\n            M : translate,\n            MM : translate,\n            y : translate,\n            yy : translate\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return sk;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/sk.js?");

/***/ }),

/***/ "./node_modules/moment/locale/sl.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/sl.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var result = number + ' ';\n        switch (key) {\n            case 's':\n                return withoutSuffix || isFuture ? 'nekaj sekund' : 'nekaj sekundami';\n            case 'ss':\n                if (number === 1) {\n                    result += withoutSuffix ? 'sekundo' : 'sekundi';\n                } else if (number === 2) {\n                    result += withoutSuffix || isFuture ? 'sekundi' : 'sekundah';\n                } else if (number < 5) {\n                    result += withoutSuffix || isFuture ? 'sekunde' : 'sekundah';\n                } else {\n                    result += withoutSuffix || isFuture ? 'sekund' : 'sekund';\n                }\n                return result;\n            case 'm':\n                return withoutSuffix ? 'ena minuta' : 'eno minuto';\n            case 'mm':\n                if (number === 1) {\n                    result += withoutSuffix ? 'minuta' : 'minuto';\n                } else if (number === 2) {\n                    result += withoutSuffix || isFuture ? 'minuti' : 'minutama';\n                } else if (number < 5) {\n                    result += withoutSuffix || isFuture ? 'minute' : 'minutami';\n                } else {\n                    result += withoutSuffix || isFuture ? 'minut' : 'minutami';\n                }\n                return result;\n            case 'h':\n                return withoutSuffix ? 'ena ura' : 'eno uro';\n            case 'hh':\n                if (number === 1) {\n                    result += withoutSuffix ? 'ura' : 'uro';\n                } else if (number === 2) {\n                    result += withoutSuffix || isFuture ? 'uri' : 'urama';\n                } else if (number < 5) {\n                    result += withoutSuffix || isFuture ? 'ure' : 'urami';\n                } else {\n                    result += withoutSuffix || isFuture ? 'ur' : 'urami';\n                }\n                return result;\n            case 'd':\n                return withoutSuffix || isFuture ? 'en dan' : 'enim dnem';\n            case 'dd':\n                if (number === 1) {\n                    result += withoutSuffix || isFuture ? 'dan' : 'dnem';\n                } else if (number === 2) {\n                    result += withoutSuffix || isFuture ? 'dni' : 'dnevoma';\n                } else {\n                    result += withoutSuffix || isFuture ? 'dni' : 'dnevi';\n                }\n                return result;\n            case 'M':\n                return withoutSuffix || isFuture ? 'en mesec' : 'enim mesecem';\n            case 'MM':\n                if (number === 1) {\n                    result += withoutSuffix || isFuture ? 'mesec' : 'mesecem';\n                } else if (number === 2) {\n                    result += withoutSuffix || isFuture ? 'meseca' : 'mesecema';\n                } else if (number < 5) {\n                    result += withoutSuffix || isFuture ? 'mesece' : 'meseci';\n                } else {\n                    result += withoutSuffix || isFuture ? 'mesecev' : 'meseci';\n                }\n                return result;\n            case 'y':\n                return withoutSuffix || isFuture ? 'eno leto' : 'enim letom';\n            case 'yy':\n                if (number === 1) {\n                    result += withoutSuffix || isFuture ? 'leto' : 'letom';\n                } else if (number === 2) {\n                    result += withoutSuffix || isFuture ? 'leti' : 'letoma';\n                } else if (number < 5) {\n                    result += withoutSuffix || isFuture ? 'leta' : 'leti';\n                } else {\n                    result += withoutSuffix || isFuture ? 'let' : 'leti';\n                }\n                return result;\n        }\n    }\n\n    var sl = moment.defineLocale('sl', {\n        months : 'januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december'.split('_'),\n        monthsShort : 'jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.'.split('_'),\n        monthsParseExact: true,\n        weekdays : 'nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota'.split('_'),\n        weekdaysShort : 'ned._pon._tor._sre._čet._pet._sob.'.split('_'),\n        weekdaysMin : 'ne_po_to_sr_če_pe_so'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D. MMMM YYYY',\n            LLL : 'D. MMMM YYYY H:mm',\n            LLLL : 'dddd, D. MMMM YYYY H:mm'\n        },\n        calendar : {\n            sameDay  : '[danes ob] LT',\n            nextDay  : '[jutri ob] LT',\n\n            nextWeek : function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[v] [nedeljo] [ob] LT';\n                    case 3:\n                        return '[v] [sredo] [ob] LT';\n                    case 6:\n                        return '[v] [soboto] [ob] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[v] dddd [ob] LT';\n                }\n            },\n            lastDay  : '[včeraj ob] LT',\n            lastWeek : function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[prejšnjo] [nedeljo] [ob] LT';\n                    case 3:\n                        return '[prejšnjo] [sredo] [ob] LT';\n                    case 6:\n                        return '[prejšnjo] [soboto] [ob] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[prejšnji] dddd [ob] LT';\n                }\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'čez %s',\n            past   : 'pred %s',\n            s      : processRelativeTime,\n            ss     : processRelativeTime,\n            m      : processRelativeTime,\n            mm     : processRelativeTime,\n            h      : processRelativeTime,\n            hh     : processRelativeTime,\n            d      : processRelativeTime,\n            dd     : processRelativeTime,\n            M      : processRelativeTime,\n            MM     : processRelativeTime,\n            y      : processRelativeTime,\n            yy     : processRelativeTime\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return sl;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/sl.js?");

/***/ }),

/***/ "./node_modules/moment/locale/sq.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/sq.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var sq = moment.defineLocale('sq', {\n        months : 'Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor'.split('_'),\n        monthsShort : 'Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj'.split('_'),\n        weekdays : 'E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë'.split('_'),\n        weekdaysShort : 'Die_Hën_Mar_Mër_Enj_Pre_Sht'.split('_'),\n        weekdaysMin : 'D_H_Ma_Më_E_P_Sh'.split('_'),\n        weekdaysParseExact : true,\n        meridiemParse: /PD|MD/,\n        isPM: function (input) {\n            return input.charAt(0) === 'M';\n        },\n        meridiem : function (hours, minutes, isLower) {\n            return hours < 12 ? 'PD' : 'MD';\n        },\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[Sot në] LT',\n            nextDay : '[Nesër në] LT',\n            nextWeek : 'dddd [në] LT',\n            lastDay : '[Dje në] LT',\n            lastWeek : 'dddd [e kaluar në] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'në %s',\n            past : '%s më parë',\n            s : 'disa sekonda',\n            ss : '%d sekonda',\n            m : 'një minutë',\n            mm : '%d minuta',\n            h : 'një orë',\n            hh : '%d orë',\n            d : 'një ditë',\n            dd : '%d ditë',\n            M : 'një muaj',\n            MM : '%d muaj',\n            y : 'një vit',\n            yy : '%d vite'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return sq;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/sq.js?");

/***/ }),

/***/ "./node_modules/moment/locale/sr-cyrl.js":
/*!***********************************************!*\
  !*** ./node_modules/moment/locale/sr-cyrl.js ***!
  \***********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var translator = {\n        words: { //Different grammatical cases\n            ss: ['секунда', 'секунде', 'секунди'],\n            m: ['један минут', 'једне минуте'],\n            mm: ['минут', 'минуте', 'минута'],\n            h: ['један сат', 'једног сата'],\n            hh: ['сат', 'сата', 'сати'],\n            dd: ['дан', 'дана', 'дана'],\n            MM: ['месец', 'месеца', 'месеци'],\n            yy: ['година', 'године', 'година']\n        },\n        correctGrammaticalCase: function (number, wordKey) {\n            return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]);\n        },\n        translate: function (number, withoutSuffix, key) {\n            var wordKey = translator.words[key];\n            if (key.length === 1) {\n                return withoutSuffix ? wordKey[0] : wordKey[1];\n            } else {\n                return number + ' ' + translator.correctGrammaticalCase(number, wordKey);\n            }\n        }\n    };\n\n    var srCyrl = moment.defineLocale('sr-cyrl', {\n        months: 'јануар_фебруар_март_април_мај_јун_јул_август_септембар_октобар_новембар_децембар'.split('_'),\n        monthsShort: 'јан._феб._мар._апр._мај_јун_јул_авг._сеп._окт._нов._дец.'.split('_'),\n        monthsParseExact: true,\n        weekdays: 'недеља_понедељак_уторак_среда_четвртак_петак_субота'.split('_'),\n        weekdaysShort: 'нед._пон._уто._сре._чет._пет._суб.'.split('_'),\n        weekdaysMin: 'не_по_ут_ср_че_пе_су'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS : 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY H:mm',\n            LLLL: 'dddd, D. MMMM YYYY H:mm'\n        },\n        calendar: {\n            sameDay: '[данас у] LT',\n            nextDay: '[сутра у] LT',\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[у] [недељу] [у] LT';\n                    case 3:\n                        return '[у] [среду] [у] LT';\n                    case 6:\n                        return '[у] [суботу] [у] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[у] dddd [у] LT';\n                }\n            },\n            lastDay  : '[јуче у] LT',\n            lastWeek : function () {\n                var lastWeekDays = [\n                    '[прошле] [недеље] [у] LT',\n                    '[прошлог] [понедељка] [у] LT',\n                    '[прошлог] [уторка] [у] LT',\n                    '[прошле] [среде] [у] LT',\n                    '[прошлог] [четвртка] [у] LT',\n                    '[прошлог] [петка] [у] LT',\n                    '[прошле] [суботе] [у] LT'\n                ];\n                return lastWeekDays[this.day()];\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'за %s',\n            past   : 'пре %s',\n            s      : 'неколико секунди',\n            ss     : translator.translate,\n            m      : translator.translate,\n            mm     : translator.translate,\n            h      : translator.translate,\n            hh     : translator.translate,\n            d      : 'дан',\n            dd     : translator.translate,\n            M      : 'месец',\n            MM     : translator.translate,\n            y      : 'годину',\n            yy     : translator.translate\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return srCyrl;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/sr-cyrl.js?");

/***/ }),

/***/ "./node_modules/moment/locale/sr.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/sr.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var translator = {\n        words: { //Different grammatical cases\n            ss: ['sekunda', 'sekunde', 'sekundi'],\n            m: ['jedan minut', 'jedne minute'],\n            mm: ['minut', 'minute', 'minuta'],\n            h: ['jedan sat', 'jednog sata'],\n            hh: ['sat', 'sata', 'sati'],\n            dd: ['dan', 'dana', 'dana'],\n            MM: ['mesec', 'meseca', 'meseci'],\n            yy: ['godina', 'godine', 'godina']\n        },\n        correctGrammaticalCase: function (number, wordKey) {\n            return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]);\n        },\n        translate: function (number, withoutSuffix, key) {\n            var wordKey = translator.words[key];\n            if (key.length === 1) {\n                return withoutSuffix ? wordKey[0] : wordKey[1];\n            } else {\n                return number + ' ' + translator.correctGrammaticalCase(number, wordKey);\n            }\n        }\n    };\n\n    var sr = moment.defineLocale('sr', {\n        months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split('_'),\n        monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'),\n        monthsParseExact: true,\n        weekdays: 'nedelja_ponedeljak_utorak_sreda_četvrtak_petak_subota'.split('_'),\n        weekdaysShort: 'ned._pon._uto._sre._čet._pet._sub.'.split('_'),\n        weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS : 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY H:mm',\n            LLLL: 'dddd, D. MMMM YYYY H:mm'\n        },\n        calendar: {\n            sameDay: '[danas u] LT',\n            nextDay: '[sutra u] LT',\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[u] [nedelju] [u] LT';\n                    case 3:\n                        return '[u] [sredu] [u] LT';\n                    case 6:\n                        return '[u] [subotu] [u] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[u] dddd [u] LT';\n                }\n            },\n            lastDay  : '[juče u] LT',\n            lastWeek : function () {\n                var lastWeekDays = [\n                    '[prošle] [nedelje] [u] LT',\n                    '[prošlog] [ponedeljka] [u] LT',\n                    '[prošlog] [utorka] [u] LT',\n                    '[prošle] [srede] [u] LT',\n                    '[prošlog] [četvrtka] [u] LT',\n                    '[prošlog] [petka] [u] LT',\n                    '[prošle] [subote] [u] LT'\n                ];\n                return lastWeekDays[this.day()];\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'za %s',\n            past   : 'pre %s',\n            s      : 'nekoliko sekundi',\n            ss     : translator.translate,\n            m      : translator.translate,\n            mm     : translator.translate,\n            h      : translator.translate,\n            hh     : translator.translate,\n            d      : 'dan',\n            dd     : translator.translate,\n            M      : 'mesec',\n            MM     : translator.translate,\n            y      : 'godinu',\n            yy     : translator.translate\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return sr;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/sr.js?");

/***/ }),

/***/ "./node_modules/moment/locale/ss.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/ss.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var ss = moment.defineLocale('ss', {\n        months : \"Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni\".split('_'),\n        monthsShort : 'Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo'.split('_'),\n        weekdays : 'Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo'.split('_'),\n        weekdaysShort : 'Lis_Umb_Lsb_Les_Lsi_Lsh_Umg'.split('_'),\n        weekdaysMin : 'Li_Us_Lb_Lt_Ls_Lh_Ug'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'h:mm A',\n            LTS : 'h:mm:ss A',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY h:mm A',\n            LLLL : 'dddd, D MMMM YYYY h:mm A'\n        },\n        calendar : {\n            sameDay : '[Namuhla nga] LT',\n            nextDay : '[Kusasa nga] LT',\n            nextWeek : 'dddd [nga] LT',\n            lastDay : '[Itolo nga] LT',\n            lastWeek : 'dddd [leliphelile] [nga] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'nga %s',\n            past : 'wenteka nga %s',\n            s : 'emizuzwana lomcane',\n            ss : '%d mzuzwana',\n            m : 'umzuzu',\n            mm : '%d emizuzu',\n            h : 'lihora',\n            hh : '%d emahora',\n            d : 'lilanga',\n            dd : '%d emalanga',\n            M : 'inyanga',\n            MM : '%d tinyanga',\n            y : 'umnyaka',\n            yy : '%d iminyaka'\n        },\n        meridiemParse: /ekuseni|emini|entsambama|ebusuku/,\n        meridiem : function (hours, minutes, isLower) {\n            if (hours < 11) {\n                return 'ekuseni';\n            } else if (hours < 15) {\n                return 'emini';\n            } else if (hours < 19) {\n                return 'entsambama';\n            } else {\n                return 'ebusuku';\n            }\n        },\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'ekuseni') {\n                return hour;\n            } else if (meridiem === 'emini') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === 'entsambama' || meridiem === 'ebusuku') {\n                if (hour === 0) {\n                    return 0;\n                }\n                return hour + 12;\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}/,\n        ordinal : '%d',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return ss;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/ss.js?");

/***/ }),

/***/ "./node_modules/moment/locale/sv.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/sv.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var sv = moment.defineLocale('sv', {\n        months : 'januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december'.split('_'),\n        monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),\n        weekdays : 'söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag'.split('_'),\n        weekdaysShort : 'sön_mån_tis_ons_tor_fre_lör'.split('_'),\n        weekdaysMin : 'sö_må_ti_on_to_fr_lö'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'YYYY-MM-DD',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY [kl.] HH:mm',\n            LLLL : 'dddd D MMMM YYYY [kl.] HH:mm',\n            lll : 'D MMM YYYY HH:mm',\n            llll : 'ddd D MMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[Idag] LT',\n            nextDay: '[Imorgon] LT',\n            lastDay: '[Igår] LT',\n            nextWeek: '[På] dddd LT',\n            lastWeek: '[I] dddd[s] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'om %s',\n            past : 'för %s sedan',\n            s : 'några sekunder',\n            ss : '%d sekunder',\n            m : 'en minut',\n            mm : '%d minuter',\n            h : 'en timme',\n            hh : '%d timmar',\n            d : 'en dag',\n            dd : '%d dagar',\n            M : 'en månad',\n            MM : '%d månader',\n            y : 'ett år',\n            yy : '%d år'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(e|a)/,\n        ordinal : function (number) {\n            var b = number % 10,\n                output = (~~(number % 100 / 10) === 1) ? 'e' :\n                (b === 1) ? 'a' :\n                (b === 2) ? 'a' :\n                (b === 3) ? 'e' : 'e';\n            return number + output;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return sv;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/sv.js?");

/***/ }),

/***/ "./node_modules/moment/locale/sw.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/sw.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var sw = moment.defineLocale('sw', {\n        months : 'Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba'.split('_'),\n        monthsShort : 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des'.split('_'),\n        weekdays : 'Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi'.split('_'),\n        weekdaysShort : 'Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos'.split('_'),\n        weekdaysMin : 'J2_J3_J4_J5_Al_Ij_J1'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[leo saa] LT',\n            nextDay : '[kesho saa] LT',\n            nextWeek : '[wiki ijayo] dddd [saat] LT',\n            lastDay : '[jana] LT',\n            lastWeek : '[wiki iliyopita] dddd [saat] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s baadaye',\n            past : 'tokea %s',\n            s : 'hivi punde',\n            ss : 'sekunde %d',\n            m : 'dakika moja',\n            mm : 'dakika %d',\n            h : 'saa limoja',\n            hh : 'masaa %d',\n            d : 'siku moja',\n            dd : 'masiku %d',\n            M : 'mwezi mmoja',\n            MM : 'miezi %d',\n            y : 'mwaka mmoja',\n            yy : 'miaka %d'\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return sw;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/sw.js?");

/***/ }),

/***/ "./node_modules/moment/locale/ta.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/ta.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '௧',\n        '2': '௨',\n        '3': '௩',\n        '4': '௪',\n        '5': '௫',\n        '6': '௬',\n        '7': '௭',\n        '8': '௮',\n        '9': '௯',\n        '0': '௦'\n    }, numberMap = {\n        '௧': '1',\n        '௨': '2',\n        '௩': '3',\n        '௪': '4',\n        '௫': '5',\n        '௬': '6',\n        '௭': '7',\n        '௮': '8',\n        '௯': '9',\n        '௦': '0'\n    };\n\n    var ta = moment.defineLocale('ta', {\n        months : 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split('_'),\n        monthsShort : 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split('_'),\n        weekdays : 'ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை'.split('_'),\n        weekdaysShort : 'ஞாயிறு_திங்கள்_செவ்வாய்_புதன்_வியாழன்_வெள்ளி_சனி'.split('_'),\n        weekdaysMin : 'ஞா_தி_செ_பு_வி_வெ_ச'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY, HH:mm',\n            LLLL : 'dddd, D MMMM YYYY, HH:mm'\n        },\n        calendar : {\n            sameDay : '[இன்று] LT',\n            nextDay : '[நாளை] LT',\n            nextWeek : 'dddd, LT',\n            lastDay : '[நேற்று] LT',\n            lastWeek : '[கடந்த வாரம்] dddd, LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s இல்',\n            past : '%s முன்',\n            s : 'ஒரு சில விநாடிகள்',\n            ss : '%d விநாடிகள்',\n            m : 'ஒரு நிமிடம்',\n            mm : '%d நிமிடங்கள்',\n            h : 'ஒரு மணி நேரம்',\n            hh : '%d மணி நேரம்',\n            d : 'ஒரு நாள்',\n            dd : '%d நாட்கள்',\n            M : 'ஒரு மாதம்',\n            MM : '%d மாதங்கள்',\n            y : 'ஒரு வருடம்',\n            yy : '%d ஆண்டுகள்'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}வது/,\n        ordinal : function (number) {\n            return number + 'வது';\n        },\n        preparse: function (string) {\n            return string.replace(/[௧௨௩௪௫௬௭௮௯௦]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        // refer http://ta.wikipedia.org/s/1er1\n        meridiemParse: /யாமம்|வைகறை|காலை|நண்பகல்|எற்பாடு|மாலை/,\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 2) {\n                return ' யாமம்';\n            } else if (hour < 6) {\n                return ' வைகறை';  // வைகறை\n            } else if (hour < 10) {\n                return ' காலை'; // காலை\n            } else if (hour < 14) {\n                return ' நண்பகல்'; // நண்பகல்\n            } else if (hour < 18) {\n                return ' எற்பாடு'; // எற்பாடு\n            } else if (hour < 22) {\n                return ' மாலை'; // மாலை\n            } else {\n                return ' யாமம்';\n            }\n        },\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'யாமம்') {\n                return hour < 2 ? hour : hour + 12;\n            } else if (meridiem === 'வைகறை' || meridiem === 'காலை') {\n                return hour;\n            } else if (meridiem === 'நண்பகல்') {\n                return hour >= 10 ? hour : hour + 12;\n            } else {\n                return hour + 12;\n            }\n        },\n        week : {\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\n    return ta;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/ta.js?");

/***/ }),

/***/ "./node_modules/moment/locale/te.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/te.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var te = moment.defineLocale('te', {\n        months : 'జనవరి_ఫిబ్రవరి_మార్చి_ఏప్రిల్_మే_జూన్_జూలై_ఆగస్టు_సెప్టెంబర్_అక్టోబర్_నవంబర్_డిసెంబర్'.split('_'),\n        monthsShort : 'జన._ఫిబ్ర._మార్చి_ఏప్రి._మే_జూన్_జూలై_ఆగ._సెప్._అక్టో._నవ._డిసె.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'ఆదివారం_సోమవారం_మంగళవారం_బుధవారం_గురువారం_శుక్రవారం_శనివారం'.split('_'),\n        weekdaysShort : 'ఆది_సోమ_మంగళ_బుధ_గురు_శుక్ర_శని'.split('_'),\n        weekdaysMin : 'ఆ_సో_మం_బు_గు_శు_శ'.split('_'),\n        longDateFormat : {\n            LT : 'A h:mm',\n            LTS : 'A h:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY, A h:mm',\n            LLLL : 'dddd, D MMMM YYYY, A h:mm'\n        },\n        calendar : {\n            sameDay : '[నేడు] LT',\n            nextDay : '[రేపు] LT',\n            nextWeek : 'dddd, LT',\n            lastDay : '[నిన్న] LT',\n            lastWeek : '[గత] dddd, LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s లో',\n            past : '%s క్రితం',\n            s : 'కొన్ని క్షణాలు',\n            ss : '%d సెకన్లు',\n            m : 'ఒక నిమిషం',\n            mm : '%d నిమిషాలు',\n            h : 'ఒక గంట',\n            hh : '%d గంటలు',\n            d : 'ఒక రోజు',\n            dd : '%d రోజులు',\n            M : 'ఒక నెల',\n            MM : '%d నెలలు',\n            y : 'ఒక సంవత్సరం',\n            yy : '%d సంవత్సరాలు'\n        },\n        dayOfMonthOrdinalParse : /\\d{1,2}వ/,\n        ordinal : '%dవ',\n        meridiemParse: /రాత్రి|ఉదయం|మధ్యాహ్నం|సాయంత్రం/,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'రాత్రి') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'ఉదయం') {\n                return hour;\n            } else if (meridiem === 'మధ్యాహ్నం') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'సాయంత్రం') {\n                return hour + 12;\n            }\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'రాత్రి';\n            } else if (hour < 10) {\n                return 'ఉదయం';\n            } else if (hour < 17) {\n                return 'మధ్యాహ్నం';\n            } else if (hour < 20) {\n                return 'సాయంత్రం';\n            } else {\n                return 'రాత్రి';\n            }\n        },\n        week : {\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\n    return te;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/te.js?");

/***/ }),

/***/ "./node_modules/moment/locale/tet.js":
/*!*******************************************!*\
  !*** ./node_modules/moment/locale/tet.js ***!
  \*******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var tet = moment.defineLocale('tet', {\n        months : 'Janeiru_Fevereiru_Marsu_Abril_Maiu_Juñu_Jullu_Agustu_Setembru_Outubru_Novembru_Dezembru'.split('_'),\n        monthsShort : 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'),\n        weekdays : 'Domingu_Segunda_Tersa_Kuarta_Kinta_Sesta_Sabadu'.split('_'),\n        weekdaysShort : 'Dom_Seg_Ters_Kua_Kint_Sest_Sab'.split('_'),\n        weekdaysMin : 'Do_Seg_Te_Ku_Ki_Ses_Sa'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[Ohin iha] LT',\n            nextDay: '[Aban iha] LT',\n            nextWeek: 'dddd [iha] LT',\n            lastDay: '[Horiseik iha] LT',\n            lastWeek: 'dddd [semana kotuk] [iha] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'iha %s',\n            past : '%s liuba',\n            s : 'minutu balun',\n            ss : 'minutu %d',\n            m : 'minutu ida',\n            mm : 'minutu %d',\n            h : 'oras ida',\n            hh : 'oras %d',\n            d : 'loron ida',\n            dd : 'loron %d',\n            M : 'fulan ida',\n            MM : 'fulan %d',\n            y : 'tinan ida',\n            yy : 'tinan %d'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal : function (number) {\n            var b = number % 10,\n                output = (~~(number % 100 / 10) === 1) ? 'th' :\n                (b === 1) ? 'st' :\n                (b === 2) ? 'nd' :\n                (b === 3) ? 'rd' : 'th';\n            return number + output;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return tet;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/tet.js?");

/***/ }),

/***/ "./node_modules/moment/locale/tg.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/tg.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var suffixes = {\n        0: '-ум',\n        1: '-ум',\n        2: '-юм',\n        3: '-юм',\n        4: '-ум',\n        5: '-ум',\n        6: '-ум',\n        7: '-ум',\n        8: '-ум',\n        9: '-ум',\n        10: '-ум',\n        12: '-ум',\n        13: '-ум',\n        20: '-ум',\n        30: '-юм',\n        40: '-ум',\n        50: '-ум',\n        60: '-ум',\n        70: '-ум',\n        80: '-ум',\n        90: '-ум',\n        100: '-ум'\n    };\n\n    var tg = moment.defineLocale('tg', {\n        months : 'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split('_'),\n        monthsShort : 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'),\n        weekdays : 'якшанбе_душанбе_сешанбе_чоршанбе_панҷшанбе_ҷумъа_шанбе'.split('_'),\n        weekdaysShort : 'яшб_дшб_сшб_чшб_пшб_ҷум_шнб'.split('_'),\n        weekdaysMin : 'яш_дш_сш_чш_пш_ҷм_шб'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[Имрӯз соати] LT',\n            nextDay : '[Пагоҳ соати] LT',\n            lastDay : '[Дирӯз соати] LT',\n            nextWeek : 'dddd[и] [ҳафтаи оянда соати] LT',\n            lastWeek : 'dddd[и] [ҳафтаи гузашта соати] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'баъди %s',\n            past : '%s пеш',\n            s : 'якчанд сония',\n            m : 'як дақиқа',\n            mm : '%d дақиқа',\n            h : 'як соат',\n            hh : '%d соат',\n            d : 'як рӯз',\n            dd : '%d рӯз',\n            M : 'як моҳ',\n            MM : '%d моҳ',\n            y : 'як сол',\n            yy : '%d сол'\n        },\n        meridiemParse: /шаб|субҳ|рӯз|бегоҳ/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'шаб') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'субҳ') {\n                return hour;\n            } else if (meridiem === 'рӯз') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === 'бегоҳ') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'шаб';\n            } else if (hour < 11) {\n                return 'субҳ';\n            } else if (hour < 16) {\n                return 'рӯз';\n            } else if (hour < 19) {\n                return 'бегоҳ';\n            } else {\n                return 'шаб';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(ум|юм)/,\n        ordinal: function (number) {\n            var a = number % 10,\n                b = number >= 100 ? 100 : null;\n            return number + (suffixes[number] || suffixes[a] || suffixes[b]);\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 1th is the first week of the year.\n        }\n    });\n\n    return tg;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/tg.js?");

/***/ }),

/***/ "./node_modules/moment/locale/th.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/th.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var th = moment.defineLocale('th', {\n        months : 'มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม'.split('_'),\n        monthsShort : 'ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.'.split('_'),\n        monthsParseExact: true,\n        weekdays : 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์'.split('_'),\n        weekdaysShort : 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์'.split('_'), // yes, three characters difference\n        weekdaysMin : 'อา._จ._อ._พ._พฤ._ศ._ส.'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY เวลา H:mm',\n            LLLL : 'วันddddที่ D MMMM YYYY เวลา H:mm'\n        },\n        meridiemParse: /ก่อนเที่ยง|หลังเที่ยง/,\n        isPM: function (input) {\n            return input === 'หลังเที่ยง';\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ก่อนเที่ยง';\n            } else {\n                return 'หลังเที่ยง';\n            }\n        },\n        calendar : {\n            sameDay : '[วันนี้ เวลา] LT',\n            nextDay : '[พรุ่งนี้ เวลา] LT',\n            nextWeek : 'dddd[หน้า เวลา] LT',\n            lastDay : '[เมื่อวานนี้ เวลา] LT',\n            lastWeek : '[วัน]dddd[ที่แล้ว เวลา] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'อีก %s',\n            past : '%sที่แล้ว',\n            s : 'ไม่กี่วินาที',\n            ss : '%d วินาที',\n            m : '1 นาที',\n            mm : '%d นาที',\n            h : '1 ชั่วโมง',\n            hh : '%d ชั่วโมง',\n            d : '1 วัน',\n            dd : '%d วัน',\n            M : '1 เดือน',\n            MM : '%d เดือน',\n            y : '1 ปี',\n            yy : '%d ปี'\n        }\n    });\n\n    return th;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/th.js?");

/***/ }),

/***/ "./node_modules/moment/locale/tl-ph.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/tl-ph.js ***!
  \*********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var tlPh = moment.defineLocale('tl-ph', {\n        months : 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split('_'),\n        monthsShort : 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'),\n        weekdays : 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split('_'),\n        weekdaysShort : 'Lin_Lun_Mar_Miy_Huw_Biy_Sab'.split('_'),\n        weekdaysMin : 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'MM/D/YYYY',\n            LL : 'MMMM D, YYYY',\n            LLL : 'MMMM D, YYYY HH:mm',\n            LLLL : 'dddd, MMMM DD, YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: 'LT [ngayong araw]',\n            nextDay: '[Bukas ng] LT',\n            nextWeek: 'LT [sa susunod na] dddd',\n            lastDay: 'LT [kahapon]',\n            lastWeek: 'LT [noong nakaraang] dddd',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'sa loob ng %s',\n            past : '%s ang nakalipas',\n            s : 'ilang segundo',\n            ss : '%d segundo',\n            m : 'isang minuto',\n            mm : '%d minuto',\n            h : 'isang oras',\n            hh : '%d oras',\n            d : 'isang araw',\n            dd : '%d araw',\n            M : 'isang buwan',\n            MM : '%d buwan',\n            y : 'isang taon',\n            yy : '%d taon'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}/,\n        ordinal : function (number) {\n            return number;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return tlPh;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/tl-ph.js?");

/***/ }),

/***/ "./node_modules/moment/locale/tlh.js":
/*!*******************************************!*\
  !*** ./node_modules/moment/locale/tlh.js ***!
  \*******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var numbersNouns = 'pagh_wa’_cha’_wej_loS_vagh_jav_Soch_chorgh_Hut'.split('_');\n\n    function translateFuture(output) {\n        var time = output;\n        time = (output.indexOf('jaj') !== -1) ?\n        time.slice(0, -3) + 'leS' :\n        (output.indexOf('jar') !== -1) ?\n        time.slice(0, -3) + 'waQ' :\n        (output.indexOf('DIS') !== -1) ?\n        time.slice(0, -3) + 'nem' :\n        time + ' pIq';\n        return time;\n    }\n\n    function translatePast(output) {\n        var time = output;\n        time = (output.indexOf('jaj') !== -1) ?\n        time.slice(0, -3) + 'Hu’' :\n        (output.indexOf('jar') !== -1) ?\n        time.slice(0, -3) + 'wen' :\n        (output.indexOf('DIS') !== -1) ?\n        time.slice(0, -3) + 'ben' :\n        time + ' ret';\n        return time;\n    }\n\n    function translate(number, withoutSuffix, string, isFuture) {\n        var numberNoun = numberAsNoun(number);\n        switch (string) {\n            case 'ss':\n                return numberNoun + ' lup';\n            case 'mm':\n                return numberNoun + ' tup';\n            case 'hh':\n                return numberNoun + ' rep';\n            case 'dd':\n                return numberNoun + ' jaj';\n            case 'MM':\n                return numberNoun + ' jar';\n            case 'yy':\n                return numberNoun + ' DIS';\n        }\n    }\n\n    function numberAsNoun(number) {\n        var hundred = Math.floor((number % 1000) / 100),\n        ten = Math.floor((number % 100) / 10),\n        one = number % 10,\n        word = '';\n        if (hundred > 0) {\n            word += numbersNouns[hundred] + 'vatlh';\n        }\n        if (ten > 0) {\n            word += ((word !== '') ? ' ' : '') + numbersNouns[ten] + 'maH';\n        }\n        if (one > 0) {\n            word += ((word !== '') ? ' ' : '') + numbersNouns[one];\n        }\n        return (word === '') ? 'pagh' : word;\n    }\n\n    var tlh = moment.defineLocale('tlh', {\n        months : 'tera’ jar wa’_tera’ jar cha’_tera’ jar wej_tera’ jar loS_tera’ jar vagh_tera’ jar jav_tera’ jar Soch_tera’ jar chorgh_tera’ jar Hut_tera’ jar wa’maH_tera’ jar wa’maH wa’_tera’ jar wa’maH cha’'.split('_'),\n        monthsShort : 'jar wa’_jar cha’_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa’maH_jar wa’maH wa’_jar wa’maH cha’'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),\n        weekdaysShort : 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),\n        weekdaysMin : 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[DaHjaj] LT',\n            nextDay: '[wa’leS] LT',\n            nextWeek: 'LLL',\n            lastDay: '[wa’Hu’] LT',\n            lastWeek: 'LLL',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : translateFuture,\n            past : translatePast,\n            s : 'puS lup',\n            ss : translate,\n            m : 'wa’ tup',\n            mm : translate,\n            h : 'wa’ rep',\n            hh : translate,\n            d : 'wa’ jaj',\n            dd : translate,\n            M : 'wa’ jar',\n            MM : translate,\n            y : 'wa’ DIS',\n            yy : translate\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return tlh;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/tlh.js?");

/***/ }),

/***/ "./node_modules/moment/locale/tr.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/tr.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n    var suffixes = {\n        1: '\\'inci',\n        5: '\\'inci',\n        8: '\\'inci',\n        70: '\\'inci',\n        80: '\\'inci',\n        2: '\\'nci',\n        7: '\\'nci',\n        20: '\\'nci',\n        50: '\\'nci',\n        3: '\\'üncü',\n        4: '\\'üncü',\n        100: '\\'üncü',\n        6: '\\'ncı',\n        9: '\\'uncu',\n        10: '\\'uncu',\n        30: '\\'uncu',\n        60: '\\'ıncı',\n        90: '\\'ıncı'\n    };\n\n    var tr = moment.defineLocale('tr', {\n        months : 'Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık'.split('_'),\n        monthsShort : 'Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara'.split('_'),\n        weekdays : 'Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi'.split('_'),\n        weekdaysShort : 'Paz_Pts_Sal_Çar_Per_Cum_Cts'.split('_'),\n        weekdaysMin : 'Pz_Pt_Sa_Ça_Pe_Cu_Ct'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[bugün saat] LT',\n            nextDay : '[yarın saat] LT',\n            nextWeek : '[gelecek] dddd [saat] LT',\n            lastDay : '[dün] LT',\n            lastWeek : '[geçen] dddd [saat] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s sonra',\n            past : '%s önce',\n            s : 'birkaç saniye',\n            ss : '%d saniye',\n            m : 'bir dakika',\n            mm : '%d dakika',\n            h : 'bir saat',\n            hh : '%d saat',\n            d : 'bir gün',\n            dd : '%d gün',\n            M : 'bir ay',\n            MM : '%d ay',\n            y : 'bir yıl',\n            yy : '%d yıl'\n        },\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'Do':\n                case 'DD':\n                    return number;\n                default:\n                    if (number === 0) {  // special case for zero\n                        return number + '\\'ıncı';\n                    }\n                    var a = number % 10,\n                        b = number % 100 - a,\n                        c = number >= 100 ? 100 : null;\n                    return number + (suffixes[a] || suffixes[b] || suffixes[c]);\n            }\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return tr;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/tr.js?");

/***/ }),

/***/ "./node_modules/moment/locale/tzl.js":
/*!*******************************************!*\
  !*** ./node_modules/moment/locale/tzl.js ***!
  \*******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    // After the year there should be a slash and the amount of years since December 26, 1979 in Roman numerals.\n    // This is currently too difficult (maybe even impossible) to add.\n    var tzl = moment.defineLocale('tzl', {\n        months : 'Januar_Fevraglh_Març_Avrïu_Mai_Gün_Julia_Guscht_Setemvar_Listopäts_Noemvar_Zecemvar'.split('_'),\n        monthsShort : 'Jan_Fev_Mar_Avr_Mai_Gün_Jul_Gus_Set_Lis_Noe_Zec'.split('_'),\n        weekdays : 'Súladi_Lúneçi_Maitzi_Márcuri_Xhúadi_Viénerçi_Sáturi'.split('_'),\n        weekdaysShort : 'Súl_Lún_Mai_Már_Xhú_Vié_Sát'.split('_'),\n        weekdaysMin : 'Sú_Lú_Ma_Má_Xh_Vi_Sá'.split('_'),\n        longDateFormat : {\n            LT : 'HH.mm',\n            LTS : 'HH.mm.ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D. MMMM [dallas] YYYY',\n            LLL : 'D. MMMM [dallas] YYYY HH.mm',\n            LLLL : 'dddd, [li] D. MMMM [dallas] YYYY HH.mm'\n        },\n        meridiemParse: /d\\'o|d\\'a/i,\n        isPM : function (input) {\n            return 'd\\'o' === input.toLowerCase();\n        },\n        meridiem : function (hours, minutes, isLower) {\n            if (hours > 11) {\n                return isLower ? 'd\\'o' : 'D\\'O';\n            } else {\n                return isLower ? 'd\\'a' : 'D\\'A';\n            }\n        },\n        calendar : {\n            sameDay : '[oxhi à] LT',\n            nextDay : '[demà à] LT',\n            nextWeek : 'dddd [à] LT',\n            lastDay : '[ieiri à] LT',\n            lastWeek : '[sür el] dddd [lasteu à] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'osprei %s',\n            past : 'ja%s',\n            s : processRelativeTime,\n            ss : processRelativeTime,\n            m : processRelativeTime,\n            mm : processRelativeTime,\n            h : processRelativeTime,\n            hh : processRelativeTime,\n            d : processRelativeTime,\n            dd : processRelativeTime,\n            M : processRelativeTime,\n            MM : processRelativeTime,\n            y : processRelativeTime,\n            yy : processRelativeTime\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            's': ['viensas secunds', '\\'iensas secunds'],\n            'ss': [number + ' secunds', '' + number + ' secunds'],\n            'm': ['\\'n míut', '\\'iens míut'],\n            'mm': [number + ' míuts', '' + number + ' míuts'],\n            'h': ['\\'n þora', '\\'iensa þora'],\n            'hh': [number + ' þoras', '' + number + ' þoras'],\n            'd': ['\\'n ziua', '\\'iensa ziua'],\n            'dd': [number + ' ziuas', '' + number + ' ziuas'],\n            'M': ['\\'n mes', '\\'iens mes'],\n            'MM': [number + ' mesen', '' + number + ' mesen'],\n            'y': ['\\'n ar', '\\'iens ar'],\n            'yy': [number + ' ars', '' + number + ' ars']\n        };\n        return isFuture ? format[key][0] : (withoutSuffix ? format[key][0] : format[key][1]);\n    }\n\n    return tzl;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/tzl.js?");

/***/ }),

/***/ "./node_modules/moment/locale/tzm-latn.js":
/*!************************************************!*\
  !*** ./node_modules/moment/locale/tzm-latn.js ***!
  \************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var tzmLatn = moment.defineLocale('tzm-latn', {\n        months : 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split('_'),\n        monthsShort : 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split('_'),\n        weekdays : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),\n        weekdaysShort : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),\n        weekdaysMin : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[asdkh g] LT',\n            nextDay: '[aska g] LT',\n            nextWeek: 'dddd [g] LT',\n            lastDay: '[assant g] LT',\n            lastWeek: 'dddd [g] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'dadkh s yan %s',\n            past : 'yan %s',\n            s : 'imik',\n            ss : '%d imik',\n            m : 'minuḍ',\n            mm : '%d minuḍ',\n            h : 'saɛa',\n            hh : '%d tassaɛin',\n            d : 'ass',\n            dd : '%d ossan',\n            M : 'ayowr',\n            MM : '%d iyyirn',\n            y : 'asgas',\n            yy : '%d isgasn'\n        },\n        week : {\n            dow : 6, // Saturday is the first day of the week.\n            doy : 12  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return tzmLatn;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/tzm-latn.js?");

/***/ }),

/***/ "./node_modules/moment/locale/tzm.js":
/*!*******************************************!*\
  !*** ./node_modules/moment/locale/tzm.js ***!
  \*******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var tzm = moment.defineLocale('tzm', {\n        months : 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split('_'),\n        monthsShort : 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split('_'),\n        weekdays : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),\n        weekdaysShort : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),\n        weekdaysMin : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[ⴰⵙⴷⵅ ⴴ] LT',\n            nextDay: '[ⴰⵙⴽⴰ ⴴ] LT',\n            nextWeek: 'dddd [ⴴ] LT',\n            lastDay: '[ⴰⵚⴰⵏⵜ ⴴ] LT',\n            lastWeek: 'dddd [ⴴ] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s',\n            past : 'ⵢⴰⵏ %s',\n            s : 'ⵉⵎⵉⴽ',\n            ss : '%d ⵉⵎⵉⴽ',\n            m : 'ⵎⵉⵏⵓⴺ',\n            mm : '%d ⵎⵉⵏⵓⴺ',\n            h : 'ⵙⴰⵄⴰ',\n            hh : '%d ⵜⴰⵙⵙⴰⵄⵉⵏ',\n            d : 'ⴰⵙⵙ',\n            dd : '%d oⵙⵙⴰⵏ',\n            M : 'ⴰⵢoⵓⵔ',\n            MM : '%d ⵉⵢⵢⵉⵔⵏ',\n            y : 'ⴰⵙⴳⴰⵙ',\n            yy : '%d ⵉⵙⴳⴰⵙⵏ'\n        },\n        week : {\n            dow : 6, // Saturday is the first day of the week.\n            doy : 12  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return tzm;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/tzm.js?");

/***/ }),

/***/ "./node_modules/moment/locale/ug-cn.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/ug-cn.js ***!
  \*********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js language configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var ugCn = moment.defineLocale('ug-cn', {\n        months: 'يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر'.split(\n            '_'\n        ),\n        monthsShort: 'يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر'.split(\n            '_'\n        ),\n        weekdays: 'يەكشەنبە_دۈشەنبە_سەيشەنبە_چارشەنبە_پەيشەنبە_جۈمە_شەنبە'.split(\n            '_'\n        ),\n        weekdaysShort: 'يە_دۈ_سە_چا_پە_جۈ_شە'.split('_'),\n        weekdaysMin: 'يە_دۈ_سە_چا_پە_جۈ_شە'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY-MM-DD',\n            LL: 'YYYY-يىلىM-ئاينىڭD-كۈنى',\n            LLL: 'YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm',\n            LLLL: 'dddd، YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm'\n        },\n        meridiemParse: /يېرىم كېچە|سەھەر|چۈشتىن بۇرۇن|چۈش|چۈشتىن كېيىن|كەچ/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (\n                meridiem === 'يېرىم كېچە' ||\n                meridiem === 'سەھەر' ||\n                meridiem === 'چۈشتىن بۇرۇن'\n            ) {\n                return hour;\n            } else if (meridiem === 'چۈشتىن كېيىن' || meridiem === 'كەچ') {\n                return hour + 12;\n            } else {\n                return hour >= 11 ? hour : hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            var hm = hour * 100 + minute;\n            if (hm < 600) {\n                return 'يېرىم كېچە';\n            } else if (hm < 900) {\n                return 'سەھەر';\n            } else if (hm < 1130) {\n                return 'چۈشتىن بۇرۇن';\n            } else if (hm < 1230) {\n                return 'چۈش';\n            } else if (hm < 1800) {\n                return 'چۈشتىن كېيىن';\n            } else {\n                return 'كەچ';\n            }\n        },\n        calendar: {\n            sameDay: '[بۈگۈن سائەت] LT',\n            nextDay: '[ئەتە سائەت] LT',\n            nextWeek: '[كېلەركى] dddd [سائەت] LT',\n            lastDay: '[تۆنۈگۈن] LT',\n            lastWeek: '[ئالدىنقى] dddd [سائەت] LT',\n            sameElse: 'L'\n        },\n        relativeTime: {\n            future: '%s كېيىن',\n            past: '%s بۇرۇن',\n            s: 'نەچچە سېكونت',\n            ss: '%d سېكونت',\n            m: 'بىر مىنۇت',\n            mm: '%d مىنۇت',\n            h: 'بىر سائەت',\n            hh: '%d سائەت',\n            d: 'بىر كۈن',\n            dd: '%d كۈن',\n            M: 'بىر ئاي',\n            MM: '%d ئاي',\n            y: 'بىر يىل',\n            yy: '%d يىل'\n        },\n\n        dayOfMonthOrdinalParse: /\\d{1,2}(-كۈنى|-ئاي|-ھەپتە)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + '-كۈنى';\n                case 'w':\n                case 'W':\n                    return number + '-ھەپتە';\n                default:\n                    return number;\n            }\n        },\n        preparse: function (string) {\n            return string.replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string.replace(/,/g, '،');\n        },\n        week: {\n            // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效\n            dow: 1, // Monday is the first day of the week.\n            doy: 7 // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return ugCn;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/ug-cn.js?");

/***/ }),

/***/ "./node_modules/moment/locale/uk.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/uk.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    function plural(word, num) {\n        var forms = word.split('_');\n        return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]);\n    }\n    function relativeTimeWithPlural(number, withoutSuffix, key) {\n        var format = {\n            'ss': withoutSuffix ? 'секунда_секунди_секунд' : 'секунду_секунди_секунд',\n            'mm': withoutSuffix ? 'хвилина_хвилини_хвилин' : 'хвилину_хвилини_хвилин',\n            'hh': withoutSuffix ? 'година_години_годин' : 'годину_години_годин',\n            'dd': 'день_дні_днів',\n            'MM': 'місяць_місяці_місяців',\n            'yy': 'рік_роки_років'\n        };\n        if (key === 'm') {\n            return withoutSuffix ? 'хвилина' : 'хвилину';\n        }\n        else if (key === 'h') {\n            return withoutSuffix ? 'година' : 'годину';\n        }\n        else {\n            return number + ' ' + plural(format[key], +number);\n        }\n    }\n    function weekdaysCaseReplace(m, format) {\n        var weekdays = {\n            'nominative': 'неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота'.split('_'),\n            'accusative': 'неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу'.split('_'),\n            'genitive': 'неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи'.split('_')\n        };\n\n        if (!m) {\n            return weekdays['nominative'];\n        }\n\n        var nounCase = (/(\\[[ВвУу]\\]) ?dddd/).test(format) ?\n            'accusative' :\n            ((/\\[?(?:минулої|наступної)? ?\\] ?dddd/).test(format) ?\n                'genitive' :\n                'nominative');\n        return weekdays[nounCase][m.day()];\n    }\n    function processHoursFunction(str) {\n        return function () {\n            return str + 'о' + (this.hours() === 11 ? 'б' : '') + '] LT';\n        };\n    }\n\n    var uk = moment.defineLocale('uk', {\n        months : {\n            'format': 'січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня'.split('_'),\n            'standalone': 'січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень'.split('_')\n        },\n        monthsShort : 'січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд'.split('_'),\n        weekdays : weekdaysCaseReplace,\n        weekdaysShort : 'нд_пн_вт_ср_чт_пт_сб'.split('_'),\n        weekdaysMin : 'нд_пн_вт_ср_чт_пт_сб'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY р.',\n            LLL : 'D MMMM YYYY р., HH:mm',\n            LLLL : 'dddd, D MMMM YYYY р., HH:mm'\n        },\n        calendar : {\n            sameDay: processHoursFunction('[Сьогодні '),\n            nextDay: processHoursFunction('[Завтра '),\n            lastDay: processHoursFunction('[Вчора '),\n            nextWeek: processHoursFunction('[У] dddd ['),\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                    case 3:\n                    case 5:\n                    case 6:\n                        return processHoursFunction('[Минулої] dddd [').call(this);\n                    case 1:\n                    case 2:\n                    case 4:\n                        return processHoursFunction('[Минулого] dddd [').call(this);\n                }\n            },\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'за %s',\n            past : '%s тому',\n            s : 'декілька секунд',\n            ss : relativeTimeWithPlural,\n            m : relativeTimeWithPlural,\n            mm : relativeTimeWithPlural,\n            h : 'годину',\n            hh : relativeTimeWithPlural,\n            d : 'день',\n            dd : relativeTimeWithPlural,\n            M : 'місяць',\n            MM : relativeTimeWithPlural,\n            y : 'рік',\n            yy : relativeTimeWithPlural\n        },\n        // M. E.: those two are virtually unused but a user might want to implement them for his/her website for some reason\n        meridiemParse: /ночі|ранку|дня|вечора/,\n        isPM: function (input) {\n            return /^(дня|вечора)$/.test(input);\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'ночі';\n            } else if (hour < 12) {\n                return 'ранку';\n            } else if (hour < 17) {\n                return 'дня';\n            } else {\n                return 'вечора';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(й|го)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'M':\n                case 'd':\n                case 'DDD':\n                case 'w':\n                case 'W':\n                    return number + '-й';\n                case 'D':\n                    return number + '-го';\n                default:\n                    return number;\n            }\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return uk;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/uk.js?");

/***/ }),

/***/ "./node_modules/moment/locale/ur.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/ur.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var months = [\n        'جنوری',\n        'فروری',\n        'مارچ',\n        'اپریل',\n        'مئی',\n        'جون',\n        'جولائی',\n        'اگست',\n        'ستمبر',\n        'اکتوبر',\n        'نومبر',\n        'دسمبر'\n    ];\n    var days = [\n        'اتوار',\n        'پیر',\n        'منگل',\n        'بدھ',\n        'جمعرات',\n        'جمعہ',\n        'ہفتہ'\n    ];\n\n    var ur = moment.defineLocale('ur', {\n        months : months,\n        monthsShort : months,\n        weekdays : days,\n        weekdaysShort : days,\n        weekdaysMin : days,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd، D MMMM YYYY HH:mm'\n        },\n        meridiemParse: /صبح|شام/,\n        isPM : function (input) {\n            return 'شام' === input;\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'صبح';\n            }\n            return 'شام';\n        },\n        calendar : {\n            sameDay : '[آج بوقت] LT',\n            nextDay : '[کل بوقت] LT',\n            nextWeek : 'dddd [بوقت] LT',\n            lastDay : '[گذشتہ روز بوقت] LT',\n            lastWeek : '[گذشتہ] dddd [بوقت] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s بعد',\n            past : '%s قبل',\n            s : 'چند سیکنڈ',\n            ss : '%d سیکنڈ',\n            m : 'ایک منٹ',\n            mm : '%d منٹ',\n            h : 'ایک گھنٹہ',\n            hh : '%d گھنٹے',\n            d : 'ایک دن',\n            dd : '%d دن',\n            M : 'ایک ماہ',\n            MM : '%d ماہ',\n            y : 'ایک سال',\n            yy : '%d سال'\n        },\n        preparse: function (string) {\n            return string.replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string.replace(/,/g, '،');\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return ur;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/ur.js?");

/***/ }),

/***/ "./node_modules/moment/locale/uz-latn.js":
/*!***********************************************!*\
  !*** ./node_modules/moment/locale/uz-latn.js ***!
  \***********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var uzLatn = moment.defineLocale('uz-latn', {\n        months : 'Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr'.split('_'),\n        monthsShort : 'Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek'.split('_'),\n        weekdays : 'Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba'.split('_'),\n        weekdaysShort : 'Yak_Dush_Sesh_Chor_Pay_Jum_Shan'.split('_'),\n        weekdaysMin : 'Ya_Du_Se_Cho_Pa_Ju_Sha'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'D MMMM YYYY, dddd HH:mm'\n        },\n        calendar : {\n            sameDay : '[Bugun soat] LT [da]',\n            nextDay : '[Ertaga] LT [da]',\n            nextWeek : 'dddd [kuni soat] LT [da]',\n            lastDay : '[Kecha soat] LT [da]',\n            lastWeek : '[O\\'tgan] dddd [kuni soat] LT [da]',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'Yaqin %s ichida',\n            past : 'Bir necha %s oldin',\n            s : 'soniya',\n            ss : '%d soniya',\n            m : 'bir daqiqa',\n            mm : '%d daqiqa',\n            h : 'bir soat',\n            hh : '%d soat',\n            d : 'bir kun',\n            dd : '%d kun',\n            M : 'bir oy',\n            MM : '%d oy',\n            y : 'bir yil',\n            yy : '%d yil'\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return uzLatn;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/uz-latn.js?");

/***/ }),

/***/ "./node_modules/moment/locale/uz.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/uz.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var uz = moment.defineLocale('uz', {\n        months : 'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split('_'),\n        monthsShort : 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'),\n        weekdays : 'Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба'.split('_'),\n        weekdaysShort : 'Якш_Душ_Сеш_Чор_Пай_Жум_Шан'.split('_'),\n        weekdaysMin : 'Як_Ду_Се_Чо_Па_Жу_Ша'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'D MMMM YYYY, dddd HH:mm'\n        },\n        calendar : {\n            sameDay : '[Бугун соат] LT [да]',\n            nextDay : '[Эртага] LT [да]',\n            nextWeek : 'dddd [куни соат] LT [да]',\n            lastDay : '[Кеча соат] LT [да]',\n            lastWeek : '[Утган] dddd [куни соат] LT [да]',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'Якин %s ичида',\n            past : 'Бир неча %s олдин',\n            s : 'фурсат',\n            ss : '%d фурсат',\n            m : 'бир дакика',\n            mm : '%d дакика',\n            h : 'бир соат',\n            hh : '%d соат',\n            d : 'бир кун',\n            dd : '%d кун',\n            M : 'бир ой',\n            MM : '%d ой',\n            y : 'бир йил',\n            yy : '%d йил'\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return uz;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/uz.js?");

/***/ }),

/***/ "./node_modules/moment/locale/vi.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/vi.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var vi = moment.defineLocale('vi', {\n        months : 'tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12'.split('_'),\n        monthsShort : 'Th01_Th02_Th03_Th04_Th05_Th06_Th07_Th08_Th09_Th10_Th11_Th12'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy'.split('_'),\n        weekdaysShort : 'CN_T2_T3_T4_T5_T6_T7'.split('_'),\n        weekdaysMin : 'CN_T2_T3_T4_T5_T6_T7'.split('_'),\n        weekdaysParseExact : true,\n        meridiemParse: /sa|ch/i,\n        isPM : function (input) {\n            return /^ch$/i.test(input);\n        },\n        meridiem : function (hours, minutes, isLower) {\n            if (hours < 12) {\n                return isLower ? 'sa' : 'SA';\n            } else {\n                return isLower ? 'ch' : 'CH';\n            }\n        },\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM [năm] YYYY',\n            LLL : 'D MMMM [năm] YYYY HH:mm',\n            LLLL : 'dddd, D MMMM [năm] YYYY HH:mm',\n            l : 'DD/M/YYYY',\n            ll : 'D MMM YYYY',\n            lll : 'D MMM YYYY HH:mm',\n            llll : 'ddd, D MMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[Hôm nay lúc] LT',\n            nextDay: '[Ngày mai lúc] LT',\n            nextWeek: 'dddd [tuần tới lúc] LT',\n            lastDay: '[Hôm qua lúc] LT',\n            lastWeek: 'dddd [tuần rồi lúc] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : '%s tới',\n            past : '%s trước',\n            s : 'vài giây',\n            ss : '%d giây' ,\n            m : 'một phút',\n            mm : '%d phút',\n            h : 'một giờ',\n            hh : '%d giờ',\n            d : 'một ngày',\n            dd : '%d ngày',\n            M : 'một tháng',\n            MM : '%d tháng',\n            y : 'một năm',\n            yy : '%d năm'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}/,\n        ordinal : function (number) {\n            return number;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return vi;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/vi.js?");

/***/ }),

/***/ "./node_modules/moment/locale/x-pseudo.js":
/*!************************************************!*\
  !*** ./node_modules/moment/locale/x-pseudo.js ***!
  \************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var xPseudo = moment.defineLocale('x-pseudo', {\n        months : 'J~áñúá~rý_F~ébrú~árý_~Márc~h_Áp~ríl_~Máý_~Júñé~_Júl~ý_Áú~gúst~_Sép~témb~ér_Ó~ctób~ér_Ñ~óvém~bér_~Décé~mbér'.split('_'),\n        monthsShort : 'J~áñ_~Féb_~Már_~Ápr_~Máý_~Júñ_~Júl_~Áúg_~Sép_~Óct_~Ñóv_~Déc'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'S~úñdá~ý_Mó~ñdáý~_Túé~sdáý~_Wéd~ñésd~áý_T~húrs~dáý_~Fríd~áý_S~átúr~dáý'.split('_'),\n        weekdaysShort : 'S~úñ_~Móñ_~Túé_~Wéd_~Thú_~Frí_~Sát'.split('_'),\n        weekdaysMin : 'S~ú_Mó~_Tú_~Wé_T~h_Fr~_Sá'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[T~ódá~ý át] LT',\n            nextDay : '[T~ómó~rró~w át] LT',\n            nextWeek : 'dddd [át] LT',\n            lastDay : '[Ý~ést~érdá~ý át] LT',\n            lastWeek : '[L~ást] dddd [át] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'í~ñ %s',\n            past : '%s á~gó',\n            s : 'á ~féw ~sécó~ñds',\n            ss : '%d s~écóñ~ds',\n            m : 'á ~míñ~úté',\n            mm : '%d m~íñú~tés',\n            h : 'á~ñ hó~úr',\n            hh : '%d h~óúrs',\n            d : 'á ~dáý',\n            dd : '%d d~áýs',\n            M : 'á ~móñ~th',\n            MM : '%d m~óñt~hs',\n            y : 'á ~ýéár',\n            yy : '%d ý~éárs'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n        ordinal : function (number) {\n            var b = number % 10,\n                output = (~~(number % 100 / 10) === 1) ? 'th' :\n                (b === 1) ? 'st' :\n                (b === 2) ? 'nd' :\n                (b === 3) ? 'rd' : 'th';\n            return number + output;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return xPseudo;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/x-pseudo.js?");

/***/ }),

/***/ "./node_modules/moment/locale/yo.js":
/*!******************************************!*\
  !*** ./node_modules/moment/locale/yo.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var yo = moment.defineLocale('yo', {\n        months : 'Sẹ́rẹ́_Èrèlè_Ẹrẹ̀nà_Ìgbé_Èbibi_Òkùdu_Agẹmo_Ògún_Owewe_Ọ̀wàrà_Bélú_Ọ̀pẹ̀̀'.split('_'),\n        monthsShort : 'Sẹ́r_Èrl_Ẹrn_Ìgb_Èbi_Òkù_Agẹ_Ògú_Owe_Ọ̀wà_Bél_Ọ̀pẹ̀̀'.split('_'),\n        weekdays : 'Àìkú_Ajé_Ìsẹ́gun_Ọjọ́rú_Ọjọ́bọ_Ẹtì_Àbámẹ́ta'.split('_'),\n        weekdaysShort : 'Àìk_Ajé_Ìsẹ́_Ọjr_Ọjb_Ẹtì_Àbá'.split('_'),\n        weekdaysMin : 'Àì_Aj_Ìs_Ọr_Ọb_Ẹt_Àb'.split('_'),\n        longDateFormat : {\n            LT : 'h:mm A',\n            LTS : 'h:mm:ss A',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY h:mm A',\n            LLLL : 'dddd, D MMMM YYYY h:mm A'\n        },\n        calendar : {\n            sameDay : '[Ònì ni] LT',\n            nextDay : '[Ọ̀la ni] LT',\n            nextWeek : 'dddd [Ọsẹ̀ tón\\'bọ] [ni] LT',\n            lastDay : '[Àna ni] LT',\n            lastWeek : 'dddd [Ọsẹ̀ tólọ́] [ni] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'ní %s',\n            past : '%s kọjá',\n            s : 'ìsẹjú aayá die',\n            ss :'aayá %d',\n            m : 'ìsẹjú kan',\n            mm : 'ìsẹjú %d',\n            h : 'wákati kan',\n            hh : 'wákati %d',\n            d : 'ọjọ́ kan',\n            dd : 'ọjọ́ %d',\n            M : 'osù kan',\n            MM : 'osù %d',\n            y : 'ọdún kan',\n            yy : 'ọdún %d'\n        },\n        dayOfMonthOrdinalParse : /ọjọ́\\s\\d{1,2}/,\n        ordinal : 'ọjọ́ %d',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4 // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return yo;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/yo.js?");

/***/ }),

/***/ "./node_modules/moment/locale/zh-cn.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/zh-cn.js ***!
  \*********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var zhCn = moment.defineLocale('zh-cn', {\n        months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),\n        monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n        weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n        weekdaysShort : '周日_周一_周二_周三_周四_周五_周六'.split('_'),\n        weekdaysMin : '日_一_二_三_四_五_六'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'YYYY/MM/DD',\n            LL : 'YYYY年M月D日',\n            LLL : 'YYYY年M月D日Ah点mm分',\n            LLLL : 'YYYY年M月D日ddddAh点mm分',\n            l : 'YYYY/M/D',\n            ll : 'YYYY年M月D日',\n            lll : 'YYYY年M月D日 HH:mm',\n            llll : 'YYYY年M月D日dddd HH:mm'\n        },\n        meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === '凌晨' || meridiem === '早上' ||\n                    meridiem === '上午') {\n                return hour;\n            } else if (meridiem === '下午' || meridiem === '晚上') {\n                return hour + 12;\n            } else {\n                // '中午'\n                return hour >= 11 ? hour : hour + 12;\n            }\n        },\n        meridiem : function (hour, minute, isLower) {\n            var hm = hour * 100 + minute;\n            if (hm < 600) {\n                return '凌晨';\n            } else if (hm < 900) {\n                return '早上';\n            } else if (hm < 1130) {\n                return '上午';\n            } else if (hm < 1230) {\n                return '中午';\n            } else if (hm < 1800) {\n                return '下午';\n            } else {\n                return '晚上';\n            }\n        },\n        calendar : {\n            sameDay : '[今天]LT',\n            nextDay : '[明天]LT',\n            nextWeek : '[下]ddddLT',\n            lastDay : '[昨天]LT',\n            lastWeek : '[上]ddddLT',\n            sameElse : 'L'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(日|月|周)/,\n        ordinal : function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + '日';\n                case 'M':\n                    return number + '月';\n                case 'w':\n                case 'W':\n                    return number + '周';\n                default:\n                    return number;\n            }\n        },\n        relativeTime : {\n            future : '%s内',\n            past : '%s前',\n            s : '几秒',\n            ss : '%d 秒',\n            m : '1 分钟',\n            mm : '%d 分钟',\n            h : '1 小时',\n            hh : '%d 小时',\n            d : '1 天',\n            dd : '%d 天',\n            M : '1 个月',\n            MM : '%d 个月',\n            y : '1 年',\n            yy : '%d 年'\n        },\n        week : {\n            // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return zhCn;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/zh-cn.js?");

/***/ }),

/***/ "./node_modules/moment/locale/zh-hk.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/zh-hk.js ***!
  \*********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var zhHk = moment.defineLocale('zh-hk', {\n        months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),\n        monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n        weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n        weekdaysShort : '週日_週一_週二_週三_週四_週五_週六'.split('_'),\n        weekdaysMin : '日_一_二_三_四_五_六'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'YYYY/MM/DD',\n            LL : 'YYYY年M月D日',\n            LLL : 'YYYY年M月D日 HH:mm',\n            LLLL : 'YYYY年M月D日dddd HH:mm',\n            l : 'YYYY/M/D',\n            ll : 'YYYY年M月D日',\n            lll : 'YYYY年M月D日 HH:mm',\n            llll : 'YYYY年M月D日dddd HH:mm'\n        },\n        meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {\n                return hour;\n            } else if (meridiem === '中午') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === '下午' || meridiem === '晚上') {\n                return hour + 12;\n            }\n        },\n        meridiem : function (hour, minute, isLower) {\n            var hm = hour * 100 + minute;\n            if (hm < 600) {\n                return '凌晨';\n            } else if (hm < 900) {\n                return '早上';\n            } else if (hm < 1130) {\n                return '上午';\n            } else if (hm < 1230) {\n                return '中午';\n            } else if (hm < 1800) {\n                return '下午';\n            } else {\n                return '晚上';\n            }\n        },\n        calendar : {\n            sameDay : '[今天]LT',\n            nextDay : '[明天]LT',\n            nextWeek : '[下]ddddLT',\n            lastDay : '[昨天]LT',\n            lastWeek : '[上]ddddLT',\n            sameElse : 'L'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(日|月|週)/,\n        ordinal : function (number, period) {\n            switch (period) {\n                case 'd' :\n                case 'D' :\n                case 'DDD' :\n                    return number + '日';\n                case 'M' :\n                    return number + '月';\n                case 'w' :\n                case 'W' :\n                    return number + '週';\n                default :\n                    return number;\n            }\n        },\n        relativeTime : {\n            future : '%s內',\n            past : '%s前',\n            s : '幾秒',\n            ss : '%d 秒',\n            m : '1 分鐘',\n            mm : '%d 分鐘',\n            h : '1 小時',\n            hh : '%d 小時',\n            d : '1 天',\n            dd : '%d 天',\n            M : '1 個月',\n            MM : '%d 個月',\n            y : '1 年',\n            yy : '%d 年'\n        }\n    });\n\n    return zhHk;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/zh-hk.js?");

/***/ }),

/***/ "./node_modules/moment/locale/zh-tw.js":
/*!*********************************************!*\
  !*** ./node_modules/moment/locale/zh-tw.js ***!
  \*********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("//! moment.js locale configuration\n\n;(function (global, factory) {\n    true ? factory(__webpack_require__(/*! ../moment */ \"./node_modules/moment/moment.js\")) :\n   undefined\n}(this, (function (moment) { 'use strict';\n\n\n    var zhTw = moment.defineLocale('zh-tw', {\n        months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),\n        monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n        weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n        weekdaysShort : '週日_週一_週二_週三_週四_週五_週六'.split('_'),\n        weekdaysMin : '日_一_二_三_四_五_六'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'YYYY/MM/DD',\n            LL : 'YYYY年M月D日',\n            LLL : 'YYYY年M月D日 HH:mm',\n            LLLL : 'YYYY年M月D日dddd HH:mm',\n            l : 'YYYY/M/D',\n            ll : 'YYYY年M月D日',\n            lll : 'YYYY年M月D日 HH:mm',\n            llll : 'YYYY年M月D日dddd HH:mm'\n        },\n        meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {\n                return hour;\n            } else if (meridiem === '中午') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === '下午' || meridiem === '晚上') {\n                return hour + 12;\n            }\n        },\n        meridiem : function (hour, minute, isLower) {\n            var hm = hour * 100 + minute;\n            if (hm < 600) {\n                return '凌晨';\n            } else if (hm < 900) {\n                return '早上';\n            } else if (hm < 1130) {\n                return '上午';\n            } else if (hm < 1230) {\n                return '中午';\n            } else if (hm < 1800) {\n                return '下午';\n            } else {\n                return '晚上';\n            }\n        },\n        calendar : {\n            sameDay : '[今天] LT',\n            nextDay : '[明天] LT',\n            nextWeek : '[下]dddd LT',\n            lastDay : '[昨天] LT',\n            lastWeek : '[上]dddd LT',\n            sameElse : 'L'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(日|月|週)/,\n        ordinal : function (number, period) {\n            switch (period) {\n                case 'd' :\n                case 'D' :\n                case 'DDD' :\n                    return number + '日';\n                case 'M' :\n                    return number + '月';\n                case 'w' :\n                case 'W' :\n                    return number + '週';\n                default :\n                    return number;\n            }\n        },\n        relativeTime : {\n            future : '%s內',\n            past : '%s前',\n            s : '幾秒',\n            ss : '%d 秒',\n            m : '1 分鐘',\n            mm : '%d 分鐘',\n            h : '1 小時',\n            hh : '%d 小時',\n            d : '1 天',\n            dd : '%d 天',\n            M : '1 個月',\n            MM : '%d 個月',\n            y : '1 年',\n            yy : '%d 年'\n        }\n    });\n\n    return zhTw;\n\n})));\n\n\n//# sourceURL=webpack:///./node_modules/moment/locale/zh-tw.js?");

/***/ }),

/***/ "./node_modules/moment/moment.js":
/*!***************************************!*\
  !*** ./node_modules/moment/moment.js ***!
  \***************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("/* WEBPACK VAR INJECTION */(function(module) {var require;//! moment.js\n\n;(function (global, factory) {\n     true ? module.exports = factory() :\n    undefined\n}(this, (function () { 'use strict';\n\n    var hookCallback;\n\n    function 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        // IE8 will treat undefined and null as object if it wasn't for\n        // input != null\n        return input != null && Object.prototype.toString.call(input) === '[object Object]';\n    }\n\n    function isObjectEmpty(obj) {\n        if (Object.getOwnPropertyNames) {\n            return (Object.getOwnPropertyNames(obj).length === 0);\n        } else {\n            var k;\n            for (k in obj) {\n                if (obj.hasOwnProperty(k)) {\n                    return false;\n                }\n            }\n            return true;\n        }\n    }\n\n    function isUndefined(input) {\n        return input === void 0;\n    }\n\n    function isNumber(input) {\n        return typeof input === 'number' || Object.prototype.toString.call(input) === '[object Number]';\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 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            rfc2822         : false,\n            weekdayMismatch : false\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 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            var isNowValid = !isNaN(m._d.getTime()) &&\n                flags.overflow < 0 &&\n                !flags.empty &&\n                !flags.invalidMonth &&\n                !flags.invalidWeekday &&\n                !flags.weekdayMismatch &&\n                !flags.nullInput &&\n                !flags.invalidFormat &&\n                !flags.userInvalidated &&\n                (!flags.meridiem || (flags.meridiem && parsedParts));\n\n            if (m._strict) {\n                isNowValid = isNowValid &&\n                    flags.charsLeftOver === 0 &&\n                    flags.unusedTokens.length === 0 &&\n                    flags.bigHour === undefined;\n            }\n\n            if (Object.isFrozen == null || !Object.isFrozen(m)) {\n                m._isValid = isNowValid;\n            }\n            else {\n                return isNowValid;\n            }\n        }\n        return m._isValid;\n    }\n\n    function createInvalid (flags) {\n        var m = 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    // Plugins that add properties should also add the key here (null value),\n    // so we can properly clone ourselves.\n    var momentProperties = 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 = 0; i < momentProperties.length; i++) {\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        if (!this.isValid()) {\n            this._d = new Date(NaN);\n        }\n        // Prevent infinite loop in case updateOffset creates new moment\n        // objects.\n        if (updateInProgress === false) {\n            updateInProgress = true;\n            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 (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 (hooks.deprecationHandler != null) {\n                hooks.deprecationHandler(null, msg);\n            }\n            if (firstTime) {\n                var args = [];\n                var arg;\n                for (var i = 0; i < arguments.length; i++) {\n                    arg = '';\n                    if (typeof arguments[i] === 'object') {\n                        arg += '\\n[' + i + '] ';\n                        for (var key in arguments[0]) {\n                            arg += key + ': ' + arguments[0][key] + ', ';\n                        }\n                        arg = arg.slice(0, -2); // Remove trailing comma and space\n                    } else {\n                        arg = arguments[i];\n                    }\n                    args.push(arg);\n                }\n                warn(msg + '\\nArguments: ' + Array.prototype.slice.call(args).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 (hooks.deprecationHandler != null) {\n            hooks.deprecationHandler(name, msg);\n        }\n        if (!deprecations[name]) {\n            warn(msg);\n            deprecations[name] = true;\n        }\n    }\n\n    hooks.suppressDeprecationWarnings = false;\n    hooks.deprecationHandler = null;\n\n    function isFunction(input) {\n        return input instanceof Function || Object.prototype.toString.call(input) === '[object Function]';\n    }\n\n    function 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 _dayOfMonthOrdinalParse.\n        // TODO: Remove \"ordinalParse\" fallback in next major release.\n        this._dayOfMonthOrdinalParseLenient = new RegExp(\n            (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +\n                '|' + (/\\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 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 defaultDayOfMonthOrdinalParse = /\\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        ss : '%d 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 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 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 += isFunction(array[i]) ? 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]{0,256}['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF07\\uFF10-\\uFFEF]{1,256}|[\\u0600-\\u06FF\\/]{1,256}(\\s*?[\\u0600-\\u06FF]{1,256}){1,2}/i;\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 (isNumber(callback)) {\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    // 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 ? hooks.parseTwoDigitYear(input) : toInt(input);\n    });\n    addParseToken('YY', function (input, array) {\n        array[YEAR] = 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    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 makeGetSet (unit, keepTime) {\n        return function (value) {\n            if (value != null) {\n                set$1(this, unit, value);\n                hooks.updateOffset(this, keepTime);\n                return this;\n            } else {\n                return get(this, unit);\n            }\n        };\n    }\n\n    function get (mom, unit) {\n        return mom.isValid() ?\n            mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]() : NaN;\n    }\n\n    function set$1 (mom, unit, value) {\n        if (mom.isValid() && !isNaN(value)) {\n            if (unit === 'FullYear' && isLeapYear(mom.year()) && mom.month() === 1 && mom.date() === 29) {\n                mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value, mom.month(), daysInMonth(value, mom.month()));\n            }\n            else {\n                mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);\n            }\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 mod(n, x) {\n        return ((n % x) + x) % x;\n    }\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        if (isNaN(year) || isNaN(month)) {\n            return NaN;\n        }\n        var modMonth = mod(month, 12);\n        year += (month - modMonth) / 12;\n        return modMonth === 1 ? (isLeapYear(year) ? 29 : 28) : (31 - modMonth % 7 % 2);\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        if (!m) {\n            return isArray(this._months) ? this._months :\n                this._months['standalone'];\n        }\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        if (!m) {\n            return isArray(this._monthsShort) ? this._monthsShort :\n                this._monthsShort['standalone'];\n        }\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 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 = 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 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 = 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 (!isNumber(value)) {\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            hooks.updateOffset(this, true);\n            return this;\n        } else {\n            return 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 = 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    function createDate (y, m, d, h, M, s, ms) {\n        // can't just apply() to create a date:\n        // https://stackoverflow.com/q/181348\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    // https://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        if (!m) {\n            return isArray(this._weekdays) ? this._weekdays :\n                this._weekdays['standalone'];\n        }\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 (m) ? this._weekdaysShort[m.day()] : this._weekdaysShort;\n    }\n\n    var defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_');\n    function localeWeekdaysMin (m) {\n        return (m) ? this._weekdaysMin[m.day()] : this._weekdaysMin;\n    }\n\n    function handleStrictParse$1(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 = 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 handleStrictParse$1.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 = 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 = 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('k',  match1to2);\n    addRegexToken('HH', match1to2, match2);\n    addRegexToken('hh', match1to2, match2);\n    addRegexToken('kk', 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(['k', 'kk'], function (input, array, config) {\n        var kInput = toInt(input);\n        array[HOUR] = kInput === 24 ? 0 : kInput;\n    });\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 they want. 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        dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,\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 localeFamilies = {};\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 globalLocale;\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                var aliasedRequire = require;\n                __webpack_require__(\"./node_modules/moment/locale sync recursive ^\\\\.\\\\/.*$\")(\"./\" + name);\n                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 getSetGlobalLocale (key, values) {\n        var data;\n        if (key) {\n            if (isUndefined(values)) {\n                data = 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            else {\n                if ((typeof console !==  'undefined') && console.warn) {\n                    //warn user if arguments are passed but the locale could not be set\n                    console.warn('Locale ' + key +  ' not found. Did you forget to load it?');\n                }\n            }\n        }\n\n        return globalLocale._abbr;\n    }\n\n    function defineLocale (name, config) {\n        if (config !== null) {\n            var locale, 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                    locale = loadLocale(config.parentLocale);\n                    if (locale != null) {\n                        parentConfig = locale._config;\n                    } else {\n                        if (!localeFamilies[config.parentLocale]) {\n                            localeFamilies[config.parentLocale] = [];\n                        }\n                        localeFamilies[config.parentLocale].push({\n                            name: name,\n                            config: config\n                        });\n                        return null;\n                    }\n                }\n            }\n            locales[name] = new Locale(mergeConfigs(parentConfig, config));\n\n            if (localeFamilies[name]) {\n                localeFamilies[name].forEach(function (x) {\n                    defineLocale(x.name, x.config);\n                });\n            }\n\n            // backwards compat for now: also set the locale\n            // make sure we set the locale AFTER all child locales have been\n            // created, so we won't end up with the child locale set.\n            getSetGlobalLocale(name);\n\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, tmpLocale, parentConfig = baseConfig;\n            // MERGE\n            tmpLocale = loadLocale(name);\n            if (tmpLocale != null) {\n                parentConfig = tmpLocale._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            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 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 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    // 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(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, expectedWeekday, 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 != null) {\n            yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);\n\n            if (config._dayOfYear > daysInYear(yearToUse) || config._dayOfYear === 0) {\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        expectedWeekday = config._useUTC ? config._d.getUTCDay() : config._d.getDay();\n\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        // check for mismatching day of week\n        if (config._w && typeof config._w.d !== 'undefined' && config._w.d !== expectedWeekday) {\n            getParsingFlags(config).weekdayMismatch = true;\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(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            var curWeek = weekOfYear(createLocal(), dow, doy);\n\n            weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);\n\n            // Default to current week.\n            week = defaults(w.w, curWeek.week);\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    // 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    // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3\n    var rfc2822 = /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\\d{4}))$/;\n\n    function extractFromRFC2822Strings(yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr) {\n        var result = [\n            untruncateYear(yearStr),\n            defaultLocaleMonthsShort.indexOf(monthStr),\n            parseInt(dayStr, 10),\n            parseInt(hourStr, 10),\n            parseInt(minuteStr, 10)\n        ];\n\n        if (secondStr) {\n            result.push(parseInt(secondStr, 10));\n        }\n\n        return result;\n    }\n\n    function untruncateYear(yearStr) {\n        var year = parseInt(yearStr, 10);\n        if (year <= 49) {\n            return 2000 + year;\n        } else if (year <= 999) {\n            return 1900 + year;\n        }\n        return year;\n    }\n\n    function preprocessRFC2822(s) {\n        // Remove comments and folding whitespace and replace multiple-spaces with a single space\n        return s.replace(/\\([^)]*\\)|[\\n\\t]/g, ' ').replace(/(\\s\\s+)/g, ' ').replace(/^\\s\\s*/, '').replace(/\\s\\s*$/, '');\n    }\n\n    function checkWeekday(weekdayStr, parsedInput, config) {\n        if (weekdayStr) {\n            // TODO: Replace the vanilla JS Date object with an indepentent day-of-week check.\n            var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),\n                weekdayActual = new Date(parsedInput[0], parsedInput[1], parsedInput[2]).getDay();\n            if (weekdayProvided !== weekdayActual) {\n                getParsingFlags(config).weekdayMismatch = true;\n                config._isValid = false;\n                return false;\n            }\n        }\n        return true;\n    }\n\n    var obsOffsets = {\n        UT: 0,\n        GMT: 0,\n        EDT: -4 * 60,\n        EST: -5 * 60,\n        CDT: -5 * 60,\n        CST: -6 * 60,\n        MDT: -6 * 60,\n        MST: -7 * 60,\n        PDT: -7 * 60,\n        PST: -8 * 60\n    };\n\n    function calculateOffset(obsOffset, militaryOffset, numOffset) {\n        if (obsOffset) {\n            return obsOffsets[obsOffset];\n        } else if (militaryOffset) {\n            // the only allowed military tz is Z\n            return 0;\n        } else {\n            var hm = parseInt(numOffset, 10);\n            var m = hm % 100, h = (hm - m) / 100;\n            return h * 60 + m;\n        }\n    }\n\n    // date and time from ref 2822 format\n    function configFromRFC2822(config) {\n        var match = rfc2822.exec(preprocessRFC2822(config._i));\n        if (match) {\n            var parsedArray = extractFromRFC2822Strings(match[4], match[3], match[2], match[5], match[6], match[7]);\n            if (!checkWeekday(match[1], parsedArray, config)) {\n                return;\n            }\n\n            config._a = parsedArray;\n            config._tzm = calculateOffset(match[8], match[9], match[10]);\n\n            config._d = createUTCDate.apply(null, config._a);\n            config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n\n            getParsingFlags(config).rfc2822 = true;\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        } else {\n            return;\n        }\n\n        configFromRFC2822(config);\n        if (config._isValid === false) {\n            delete config._isValid;\n        } else {\n            return;\n        }\n\n        // Final attempt, use Input Fallback\n        hooks.createFromInputFallback(config);\n    }\n\n    hooks.createFromInputFallback = deprecate(\n        'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +\n        'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +\n        'discouraged and will be removed in an upcoming major 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    // constant that refers to the ISO standard\n    hooks.ISO_8601 = function () {};\n\n    // constant that refers to the RFC 2822 form\n    hooks.RFC_2822 = 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 === hooks.ISO_8601) {\n            configFromISO(config);\n            return;\n        }\n        if (config._f === hooks.RFC_2822) {\n            configFromRFC2822(config);\n            return;\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 (!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 || getLocale(config._l);\n\n        if (input === null || (format === undefined && input === '')) {\n            return 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 (isDate(input)) {\n            config._d = input;\n        } else if (isArray(format)) {\n            configFromStringAndArray(config);\n        } else if (format) {\n            configFromStringAndFormat(config);\n        }  else {\n            configFromInput(config);\n        }\n\n        if (!isValid(config)) {\n            config._d = null;\n        }\n\n        return config;\n    }\n\n    function configFromInput(config) {\n        var input = config._i;\n        if (isUndefined(input)) {\n            config._d = new Date(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 (isObject(input)) {\n            configFromObject(config);\n        } else if (isNumber(input)) {\n            // from milliseconds\n            config._d = new Date(input);\n        } else {\n            hooks.createFromInputFallback(config);\n        }\n    }\n\n    function createLocalOrUTC (input, format, locale, strict, isUTC) {\n        var c = {};\n\n        if (locale === true || locale === false) {\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 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 = createLocal.apply(null, arguments);\n            if (this.isValid() && other.isValid()) {\n                return other < this ? this : other;\n            } else {\n                return 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 = createLocal.apply(null, arguments);\n            if (this.isValid() && other.isValid()) {\n                return other > this ? this : other;\n            } else {\n                return 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 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    var ordering = ['year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', 'millisecond'];\n\n    function isDurationValid(m) {\n        for (var key in m) {\n            if (!(indexOf.call(ordering, key) !== -1 && (m[key] == null || !isNaN(m[key])))) {\n                return false;\n            }\n        }\n\n        var unitHasDecimal = false;\n        for (var i = 0; i < ordering.length; ++i) {\n            if (m[ordering[i]]) {\n                if (unitHasDecimal) {\n                    return false; // only allow non-integers for smallest unit\n                }\n                if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {\n                    unitHasDecimal = true;\n                }\n            }\n        }\n\n        return true;\n    }\n\n    function isValid$1() {\n        return this._isValid;\n    }\n\n    function createInvalid$1() {\n        return createDuration(NaN);\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        this._isValid = isDurationValid(normalizedInput);\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 to 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 = getLocale();\n\n        this._bubble();\n    }\n\n    function isDuration (obj) {\n        return obj instanceof Duration;\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    // 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\n        if (matches === null) {\n            return null;\n        }\n\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 minutes === 0 ?\n          0 :\n          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() : 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            hooks.updateOffset(res, false);\n            return res;\n        } else {\n            return 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    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, keepMinutes) {\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                if (input === null) {\n                    return this;\n                }\n            } else if (Math.abs(input) < 16 && !keepMinutes) {\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                    addSubtract(this, createDuration(input - offset, 'm'), 1, false);\n                } else if (!this._changeInProgress) {\n                    this._changeInProgress = true;\n                    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 != null) {\n            this.utcOffset(this._tzm, false, true);\n        } else if (typeof this._i === 'string') {\n            var tZone = offsetFromString(matchOffset, this._i);\n            if (tZone != null) {\n                this.utcOffset(tZone);\n            }\n            else {\n                this.utcOffset(0, true);\n            }\n        }\n        return this;\n    }\n\n    function hasAlignedHourOffset (input) {\n        if (!this.isValid()) {\n            return false;\n        }\n        input = input ? 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 ? createUTC(c._a) : 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*)?)?$/;\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 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 (isNumber(input)) {\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(absRound(match[MILLISECOND] * 1000)) * sign // the millisecond decimal point is included in the match\n            };\n        } else if (!!(match = isoRegex.exec(input))) {\n            sign = (match[1] === '-') ? -1 : (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(createLocal(duration.from), 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    createDuration.fn = Duration.prototype;\n    createDuration.invalid = createInvalid$1;\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    // 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 = createDuration(val, period);\n            addSubtract(this, dur, direction);\n            return this;\n        };\n    }\n\n    function 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 (months) {\n            setMonth(mom, get(mom, 'Month') + months * isAdding);\n        }\n        if (days) {\n            set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);\n        }\n        if (milliseconds) {\n            mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);\n        }\n        if (updateOffset) {\n            hooks.updateOffset(mom, days || months);\n        }\n    }\n\n    var add      = createAdder(1, 'add');\n    var 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 calendar$1 (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 || createLocal(),\n            sod = cloneWithOffset(now, this).startOf('day'),\n            format = 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, 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 : 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 : 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 : 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            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        switch (units) {\n            case 'year': output = monthDiff(this, that) / 12; break;\n            case 'month': output = monthDiff(this, that); break;\n            case 'quarter': output = monthDiff(this, that) / 3; break;\n            case 'second': output = (this - that) / 1e3; break; // 1000\n            case 'minute': output = (this - that) / 6e4; break; // 1000 * 60\n            case 'hour': output = (this - that) / 36e5; break; // 1000 * 60 * 60\n            case 'day': output = (this - that - zoneDelta) / 864e5; break; // 1000 * 60 * 60 * 24, negate dst\n            case 'week': output = (this - that - zoneDelta) / 6048e5; break; // 1000 * 60 * 60 * 24 * 7, negate dst\n            default: output = this - that;\n        }\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    hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';\n    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 toISOString(keepOffset) {\n        if (!this.isValid()) {\n            return null;\n        }\n        var utc = keepOffset !== true;\n        var m = utc ? this.clone().utc() : this;\n        if (m.year() < 0 || m.year() > 9999) {\n            return formatMoment(m, utc ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ');\n        }\n        if (isFunction(Date.prototype.toISOString)) {\n            // native implementation is ~50x faster, use it when we can\n            if (utc) {\n                return this.toDate().toISOString();\n            } else {\n                return new Date(this.valueOf() + this.utcOffset() * 60 * 1000).toISOString().replace('Z', formatMoment(m, 'Z'));\n            }\n        }\n        return formatMoment(m, utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ');\n    }\n\n    /**\n     * Return a human readable representation of a moment that can\n     * also be evaluated to get a new moment which is the same\n     *\n     * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects\n     */\n    function inspect () {\n        if (!this.isValid()) {\n            return 'moment.invalid(/* ' + this._i + ' */)';\n        }\n        var func = 'moment';\n        var zone = '';\n        if (!this.isLocal()) {\n            func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';\n            zone = 'Z';\n        }\n        var prefix = '[' + func + '(\"]';\n        var year = (0 <= this.year() && this.year() <= 9999) ? 'YYYY' : 'YYYYYY';\n        var datetime = '-MM-DD[T]HH:mm:ss.SSS';\n        var suffix = zone + '[\")]';\n\n        return this.format(prefix + year + datetime + suffix);\n    }\n\n    function format (inputString) {\n        if (!inputString) {\n            inputString = this.isUtc() ? hooks.defaultFormatUtc : 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                 createLocal(time).isValid())) {\n            return 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(createLocal(), withoutSuffix);\n    }\n\n    function to (time, withoutSuffix) {\n        if (this.isValid() &&\n                ((isMoment(time) && time.isValid()) ||\n                 createLocal(time).isValid())) {\n            return 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(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 = 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 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 isValid$2 () {\n        return 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] = 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    // PRIORITY\n    addUnitPriority('date', 9);\n\n    // PARSING\n\n    addRegexToken('D',  match1to2);\n    addRegexToken('DD', match1to2, match2);\n    addRegexToken('Do', function (isStrict, locale) {\n        // TODO: Remove \"ordinalParse\" fallback in next major release.\n        return isStrict ?\n          (locale._dayOfMonthOrdinalParse || locale._ordinalParse) :\n          locale._dayOfMonthOrdinalParseLenient;\n    });\n\n    addParseToken(['D', 'DD'], DATE);\n    addParseToken('Do', function (input, array) {\n        array[DATE] = toInt(input.match(match1to2)[0]);\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 proto = Moment.prototype;\n\n    proto.add               = add;\n    proto.calendar          = calendar$1;\n    proto.clone             = clone;\n    proto.diff              = diff;\n    proto.endOf             = endOf;\n    proto.format            = format;\n    proto.from              = from;\n    proto.fromNow           = fromNow;\n    proto.to                = to;\n    proto.toNow             = toNow;\n    proto.get               = stringGet;\n    proto.invalidAt         = invalidAt;\n    proto.isAfter           = isAfter;\n    proto.isBefore          = isBefore;\n    proto.isBetween         = isBetween;\n    proto.isSame            = isSame;\n    proto.isSameOrAfter     = isSameOrAfter;\n    proto.isSameOrBefore    = isSameOrBefore;\n    proto.isValid           = isValid$2;\n    proto.lang              = lang;\n    proto.locale            = locale;\n    proto.localeData        = localeData;\n    proto.max               = prototypeMax;\n    proto.min               = prototypeMin;\n    proto.parsingFlags      = parsingFlags;\n    proto.set               = stringSet;\n    proto.startOf           = startOf;\n    proto.subtract          = subtract;\n    proto.toArray           = toArray;\n    proto.toObject          = toObject;\n    proto.toDate            = toDate;\n    proto.toISOString       = toISOString;\n    proto.inspect           = inspect;\n    proto.toJSON            = toJSON;\n    proto.toString          = toString;\n    proto.unix              = unix;\n    proto.valueOf           = valueOf;\n    proto.creationData      = creationData;\n    proto.year       = getSetYear;\n    proto.isLeapYear = getIsLeapYear;\n    proto.weekYear    = getSetWeekYear;\n    proto.isoWeekYear = getSetISOWeekYear;\n    proto.quarter = proto.quarters = getSetQuarter;\n    proto.month       = getSetMonth;\n    proto.daysInMonth = getDaysInMonth;\n    proto.week           = proto.weeks        = getSetWeek;\n    proto.isoWeek        = proto.isoWeeks     = getSetISOWeek;\n    proto.weeksInYear    = getWeeksInYear;\n    proto.isoWeeksInYear = getISOWeeksInYear;\n    proto.date       = getSetDayOfMonth;\n    proto.day        = proto.days             = getSetDayOfWeek;\n    proto.weekday    = getSetLocaleDayOfWeek;\n    proto.isoWeekday = getSetISODayOfWeek;\n    proto.dayOfYear  = getSetDayOfYear;\n    proto.hour = proto.hours = getSetHour;\n    proto.minute = proto.minutes = getSetMinute;\n    proto.second = proto.seconds = getSetSecond;\n    proto.millisecond = proto.milliseconds = getSetMillisecond;\n    proto.utcOffset            = getSetOffset;\n    proto.utc                  = setOffsetToUTC;\n    proto.local                = setOffsetToLocal;\n    proto.parseZone            = setOffsetToParsedOffset;\n    proto.hasAlignedHourOffset = hasAlignedHourOffset;\n    proto.isDST                = isDaylightSavingTime;\n    proto.isLocal              = isLocal;\n    proto.isUtcOffset          = isUtcOffset;\n    proto.isUtc                = isUtc;\n    proto.isUTC                = isUtc;\n    proto.zoneAbbr = getZoneAbbr;\n    proto.zoneName = getZoneName;\n    proto.dates  = deprecate('dates accessor is deprecated. Use date instead.', getSetDayOfMonth);\n    proto.months = deprecate('months accessor is deprecated. Use month instead', getSetMonth);\n    proto.years  = deprecate('years accessor is deprecated. Use year instead', getSetYear);\n    proto.zone   = deprecate('moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/', getSetZone);\n    proto.isDSTShifted = deprecate('isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information', isDaylightSavingTimeShifted);\n\n    function createUnix (input) {\n        return createLocal(input * 1000);\n    }\n\n    function createInZone () {\n        return createLocal.apply(null, arguments).parseZone();\n    }\n\n    function preParsePostFormat (string) {\n        return string;\n    }\n\n    var proto$1 = Locale.prototype;\n\n    proto$1.calendar        = calendar;\n    proto$1.longDateFormat  = longDateFormat;\n    proto$1.invalidDate     = invalidDate;\n    proto$1.ordinal         = ordinal;\n    proto$1.preparse        = preParsePostFormat;\n    proto$1.postformat      = preParsePostFormat;\n    proto$1.relativeTime    = relativeTime;\n    proto$1.pastFuture      = pastFuture;\n    proto$1.set             = set;\n\n    proto$1.months            =        localeMonths;\n    proto$1.monthsShort       =        localeMonthsShort;\n    proto$1.monthsParse       =        localeMonthsParse;\n    proto$1.monthsRegex       = monthsRegex;\n    proto$1.monthsShortRegex  = monthsShortRegex;\n    proto$1.week = localeWeek;\n    proto$1.firstDayOfYear = localeFirstDayOfYear;\n    proto$1.firstDayOfWeek = localeFirstDayOfWeek;\n\n    proto$1.weekdays       =        localeWeekdays;\n    proto$1.weekdaysMin    =        localeWeekdaysMin;\n    proto$1.weekdaysShort  =        localeWeekdaysShort;\n    proto$1.weekdaysParse  =        localeWeekdaysParse;\n\n    proto$1.weekdaysRegex       =        weekdaysRegex;\n    proto$1.weekdaysShortRegex  =        weekdaysShortRegex;\n    proto$1.weekdaysMinRegex    =        weekdaysMinRegex;\n\n    proto$1.isPM = localeIsPM;\n    proto$1.meridiem = localeMeridiem;\n\n    function get$1 (format, index, field, setter) {\n        var locale = getLocale();\n        var utc = createUTC().set(setter, index);\n        return locale[field](utc, format);\n    }\n\n    function listMonthsImpl (format, index, field) {\n        if (isNumber(format)) {\n            index = format;\n            format = undefined;\n        }\n\n        format = format || '';\n\n        if (index != null) {\n            return get$1(format, index, field, 'month');\n        }\n\n        var i;\n        var out = [];\n        for (i = 0; i < 12; i++) {\n            out[i] = get$1(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 (isNumber(format)) {\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 (isNumber(format)) {\n                index = format;\n                format = undefined;\n            }\n\n            format = format || '';\n        }\n\n        var locale = getLocale(),\n            shift = localeSorted ? locale._week.dow : 0;\n\n        if (index != null) {\n            return get$1(format, (index + shift) % 7, field, 'day');\n        }\n\n        var i;\n        var out = [];\n        for (i = 0; i < 7; i++) {\n            out[i] = get$1(format, (i + shift) % 7, field, 'day');\n        }\n        return out;\n    }\n\n    function listMonths (format, index) {\n        return listMonthsImpl(format, index, 'months');\n    }\n\n    function listMonthsShort (format, index) {\n        return listMonthsImpl(format, index, 'monthsShort');\n    }\n\n    function listWeekdays (localeSorted, format, index) {\n        return listWeekdaysImpl(localeSorted, format, index, 'weekdays');\n    }\n\n    function listWeekdaysShort (localeSorted, format, index) {\n        return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');\n    }\n\n    function listWeekdaysMin (localeSorted, format, index) {\n        return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');\n    }\n\n    getSetGlobalLocale('en', {\n        dayOfMonthOrdinalParse: /\\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\n    hooks.lang = deprecate('moment.lang is deprecated. Use moment.locale instead.', getSetGlobalLocale);\n    hooks.langData = deprecate('moment.langData is deprecated. Use moment.localeData instead.', getLocale);\n\n    var mathAbs = Math.abs;\n\n    function 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 addSubtract$1 (duration, input, value, direction) {\n        var other = 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 add$1 (input, value) {\n        return addSubtract$1(this, input, value, 1);\n    }\n\n    // supports only 2.0-style subtract(1, 's') or subtract(duration)\n    function subtract$1 (input, value) {\n        return addSubtract$1(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        if (!this.isValid()) {\n            return NaN;\n        }\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 valueOf$1 () {\n        if (!this.isValid()) {\n            return NaN;\n        }\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 clone$1 () {\n        return createDuration(this);\n    }\n\n    function get$2 (units) {\n        units = normalizeUnits(units);\n        return this.isValid() ? this[units + 's']() : NaN;\n    }\n\n    function makeGetter(name) {\n        return function () {\n            return this.isValid() ? this._data[name] : NaN;\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        ss: 44,         // a few seconds to seconds\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 relativeTime$1 (posNegDuration, withoutSuffix, locale) {\n        var duration = 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.ss && ['s', seconds]  ||\n                seconds < thresholds.s   && ['ss', 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 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 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        if (threshold === 's') {\n            thresholds.ss = limit - 1;\n        }\n        return true;\n    }\n\n    function humanize (withSuffix) {\n        if (!this.isValid()) {\n            return this.localeData().invalidDate();\n        }\n\n        var locale = this.localeData();\n        var output = relativeTime$1(this, !withSuffix, locale);\n\n        if (withSuffix) {\n            output = locale.pastFuture(+this, output);\n        }\n\n        return locale.postformat(output);\n    }\n\n    var abs$1 = Math.abs;\n\n    function sign(x) {\n        return ((x > 0) - (x < 0)) || +x;\n    }\n\n    function toISOString$1() {\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        if (!this.isValid()) {\n            return this.localeData().invalidDate();\n        }\n\n        var seconds = abs$1(this._milliseconds) / 1000;\n        var days         = abs$1(this._days);\n        var months       = abs$1(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 ? seconds.toFixed(3).replace(/\\.?0+$/, '') : '';\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        var totalSign = total < 0 ? '-' : '';\n        var ymSign = sign(this._months) !== sign(total) ? '-' : '';\n        var daysSign = sign(this._days) !== sign(total) ? '-' : '';\n        var hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';\n\n        return totalSign + 'P' +\n            (Y ? ymSign + Y + 'Y' : '') +\n            (M ? ymSign + M + 'M' : '') +\n            (D ? daysSign + D + 'D' : '') +\n            ((h || m || s) ? 'T' : '') +\n            (h ? hmsSign + h + 'H' : '') +\n            (m ? hmsSign + m + 'M' : '') +\n            (s ? hmsSign + s + 'S' : '');\n    }\n\n    var proto$2 = Duration.prototype;\n\n    proto$2.isValid        = isValid$1;\n    proto$2.abs            = abs;\n    proto$2.add            = add$1;\n    proto$2.subtract       = subtract$1;\n    proto$2.as             = as;\n    proto$2.asMilliseconds = asMilliseconds;\n    proto$2.asSeconds      = asSeconds;\n    proto$2.asMinutes      = asMinutes;\n    proto$2.asHours        = asHours;\n    proto$2.asDays         = asDays;\n    proto$2.asWeeks        = asWeeks;\n    proto$2.asMonths       = asMonths;\n    proto$2.asYears        = asYears;\n    proto$2.valueOf        = valueOf$1;\n    proto$2._bubble        = bubble;\n    proto$2.clone          = clone$1;\n    proto$2.get            = get$2;\n    proto$2.milliseconds   = milliseconds;\n    proto$2.seconds        = seconds;\n    proto$2.minutes        = minutes;\n    proto$2.hours          = hours;\n    proto$2.days           = days;\n    proto$2.weeks          = weeks;\n    proto$2.months         = months;\n    proto$2.years          = years;\n    proto$2.humanize       = humanize;\n    proto$2.toISOString    = toISOString$1;\n    proto$2.toString       = toISOString$1;\n    proto$2.toJSON         = toISOString$1;\n    proto$2.locale         = locale;\n    proto$2.localeData     = localeData;\n\n    proto$2.toIsoString = deprecate('toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)', toISOString$1);\n    proto$2.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    hooks.version = '2.22.2';\n\n    setHookCallback(createLocal);\n\n    hooks.fn                    = proto;\n    hooks.min                   = min;\n    hooks.max                   = max;\n    hooks.now                   = now;\n    hooks.utc                   = createUTC;\n    hooks.unix                  = createUnix;\n    hooks.months                = listMonths;\n    hooks.isDate                = isDate;\n    hooks.locale                = getSetGlobalLocale;\n    hooks.invalid               = createInvalid;\n    hooks.duration              = createDuration;\n    hooks.isMoment              = isMoment;\n    hooks.weekdays              = listWeekdays;\n    hooks.parseZone             = createInZone;\n    hooks.localeData            = getLocale;\n    hooks.isDuration            = isDuration;\n    hooks.monthsShort           = listMonthsShort;\n    hooks.weekdaysMin           = listWeekdaysMin;\n    hooks.defineLocale          = defineLocale;\n    hooks.updateLocale          = updateLocale;\n    hooks.locales               = listLocales;\n    hooks.weekdaysShort         = listWeekdaysShort;\n    hooks.normalizeUnits        = normalizeUnits;\n    hooks.relativeTimeRounding  = getSetRelativeTimeRounding;\n    hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;\n    hooks.calendarFormat        = getCalendarFormat;\n    hooks.prototype             = proto;\n\n    // currently HTML5 input type only supports 24-hour formats\n    hooks.HTML5_FMT = {\n        DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm',             // <input type=\"datetime-local\" />\n        DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss',  // <input type=\"datetime-local\" step=\"1\" />\n        DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS',   // <input type=\"datetime-local\" step=\"0.001\" />\n        DATE: 'YYYY-MM-DD',                             // <input type=\"date\" />\n        TIME: 'HH:mm',                                  // <input type=\"time\" />\n        TIME_SECONDS: 'HH:mm:ss',                       // <input type=\"time\" step=\"1\" />\n        TIME_MS: 'HH:mm:ss.SSS',                        // <input type=\"time\" step=\"0.001\" />\n        WEEK: 'YYYY-[W]WW',                             // <input type=\"week\" />\n        MONTH: 'YYYY-MM'                                // <input type=\"month\" />\n    };\n\n    return hooks;\n\n})));\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../webpack/buildin/module.js */ \"./node_modules/webpack/buildin/module.js\")(module)))\n\n//# sourceURL=webpack:///./node_modules/moment/moment.js?");

/***/ }),

/***/ "./node_modules/numbro/dist/numbro.min.js":
/*!************************************************!*\
  !*** ./node_modules/numbro/dist/numbro.min.js ***!
  \************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("var require;var require;!function(e){if(true)module.exports=e();else {}}(function(){return function e(t,n,r){function i(o,u){if(!n[o]){if(!t[o]){var s=\"function\"==typeof require&&require;if(!u&&s)return require(o,!0);if(a)return a(o,!0);var c=new Error(\"Cannot find module '\"+o+\"'\");throw c.code=\"MODULE_NOT_FOUND\",c}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return i(n||e)},l,l.exports,e,t,n,r)}return n[o].exports}for(var a=\"function\"==typeof require&&require,o=0;o<r.length;o++)i(r[o]);return i}({1:[function(e,t,n){!function(e){\"use strict\";function n(e){function t(e,n){var r,i,a,o,u,s,c=this;if(!(c instanceof t))return q&&_(26,\"constructor call without new\",e),new t(e,n);if(null!=n&&Z(n,2,64,T,\"base\")){if(n|=0,s=e+\"\",10==n)return c=new t(e instanceof t?e:s),A(c,C+c.e+1,R);if((o=\"number\"==typeof e)&&0*e!=0||!new RegExp(\"^-?\"+(r=\"[\"+b.slice(0,n)+\"]+\")+\"(?:\\\\.\"+r+\")?$\",n<37?\"i\":\"\").test(s))return E(c,s,o,n);o?(c.s=1/e<0?(s=s.slice(1),-1):1,q&&s.replace(/^0\\.0*|\\./,\"\").length>15&&_(T,y,e),o=!1):c.s=45===s.charCodeAt(0)?(s=s.slice(1),-1):1,s=g(s,10,n,c.s)}else{if(e instanceof t)return c.s=e.s,c.e=e.e,c.c=(e=e.c)?e.slice():e,void(T=0);if((o=\"number\"==typeof e)&&0*e==0){if(c.s=1/e<0?(e=-e,-1):1,e===~~e){for(i=0,a=e;a>=10;a/=10,i++);return c.e=i,c.c=[e],void(T=0)}s=e+\"\"}else{if(!p.test(s=e+\"\"))return E(c,s,o);c.s=45===s.charCodeAt(0)?(s=s.slice(1),-1):1}}for((i=s.indexOf(\".\"))>-1&&(s=s.replace(\".\",\"\")),(a=s.search(/e/i))>0?(i<0&&(i=a),i+=+s.slice(a+1),s=s.substring(0,a)):i<0&&(i=s.length),a=0;48===s.charCodeAt(a);a++);for(u=s.length;48===s.charCodeAt(--u););if(s=s.slice(a,u+1))if(u=s.length,o&&q&&u>15&&(e>S||e!==h(e))&&_(T,y,c.s*e),(i=i-a-1)>V)c.c=c.e=null;else if(i<I)c.c=[c.e=0];else{if(c.e=i,c.c=[],a=(i+1)%x,i<0&&(a+=x),a<u){for(a&&c.c.push(+s.slice(0,a)),u-=x;a<u;)c.c.push(+s.slice(a,a+=x));s=s.slice(a),a=x-s.length}else a-=u;for(;a--;s+=\"0\");c.c.push(+s)}else c.c=[c.e=0];T=0}function g(e,n,r,a){var o,u,c,f,g,p,d,h=e.indexOf(\".\"),v=C,m=R;for(r<37&&(e=e.toLowerCase()),h>=0&&(c=W,W=0,e=e.replace(\".\",\"\"),g=(d=new t(r)).pow(e.length-h),W=c,d.c=s(l(i(g.c),g.e),10,n),d.e=d.c.length),u=c=(p=s(e,r,n)).length;0==p[--c];p.pop());if(!p[0])return\"0\";if(h<0?--u:(g.c=p,g.e=u,g.s=a,p=(g=L(g,d,v,m,n)).c,f=g.r,u=g.e),o=u+v+1,h=p[o],c=n/2,f=f||o<0||null!=p[o+1],f=m<4?(null!=h||f)&&(0==m||m==(g.s<0?3:2)):h>c||h==c&&(4==m||f||6==m&&1&p[o-1]||m==(g.s<0?8:7)),o<1||!p[0])e=f?l(\"1\",-v):\"0\";else{if(p.length=o,f)for(--n;++p[--o]>n;)p[o]=0,o||(++u,p=[1].concat(p));for(c=p.length;!p[--c];);for(h=0,e=\"\";h<=c;e+=b.charAt(p[h++]));e=l(e,u)}return e}function F(e,n,r,a){var o,u,s,f,g;if(r=null!=r&&Z(r,0,8,a,m)?0|r:R,!e.c)return e.toString();if(o=e.c[0],s=e.e,null==n)g=i(e.c),g=19==a||24==a&&s<=$?c(g,s):l(g,s);else if(e=A(new t(e),n,r),u=e.e,g=i(e.c),f=g.length,19==a||24==a&&(n<=u||u<=$)){for(;f<n;g+=\"0\",f++);g=c(g,u)}else if(n-=s,g=l(g,u),u+1>f){if(--n>0)for(g+=\".\";n--;g+=\"0\");}else if((n+=u-f)>0)for(u+1==f&&(g+=\".\");n--;g+=\"0\");return e.s<0&&o?\"-\"+g:g}function D(e,n){var r,i,a=0;for(u(e[0])&&(e=e[0]),r=new t(e[0]);++a<e.length;){if(!(i=new t(e[a])).s){r=i;break}n.call(r,i)&&(r=i)}return r}function B(e,t,n,r,i){return(e<t||e>n||e!=f(e))&&_(r,(i||\"decimal places\")+(e<t||e>n?\" out of range\":\" not an integer\"),e),!0}function k(e,t,n){for(var r=1,i=t.length;!t[--i];t.pop());for(i=t[0];i>=10;i/=10,r++);return(n=r+n*x-1)>V?e.c=e.e=null:n<I?e.c=[e.e=0]:(e.e=n,e.c=t),e}function _(e,t,n){var r=new Error([\"new BigNumber\",\"cmp\",\"config\",\"div\",\"divToInt\",\"eq\",\"gt\",\"gte\",\"lt\",\"lte\",\"minus\",\"mod\",\"plus\",\"precision\",\"random\",\"round\",\"shift\",\"times\",\"toDigits\",\"toExponential\",\"toFixed\",\"toFormat\",\"toFraction\",\"pow\",\"toPrecision\",\"toString\",\"BigNumber\"][e]+\"() \"+t+\": \"+n);throw r.name=\"BigNumber Error\",T=0,r}function A(e,t,n,r){var i,a,o,u,s,c,l,f=e.c,g=N;if(f){e:{for(i=1,u=f[0];u>=10;u/=10,i++);if((a=t-i)<0)a+=x,o=t,l=(s=f[c=0])/g[i-o-1]%10|0;else if((c=d((a+1)/x))>=f.length){if(!r)break e;for(;f.length<=c;f.push(0));s=l=0,i=1,o=(a%=x)-x+1}else{for(s=u=f[c],i=1;u>=10;u/=10,i++);l=(o=(a%=x)-x+i)<0?0:s/g[i-o-1]%10|0}if(r=r||t<0||null!=f[c+1]||(o<0?s:s%g[i-o-1]),r=n<4?(l||r)&&(0==n||n==(e.s<0?3:2)):l>5||5==l&&(4==n||r||6==n&&(a>0?o>0?s/g[i-o]:0:f[c-1])%10&1||n==(e.s<0?8:7)),t<1||!f[0])return f.length=0,r?(t-=e.e+1,f[0]=g[(x-t%x)%x],e.e=-t||0):f[0]=e.e=0,e;if(0==a?(f.length=c,u=1,c--):(f.length=c+1,u=g[x-a],f[c]=o>0?h(s/g[i-o]%g[o])*u:0),r)for(;;){if(0==c){for(a=1,o=f[0];o>=10;o/=10,a++);for(o=f[0]+=u,u=1;o>=10;o/=10,u++);a!=u&&(e.e++,f[0]==w&&(f[0]=1));break}if(f[c]+=u,f[c]!=w)break;f[c--]=0,u=1}for(a=f.length;0===f[--a];f.pop());}e.e>V?e.c=e.e=null:e.e<I&&(e.c=[e.e=0])}return e}var L,E,T=0,U=t.prototype,j=new t(1),C=20,R=4,$=-7,P=21,I=-1e7,V=1e7,q=!0,Z=B,z=!1,G=1,W=0,H={decimalSeparator:\".\",groupSeparator:\",\",groupSize:3,secondaryGroupSize:0,fractionGroupSeparator:\" \",fractionGroupSize:0};return t.another=n,t.ROUND_UP=0,t.ROUND_DOWN=1,t.ROUND_CEIL=2,t.ROUND_FLOOR=3,t.ROUND_HALF_UP=4,t.ROUND_HALF_DOWN=5,t.ROUND_HALF_EVEN=6,t.ROUND_HALF_CEIL=7,t.ROUND_HALF_FLOOR=8,t.EUCLID=9,t.config=t.set=function(){var e,t,n=0,r={},i=arguments,a=i[0],s=a&&\"object\"==typeof a?function(){if(a.hasOwnProperty(t))return null!=(e=a[t])}:function(){if(i.length>n)return null!=(e=i[n++])};return s(t=\"DECIMAL_PLACES\")&&Z(e,0,M,2,t)&&(C=0|e),r[t]=C,s(t=\"ROUNDING_MODE\")&&Z(e,0,8,2,t)&&(R=0|e),r[t]=R,s(t=\"EXPONENTIAL_AT\")&&(u(e)?Z(e[0],-M,0,2,t)&&Z(e[1],0,M,2,t)&&($=0|e[0],P=0|e[1]):Z(e,-M,M,2,t)&&($=-(P=0|(e<0?-e:e)))),r[t]=[$,P],s(t=\"RANGE\")&&(u(e)?Z(e[0],-M,-1,2,t)&&Z(e[1],1,M,2,t)&&(I=0|e[0],V=0|e[1]):Z(e,-M,M,2,t)&&(0|e?I=-(V=0|(e<0?-e:e)):q&&_(2,t+\" cannot be zero\",e))),r[t]=[I,V],s(t=\"ERRORS\")&&(e===!!e||1===e||0===e?(T=0,Z=(q=!!e)?B:o):q&&_(2,t+v,e)),r[t]=q,s(t=\"CRYPTO\")&&(!0===e||!1===e||1===e||0===e?e?!(e=\"undefined\"==typeof crypto)&&crypto&&(crypto.getRandomValues||crypto.randomBytes)?z=!0:q?_(2,\"crypto unavailable\",e?void 0:crypto):z=!1:z=!1:q&&_(2,t+v,e)),r[t]=z,s(t=\"MODULO_MODE\")&&Z(e,0,9,2,t)&&(G=0|e),r[t]=G,s(t=\"POW_PRECISION\")&&Z(e,0,M,2,t)&&(W=0|e),r[t]=W,s(t=\"FORMAT\")&&(\"object\"==typeof e?H=e:q&&_(2,t+\" not an object\",e)),r[t]=H,r},t.max=function(){return D(arguments,U.lt)},t.min=function(){return D(arguments,U.gt)},t.random=function(){var e=9007199254740992*Math.random()&2097151?function(){return h(9007199254740992*Math.random())}:function(){return 8388608*(1073741824*Math.random()|0)+(8388608*Math.random()|0)};return function(n){var r,i,a,o,u,s=0,c=[],l=new t(j);if(n=null!=n&&Z(n,0,M,14)?0|n:C,o=d(n/x),z)if(crypto.getRandomValues){for(r=crypto.getRandomValues(new Uint32Array(o*=2));s<o;)(u=131072*r[s]+(r[s+1]>>>11))>=9e15?(i=crypto.getRandomValues(new Uint32Array(2)),r[s]=i[0],r[s+1]=i[1]):(c.push(u%1e14),s+=2);s=o/2}else if(crypto.randomBytes){for(r=crypto.randomBytes(o*=7);s<o;)(u=281474976710656*(31&r[s])+1099511627776*r[s+1]+4294967296*r[s+2]+16777216*r[s+3]+(r[s+4]<<16)+(r[s+5]<<8)+r[s+6])>=9e15?crypto.randomBytes(7).copy(r,s):(c.push(u%1e14),s+=7);s=o/7}else z=!1,q&&_(14,\"crypto unavailable\",crypto);if(!z)for(;s<o;)(u=e())<9e15&&(c[s++]=u%1e14);for(o=c[--s],n%=x,o&&n&&(u=N[x-n],c[s]=h(o/u)*u);0===c[s];c.pop(),s--);if(s<0)c=[a=0];else{for(a=-1;0===c[0];c.splice(0,1),a-=x);for(s=1,u=c[0];u>=10;u/=10,s++);s<x&&(a-=x-s)}return l.e=a,l.c=c,l}}(),L=function(){function e(e,t,n){var r,i,a,o,u=0,s=e.length,c=t%O,l=t/O|0;for(e=e.slice();s--;)u=((i=c*(a=e[s]%O)+(r=l*a+(o=e[s]/O|0)*c)%O*O+u)/n|0)+(r/O|0)+l*o,e[s]=i%n;return u&&(e=[u].concat(e)),e}function n(e,t,n,r){var i,a;if(n!=r)a=n>r?1:-1;else for(i=a=0;i<n;i++)if(e[i]!=t[i]){a=e[i]>t[i]?1:-1;break}return a}function i(e,t,n,r){for(var i=0;n--;)e[n]-=i,i=e[n]<t[n]?1:0,e[n]=i*r+e[n]-t[n];for(;!e[0]&&e.length>1;e.splice(0,1));}return function(a,o,u,s,c){var l,f,g,p,d,v,m,y,b,S,N,O,M,F,D,B,k,_=a.s==o.s?1:-1,L=a.c,E=o.c;if(!(L&&L[0]&&E&&E[0]))return new t(a.s&&o.s&&(L?!E||L[0]!=E[0]:E)?L&&0==L[0]||!E?0*_:_/0:NaN);for(b=(y=new t(_)).c=[],_=u+(f=a.e-o.e)+1,c||(c=w,f=r(a.e/x)-r(o.e/x),_=_/x|0),g=0;E[g]==(L[g]||0);g++);if(E[g]>(L[g]||0)&&f--,_<0)b.push(1),p=!0;else{for(F=L.length,B=E.length,g=0,_+=2,(d=h(c/(E[0]+1)))>1&&(E=e(E,d,c),L=e(L,d,c),B=E.length,F=L.length),M=B,N=(S=L.slice(0,B)).length;N<B;S[N++]=0);k=E.slice(),k=[0].concat(k),D=E[0],E[1]>=c/2&&D++;do{if(d=0,(l=n(E,S,B,N))<0){if(O=S[0],B!=N&&(O=O*c+(S[1]||0)),(d=h(O/D))>1)for(d>=c&&(d=c-1),m=(v=e(E,d,c)).length,N=S.length;1==n(v,S,m,N);)d--,i(v,B<m?k:E,m,c),m=v.length,l=1;else 0==d&&(l=d=1),m=(v=E.slice()).length;if(m<N&&(v=[0].concat(v)),i(S,v,N,c),N=S.length,-1==l)for(;n(E,S,B,N)<1;)d++,i(S,B<N?k:E,N,c),N=S.length}else 0===l&&(d++,S=[0]);b[g++]=d,S[0]?S[N++]=L[M]||0:(S=[L[M]],N=1)}while((M++<F||null!=S[0])&&_--);p=null!=S[0],b[0]||b.splice(0,1)}if(c==w){for(g=1,_=b[0];_>=10;_/=10,g++);A(y,u+(y.e=g+f*x-1)+1,s,p)}else y.e=f,y.r=+p;return y}}(),E=function(){var e=/^(-?)0([xbo])(?=\\w[\\w.]*$)/i,n=/^([^.]+)\\.$/,r=/^\\.([^.]+)$/,i=/^-?(Infinity|NaN)$/,a=/^\\s*\\+(?=[\\w.])|^\\s+|\\s+$/g;return function(o,u,s,c){var l,f=s?u:u.replace(a,\"\");if(i.test(f))o.s=isNaN(f)?null:f<0?-1:1;else{if(!s&&(f=f.replace(e,function(e,t,n){return l=\"x\"==(n=n.toLowerCase())?16:\"b\"==n?2:8,c&&c!=l?e:t}),c&&(l=c,f=f.replace(n,\"$1\").replace(r,\"0.$1\")),u!=f))return new t(f,l);q&&_(T,\"not a\"+(c?\" base \"+c:\"\")+\" number\",u),o.s=null}o.c=o.e=null,T=0}}(),U.absoluteValue=U.abs=function(){var e=new t(this);return e.s<0&&(e.s=1),e},U.ceil=function(){return A(new t(this),this.e+1,2)},U.comparedTo=U.cmp=function(e,n){return T=1,a(this,new t(e,n))},U.decimalPlaces=U.dp=function(){var e,t,n=this.c;if(!n)return null;if(e=((t=n.length-1)-r(this.e/x))*x,t=n[t])for(;t%10==0;t/=10,e--);return e<0&&(e=0),e},U.dividedBy=U.div=function(e,n){return T=3,L(this,new t(e,n),C,R)},U.dividedToIntegerBy=U.divToInt=function(e,n){return T=4,L(this,new t(e,n),0,1)},U.equals=U.eq=function(e,n){return T=5,0===a(this,new t(e,n))},U.floor=function(){return A(new t(this),this.e+1,3)},U.greaterThan=U.gt=function(e,n){return T=6,a(this,new t(e,n))>0},U.greaterThanOrEqualTo=U.gte=function(e,n){return T=7,1===(n=a(this,new t(e,n)))||0===n},U.isFinite=function(){return!!this.c},U.isInteger=U.isInt=function(){return!!this.c&&r(this.e/x)>this.c.length-2},U.isNaN=function(){return!this.s},U.isNegative=U.isNeg=function(){return this.s<0},U.isZero=function(){return!!this.c&&0==this.c[0]},U.lessThan=U.lt=function(e,n){return T=8,a(this,new t(e,n))<0},U.lessThanOrEqualTo=U.lte=function(e,n){return T=9,-1===(n=a(this,new t(e,n)))||0===n},U.minus=U.sub=function(e,n){var i,a,o,u,s=this,c=s.s;if(T=10,e=new t(e,n),n=e.s,!c||!n)return new t(NaN);if(c!=n)return e.s=-n,s.plus(e);var l=s.e/x,f=e.e/x,g=s.c,p=e.c;if(!l||!f){if(!g||!p)return g?(e.s=-n,e):new t(p?s:NaN);if(!g[0]||!p[0])return p[0]?(e.s=-n,e):new t(g[0]?s:3==R?-0:0)}if(l=r(l),f=r(f),g=g.slice(),c=l-f){for((u=c<0)?(c=-c,o=g):(f=l,o=p),o.reverse(),n=c;n--;o.push(0));o.reverse()}else for(a=(u=(c=g.length)<(n=p.length))?c:n,c=n=0;n<a;n++)if(g[n]!=p[n]){u=g[n]<p[n];break}if(u&&(o=g,g=p,p=o,e.s=-e.s),(n=(a=p.length)-(i=g.length))>0)for(;n--;g[i++]=0);for(n=w-1;a>c;){if(g[--a]<p[a]){for(i=a;i&&!g[--i];g[i]=n);--g[i],g[a]+=w}g[a]-=p[a]}for(;0==g[0];g.splice(0,1),--f);return g[0]?k(e,g,f):(e.s=3==R?-1:1,e.c=[e.e=0],e)},U.modulo=U.mod=function(e,n){var r,i,a=this;return T=11,e=new t(e,n),!a.c||!e.s||e.c&&!e.c[0]?new t(NaN):!e.c||a.c&&!a.c[0]?new t(a):(9==G?(i=e.s,e.s=1,r=L(a,e,0,3),e.s=i,r.s*=i):r=L(a,e,0,G),a.minus(r.times(e)))},U.negated=U.neg=function(){var e=new t(this);return e.s=-e.s||null,e},U.plus=U.add=function(e,n){var i,a=this,o=a.s;if(T=12,e=new t(e,n),n=e.s,!o||!n)return new t(NaN);if(o!=n)return e.s=-n,a.minus(e);var u=a.e/x,s=e.e/x,c=a.c,l=e.c;if(!u||!s){if(!c||!l)return new t(o/0);if(!c[0]||!l[0])return l[0]?e:new t(c[0]?a:0*o)}if(u=r(u),s=r(s),c=c.slice(),o=u-s){for(o>0?(s=u,i=l):(o=-o,i=c),i.reverse();o--;i.push(0));i.reverse()}for((o=c.length)-(n=l.length)<0&&(i=l,l=c,c=i,n=o),o=0;n;)o=(c[--n]=c[n]+l[n]+o)/w|0,c[n]=w===c[n]?0:c[n]%w;return o&&(c=[o].concat(c),++s),k(e,c,s)},U.precision=U.sd=function(e){var t,n,r=this,i=r.c;if(null!=e&&e!==!!e&&1!==e&&0!==e&&(q&&_(13,\"argument\"+v,e),e!=!!e&&(e=null)),!i)return null;if(n=i.length-1,t=n*x+1,n=i[n]){for(;n%10==0;n/=10,t--);for(n=i[0];n>=10;n/=10,t++);}return e&&r.e+1>t&&(t=r.e+1),t},U.round=function(e,n){var r=new t(this);return(null==e||Z(e,0,M,15))&&A(r,~~e+this.e+1,null!=n&&Z(n,0,8,15,m)?0|n:R),r},U.shift=function(e){var n=this;return Z(e,-S,S,16,\"argument\")?n.times(\"1e\"+f(e)):new t(n.c&&n.c[0]&&(e<-S||e>S)?n.s*(e<0?0:1/0):n)},U.squareRoot=U.sqrt=function(){var e,n,a,o,u,s=this,c=s.c,l=s.s,f=s.e,g=C+4,p=new t(\"0.5\");if(1!==l||!c||!c[0])return new t(!l||l<0&&(!c||c[0])?NaN:c?s:1/0);if(0==(l=Math.sqrt(+s))||l==1/0?(((n=i(c)).length+f)%2==0&&(n+=\"0\"),l=Math.sqrt(n),f=r((f+1)/2)-(f<0||f%2),a=new t(n=l==1/0?\"1e\"+f:(n=l.toExponential()).slice(0,n.indexOf(\"e\")+1)+f)):a=new t(l+\"\"),a.c[0])for((l=(f=a.e)+g)<3&&(l=0);;)if(u=a,a=p.times(u.plus(L(s,u,g,1))),i(u.c).slice(0,l)===(n=i(a.c)).slice(0,l)){if(a.e<f&&--l,\"9999\"!=(n=n.slice(l-3,l+1))&&(o||\"4999\"!=n)){+n&&(+n.slice(1)||\"5\"!=n.charAt(0))||(A(a,a.e+C+2,1),e=!a.times(a).eq(s));break}if(!o&&(A(u,u.e+C+2,0),u.times(u).eq(s))){a=u;break}g+=4,l+=4,o=1}return A(a,a.e+C+1,R,e)},U.times=U.mul=function(e,n){var i,a,o,u,s,c,l,f,g,p,d,h,v,m,y,b=this,S=b.c,N=(T=17,e=new t(e,n)).c;if(!(S&&N&&S[0]&&N[0]))return!b.s||!e.s||S&&!S[0]&&!N||N&&!N[0]&&!S?e.c=e.e=e.s=null:(e.s*=b.s,S&&N?(e.c=[0],e.e=0):e.c=e.e=null),e;for(a=r(b.e/x)+r(e.e/x),e.s*=b.s,(l=S.length)<(p=N.length)&&(v=S,S=N,N=v,o=l,l=p,p=o),o=l+p,v=[];o--;v.push(0));for(m=w,y=O,o=p;--o>=0;){for(i=0,d=N[o]%y,h=N[o]/y|0,u=o+(s=l);u>o;)i=((f=d*(f=S[--s]%y)+(c=h*f+(g=S[s]/y|0)*d)%y*y+v[u]+i)/m|0)+(c/y|0)+h*g,v[u--]=f%m;v[u]=i}return i?++a:v.splice(0,1),k(e,v,a)},U.toDigits=function(e,n){var r=new t(this);return e=null!=e&&Z(e,1,M,18,\"precision\")?0|e:null,n=null!=n&&Z(n,0,8,18,m)?0|n:R,e?A(r,e,n):r},U.toExponential=function(e,t){return F(this,null!=e&&Z(e,0,M,19)?1+~~e:null,t,19)},U.toFixed=function(e,t){return F(this,null!=e&&Z(e,0,M,20)?~~e+this.e+1:null,t,20)},U.toFormat=function(e,t){var n=F(this,null!=e&&Z(e,0,M,21)?~~e+this.e+1:null,t,21);if(this.c){var r,i=n.split(\".\"),a=+H.groupSize,o=+H.secondaryGroupSize,u=H.groupSeparator,s=i[0],c=i[1],l=this.s<0,f=l?s.slice(1):s,g=f.length;if(o&&(r=a,a=o,o=r,g-=r),a>0&&g>0){for(r=g%a||a,s=f.substr(0,r);r<g;r+=a)s+=u+f.substr(r,a);o>0&&(s+=u+f.slice(r)),l&&(s=\"-\"+s)}n=c?s+H.decimalSeparator+((o=+H.fractionGroupSize)?c.replace(new RegExp(\"\\\\d{\"+o+\"}\\\\B\",\"g\"),\"$&\"+H.fractionGroupSeparator):c):s}return n},U.toFraction=function(e){var n,r,a,o,u,s,c,l,f,g=q,p=this,d=p.c,h=new t(j),v=r=new t(j),m=c=new t(j);if(null!=e&&(q=!1,s=new t(e),q=g,(g=s.isInt())&&!s.lt(j)||(q&&_(22,\"max denominator \"+(g?\"out of range\":\"not an integer\"),e),e=!g&&s.c&&A(s,s.e+1,1).gte(j)?s:null)),!d)return p.toString();for(f=i(d),o=h.e=f.length-p.e-1,h.c[0]=N[(u=o%x)<0?x+u:u],e=!e||s.cmp(h)>0?o>0?h:v:s,u=V,V=1/0,s=new t(f),c.c[0]=0;l=L(s,h,0,1),1!=(a=r.plus(l.times(m))).cmp(e);)r=m,m=a,v=c.plus(l.times(a=v)),c=a,h=s.minus(l.times(a=h)),s=a;return a=L(e.minus(r),m,0,1),c=c.plus(a.times(v)),r=r.plus(a.times(m)),c.s=v.s=p.s,o*=2,n=L(v,m,o,R).minus(p).abs().cmp(L(c,r,o,R).minus(p).abs())<1?[v.toString(),m.toString()]:[c.toString(),r.toString()],V=u,n},U.toNumber=function(){return+this},U.toPower=U.pow=function(e,n){var r,i,a,o=h(e<0?-e:+e),u=this;if(null!=n&&(T=23,n=new t(n)),!Z(e,-S,S,23,\"exponent\")&&(!isFinite(e)||o>S&&(e/=0)||parseFloat(e)!=e&&!(e=NaN))||0==e)return r=Math.pow(+u,e),new t(n?r%n:r);for(n?e>1&&u.gt(j)&&u.isInt()&&n.gt(j)&&n.isInt()?u=u.mod(n):(a=n,n=null):W&&(r=d(W/x+2)),i=new t(j);;){if(o%2){if(!(i=i.times(u)).c)break;r?i.c.length>r&&(i.c.length=r):n&&(i=i.mod(n))}if(!(o=h(o/2)))break;u=u.times(u),r?u.c&&u.c.length>r&&(u.c.length=r):n&&(u=u.mod(n))}return n?i:(e<0&&(i=j.div(i)),a?i.mod(a):r?A(i,W,R):i)},U.toPrecision=function(e,t){return F(this,null!=e&&Z(e,1,M,24,\"precision\")?0|e:null,t,24)},U.toString=function(e){var t,n=this,r=n.s,a=n.e;return null===a?r?(t=\"Infinity\",r<0&&(t=\"-\"+t)):t=\"NaN\":(t=i(n.c),t=null!=e&&Z(e,2,64,25,\"base\")?g(l(t,a),0|e,10,r):a<=$||a>=P?c(t,a):l(t,a),r<0&&n.c[0]&&(t=\"-\"+t)),t},U.truncated=U.trunc=function(){return A(new t(this),this.e+1,1)},U.valueOf=U.toJSON=function(){var e,t=this,n=t.e;return null===n?t.toString():(e=i(t.c),e=n<=$||n>=P?c(e,n):l(e,n),t.s<0?\"-\"+e:e)},U.isBigNumber=!0,null!=e&&t.config(e),t}function r(e){var t=0|e;return e>0||e===t?t:t-1}function i(e){for(var t,n,r=1,i=e.length,a=e[0]+\"\";r<i;){for(t=e[r++]+\"\",n=x-t.length;n--;t=\"0\"+t);a+=t}for(i=a.length;48===a.charCodeAt(--i););return a.slice(0,i+1||1)}function a(e,t){var n,r,i=e.c,a=t.c,o=e.s,u=t.s,s=e.e,c=t.e;if(!o||!u)return null;if(n=i&&!i[0],r=a&&!a[0],n||r)return n?r?0:-u:o;if(o!=u)return o;if(n=o<0,r=s==c,!i||!a)return r?0:!i^n?1:-1;if(!r)return s>c^n?1:-1;for(u=(s=i.length)<(c=a.length)?s:c,o=0;o<u;o++)if(i[o]!=a[o])return i[o]>a[o]^n?1:-1;return s==c?0:s>c^n?1:-1}function o(e,t,n){return(e=f(e))>=t&&e<=n}function u(e){return\"[object Array]\"==Object.prototype.toString.call(e)}function s(e,t,n){for(var r,i,a=[0],o=0,u=e.length;o<u;){for(i=a.length;i--;a[i]*=t);for(a[r=0]+=b.indexOf(e.charAt(o++));r<a.length;r++)a[r]>n-1&&(null==a[r+1]&&(a[r+1]=0),a[r+1]+=a[r]/n|0,a[r]%=n)}return a.reverse()}function c(e,t){return(e.length>1?e.charAt(0)+\".\"+e.slice(1):e)+(t<0?\"e\":\"e+\")+t}function l(e,t){var n,r;if(t<0){for(r=\"0.\";++t;r+=\"0\");e=r+e}else if(n=e.length,++t>n){for(r=\"0\",t-=n;--t;r+=\"0\");e+=r}else t<n&&(e=e.slice(0,t)+\".\"+e.slice(t));return e}function f(e){return(e=parseFloat(e))<0?d(e):h(e)}var g,p=/^-?(\\d+(\\.\\d*)?|\\.\\d+)(e[+-]?\\d+)?$/i,d=Math.ceil,h=Math.floor,v=\" not a boolean or binary digit\",m=\"rounding mode\",y=\"number type has more than 15 significant digits\",b=\"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_\",w=1e14,x=14,S=9007199254740991,N=[1,10,100,1e3,1e4,1e5,1e6,1e7,1e8,1e9,1e10,1e11,1e12,1e13],O=1e7,M=1e9;(g=n()).default=g.BigNumber=g,void 0!==t&&t.exports?t.exports=g:(e||(e=\"undefined\"!=typeof self?self:Function(\"return this\")()),e.BigNumber=g)}(this)},{}],2:[function(e,t,n){\"use strict\";t.exports={languageTag:\"en-US\",delimiters:{thousands:\",\",decimal:\".\"},abbreviations:{thousand:\"k\",million:\"m\",billion:\"b\",trillion:\"t\"},spaceSeparated:!1,ordinal:function(e){var t=e%10;return 1==~~(e%100/10)?\"th\":1===t?\"st\":2===t?\"nd\":3===t?\"rd\":\"th\"},currency:{symbol:\"$\",position:\"prefix\",code:\"USD\"},currencyFormat:{thousandSeparated:!0,totalLength:4,spaceSeparated:!0},formats:{fourDigits:{totalLength:4,spaceSeparated:!0},fullWithTwoDecimals:{output:\"currency\",thousandSeparated:!0,mantissa:2},fullWithTwoDecimalsNoCurrency:{thousandSeparated:!0,mantissa:2},fullWithNoDecimals:{output:\"currency\",thousandSeparated:!0,mantissa:0}}}},{}],3:[function(e,t,n){\"use strict\";function r(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2];if(\"string\"==typeof t&&(t=L.parseFormat(t)),!A.validateFormat(t))return\"ERROR: invalid format\";var r=t.prefix||\"\",a=t.postfix||\"\",o=i(e,t,n);return o=M(o,r),o=F(o,a)}function i(e,t,n){switch(t.output){case\"currency\":return t=B(t,_.currentCurrencyDefaultFormat()),p(e,t,_);case\"percent\":return t=B(t,_.currentPercentageDefaultFormat()),g(e,t,_,n);case\"byte\":return t=B(t,_.currentByteDefaultFormat()),c(e,t,_,n);case\"time\":return t=B(t,_.currentTimeDefaultFormat()),f(e);case\"ordinal\":return t=B(t,_.currentOrdinalDefaultFormat()),l(e,t,_);case\"number\":default:return D({instance:e,providedFormat:t,numbro:n})}}function a(e){var t=T.decimal;return s(e._value,t.suffixes,t.scale).suffix}function o(e){var t=T.binary;return s(e._value,t.suffixes,t.scale).suffix}function u(e){var t=T.general;return s(e._value,t.suffixes,t.scale).suffix}function s(e,t,n){var r=t[0],i=Math.abs(e);if(i>=n){for(var a=1;a<t.length;++a){var o=Math.pow(n,a),u=Math.pow(n,a+1);if(i>=o&&i<u){r=t[a],e/=o;break}}r===t[0]&&(e/=Math.pow(n,t.length-1),r=t[t.length-1])}return{value:e,suffix:r}}function c(e,t,n,r){var i=t.base||\"binary\",a=T[i],o=s(e._value,a.suffixes,a.scale),u=o.value,c=o.suffix;return D({instance:r(u),providedFormat:t,state:n,defaults:n.currentByteDefaultFormat()})+(n.currentAbbreviations().spaced?\" \":\"\")+c}function l(e,t,n){var r=n.currentOrdinal(),i=Object.assign({},U,t),a=D({instance:e,providedFormat:t,state:n}),o=r(e._value);return a+(i.spaceSeparated?\" \":\"\")+o}function f(e){var t=Math.floor(e._value/60/60),n=Math.floor((e._value-60*t*60)/60),r=Math.round(e._value-60*t*60-60*n);return t+\":\"+(n<10?\"0\":\"\")+n+\":\"+(r<10?\"0\":\"\")+r}function g(e,t,n,r){var i=t.prefixSymbol,a=D({instance:r(100*e._value),providedFormat:t,state:n}),o=Object.assign({},U,t);return i?\"%\"+(o.spaceSeparated?\" \":\"\")+a:a+(o.spaceSeparated?\" \":\"\")+\"%\"}function p(e,t,n){var r=n.currentCurrency(),i=Object.assign({},U,t),a=void 0,o=\"\",u=!!i.totalLength||!!i.forceAverage||i.average,s=t.currencyPosition||r.position,c=t.currencySymbol||r.symbol;i.spaceSeparated&&(o=\" \"),\"infix\"===s&&(a=o+c+o);var l=D({instance:e,providedFormat:t,state:n,decimalSeparator:a});return\"prefix\"===s&&(l=e._value<0&&\"sign\"===i.negative?\"-\"+o+c+l.slice(1):c+o+l),s&&\"postfix\"!==s||(l=l+(o=u?\"\":o)+c),l}function d(e){var t=e.value,n=e.forceAverage,r=e.abbreviations,i=e.spaceSeparated,a=void 0!==i&&i,o=e.totalLength,u=void 0===o?0:o,s=\"\",c=Math.abs(t),l=-1;c>=Math.pow(10,12)&&!n||\"trillion\"===n?(s=r.trillion,t/=Math.pow(10,12)):c<Math.pow(10,12)&&c>=Math.pow(10,9)&&!n||\"billion\"===n?(s=r.billion,t/=Math.pow(10,9)):c<Math.pow(10,9)&&c>=Math.pow(10,6)&&!n||\"million\"===n?(s=r.million,t/=Math.pow(10,6)):(c<Math.pow(10,6)&&c>=Math.pow(10,3)&&!n||\"thousand\"===n)&&(s=r.thousand,t/=Math.pow(10,3));var f=a?\" \":\"\";if(s&&(s=f+s),u){var g=t.toString().split(\".\")[0];l=Math.max(u-g.length,0)}return{value:t,abbreviation:s,mantissaPrecision:l}}function h(e){var t=e.value,n=e.characteristicPrecision,r=void 0===n?0:n,i=t.toExponential().split(\"e\"),a=k(i,2),o=a[0],u=a[1],s=+o;if(!r)return{value:s,abbreviation:\"e\"+u};return 1<r&&(s*=Math.pow(10,r-1),u=(u=+u-(r-1))>=0?\"+\"+u:u),{value:s,abbreviation:\"e\"+u}}function v(e){for(var t=\"\",n=0;n<e;n++)t+=\"0\";return t}function m(e,t){var n=e.toString(),r=n.split(\"e\"),i=k(r,2),a=i[0],o=i[1],u=a.split(\".\"),s=k(u,2),c=s[0],l=s[1],f=void 0===l?\"\":l;if(+o>0)n=c+f+v(o-f.length);else{var g=\".\";g=+c<0?\"-0\"+g:\"0\"+g;var p=(v(-o-1)+Math.abs(c)+f).substr(0,t);p.length<t&&(p+=v(t-p.length)),n=g+p}return+o>0&&t>0&&(n+=\".\"+v(t)),n}function y(e,t){return-1!==e.toString().indexOf(\"e\")?m(e,t):(Math.round(+(e+\"e+\"+t))/Math.pow(10,t)).toFixed(t)}function b(e,t,n,r,i){if(-1===r)return e;var a=y(t,r),o=a.toString().split(\".\"),u=k(o,2),s=u[0],c=u[1];if((void 0===c?\"\":c).match(/^0+$/)&&(n||i))return s;var l=a.match(/0+$/);return i&&l?a.toString().slice(0,l.index):a.toString()}function w(e,t,n,r){var i=e,a=i.toString().split(\".\"),o=k(a,2),u=o[0],s=o[1];if(u.match(/^-?0$/)&&n)return s?u.replace(\"0\",\"\")+\".\"+s:u.replace(\"0\",\"\");if(u.length<r)for(var c=r-u.length,l=0;l<c;l++)i=\"0\"+i;return i.toString()}function x(e,t){for(var n=[],r=0,i=e;i>0;i--)r===t&&(n.unshift(i),r=0),r++;return n}function S(e,t,n,r,i){var a=r.currentDelimiters(),o=a.thousands;i=i||a.decimal;var u=a.thousandsSize||3,s=e.toString(),c=s.split(\".\")[0],l=s.split(\".\")[1];return n&&(t<0&&(c=c.slice(1)),x(c.length,u).forEach(function(e,t){c=c.slice(0,e+t)+o+c.slice(e+t)}),t<0&&(c=\"-\"+c)),s=l?c+i+l:c}function N(e,t){return e+t}function O(e,t,n){return 0===t?e:0==+e?e.replace(\"-\",\"\"):t>0?\"+\"+e:\"sign\"===n?e:\"(\"+e.replace(\"-\",\"\")+\")\"}function M(e,t){return t+e}function F(e,t){return e+t}function D(e){var t=e.instance,n=e.providedFormat,r=e.state,i=void 0===r?_:r,a=e.decimalSeparator,o=e.defaults,u=void 0===o?i.currentDefaults():o,s=t._value;if(0===s&&i.hasZeroFormat())return i.getZeroFormat();if(!isFinite(s))return s.toString();var c=Object.assign({},U,u,n),l=c.totalLength,f=l?0:c.characteristic,g=c.optionalCharacteristic,p=c.forceAverage,v=!!l||!!p||c.average,m=l?-1:v&&void 0===n.mantissa?0:c.mantissa,y=!l&&(void 0===n.optionalMantissa?-1===m:c.optionalMantissa),x=c.trimMantissa,M=c.thousandSeparated,F=c.spaceSeparated,D=c.negative,B=c.forceSign,k=c.exponential,A=\"\";if(v){var L=d({value:s,forceAverage:p,abbreviations:i.currentAbbreviations(),spaceSeparated:F,totalLength:l});s=L.value,A+=L.abbreviation,l&&(m=L.mantissaPrecision)}if(k){var E=h({value:s,characteristicPrecision:f});s=E.value,A=E.abbreviation+A}var T=b(s.toString(),s,y,m,x);return T=w(T,s,g,f),T=S(T,s,M,i,a),(v||k)&&(T=N(T,A)),(B||s<0)&&(T=O(T,s,D)),T}function B(e,t){if(!e)return t;var n=Object.keys(e);return 1===n.length&&\"output\"===n[0]?t:e}var k=function(){function e(e,t){var n=[],r=!0,i=!1,a=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,a=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw a}}return n}return function(t,n){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return e(t,n);throw new TypeError(\"Invalid attempt to destructure non-iterable instance\")}}(),_=e(\"./globalState\"),A=e(\"./validating\"),L=e(\"./parsing\"),E=[\"B\",\"KB\",\"MB\",\"GB\",\"TB\",\"PB\",\"EB\",\"ZB\",\"YB\"],T={general:{scale:1024,suffixes:E,marker:\"bd\"},binary:{scale:1024,suffixes:[\"B\",\"KiB\",\"MiB\",\"GiB\",\"TiB\",\"PiB\",\"EiB\",\"ZiB\",\"YiB\"],marker:\"b\"},decimal:{scale:1e3,suffixes:E,marker:\"d\"}},U={totalLength:0,characteristic:0,forceAverage:!1,average:!1,mantissa:-1,optionalMantissa:!0,thousandSeparated:!1,spaceSeparated:!1,negative:\"sign\",forceSign:!1};t.exports=function(e){return{format:function(){for(var t=arguments.length,n=Array(t),i=0;i<t;i++)n[i]=arguments[i];return r.apply(void 0,n.concat([e]))},getByteUnit:function(){for(var t=arguments.length,n=Array(t),r=0;r<t;r++)n[r]=arguments[r];return u.apply(void 0,n.concat([e]))},getBinaryByteUnit:function(){for(var t=arguments.length,n=Array(t),r=0;r<t;r++)n[r]=arguments[r];return o.apply(void 0,n.concat([e]))},getDecimalByteUnit:function(){for(var t=arguments.length,n=Array(t),r=0;r<t;r++)n[r]=arguments[r];return a.apply(void 0,n.concat([e]))},formatOrDefault:B}}},{\"./globalState\":4,\"./parsing\":8,\"./validating\":10}],4:[function(e,t,n){\"use strict\";function r(e){c=e}function i(){return l[c]}var a=e(\"./en-US\"),o=e(\"./validating\"),u=e(\"./parsing\"),s={},c=void 0,l={},f=null,g={};s.languages=function(){return Object.assign({},l)},s.currentLanguage=function(){return c},s.currentCurrency=function(){return i().currency},s.currentAbbreviations=function(){return i().abbreviations},s.currentDelimiters=function(){return i().delimiters},s.currentOrdinal=function(){return i().ordinal},s.currentDefaults=function(){return Object.assign({},i().defaults,g)},s.currentOrdinalDefaultFormat=function(){return Object.assign({},s.currentDefaults(),i().ordinalFormat)},s.currentByteDefaultFormat=function(){return Object.assign({},s.currentDefaults(),i().byteFormat)},s.currentPercentageDefaultFormat=function(){return Object.assign({},s.currentDefaults(),i().percentageFormat)},s.currentCurrencyDefaultFormat=function(){return Object.assign({},s.currentDefaults(),i().currencyFormat)},s.currentTimeDefaultFormat=function(){return Object.assign({},s.currentDefaults(),i().timeFormat)},s.setDefaults=function(e){e=u.parseFormat(e),o.validateFormat(e)&&(g=e)},s.getZeroFormat=function(){return f},s.setZeroFormat=function(e){return f=\"string\"==typeof e?e:null},s.hasZeroFormat=function(){return null!==f},s.languageData=function(e){if(e){if(l[e])return l[e];throw new Error('Unknown tag \"'+e+'\"')}return i()},s.registerLanguage=function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(!o.validateLanguage(e))throw new Error(\"Invalid language data\");l[e.languageTag]=e,t&&r(e.languageTag)},s.setLanguage=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:a.languageTag;if(!l[e]){var n=e.split(\"-\")[0],i=Object.keys(l).find(function(e){return e.split(\"-\")[0]===n});if(!l[i])return void r(t);r(i)}r(e)},s.registerLanguage(a),c=a.languageTag,t.exports=s},{\"./en-US\":2,\"./parsing\":8,\"./validating\":10}],5:[function(e,t,n){\"use strict\";function r(t,n){t.forEach(function(t){var r=void 0;try{r=e(\"../languages/\"+t)}catch(e){console.error('Unable to load \"'+t+'\". No matching language file found.')}r&&n.registerLanguage(r)})}t.exports=function(e){return{loadLanguagesInNode:function(t){return r(t,e)}}}},{}],6:[function(e,t,n){\"use strict\";function r(e,t,n){var r=new c(e._value),i=t;return n.isNumbro(t)&&(i=t._value),i=new c(i),e._value=r.add(i).toNumber(),e}function i(e,t,n){var r=new c(e._value),i=t;return n.isNumbro(t)&&(i=t._value),i=new c(i),e._value=r.minus(i).toNumber(),e}function a(e,t,n){var r=new c(e._value),i=t;return n.isNumbro(t)&&(i=t._value),i=new c(i),e._value=r.times(i).toNumber(),e}function o(e,t,n){var r=new c(e._value),i=t;return n.isNumbro(t)&&(i=t._value),i=new c(i),e._value=r.dividedBy(i).toNumber(),e}function u(e,t,n){var r=t;return n.isNumbro(t)&&(r=t._value),e._value=r,e}function s(e,t,n){var r=n(e._value);return i(r,t,n),Math.abs(r._value)}var c=e(\"bignumber.js\");t.exports=function(e){return{add:function(t,n){return r(t,n,e)},subtract:function(t,n){return i(t,n,e)},multiply:function(t,n){return a(t,n,e)},divide:function(t,n){return o(t,n,e)},set:function(t,n){return u(t,n,e)},difference:function(t,n){return s(t,n,e)}}}},{\"bignumber.js\":1}],7:[function(e,t,n){\"use strict\";function r(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function i(e){var t=e;return a.isNumbro(e)?t=e._value:\"string\"==typeof e?t=a.unformat(e):isNaN(e)&&(t=NaN),t}function a(e){return new d(i(e))}var o=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),u=e(\"./globalState\"),s=e(\"./validating\"),c=e(\"./loading\")(a),l=e(\"./unformatting\"),f=e(\"./formatting\")(a),g=e(\"./manipulating\")(a),p=e(\"./parsing\"),d=function(){function e(t){r(this,e),this._value=t}return o(e,[{key:\"clone\",value:function(){return a(this._value)}},{key:\"format\",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return f.format(this,e)}},{key:\"formatCurrency\",value:function(e){return\"string\"==typeof e&&(e=p.parseFormat(e)),e=f.formatOrDefault(e,u.currentCurrencyDefaultFormat()),e.output=\"currency\",f.format(this,e)}},{key:\"formatTime\",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return e.output=\"time\",f.format(this,e)}},{key:\"binaryByteUnits\",value:function(){return f.getBinaryByteUnit(this)}},{key:\"decimalByteUnits\",value:function(){return f.getDecimalByteUnit(this)}},{key:\"byteUnits\",value:function(){return f.getByteUnit(this)}},{key:\"difference\",value:function(e){return g.difference(this,e)}},{key:\"add\",value:function(e){return g.add(this,e)}},{key:\"subtract\",value:function(e){return g.subtract(this,e)}},{key:\"multiply\",value:function(e){return g.multiply(this,e)}},{key:\"divide\",value:function(e){return g.divide(this,e)}},{key:\"set\",value:function(e){return g.set(this,i(e))}},{key:\"value\",value:function(){return this._value}},{key:\"valueOf\",value:function(){return this._value}}]),e}();a.version=\"2.1.0\",a.isNumbro=function(e){return e instanceof d},a.language=u.currentLanguage,a.registerLanguage=u.registerLanguage,a.setLanguage=u.setLanguage,a.languages=u.languages,a.languageData=u.languageData,a.zeroFormat=u.setZeroFormat,a.defaultFormat=u.currentDefaults,a.setDefaults=u.setDefaults,a.defaultCurrencyFormat=u.currentCurrencyDefaultFormat,a.validate=s.validate,a.loadLanguagesInNode=c.loadLanguagesInNode,a.unformat=l.unformat,t.exports=a},{\"./formatting\":3,\"./globalState\":4,\"./loading\":5,\"./manipulating\":6,\"./parsing\":8,\"./unformatting\":9,\"./validating\":10}],8:[function(e,t,n){\"use strict\";function r(e,t){var n=e.match(/^{([^}]*)}/);return n?(t.prefix=n[1],e.slice(n[0].length)):e}function i(e,t){var n=e.match(/{([^}]*)}$/);return n?(t.postfix=n[1],e.slice(0,-n[0].length)):e}function a(e,t){if(-1===e.indexOf(\"$\")){if(-1===e.indexOf(\"%\"))return-1!==e.indexOf(\"bd\")?(t.output=\"byte\",void(t.base=\"general\")):-1!==e.indexOf(\"b\")?(t.output=\"byte\",void(t.base=\"binary\")):-1!==e.indexOf(\"d\")?(t.output=\"byte\",void(t.base=\"decimal\")):void(-1===e.indexOf(\":\")?-1!==e.indexOf(\"o\")&&(t.output=\"ordinal\"):t.output=\"time\");t.output=\"percent\"}else t.output=\"currency\"}function o(e,t){-1!==e.indexOf(\",\")&&(t.thousandSeparated=!0)}function u(e,t){-1!==e.indexOf(\" \")&&(t.spaceSeparated=!0)}function s(e,t){var n=e.match(/[1-9]+[0-9]*/);n&&(t.totalLength=+n[0])}function c(e,t){var n=e.split(\".\")[0].match(/0+/);n&&(t.characteristic=n[0].length)}function l(e,t){var n=e.split(\".\")[1];if(n){var r=n.match(/0+/);r&&(t.mantissa=r[0].length)}}function f(e,t){-1!==e.indexOf(\"a\")&&(t.average=!0)}function g(e,t){-1!==e.indexOf(\"K\")?t.forceAverage=\"thousand\":-1!==e.indexOf(\"M\")?t.forceAverage=\"million\":-1!==e.indexOf(\"B\")?t.forceAverage=\"billion\":-1!==e.indexOf(\"T\")&&(t.forceAverage=\"trillion\")}function p(e,t){e.match(/\\[\\.]/)?t.optionalMantissa=!0:e.match(/\\./)&&(t.optionalMantissa=!1)}function d(e,t){if(-1!==e.indexOf(\".\")){var n=e.split(\".\")[0];t.optionalCharacteristic=-1===n.indexOf(\"0\")}}function h(e,t){e.match(/^\\+?\\([^)]*\\)$/)&&(t.negative=\"parenthesis\"),e.match(/^\\+?-/)&&(t.negative=\"sign\")}function v(e,t){e.match(/^\\+/)&&(t.forceSign=!0)}t.exports={parseFormat:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return\"string\"!=typeof e?e:(e=r(e,t),e=i(e,t),a(e,t),s(e,t),c(e,t),d(e,t),f(e,t),g(e,t),l(e,t),p(e,t),o(e,t),u(e,t),h(e,t),v(e,t),t)}}},{}],9:[function(e,t,n){\"use strict\";function r(e){return e.replace(/[-/\\\\^$*+?.()|[\\]{}]/g,\"\\\\$&\")}function i(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:\"\",a=arguments[3],o=arguments[4],u=arguments[5],s=arguments[6];if(!isNaN(+e))return+e;var l=\"\",f=e.replace(/(^[^(]*)\\((.*)\\)([^)]*$)/,\"$1$2$3\");if(f!==e)return-1*i(f,t,n,a,o,u,s);for(var g=0;g<c.length;g++){var p=c[g];if((l=e.replace(p.key,\"\"))!==e)return i(l,t,n,a,o,u,s)*p.factor}if((l=e.replace(\"%\",\"\"))!==e)return i(l,t,n,a,o,u,s)/100;var d=parseFloat(e);if(!isNaN(d)){var h=a(d);if(h&&\".\"!==h&&(l=e.replace(new RegExp(r(h)+\"$\"),\"\"))!==e)return i(l,t,n,a,o,u,s);var v={};Object.keys(u).forEach(function(e){v[u[e]]=e});for(var m=Object.keys(v).sort().reverse(),y=m.length,b=0;b<y;b++){var w=m[b],x=v[w];if((l=e.replace(w,\"\"))!==e){var S=void 0;switch(x){case\"thousand\":S=Math.pow(10,3);break;case\"million\":S=Math.pow(10,6);break;case\"billion\":S=Math.pow(10,9);break;case\"trillion\":S=Math.pow(10,12)}return i(l,t,n,a,o,u,s)*S}}}}function a(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:\"\",i=e.replace(n,\"\");return i=i.replace(new RegExp(\"([0-9])\"+r(t.thousands)+\"([0-9])\",\"g\"),\"$1$2\"),i=i.replace(t.decimal,\".\")}function o(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:\"\",r=arguments[3],o=arguments[4],u=arguments[5],s=arguments[6];if(\"\"!==e)return isNaN(+e)?e===o?0:i(a(e,t,n),t,n,r,o,u,s):+e}function u(e,t){if(!(e.indexOf(\":\")&&\":\"!==t.thousands))return!1;var n=e.split(\":\");if(3!==n.length)return!1;var r=+n[0],i=+n[1],a=+n[2];return!isNaN(r)&&!isNaN(i)&&!isNaN(a)}function s(e){var t=e.split(\":\"),n=+t[0],r=+t[1];return+t[2]+60*r+3600*n}var c=[{key:\"ZiB\",factor:Math.pow(1024,7)},{key:\"ZB\",factor:Math.pow(1e3,7)},{key:\"YiB\",factor:Math.pow(1024,8)},{key:\"YB\",factor:Math.pow(1e3,8)},{key:\"TiB\",factor:Math.pow(1024,4)},{key:\"TB\",factor:Math.pow(1e3,4)},{key:\"PiB\",factor:Math.pow(1024,5)},{key:\"PB\",factor:Math.pow(1e3,5)},{key:\"MiB\",factor:Math.pow(1024,2)},{key:\"MB\",factor:Math.pow(1e3,2)},{key:\"KiB\",factor:Math.pow(1024,1)},{key:\"KB\",factor:Math.pow(1e3,1)},{key:\"GiB\",factor:Math.pow(1024,3)},{key:\"GB\",factor:Math.pow(1e3,3)},{key:\"EiB\",factor:Math.pow(1024,6)},{key:\"EB\",factor:Math.pow(1e3,6)},{key:\"B\",factor:1}];t.exports={unformat:function(t,n){var r=e(\"./globalState\"),i=r.currentDelimiters(),a=r.currentCurrency().symbol,c=r.currentOrdinal(),l=r.getZeroFormat(),f=r.currentAbbreviations(),g=void 0;if(\"string\"==typeof t)g=u(t,i)?s(t):o(t,i,a,c,l,f,n);else{if(\"number\"!=typeof t)return;g=t}if(void 0!==g)return g}}},{\"./globalState\":4}],10:[function(e,t,n){\"use strict\";function r(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}function i(e){return!!s.unformat(e)}function a(e,t,n){var i=arguments.length>3&&void 0!==arguments[3]&&arguments[3],o=Object.keys(e).map(function(r){if(!t[r])return console.error(n+\" Invalid key: \"+r),!1;var i=e[r],o=t[r];if(\"string\"==typeof o&&(o={type:o}),\"format\"===o.type){if(!a(i,l,\"[Validate \"+r+\"]\",!0))return!1}else if((void 0===i?\"undefined\":u(i))!==o.type)return console.error(n+\" \"+r+' type mismatched: \"'+o.type+'\" expected, \"'+(void 0===i?\"undefined\":u(i))+'\" provided'),!1;if(o.restrictions&&o.restrictions.length)for(var s=o.restrictions.length,c=0;c<s;c++){var f=o.restrictions[c],g=f.restriction,p=f.message;if(!g(i,e))return console.error(n+\" \"+r+\" invalid value: \"+p),!1}return o.restriction&&!o.restriction(i,e)?(console.error(n+\" \"+r+\" invalid value: \"+o.message),!1):o.validValues&&-1===o.validValues.indexOf(i)?(console.error(n+\" \"+r+\" invalid value: must be among \"+JSON.stringify(o.validValues)+', \"'+i+'\" provided'),!1):!(o.children&&!a(i,o.children,\"[Validate \"+r+\"]\"))});return i||o.push.apply(o,r(Object.keys(t).map(function(r){var i=t[r];if(\"string\"==typeof i&&(i={type:i}),i.mandatory){var a=i.mandatory;if(\"function\"==typeof a&&(a=a(e)),a&&void 0===e[r])return console.error(n+' Missing mandatory key \"'+r+'\"'),!1}return!0}))),o.reduce(function(e,t){return e&&t},!0)}function o(e){return a(e,l,\"[Validate format]\")}var u=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},s=e(\"./unformatting\"),c=/^[a-z]{2,3}(-[a-zA-Z]{4})?(-([A-Z]{2}|[0-9]{3}))?$/,l={output:{type:\"string\",validValues:[\"currency\",\"percent\",\"byte\",\"time\",\"ordinal\",\"number\"]},base:{type:\"string\",validValues:[\"decimal\",\"binary\",\"general\"],restriction:function(e,t){return\"byte\"===t.output},message:\"`base` must be provided only when the output is `byte`\",mandatory:function(e){return\"byte\"===e.output}},characteristic:{type:\"number\",restriction:function(e){return e>=0},message:\"value must be positive\"},prefix:\"string\",postfix:\"string\",forceAverage:{type:\"string\",validValues:[\"trillion\",\"billion\",\"million\",\"thousand\"]},average:\"boolean\",currencyPosition:{type:\"string\",validValues:[\"prefix\",\"infix\",\"postfix\"]},currencySymbol:\"string\",totalLength:{type:\"number\",restrictions:[{restriction:function(e){return e>=0},message:\"value must be positive\"},{restriction:function(e,t){return!t.exponential},message:\"`totalLength` is incompatible with `exponential`\"}]},mantissa:{type:\"number\",restriction:function(e){return e>=0},message:\"value must be positive\"},optionalMantissa:\"boolean\",trimMantissa:\"boolean\",optionalCharacteristic:\"boolean\",thousandSeparated:\"boolean\",spaceSeparated:\"boolean\",abbreviations:{type:\"object\",children:{thousand:\"string\",million:\"string\",billion:\"string\",trillion:\"string\"}},negative:{type:\"string\",validValues:[\"sign\",\"parenthesis\"]},forceSign:\"boolean\",exponential:{type:\"boolean\"},prefixSymbol:{type:\"boolean\",restriction:function(e,t){return\"percent\"===t.output},message:\"`prefixSymbol` can be provided only when the output is `percent`\"}},f={languageTag:{type:\"string\",mandatory:!0,restriction:function(e){return e.match(c)},message:\"the language tag must follow the BCP 47 specification (see https://tools.ieft.org/html/bcp47)\"},delimiters:{type:\"object\",children:{thousands:\"string\",decimal:\"string\",thousandsSize:\"number\"},mandatory:!0},abbreviations:{type:\"object\",children:{thousand:{type:\"string\",mandatory:!0},million:{type:\"string\",mandatory:!0},billion:{type:\"string\",mandatory:!0},trillion:{type:\"string\",mandatory:!0}},mandatory:!0},spaceSeparated:\"boolean\",ordinal:{type:\"function\",mandatory:!0},currency:{type:\"object\",children:{symbol:\"string\",position:\"string\",code:\"string\"},mandatory:!0},defaults:\"format\",ordinalFormat:\"format\",byteFormat:\"format\",percentageFormat:\"format\",currencyFormat:\"format\",timeDefaults:\"format\",formats:{type:\"object\",children:{fourDigits:{type:\"format\",mandatory:!0},fullWithTwoDecimals:{type:\"format\",mandatory:!0},fullWithTwoDecimalsNoCurrency:{type:\"format\",mandatory:!0},fullWithNoDecimals:{type:\"format\",mandatory:!0}}}};t.exports={validate:function(e,t){var n=i(e),r=o(t);return n&&r},validateFormat:o,validateInput:i,validateLanguage:function(e){return a(e,f,\"[Validate language]\")}}},{\"./unformatting\":9}]},{},[7])(7)});\n//# sourceMappingURL=numbro.min.js.map\n\n\n//# sourceURL=webpack:///./node_modules/numbro/dist/numbro.min.js?");

/***/ }),

/***/ "./node_modules/object-assign/index.js":
/*!*********************************************!*\
  !*** ./node_modules/object-assign/index.js ***!
  \*********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\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 no-new-wrappers\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 (err) {\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 (getOwnPropertySymbols) {\n\t\t\tsymbols = 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//# sourceURL=webpack:///./node_modules/object-assign/index.js?");

/***/ }),

/***/ "./node_modules/pikaday/pikaday.js":
/*!*****************************************!*\
  !*** ./node_modules/pikaday/pikaday.js ***!
  \*****************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("/*!\n * Pikaday\n *\n * Copyright © 2014 David Bushell | BSD & MIT license | https://github.com/dbushell/Pikaday\n */\n\n(function (root, factory)\n{\n    'use strict';\n\n    var moment;\n    if (true) {\n        // CommonJS module\n        // Load moment.js as an optional dependency\n        try { moment = __webpack_require__(/*! moment */ \"./node_modules/moment/moment.js\"); } catch (e) {}\n        module.exports = factory(moment);\n    } else {}\n}(this, function (moment)\n{\n    'use strict';\n\n    /**\n     * feature detection and helper functions\n     */\n    var hasMoment = typeof moment === 'function',\n\n    hasEventListeners = !!window.addEventListener,\n\n    document = window.document,\n\n    sto = window.setTimeout,\n\n    addEvent = function(el, e, callback, capture)\n    {\n        if (hasEventListeners) {\n            el.addEventListener(e, callback, !!capture);\n        } else {\n            el.attachEvent('on' + e, callback);\n        }\n    },\n\n    removeEvent = function(el, e, callback, capture)\n    {\n        if (hasEventListeners) {\n            el.removeEventListener(e, callback, !!capture);\n        } else {\n            el.detachEvent('on' + e, callback);\n        }\n    },\n\n    fireEvent = function(el, eventName, data)\n    {\n        var ev;\n\n        if (document.createEvent) {\n            ev = document.createEvent('HTMLEvents');\n            ev.initEvent(eventName, true, false);\n            ev = extend(ev, data);\n            el.dispatchEvent(ev);\n        } else if (document.createEventObject) {\n            ev = document.createEventObject();\n            ev = extend(ev, data);\n            el.fireEvent('on' + eventName, ev);\n        }\n    },\n\n    trim = function(str)\n    {\n        return str.trim ? str.trim() : str.replace(/^\\s+|\\s+$/g,'');\n    },\n\n    hasClass = function(el, cn)\n    {\n        return (' ' + el.className + ' ').indexOf(' ' + cn + ' ') !== -1;\n    },\n\n    addClass = function(el, cn)\n    {\n        if (!hasClass(el, cn)) {\n            el.className = (el.className === '') ? cn : el.className + ' ' + cn;\n        }\n    },\n\n    removeClass = function(el, cn)\n    {\n        el.className = trim((' ' + el.className + ' ').replace(' ' + cn + ' ', ' '));\n    },\n\n    isArray = function(obj)\n    {\n        return (/Array/).test(Object.prototype.toString.call(obj));\n    },\n\n    isDate = function(obj)\n    {\n        return (/Date/).test(Object.prototype.toString.call(obj)) && !isNaN(obj.getTime());\n    },\n\n    isWeekend = function(date)\n    {\n        var day = date.getDay();\n        return day === 0 || day === 6;\n    },\n\n    isLeapYear = function(year)\n    {\n        // solution by Matti Virkkunen: http://stackoverflow.com/a/4881951\n        return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0;\n    },\n\n    getDaysInMonth = function(year, month)\n    {\n        return [31, isLeapYear(year) ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n    },\n\n    setToStartOfDay = function(date)\n    {\n        if (isDate(date)) date.setHours(0,0,0,0);\n    },\n\n    compareDates = function(a,b)\n    {\n        // weak date comparison (use setToStartOfDay(date) to ensure correct result)\n        return a.getTime() === b.getTime();\n    },\n\n    extend = function(to, from, overwrite)\n    {\n        var prop, hasProp;\n        for (prop in from) {\n            hasProp = to[prop] !== undefined;\n            if (hasProp && typeof from[prop] === 'object' && from[prop] !== null && from[prop].nodeName === undefined) {\n                if (isDate(from[prop])) {\n                    if (overwrite) {\n                        to[prop] = new Date(from[prop].getTime());\n                    }\n                }\n                else if (isArray(from[prop])) {\n                    if (overwrite) {\n                        to[prop] = from[prop].slice(0);\n                    }\n                } else {\n                    to[prop] = extend({}, from[prop], overwrite);\n                }\n            } else if (overwrite || !hasProp) {\n                to[prop] = from[prop];\n            }\n        }\n        return to;\n    },\n\n    adjustCalendar = function(calendar) {\n        if (calendar.month < 0) {\n            calendar.year -= Math.ceil(Math.abs(calendar.month)/12);\n            calendar.month += 12;\n        }\n        if (calendar.month > 11) {\n            calendar.year += Math.floor(Math.abs(calendar.month)/12);\n            calendar.month -= 12;\n        }\n        return calendar;\n    },\n\n    /**\n     * defaults and localisation\n     */\n    defaults = {\n\n        // bind the picker to a form field\n        field: null,\n\n        // automatically show/hide the picker on `field` focus (default `true` if `field` is set)\n        bound: undefined,\n\n        // position of the datepicker, relative to the field (default to bottom & left)\n        // ('bottom' & 'left' keywords are not used, 'top' & 'right' are modifier on the bottom/left position)\n        position: 'bottom left',\n\n        // automatically fit in the viewport even if it means repositioning from the position option\n        reposition: true,\n\n        // the default output format for `.toString()` and `field` value\n        format: 'YYYY-MM-DD',\n\n        // the initial date to view when first opened\n        defaultDate: null,\n\n        // make the `defaultDate` the initial selected value\n        setDefaultDate: false,\n\n        // first day of week (0: Sunday, 1: Monday etc)\n        firstDay: 0,\n\n        // the default flag for moment's strict date parsing\n        formatStrict: false,\n\n        // the minimum/earliest date that can be selected\n        minDate: null,\n        // the maximum/latest date that can be selected\n        maxDate: null,\n\n        // number of years either side, or array of upper/lower range\n        yearRange: 10,\n\n        // show week numbers at head of row\n        showWeekNumber: false,\n\n        // used internally (don't config outside)\n        minYear: 0,\n        maxYear: 9999,\n        minMonth: undefined,\n        maxMonth: undefined,\n\n        startRange: null,\n        endRange: null,\n\n        isRTL: false,\n\n        // Additional text to append to the year in the calendar title\n        yearSuffix: '',\n\n        // Render the month after year in the calendar title\n        showMonthAfterYear: false,\n\n        // Render days of the calendar grid that fall in the next or previous month\n        showDaysInNextAndPreviousMonths: false,\n\n        // how many months are visible\n        numberOfMonths: 1,\n\n        // when numberOfMonths is used, this will help you to choose where the main calendar will be (default `left`, can be set to `right`)\n        // only used for the first display or when a selected date is not visible\n        mainCalendar: 'left',\n\n        // Specify a DOM element to render the calendar in\n        container: undefined,\n\n        // internationalization\n        i18n: {\n            previousMonth : 'Previous Month',\n            nextMonth     : 'Next Month',\n            months        : ['January','February','March','April','May','June','July','August','September','October','November','December'],\n            weekdays      : ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'],\n            weekdaysShort : ['Sun','Mon','Tue','Wed','Thu','Fri','Sat']\n        },\n\n        // Theme Classname\n        theme: null,\n\n        // callback function\n        onSelect: null,\n        onOpen: null,\n        onClose: null,\n        onDraw: null\n    },\n\n\n    /**\n     * templating functions to abstract HTML rendering\n     */\n    renderDayName = function(opts, day, abbr)\n    {\n        day += opts.firstDay;\n        while (day >= 7) {\n            day -= 7;\n        }\n        return abbr ? opts.i18n.weekdaysShort[day] : opts.i18n.weekdays[day];\n    },\n\n    renderDay = function(opts)\n    {\n        var arr = [];\n        var ariaSelected = 'false';\n        if (opts.isEmpty) {\n            if (opts.showDaysInNextAndPreviousMonths) {\n                arr.push('is-outside-current-month');\n            } else {\n                return '<td class=\"is-empty\"></td>';\n            }\n        }\n        if (opts.isDisabled) {\n            arr.push('is-disabled');\n        }\n        if (opts.isToday) {\n            arr.push('is-today');\n        }\n        if (opts.isSelected) {\n            arr.push('is-selected');\n            ariaSelected = 'true';\n        }\n        if (opts.isInRange) {\n            arr.push('is-inrange');\n        }\n        if (opts.isStartRange) {\n            arr.push('is-startrange');\n        }\n        if (opts.isEndRange) {\n            arr.push('is-endrange');\n        }\n        return '<td data-day=\"' + opts.day + '\" class=\"' + arr.join(' ') + '\" aria-selected=\"' + ariaSelected + '\">' +\n                 '<button class=\"pika-button pika-day\" type=\"button\" ' +\n                    'data-pika-year=\"' + opts.year + '\" data-pika-month=\"' + opts.month + '\" data-pika-day=\"' + opts.day + '\">' +\n                        opts.day +\n                 '</button>' +\n               '</td>';\n    },\n\n    renderWeek = function (d, m, y) {\n        // Lifted from http://javascript.about.com/library/blweekyear.htm, lightly modified.\n        var onejan = new Date(y, 0, 1),\n            weekNum = Math.ceil((((new Date(y, m, d) - onejan) / 86400000) + onejan.getDay()+1)/7);\n        return '<td class=\"pika-week\">' + weekNum + '</td>';\n    },\n\n    renderRow = function(days, isRTL)\n    {\n        return '<tr>' + (isRTL ? days.reverse() : days).join('') + '</tr>';\n    },\n\n    renderBody = function(rows)\n    {\n        return '<tbody>' + rows.join('') + '</tbody>';\n    },\n\n    renderHead = function(opts)\n    {\n        var i, arr = [];\n        if (opts.showWeekNumber) {\n            arr.push('<th></th>');\n        }\n        for (i = 0; i < 7; i++) {\n            arr.push('<th scope=\"col\"><abbr title=\"' + renderDayName(opts, i) + '\">' + renderDayName(opts, i, true) + '</abbr></th>');\n        }\n        return '<thead><tr>' + (opts.isRTL ? arr.reverse() : arr).join('') + '</tr></thead>';\n    },\n\n    renderTitle = function(instance, c, year, month, refYear, randId)\n    {\n        var i, j, arr,\n            opts = instance._o,\n            isMinYear = year === opts.minYear,\n            isMaxYear = year === opts.maxYear,\n            html = '<div id=\"' + randId + '\" class=\"pika-title\" role=\"heading\" aria-live=\"assertive\">',\n            monthHtml,\n            yearHtml,\n            prev = true,\n            next = true;\n\n        for (arr = [], i = 0; i < 12; i++) {\n            arr.push('<option value=\"' + (year === refYear ? i - c : 12 + i - c) + '\"' +\n                (i === month ? ' selected=\"selected\"': '') +\n                ((isMinYear && i < opts.minMonth) || (isMaxYear && i > opts.maxMonth) ? 'disabled=\"disabled\"' : '') + '>' +\n                opts.i18n.months[i] + '</option>');\n        }\n\n        monthHtml = '<div class=\"pika-label\">' + opts.i18n.months[month] + '<select class=\"pika-select pika-select-month\" tabindex=\"-1\">' + arr.join('') + '</select></div>';\n\n        if (isArray(opts.yearRange)) {\n            i = opts.yearRange[0];\n            j = opts.yearRange[1] + 1;\n        } else {\n            i = year - opts.yearRange;\n            j = 1 + year + opts.yearRange;\n        }\n\n        for (arr = []; i < j && i <= opts.maxYear; i++) {\n            if (i >= opts.minYear) {\n                arr.push('<option value=\"' + i + '\"' + (i === year ? ' selected=\"selected\"': '') + '>' + (i) + '</option>');\n            }\n        }\n        yearHtml = '<div class=\"pika-label\">' + year + opts.yearSuffix + '<select class=\"pika-select pika-select-year\" tabindex=\"-1\">' + arr.join('') + '</select></div>';\n\n        if (opts.showMonthAfterYear) {\n            html += yearHtml + monthHtml;\n        } else {\n            html += monthHtml + yearHtml;\n        }\n\n        if (isMinYear && (month === 0 || opts.minMonth >= month)) {\n            prev = false;\n        }\n\n        if (isMaxYear && (month === 11 || opts.maxMonth <= month)) {\n            next = false;\n        }\n\n        if (c === 0) {\n            html += '<button class=\"pika-prev' + (prev ? '' : ' is-disabled') + '\" type=\"button\">' + opts.i18n.previousMonth + '</button>';\n        }\n        if (c === (instance._o.numberOfMonths - 1) ) {\n            html += '<button class=\"pika-next' + (next ? '' : ' is-disabled') + '\" type=\"button\">' + opts.i18n.nextMonth + '</button>';\n        }\n\n        return html += '</div>';\n    },\n\n    renderTable = function(opts, data, randId)\n    {\n        return '<table cellpadding=\"0\" cellspacing=\"0\" class=\"pika-table\" role=\"grid\" aria-labelledby=\"' + randId + '\">' + renderHead(opts) + renderBody(data) + '</table>';\n    },\n\n\n    /**\n     * Pikaday constructor\n     */\n    Pikaday = function(options)\n    {\n        var self = this,\n            opts = self.config(options);\n\n        self._onMouseDown = function(e)\n        {\n            if (!self._v) {\n                return;\n            }\n            e = e || window.event;\n            var target = e.target || e.srcElement;\n            if (!target) {\n                return;\n            }\n\n            if (!hasClass(target, 'is-disabled')) {\n                if (hasClass(target, 'pika-button') && !hasClass(target, 'is-empty') && !hasClass(target.parentNode, 'is-disabled')) {\n                    self.setDate(new Date(target.getAttribute('data-pika-year'), target.getAttribute('data-pika-month'), target.getAttribute('data-pika-day')));\n                    if (opts.bound) {\n                        sto(function() {\n                            self.hide();\n                            if (opts.field) {\n                                opts.field.blur();\n                            }\n                        }, 100);\n                    }\n                }\n                else if (hasClass(target, 'pika-prev')) {\n                    self.prevMonth();\n                }\n                else if (hasClass(target, 'pika-next')) {\n                    self.nextMonth();\n                }\n            }\n            if (!hasClass(target, 'pika-select')) {\n                // if this is touch event prevent mouse events emulation\n                if (e.preventDefault) {\n                    e.preventDefault();\n                } else {\n                    e.returnValue = false;\n                    return false;\n                }\n            } else {\n                self._c = true;\n            }\n        };\n\n        self._onChange = function(e)\n        {\n            e = e || window.event;\n            var target = e.target || e.srcElement;\n            if (!target) {\n                return;\n            }\n            if (hasClass(target, 'pika-select-month')) {\n                self.gotoMonth(target.value);\n            }\n            else if (hasClass(target, 'pika-select-year')) {\n                self.gotoYear(target.value);\n            }\n        };\n\n        self._onKeyChange = function(e)\n        {\n            e = e || window.event;\n\n            if (self.isVisible()) {\n\n                switch(e.keyCode){\n                    case 13:\n                    case 27:\n                        opts.field.blur();\n                        break;\n                    case 37:\n                        e.preventDefault();\n                        self.adjustDate('subtract', 1);\n                        break;\n                    case 38:\n                        self.adjustDate('subtract', 7);\n                        break;\n                    case 39:\n                        self.adjustDate('add', 1);\n                        break;\n                    case 40:\n                        self.adjustDate('add', 7);\n                        break;\n                }\n            }\n        };\n\n        self._onInputChange = function(e)\n        {\n            var date;\n\n            if (e.firedBy === self) {\n                return;\n            }\n            if (hasMoment) {\n                date = moment(opts.field.value, opts.format, opts.formatStrict);\n                date = (date && date.isValid()) ? date.toDate() : null;\n            }\n            else {\n                date = new Date(Date.parse(opts.field.value));\n            }\n            if (isDate(date)) {\n              self.setDate(date);\n            }\n            if (!self._v) {\n                self.show();\n            }\n        };\n\n        self._onInputFocus = function()\n        {\n            self.show();\n        };\n\n        self._onInputClick = function()\n        {\n            self.show();\n        };\n\n        self._onInputBlur = function()\n        {\n            // IE allows pika div to gain focus; catch blur the input field\n            var pEl = document.activeElement;\n            do {\n                if (hasClass(pEl, 'pika-single')) {\n                    return;\n                }\n            }\n            while ((pEl = pEl.parentNode));\n\n            if (!self._c) {\n                self._b = sto(function() {\n                    self.hide();\n                }, 50);\n            }\n            self._c = false;\n        };\n\n        self._onClick = function(e)\n        {\n            e = e || window.event;\n            var target = e.target || e.srcElement,\n                pEl = target;\n            if (!target) {\n                return;\n            }\n            if (!hasEventListeners && hasClass(target, 'pika-select')) {\n                if (!target.onchange) {\n                    target.setAttribute('onchange', 'return;');\n                    addEvent(target, 'change', self._onChange);\n                }\n            }\n            do {\n                if (hasClass(pEl, 'pika-single') || pEl === opts.trigger) {\n                    return;\n                }\n            }\n            while ((pEl = pEl.parentNode));\n            if (self._v && target !== opts.trigger && pEl !== opts.trigger) {\n                self.hide();\n            }\n        };\n\n        self.el = document.createElement('div');\n        self.el.className = 'pika-single' + (opts.isRTL ? ' is-rtl' : '') + (opts.theme ? ' ' + opts.theme : '');\n\n        addEvent(self.el, 'mousedown', self._onMouseDown, true);\n        addEvent(self.el, 'touchend', self._onMouseDown, true);\n        addEvent(self.el, 'change', self._onChange);\n        addEvent(document, 'keydown', self._onKeyChange);\n\n        if (opts.field) {\n            if (opts.container) {\n                opts.container.appendChild(self.el);\n            } else if (opts.bound) {\n                document.body.appendChild(self.el);\n            } else {\n                opts.field.parentNode.insertBefore(self.el, opts.field.nextSibling);\n            }\n            addEvent(opts.field, 'change', self._onInputChange);\n\n            if (!opts.defaultDate) {\n                if (hasMoment && opts.field.value) {\n                    opts.defaultDate = moment(opts.field.value, opts.format).toDate();\n                } else {\n                    opts.defaultDate = new Date(Date.parse(opts.field.value));\n                }\n                opts.setDefaultDate = true;\n            }\n        }\n\n        var defDate = opts.defaultDate;\n\n        if (isDate(defDate)) {\n            if (opts.setDefaultDate) {\n                self.setDate(defDate, true);\n            } else {\n                self.gotoDate(defDate);\n            }\n        } else {\n            self.gotoDate(new Date());\n        }\n\n        if (opts.bound) {\n            this.hide();\n            self.el.className += ' is-bound';\n            addEvent(opts.trigger, 'click', self._onInputClick);\n            addEvent(opts.trigger, 'focus', self._onInputFocus);\n            addEvent(opts.trigger, 'blur', self._onInputBlur);\n        } else {\n            this.show();\n        }\n    };\n\n\n    /**\n     * public Pikaday API\n     */\n    Pikaday.prototype = {\n\n\n        /**\n         * configure functionality\n         */\n        config: function(options)\n        {\n            if (!this._o) {\n                this._o = extend({}, defaults, true);\n            }\n\n            var opts = extend(this._o, options, true);\n\n            opts.isRTL = !!opts.isRTL;\n\n            opts.field = (opts.field && opts.field.nodeName) ? opts.field : null;\n\n            opts.theme = (typeof opts.theme) === 'string' && opts.theme ? opts.theme : null;\n\n            opts.bound = !!(opts.bound !== undefined ? opts.field && opts.bound : opts.field);\n\n            opts.trigger = (opts.trigger && opts.trigger.nodeName) ? opts.trigger : opts.field;\n\n            opts.disableWeekends = !!opts.disableWeekends;\n\n            opts.disableDayFn = (typeof opts.disableDayFn) === 'function' ? opts.disableDayFn : null;\n\n            var nom = parseInt(opts.numberOfMonths, 10) || 1;\n            opts.numberOfMonths = nom > 4 ? 4 : nom;\n\n            if (!isDate(opts.minDate)) {\n                opts.minDate = false;\n            }\n            if (!isDate(opts.maxDate)) {\n                opts.maxDate = false;\n            }\n            if ((opts.minDate && opts.maxDate) && opts.maxDate < opts.minDate) {\n                opts.maxDate = opts.minDate = false;\n            }\n            if (opts.minDate) {\n                this.setMinDate(opts.minDate);\n            }\n            if (opts.maxDate) {\n                this.setMaxDate(opts.maxDate);\n            }\n\n            if (isArray(opts.yearRange)) {\n                var fallback = new Date().getFullYear() - 10;\n                opts.yearRange[0] = parseInt(opts.yearRange[0], 10) || fallback;\n                opts.yearRange[1] = parseInt(opts.yearRange[1], 10) || fallback;\n            } else {\n                opts.yearRange = Math.abs(parseInt(opts.yearRange, 10)) || defaults.yearRange;\n                if (opts.yearRange > 100) {\n                    opts.yearRange = 100;\n                }\n            }\n\n            return opts;\n        },\n\n        /**\n         * return a formatted string of the current selection (using Moment.js if available)\n         */\n        toString: function(format)\n        {\n            return !isDate(this._d) ? '' : hasMoment ? moment(this._d).format(format || this._o.format) : this._d.toDateString();\n        },\n\n        /**\n         * return a Moment.js object of the current selection (if available)\n         */\n        getMoment: function()\n        {\n            return hasMoment ? moment(this._d) : null;\n        },\n\n        /**\n         * set the current selection from a Moment.js object (if available)\n         */\n        setMoment: function(date, preventOnSelect)\n        {\n            if (hasMoment && moment.isMoment(date)) {\n                this.setDate(date.toDate(), preventOnSelect);\n            }\n        },\n\n        /**\n         * return a Date object of the current selection with fallback for the current date\n         */\n        getDate: function()\n        {\n            return isDate(this._d) ? new Date(this._d.getTime()) : new Date();\n        },\n\n        /**\n         * set the current selection\n         */\n        setDate: function(date, preventOnSelect)\n        {\n            if (!date) {\n                this._d = null;\n\n                if (this._o.field) {\n                    this._o.field.value = '';\n                    fireEvent(this._o.field, 'change', { firedBy: this });\n                }\n\n                return this.draw();\n            }\n            if (typeof date === 'string') {\n                date = new Date(Date.parse(date));\n            }\n            if (!isDate(date)) {\n                return;\n            }\n\n            var min = this._o.minDate,\n                max = this._o.maxDate;\n\n            if (isDate(min) && date < min) {\n                date = min;\n            } else if (isDate(max) && date > max) {\n                date = max;\n            }\n\n            this._d = new Date(date.getTime());\n            setToStartOfDay(this._d);\n            this.gotoDate(this._d);\n\n            if (this._o.field) {\n                this._o.field.value = this.toString();\n                fireEvent(this._o.field, 'change', { firedBy: this });\n            }\n            if (!preventOnSelect && typeof this._o.onSelect === 'function') {\n                this._o.onSelect.call(this, this.getDate());\n            }\n        },\n\n        /**\n         * change view to a specific date\n         */\n        gotoDate: function(date)\n        {\n            var newCalendar = true;\n\n            if (!isDate(date)) {\n                return;\n            }\n\n            if (this.calendars) {\n                var firstVisibleDate = new Date(this.calendars[0].year, this.calendars[0].month, 1),\n                    lastVisibleDate = new Date(this.calendars[this.calendars.length-1].year, this.calendars[this.calendars.length-1].month, 1),\n                    visibleDate = date.getTime();\n                // get the end of the month\n                lastVisibleDate.setMonth(lastVisibleDate.getMonth()+1);\n                lastVisibleDate.setDate(lastVisibleDate.getDate()-1);\n                newCalendar = (visibleDate < firstVisibleDate.getTime() || lastVisibleDate.getTime() < visibleDate);\n            }\n\n            if (newCalendar) {\n                this.calendars = [{\n                    month: date.getMonth(),\n                    year: date.getFullYear()\n                }];\n                if (this._o.mainCalendar === 'right') {\n                    this.calendars[0].month += 1 - this._o.numberOfMonths;\n                }\n            }\n\n            this.adjustCalendars();\n        },\n\n        adjustDate: function(sign, days) {\n\n            var day = this.getDate();\n            var difference = parseInt(days)*24*60*60*1000;\n\n            var newDay;\n\n            if (sign === 'add') {\n                newDay = new Date(day.valueOf() + difference);\n            } else if (sign === 'subtract') {\n                newDay = new Date(day.valueOf() - difference);\n            }\n\n            if (hasMoment) {\n                if (sign === 'add') {\n                    newDay = moment(day).add(days, \"days\").toDate();\n                } else if (sign === 'subtract') {\n                    newDay = moment(day).subtract(days, \"days\").toDate();\n                }\n            }\n\n            this.setDate(newDay);\n        },\n\n        adjustCalendars: function() {\n            this.calendars[0] = adjustCalendar(this.calendars[0]);\n            for (var c = 1; c < this._o.numberOfMonths; c++) {\n                this.calendars[c] = adjustCalendar({\n                    month: this.calendars[0].month + c,\n                    year: this.calendars[0].year\n                });\n            }\n            this.draw();\n        },\n\n        gotoToday: function()\n        {\n            this.gotoDate(new Date());\n        },\n\n        /**\n         * change view to a specific month (zero-index, e.g. 0: January)\n         */\n        gotoMonth: function(month)\n        {\n            if (!isNaN(month)) {\n                this.calendars[0].month = parseInt(month, 10);\n                this.adjustCalendars();\n            }\n        },\n\n        nextMonth: function()\n        {\n            this.calendars[0].month++;\n            this.adjustCalendars();\n        },\n\n        prevMonth: function()\n        {\n            this.calendars[0].month--;\n            this.adjustCalendars();\n        },\n\n        /**\n         * change view to a specific full year (e.g. \"2012\")\n         */\n        gotoYear: function(year)\n        {\n            if (!isNaN(year)) {\n                this.calendars[0].year = parseInt(year, 10);\n                this.adjustCalendars();\n            }\n        },\n\n        /**\n         * change the minDate\n         */\n        setMinDate: function(value)\n        {\n            if(value instanceof Date) {\n                setToStartOfDay(value);\n                this._o.minDate = value;\n                this._o.minYear  = value.getFullYear();\n                this._o.minMonth = value.getMonth();\n            } else {\n                this._o.minDate = defaults.minDate;\n                this._o.minYear  = defaults.minYear;\n                this._o.minMonth = defaults.minMonth;\n                this._o.startRange = defaults.startRange;\n            }\n\n            this.draw();\n        },\n\n        /**\n         * change the maxDate\n         */\n        setMaxDate: function(value)\n        {\n            if(value instanceof Date) {\n                setToStartOfDay(value);\n                this._o.maxDate = value;\n                this._o.maxYear = value.getFullYear();\n                this._o.maxMonth = value.getMonth();\n            } else {\n                this._o.maxDate = defaults.maxDate;\n                this._o.maxYear = defaults.maxYear;\n                this._o.maxMonth = defaults.maxMonth;\n                this._o.endRange = defaults.endRange;\n            }\n\n            this.draw();\n        },\n\n        setStartRange: function(value)\n        {\n            this._o.startRange = value;\n        },\n\n        setEndRange: function(value)\n        {\n            this._o.endRange = value;\n        },\n\n        /**\n         * refresh the HTML\n         */\n        draw: function(force)\n        {\n            if (!this._v && !force) {\n                return;\n            }\n            var opts = this._o,\n                minYear = opts.minYear,\n                maxYear = opts.maxYear,\n                minMonth = opts.minMonth,\n                maxMonth = opts.maxMonth,\n                html = '',\n                randId;\n\n            if (this._y <= minYear) {\n                this._y = minYear;\n                if (!isNaN(minMonth) && this._m < minMonth) {\n                    this._m = minMonth;\n                }\n            }\n            if (this._y >= maxYear) {\n                this._y = maxYear;\n                if (!isNaN(maxMonth) && this._m > maxMonth) {\n                    this._m = maxMonth;\n                }\n            }\n\n            randId = 'pika-title-' + Math.random().toString(36).replace(/[^a-z]+/g, '').substr(0, 2);\n\n            for (var c = 0; c < opts.numberOfMonths; c++) {\n                html += '<div class=\"pika-lendar\">' + renderTitle(this, c, this.calendars[c].year, this.calendars[c].month, this.calendars[0].year, randId) + this.render(this.calendars[c].year, this.calendars[c].month, randId) + '</div>';\n            }\n\n            this.el.innerHTML = html;\n\n            if (opts.bound) {\n                if(opts.field.type !== 'hidden') {\n                    sto(function() {\n                        opts.trigger.focus();\n                    }, 1);\n                }\n            }\n\n            if (typeof this._o.onDraw === 'function') {\n                this._o.onDraw(this);\n            }\n            \n            if (opts.bound) {\n                // let the screen reader user know to use arrow keys\n                opts.field.setAttribute('aria-label', 'Use the arrow keys to pick a date');\n            }\n        },\n\n        adjustPosition: function()\n        {\n            var field, pEl, width, height, viewportWidth, viewportHeight, scrollTop, left, top, clientRect;\n\n            if (this._o.container) return;\n\n            this.el.style.position = 'absolute';\n\n            field = this._o.trigger;\n            pEl = field;\n            width = this.el.offsetWidth;\n            height = this.el.offsetHeight;\n            viewportWidth = window.innerWidth || document.documentElement.clientWidth;\n            viewportHeight = window.innerHeight || document.documentElement.clientHeight;\n            scrollTop = window.pageYOffset || document.body.scrollTop || document.documentElement.scrollTop;\n\n            if (typeof field.getBoundingClientRect === 'function') {\n                clientRect = field.getBoundingClientRect();\n                left = clientRect.left + window.pageXOffset;\n                top = clientRect.bottom + window.pageYOffset;\n            } else {\n                left = pEl.offsetLeft;\n                top  = pEl.offsetTop + pEl.offsetHeight;\n                while((pEl = pEl.offsetParent)) {\n                    left += pEl.offsetLeft;\n                    top  += pEl.offsetTop;\n                }\n            }\n\n            // default position is bottom & left\n            if ((this._o.reposition && left + width > viewportWidth) ||\n                (\n                    this._o.position.indexOf('right') > -1 &&\n                    left - width + field.offsetWidth > 0\n                )\n            ) {\n                left = left - width + field.offsetWidth;\n            }\n            if ((this._o.reposition && top + height > viewportHeight + scrollTop) ||\n                (\n                    this._o.position.indexOf('top') > -1 &&\n                    top - height - field.offsetHeight > 0\n                )\n            ) {\n                top = top - height - field.offsetHeight;\n            }\n\n            this.el.style.left = left + 'px';\n            this.el.style.top = top + 'px';\n        },\n\n        /**\n         * render HTML for a particular month\n         */\n        render: function(year, month, randId)\n        {\n            var opts   = this._o,\n                now    = new Date(),\n                days   = getDaysInMonth(year, month),\n                before = new Date(year, month, 1).getDay(),\n                data   = [],\n                row    = [];\n            setToStartOfDay(now);\n            if (opts.firstDay > 0) {\n                before -= opts.firstDay;\n                if (before < 0) {\n                    before += 7;\n                }\n            }\n            var previousMonth = month === 0 ? 11 : month - 1,\n                nextMonth = month === 11 ? 0 : month + 1,\n                yearOfPreviousMonth = month === 0 ? year - 1 : year,\n                yearOfNextMonth = month === 11 ? year + 1 : year,\n                daysInPreviousMonth = getDaysInMonth(yearOfPreviousMonth, previousMonth);\n            var cells = days + before,\n                after = cells;\n            while(after > 7) {\n                after -= 7;\n            }\n            cells += 7 - after;\n            for (var i = 0, r = 0; i < cells; i++)\n            {\n                var day = new Date(year, month, 1 + (i - before)),\n                    isSelected = isDate(this._d) ? compareDates(day, this._d) : false,\n                    isToday = compareDates(day, now),\n                    isEmpty = i < before || i >= (days + before),\n                    dayNumber = 1 + (i - before),\n                    monthNumber = month,\n                    yearNumber = year,\n                    isStartRange = opts.startRange && compareDates(opts.startRange, day),\n                    isEndRange = opts.endRange && compareDates(opts.endRange, day),\n                    isInRange = opts.startRange && opts.endRange && opts.startRange < day && day < opts.endRange,\n                    isDisabled = (opts.minDate && day < opts.minDate) ||\n                                 (opts.maxDate && day > opts.maxDate) ||\n                                 (opts.disableWeekends && isWeekend(day)) ||\n                                 (opts.disableDayFn && opts.disableDayFn(day));\n\n                if (isEmpty) {\n                    if (i < before) {\n                        dayNumber = daysInPreviousMonth + dayNumber;\n                        monthNumber = previousMonth;\n                        yearNumber = yearOfPreviousMonth;\n                    } else {\n                        dayNumber = dayNumber - days;\n                        monthNumber = nextMonth;\n                        yearNumber = yearOfNextMonth;\n                    }\n                }\n\n                var dayConfig = {\n                        day: dayNumber,\n                        month: monthNumber,\n                        year: yearNumber,\n                        isSelected: isSelected,\n                        isToday: isToday,\n                        isDisabled: isDisabled,\n                        isEmpty: isEmpty,\n                        isStartRange: isStartRange,\n                        isEndRange: isEndRange,\n                        isInRange: isInRange,\n                        showDaysInNextAndPreviousMonths: opts.showDaysInNextAndPreviousMonths\n                    };\n\n                row.push(renderDay(dayConfig));\n\n                if (++r === 7) {\n                    if (opts.showWeekNumber) {\n                        row.unshift(renderWeek(i - before, month, year));\n                    }\n                    data.push(renderRow(row, opts.isRTL));\n                    row = [];\n                    r = 0;\n                }\n            }\n            return renderTable(opts, data, randId);\n        },\n\n        isVisible: function()\n        {\n            return this._v;\n        },\n\n        show: function()\n        {\n            if (!this.isVisible()) {\n                removeClass(this.el, 'is-hidden');\n                this._v = true;\n                this.draw();\n                if (this._o.bound) {\n                    addEvent(document, 'click', this._onClick);\n                    this.adjustPosition();\n                }\n                if (typeof this._o.onOpen === 'function') {\n                    this._o.onOpen.call(this);\n                }\n            }\n        },\n\n        hide: function()\n        {\n            var v = this._v;\n            if (v !== false) {\n                if (this._o.bound) {\n                    removeEvent(document, 'click', this._onClick);\n                }\n                this.el.style.position = 'static'; // reset\n                this.el.style.left = 'auto';\n                this.el.style.top = 'auto';\n                addClass(this.el, 'is-hidden');\n                this._v = false;\n                if (v !== undefined && typeof this._o.onClose === 'function') {\n                    this._o.onClose.call(this);\n                }\n            }\n        },\n\n        /**\n         * GAME OVER\n         */\n        destroy: function()\n        {\n            this.hide();\n            removeEvent(this.el, 'mousedown', this._onMouseDown, true);\n            removeEvent(this.el, 'touchend', this._onMouseDown, true);\n            removeEvent(this.el, 'change', this._onChange);\n            if (this._o.field) {\n                removeEvent(this._o.field, 'change', this._onInputChange);\n                if (this._o.bound) {\n                    removeEvent(this._o.trigger, 'click', this._onInputClick);\n                    removeEvent(this._o.trigger, 'focus', this._onInputFocus);\n                    removeEvent(this._o.trigger, 'blur', this._onInputBlur);\n                }\n            }\n            if (this.el.parentNode) {\n                this.el.parentNode.removeChild(this.el);\n            }\n        }\n\n    };\n\n    return Pikaday;\n\n}));\n\n\n//# sourceURL=webpack:///./node_modules/pikaday/pikaday.js?");

/***/ }),

/***/ "./node_modules/process/browser.js":
/*!*****************************************!*\
  !*** ./node_modules/process/browser.js ***!
  \*****************************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("// 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\nfunction defaultSetTimout() {\n    throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n    throw new Error('clearTimeout has not been defined');\n}\n(function () {\n    try {\n        if (typeof setTimeout === 'function') {\n            cachedSetTimeout = setTimeout;\n        } else {\n            cachedSetTimeout = defaultSetTimout;\n        }\n    } catch (e) {\n        cachedSetTimeout = defaultSetTimout;\n    }\n    try {\n        if (typeof clearTimeout === 'function') {\n            cachedClearTimeout = clearTimeout;\n        } else {\n            cachedClearTimeout = defaultClearTimeout;\n        }\n    } catch (e) {\n        cachedClearTimeout = defaultClearTimeout;\n    }\n} ())\nfunction runTimeout(fun) {\n    if (cachedSetTimeout === setTimeout) {\n        //normal enviroments in sane situations\n        return setTimeout(fun, 0);\n    }\n    // if setTimeout wasn't available but was latter defined\n    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n        cachedSetTimeout = setTimeout;\n        return setTimeout(fun, 0);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedSetTimeout(fun, 0);\n    } catch(e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n            return cachedSetTimeout.call(null, fun, 0);\n        } catch(e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n            return cachedSetTimeout.call(this, fun, 0);\n        }\n    }\n\n\n}\nfunction runClearTimeout(marker) {\n    if (cachedClearTimeout === clearTimeout) {\n        //normal enviroments in sane situations\n        return clearTimeout(marker);\n    }\n    // if clearTimeout wasn't available but was latter defined\n    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n        cachedClearTimeout = clearTimeout;\n        return clearTimeout(marker);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedClearTimeout(marker);\n    } catch (e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally\n            return cachedClearTimeout.call(null, marker);\n        } catch (e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n            // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n            return cachedClearTimeout.call(this, marker);\n        }\n    }\n\n\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;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\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//# sourceURL=webpack:///./node_modules/process/browser.js?");

/***/ }),

/***/ "./node_modules/prop-types/factoryWithThrowingShims.js":
/*!*************************************************************!*\
  !*** ./node_modules/prop-types/factoryWithThrowingShims.js ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n\nvar ReactPropTypesSecret = __webpack_require__(/*! ./lib/ReactPropTypesSecret */ \"./node_modules/prop-types/lib/ReactPropTypesSecret.js\");\n\nfunction emptyFunction() {}\n\nmodule.exports = function() {\n  function shim(props, propName, componentName, location, propFullName, secret) {\n    if (secret === ReactPropTypesSecret) {\n      // It is still safe when called from React.\n      return;\n    }\n    var err = new Error(\n      'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n      'Use PropTypes.checkPropTypes() to call them. ' +\n      'Read more at http://fb.me/use-check-prop-types'\n    );\n    err.name = 'Invariant Violation';\n    throw err;\n  };\n  shim.isRequired = shim;\n  function getShim() {\n    return shim;\n  };\n  // Important!\n  // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n  var ReactPropTypes = {\n    array: shim,\n    bool: shim,\n    func: shim,\n    number: shim,\n    object: shim,\n    string: shim,\n    symbol: shim,\n\n    any: shim,\n    arrayOf: getShim,\n    element: shim,\n    instanceOf: getShim,\n    node: shim,\n    objectOf: getShim,\n    oneOf: getShim,\n    oneOfType: getShim,\n    shape: getShim,\n    exact: getShim\n  };\n\n  ReactPropTypes.checkPropTypes = emptyFunction;\n  ReactPropTypes.PropTypes = ReactPropTypes;\n\n  return ReactPropTypes;\n};\n\n\n//# sourceURL=webpack:///./node_modules/prop-types/factoryWithThrowingShims.js?");

/***/ }),

/***/ "./node_modules/prop-types/index.js":
/*!******************************************!*\
  !*** ./node_modules/prop-types/index.js ***!
  \******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (false) { var throwOnDirectAccess, isValidElement, REACT_ELEMENT_TYPE; } else {\n  // By explicitly using `prop-types` you are opting into new production behavior.\n  // http://fb.me/prop-types-in-prod\n  module.exports = __webpack_require__(/*! ./factoryWithThrowingShims */ \"./node_modules/prop-types/factoryWithThrowingShims.js\")();\n}\n\n\n//# sourceURL=webpack:///./node_modules/prop-types/index.js?");

/***/ }),

/***/ "./node_modules/prop-types/lib/ReactPropTypesSecret.js":
/*!*************************************************************!*\
  !*** ./node_modules/prop-types/lib/ReactPropTypesSecret.js ***!
  \*************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n\n\n//# sourceURL=webpack:///./node_modules/prop-types/lib/ReactPropTypesSecret.js?");

/***/ }),

/***/ "./node_modules/react-google-charts/dist/index.esm.js":
/*!************************************************************!*\
  !*** ./node_modules/react-google-charts/dist/index.esm.js ***!
  \************************************************************/
/*! exports provided: default, Chart */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Chart\", function() { return Chart; });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_load_script__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-load-script */ \"./node_modules/react-load-script/lib/index.js\");\n/* harmony import */ var react_load_script__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_load_script__WEBPACK_IMPORTED_MODULE_1__);\n\n\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n    extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n    return extendStatics(d, b);\r\n};\r\n\r\nfunction __extends(d, b) {\r\n    extendStatics(d, b);\r\n    function __() { this.constructor = d; }\r\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nvar __assign = function() {\r\n    __assign = Object.assign || function __assign(t) {\r\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n            s = arguments[i];\r\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n        }\r\n        return t;\r\n    };\r\n    return __assign.apply(this, arguments);\r\n};\r\n\r\nfunction __awaiter(thisArg, _arguments, P, generator) {\r\n    return new (P || (P = Promise))(function (resolve, reject) {\r\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n    });\r\n}\r\n\r\nfunction __generator(thisArg, body) {\r\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n    function verb(n) { return function (v) { return step([n, v]); }; }\r\n    function step(op) {\r\n        if (f) throw new TypeError(\"Generator is already executing.\");\r\n        while (_) try {\r\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n            if (y = 0, t) op = [op[0] & 2, t.value];\r\n            switch (op[0]) {\r\n                case 0: case 1: t = op; break;\r\n                case 4: _.label++; return { value: op[1], done: false };\r\n                case 5: _.label++; y = op[1]; op = [0]; continue;\r\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n                default:\r\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n                    if (t[2]) _.ops.pop();\r\n                    _.trys.pop(); continue;\r\n            }\r\n            op = body.call(thisArg, _);\r\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n    }\r\n}\n\nvar chartDefaultProps = {\r\n    graph_id: null,\r\n    legend_toggle: false,\r\n    graphID: null,\r\n    options: {\r\n        colors: null\r\n    },\r\n    data: null,\r\n    rows: null,\r\n    columns: null,\r\n    diffdata: null,\r\n    chartEvents: null,\r\n    legendToggle: false,\r\n    chartActions: null,\r\n    getChartWrapper: function (chartWrapper, google) { },\r\n    getChartEditor: null,\r\n    className: \"\",\r\n    style: {},\r\n    formatters: null,\r\n    spreadSheetUrl: null,\r\n    spreadSheetQueryParameters: {\r\n        headers: 1,\r\n        gid: 1\r\n    },\r\n    rootProps: {},\r\n    chartWrapperParams: {},\r\n    controls: null,\r\n    render: null,\r\n    toolbarItems: null,\r\n    toolbarID: null\r\n};\n\nvar GoogleChartLoader = (function (_super) {\r\n    __extends(GoogleChartLoader, _super);\r\n    function GoogleChartLoader() {\r\n        var _this = _super !== null && _super.apply(this, arguments) || this;\r\n        _this.handleGoogleChartsLoaderScriptLoaded = function (windowGoogleCharts) {\r\n            var _a = _this.props, version = _a.chartVersion, packages = _a.chartPackages, language = _a.chartLanguage, mapsApiKey = _a.mapsApiKey, onLoad = _a.onLoad;\r\n            windowGoogleCharts.charts.load(version || \"current\", {\r\n                packages: packages || [\"corechart\", \"controls\"],\r\n                language: language || \"en\",\r\n                mapsApiKey: mapsApiKey\r\n            });\r\n            windowGoogleCharts.charts.setOnLoadCallback(function () {\r\n                onLoad(windowGoogleCharts);\r\n            });\r\n        };\r\n        return _this;\r\n    }\r\n    GoogleChartLoader.prototype.shouldComponentUpdate = function (nextProps) {\r\n        return nextProps.chartPackages === this.props.chartPackages;\r\n    };\r\n    GoogleChartLoader.prototype.render = function () {\r\n        var _this = this;\r\n        var onError = this.props.onError;\r\n        return (Object(react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"])(react_load_script__WEBPACK_IMPORTED_MODULE_1___default.a, { url: \"https://www.gstatic.com/charts/loader.js\", onError: onError, onLoad: function () {\r\n                var windowWithGoogle = window;\r\n                if (windowWithGoogle.google) {\r\n                    _this.handleGoogleChartsLoaderScriptLoaded(windowWithGoogle.google);\r\n                }\r\n            } }));\r\n    };\r\n    return GoogleChartLoader;\r\n}(react__WEBPACK_IMPORTED_MODULE_0__[\"Component\"]));\n\nvar uniqueID = 0;\r\nvar generateUniqueID = function () {\r\n    uniqueID += 1;\r\n    return \"reactgooglegraph-\" + uniqueID;\r\n};\n\nvar DEFAULT_CHART_COLORS = [\r\n    \"#3366CC\",\r\n    \"#DC3912\",\r\n    \"#FF9900\",\r\n    \"#109618\",\r\n    \"#990099\",\r\n    \"#3B3EAC\",\r\n    \"#0099C6\",\r\n    \"#DD4477\",\r\n    \"#66AA00\",\r\n    \"#B82E2E\",\r\n    \"#316395\",\r\n    \"#994499\",\r\n    \"#22AA99\",\r\n    \"#AAAA11\",\r\n    \"#6633CC\",\r\n    \"#E67300\",\r\n    \"#8B0707\",\r\n    \"#329262\",\r\n    \"#5574A6\",\r\n    \"#3B3EAC\"\r\n];\n\nvar _this = undefined;\r\nvar loadDataTableFromSpreadSheet = function (googleViz, spreadSheetUrl, urlParams) {\r\n    if (urlParams === void 0) { urlParams = {}; }\r\n    return __awaiter(_this, void 0, void 0, function () {\r\n        return __generator(this, function (_a) {\r\n            return [2, new Promise(function (resolve, reject) {\r\n                    var headers = \"\" + (urlParams.headers ? \"headers=\" + urlParams.headers : \"headers=0\");\r\n                    var queryString = \"\" + (urlParams.query ? \"&tq=\" + encodeURIComponent(urlParams.query) : \"\");\r\n                    var gid = \"\" + (urlParams.gid ? \"&gid=\" + urlParams.gid : \"\");\r\n                    var sheet = \"\" + (urlParams.sheet ? \"&sheet=\" + urlParams.sheet : \"\");\r\n                    var urlQueryString = \"\" + headers + gid + sheet + queryString;\r\n                    var urlToSpreadSheet = spreadSheetUrl + \"/gviz/tq?\" + urlQueryString;\r\n                    var query = new googleViz.visualization.Query(urlToSpreadSheet);\r\n                    query.send(function (response) {\r\n                        if (response.isError()) {\r\n                            reject(\"Error in query:  \" + response.getMessage() + \" \" + response.getDetailedMessage());\r\n                        }\r\n                        else {\r\n                            resolve(response.getDataTable());\r\n                        }\r\n                    });\r\n                })];\r\n        });\r\n    });\r\n};\n\nvar _a = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"createContext\"])(chartDefaultProps), Provider = _a.Provider, Consumer = _a.Consumer;\r\nvar ContextProvider = function (_a) {\r\n    var children = _a.children, value = _a.value;\r\n    return Object(react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"])(Provider, { value: value }, children);\r\n};\r\nvar ContextConsumer = function (_a) {\r\n    var render = _a.render;\r\n    return (Object(react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"])(Consumer, null, function (context) {\r\n        return render(context);\r\n    }));\r\n};\n\nvar GRAY_COLOR = \"#CCCCCC\";\r\nvar GoogleChartDataTableInner = (function (_super) {\r\n    __extends(GoogleChartDataTableInner, _super);\r\n    function GoogleChartDataTableInner() {\r\n        var _this = _super !== null && _super.apply(this, arguments) || this;\r\n        _this.state = {\r\n            hiddenColumns: []\r\n        };\r\n        _this.listenToLegendToggle = function () {\r\n            var _a = _this.props, google = _a.google, googleChartWrapper = _a.googleChartWrapper;\r\n            google.visualization.events.addListener(googleChartWrapper, \"select\", function () {\r\n                var chart = googleChartWrapper.getChart();\r\n                var selection = chart.getSelection();\r\n                var dataTable = googleChartWrapper.getDataTable();\r\n                if (selection.length === 0 ||\r\n                    selection[0].row !== null ||\r\n                    dataTable === null) {\r\n                    return;\r\n                }\r\n                var columnIndex = selection[0].column;\r\n                var columnID = _this.getColumnID(dataTable, columnIndex);\r\n                if (_this.state.hiddenColumns.includes(columnID)) {\r\n                    _this.setState(function (state) { return (__assign({}, state, { hiddenColumns: state.hiddenColumns.filter(function (colID) { return colID !== columnID; }).slice() })); });\r\n                }\r\n                else {\r\n                    _this.setState(function (state) { return (__assign({}, state, { hiddenColumns: state.hiddenColumns.concat([columnID]) })); });\r\n                }\r\n            });\r\n        };\r\n        _this.applyFormatters = function (dataTable, formatters) {\r\n            var google = _this.props.google;\r\n            for (var _i = 0, formatters_1 = formatters; _i < formatters_1.length; _i++) {\r\n                var formatter = formatters_1[_i];\r\n                switch (formatter.type) {\r\n                    case \"ArrowFormat\": {\r\n                        var vizFormatter = new google.visualization.ArrowFormat(formatter.options);\r\n                        vizFormatter.format(dataTable, formatter.column);\r\n                        break;\r\n                    }\r\n                    case \"BarFormat\": {\r\n                        var vizFormatter = new google.visualization.BarFormat(formatter.options);\r\n                        vizFormatter.format(dataTable, formatter.column);\r\n                        break;\r\n                    }\r\n                    case \"ColorFormat\": {\r\n                        var vizFormatter = new google.visualization.ColorFormat(formatter.options);\r\n                        var ranges = formatter.ranges;\r\n                        for (var _a = 0, ranges_1 = ranges; _a < ranges_1.length; _a++) {\r\n                            var range = ranges_1[_a];\r\n                            vizFormatter.addRange.apply(vizFormatter, range);\r\n                        }\r\n                        vizFormatter.format(dataTable, formatter.column);\r\n                        break;\r\n                    }\r\n                    case \"DateFormat\": {\r\n                        var vizFormatter = new google.visualization.DateFormat(formatter.options);\r\n                        vizFormatter.format(dataTable, formatter.column);\r\n                        break;\r\n                    }\r\n                    case \"NumberFormat\": {\r\n                        var vizFormatter = new google.visualization.NumberFormat(formatter.options);\r\n                        vizFormatter.format(dataTable, formatter.column);\r\n                        break;\r\n                    }\r\n                    case \"PatternFormat\": {\r\n                        var vizFormatter = new google.visualization.PatternFormat(formatter.options);\r\n                        vizFormatter.format(dataTable, formatter.column);\r\n                        break;\r\n                    }\r\n                }\r\n            }\r\n        };\r\n        _this.getColumnID = function (dataTable, columnIndex) {\r\n            return (dataTable.getColumnId(columnIndex) ||\r\n                dataTable.getColumnLabel(columnIndex));\r\n        };\r\n        _this.draw = function (_a) {\r\n            var data = _a.data, diffdata = _a.diffdata, rows = _a.rows, columns = _a.columns, options = _a.options, legend_toggle = _a.legend_toggle, legendToggle = _a.legendToggle, chartType = _a.chartType, formatters = _a.formatters, spreadSheetUrl = _a.spreadSheetUrl, spreadSheetQueryParameters = _a.spreadSheetQueryParameters;\r\n            return __awaiter(_this, void 0, void 0, function () {\r\n                var _b, google, googleChartWrapper, dataTable, chartDiff, oldData, newData, columnCount, i, columnID, previousColumnLabel, previousColumnID, previousColumnType, chart;\r\n                return __generator(this, function (_c) {\r\n                    switch (_c.label) {\r\n                        case 0:\r\n                            _b = this.props, google = _b.google, googleChartWrapper = _b.googleChartWrapper;\r\n                            chartDiff = null;\r\n                            if (diffdata !== null) {\r\n                                oldData = google.visualization.arrayToDataTable(diffdata.old);\r\n                                newData = google.visualization.arrayToDataTable(diffdata.new);\r\n                                chartDiff = google.visualization[chartType].prototype.computeDiff(oldData, newData);\r\n                            }\r\n                            if (!(data !== null)) return [3, 1];\r\n                            if (Array.isArray(data)) {\r\n                                dataTable = google.visualization.arrayToDataTable(data);\r\n                            }\r\n                            else {\r\n                                dataTable = new google.visualization.DataTable(data);\r\n                            }\r\n                            return [3, 5];\r\n                        case 1:\r\n                            if (!(rows !== null && columns !== null)) return [3, 2];\r\n                            dataTable = google.visualization.arrayToDataTable([columns].concat(rows));\r\n                            return [3, 5];\r\n                        case 2:\r\n                            if (!(spreadSheetUrl !== null)) return [3, 4];\r\n                            return [4, loadDataTableFromSpreadSheet(google, spreadSheetUrl, spreadSheetQueryParameters)];\r\n                        case 3:\r\n                            dataTable = (_c.sent());\r\n                            return [3, 5];\r\n                        case 4:\r\n                            dataTable = google.visualization.arrayToDataTable([]);\r\n                            _c.label = 5;\r\n                        case 5:\r\n                            columnCount = dataTable.getNumberOfColumns();\r\n                            for (i = 0; i < columnCount; i += 1) {\r\n                                columnID = this.getColumnID(dataTable, i);\r\n                                if (this.state.hiddenColumns.includes(columnID)) {\r\n                                    previousColumnLabel = dataTable.getColumnLabel(i);\r\n                                    previousColumnID = dataTable.getColumnId(i);\r\n                                    previousColumnType = dataTable.getColumnType(i);\r\n                                    dataTable.removeColumn(i);\r\n                                    dataTable.addColumn({\r\n                                        label: previousColumnLabel,\r\n                                        id: previousColumnID,\r\n                                        type: previousColumnType\r\n                                    });\r\n                                }\r\n                            }\r\n                            chart = googleChartWrapper.getChart();\r\n                            if (googleChartWrapper.getChartType() === \"Timeline\") {\r\n                                chart && chart.clearChart();\r\n                            }\r\n                            googleChartWrapper.setOptions(options);\r\n                            googleChartWrapper.setDataTable(dataTable);\r\n                            googleChartWrapper.draw();\r\n                            if (this.props.googleChartDashboard !== null) {\r\n                                this.props.googleChartDashboard.draw(dataTable);\r\n                            }\r\n                            if (chartDiff !== null) {\r\n                                googleChartWrapper.setDataTable(chartDiff);\r\n                                googleChartWrapper.draw();\r\n                            }\r\n                            if (formatters !== null) {\r\n                                this.applyFormatters(dataTable, formatters);\r\n                                googleChartWrapper.setDataTable(dataTable);\r\n                                googleChartWrapper.draw();\r\n                            }\r\n                            if (legendToggle === true || legend_toggle === true) {\r\n                                this.grayOutHiddenColumns({ options: options });\r\n                            }\r\n                            return [2];\r\n                    }\r\n                });\r\n            });\r\n        };\r\n        _this.grayOutHiddenColumns = function (_a) {\r\n            var options = _a.options;\r\n            var googleChartWrapper = _this.props.googleChartWrapper;\r\n            var dataTable = googleChartWrapper.getDataTable();\r\n            if (dataTable === null)\r\n                return;\r\n            var columnCount = dataTable.getNumberOfColumns();\r\n            var hasAHiddenColumn = _this.state.hiddenColumns.length > 0;\r\n            if (hasAHiddenColumn === false)\r\n                return;\r\n            var colors = Array.from({ length: columnCount - 1 }).map(function (dontcare, i) {\r\n                var columnID = _this.getColumnID(dataTable, i + 1);\r\n                if (_this.state.hiddenColumns.includes(columnID)) {\r\n                    return GRAY_COLOR;\r\n                }\r\n                else if (typeof options.colors !== \"undefined\" &&\r\n                    options.colors !== null) {\r\n                    return options.colors[i];\r\n                }\r\n                else {\r\n                    return DEFAULT_CHART_COLORS[i];\r\n                }\r\n            });\r\n            googleChartWrapper.setOptions(__assign({}, options, { colors: colors }));\r\n            googleChartWrapper.draw();\r\n        };\r\n        _this.onResize = function () {\r\n            var googleChartWrapper = _this.props.googleChartWrapper;\r\n            googleChartWrapper.draw();\r\n        };\r\n        return _this;\r\n    }\r\n    GoogleChartDataTableInner.prototype.componentDidMount = function () {\r\n        this.draw(this.props);\r\n        window.addEventListener(\"resize\", this.onResize);\r\n        if (this.props.legend_toggle || this.props.legendToggle) {\r\n            this.listenToLegendToggle();\r\n        }\r\n    };\r\n    GoogleChartDataTableInner.prototype.componentWillUnmount = function () {\r\n        var _a = this.props, google = _a.google, googleChartWrapper = _a.googleChartWrapper;\r\n        window.removeEventListener(\"resize\", this.onResize);\r\n        google.visualization.events.removeAllListeners(googleChartWrapper);\r\n        if (googleChartWrapper.getChartType() === \"Timeline\") {\r\n            googleChartWrapper.getChart() &&\r\n                googleChartWrapper.getChart().clearChart();\r\n        }\r\n    };\r\n    GoogleChartDataTableInner.prototype.componentDidUpdate = function () {\r\n        this.draw(this.props);\r\n    };\r\n    GoogleChartDataTableInner.prototype.render = function () {\r\n        return null;\r\n    };\r\n    return GoogleChartDataTableInner;\r\n}(react__WEBPACK_IMPORTED_MODULE_0__[\"Component\"]));\r\nvar GoogleChartDataTable = (function (_super) {\r\n    __extends(GoogleChartDataTable, _super);\r\n    function GoogleChartDataTable() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    GoogleChartDataTable.prototype.componentDidMount = function () { };\r\n    GoogleChartDataTable.prototype.componentWillUnmount = function () { };\r\n    GoogleChartDataTable.prototype.shouldComponentUpdate = function () {\r\n        return false;\r\n    };\r\n    GoogleChartDataTable.prototype.render = function () {\r\n        var _a = this.props, google = _a.google, googleChartWrapper = _a.googleChartWrapper, googleChartDashboard = _a.googleChartDashboard;\r\n        return (Object(react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"])(ContextConsumer, { render: function (props) {\r\n                return (Object(react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"])(GoogleChartDataTableInner, __assign({}, props, { google: google, googleChartWrapper: googleChartWrapper, googleChartDashboard: googleChartDashboard })));\r\n            } }));\r\n    };\r\n    return GoogleChartDataTable;\r\n}(react__WEBPACK_IMPORTED_MODULE_0__[\"Component\"]));\n\nvar GoogleChartEvents = (function (_super) {\r\n    __extends(GoogleChartEvents, _super);\r\n    function GoogleChartEvents() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    GoogleChartEvents.prototype.shouldComponentUpdate = function () {\r\n        return false;\r\n    };\r\n    GoogleChartEvents.prototype.listenToEvents = function (_a) {\r\n        var _this = this;\r\n        var chartEvents = _a.chartEvents, google = _a.google, googleChartWrapper = _a.googleChartWrapper;\r\n        if (chartEvents === null) {\r\n            return;\r\n        }\r\n        google.visualization.events.removeAllListeners(googleChartWrapper);\r\n        var _loop_1 = function (event_1) {\r\n            var eventName = event_1.eventName, callback = event_1.callback;\r\n            google.visualization.events.addListener(googleChartWrapper, eventName, function () {\r\n                var args = [];\r\n                for (var _i = 0; _i < arguments.length; _i++) {\r\n                    args[_i] = arguments[_i];\r\n                }\r\n                callback({\r\n                    chartWrapper: googleChartWrapper,\r\n                    props: _this.props,\r\n                    google: google,\r\n                    eventArgs: args\r\n                });\r\n            });\r\n        };\r\n        for (var _i = 0, chartEvents_1 = chartEvents; _i < chartEvents_1.length; _i++) {\r\n            var event_1 = chartEvents_1[_i];\r\n            _loop_1(event_1);\r\n        }\r\n    };\r\n    GoogleChartEvents.prototype.render = function () {\r\n        var _this = this;\r\n        var _a = this.props, google = _a.google, googleChartWrapper = _a.googleChartWrapper;\r\n        return (Object(react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"])(ContextConsumer, { render: function (propsFromContext) {\r\n                _this.listenToEvents({\r\n                    chartEvents: propsFromContext.chartEvents || null,\r\n                    google: google,\r\n                    googleChartWrapper: googleChartWrapper\r\n                });\r\n                return null;\r\n            } }));\r\n    };\r\n    return GoogleChartEvents;\r\n}(react__WEBPACK_IMPORTED_MODULE_0__[\"Component\"]));\n\nvar controlCounter = 0;\r\nvar GoogleChart = (function (_super) {\r\n    __extends(GoogleChart, _super);\r\n    function GoogleChart() {\r\n        var _this = _super !== null && _super.apply(this, arguments) || this;\r\n        _this.state = {\r\n            googleChartWrapper: null,\r\n            googleChartDashboard: null,\r\n            googleChartControls: null,\r\n            googleChartEditor: null,\r\n            isReady: false\r\n        };\r\n        _this.graphID = null;\r\n        _this.dashboard_ref = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"createRef\"])();\r\n        _this.toolbar_ref = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"createRef\"])();\r\n        _this.getGraphID = function () {\r\n            var _a = _this.props, graphID = _a.graphID, graph_id = _a.graph_id;\r\n            var instanceGraphID;\r\n            if (graphID === null && graph_id === null) {\r\n                if (_this.graphID === null) {\r\n                    instanceGraphID = generateUniqueID();\r\n                }\r\n                else {\r\n                    instanceGraphID = _this.graphID;\r\n                }\r\n            }\r\n            else if (graphID !== null && graph_id === null) {\r\n                instanceGraphID = graphID;\r\n            }\r\n            else if (graph_id !== null && graphID === null) {\r\n                instanceGraphID = graph_id;\r\n            }\r\n            else {\r\n                instanceGraphID = graphID;\r\n            }\r\n            _this.graphID = instanceGraphID;\r\n            return _this.graphID;\r\n        };\r\n        _this.getControlID = function (id, index) {\r\n            controlCounter += 1;\r\n            var controlID;\r\n            if (typeof id === \"undefined\") {\r\n                controlID = \"googlechart-control-\" + index + \"-\" + controlCounter;\r\n            }\r\n            else {\r\n                controlID = id;\r\n            }\r\n            return controlID;\r\n        };\r\n        _this.addControls = function (googleChartWrapper, googleChartDashboard) {\r\n            var _a = _this.props, google = _a.google, controls = _a.controls;\r\n            var googleChartControls = controls === null\r\n                ? null\r\n                : controls.map(function (control, i) {\r\n                    var controlIDMaybe = control.controlID, controlType = control.controlType, controlOptions = control.options, controlWrapperParams = control.controlWrapperParams;\r\n                    var controlID = _this.getControlID(controlIDMaybe, i);\r\n                    return {\r\n                        controlProp: control,\r\n                        control: new google.visualization.ControlWrapper(__assign({ containerId: controlID, controlType: controlType, options: controlOptions }, controlWrapperParams))\r\n                    };\r\n                });\r\n            if (googleChartControls === null) {\r\n                return null;\r\n            }\r\n            googleChartDashboard.bind(googleChartControls.map(function (_a) {\r\n                var control = _a.control;\r\n                return control;\r\n            }), googleChartWrapper);\r\n            var _loop_1 = function (chartControl) {\r\n                var control = chartControl.control, controlProp = chartControl.controlProp;\r\n                var _a = controlProp.controlEvents, controlEvents = _a === void 0 ? [] : _a;\r\n                var _loop_2 = function (event_1) {\r\n                    var callback = event_1.callback, eventName = event_1.eventName;\r\n                    google.visualization.events.removeListener(control, eventName, callback);\r\n                    google.visualization.events.addListener(control, eventName, function () {\r\n                        var args = [];\r\n                        for (var _i = 0; _i < arguments.length; _i++) {\r\n                            args[_i] = arguments[_i];\r\n                        }\r\n                        callback({\r\n                            chartWrapper: googleChartWrapper,\r\n                            controlWrapper: control,\r\n                            props: _this.props,\r\n                            google: google,\r\n                            eventArgs: args\r\n                        });\r\n                    });\r\n                };\r\n                for (var _i = 0, controlEvents_1 = controlEvents; _i < controlEvents_1.length; _i++) {\r\n                    var event_1 = controlEvents_1[_i];\r\n                    _loop_2(event_1);\r\n                }\r\n            };\r\n            for (var _i = 0, googleChartControls_1 = googleChartControls; _i < googleChartControls_1.length; _i++) {\r\n                var chartControl = googleChartControls_1[_i];\r\n                _loop_1(chartControl);\r\n            }\r\n            return googleChartControls;\r\n        };\r\n        _this.renderChart = function () {\r\n            var _a = _this.props, width = _a.width, height = _a.height, options = _a.options, style = _a.style, className = _a.className, rootProps = _a.rootProps, google = _a.google;\r\n            var divStyle = __assign({ height: height || (options && options.height), width: width || (options && options.width) }, style);\r\n            return (Object(react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"])(\"div\", __assign({ id: _this.getGraphID(), style: divStyle, className: className }, rootProps), _this.state.isReady && _this.state.googleChartWrapper !== null ? (Object(react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"])(react__WEBPACK_IMPORTED_MODULE_0__[\"Fragment\"], null,\r\n                Object(react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"])(GoogleChartDataTable, { googleChartWrapper: _this.state.googleChartWrapper, google: google, googleChartDashboard: _this.state.googleChartDashboard }),\r\n                Object(react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"])(GoogleChartEvents, { googleChartWrapper: _this.state.googleChartWrapper, google: google }))) : null));\r\n        };\r\n        _this.renderControl = function (filter) {\r\n            if (filter === void 0) { filter = function (_a) {\r\n                var control = _a.control, controlProp = _a.controlProp;\r\n                return true;\r\n            }; }\r\n            return _this.state.isReady && _this.state.googleChartControls !== null ? (Object(react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"])(react__WEBPACK_IMPORTED_MODULE_0__[\"Fragment\"], null, _this.state.googleChartControls\r\n                .filter(function (_a) {\r\n                var controlProp = _a.controlProp, control = _a.control;\r\n                return filter({ control: control, controlProp: controlProp });\r\n            })\r\n                .map(function (_a) {\r\n                var control = _a.control, controlProp = _a.controlProp;\r\n                return (Object(react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"])(\"div\", { key: control.getContainerId(), id: control.getContainerId() }));\r\n            }))) : null;\r\n        };\r\n        _this.renderToolBar = function () {\r\n            if (_this.props.toolbarItems === null)\r\n                return null;\r\n            return Object(react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"])(\"div\", { ref: _this.toolbar_ref });\r\n        };\r\n        return _this;\r\n    }\r\n    GoogleChart.prototype.componentDidMount = function () {\r\n        var _a = this.props, options = _a.options, google = _a.google, chartType = _a.chartType, chartWrapperParams = _a.chartWrapperParams, toolbarItems = _a.toolbarItems, getChartEditor = _a.getChartEditor, getChartWrapper = _a.getChartWrapper;\r\n        var chartConfig = __assign({ chartType: chartType,\r\n            options: options, containerId: this.getGraphID() }, chartWrapperParams);\r\n        var googleChartWrapper = new google.visualization.ChartWrapper(chartConfig);\r\n        googleChartWrapper.setOptions(options);\r\n        getChartWrapper(googleChartWrapper, google);\r\n        var googleChartDashboard = new google.visualization.Dashboard(this.dashboard_ref);\r\n        var googleChartControls = this.addControls(googleChartWrapper, googleChartDashboard);\r\n        if (toolbarItems !== null) {\r\n            google.visualization.drawToolbar(this.toolbar_ref.current, toolbarItems);\r\n        }\r\n        var googleChartEditor = null;\r\n        if (getChartEditor !== null) {\r\n            googleChartEditor = new google.visualization.ChartEditor();\r\n            getChartEditor({\r\n                chartEditor: googleChartEditor,\r\n                chartWrapper: googleChartWrapper,\r\n                google: google\r\n            });\r\n        }\r\n        this.setState({\r\n            googleChartEditor: googleChartEditor,\r\n            googleChartControls: googleChartControls,\r\n            googleChartDashboard: googleChartDashboard,\r\n            googleChartWrapper: googleChartWrapper,\r\n            isReady: true\r\n        });\r\n    };\r\n    GoogleChart.prototype.shouldComponentUpdate = function (nextProps, nextState) {\r\n        return this.state.isReady !== nextState.isReady;\r\n    };\r\n    GoogleChart.prototype.render = function () {\r\n        var _a = this.props, width = _a.width, height = _a.height, options = _a.options, style = _a.style;\r\n        var divStyle = __assign({ height: height || (options && options.height), width: width || (options && options.width) }, style);\r\n        if (this.props.render !== null) {\r\n            return (Object(react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"])(\"div\", { ref: this.dashboard_ref, style: divStyle },\r\n                Object(react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"])(\"div\", { ref: this.toolbar_ref, id: \"toolbar\" }),\r\n                this.props.render({\r\n                    renderChart: this.renderChart,\r\n                    renderControl: this.renderControl,\r\n                    renderToolbar: this.renderToolBar\r\n                })));\r\n        }\r\n        else {\r\n            return (Object(react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"])(\"div\", { ref: this.dashboard_ref, style: divStyle },\r\n                this.renderControl(function (_a) {\r\n                    var controlProp = _a.controlProp;\r\n                    return controlProp.controlPosition !== \"bottom\";\r\n                }),\r\n                this.renderChart(),\r\n                this.renderControl(function (_a) {\r\n                    var controlProp = _a.controlProp;\r\n                    return controlProp.controlPosition === \"bottom\";\r\n                }),\r\n                this.renderToolBar()));\r\n        }\r\n    };\r\n    return GoogleChart;\r\n}(react__WEBPACK_IMPORTED_MODULE_0__[\"Component\"]));\n\nvar Chart = (function (_super) {\r\n    __extends(Chart, _super);\r\n    function Chart() {\r\n        var _this = _super !== null && _super.apply(this, arguments) || this;\r\n        _this.state = {\r\n            loadingStatus: \"loading\",\r\n            google: null\r\n        };\r\n        return _this;\r\n    }\r\n    Chart.prototype.render = function () {\r\n        var _this = this;\r\n        var _a = this.props, chartLanguage = _a.chartLanguage, chartPackages = _a.chartPackages, chartVersion = _a.chartVersion, mapsApiKey = _a.mapsApiKey, loader = _a.loader, errorElement = _a.errorElement;\r\n        return (Object(react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"])(ContextProvider, { value: this.props },\r\n            this.state.loadingStatus === \"ready\" && this.state.google !== null ? (Object(react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"])(GoogleChart, __assign({}, this.props, { google: this.state.google }))) : this.state.loadingStatus === \"errored\" && errorElement ? (errorElement) : (loader),\r\n            Object(react__WEBPACK_IMPORTED_MODULE_0__[\"createElement\"])(GoogleChartLoader, __assign({}, { chartLanguage: chartLanguage, chartPackages: chartPackages, chartVersion: chartVersion, mapsApiKey: mapsApiKey }, { onLoad: function (google) {\r\n                    _this.setState({\r\n                        loadingStatus: \"ready\",\r\n                        google: google\r\n                    });\r\n                }, onError: function () {\r\n                    _this.setState({\r\n                        loadingStatus: \"errored\"\r\n                    });\r\n                } }))));\r\n    };\r\n    Chart.defaultProps = chartDefaultProps;\r\n    return Chart;\r\n}(react__WEBPACK_IMPORTED_MODULE_0__[\"Component\"]));\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Chart);\n\n\n\n//# sourceURL=webpack:///./node_modules/react-google-charts/dist/index.esm.js?");

/***/ }),

/***/ "./node_modules/react-load-script/lib/index.js":
/*!*****************************************************!*\
  !*** ./node_modules/react-load-script/lib/index.js ***!
  \*****************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Script = function (_React$Component) {\n  _inherits(Script, _React$Component);\n\n  // A dictionary mapping script URL to a boolean value indicating if the script\n  // has failed to load.\n\n\n  // A dictionary mapping script URLs to a dictionary mapping\n  // component key to component for all components that are waiting\n  // for the script to load.\n  function Script(props) {\n    _classCallCheck(this, Script);\n\n    var _this = _possibleConstructorReturn(this, (Script.__proto__ || Object.getPrototypeOf(Script)).call(this, props));\n\n    _this.scriptLoaderId = 'id' + _this.constructor.idCount++; // eslint-disable-line space-unary-ops, no-plusplus\n    return _this;\n  }\n\n  // A counter used to generate a unique id for each component that uses\n  // ScriptLoaderMixin.\n\n\n  // A dictionary mapping script URL to a boolean value indicating if the script\n  // has already been loaded.\n\n\n  _createClass(Script, [{\n    key: 'componentDidMount',\n    value: function componentDidMount() {\n      var _props = this.props,\n          onError = _props.onError,\n          onLoad = _props.onLoad,\n          url = _props.url;\n\n\n      if (this.constructor.loadedScripts[url]) {\n        onLoad();\n        return;\n      }\n\n      if (this.constructor.erroredScripts[url]) {\n        onError();\n        return;\n      }\n\n      // If the script is loading, add the component to the script's observers\n      // and return. Otherwise, initialize the script's observers with the component\n      // and start loading the script.\n      if (this.constructor.scriptObservers[url]) {\n        this.constructor.scriptObservers[url][this.scriptLoaderId] = this.props;\n        return;\n      }\n\n      this.constructor.scriptObservers[url] = _defineProperty({}, this.scriptLoaderId, this.props);\n\n      this.createScript();\n    }\n  }, {\n    key: 'componentWillUnmount',\n    value: function componentWillUnmount() {\n      var url = this.props.url;\n\n      var observers = this.constructor.scriptObservers[url];\n\n      // If the component is waiting for the script to load, remove the\n      // component from the script's observers before unmounting the component.\n      if (observers) {\n        delete observers[this.scriptLoaderId];\n      }\n    }\n  }, {\n    key: 'createScript',\n    value: function createScript() {\n      var _this2 = this;\n\n      var _props2 = this.props,\n          onCreate = _props2.onCreate,\n          url = _props2.url,\n          attributes = _props2.attributes;\n\n      var script = document.createElement('script');\n\n      onCreate();\n\n      // add 'data-' or non standard attributes to the script tag\n      if (attributes) {\n        Object.keys(attributes).forEach(function (prop) {\n          return script.setAttribute(prop, attributes[prop]);\n        });\n      }\n\n      script.src = url;\n\n      // default async to true if not set with custom attributes\n      if (!script.hasAttribute('async')) {\n        script.async = 1;\n      }\n\n      var callObserverFuncAndRemoveObserver = function callObserverFuncAndRemoveObserver(shouldRemoveObserver) {\n        var observers = _this2.constructor.scriptObservers[url];\n        Object.keys(observers).forEach(function (key) {\n          if (shouldRemoveObserver(observers[key])) {\n            delete _this2.constructor.scriptObservers[url][_this2.scriptLoaderId];\n          }\n        });\n      };\n      script.onload = function () {\n        _this2.constructor.loadedScripts[url] = true;\n        callObserverFuncAndRemoveObserver(function (observer) {\n          observer.onLoad();\n          return true;\n        });\n      };\n\n      script.onerror = function () {\n        _this2.constructor.erroredScripts[url] = true;\n        callObserverFuncAndRemoveObserver(function (observer) {\n          observer.onError();\n          return true;\n        });\n      };\n\n      document.body.appendChild(script);\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      return null;\n    }\n  }]);\n\n  return Script;\n}(_react2.default.Component);\n\nScript.propTypes = {\n  attributes: _propTypes.PropTypes.object, // eslint-disable-line react/forbid-prop-types\n  onCreate: _propTypes.PropTypes.func,\n  onError: _propTypes.PropTypes.func.isRequired,\n  onLoad: _propTypes.PropTypes.func.isRequired,\n  url: _propTypes.PropTypes.string.isRequired\n};\nScript.defaultProps = {\n  attributes: {},\n  onCreate: function onCreate() {},\n  onError: function onError() {},\n  onLoad: function onLoad() {} };\nScript.scriptObservers = {};\nScript.loadedScripts = {};\nScript.erroredScripts = {};\nScript.idCount = 0;\nexports.default = Script;\nmodule.exports = exports['default'];\n\n//# sourceURL=webpack:///./node_modules/react-load-script/lib/index.js?");

/***/ }),

/***/ "./node_modules/react/cjs/react.production.min.js":
/*!********************************************************!*\
  !*** ./node_modules/react/cjs/react.production.min.js ***!
  \********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("/** @license React v16.4.1\n * react.production.min.js\n *\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar k=__webpack_require__(/*! object-assign */ \"./node_modules/object-assign/index.js\"),n=__webpack_require__(/*! fbjs/lib/invariant */ \"./node_modules/fbjs/lib/invariant.js\"),p=__webpack_require__(/*! fbjs/lib/emptyObject */ \"./node_modules/fbjs/lib/emptyObject.js\"),q=__webpack_require__(/*! fbjs/lib/emptyFunction */ \"./node_modules/fbjs/lib/emptyFunction.js\"),r=\"function\"===typeof Symbol&&Symbol.for,t=r?Symbol.for(\"react.element\"):60103,u=r?Symbol.for(\"react.portal\"):60106,v=r?Symbol.for(\"react.fragment\"):60107,w=r?Symbol.for(\"react.strict_mode\"):60108,x=r?Symbol.for(\"react.profiler\"):60114,y=r?Symbol.for(\"react.provider\"):60109,z=r?Symbol.for(\"react.context\"):60110,A=r?Symbol.for(\"react.async_mode\"):60111,B=\nr?Symbol.for(\"react.forward_ref\"):60112;r&&Symbol.for(\"react.timeout\");var C=\"function\"===typeof Symbol&&Symbol.iterator;function D(a){for(var b=arguments.length-1,e=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+a,c=0;c<b;c++)e+=\"&args[]=\"+encodeURIComponent(arguments[c+1]);n(!1,\"Minified React error #\"+a+\"; visit %s for the full message or use the non-minified dev environment for full errors and additional helpful warnings. \",e)}\nvar E={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}};function F(a,b,e){this.props=a;this.context=b;this.refs=p;this.updater=e||E}F.prototype.isReactComponent={};F.prototype.setState=function(a,b){\"object\"!==typeof a&&\"function\"!==typeof a&&null!=a?D(\"85\"):void 0;this.updater.enqueueSetState(this,a,b,\"setState\")};F.prototype.forceUpdate=function(a){this.updater.enqueueForceUpdate(this,a,\"forceUpdate\")};function G(){}\nG.prototype=F.prototype;function H(a,b,e){this.props=a;this.context=b;this.refs=p;this.updater=e||E}var I=H.prototype=new G;I.constructor=H;k(I,F.prototype);I.isPureReactComponent=!0;var J={current:null},K=Object.prototype.hasOwnProperty,L={key:!0,ref:!0,__self:!0,__source:!0};\nfunction M(a,b,e){var c=void 0,d={},g=null,h=null;if(null!=b)for(c in void 0!==b.ref&&(h=b.ref),void 0!==b.key&&(g=\"\"+b.key),b)K.call(b,c)&&!L.hasOwnProperty(c)&&(d[c]=b[c]);var f=arguments.length-2;if(1===f)d.children=e;else if(1<f){for(var l=Array(f),m=0;m<f;m++)l[m]=arguments[m+2];d.children=l}if(a&&a.defaultProps)for(c in f=a.defaultProps,f)void 0===d[c]&&(d[c]=f[c]);return{$$typeof:t,type:a,key:g,ref:h,props:d,_owner:J.current}}\nfunction N(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===t}function escape(a){var b={\"=\":\"=0\",\":\":\"=2\"};return\"$\"+(\"\"+a).replace(/[=:]/g,function(a){return b[a]})}var O=/\\/+/g,P=[];function Q(a,b,e,c){if(P.length){var d=P.pop();d.result=a;d.keyPrefix=b;d.func=e;d.context=c;d.count=0;return d}return{result:a,keyPrefix:b,func:e,context:c,count:0}}function R(a){a.result=null;a.keyPrefix=null;a.func=null;a.context=null;a.count=0;10>P.length&&P.push(a)}\nfunction S(a,b,e,c){var d=typeof a;if(\"undefined\"===d||\"boolean\"===d)a=null;var g=!1;if(null===a)g=!0;else switch(d){case \"string\":case \"number\":g=!0;break;case \"object\":switch(a.$$typeof){case t:case u:g=!0}}if(g)return e(c,a,\"\"===b?\".\"+T(a,0):b),1;g=0;b=\"\"===b?\".\":b+\":\";if(Array.isArray(a))for(var h=0;h<a.length;h++){d=a[h];var f=b+T(d,h);g+=S(d,f,e,c)}else if(null===a||\"undefined\"===typeof a?f=null:(f=C&&a[C]||a[\"@@iterator\"],f=\"function\"===typeof f?f:null),\"function\"===typeof f)for(a=f.call(a),\nh=0;!(d=a.next()).done;)d=d.value,f=b+T(d,h++),g+=S(d,f,e,c);else\"object\"===d&&(e=\"\"+a,D(\"31\",\"[object Object]\"===e?\"object with keys {\"+Object.keys(a).join(\", \")+\"}\":e,\"\"));return g}function T(a,b){return\"object\"===typeof a&&null!==a&&null!=a.key?escape(a.key):b.toString(36)}function U(a,b){a.func.call(a.context,b,a.count++)}\nfunction V(a,b,e){var c=a.result,d=a.keyPrefix;a=a.func.call(a.context,b,a.count++);Array.isArray(a)?W(a,c,e,q.thatReturnsArgument):null!=a&&(N(a)&&(b=d+(!a.key||b&&b.key===a.key?\"\":(\"\"+a.key).replace(O,\"$&/\")+\"/\")+e,a={$$typeof:t,type:a.type,key:b,ref:a.ref,props:a.props,_owner:a._owner}),c.push(a))}function W(a,b,e,c,d){var g=\"\";null!=e&&(g=(\"\"+e).replace(O,\"$&/\")+\"/\");b=Q(b,g,c,d);null==a||S(a,\"\",V,b);R(b)}\nvar X={Children:{map:function(a,b,e){if(null==a)return a;var c=[];W(a,c,null,b,e);return c},forEach:function(a,b,e){if(null==a)return a;b=Q(null,null,b,e);null==a||S(a,\"\",U,b);R(b)},count:function(a){return null==a?0:S(a,\"\",q.thatReturnsNull,null)},toArray:function(a){var b=[];W(a,b,null,q.thatReturnsArgument);return b},only:function(a){N(a)?void 0:D(\"143\");return a}},createRef:function(){return{current:null}},Component:F,PureComponent:H,createContext:function(a,b){void 0===b&&(b=null);a={$$typeof:z,\n_calculateChangedBits:b,_defaultValue:a,_currentValue:a,_currentValue2:a,_changedBits:0,_changedBits2:0,Provider:null,Consumer:null};a.Provider={$$typeof:y,_context:a};return a.Consumer=a},forwardRef:function(a){return{$$typeof:B,render:a}},Fragment:v,StrictMode:w,unstable_AsyncMode:A,unstable_Profiler:x,createElement:M,cloneElement:function(a,b,e){null===a||void 0===a?D(\"267\",a):void 0;var c=void 0,d=k({},a.props),g=a.key,h=a.ref,f=a._owner;if(null!=b){void 0!==b.ref&&(h=b.ref,f=J.current);void 0!==\nb.key&&(g=\"\"+b.key);var l=void 0;a.type&&a.type.defaultProps&&(l=a.type.defaultProps);for(c in b)K.call(b,c)&&!L.hasOwnProperty(c)&&(d[c]=void 0===b[c]&&void 0!==l?l[c]:b[c])}c=arguments.length-2;if(1===c)d.children=e;else if(1<c){l=Array(c);for(var m=0;m<c;m++)l[m]=arguments[m+2];d.children=l}return{$$typeof:t,type:a.type,key:g,ref:h,props:d,_owner:f}},createFactory:function(a){var b=M.bind(null,a);b.type=a;return b},isValidElement:N,version:\"16.4.1\",__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:{ReactCurrentOwner:J,\nassign:k}},Y={default:X},Z=Y&&X||Y;module.exports=Z.default?Z.default:Z;\n\n\n//# sourceURL=webpack:///./node_modules/react/cjs/react.production.min.js?");

/***/ }),

/***/ "./node_modules/react/index.js":
/*!*************************************!*\
  !*** ./node_modules/react/index.js ***!
  \*************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval("\n\nif (true) {\n  module.exports = __webpack_require__(/*! ./cjs/react.production.min.js */ \"./node_modules/react/cjs/react.production.min.js\");\n} else {}\n\n\n//# sourceURL=webpack:///./node_modules/react/index.js?");

/***/ }),

/***/ "./node_modules/setimmediate/setImmediate.js":
/*!***************************************************!*\
  !*** ./node_modules/setimmediate/setImmediate.js ***!
  \***************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("/* WEBPACK VAR INJECTION */(function(global, process) {(function (global, undefined) {\n    \"use strict\";\n\n    if (global.setImmediate) {\n        return;\n    }\n\n    var nextHandle = 1; // Spec says greater than zero\n    var tasksByHandle = {};\n    var currentlyRunningATask = false;\n    var doc = global.document;\n    var registerImmediate;\n\n    function setImmediate(callback) {\n      // Callback can either be a function or a string\n      if (typeof callback !== \"function\") {\n        callback = new Function(\"\" + callback);\n      }\n      // Copy function arguments\n      var args = new Array(arguments.length - 1);\n      for (var i = 0; i < args.length; i++) {\n          args[i] = arguments[i + 1];\n      }\n      // Store and register the task\n      var task = { callback: callback, args: args };\n      tasksByHandle[nextHandle] = task;\n      registerImmediate(nextHandle);\n      return nextHandle++;\n    }\n\n    function clearImmediate(handle) {\n        delete tasksByHandle[handle];\n    }\n\n    function run(task) {\n        var callback = task.callback;\n        var args = task.args;\n        switch (args.length) {\n        case 0:\n            callback();\n            break;\n        case 1:\n            callback(args[0]);\n            break;\n        case 2:\n            callback(args[0], args[1]);\n            break;\n        case 3:\n            callback(args[0], args[1], args[2]);\n            break;\n        default:\n            callback.apply(undefined, args);\n            break;\n        }\n    }\n\n    function runIfPresent(handle) {\n        // From the spec: \"Wait until any invocations of this algorithm started before this one have completed.\"\n        // So if we're currently running a task, we'll need to delay this invocation.\n        if (currentlyRunningATask) {\n            // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a\n            // \"too much recursion\" error.\n            setTimeout(runIfPresent, 0, handle);\n        } else {\n            var task = tasksByHandle[handle];\n            if (task) {\n                currentlyRunningATask = true;\n                try {\n                    run(task);\n                } finally {\n                    clearImmediate(handle);\n                    currentlyRunningATask = false;\n                }\n            }\n        }\n    }\n\n    function installNextTickImplementation() {\n        registerImmediate = function(handle) {\n            process.nextTick(function () { runIfPresent(handle); });\n        };\n    }\n\n    function canUsePostMessage() {\n        // The test against `importScripts` prevents this implementation from being installed inside a web worker,\n        // where `global.postMessage` means something completely different and can't be used for this purpose.\n        if (global.postMessage && !global.importScripts) {\n            var postMessageIsAsynchronous = true;\n            var oldOnMessage = global.onmessage;\n            global.onmessage = function() {\n                postMessageIsAsynchronous = false;\n            };\n            global.postMessage(\"\", \"*\");\n            global.onmessage = oldOnMessage;\n            return postMessageIsAsynchronous;\n        }\n    }\n\n    function installPostMessageImplementation() {\n        // Installs an event handler on `global` for the `message` event: see\n        // * https://developer.mozilla.org/en/DOM/window.postMessage\n        // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages\n\n        var messagePrefix = \"setImmediate$\" + Math.random() + \"$\";\n        var onGlobalMessage = function(event) {\n            if (event.source === global &&\n                typeof event.data === \"string\" &&\n                event.data.indexOf(messagePrefix) === 0) {\n                runIfPresent(+event.data.slice(messagePrefix.length));\n            }\n        };\n\n        if (global.addEventListener) {\n            global.addEventListener(\"message\", onGlobalMessage, false);\n        } else {\n            global.attachEvent(\"onmessage\", onGlobalMessage);\n        }\n\n        registerImmediate = function(handle) {\n            global.postMessage(messagePrefix + handle, \"*\");\n        };\n    }\n\n    function installMessageChannelImplementation() {\n        var channel = new MessageChannel();\n        channel.port1.onmessage = function(event) {\n            var handle = event.data;\n            runIfPresent(handle);\n        };\n\n        registerImmediate = function(handle) {\n            channel.port2.postMessage(handle);\n        };\n    }\n\n    function installReadyStateChangeImplementation() {\n        var html = doc.documentElement;\n        registerImmediate = function(handle) {\n            // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted\n            // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.\n            var script = doc.createElement(\"script\");\n            script.onreadystatechange = function () {\n                runIfPresent(handle);\n                script.onreadystatechange = null;\n                html.removeChild(script);\n                script = null;\n            };\n            html.appendChild(script);\n        };\n    }\n\n    function installSetTimeoutImplementation() {\n        registerImmediate = function(handle) {\n            setTimeout(runIfPresent, 0, handle);\n        };\n    }\n\n    // If supported, we should attach to the prototype of global, since that is where setTimeout et al. live.\n    var attachTo = Object.getPrototypeOf && Object.getPrototypeOf(global);\n    attachTo = attachTo && attachTo.setTimeout ? attachTo : global;\n\n    // Don't get fooled by e.g. browserify environments.\n    if ({}.toString.call(global.process) === \"[object process]\") {\n        // For Node.js before 0.9\n        installNextTickImplementation();\n\n    } else if (canUsePostMessage()) {\n        // For non-IE10 modern browsers\n        installPostMessageImplementation();\n\n    } else if (global.MessageChannel) {\n        // For web workers, where supported\n        installMessageChannelImplementation();\n\n    } else if (doc && \"onreadystatechange\" in doc.createElement(\"script\")) {\n        // For IE 6–8\n        installReadyStateChangeImplementation();\n\n    } else {\n        // For older browsers\n        installSetTimeoutImplementation();\n    }\n\n    attachTo.setImmediate = setImmediate;\n    attachTo.clearImmediate = clearImmediate;\n}(typeof self === \"undefined\" ? typeof global === \"undefined\" ? this : global : self));\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../webpack/buildin/global.js */ \"./node_modules/webpack/buildin/global.js\"), __webpack_require__(/*! ./../process/browser.js */ \"./node_modules/process/browser.js\")))\n\n//# sourceURL=webpack:///./node_modules/setimmediate/setImmediate.js?");

/***/ }),

/***/ "./node_modules/timers-browserify/main.js":
/*!************************************************!*\
  !*** ./node_modules/timers-browserify/main.js ***!
  \************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("/* WEBPACK VAR INJECTION */(function(global) {var scope = (typeof global !== \"undefined\" && global) ||\n            (typeof self !== \"undefined\" && self) ||\n            window;\nvar apply = Function.prototype.apply;\n\n// DOM APIs, for completeness\n\nexports.setTimeout = function() {\n  return new Timeout(apply.call(setTimeout, scope, arguments), clearTimeout);\n};\nexports.setInterval = function() {\n  return new Timeout(apply.call(setInterval, scope, arguments), clearInterval);\n};\nexports.clearTimeout =\nexports.clearInterval = function(timeout) {\n  if (timeout) {\n    timeout.close();\n  }\n};\n\nfunction Timeout(id, clearFn) {\n  this._id = id;\n  this._clearFn = clearFn;\n}\nTimeout.prototype.unref = Timeout.prototype.ref = function() {};\nTimeout.prototype.close = function() {\n  this._clearFn.call(scope, this._id);\n};\n\n// Does not start the time, just sets up the members needed.\nexports.enroll = function(item, msecs) {\n  clearTimeout(item._idleTimeoutId);\n  item._idleTimeout = msecs;\n};\n\nexports.unenroll = function(item) {\n  clearTimeout(item._idleTimeoutId);\n  item._idleTimeout = -1;\n};\n\nexports._unrefActive = exports.active = function(item) {\n  clearTimeout(item._idleTimeoutId);\n\n  var msecs = item._idleTimeout;\n  if (msecs >= 0) {\n    item._idleTimeoutId = setTimeout(function onTimeout() {\n      if (item._onTimeout)\n        item._onTimeout();\n    }, msecs);\n  }\n};\n\n// setimmediate attaches itself to the global object\n__webpack_require__(/*! setimmediate */ \"./node_modules/setimmediate/setImmediate.js\");\n// On some exotic environments, it's not clear which object `setimmediate` was\n// able to install onto.  Search each possibility in the same order as the\n// `setimmediate` library.\nexports.setImmediate = (typeof self !== \"undefined\" && self.setImmediate) ||\n                       (typeof global !== \"undefined\" && global.setImmediate) ||\n                       (this && this.setImmediate);\nexports.clearImmediate = (typeof self !== \"undefined\" && self.clearImmediate) ||\n                         (typeof global !== \"undefined\" && global.clearImmediate) ||\n                         (this && this.clearImmediate);\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../webpack/buildin/global.js */ \"./node_modules/webpack/buildin/global.js\")))\n\n//# sourceURL=webpack:///./node_modules/timers-browserify/main.js?");

/***/ }),

/***/ "./node_modules/webpack/buildin/global.js":
/*!***********************************!*\
  !*** (webpack)/buildin/global.js ***!
  \***********************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("var g;\r\n\r\n// This works in non-strict mode\r\ng = (function() {\r\n\treturn this;\r\n})();\r\n\r\ntry {\r\n\t// This works if eval is allowed (see CSP)\r\n\tg = g || Function(\"return this\")() || (1, eval)(\"this\");\r\n} catch (e) {\r\n\t// This works if the window reference is available\r\n\tif (typeof window === \"object\") g = window;\r\n}\r\n\r\n// g can still be undefined, but nothing to do about it...\r\n// We return undefined, instead of nothing here, so it's\r\n// easier to handle this case. if(!global) { ...}\r\n\r\nmodule.exports = g;\r\n\n\n//# sourceURL=webpack:///(webpack)/buildin/global.js?");

/***/ }),

/***/ "./node_modules/webpack/buildin/module.js":
/*!***********************************!*\
  !*** (webpack)/buildin/module.js ***!
  \***********************************/
/*! no static exports found */
/***/ (function(module, exports) {

eval("module.exports = function(module) {\r\n\tif (!module.webpackPolyfill) {\r\n\t\tmodule.deprecate = function() {};\r\n\t\tmodule.paths = [];\r\n\t\t// module.parent = undefined by default\r\n\t\tif (!module.children) module.children = [];\r\n\t\tObject.defineProperty(module, \"loaded\", {\r\n\t\t\tenumerable: true,\r\n\t\t\tget: function() {\r\n\t\t\t\treturn module.l;\r\n\t\t\t}\r\n\t\t});\r\n\t\tObject.defineProperty(module, \"id\", {\r\n\t\t\tenumerable: true,\r\n\t\t\tget: function() {\r\n\t\t\t\treturn module.i;\r\n\t\t\t}\r\n\t\t});\r\n\t\tmodule.webpackPolyfill = 1;\r\n\t}\r\n\treturn module;\r\n};\r\n\n\n//# sourceURL=webpack:///(webpack)/buildin/module.js?");

/***/ }),

/***/ "./store/index.js":
/*!************************!*\
  !*** ./store/index.js ***!
  \************************/
/*! no exports provided */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! babel-runtime/regenerator */ \"./node_modules/babel-runtime/regenerator/index.js\");\n/* harmony import */ var babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! babel-runtime/helpers/asyncToGenerator */ \"./node_modules/babel-runtime/helpers/asyncToGenerator.js\");\n/* harmony import */ var babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__);\n\n\nvar _wp = wp,\n    data = _wp.data,\n    apiRequest = _wp.apiRequest;\nvar registerStore = data.registerStore,\n    dispatch = data.dispatch;\n\n\nvar DEFAULT_STATE = {};\n\nregisterStore('obfx/blocks', {\n\treducer: function reducer() {\n\t\tvar state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : DEFAULT_STATE;\n\t\tvar action = arguments[1];\n\n\n\t\tswitch (action.type) {\n\t\t\tcase 'GET_ICONS_LIST':\n\t\t\t\treturn {\n\t\t\t\t\ticonsList: action.data\n\t\t\t\t};\n\t\t}\n\n\t\treturn state;\n\t},\n\n\n\tactions: {\n\t\tsetFaIconsList: function setFaIconsList(data) {\n\t\t\treturn {\n\t\t\t\ttype: 'GET_ICONS_LIST',\n\t\t\t\tdata: data\n\t\t\t};\n\t\t}\n\t},\n\n\tselectors: {\n\t\tgetFaIconsList: function getFaIconsList(data) {\n\t\t\tif (typeof data.iconsList !== \"undefined\") {\n\t\t\t\treturn data.iconsList;\n\t\t\t}\n\t\t}\n\t},\n\n\tresolvers: {\n\t\tgetFaIconsList: function () {\n\t\t\tvar _ref = babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()( /*#__PURE__*/babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default.a.mark(function _callee() {\n\t\t\t\tvar result;\n\t\t\t\treturn babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default.a.wrap(function _callee$(_context) {\n\t\t\t\t\twhile (1) {\n\t\t\t\t\t\tswitch (_context.prev = _context.next) {\n\t\t\t\t\t\t\tcase 0:\n\t\t\t\t\t\t\t\tresult = [];\n\t\t\t\t\t\t\t\t_context.next = 3;\n\t\t\t\t\t\t\t\treturn apiRequest({ path: 'obfx-font-awesome-icons/v1/get_icons_list' });\n\n\t\t\t\t\t\t\tcase 3:\n\t\t\t\t\t\t\t\tresult = _context.sent;\n\n\n\t\t\t\t\t\t\t\tdispatch('obfx/blocks').setFaIconsList(result);\n\n\t\t\t\t\t\t\tcase 5:\n\t\t\t\t\t\t\tcase 'end':\n\t\t\t\t\t\t\t\treturn _context.stop();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}, _callee, this);\n\t\t\t}));\n\n\t\t\tfunction getFaIconsList() {\n\t\t\t\treturn _ref.apply(this, arguments);\n\t\t\t}\n\n\t\t\treturn getFaIconsList;\n\t\t}()\n\t}\n});\n\n//# sourceURL=webpack:///./store/index.js?");

/***/ }),

/***/ 0:
/*!********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** multi ./blocks/about-author/index.js ./blocks/accordion-box/index.js ./blocks/chart/index.js ./blocks/font-awesome-icons/index.js ./blocks/google-map/index.js ./blocks/notice/index.js ./blocks/plugin-card/index.js ./blocks/post-grid/index.js ./blocks/pricing-table/index.js ./blocks/services/index.js ./blocks/sharing-icons/index.js ./blocks/testimonials/index.js ./blocks/tweetable/index.js ./store/index.js ***!
  \********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

eval("__webpack_require__(/*! ./blocks/about-author/index.js */\"./blocks/about-author/index.js\");\n__webpack_require__(/*! ./blocks/accordion-box/index.js */\"./blocks/accordion-box/index.js\");\n__webpack_require__(/*! ./blocks/chart/index.js */\"./blocks/chart/index.js\");\n__webpack_require__(/*! ./blocks/font-awesome-icons/index.js */\"./blocks/font-awesome-icons/index.js\");\n__webpack_require__(/*! ./blocks/google-map/index.js */\"./blocks/google-map/index.js\");\n__webpack_require__(/*! ./blocks/notice/index.js */\"./blocks/notice/index.js\");\n__webpack_require__(/*! ./blocks/plugin-card/index.js */\"./blocks/plugin-card/index.js\");\n__webpack_require__(/*! ./blocks/post-grid/index.js */\"./blocks/post-grid/index.js\");\n__webpack_require__(/*! ./blocks/pricing-table/index.js */\"./blocks/pricing-table/index.js\");\n__webpack_require__(/*! ./blocks/services/index.js */\"./blocks/services/index.js\");\n__webpack_require__(/*! ./blocks/sharing-icons/index.js */\"./blocks/sharing-icons/index.js\");\n__webpack_require__(/*! ./blocks/testimonials/index.js */\"./blocks/testimonials/index.js\");\n__webpack_require__(/*! ./blocks/tweetable/index.js */\"./blocks/tweetable/index.js\");\nmodule.exports = __webpack_require__(/*! ./store/index.js */\"./store/index.js\");\n\n\n//# sourceURL=webpack:///multi_./blocks/about-author/index.js_./blocks/accordion-box/index.js_./blocks/chart/index.js_./blocks/font-awesome-icons/index.js_./blocks/google-map/index.js_./blocks/notice/index.js_./blocks/plugin-card/index.js_./blocks/post-grid/index.js_./blocks/pricing-table/index.js_./blocks/services/index.js_./blocks/sharing-icons/index.js_./blocks/testimonials/index.js_./blocks/tweetable/index.js_./store/index.js?");

/***/ })

/******/ });