text: /******/ (function(modules) { // webpackBootstrap
  /******/ 	function hotDisposeChunk(chunkId) {
  /******/ 		delete installedChunks[chunkId];
  /******/ 	}
  /******/ 	var parentHotUpdateCallback = window["webpackHotUpdate"];
  /******/ 	window["webpackHotUpdate"] = // eslint-disable-next-line no-unused-vars
  /******/ 	function webpackHotUpdateCallback(chunkId, moreModules) {
  /******/ 		hotAddUpdateChunk(chunkId, moreModules);
  /******/ 		if (parentHotUpdateCallback) parentHotUpdateCallback(chunkId, moreModules);
  /******/ 	} ;
  /******/
  /******/ 	// eslint-disable-next-line no-unused-vars
  /******/ 	function hotDownloadUpdateChunk(chunkId) {
  /******/ 		var head = document.getElementsByTagName("head")[0];
  /******/ 		var script = document.createElement("script");
  /******/ 		script.charset = "utf-8";
  /******/ 		script.src = __webpack_require__.p + "" + chunkId + "." + hotCurrentHash + ".hot-update.js";
  /******/ 		;
  /******/ 		head.appendChild(script);
  /******/ 	}
  /******/
  /******/ 	// eslint-disable-next-line no-unused-vars
  /******/ 	function hotDownloadManifest(requestTimeout) {
  /******/ 		requestTimeout = requestTimeout || 10000;
  /******/ 		return new Promise(function(resolve, reject) {
  /******/ 			if (typeof XMLHttpRequest === "undefined") {
  /******/ 				return reject(new Error("No browser support"));
  /******/ 			}
  /******/ 			try {
  /******/ 				var request = new XMLHttpRequest();
  /******/ 				var requestPath = __webpack_require__.p + "" + hotCurrentHash + ".hot-update.json";
  /******/ 				request.open("GET", requestPath, true);
  /******/ 				request.timeout = requestTimeout;
  /******/ 				request.send(null);
  /******/ 			} catch (err) {
  /******/ 				return reject(err);
  /******/ 			}
  /******/ 			request.onreadystatechange = function() {
  /******/ 				if (request.readyState !== 4) return;
  /******/ 				if (request.status === 0) {
  /******/ 					// timeout
  /******/ 					reject(
  /******/ 						new Error("Manifest request to " + requestPath + " timed out.")
  /******/ 					);
  /******/ 				} else if (request.status === 404) {
  /******/ 					// no update available
  /******/ 					resolve();
  /******/ 				} else if (request.status !== 200 && request.status !== 304) {
  /******/ 					// other failure
  /******/ 					reject(new Error("Manifest request to " + requestPath + " failed."));
  /******/ 				} else {
  /******/ 					// success
  /******/ 					try {
  /******/ 						var update = JSON.parse(request.responseText);
  /******/ 					} catch (e) {
  /******/ 						reject(e);
  /******/ 						return;
  /******/ 					}
  /******/ 					resolve(update);
  /******/ 				}
  /******/ 			};
  /******/ 		});
  /******/ 	}
  /******/
  /******/ 	var hotApplyOnUpdate = true;
  /******/ 	var hotCurrentHash = "a0a96c4c83c2715308cc"; // eslint-disable-line no-unused-vars
  /******/ 	var hotRequestTimeout = 10000;
  /******/ 	var hotCurrentModuleData = {};
  /******/ 	var hotCurrentChildModule; // eslint-disable-line no-unused-vars
  /******/ 	var hotCurrentParents = []; // eslint-disable-line no-unused-vars
  /******/ 	var hotCurrentParentsTemp = []; // eslint-disable-line no-unused-vars
  /******/
  /******/ 	// eslint-disable-next-line no-unused-vars
  /******/ 	function hotCreateRequire(moduleId) {
  /******/ 		var me = installedModules[moduleId];
  /******/ 		if (!me) return __webpack_require__;
  /******/ 		var fn = function(request) {
  /******/ 			if (me.hot.active) {
  /******/ 				if (installedModules[request]) {
  /******/ 					if (installedModules[request].parents.indexOf(moduleId) === -1) {
  /******/ 						installedModules[request].parents.push(moduleId);
  /******/ 					}
  /******/ 				} else {
  /******/ 					hotCurrentParents = [moduleId];
  /******/ 					hotCurrentChildModule = request;
  /******/ 				}
  /******/ 				if (me.children.indexOf(request) === -1) {
  /******/ 					me.children.push(request);
  /******/ 				}
  /******/ 			} else {
  /******/ 				console.warn(
  /******/ 					"[HMR] unexpected require(" +
  /******/ 						request +
  /******/ 						") from disposed module " +
  /******/ 						moduleId
  /******/ 				);
  /******/ 				hotCurrentParents = [];
  /******/ 			}
  /******/ 			return __webpack_require__(request);
  /******/ 		};
  /******/ 		var ObjectFactory = function ObjectFactory(name) {
  /******/ 			return {
  /******/ 				configurable: true,
  /******/ 				enumerable: true,
  /******/ 				get: function() {
  /******/ 					return __webpack_require__[name];
  /******/ 				},
  /******/ 				set: function(value) {
  /******/ 					__webpack_require__[name] = value;
  /******/ 				}
  /******/ 			};
  /******/ 		};
  /******/ 		for (var name in __webpack_require__) {
  /******/ 			if (
  /******/ 				Object.prototype.hasOwnProperty.call(__webpack_require__, name) &&
  /******/ 				name !== "e" &&
  /******/ 				name !== "t"
  /******/ 			) {
  /******/ 				Object.defineProperty(fn, name, ObjectFactory(name));
  /******/ 			}
  /******/ 		}
  /******/ 		fn.e = function(chunkId) {
  /******/ 			if (hotStatus === "ready") hotSetStatus("prepare");
  /******/ 			hotChunksLoading++;
  /******/ 			return __webpack_require__.e(chunkId).then(finishChunkLoading, function(err) {
  /******/ 				finishChunkLoading();
  /******/ 				throw err;
  /******/ 			});
  /******/
  /******/ 			function finishChunkLoading() {
  /******/ 				hotChunksLoading--;
  /******/ 				if (hotStatus === "prepare") {
  /******/ 					if (!hotWaitingFilesMap[chunkId]) {
  /******/ 						hotEnsureUpdateChunk(chunkId);
  /******/ 					}
  /******/ 					if (hotChunksLoading === 0 && hotWaitingFiles === 0) {
  /******/ 						hotUpdateDownloaded();
  /******/ 					}
  /******/ 				}
  /******/ 			}
  /******/ 		};
  /******/ 		fn.t = function(value, mode) {
  /******/ 			if (mode & 1) value = fn(value);
  /******/ 			return __webpack_require__.t(value, mode & ~1);
  /******/ 		};
  /******/ 		return fn;
  /******/ 	}
  /******/
  /******/ 	// eslint-disable-next-line no-unused-vars
  /******/ 	function hotCreateModule(moduleId) {
  /******/ 		var hot = {
  /******/ 			// private stuff
  /******/ 			_acceptedDependencies: {},
  /******/ 			_declinedDependencies: {},
  /******/ 			_selfAccepted: false,
  /******/ 			_selfDeclined: false,
  /******/ 			_disposeHandlers: [],
  /******/ 			_main: hotCurrentChildModule !== moduleId,
  /******/
  /******/ 			// Module API
  /******/ 			active: true,
  /******/ 			accept: function(dep, callback) {
  /******/ 				if (typeof dep === "undefined") hot._selfAccepted = true;
  /******/ 				else if (typeof dep === "function") hot._selfAccepted = dep;
  /******/ 				else if (typeof dep === "object")
  /******/ 					for (var i = 0; i < dep.length; i++)
  /******/ 						hot._acceptedDependencies[dep[i]] = callback || function() {};
  /******/ 				else hot._acceptedDependencies[dep] = callback || function() {};
  /******/ 			},
  /******/ 			decline: function(dep) {
  /******/ 				if (typeof dep === "undefined") hot._selfDeclined = true;
  /******/ 				else if (typeof dep === "object")
  /******/ 					for (var i = 0; i < dep.length; i++)
  /******/ 						hot._declinedDependencies[dep[i]] = true;
  /******/ 				else hot._declinedDependencies[dep] = true;
  /******/ 			},
  /******/ 			dispose: function(callback) {
  /******/ 				hot._disposeHandlers.push(callback);
  /******/ 			},
  /******/ 			addDisposeHandler: function(callback) {
  /******/ 				hot._disposeHandlers.push(callback);
  /******/ 			},
  /******/ 			removeDisposeHandler: function(callback) {
  /******/ 				var idx = hot._disposeHandlers.indexOf(callback);
  /******/ 				if (idx >= 0) hot._disposeHandlers.splice(idx, 1);
  /******/ 			},
  /******/
  /******/ 			// Management API
  /******/ 			check: hotCheck,
  /******/ 			apply: hotApply,
  /******/ 			status: function(l) {
  /******/ 				if (!l) return hotStatus;
  /******/ 				hotStatusHandlers.push(l);
  /******/ 			},
  /******/ 			addStatusHandler: function(l) {
  /******/ 				hotStatusHandlers.push(l);
  /******/ 			},
  /******/ 			removeStatusHandler: function(l) {
  /******/ 				var idx = hotStatusHandlers.indexOf(l);
  /******/ 				if (idx >= 0) hotStatusHandlers.splice(idx, 1);
  /******/ 			},
  /******/
  /******/ 			//inherit from previous dispose call
  /******/ 			data: hotCurrentModuleData[moduleId]
  /******/ 		};
  /******/ 		hotCurrentChildModule = undefined;
  /******/ 		return hot;
  /******/ 	}
  /******/
  /******/ 	var hotStatusHandlers = [];
  /******/ 	var hotStatus = "idle";
  /******/
  /******/ 	function hotSetStatus(newStatus) {
  /******/ 		hotStatus = newStatus;
  /******/ 		for (var i = 0; i < hotStatusHandlers.length; i++)
  /******/ 			hotStatusHandlers[i].call(null, newStatus);
  /******/ 	}
  /******/
  /******/ 	// while downloading
  /******/ 	var hotWaitingFiles = 0;
  /******/ 	var hotChunksLoading = 0;
  /******/ 	var hotWaitingFilesMap = {};
  /******/ 	var hotRequestedFilesMap = {};
  /******/ 	var hotAvailableFilesMap = {};
  /******/ 	var hotDeferred;
  /******/
  /******/ 	// The update info
  /******/ 	var hotUpdate, hotUpdateNewHash;
  /******/
  /******/ 	function toModuleId(id) {
  /******/ 		var isNumber = +id + "" === id;
  /******/ 		return isNumber ? +id : id;
  /******/ 	}
  /******/
  /******/ 	function hotCheck(apply) {
  /******/ 		if (hotStatus !== "idle") {
  /******/ 			throw new Error("check() is only allowed in idle status");
  /******/ 		}
  /******/ 		hotApplyOnUpdate = apply;
  /******/ 		hotSetStatus("check");
  /******/ 		return hotDownloadManifest(hotRequestTimeout).then(function(update) {
  /******/ 			if (!update) {
  /******/ 				hotSetStatus("idle");
  /******/ 				return null;
  /******/ 			}
  /******/ 			hotRequestedFilesMap = {};
  /******/ 			hotWaitingFilesMap = {};
  /******/ 			hotAvailableFilesMap = update.c;
  /******/ 			hotUpdateNewHash = update.h;
  /******/
  /******/ 			hotSetStatus("prepare");
  /******/ 			var promise = new Promise(function(resolve, reject) {
  /******/ 				hotDeferred = {
  /******/ 					resolve: resolve,
  /******/ 					reject: reject
  /******/ 				};
  /******/ 			});
  /******/ 			hotUpdate = {};
  /******/ 			var chunkId = "demo";
  /******/ 			{
  /******/ 				// eslint-disable-line no-lone-blocks
  /******/ 				/*globals chunkId */
  /******/ 				hotEnsureUpdateChunk(chunkId);
  /******/ 			}
  /******/ 			if (
  /******/ 				hotStatus === "prepare" &&
  /******/ 				hotChunksLoading === 0 &&
  /******/ 				hotWaitingFiles === 0
  /******/ 			) {
  /******/ 				hotUpdateDownloaded();
  /******/ 			}
  /******/ 			return promise;
  /******/ 		});
  /******/ 	}
  /******/
  /******/ 	// eslint-disable-next-line no-unused-vars
  /******/ 	function hotAddUpdateChunk(chunkId, moreModules) {
  /******/ 		if (!hotAvailableFilesMap[chunkId] || !hotRequestedFilesMap[chunkId])
  /******/ 			return;
  /******/ 		hotRequestedFilesMap[chunkId] = false;
  /******/ 		for (var moduleId in moreModules) {
  /******/ 			if (Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {
  /******/ 				hotUpdate[moduleId] = moreModules[moduleId];
  /******/ 			}
  /******/ 		}
  /******/ 		if (--hotWaitingFiles === 0 && hotChunksLoading === 0) {
  /******/ 			hotUpdateDownloaded();
  /******/ 		}
  /******/ 	}
  /******/
  /******/ 	function hotEnsureUpdateChunk(chunkId) {
  /******/ 		if (!hotAvailableFilesMap[chunkId]) {
  /******/ 			hotWaitingFilesMap[chunkId] = true;
  /******/ 		} else {
  /******/ 			hotRequestedFilesMap[chunkId] = true;
  /******/ 			hotWaitingFiles++;
  /******/ 			hotDownloadUpdateChunk(chunkId);
  /******/ 		}
  /******/ 	}
  /******/
  /******/ 	function hotUpdateDownloaded() {
  /******/ 		hotSetStatus("ready");
  /******/ 		var deferred = hotDeferred;
  /******/ 		hotDeferred = null;
  /******/ 		if (!deferred) return;
  /******/ 		if (hotApplyOnUpdate) {
  /******/ 			// Wrap deferred object in Promise to mark it as a well-handled Promise to
  /******/ 			// avoid triggering uncaught exception warning in Chrome.
  /******/ 			// See https://bugs.chromium.org/p/chromium/issues/detail?id=465666
  /******/ 			Promise.resolve()
  /******/ 				.then(function() {
  /******/ 					return hotApply(hotApplyOnUpdate);
  /******/ 				})
  /******/ 				.then(
  /******/ 					function(result) {
  /******/ 						deferred.resolve(result);
  /******/ 					},
  /******/ 					function(err) {
  /******/ 						deferred.reject(err);
  /******/ 					}
  /******/ 				);
  /******/ 		} else {
  /******/ 			var outdatedModules = [];
  /******/ 			for (var id in hotUpdate) {
  /******/ 				if (Object.prototype.hasOwnProperty.call(hotUpdate, id)) {
  /******/ 					outdatedModules.push(toModuleId(id));
  /******/ 				}
  /******/ 			}
  /******/ 			deferred.resolve(outdatedModules);
  /******/ 		}
  /******/ 	}
  /******/
  /******/ 	function hotApply(options) {
  /******/ 		if (hotStatus !== "ready")
  /******/ 			throw new Error("apply() is only allowed in ready status");
  /******/ 		options = options || {};
  /******/
  /******/ 		var cb;
  /******/ 		var i;
  /******/ 		var j;
  /******/ 		var module;
  /******/ 		var moduleId;
  /******/
  /******/ 		function getAffectedStuff(updateModuleId) {
  /******/ 			var outdatedModules = [updateModuleId];
  /******/ 			var outdatedDependencies = {};
  /******/
  /******/ 			var queue = outdatedModules.slice().map(function(id) {
  /******/ 				return {
  /******/ 					chain: [id],
  /******/ 					id: id
  /******/ 				};
  /******/ 			});
  /******/ 			while (queue.length > 0) {
  /******/ 				var queueItem = queue.pop();
  /******/ 				var moduleId = queueItem.id;
  /******/ 				var chain = queueItem.chain;
  /******/ 				module = installedModules[moduleId];
  /******/ 				if (!module || module.hot._selfAccepted) continue;
  /******/ 				if (module.hot._selfDeclined) {
  /******/ 					return {
  /******/ 						type: "self-declined",
  /******/ 						chain: chain,
  /******/ 						moduleId: moduleId
  /******/ 					};
  /******/ 				}
  /******/ 				if (module.hot._main) {
  /******/ 					return {
  /******/ 						type: "unaccepted",
  /******/ 						chain: chain,
  /******/ 						moduleId: moduleId
  /******/ 					};
  /******/ 				}
  /******/ 				for (var i = 0; i < module.parents.length; i++) {
  /******/ 					var parentId = module.parents[i];
  /******/ 					var parent = installedModules[parentId];
  /******/ 					if (!parent) continue;
  /******/ 					if (parent.hot._declinedDependencies[moduleId]) {
  /******/ 						return {
  /******/ 							type: "declined",
  /******/ 							chain: chain.concat([parentId]),
  /******/ 							moduleId: moduleId,
  /******/ 							parentId: parentId
  /******/ 						};
  /******/ 					}
  /******/ 					if (outdatedModules.indexOf(parentId) !== -1) continue;
  /******/ 					if (parent.hot._acceptedDependencies[moduleId]) {
  /******/ 						if (!outdatedDependencies[parentId])
  /******/ 							outdatedDependencies[parentId] = [];
  /******/ 						addAllToSet(outdatedDependencies[parentId], [moduleId]);
  /******/ 						continue;
  /******/ 					}
  /******/ 					delete outdatedDependencies[parentId];
  /******/ 					outdatedModules.push(parentId);
  /******/ 					queue.push({
  /******/ 						chain: chain.concat([parentId]),
  /******/ 						id: parentId
  /******/ 					});
  /******/ 				}
  /******/ 			}
  /******/
  /******/ 			return {
  /******/ 				type: "accepted",
  /******/ 				moduleId: updateModuleId,
  /******/ 				outdatedModules: outdatedModules,
  /******/ 				outdatedDependencies: outdatedDependencies
  /******/ 			};
  /******/ 		}
  /******/
  /******/ 		function addAllToSet(a, b) {
  /******/ 			for (var i = 0; i < b.length; i++) {
  /******/ 				var item = b[i];
  /******/ 				if (a.indexOf(item) === -1) a.push(item);
  /******/ 			}
  /******/ 		}
  /******/
  /******/ 		// at begin all updates modules are outdated
  /******/ 		// the "outdated" status can propagate to parents if they don't accept the children
  /******/ 		var outdatedDependencies = {};
  /******/ 		var outdatedModules = [];
  /******/ 		var appliedUpdate = {};
  /******/
  /******/ 		var warnUnexpectedRequire = function warnUnexpectedRequire() {
  /******/ 			console.warn(
  /******/ 				"[HMR] unexpected require(" + result.moduleId + ") to disposed module"
  /******/ 			);
  /******/ 		};
  /******/
  /******/ 		for (var id in hotUpdate) {
  /******/ 			if (Object.prototype.hasOwnProperty.call(hotUpdate, id)) {
  /******/ 				moduleId = toModuleId(id);
  /******/ 				/** @type {TODO} */
  /******/ 				var result;
  /******/ 				if (hotUpdate[id]) {
  /******/ 					result = getAffectedStuff(moduleId);
  /******/ 				} else {
  /******/ 					result = {
  /******/ 						type: "disposed",
  /******/ 						moduleId: id
  /******/ 					};
  /******/ 				}
  /******/ 				/** @type {Error|false} */
  /******/ 				var abortError = false;
  /******/ 				var doApply = false;
  /******/ 				var doDispose = false;
  /******/ 				var chainInfo = "";
  /******/ 				if (result.chain) {
  /******/ 					chainInfo = "\nUpdate propagation: " + result.chain.join(" -> ");
  /******/ 				}
  /******/ 				switch (result.type) {
  /******/ 					case "self-declined":
  /******/ 						if (options.onDeclined) options.onDeclined(result);
  /******/ 						if (!options.ignoreDeclined)
  /******/ 							abortError = new Error(
  /******/ 								"Aborted because of self decline: " +
  /******/ 									result.moduleId +
  /******/ 									chainInfo
  /******/ 							);
  /******/ 						break;
  /******/ 					case "declined":
  /******/ 						if (options.onDeclined) options.onDeclined(result);
  /******/ 						if (!options.ignoreDeclined)
  /******/ 							abortError = new Error(
  /******/ 								"Aborted because of declined dependency: " +
  /******/ 									result.moduleId +
  /******/ 									" in " +
  /******/ 									result.parentId +
  /******/ 									chainInfo
  /******/ 							);
  /******/ 						break;
  /******/ 					case "unaccepted":
  /******/ 						if (options.onUnaccepted) options.onUnaccepted(result);
  /******/ 						if (!options.ignoreUnaccepted)
  /******/ 							abortError = new Error(
  /******/ 								"Aborted because " + moduleId + " is not accepted" + chainInfo
  /******/ 							);
  /******/ 						break;
  /******/ 					case "accepted":
  /******/ 						if (options.onAccepted) options.onAccepted(result);
  /******/ 						doApply = true;
  /******/ 						break;
  /******/ 					case "disposed":
  /******/ 						if (options.onDisposed) options.onDisposed(result);
  /******/ 						doDispose = true;
  /******/ 						break;
  /******/ 					default:
  /******/ 						throw new Error("Unexception type " + result.type);
  /******/ 				}
  /******/ 				if (abortError) {
  /******/ 					hotSetStatus("abort");
  /******/ 					return Promise.reject(abortError);
  /******/ 				}
  /******/ 				if (doApply) {
  /******/ 					appliedUpdate[moduleId] = hotUpdate[moduleId];
  /******/ 					addAllToSet(outdatedModules, result.outdatedModules);
  /******/ 					for (moduleId in result.outdatedDependencies) {
  /******/ 						if (
  /******/ 							Object.prototype.hasOwnProperty.call(
  /******/ 								result.outdatedDependencies,
  /******/ 								moduleId
  /******/ 							)
  /******/ 						) {
  /******/ 							if (!outdatedDependencies[moduleId])
  /******/ 								outdatedDependencies[moduleId] = [];
  /******/ 							addAllToSet(
  /******/ 								outdatedDependencies[moduleId],
  /******/ 								result.outdatedDependencies[moduleId]
  /******/ 							);
  /******/ 						}
  /******/ 					}
  /******/ 				}
  /******/ 				if (doDispose) {
  /******/ 					addAllToSet(outdatedModules, [result.moduleId]);
  /******/ 					appliedUpdate[moduleId] = warnUnexpectedRequire;
  /******/ 				}
  /******/ 			}
  /******/ 		}
  /******/
  /******/ 		// Store self accepted outdated modules to require them later by the module system
  /******/ 		var outdatedSelfAcceptedModules = [];
  /******/ 		for (i = 0; i < outdatedModules.length; i++) {
  /******/ 			moduleId = outdatedModules[i];
  /******/ 			if (
  /******/ 				installedModules[moduleId] &&
  /******/ 				installedModules[moduleId].hot._selfAccepted
  /******/ 			)
  /******/ 				outdatedSelfAcceptedModules.push({
  /******/ 					module: moduleId,
  /******/ 					errorHandler: installedModules[moduleId].hot._selfAccepted
  /******/ 				});
  /******/ 		}
  /******/
  /******/ 		// Now in "dispose" phase
  /******/ 		hotSetStatus("dispose");
  /******/ 		Object.keys(hotAvailableFilesMap).forEach(function(chunkId) {
  /******/ 			if (hotAvailableFilesMap[chunkId] === false) {
  /******/ 				hotDisposeChunk(chunkId);
  /******/ 			}
  /******/ 		});
  /******/
  /******/ 		var idx;
  /******/ 		var queue = outdatedModules.slice();
  /******/ 		while (queue.length > 0) {
  /******/ 			moduleId = queue.pop();
  /******/ 			module = installedModules[moduleId];
  /******/ 			if (!module) continue;
  /******/
  /******/ 			var data = {};
  /******/
  /******/ 			// Call dispose handlers
  /******/ 			var disposeHandlers = module.hot._disposeHandlers;
  /******/ 			for (j = 0; j < disposeHandlers.length; j++) {
  /******/ 				cb = disposeHandlers[j];
  /******/ 				cb(data);
  /******/ 			}
  /******/ 			hotCurrentModuleData[moduleId] = data;
  /******/
  /******/ 			// disable module (this disables requires from this module)
  /******/ 			module.hot.active = false;
  /******/
  /******/ 			// remove module from cache
  /******/ 			delete installedModules[moduleId];
  /******/
  /******/ 			// when disposing there is no need to call dispose handler
  /******/ 			delete outdatedDependencies[moduleId];
  /******/
  /******/ 			// remove "parents" references from all children
  /******/ 			for (j = 0; j < module.children.length; j++) {
  /******/ 				var child = installedModules[module.children[j]];
  /******/ 				if (!child) continue;
  /******/ 				idx = child.parents.indexOf(moduleId);
  /******/ 				if (idx >= 0) {
  /******/ 					child.parents.splice(idx, 1);
  /******/ 				}
  /******/ 			}
  /******/ 		}
  /******/
  /******/ 		// remove outdated dependency from module children
  /******/ 		var dependency;
  /******/ 		var moduleOutdatedDependencies;
  /******/ 		for (moduleId in outdatedDependencies) {
  /******/ 			if (
  /******/ 				Object.prototype.hasOwnProperty.call(outdatedDependencies, moduleId)
  /******/ 			) {
  /******/ 				module = installedModules[moduleId];
  /******/ 				if (module) {
  /******/ 					moduleOutdatedDependencies = outdatedDependencies[moduleId];
  /******/ 					for (j = 0; j < moduleOutdatedDependencies.length; j++) {
  /******/ 						dependency = moduleOutdatedDependencies[j];
  /******/ 						idx = module.children.indexOf(dependency);
  /******/ 						if (idx >= 0) module.children.splice(idx, 1);
  /******/ 					}
  /******/ 				}
  /******/ 			}
  /******/ 		}
  /******/
  /******/ 		// Not in "apply" phase
  /******/ 		hotSetStatus("apply");
  /******/
  /******/ 		hotCurrentHash = hotUpdateNewHash;
  /******/
  /******/ 		// insert new code
  /******/ 		for (moduleId in appliedUpdate) {
  /******/ 			if (Object.prototype.hasOwnProperty.call(appliedUpdate, moduleId)) {
  /******/ 				modules[moduleId] = appliedUpdate[moduleId];
  /******/ 			}
  /******/ 		}
  /******/
  /******/ 		// call accept handlers
  /******/ 		var error = null;
  /******/ 		for (moduleId in outdatedDependencies) {
  /******/ 			if (
  /******/ 				Object.prototype.hasOwnProperty.call(outdatedDependencies, moduleId)
  /******/ 			) {
  /******/ 				module = installedModules[moduleId];
  /******/ 				if (module) {
  /******/ 					moduleOutdatedDependencies = outdatedDependencies[moduleId];
  /******/ 					var callbacks = [];
  /******/ 					for (i = 0; i < moduleOutdatedDependencies.length; i++) {
  /******/ 						dependency = moduleOutdatedDependencies[i];
  /******/ 						cb = module.hot._acceptedDependencies[dependency];
  /******/ 						if (cb) {
  /******/ 							if (callbacks.indexOf(cb) !== -1) continue;
  /******/ 							callbacks.push(cb);
  /******/ 						}
  /******/ 					}
  /******/ 					for (i = 0; i < callbacks.length; i++) {
  /******/ 						cb = callbacks[i];
  /******/ 						try {
  /******/ 							cb(moduleOutdatedDependencies);
  /******/ 						} catch (err) {
  /******/ 							if (options.onErrored) {
  /******/ 								options.onErrored({
  /******/ 									type: "accept-errored",
  /******/ 									moduleId: moduleId,
  /******/ 									dependencyId: moduleOutdatedDependencies[i],
  /******/ 									error: err
  /******/ 								});
  /******/ 							}
  /******/ 							if (!options.ignoreErrored) {
  /******/ 								if (!error) error = err;
  /******/ 							}
  /******/ 						}
  /******/ 					}
  /******/ 				}
  /******/ 			}
  /******/ 		}
  /******/
  /******/ 		// Load self accepted modules
  /******/ 		for (i = 0; i < outdatedSelfAcceptedModules.length; i++) {
  /******/ 			var item = outdatedSelfAcceptedModules[i];
  /******/ 			moduleId = item.module;
  /******/ 			hotCurrentParents = [moduleId];
  /******/ 			try {
  /******/ 				__webpack_require__(moduleId);
  /******/ 			} catch (err) {
  /******/ 				if (typeof item.errorHandler === "function") {
  /******/ 					try {
  /******/ 						item.errorHandler(err);
  /******/ 					} catch (err2) {
  /******/ 						if (options.onErrored) {
  /******/ 							options.onErrored({
  /******/ 								type: "self-accept-error-handler-errored",
  /******/ 								moduleId: moduleId,
  /******/ 								error: err2,
  /******/ 								originalError: err
  /******/ 							});
  /******/ 						}
  /******/ 						if (!options.ignoreErrored) {
  /******/ 							if (!error) error = err2;
  /******/ 						}
  /******/ 						if (!error) error = err;
  /******/ 					}
  /******/ 				} else {
  /******/ 					if (options.onErrored) {
  /******/ 						options.onErrored({
  /******/ 							type: "self-accept-errored",
  /******/ 							moduleId: moduleId,
  /******/ 							error: err
  /******/ 						});
  /******/ 					}
  /******/ 					if (!options.ignoreErrored) {
  /******/ 						if (!error) error = err;
  /******/ 					}
  /******/ 				}
  /******/ 			}
  /******/ 		}
  /******/
  /******/ 		// handle errors in accept handlers and self accepted module load
  /******/ 		if (error) {
  /******/ 			hotSetStatus("fail");
  /******/ 			return Promise.reject(error);
  /******/ 		}
  /******/
  /******/ 		hotSetStatus("idle");
  /******/ 		return new Promise(function(resolve) {
  /******/ 			resolve(outdatedModules);
  /******/ 		});
  /******/ 	}
  /******/
  /******/ 	// 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: {},
  /******/ 			hot: hotCreateModule(moduleId),
  /******/ 			parents: (hotCurrentParentsTemp = hotCurrentParents, hotCurrentParents = [], hotCurrentParentsTemp),
  /******/ 			children: []
  /******/ 		};
  /******/
  /******/ 		// Execute the module function
  /******/ 		modules[moduleId].call(module.exports, module, module.exports, hotCreateRequire(moduleId));
  /******/
  /******/ 		// Flag the module as loaded
  /******/ 		module.l = true;
  /******/
  /******/ 		// Return the exports of the module
  /******/ 		return module.exports;
  /******/ 	}
  /******/
  /******/
  /******/ 	// expose the modules object (__webpack_modules__)
  /******/ 	__webpack_require__.m = modules;
  /******/
  /******/ 	// expose the module cache
  /******/ 	__webpack_require__.c = installedModules;
  /******/
  /******/ 	// define getter function for harmony exports
  /******/ 	__webpack_require__.d = function(exports, name, getter) {
  /******/ 		if(!__webpack_require__.o(exports, name)) {
  /******/ 			Object.defineProperty(exports, name, { enumerable: true, get: getter });
  /******/ 		}
  /******/ 	};
  /******/
  /******/ 	// define __esModule on exports
  /******/ 	__webpack_require__.r = function(exports) {
  /******/ 		if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
  /******/ 			Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
  /******/ 		}
  /******/ 		Object.defineProperty(exports, '__esModule', { value: true });
  /******/ 	};
  /******/
  /******/ 	// create a fake namespace object
  /******/ 	// mode & 1: value is a module id, require it
  /******/ 	// mode & 2: merge all properties of value into the ns
  /******/ 	// mode & 4: return value when already ns object
  /******/ 	// mode & 8|1: behave like require
  /******/ 	__webpack_require__.t = function(value, mode) {
  /******/ 		if(mode & 1) value = __webpack_require__(value);
  /******/ 		if(mode & 8) return value;
  /******/ 		if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
  /******/ 		var ns = Object.create(null);
  /******/ 		__webpack_require__.r(ns);
  /******/ 		Object.defineProperty(ns, 'default', { enumerable: true, value: value });
  /******/ 		if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
  /******/ 		return ns;
  /******/ 	};
  /******/
  /******/ 	// getDefaultExport function for compatibility with non-harmony modules
  /******/ 	__webpack_require__.n = function(module) {
  /******/ 		var getter = module && module.__esModule ?
  /******/ 			function getDefault() { return module['default']; } :
  /******/ 			function getModuleExports() { return module; };
  /******/ 		__webpack_require__.d(getter, 'a', getter);
  /******/ 		return getter;
  /******/ 	};
  /******/
  /******/ 	// Object.prototype.hasOwnProperty.call
  /******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
  /******/
  /******/ 	// __webpack_public_path__
  /******/ 	__webpack_require__.p = "./";
  /******/
  /******/ 	// __webpack_hash__
  /******/ 	__webpack_require__.h = function() { return hotCurrentHash; };
  /******/
  /******/
  /******/ 	// Load entry module and return exports
  /******/ 	return hotCreateRequire("./src/demo.js")(__webpack_require__.s = "./src/demo.js");
  /******/ })
  /************************************************************************/
  /******/ ({
  
  /***/ "./node_modules/css-loader/index.js??ref--5-1!./node_modules/sass-loader/lib/loader.js!./src/demo-component.scss":
  /*!**************************************************************************************************************!*\
    !*** ./node_modules/css-loader??ref--5-1!./node_modules/sass-loader/lib/loader.js!./src/demo-component.scss ***!
    \**************************************************************************************************************/
  /*! no static exports found */
  /***/ (function(module, exports, __webpack_require__) {
  
  eval("exports = module.exports = __webpack_require__(/*! ../node_modules/css-loader/lib/css-base.js */ \"./node_modules/css-loader/lib/css-base.js\")(undefined);\n// imports\n\n\n// module\nexports.push([module.i, \".demo-component_container_3wA {\\n  padding: .1rem 0; }\\n\\n.demo-component_typeName_imB {\\n  position: relative;\\n  font-size: .16rem;\\n  line-height: .4rem;\\n  text-align: center; }\\n  .demo-component_typeName_imB:after {\\n    position: absolute;\\n    z-index: 1;\\n    left: 50%;\\n    top: 0;\\n    transform: translateX(-50%);\\n    content: '';\\n    width: .5rem;\\n    height: .04rem;\\n    border-radius: .02rem;\\n    background-color: #00b0ab; }\\n\\n.demo-component_valueContainer_XRK {\\n  padding-bottom: .04rem;\\n  text-align: center; }\\n  .demo-component_valueContainer_XRK > i {\\n    font-size: .12rem;\\n    color: #333; }\\n\\n.demo-component_value_1QD {\\n  padding-right: .04rem;\\n  font-size: .3rem; }\\n\", \"\"]);\n\n// exports\nexports.locals = {\n\t\"container\": \"demo-component_container_3wA\",\n\t\"typeName\": \"demo-component_typeName_imB\",\n\t\"valueContainer\": \"demo-component_valueContainer_XRK\",\n\t\"value\": \"demo-component_value_1QD\"\n};\n\n//# sourceURL=webpack:///./src/demo-component.scss?./node_modules/css-loader??ref--5-1!./node_modules/sass-loader/lib/loader.js");
  
  /***/ }),
  
  /***/ "./node_modules/css-loader/index.js??ref--5-1!./node_modules/sass-loader/lib/loader.js!./src/demo.scss":
  /*!****************************************************************************************************!*\
    !*** ./node_modules/css-loader??ref--5-1!./node_modules/sass-loader/lib/loader.js!./src/demo.scss ***!
    \****************************************************************************************************/
  /*! no static exports found */
  /***/ (function(module, exports, __webpack_require__) {
  
  eval("exports = module.exports = __webpack_require__(/*! ../node_modules/css-loader/lib/css-base.js */ \"./node_modules/css-loader/lib/css-base.js\")(undefined);\n// imports\n\n\n// module\nexports.push([module.i, \".demo_tipsBox_380 {\\n  position: fixed;\\n  z-index: 1;\\n  left: 0;\\n  top: 0;\\n  width: 100%;\\n  height: 100%;\\n  background-color: rgba(0, 0, 0, 0.85); }\\n\\n.demo_content_Flf {\\n  position: fixed;\\n  z-index: 1;\\n  top: 50%;\\n  left: 50%;\\n  transform: translate(-50%, -50%);\\n  text-align: center; }\\n\\n.demo_tipsWorld_7ys {\\n  text-align: center;\\n  font-size: .12rem;\\n  color: #fff; }\\n\\n.demo_qrcode_1ne {\\n  display: inline-block;\\n  margin-top: .1rem;\\n  width: .8rem;\\n  height: .8rem; }\\n\\n.demo_githubButtons_1xq {\\n  margin-top: .1rem;\\n  text-align: center; }\\n\", \"\"]);\n\n// exports\nexports.locals = {\n\t\"tipsBox\": \"demo_tipsBox_380\",\n\t\"content\": \"demo_content_Flf\",\n\t\"tipsWorld\": \"demo_tipsWorld_7ys\",\n\t\"qrcode\": \"demo_qrcode_1ne\",\n\t\"githubButtons\": \"demo_githubButtons_1xq\"\n};\n\n//# sourceURL=webpack:///./src/demo.scss?./node_modules/css-loader??ref--5-1!./node_modules/sass-loader/lib/loader.js");
  
  /***/ }),
  
  /***/ "./node_modules/css-loader/index.js??ref--5-1!./node_modules/sass-loader/lib/loader.js!./src/slide-ruler.scss":
  /*!***********************************************************************************************************!*\
    !*** ./node_modules/css-loader??ref--5-1!./node_modules/sass-loader/lib/loader.js!./src/slide-ruler.scss ***!
    \***********************************************************************************************************/
  /*! no static exports found */
  /***/ (function(module, exports, __webpack_require__) {
  
  eval("exports = module.exports = __webpack_require__(/*! ../node_modules/css-loader/lib/css-base.js */ \"./node_modules/css-loader/lib/css-base.js\")(undefined);\n// imports\n\n\n// module\nexports.push([module.i, \"* {\\n  margin: 0;\\n  padding: 0; }\\n\\n.slide-ruler_box_2oh {\\n  position: relative; }\\n  .slide-ruler_box_2oh:before {\\n    position: absolute;\\n    z-index: 1;\\n    left: 50%;\\n    top: 0;\\n    transform: translateX(-50%);\\n    content: '';\\n    width: 3px;\\n    height: 35px;\\n    background-color: #00b0ab; }\\n\\n.slide-ruler_canvas_2da {\\n  display: block;\\n  margin: 0 auto;\\n  transition-duration: 300ms; }\\n\", \"\"]);\n\n// exports\nexports.locals = {\n\t\"box\": \"slide-ruler_box_2oh\",\n\t\"canvas\": \"slide-ruler_canvas_2da\"\n};\n\n//# sourceURL=webpack:///./src/slide-ruler.scss?./node_modules/css-loader??ref--5-1!./node_modules/sass-loader/lib/loader.js");
  
  /***/ }),
  
  /***/ "./node_modules/css-loader/lib/css-base.js":
  /*!*************************************************!*\
    !*** ./node_modules/css-loader/lib/css-base.js ***!
    \*************************************************/
  /*! no static exports found */
  /***/ (function(module, exports) {
  
  eval("/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\n// css base code, injected by the css-loader\nmodule.exports = function(useSourceMap) {\n\tvar list = [];\n\n\t// return the list of modules as css string\n\tlist.toString = function toString() {\n\t\treturn this.map(function (item) {\n\t\t\tvar content = cssWithMappingToString(item, useSourceMap);\n\t\t\tif(item[2]) {\n\t\t\t\treturn \"@media \" + item[2] + \"{\" + content + \"}\";\n\t\t\t} else {\n\t\t\t\treturn content;\n\t\t\t}\n\t\t}).join(\"\");\n\t};\n\n\t// import a list of modules into the list\n\tlist.i = function(modules, mediaQuery) {\n\t\tif(typeof modules === \"string\")\n\t\t\tmodules = [[null, modules, \"\"]];\n\t\tvar alreadyImportedModules = {};\n\t\tfor(var i = 0; i < this.length; i++) {\n\t\t\tvar id = this[i][0];\n\t\t\tif(typeof id === \"number\")\n\t\t\t\talreadyImportedModules[id] = true;\n\t\t}\n\t\tfor(i = 0; i < modules.length; i++) {\n\t\t\tvar item = modules[i];\n\t\t\t// skip already imported module\n\t\t\t// this implementation is not 100% perfect for weird media query combinations\n\t\t\t//  when a module is imported multiple times with different media queries.\n\t\t\t//  I hope this will never occur (Hey this way we have smaller bundles)\n\t\t\tif(typeof item[0] !== \"number\" || !alreadyImportedModules[item[0]]) {\n\t\t\t\tif(mediaQuery && !item[2]) {\n\t\t\t\t\titem[2] = mediaQuery;\n\t\t\t\t} else if(mediaQuery) {\n\t\t\t\t\titem[2] = \"(\" + item[2] + \") and (\" + mediaQuery + \")\";\n\t\t\t\t}\n\t\t\t\tlist.push(item);\n\t\t\t}\n\t\t}\n\t};\n\treturn list;\n};\n\nfunction cssWithMappingToString(item, useSourceMap) {\n\tvar content = item[1] || '';\n\tvar cssMapping = item[3];\n\tif (!cssMapping) {\n\t\treturn content;\n\t}\n\n\tif (useSourceMap && typeof btoa === 'function') {\n\t\tvar sourceMapping = toComment(cssMapping);\n\t\tvar sourceURLs = cssMapping.sources.map(function (source) {\n\t\t\treturn '/*# sourceURL=' + cssMapping.sourceRoot + source + ' */'\n\t\t});\n\n\t\treturn [content].concat(sourceURLs).concat([sourceMapping]).join('\\n');\n\t}\n\n\treturn [content].join('\\n');\n}\n\n// Adapted from convert-source-map (MIT)\nfunction toComment(sourceMap) {\n\t// eslint-disable-next-line no-undef\n\tvar base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))));\n\tvar data = 'sourceMappingURL=data:application/json;charset=utf-8;base64,' + base64;\n\n\treturn '/*# ' + data + ' */';\n}\n\n\n//# sourceURL=webpack:///./node_modules/css-loader/lib/css-base.js?");
  
  /***/ }),
  
  /***/ "./node_modules/style-loader/lib/addStyles.js":
  /*!****************************************************!*\
    !*** ./node_modules/style-loader/lib/addStyles.js ***!
    \****************************************************/
  /*! no static exports found */
  /***/ (function(module, exports, __webpack_require__) {
  
  eval("/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\n\nvar stylesInDom = {};\n\nvar\tmemoize = function (fn) {\n\tvar memo;\n\n\treturn function () {\n\t\tif (typeof memo === \"undefined\") memo = fn.apply(this, arguments);\n\t\treturn memo;\n\t};\n};\n\nvar isOldIE = memoize(function () {\n\t// Test for IE <= 9 as proposed by Browserhacks\n\t// @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805\n\t// Tests for existence of standard globals is to allow style-loader\n\t// to operate correctly into non-standard environments\n\t// @see https://github.com/webpack-contrib/style-loader/issues/177\n\treturn window && document && document.all && !window.atob;\n});\n\nvar getElement = (function (fn) {\n\tvar memo = {};\n\n\treturn function(selector) {\n\t\tif (typeof memo[selector] === \"undefined\") {\n\t\t\tmemo[selector] = fn.call(this, selector);\n\t\t}\n\n\t\treturn memo[selector]\n\t};\n})(function (target) {\n\treturn document.querySelector(target)\n});\n\nvar singleton = null;\nvar\tsingletonCounter = 0;\nvar\tstylesInsertedAtTop = [];\n\nvar\tfixUrls = __webpack_require__(/*! ./urls */ \"./node_modules/style-loader/lib/urls.js\");\n\nmodule.exports = function(list, options) {\n\tif (typeof DEBUG !== \"undefined\" && DEBUG) {\n\t\tif (typeof document !== \"object\") throw new Error(\"The style-loader cannot be used in a non-browser environment\");\n\t}\n\n\toptions = options || {};\n\n\toptions.attrs = typeof options.attrs === \"object\" ? options.attrs : {};\n\n\t// Force single-tag solution on IE6-9, which has a hard limit on the # of <style>\n\t// tags it will allow on a page\n\tif (!options.singleton) options.singleton = isOldIE();\n\n\t// By default, add <style> tags to the <head> element\n\tif (!options.insertInto) options.insertInto = \"head\";\n\n\t// By default, add <style> tags to the bottom of the target\n\tif (!options.insertAt) options.insertAt = \"bottom\";\n\n\tvar styles = listToStyles(list, options);\n\n\taddStylesToDom(styles, options);\n\n\treturn function update (newList) {\n\t\tvar mayRemove = [];\n\n\t\tfor (var i = 0; i < styles.length; i++) {\n\t\t\tvar item = styles[i];\n\t\t\tvar domStyle = stylesInDom[item.id];\n\n\t\t\tdomStyle.refs--;\n\t\t\tmayRemove.push(domStyle);\n\t\t}\n\n\t\tif(newList) {\n\t\t\tvar newStyles = listToStyles(newList, options);\n\t\t\taddStylesToDom(newStyles, options);\n\t\t}\n\n\t\tfor (var i = 0; i < mayRemove.length; i++) {\n\t\t\tvar domStyle = mayRemove[i];\n\n\t\t\tif(domStyle.refs === 0) {\n\t\t\t\tfor (var j = 0; j < domStyle.parts.length; j++) domStyle.parts[j]();\n\n\t\t\t\tdelete stylesInDom[domStyle.id];\n\t\t\t}\n\t\t}\n\t};\n};\n\nfunction addStylesToDom (styles, options) {\n\tfor (var i = 0; i < styles.length; i++) {\n\t\tvar item = styles[i];\n\t\tvar domStyle = stylesInDom[item.id];\n\n\t\tif(domStyle) {\n\t\t\tdomStyle.refs++;\n\n\t\t\tfor(var j = 0; j < domStyle.parts.length; j++) {\n\t\t\t\tdomStyle.parts[j](item.parts[j]);\n\t\t\t}\n\n\t\t\tfor(; j < item.parts.length; j++) {\n\t\t\t\tdomStyle.parts.push(addStyle(item.parts[j], options));\n\t\t\t}\n\t\t} else {\n\t\t\tvar parts = [];\n\n\t\t\tfor(var j = 0; j < item.parts.length; j++) {\n\t\t\t\tparts.push(addStyle(item.parts[j], options));\n\t\t\t}\n\n\t\t\tstylesInDom[item.id] = {id: item.id, refs: 1, parts: parts};\n\t\t}\n\t}\n}\n\nfunction listToStyles (list, options) {\n\tvar styles = [];\n\tvar newStyles = {};\n\n\tfor (var i = 0; i < list.length; i++) {\n\t\tvar item = list[i];\n\t\tvar id = options.base ? item[0] + options.base : item[0];\n\t\tvar css = item[1];\n\t\tvar media = item[2];\n\t\tvar sourceMap = item[3];\n\t\tvar part = {css: css, media: media, sourceMap: sourceMap};\n\n\t\tif(!newStyles[id]) styles.push(newStyles[id] = {id: id, parts: [part]});\n\t\telse newStyles[id].parts.push(part);\n\t}\n\n\treturn styles;\n}\n\nfunction insertStyleElement (options, style) {\n\tvar target = getElement(options.insertInto)\n\n\tif (!target) {\n\t\tthrow new Error(\"Couldn't find a style target. This probably means that the value for the 'insertInto' parameter is invalid.\");\n\t}\n\n\tvar lastStyleElementInsertedAtTop = stylesInsertedAtTop[stylesInsertedAtTop.length - 1];\n\n\tif (options.insertAt === \"top\") {\n\t\tif (!lastStyleElementInsertedAtTop) {\n\t\t\ttarget.insertBefore(style, target.firstChild);\n\t\t} else if (lastStyleElementInsertedAtTop.nextSibling) {\n\t\t\ttarget.insertBefore(style, lastStyleElementInsertedAtTop.nextSibling);\n\t\t} else {\n\t\t\ttarget.appendChild(style);\n\t\t}\n\t\tstylesInsertedAtTop.push(style);\n\t} else if (options.insertAt === \"bottom\") {\n\t\ttarget.appendChild(style);\n\t} else {\n\t\tthrow new Error(\"Invalid value for parameter 'insertAt'. Must be 'top' or 'bottom'.\");\n\t}\n}\n\nfunction removeStyleElement (style) {\n\tif (style.parentNode === null) return false;\n\tstyle.parentNode.removeChild(style);\n\n\tvar idx = stylesInsertedAtTop.indexOf(style);\n\tif(idx >= 0) {\n\t\tstylesInsertedAtTop.splice(idx, 1);\n\t}\n}\n\nfunction createStyleElement (options) {\n\tvar style = document.createElement(\"style\");\n\n\toptions.attrs.type = \"text/css\";\n\n\taddAttrs(style, options.attrs);\n\tinsertStyleElement(options, style);\n\n\treturn style;\n}\n\nfunction createLinkElement (options) {\n\tvar link = document.createElement(\"link\");\n\n\toptions.attrs.type = \"text/css\";\n\toptions.attrs.rel = \"stylesheet\";\n\n\taddAttrs(link, options.attrs);\n\tinsertStyleElement(options, link);\n\n\treturn link;\n}\n\nfunction addAttrs (el, attrs) {\n\tObject.keys(attrs).forEach(function (key) {\n\t\tel.setAttribute(key, attrs[key]);\n\t});\n}\n\nfunction addStyle (obj, options) {\n\tvar style, update, remove, result;\n\n\t// If a transform function was defined, run it on the css\n\tif (options.transform && obj.css) {\n\t    result = options.transform(obj.css);\n\n\t    if (result) {\n\t    \t// If transform returns a value, use that instead of the original css.\n\t    \t// This allows running runtime transformations on the css.\n\t    \tobj.css = result;\n\t    } else {\n\t    \t// If the transform function returns a falsy value, don't add this css.\n\t    \t// This allows conditional loading of css\n\t    \treturn function() {\n\t    \t\t// noop\n\t    \t};\n\t    }\n\t}\n\n\tif (options.singleton) {\n\t\tvar styleIndex = singletonCounter++;\n\n\t\tstyle = singleton || (singleton = createStyleElement(options));\n\n\t\tupdate = applyToSingletonTag.bind(null, style, styleIndex, false);\n\t\tremove = applyToSingletonTag.bind(null, style, styleIndex, true);\n\n\t} else if (\n\t\tobj.sourceMap &&\n\t\ttypeof URL === \"function\" &&\n\t\ttypeof URL.createObjectURL === \"function\" &&\n\t\ttypeof URL.revokeObjectURL === \"function\" &&\n\t\ttypeof Blob === \"function\" &&\n\t\ttypeof btoa === \"function\"\n\t) {\n\t\tstyle = createLinkElement(options);\n\t\tupdate = updateLink.bind(null, style, options);\n\t\tremove = function () {\n\t\t\tremoveStyleElement(style);\n\n\t\t\tif(style.href) URL.revokeObjectURL(style.href);\n\t\t};\n\t} else {\n\t\tstyle = createStyleElement(options);\n\t\tupdate = applyToTag.bind(null, style);\n\t\tremove = function () {\n\t\t\tremoveStyleElement(style);\n\t\t};\n\t}\n\n\tupdate(obj);\n\n\treturn function updateStyle (newObj) {\n\t\tif (newObj) {\n\t\t\tif (\n\t\t\t\tnewObj.css === obj.css &&\n\t\t\t\tnewObj.media === obj.media &&\n\t\t\t\tnewObj.sourceMap === obj.sourceMap\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tupdate(obj = newObj);\n\t\t} else {\n\t\t\tremove();\n\t\t}\n\t};\n}\n\nvar replaceText = (function () {\n\tvar textStore = [];\n\n\treturn function (index, replacement) {\n\t\ttextStore[index] = replacement;\n\n\t\treturn textStore.filter(Boolean).join('\\n');\n\t};\n})();\n\nfunction applyToSingletonTag (style, index, remove, obj) {\n\tvar css = remove ? \"\" : obj.css;\n\n\tif (style.styleSheet) {\n\t\tstyle.styleSheet.cssText = replaceText(index, css);\n\t} else {\n\t\tvar cssNode = document.createTextNode(css);\n\t\tvar childNodes = style.childNodes;\n\n\t\tif (childNodes[index]) style.removeChild(childNodes[index]);\n\n\t\tif (childNodes.length) {\n\t\t\tstyle.insertBefore(cssNode, childNodes[index]);\n\t\t} else {\n\t\t\tstyle.appendChild(cssNode);\n\t\t}\n\t}\n}\n\nfunction applyToTag (style, obj) {\n\tvar css = obj.css;\n\tvar media = obj.media;\n\n\tif(media) {\n\t\tstyle.setAttribute(\"media\", media)\n\t}\n\n\tif(style.styleSheet) {\n\t\tstyle.styleSheet.cssText = css;\n\t} else {\n\t\twhile(style.firstChild) {\n\t\t\tstyle.removeChild(style.firstChild);\n\t\t}\n\n\t\tstyle.appendChild(document.createTextNode(css));\n\t}\n}\n\nfunction updateLink (link, options, obj) {\n\tvar css = obj.css;\n\tvar sourceMap = obj.sourceMap;\n\n\t/*\n\t\tIf convertToAbsoluteUrls isn't defined, but sourcemaps are enabled\n\t\tand there is no publicPath defined then lets turn convertToAbsoluteUrls\n\t\ton by default.  Otherwise default to the convertToAbsoluteUrls option\n\t\tdirectly\n\t*/\n\tvar autoFixUrls = options.convertToAbsoluteUrls === undefined && sourceMap;\n\n\tif (options.convertToAbsoluteUrls || autoFixUrls) {\n\t\tcss = fixUrls(css);\n\t}\n\n\tif (sourceMap) {\n\t\t// http://stackoverflow.com/a/26603875\n\t\tcss += \"\\n/*# sourceMappingURL=data:application/json;base64,\" + btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))) + \" */\";\n\t}\n\n\tvar blob = new Blob([css], { type: \"text/css\" });\n\n\tvar oldSrc = link.href;\n\n\tlink.href = URL.createObjectURL(blob);\n\n\tif(oldSrc) URL.revokeObjectURL(oldSrc);\n}\n\n\n//# sourceURL=webpack:///./node_modules/style-loader/lib/addStyles.js?");
  
  /***/ }),
  
  /***/ "./node_modules/style-loader/lib/urls.js":
  /*!***********************************************!*\
    !*** ./node_modules/style-loader/lib/urls.js ***!
    \***********************************************/
  /*! no static exports found */
  /***/ (function(module, exports) {
  
  eval("\n/**\n * When source maps are enabled, `style-loader` uses a link element with a data-uri to\n * embed the css on the page. This breaks all relative urls because now they are relative to a\n * bundle instead of the current page.\n *\n * One solution is to only use full urls, but that may be impossible.\n *\n * Instead, this function \"fixes\" the relative urls to be absolute according to the current page location.\n *\n * A rudimentary test suite is located at `test/fixUrls.js` and can be run via the `npm test` command.\n *\n */\n\nmodule.exports = function (css) {\n  // get current location\n  var location = typeof window !== \"undefined\" && window.location;\n\n  if (!location) {\n    throw new Error(\"fixUrls requires window.location\");\n  }\n\n\t// blank or null?\n\tif (!css || typeof css !== \"string\") {\n\t  return css;\n  }\n\n  var baseUrl = location.protocol + \"//\" + location.host;\n  var currentDir = baseUrl + location.pathname.replace(/\\/[^\\/]*$/, \"/\");\n\n\t// convert each url(...)\n\t/*\n\tThis regular expression is just a way to recursively match brackets within\n\ta string.\n\n\t /url\\s*\\(  = Match on the word \"url\" with any whitespace after it and then a parens\n\t   (  = Start a capturing group\n\t     (?:  = Start a non-capturing group\n\t         [^)(]  = Match anything that isn't a parentheses\n\t         |  = OR\n\t         \\(  = Match a start parentheses\n\t             (?:  = Start another non-capturing groups\n\t                 [^)(]+  = Match anything that isn't a parentheses\n\t                 |  = OR\n\t                 \\(  = Match a start parentheses\n\t                     [^)(]*  = Match anything that isn't a parentheses\n\t                 \\)  = Match a end parentheses\n\t             )  = End Group\n              *\\) = Match anything and then a close parens\n          )  = Close non-capturing group\n          *  = Match anything\n       )  = Close capturing group\n\t \\)  = Match a close parens\n\n\t /gi  = Get all matches, not the first.  Be case insensitive.\n\t */\n\tvar fixedCss = css.replace(/url\\s*\\(((?:[^)(]|\\((?:[^)(]+|\\([^)(]*\\))*\\))*)\\)/gi, function(fullMatch, origUrl) {\n\t\t// strip quotes (if they exist)\n\t\tvar unquotedOrigUrl = origUrl\n\t\t\t.trim()\n\t\t\t.replace(/^\"(.*)\"$/, function(o, $1){ return $1; })\n\t\t\t.replace(/^'(.*)'$/, function(o, $1){ return $1; });\n\n\t\t// already a full url? no change\n\t\tif (/^(#|data:|http:\\/\\/|https:\\/\\/|file:\\/\\/\\/)/i.test(unquotedOrigUrl)) {\n\t\t  return fullMatch;\n\t\t}\n\n\t\t// convert the url to a full url\n\t\tvar newUrl;\n\n\t\tif (unquotedOrigUrl.indexOf(\"//\") === 0) {\n\t\t  \t//TODO: should we add protocol?\n\t\t\tnewUrl = unquotedOrigUrl;\n\t\t} else if (unquotedOrigUrl.indexOf(\"/\") === 0) {\n\t\t\t// path should be relative to the base url\n\t\t\tnewUrl = baseUrl + unquotedOrigUrl; // already starts with '/'\n\t\t} else {\n\t\t\t// path should be relative to current directory\n\t\t\tnewUrl = currentDir + unquotedOrigUrl.replace(/^\\.\\//, \"\"); // Strip leading './'\n\t\t}\n\n\t\t// send back the fixed url(...)\n\t\treturn \"url(\" + JSON.stringify(newUrl) + \")\";\n\t});\n\n\t// send back the fixed css\n\treturn fixedCss;\n};\n\n\n//# sourceURL=webpack:///./node_modules/style-loader/lib/urls.js?");
  
  /***/ }),
  
  /***/ "./src/demo-component.js":
  /*!*******************************!*\
    !*** ./src/demo-component.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 _demoComponent = __webpack_require__(/*! ./demo-component.scss */ \"./src/demo-component.scss\");\n\nvar _demoComponent2 = _interopRequireDefault(_demoComponent);\n\nvar _slideRuler = __webpack_require__(/*! ./slide-ruler */ \"./src/slide-ruler.js\");\n\nvar _slideRuler2 = _interopRequireDefault(_slideRuler);\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 DemoComponent = function () {\n  function DemoComponent() {\n    var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n    _classCallCheck(this, DemoComponent);\n\n    this.options = {\n      container: '',\n      valueEl: ''\n    };\n\n    Object.assign(this.options, options);\n\n    this.init();\n  }\n\n  _createClass(DemoComponent, [{\n    key: '_renderContainer',\n    value: function _renderContainer() {\n      var typeName = this.options.typeName,\n          container = document.createElement('div');\n\n      this.options.container = container;\n      container.className = _demoComponent2.default.container;\n      container.innerHTML = '<h6 class=\"' + _demoComponent2.default.typeName + '\">' + typeName + '</h6>';\n      document.querySelector('#demo').appendChild(container);\n      this._renderValueContainer();\n      this._renderRuler();\n    }\n  }, {\n    key: '_renderValueContainer',\n    value: function _renderValueContainer() {\n      var _options = this.options,\n          currentValue = _options.currentValue,\n          unit = _options.unit,\n          valueContainer = document.createElement('div');\n\n      valueContainer.className = _demoComponent2.default.valueContainer;\n      var valueEl = document.createElement('span');\n      this.options.valueEl = valueEl;\n      valueEl.className = _demoComponent2.default.value;\n      valueEl.innerText = currentValue;\n      valueContainer.appendChild(valueEl);\n      var valueUnit = document.createElement('i');\n      valueUnit.innerText = unit;\n      valueContainer.appendChild(valueUnit);\n      this.options.container.appendChild(valueContainer);\n    }\n  }, {\n    key: '_renderRuler',\n    value: function _renderRuler() {\n      var _options2 = this.options,\n          maxValue = _options2.maxValue,\n          minValue = _options2.minValue,\n          currentValue = _options2.currentValue,\n          _options2$precision = _options2.precision,\n          precision = _options2$precision === undefined ? 1 : _options2$precision;\n\n      new _slideRuler2.default({\n        el: this.options.container,\n        handleValue: this.handleValue.bind(this),\n        maxValue: maxValue,\n        minValue: minValue,\n        currentValue: currentValue,\n        precision: precision\n      });\n    }\n  }, {\n    key: 'handleValue',\n    value: function handleValue(value) {\n      this.options.valueEl.innerHTML = value;\n    }\n  }, {\n    key: 'init',\n    value: function init() {\n      this._renderContainer();\n    }\n  }]);\n\n  return DemoComponent;\n}();\n\nexports.default = DemoComponent;\n\n//# sourceURL=webpack:///./src/demo-component.js?");
  
  /***/ }),
  
  /***/ "./src/demo-component.scss":
  /*!*********************************!*\
    !*** ./src/demo-component.scss ***!
    \*********************************/
  /*! no static exports found */
  /***/ (function(module, exports, __webpack_require__) {
  
  eval("// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = __webpack_require__(/*! !../node_modules/css-loader??ref--5-1!../node_modules/sass-loader/lib/loader.js!./demo-component.scss */ \"./node_modules/css-loader/index.js??ref--5-1!./node_modules/sass-loader/lib/loader.js!./src/demo-component.scss\");\nif(typeof content === 'string') content = [[module.i, content, '']];\n// Prepare cssTransformation\nvar transform;\n\nvar options = {}\noptions.transform = transform\n// add the styles to the DOM\nvar update = __webpack_require__(/*! ../node_modules/style-loader/lib/addStyles.js */ \"./node_modules/style-loader/lib/addStyles.js\")(content, options);\nif(content.locals) module.exports = content.locals;\n// Hot Module Replacement\nif(true) {\n\t// When the styles change, update the <style> tags\n\tif(!content.locals) {\n\t\tmodule.hot.accept(/*! !../node_modules/css-loader??ref--5-1!../node_modules/sass-loader/lib/loader.js!./demo-component.scss */ \"./node_modules/css-loader/index.js??ref--5-1!./node_modules/sass-loader/lib/loader.js!./src/demo-component.scss\", function(__WEBPACK_OUTDATED_DEPENDENCIES__) { (function() {\n\t\t\tvar newContent = __webpack_require__(/*! !../node_modules/css-loader??ref--5-1!../node_modules/sass-loader/lib/loader.js!./demo-component.scss */ \"./node_modules/css-loader/index.js??ref--5-1!./node_modules/sass-loader/lib/loader.js!./src/demo-component.scss\");\n\t\t\tif(typeof newContent === 'string') newContent = [[module.i, newContent, '']];\n\t\t\tupdate(newContent);\n\t\t})(__WEBPACK_OUTDATED_DEPENDENCIES__); });\n\t}\n\t// When the module is disposed, remove the <style> tags\n\tmodule.hot.dispose(function() { update(); });\n}\n\n//# sourceURL=webpack:///./src/demo-component.scss?");
  
  /***/ }),
  
  /***/ "./src/demo.js":
  /*!*********************!*\
    !*** ./src/demo.js ***!
    \*********************/
  /*! no static exports found */
  /***/ (function(module, exports, __webpack_require__) {
  
  "use strict";
  eval("\n\nvar _demo = __webpack_require__(/*! ./demo.scss */ \"./src/demo.scss\");\n\nvar _demo2 = _interopRequireDefault(_demo);\n\nvar _demoComponent = __webpack_require__(/*! ./demo-component */ \"./src/demo-component.js\");\n\nvar _demoComponent2 = _interopRequireDefault(_demoComponent);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nnew _demoComponent2.default({\n  typeName: 'Age',\n  unit: 'year',\n  maxValue: 2018,\n  minValue: 1938,\n  currentValue: 1996\n});\n\nnew _demoComponent2.default({\n  typeName: 'Height',\n  unit: 'cm',\n  maxValue: 230,\n  minValue: 100,\n  currentValue: 180\n});\n\nnew _demoComponent2.default({\n  typeName: 'Weight',\n  unit: 'kg',\n  maxValue: 200,\n  minValue: 30,\n  currentValue: 73.1,\n  precision: 0.1\n});\n\n!function (x) {\n  var t = x.document;\n  function phoneTest() {\n    var tipsBox = document.createElement('div');\n    console.log(x.hasOwnProperty('ontouchstart'));\n    if (!x.hasOwnProperty('ontouchstart')) {\n      tipsBox.className = _demo2.default.tipsBox;\n      tipsBox.innerHTML = '<div class=\\'' + _demo2.default.content + '\\'>\\n                            <p class=\\'' + _demo2.default.tipsWorld + '\\'>\\u8BF7\\u5C06Chrome\\u5207\\u6362\\u6210\\u624B\\u673A\\u6A21\\u5F0F\\u6216\\u626B\\u7801\\u67E5\\u770B</p>\\n                            <img class=\\'' + _demo2.default.qrcode + '\\' src=\\'https://qr.api.cli.im/qr?data=https%253A%252F%252Fsimbawus.github.io%252Fslide-ruler&level=H&transparent=false&bgcolor=%23ffffff&forecolor=%23000000&blockpixel=12&marginblock=1&logourl=&size=280&kid=cliim&key=92204c1a3fe5e2ad56f1c24b6db4952c\\' alt=\\'\\'>\\n                            <div class=\"' + _demo2.default.githubButtons + '\">\\n                              <iframe src=\"https://ghbtns.com/github-btn.html?user=simbawus&type=follow&count=true&size=large\" frameborder=\"0\" scrolling=\"0\" width=\"190px\" height=\"30px\"></iframe>\\n                              <iframe src=\"https://ghbtns.com/github-btn.html?user=simbawus&repo=slide-ruler&type=star&count=true&size=large\" frameborder=\"0\" scrolling=\"0\" width=\"130px\" height=\"30px\"></iframe>\\n                            </div>\\n                          </div>';\n      document.body.appendChild(tipsBox);\n    } else {}\n  };\n  x.addEventListener('resize', function () {\n    clearTimeout(t);\n    t = setTimeout(function () {\n      window.location.href = window.location.href;\n      phoneTest();\n    }, 50);\n  }, !1);\n  phoneTest();\n}(window);\n\n//# sourceURL=webpack:///./src/demo.js?");
  
  /***/ }),
  
  /***/ "./src/demo.scss":
  /*!***********************!*\
    !*** ./src/demo.scss ***!
    \***********************/
  /*! no static exports found */
  /***/ (function(module, exports, __webpack_require__) {
  
  eval("// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = __webpack_require__(/*! !../node_modules/css-loader??ref--5-1!../node_modules/sass-loader/lib/loader.js!./demo.scss */ \"./node_modules/css-loader/index.js??ref--5-1!./node_modules/sass-loader/lib/loader.js!./src/demo.scss\");\nif(typeof content === 'string') content = [[module.i, content, '']];\n// Prepare cssTransformation\nvar transform;\n\nvar options = {}\noptions.transform = transform\n// add the styles to the DOM\nvar update = __webpack_require__(/*! ../node_modules/style-loader/lib/addStyles.js */ \"./node_modules/style-loader/lib/addStyles.js\")(content, options);\nif(content.locals) module.exports = content.locals;\n// Hot Module Replacement\nif(true) {\n\t// When the styles change, update the <style> tags\n\tif(!content.locals) {\n\t\tmodule.hot.accept(/*! !../node_modules/css-loader??ref--5-1!../node_modules/sass-loader/lib/loader.js!./demo.scss */ \"./node_modules/css-loader/index.js??ref--5-1!./node_modules/sass-loader/lib/loader.js!./src/demo.scss\", function(__WEBPACK_OUTDATED_DEPENDENCIES__) { (function() {\n\t\t\tvar newContent = __webpack_require__(/*! !../node_modules/css-loader??ref--5-1!../node_modules/sass-loader/lib/loader.js!./demo.scss */ \"./node_modules/css-loader/index.js??ref--5-1!./node_modules/sass-loader/lib/loader.js!./src/demo.scss\");\n\t\t\tif(typeof newContent === 'string') newContent = [[module.i, newContent, '']];\n\t\t\tupdate(newContent);\n\t\t})(__WEBPACK_OUTDATED_DEPENDENCIES__); });\n\t}\n\t// When the module is disposed, remove the <style> tags\n\tmodule.hot.dispose(function() { update(); });\n}\n\n//# sourceURL=webpack:///./src/demo.scss?");
  
  /***/ }),
  
  /***/ "./src/slide-ruler.js":
  /*!****************************!*\
    !*** ./src/slide-ruler.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 _slideRuler = __webpack_require__(/*! ./slide-ruler.scss */ \"./src/slide-ruler.scss\");\n\nvar _slideRuler2 = _interopRequireDefault(_slideRuler);\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 sliderRuler = function () {\n  function sliderRuler() {\n    var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n    _classCallCheck(this, sliderRuler);\n\n    this.value = '';\n    this.options = {\n      canvasWidth: document.body.clientWidth || 375,\n      canvasHeight: 83,\n      boxColor: '#E4E4E4',\n      scrollLeft: 0,\n      heightDecimal: 35,\n      heightDigit: 18,\n      lineWidth: 2,\n      colorDecimal: '#E4E4E4',\n      colorDigit: '#E4E4E4',\n      divide: 10,\n      precision: 1,\n      fontSize: 20,\n      fontColor: '#666',\n      maxValue: 230,\n      minValue: 100,\n      currentValue: 160\n    };\n\n    this.localState = {\n      startX: 0,\n      startY: 0,\n      isTouchEnd: true,\n      touchPoints: []\n    };\n\n    Object.assign(this.options, options);\n\n    this.init(options);\n  }\n\n  _createClass(sliderRuler, [{\n    key: '_renderBox',\n    value: function _renderBox(container) {\n      var box = document.createElement('div'),\n          canvas = document.createElement('canvas');\n      this.canvas = canvas;\n      box.className = _slideRuler2.default.box;\n      box.appendChild(canvas);\n      container.appendChild(box);\n      this._renderCanvas();\n    }\n  }, {\n    key: '_renderCanvas',\n    value: function _renderCanvas() {\n      var _options = this.options,\n          canvasWidth = _options.canvasWidth,\n          canvasHeight = _options.canvasHeight,\n          canvas = this.canvas;\n\n      canvas.width = canvasWidth * 2;\n      canvas.height = canvasHeight * 2;\n      canvas.style.width = canvasWidth + 'px';\n      canvas.style.height = canvasHeight + 'px';\n      canvas.className = _slideRuler2.default.canvas;\n      canvas.ontouchstart = this.touchStart.bind(this);\n      canvas.ontouchmove = this.touchMove.bind(this);\n      canvas.ontouchend = this.touchEnd.bind(this);\n      this.dreawCanvas();\n    }\n  }, {\n    key: 'touchStart',\n    value: function touchStart(e) {\n      e.preventDefault();\n      if (e.touches.length === 1 || this.localState.isTouchEnd) {\n        this.touchPoints(e);\n        var touch = e.touches[0];\n        this.localState.startX = touch.pageX;\n        this.localState.startY = touch.pageY;\n        this.localState.startT = new Date().getTime(); // 记录手指按下的开始时间\n        this.localState.isTouchEnd = false; // 当前开始滑动\n      }\n    }\n  }, {\n    key: 'touchMove',\n    value: function touchMove(e) {\n      this.touchPoints(e);\n      var touch = e.touches[0],\n          deltaX = touch.pageX - this.localState.startX,\n          deltaY = touch.pageY - this.localState.startY;\n      // 如果X方向上的位移大于Y方向，则认为是左右滑动\n      if (Math.abs(deltaX) > Math.abs(deltaY) && Math.abs(Math.round(deltaX / this.options.divide)) > 0) {\n        if (!this.rebound(deltaX)) {\n          return;\n        }\n        this.moveDreaw(deltaX);\n        this.localState.startX = touch.pageX;\n        this.localState.startY = touch.pageY;\n      }\n    }\n  }, {\n    key: 'touchEnd',\n    value: function touchEnd() {\n      this.moveDreaw(this.inertialShift());\n      this.localState.isTouchEnd = true;\n      this.localState.touchPoints = [];\n      this.canvas.style.transform = 'translate3d(0, 0, 0)';\n    }\n  }, {\n    key: 'touchPoints',\n    value: function touchPoints(e) {\n      var touch = e.touches[0],\n          time = new Date().getTime(),\n          shift = touch.pageX;\n      this.localState.touchPoints.push({ time: time, shift: shift });\n    }\n  }, {\n    key: 'inertialShift',\n    value: function inertialShift() {\n      var s = 0;\n      if (this.localState.touchPoints.length >= 4) {\n        var _points = this.localState.touchPoints.slice(-4),\n            v = (_points[3].shift - _points[0].shift) / (_points[3].time - _points[0].time) * 1000; // v 手指离开屏幕后的速度px/s\n        var a = 6000; // a 手指离开屏幕后的加速度\n        s = Math.sign(v) * Math.pow(v, 2) / (2 * a); // s 手指离开屏幕后惯性距离\n      }\n      return s;\n    }\n  }, {\n    key: 'rebound',\n    value: function rebound(deltaX) {\n      var _options2 = this.options,\n          currentValue = _options2.currentValue,\n          maxValue = _options2.maxValue,\n          minValue = _options2.minValue;\n\n      if (currentValue === minValue && deltaX > 0 || currentValue === maxValue && deltaX < 0) {\n        var reboundX = Math.sign(deltaX) * 1.5988 * Math.pow(Math.abs(deltaX), 0.7962);\n        this.canvas.style.transform = 'translate3d(' + reboundX + 'px, 0, 0)';\n        return false;\n      }\n      return true;\n    }\n  }, {\n    key: 'moveDreaw',\n    value: function moveDreaw(shift) {\n      var _this = this;\n\n      var _options3 = this.options,\n          divide = _options3.divide,\n          precision = _options3.precision;\n\n      var moveValue = Math.round(-shift / divide),\n          _moveValue = Math.abs(moveValue),\n          draw = function draw() {\n        if (_moveValue < 1) {\n          return;\n        }\n        _this.options.currentValue += Math.sign(moveValue) * precision;\n        _this.dreawCanvas();\n        window.requestAnimationFrame(draw);\n        _moveValue--;\n      };\n\n      draw();\n    }\n  }, {\n    key: 'dreawCanvas',\n    value: function dreawCanvas() {\n      var canvas = this.canvas,\n          context = canvas.getContext('2d');\n      canvas.height = canvas.height;\n      var _options4 = this.options,\n          canvasWidth = _options4.canvasWidth,\n          canvasHeight = _options4.canvasHeight,\n          maxValue = _options4.maxValue,\n          minValue = _options4.minValue,\n          currentValue = _options4.currentValue,\n          handleValue = _options4.handleValue,\n          precision = _options4.precision,\n          divide = _options4.divide,\n          heightDecimal = _options4.heightDecimal,\n          heightDigit = _options4.heightDigit,\n          lineWidth = _options4.lineWidth,\n          colorDecimal = _options4.colorDecimal,\n          colorDigit = _options4.colorDigit,\n          fontSize = _options4.fontSize,\n          fontColor = _options4.fontColor;\n      // 计算当前值\n\n      currentValue = currentValue > minValue ? currentValue < maxValue ? currentValue : maxValue : minValue;\n      currentValue = Math.round(currentValue * 10 / precision) * precision / 10;\n      this.options.currentValue = currentValue;\n      handleValue && handleValue(currentValue);\n      var diffCurrentMin = (currentValue - minValue) * divide / precision,\n          startValue = currentValue - Math.floor(canvasWidth / 2 / divide) * precision;\n      startValue = startValue > minValue ? startValue < maxValue ? startValue : maxValue : minValue;\n      var endValue = startValue + canvasWidth / divide * precision;\n      endValue = endValue < maxValue ? endValue : maxValue;\n      // 定义原点\n      var origin = { x: diffCurrentMin > canvasWidth / 2 ? (canvasWidth / 2 - (currentValue - startValue) * divide / precision) * 2 : (canvasWidth / 2 - diffCurrentMin) * 2, y: canvasHeight * 2 };\n      // 定义刻度线样式\n      heightDecimal = heightDecimal * 2;\n      heightDigit = heightDigit * 2;\n      lineWidth = lineWidth * 2;\n      // 定义刻度字体样式\n      fontSize = fontSize * 2;\n      // 每个刻度所占位的px\n      divide = divide * 2;\n      // 定义每个刻度的精度\n      var derivative = 1 / precision;\n\n      for (var i = Math.round(startValue / precision * 10) / 10; i <= endValue / precision; i++) {\n        context.beginPath();\n        // 画刻度线\n        context.moveTo(origin.x + (i - startValue / precision) * divide, 0);\n        // 画线到刻度高度，10的位数就加高\n        context.lineTo(origin.x + (i - startValue / precision) * divide, i % 10 === 0 ? heightDecimal : heightDigit);\n        context.lineWidth = lineWidth;\n        // 10的位数就加深\n        context.strokeStyle = i % 10 === 0 ? colorDecimal : colorDigit;\n        context.stroke();\n        // 描绘刻度值\n        context.fillStyle = fontColor;\n        context.textAlign = 'center';\n        context.textBaseline = 'top';\n        if (i % 10 === 0) {\n          context.font = fontSize + 'px Arial';\n          context.fillText(Math.round(i / 10) / (derivative / 10), origin.x + (i - startValue / precision) * divide, heightDecimal);\n        }\n        context.closePath();\n      }\n    }\n  }, {\n    key: 'init',\n    value: function init(options) {\n      this._renderBox(options.el);\n    }\n  }]);\n\n  return sliderRuler;\n}();\n\nexports.default = sliderRuler;\n\n//# sourceURL=webpack:///./src/slide-ruler.js?");
  
  /***/ }),
  
  /***/ "./src/slide-ruler.scss":
  /*!******************************!*\
    !*** ./src/slide-ruler.scss ***!
    \******************************/
  /*! no static exports found */
  /***/ (function(module, exports, __webpack_require__) {
  
  eval("// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = __webpack_require__(/*! !../node_modules/css-loader??ref--5-1!../node_modules/sass-loader/lib/loader.js!./slide-ruler.scss */ \"./node_modules/css-loader/index.js??ref--5-1!./node_modules/sass-loader/lib/loader.js!./src/slide-ruler.scss\");\nif(typeof content === 'string') content = [[module.i, content, '']];\n// Prepare cssTransformation\nvar transform;\n\nvar options = {}\noptions.transform = transform\n// add the styles to the DOM\nvar update = __webpack_require__(/*! ../node_modules/style-loader/lib/addStyles.js */ \"./node_modules/style-loader/lib/addStyles.js\")(content, options);\nif(content.locals) module.exports = content.locals;\n// Hot Module Replacement\nif(true) {\n\t// When the styles change, update the <style> tags\n\tif(!content.locals) {\n\t\tmodule.hot.accept(/*! !../node_modules/css-loader??ref--5-1!../node_modules/sass-loader/lib/loader.js!./slide-ruler.scss */ \"./node_modules/css-loader/index.js??ref--5-1!./node_modules/sass-loader/lib/loader.js!./src/slide-ruler.scss\", function(__WEBPACK_OUTDATED_DEPENDENCIES__) { (function() {\n\t\t\tvar newContent = __webpack_require__(/*! !../node_modules/css-loader??ref--5-1!../node_modules/sass-loader/lib/loader.js!./slide-ruler.scss */ \"./node_modules/css-loader/index.js??ref--5-1!./node_modules/sass-loader/lib/loader.js!./src/slide-ruler.scss\");\n\t\t\tif(typeof newContent === 'string') newContent = [[module.i, newContent, '']];\n\t\t\tupdate(newContent);\n\t\t})(__WEBPACK_OUTDATED_DEPENDENCIES__); });\n\t}\n\t// When the module is disposed, remove the <style> tags\n\tmodule.hot.dispose(function() { update(); });\n}\n\n//# sourceURL=webpack:///./src/slide-ruler.scss?");
  
  /***/ })
  
  /******/ });