\";\n return div.innerHTML.indexOf('
') > 0\n}\n\n// #3663: IE encodes newlines inside attribute values while other browsers don't\nvar shouldDecodeNewlines = inBrowser ? getShouldDecode(false) : false;\n// #6828: chrome encodes content in a[href]\nvar shouldDecodeNewlinesForHref = inBrowser ? getShouldDecode(true) : false;\n\n/* */\n\nvar idToTemplate = cached(function (id) {\n var el = query(id);\n return el && el.innerHTML\n});\n\nvar mount = Vue.prototype.$mount;\nVue.prototype.$mount = function (\n el,\n hydrating\n) {\n el = el && query(el);\n\n /* istanbul ignore if */\n if (el === document.body || el === document.documentElement) {\n process.env.NODE_ENV !== 'production' && warn(\n \"Do not mount Vue to or - mount to normal elements instead.\"\n );\n return this\n }\n\n var options = this.$options;\n // resolve template/el and convert to render function\n if (!options.render) {\n var template = options.template;\n if (template) {\n if (typeof template === 'string') {\n if (template.charAt(0) === '#') {\n template = idToTemplate(template);\n /* istanbul ignore if */\n if (process.env.NODE_ENV !== 'production' && !template) {\n warn(\n (\"Template element not found or is empty: \" + (options.template)),\n this\n );\n }\n }\n } else if (template.nodeType) {\n template = template.innerHTML;\n } else {\n if (process.env.NODE_ENV !== 'production') {\n warn('invalid template option:' + template, this);\n }\n return this\n }\n } else if (el) {\n template = getOuterHTML(el);\n }\n if (template) {\n /* istanbul ignore if */\n if (process.env.NODE_ENV !== 'production' && config.performance && mark) {\n mark('compile');\n }\n\n var ref = compileToFunctions(template, {\n outputSourceRange: process.env.NODE_ENV !== 'production',\n shouldDecodeNewlines: shouldDecodeNewlines,\n shouldDecodeNewlinesForHref: shouldDecodeNewlinesForHref,\n delimiters: options.delimiters,\n comments: options.comments\n }, this);\n var render = ref.render;\n var staticRenderFns = ref.staticRenderFns;\n options.render = render;\n options.staticRenderFns = staticRenderFns;\n\n /* istanbul ignore if */\n if (process.env.NODE_ENV !== 'production' && config.performance && mark) {\n mark('compile end');\n measure((\"vue \" + (this._name) + \" compile\"), 'compile', 'compile end');\n }\n }\n }\n return mount.call(this, el, hydrating)\n};\n\n/**\n * Get outerHTML of elements, taking care\n * of SVG elements in IE as well.\n */\nfunction getOuterHTML (el) {\n if (el.outerHTML) {\n return el.outerHTML\n } else {\n var container = document.createElement('div');\n container.appendChild(el.cloneNode(true));\n return container.innerHTML\n }\n}\n\nVue.compile = compileToFunctions;\n\nexport default Vue;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/vue/dist/vue.esm.js\n// module id = 7+uW\n// module chunks = 0","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/library/modules/_an-object.js\n// module id = 77Pl\n// module chunks = 0","'use strict';\n\nvar utils = require('./../utils');\nvar settle = require('./../core/settle');\nvar buildURL = require('./../helpers/buildURL');\nvar parseHeaders = require('./../helpers/parseHeaders');\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\nvar createError = require('../core/createError');\nvar btoa = (typeof window !== 'undefined' && window.btoa && window.btoa.bind(window)) || require('./../helpers/btoa');\n\nmodule.exports = function xhrAdapter(config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n var requestData = config.data;\n var requestHeaders = config.headers;\n\n if (utils.isFormData(requestData)) {\n delete requestHeaders['Content-Type']; // Let the browser set it\n }\n\n var request = new XMLHttpRequest();\n var loadEvent = 'onreadystatechange';\n var xDomain = false;\n\n // For IE 8/9 CORS support\n // Only supports POST and GET calls and doesn't returns the response headers.\n // DON'T do this for testing b/c XMLHttpRequest is mocked, not XDomainRequest.\n if (process.env.NODE_ENV !== 'test' &&\n typeof window !== 'undefined' &&\n window.XDomainRequest && !('withCredentials' in request) &&\n !isURLSameOrigin(config.url)) {\n request = new window.XDomainRequest();\n loadEvent = 'onload';\n xDomain = true;\n request.onprogress = function handleProgress() {};\n request.ontimeout = function handleTimeout() {};\n }\n\n // HTTP basic authentication\n if (config.auth) {\n var username = config.auth.username || '';\n var password = config.auth.password || '';\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n }\n\n request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);\n\n // Set the request timeout in MS\n request.timeout = config.timeout;\n\n // Listen for ready state\n request[loadEvent] = function handleLoad() {\n if (!request || (request.readyState !== 4 && !xDomain)) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n\n // Prepare the response\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response;\n var response = {\n data: responseData,\n // IE sends 1223 instead of 204 (https://github.com/axios/axios/issues/201)\n status: request.status === 1223 ? 204 : request.status,\n statusText: request.status === 1223 ? 'No Content' : request.statusText,\n headers: responseHeaders,\n config: config,\n request: request\n };\n\n settle(resolve, reject, response);\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(createError('Network Error', config, null, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n reject(createError('timeout of ' + config.timeout + 'ms exceeded', config, 'ECONNABORTED',\n request));\n\n // Clean up request\n request = null;\n };\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n if (utils.isStandardBrowserEnv()) {\n var cookies = require('./../helpers/cookies');\n\n // Add xsrf header\n var xsrfValue = (config.withCredentials || isURLSameOrigin(config.url)) && config.xsrfCookieName ?\n cookies.read(config.xsrfCookieName) :\n undefined;\n\n if (xsrfValue) {\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\n }\n }\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n // Remove Content-Type if data is undefined\n delete requestHeaders[key];\n } else {\n // Otherwise add header to the request\n request.setRequestHeader(key, val);\n }\n });\n }\n\n // Add withCredentials to request if needed\n if (config.withCredentials) {\n request.withCredentials = true;\n }\n\n // Add responseType to request if needed\n if (config.responseType) {\n try {\n request.responseType = config.responseType;\n } catch (e) {\n // Expected DOMException thrown by browsers not compatible XMLHttpRequest Level 2.\n // But, this can be suppressed for 'json' type as it can be parsed by default 'transformResponse' function.\n if (config.responseType !== 'json') {\n throw e;\n }\n }\n }\n\n // Handle progress if needed\n if (typeof config.onDownloadProgress === 'function') {\n request.addEventListener('progress', config.onDownloadProgress);\n }\n\n // Not all browsers support upload events\n if (typeof config.onUploadProgress === 'function' && request.upload) {\n request.upload.addEventListener('progress', config.onUploadProgress);\n }\n\n if (config.cancelToken) {\n // Handle cancellation\n config.cancelToken.promise.then(function onCanceled(cancel) {\n if (!request) {\n return;\n }\n\n request.abort();\n reject(cancel);\n // Clean up request\n request = null;\n });\n }\n\n if (requestData === undefined) {\n requestData = null;\n }\n\n // Send the request\n request.send(requestData);\n });\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/axios/lib/adapters/xhr.js\n// module id = 7GwW\n// module chunks = 0","// 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//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/library/modules/_global.js\n// module id = 7KvD\n// module chunks = 0","// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg) {\n return cof(arg) == 'Array';\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/library/modules/_is-array.js\n// module id = 7UMu\n// module chunks = 0","var global = require('./_global');\nvar macrotask = require('./_task').set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = require('./_cof')(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//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/library/modules/_microtask.js\n// module id = 82Mu\n// module chunks = 0","module.exports = require('./_hide');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/library/modules/_redefine.js\n// module id = 880/\n// module chunks = 0","'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('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//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/library/modules/_iter-create.js\n// module id = 94VQ\n// module chunks = 0","module.exports = json2Plugin\n\nfunction json2Plugin() {\n\trequire('./lib/json2')\n\treturn {}\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/store/plugins/json2.js\n// module id = 9EiO\n// module chunks = 0","require('../../modules/es6.object.define-property');\nvar $Object = require('../../modules/_core').Object;\nmodule.exports = function defineProperty(it, key, desc) {\n return $Object.defineProperty(it, key, desc);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/library/fn/object/define-property.js\n// module id = 9bBU\n// module chunks = 0","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar logger_1 = require(\"@sentry/utils/logger\");\nvar misc_1 = require(\"@sentry/utils/misc\");\nvar scope_1 = require(\"./scope\");\n/**\n * API compatibility version of this hub.\n *\n * WARNING: This number should only be incresed when the global interface\n * changes a and new methods are introduced.\n */\nexports.API_VERSION = 3;\n/**\n * Internal class used to make sure we always have the latest internal functions\n * working in case we have a version conflict.\n */\nvar Hub = /** @class */ (function () {\n /**\n * Creates a new instance of the hub, will push one {@link Layer} into the\n * internal stack on creation.\n *\n * @param client bound to the hub.\n * @param scope bound to the hub.\n * @param version number, higher number means higher priority.\n */\n function Hub(client, scope, version) {\n if (scope === void 0) { scope = new scope_1.Scope(); }\n if (version === void 0) { version = exports.API_VERSION; }\n this.version = version;\n /** Is a {@link Layer}[] containing the client and scope */\n this.stack = [];\n this.stack.push({ client: client, scope: scope });\n }\n /**\n * Internal helper function to call a method on the top client if it exists.\n *\n * @param method The method to call on the client/client.\n * @param args Arguments to pass to the client/frontend.\n */\n Hub.prototype.invokeClient = function (method) {\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n var _a;\n var top = this.getStackTop();\n if (top && top.client && top.client[method]) {\n (_a = top.client)[method].apply(_a, tslib_1.__spread(args, [top.scope]));\n }\n };\n /**\n * Internal helper function to call an async method on the top client if it\n * exists.\n *\n * @param method The method to call on the client/client.\n * @param args Arguments to pass to the client/frontend.\n */\n Hub.prototype.invokeClientAsync = function (method) {\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n var _a;\n var top = this.getStackTop();\n if (top && top.client && top.client[method]) {\n (_a = top.client)[method].apply(_a, tslib_1.__spread(args, [top.scope])).catch(function (err) {\n logger_1.logger.error(err);\n });\n }\n };\n /**\n * Checks if this hub's version is older than the given version.\n *\n * @param version A version number to compare to.\n * @return True if the given version is newer; otherwise false.\n */\n Hub.prototype.isOlderThan = function (version) {\n return this.version < version;\n };\n /**\n * This binds the given client to the current scope.\n * @param client An SDK client (client) instance.\n */\n Hub.prototype.bindClient = function (client) {\n var top = this.getStackTop();\n top.client = client;\n if (top && top.scope && client) {\n top.scope.addScopeListener(function (s) {\n if (client.getBackend) {\n try {\n client.getBackend().storeScope(s);\n }\n catch (_a) {\n // Do nothing\n }\n }\n });\n }\n };\n /**\n * Create a new scope to store context information.\n *\n * The scope will be layered on top of the current one. It is isolated, i.e. all\n * breadcrumbs and context information added to this scope will be removed once\n * the scope ends. Be sure to always remove this scope with {@link this.popScope}\n * when the operation finishes or throws.\n *\n * @returns Scope, the new cloned scope\n */\n Hub.prototype.pushScope = function () {\n // We want to clone the content of prev scope\n var stack = this.getStack();\n var parentScope = stack.length > 0 ? stack[stack.length - 1].scope : undefined;\n var scope = scope_1.Scope.clone(parentScope);\n this.getStack().push({\n client: this.getClient(),\n scope: scope,\n });\n return scope;\n };\n /**\n * Removes a previously pushed scope from the stack.\n *\n * This restores the state before the scope was pushed. All breadcrumbs and\n * context information added since the last call to {@link this.pushScope} are\n * discarded.\n */\n Hub.prototype.popScope = function () {\n return this.getStack().pop() !== undefined;\n };\n /**\n * Creates a new scope with and executes the given operation within.\n * The scope is automatically removed once the operation\n * finishes or throws.\n *\n * This is essentially a convenience function for:\n *\n * pushScope();\n * callback();\n * popScope();\n *\n * @param callback that will be enclosed into push/popScope.\n */\n Hub.prototype.withScope = function (callback) {\n var scope = this.pushScope();\n try {\n callback(scope);\n }\n finally {\n this.popScope();\n }\n };\n /** Returns the client of the top stack. */\n Hub.prototype.getClient = function () {\n return this.getStackTop().client;\n };\n /** Returns the scope of the top stack. */\n Hub.prototype.getScope = function () {\n return this.getStackTop().scope;\n };\n /** Returns the scope stack for domains or the process. */\n Hub.prototype.getStack = function () {\n return this.stack;\n };\n /** Returns the topmost scope layer in the order domain > local > process. */\n Hub.prototype.getStackTop = function () {\n return this.stack[this.stack.length - 1];\n };\n /**\n * Captures an exception event and sends it to Sentry.\n *\n * @param exception An exception-like object.\n * @param hint May contain additional information about the original exception.\n * @returns The generated eventId.\n */\n Hub.prototype.captureException = function (exception, hint) {\n var eventId = (this._lastEventId = misc_1.uuid4());\n this.invokeClientAsync('captureException', exception, tslib_1.__assign({}, hint, { event_id: eventId }));\n return eventId;\n };\n /**\n * Captures a message event and sends it to Sentry.\n *\n * @param message The message to send to Sentry.\n * @param level Define the level of the message.\n * @param hint May contain additional information about the original exception.\n * @returns The generated eventId.\n */\n Hub.prototype.captureMessage = function (message, level, hint) {\n var eventId = (this._lastEventId = misc_1.uuid4());\n this.invokeClientAsync('captureMessage', message, level, tslib_1.__assign({}, hint, { event_id: eventId }));\n return eventId;\n };\n /**\n * Captures a manually created event and sends it to Sentry.\n *\n * @param event The event to send to Sentry.\n * @param hint May contain additional information about the original exception.\n */\n Hub.prototype.captureEvent = function (event, hint) {\n var eventId = (this._lastEventId = misc_1.uuid4());\n this.invokeClientAsync('captureEvent', event, tslib_1.__assign({}, hint, { event_id: eventId }));\n return eventId;\n };\n /**\n * This is the getter for lastEventId.\n *\n * @returns The last event id of a captured event.\n */\n Hub.prototype.lastEventId = function () {\n return this._lastEventId;\n };\n /**\n * Records a new breadcrumb which will be attached to future events.\n *\n * Breadcrumbs will be added to subsequent events to provide more context on\n * user's actions prior to an error or crash.\n *\n * @param breadcrumb The breadcrumb to record.\n * @param hint May contain additional information about the original breadcrumb.\n */\n Hub.prototype.addBreadcrumb = function (breadcrumb, hint) {\n this.invokeClient('addBreadcrumb', breadcrumb, tslib_1.__assign({}, hint));\n };\n /**\n * Callback to set context information onto the scope.\n *\n * @param callback Callback function that receives Scope.\n */\n Hub.prototype.configureScope = function (callback) {\n var top = this.getStackTop();\n if (top.scope && top.client) {\n // TODO: freeze flag\n callback(top.scope);\n }\n };\n /**\n * For the duraction of the callback, this hub will be set as the global current Hub.\n * This function is useful if you want to run your own client and hook into an already initialized one\n * e.g.: Reporting issues to your own sentry when running in your component while still using the users configuration.\n */\n Hub.prototype.run = function (callback) {\n var oldHub = makeMain(this);\n try {\n callback(this);\n }\n finally {\n makeMain(oldHub);\n }\n };\n /** Returns the integration if installed on the current client. */\n Hub.prototype.getIntegration = function (integration) {\n try {\n return this.getClient().getIntegration(integration);\n }\n catch (_oO) {\n logger_1.logger.warn(\"Cannot retrieve integration \" + integration.id + \" from the current Hub\");\n return null;\n }\n };\n return Hub;\n}());\nexports.Hub = Hub;\n/** Returns the global shim registry. */\nfunction getMainCarrier() {\n var carrier = misc_1.getGlobalObject();\n carrier.__SENTRY__ = carrier.__SENTRY__ || {\n hub: undefined,\n };\n return carrier;\n}\nexports.getMainCarrier = getMainCarrier;\n/**\n * Replaces the current main hub with the passed one on the global object\n *\n * @returns The old replaced hub\n */\nfunction makeMain(hub) {\n var registry = getMainCarrier();\n var oldHub = getHubFromCarrier(registry);\n setHubOnCarrier(registry, hub);\n return oldHub;\n}\nexports.makeMain = makeMain;\n/**\n * Returns the default hub instance.\n *\n * If a hub is already registered in the global carrier but this module\n * contains a more recent version, it replaces the registered version.\n * Otherwise, the currently registered hub will be returned.\n */\nfunction getCurrentHub() {\n // Get main carrier (global for every environment)\n var registry = getMainCarrier();\n // If there's no hub, or its an old API, assign a new one\n if (!hasHubOnCarrier(registry) || getHubFromCarrier(registry).isOlderThan(exports.API_VERSION)) {\n setHubOnCarrier(registry, new Hub());\n }\n // Prefer domains over global if they are there\n try {\n // We need to use `dynamicRequire` because `require` on it's own will be optimized by webpack.\n // We do not want this to happen, we need to try to `require` the domain node module and fail if we are in browser\n // for example so we do not have to shim it and use `getCurrentHub` universally.\n var domain = misc_1.dynamicRequire(module, 'domain');\n var activeDomain = domain.active;\n // If there no active domain, just return global hub\n if (!activeDomain) {\n return getHubFromCarrier(registry);\n }\n // If there's no hub on current domain, or its an old API, assign a new one\n if (!hasHubOnCarrier(activeDomain) || getHubFromCarrier(activeDomain).isOlderThan(exports.API_VERSION)) {\n var registryHubTopStack = getHubFromCarrier(registry).getStackTop();\n setHubOnCarrier(activeDomain, new Hub(registryHubTopStack.client, scope_1.Scope.clone(registryHubTopStack.scope)));\n }\n // Return hub that lives on a domain\n return getHubFromCarrier(activeDomain);\n }\n catch (_Oo) {\n // Return hub that lives on a global object\n return getHubFromCarrier(registry);\n }\n}\nexports.getCurrentHub = getCurrentHub;\n/**\n * This will tell whether a carrier has a hub on it or not\n * @param carrier object\n */\nfunction hasHubOnCarrier(carrier) {\n if (carrier && carrier.__SENTRY__ && carrier.__SENTRY__.hub) {\n return true;\n }\n else {\n return false;\n }\n}\nexports.hasHubOnCarrier = hasHubOnCarrier;\n/**\n * This will create a new {@link Hub} and add to the passed object on\n * __SENTRY__.hub.\n * @param carrier object\n */\nfunction getHubFromCarrier(carrier) {\n if (carrier && carrier.__SENTRY__ && carrier.__SENTRY__.hub) {\n return carrier.__SENTRY__.hub;\n }\n else {\n carrier.__SENTRY__ = {};\n carrier.__SENTRY__.hub = new Hub();\n return carrier.__SENTRY__.hub;\n }\n}\nexports.getHubFromCarrier = getHubFromCarrier;\n/**\n * This will set passed {@link Hub} on the passed object's __SENTRY__.hub attribute\n * @param carrier object\n * @param hub Hub\n */\nfunction setHubOnCarrier(carrier, hub) {\n if (!carrier) {\n return false;\n }\n carrier.__SENTRY__ = carrier.__SENTRY__ || {};\n carrier.__SENTRY__.hub = hub;\n return true;\n}\nexports.setHubOnCarrier = setHubOnCarrier;\n//# sourceMappingURL=hub.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@sentry/hub/dist/hub.js\n// module id = A6ZE\n// module chunks = 0","/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\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\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/object-assign/index.js\n// module id = BEQ0\n// module chunks = 0","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar hub_1 = require(\"@sentry/hub\");\nvar is_1 = require(\"@sentry/utils/is\");\nvar logger_1 = require(\"@sentry/utils/logger\");\nvar object_1 = require(\"@sentry/utils/object\");\n/** Patch toString calls to return proper name for wrapped functions */\nvar ExtraErrorData = /** @class */ (function () {\n /**\n * @inheritDoc\n */\n function ExtraErrorData(options) {\n if (options === void 0) { options = { depth: 3 }; }\n this.options = options;\n /**\n * @inheritDoc\n */\n this.name = ExtraErrorData.id;\n }\n /**\n * @inheritDoc\n */\n ExtraErrorData.prototype.setupOnce = function () {\n var _this = this;\n hub_1.addGlobalEventProcessor(function (event, hint) { return tslib_1.__awaiter(_this, void 0, void 0, function () {\n var self;\n return tslib_1.__generator(this, function (_a) {\n self = hub_1.getCurrentHub().getIntegration(ExtraErrorData);\n if (!self) {\n return [2 /*return*/, event];\n }\n return [2 /*return*/, self.enhanceEventWithErrorData(event, hint)];\n });\n }); });\n };\n /**\n * Attaches extracted information from the Error object to extra field in the SentryEvent\n */\n ExtraErrorData.prototype.enhanceEventWithErrorData = function (event, hint) {\n if (!hint || !hint.originalException || !is_1.isError(hint.originalException)) {\n return event;\n }\n var errorData = this.extractErrorData(hint.originalException);\n if (errorData) {\n var extra = tslib_1.__assign({}, event.extra);\n var normalizedErrorData = object_1.safeNormalize(errorData, this.options.depth);\n if (!is_1.isString(normalizedErrorData)) {\n extra = tslib_1.__assign({}, event.extra, normalizedErrorData);\n }\n return tslib_1.__assign({}, event, { extra: extra });\n }\n return event;\n };\n /**\n * Extract extra information from the Error object\n */\n ExtraErrorData.prototype.extractErrorData = function (error) {\n var e_1, _a, _b;\n var result = null;\n // We are trying to enhance already existing event, so no harm done if it won't succeed\n try {\n var nativeKeys_1 = ['name', 'message', 'stack', 'line', 'column', 'fileName', 'lineNumber', 'columnNumber'];\n var name_1 = error.name || error.constructor.name;\n var errorKeys = Object.getOwnPropertyNames(error).filter(function (key) { return nativeKeys_1.indexOf(key) === -1; });\n if (errorKeys.length) {\n var extraErrorInfo = {};\n try {\n for (var errorKeys_1 = tslib_1.__values(errorKeys), errorKeys_1_1 = errorKeys_1.next(); !errorKeys_1_1.done; errorKeys_1_1 = errorKeys_1.next()) {\n var key = errorKeys_1_1.value;\n var value = error[key];\n if (is_1.isError(value)) {\n value = value.toString();\n }\n extraErrorInfo[key] = value;\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (errorKeys_1_1 && !errorKeys_1_1.done && (_a = errorKeys_1.return)) _a.call(errorKeys_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n result = (_b = {},\n _b[name_1] = extraErrorInfo,\n _b);\n }\n }\n catch (oO) {\n logger_1.logger.error('Unable to extract extra data from the Error object:', oO);\n }\n return result;\n };\n /**\n * @inheritDoc\n */\n ExtraErrorData.id = 'ExtraErrorData';\n return ExtraErrorData;\n}());\nexports.ExtraErrorData = ExtraErrorData;\n//# sourceMappingURL=extraerrordata.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@sentry/core/dist/integrations/extraerrordata.js\n// module id = BvW5\n// module chunks = 0","require('../../modules/es6.symbol');\nrequire('../../modules/es6.object.to-string');\nrequire('../../modules/es7.symbol.async-iterator');\nrequire('../../modules/es7.symbol.observable');\nmodule.exports = require('../../modules/_core').Symbol;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/library/fn/symbol/index.js\n// module id = BwfY\n// module chunks = 0","module.exports = { \"default\": require(\"core-js/library/fn/object/define-property\"), __esModule: true };\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-runtime/core-js/object/define-property.js\n// module id = C4MV\n// module chunks = 0","'use strict';\nvar LIBRARY = require('./_library');\nvar global = require('./_global');\nvar ctx = require('./_ctx');\nvar classof = require('./_classof');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar aFunction = require('./_a-function');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar speciesConstructor = require('./_species-constructor');\nvar task = require('./_task').set;\nvar microtask = require('./_microtask')();\nvar newPromiseCapabilityModule = require('./_new-promise-capability');\nvar perform = require('./_perform');\nvar userAgent = require('./_user-agent');\nvar promiseResolve = require('./_promise-resolve');\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 = {})[require('./_wks')('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 = require('./_redefine-all')($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 });\nrequire('./_set-to-string-tag')($Promise, PROMISE);\nrequire('./_set-species')(PROMISE);\nWrapper = require('./_core')[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 && require('./_iter-detect')(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//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/library/modules/es6.promise.js\n// module id = CXw9\n// module chunks = 0","// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object');\nvar $keys = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function () {\n return function keys(it) {\n return $keys(toObject(it));\n };\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/library/modules/es6.object.keys.js\n// module id = Cdx3\n// module chunks = 0","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/library/modules/_has.js\n// module id = D2L2\n// module chunks = 0","'use strict';\n\nvar utils = require('./../utils');\n\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%40/gi, '@').\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+').\n replace(/%5B/gi, '[').\n replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @returns {string} The formatted url\n */\nmodule.exports = function buildURL(url, params, paramsSerializer) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n\n var serializedParams;\n if (paramsSerializer) {\n serializedParams = paramsSerializer(params);\n } else if (utils.isURLSearchParams(params)) {\n serializedParams = params.toString();\n } else {\n var parts = [];\n\n utils.forEach(params, function serialize(val, key) {\n if (val === null || typeof val === 'undefined') {\n return;\n }\n\n if (utils.isArray(val)) {\n key = key + '[]';\n }\n\n if (!utils.isArray(val)) {\n val = [val];\n }\n\n utils.forEach(val, function parseValue(v) {\n if (utils.isDate(v)) {\n v = v.toISOString();\n } else if (utils.isObject(v)) {\n v = JSON.stringify(v);\n }\n parts.push(encode(key) + '=' + encode(v));\n });\n });\n\n serializedParams = parts.join('&');\n }\n\n if (serializedParams) {\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/axios/lib/helpers/buildURL.js\n// module id = DQCr\n// module chunks = 0","\"use strict\";\n\nexports.__esModule = true;\n\nvar _assign = require(\"../core-js/object/assign\");\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\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-runtime/helpers/extends.js\n// module id = Dd8w\n// module chunks = 0","var rng = require('./lib/rng');\nvar bytesToUuid = require('./lib/bytesToUuid');\n\nfunction v4(options, buf, offset) {\n var i = buf && offset || 0;\n\n if (typeof(options) == 'string') {\n buf = options === 'binary' ? new Array(16) : null;\n options = null;\n }\n options = options || {};\n\n var rnds = options.random || (options.rng || rng)();\n\n // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n rnds[6] = (rnds[6] & 0x0f) | 0x40;\n rnds[8] = (rnds[8] & 0x3f) | 0x80;\n\n // Copy bytes to buffer, if provided\n if (buf) {\n for (var ii = 0; ii < 16; ++ii) {\n buf[i + ii] = rnds[ii];\n }\n }\n\n return buf || bytesToUuid(rnds);\n}\n\nmodule.exports = v4;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/uuid/v4.js\n// module id = DtRx\n// module chunks = 0","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\")\r\n\t\tg = 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\n//////////////////\n// WEBPACK FOOTER\n// (webpack)/buildin/global.js\n// module id = DuR2\n// module chunks = 0","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar error_1 = require(\"./error\");\n/** A simple queue that holds promises. */\nvar PromiseBuffer = /** @class */ (function () {\n function PromiseBuffer(limit) {\n this.limit = limit;\n /** Internal set of queued Promises */\n this.buffer = [];\n }\n /**\n * Says if the buffer is ready to take more requests\n */\n PromiseBuffer.prototype.isReady = function () {\n return this.limit === undefined || this.length() < this.limit;\n };\n /**\n * Add a promise to the queue.\n *\n * @param task Can be any Promise
\n * @returns The original promise.\n */\n PromiseBuffer.prototype.add = function (task) {\n return tslib_1.__awaiter(this, void 0, void 0, function () {\n var _this = this;\n return tslib_1.__generator(this, function (_a) {\n if (!this.isReady()) {\n return [2 /*return*/, Promise.reject(new error_1.SentryError('Not adding Promise due to buffer limit reached.'))];\n }\n if (this.buffer.indexOf(task) === -1) {\n this.buffer.push(task);\n }\n task\n .then(function () { return tslib_1.__awaiter(_this, void 0, void 0, function () { return tslib_1.__generator(this, function (_a) {\n return [2 /*return*/, this.remove(task)];\n }); }); })\n .catch(function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {\n return tslib_1.__generator(this, function (_a) {\n return [2 /*return*/, this.remove(task).catch(function () {\n // We have to add this catch here otherwise we have an unhandledPromiseRejection\n // because it's a new Promise chain.\n })];\n });\n }); });\n return [2 /*return*/, task];\n });\n });\n };\n /**\n * Remove a promise to the queue.\n *\n * @param task Can be any Promise\n * @returns Removed promise.\n */\n PromiseBuffer.prototype.remove = function (task) {\n return tslib_1.__awaiter(this, void 0, void 0, function () {\n var removedTask;\n return tslib_1.__generator(this, function (_a) {\n removedTask = this.buffer.splice(this.buffer.indexOf(task), 1)[0];\n return [2 /*return*/, removedTask];\n });\n });\n };\n /**\n * This function returns the number of unresolved promises in the queue.\n */\n PromiseBuffer.prototype.length = function () {\n return this.buffer.length;\n };\n /**\n * This will drain the whole queue, returns true if queue is empty or drained.\n * If timeout is provided and the queue takes longer to drain, the promise still resolves but with false.\n *\n * @param timeout Number in ms to wait until it resolves with false.\n */\n PromiseBuffer.prototype.drain = function (timeout) {\n return tslib_1.__awaiter(this, void 0, void 0, function () {\n var _this = this;\n return tslib_1.__generator(this, function (_a) {\n return [2 /*return*/, new Promise(function (resolve) {\n var capturedSetTimeout = setTimeout(function () {\n if (timeout && timeout > 0) {\n resolve(false);\n }\n }, timeout);\n Promise.all(_this.buffer)\n .then(function () {\n clearTimeout(capturedSetTimeout);\n resolve(true);\n })\n .catch(function () {\n resolve(true);\n });\n })];\n });\n });\n };\n return PromiseBuffer;\n}());\nexports.PromiseBuffer = PromiseBuffer;\n//# sourceMappingURL=promisebuffer.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@sentry/core/dist/promisebuffer.js\n// module id = E+6+\n// module chunks = 0","module.exports = function (done, value) {\n return { value: value, done: !!done };\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/library/modules/_iter-step.js\n// module id = EGZi\n// module chunks = 0","// https://github.com/tc39/proposal-promise-finally\n'use strict';\nvar $export = require('./_export');\nvar core = require('./_core');\nvar global = require('./_global');\nvar speciesConstructor = require('./_species-constructor');\nvar promiseResolve = require('./_promise-resolve');\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\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/library/modules/es7.promise.finally.js\n// module id = EqBC\n// module chunks = 0","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/library/modules/_is-object.js\n// module id = EqjI\n// module chunks = 0","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar logger_1 = require(\"@sentry/utils/logger\");\nexports.installedIntegrations = [];\n/** Gets integration to install */\nfunction getIntegrationsToSetup(options) {\n var e_1, _a, e_2, _b;\n var defaultIntegrations = (options.defaultIntegrations && tslib_1.__spread(options.defaultIntegrations)) || [];\n var userIntegrations = options.integrations;\n var integrations = [];\n if (Array.isArray(userIntegrations)) {\n var userIntegrationsNames = userIntegrations.map(function (i) { return i.name; });\n var pickedIntegrationsNames = [];\n try {\n // Leave only unique default integrations, that were not overridden with provided user integrations\n for (var defaultIntegrations_1 = tslib_1.__values(defaultIntegrations), defaultIntegrations_1_1 = defaultIntegrations_1.next(); !defaultIntegrations_1_1.done; defaultIntegrations_1_1 = defaultIntegrations_1.next()) {\n var defaultIntegration = defaultIntegrations_1_1.value;\n if (userIntegrationsNames.indexOf(getIntegrationName(defaultIntegration)) === -1 &&\n pickedIntegrationsNames.indexOf(getIntegrationName(defaultIntegration)) === -1) {\n integrations.push(defaultIntegration);\n pickedIntegrationsNames.push(getIntegrationName(defaultIntegration));\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (defaultIntegrations_1_1 && !defaultIntegrations_1_1.done && (_a = defaultIntegrations_1.return)) _a.call(defaultIntegrations_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n try {\n // Don't add same user integration twice\n for (var userIntegrations_1 = tslib_1.__values(userIntegrations), userIntegrations_1_1 = userIntegrations_1.next(); !userIntegrations_1_1.done; userIntegrations_1_1 = userIntegrations_1.next()) {\n var userIntegration = userIntegrations_1_1.value;\n if (pickedIntegrationsNames.indexOf(getIntegrationName(userIntegration)) === -1) {\n integrations.push(userIntegration);\n pickedIntegrationsNames.push(getIntegrationName(userIntegration));\n }\n }\n }\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\n finally {\n try {\n if (userIntegrations_1_1 && !userIntegrations_1_1.done && (_b = userIntegrations_1.return)) _b.call(userIntegrations_1);\n }\n finally { if (e_2) throw e_2.error; }\n }\n }\n else if (typeof userIntegrations === 'function') {\n integrations = userIntegrations(defaultIntegrations);\n integrations = Array.isArray(integrations) ? integrations : [integrations];\n }\n else {\n return tslib_1.__spread(defaultIntegrations);\n }\n return integrations;\n}\nexports.getIntegrationsToSetup = getIntegrationsToSetup;\n/** Setup given integration */\nfunction setupIntegration(integration, options) {\n if (exports.installedIntegrations.indexOf(getIntegrationName(integration)) !== -1) {\n return;\n }\n try {\n integration.setupOnce();\n }\n catch (_Oo) {\n /** @deprecated */\n // TODO: Remove in v5\n // tslint:disable:deprecation\n if (integration.install) {\n logger_1.logger.warn(\"Integration \" + getIntegrationName(integration) + \": The install method is deprecated. Use \\\"setupOnce\\\".\");\n integration.install(options);\n }\n // tslint:enable:deprecation\n }\n exports.installedIntegrations.push(getIntegrationName(integration));\n logger_1.logger.log(\"Integration installed: \" + getIntegrationName(integration));\n}\nexports.setupIntegration = setupIntegration;\n/**\n * Given a list of integration instances this installs them all. When `withDefaults` is set to `true` then all default\n * integrations are added unless they were already provided before.\n * @param integrations array of integration instances\n * @param withDefault should enable default integrations\n */\nfunction setupIntegrations(options) {\n var integrations = {};\n getIntegrationsToSetup(options).forEach(function (integration) {\n integrations[getIntegrationName(integration)] = integration;\n setupIntegration(integration, options);\n });\n return integrations;\n}\nexports.setupIntegrations = setupIntegrations;\n/**\n * Returns the integration static id.\n * @param integration Integration to retrieve id\n */\nfunction getIntegrationName(integration) {\n /**\n * @depracted\n */\n // tslint:disable-next-line:no-unsafe-any\n return integration.constructor.id || integration.name;\n}\n//# sourceMappingURL=integration.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@sentry/core/dist/integration.js\n// module id = Eu5d\n// module chunks = 0","var core = module.exports = { version: '2.6.12' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/library/modules/_core.js\n// module id = FeBl\n// module chunks = 0","'use strict';\n\nvar enhanceError = require('./enhanceError');\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The created error.\n */\nmodule.exports = function createError(message, config, code, request, response) {\n var error = new Error(message);\n return enhanceError(error, config, code, request, response);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/axios/lib/core/createError.js\n// module id = FtD3\n// module chunks = 0","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs have full support of the APIs needed to test\n // whether the request URL is of the same origin as current location.\n (function standardBrowserEnv() {\n var msie = /(msie|trident)/i.test(navigator.userAgent);\n var urlParsingNode = document.createElement('a');\n var originURL;\n\n /**\n * Parse a URL to discover it's components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\n function resolveURL(url) {\n var href = url;\n\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n\n urlParsingNode.setAttribute('href', href);\n\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n urlParsingNode.pathname :\n '/' + urlParsingNode.pathname\n };\n }\n\n originURL = resolveURL(window.location.href);\n\n /**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestURL The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\n return function isURLSameOrigin(requestURL) {\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n return (parsed.protocol === originURL.protocol &&\n parsed.host === originURL.host);\n };\n })() :\n\n // Non standard browser envs (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return function isURLSameOrigin() {\n return true;\n };\n })()\n);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/axios/lib/helpers/isURLSameOrigin.js\n// module id = GHBc\n// module chunks = 0","/*!\n * better-normal-scroll v1.15.2\n * (c) 2016-2019 ustbhuangyi\n * Released under the MIT License.\n */\n// As of V8 6.6, depending on the size of the array, this is anywhere\n// between 1.5-10x faster than the two-arg version of Array#splice()\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++) {\n list[index] = list[index + 1];\n }\n\n list.pop();\n}\n\nvar slicedToArray = function () {\n function sliceIterator(arr, i) {\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"]) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n }\n\n return function (arr, i) {\n if (Array.isArray(arr)) {\n return arr;\n } else if (Symbol.iterator in Object(arr)) {\n return sliceIterator(arr, i);\n } else {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n }\n };\n}();\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar toConsumableArray = function (arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];\n\n return arr2;\n } else {\n return Array.from(arr);\n }\n};\n\nfunction eventMixin(BScroll) {\n BScroll.prototype.on = function (type, fn) {\n var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this;\n\n if (!this._events[type]) {\n this._events[type] = [];\n }\n\n this._events[type].push([fn, context]);\n };\n\n BScroll.prototype.once = function (type, fn) {\n var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this;\n\n function magic() {\n this.off(type, magic);\n\n fn.apply(context, arguments);\n }\n // To expose the corresponding function method in order to execute the off method\n magic.fn = fn;\n\n this.on(type, magic);\n };\n\n BScroll.prototype.off = function (type, fn) {\n var _events = this._events[type];\n if (!_events) {\n return;\n }\n\n var count = _events.length;\n while (count--) {\n if (_events[count][0] === fn || _events[count][0] && _events[count][0].fn === fn) {\n spliceOne(_events, count);\n }\n }\n };\n\n BScroll.prototype.trigger = function (type) {\n var events = this._events[type];\n if (!events) {\n return;\n }\n\n var len = events.length;\n var eventsCopy = [].concat(toConsumableArray(events));\n for (var i = 0; i < len; i++) {\n var event = eventsCopy[i];\n\n var _event = slicedToArray(event, 2),\n fn = _event[0],\n context = _event[1];\n\n if (fn) {\n fn.apply(context, [].slice.call(arguments, 1));\n }\n }\n };\n}\n\n// ssr support\nvar inBrowser = typeof window !== 'undefined';\nvar ua = inBrowser && navigator.userAgent.toLowerCase();\nvar isWeChatDevTools = ua && /wechatdevtools/.test(ua);\nvar isAndroid = ua && ua.indexOf('android') > 0;\n\nfunction getNow() {\n return window.performance && window.performance.now ? window.performance.now() + window.performance.timing.navigationStart : +new Date();\n}\n\nfunction extend(target) {\n for (var _len = arguments.length, rest = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n rest[_key - 1] = arguments[_key];\n }\n\n for (var i = 0; i < rest.length; i++) {\n var source = rest[i];\n for (var key in source) {\n target[key] = source[key];\n }\n }\n return target;\n}\n\nfunction isUndef(v) {\n return v === undefined || v === null;\n}\n\nfunction getDistance(x, y) {\n return Math.sqrt(x * x + y * y);\n}\n\nvar elementStyle = inBrowser && document.createElement('div').style;\n\nvar vendor = function () {\n if (!inBrowser) {\n return false;\n }\n // first pick up standard to fix #743\n var transformNames = {\n standard: 'transform',\n webkit: 'webkitTransform',\n Moz: 'MozTransform',\n O: 'OTransform',\n ms: 'msTransform'\n };\n\n for (var key in transformNames) {\n if (elementStyle[transformNames[key]] !== undefined) {\n return key;\n }\n }\n\n return false;\n}();\n\nfunction prefixStyle(style) {\n if (vendor === false) {\n return false;\n }\n\n if (vendor === 'standard') {\n if (style === 'transitionEnd') {\n return 'transitionend';\n }\n return style;\n }\n\n return vendor + style.charAt(0).toUpperCase() + style.substr(1);\n}\n\nfunction addEvent(el, type, fn, capture) {\n el.addEventListener(type, fn, { passive: false, capture: !!capture });\n}\n\nfunction removeEvent(el, type, fn, capture) {\n el.removeEventListener(type, fn, { passive: false, capture: !!capture });\n}\n\nfunction offset(el) {\n var left = 0;\n var top = 0;\n\n while (el) {\n left -= el.offsetLeft;\n top -= el.offsetTop;\n el = el.offsetParent;\n }\n\n return {\n left: left,\n top: top\n };\n}\n\nfunction offsetToBody(el) {\n var rect = el.getBoundingClientRect();\n\n return {\n left: -(rect.left + window.pageXOffset),\n top: -(rect.top + window.pageYOffset)\n };\n}\n\nvar cssVendor = vendor && vendor !== 'standard' ? '-' + vendor.toLowerCase() + '-' : '';\n\nvar transform = prefixStyle('transform');\nvar transition = prefixStyle('transition');\n\nvar hasPerspective = inBrowser && prefixStyle('perspective') in elementStyle;\n// fix issue #361\nvar hasTouch = inBrowser && ('ontouchstart' in window || isWeChatDevTools);\nvar hasTransform = transform !== false;\nvar hasTransition = inBrowser && transition in elementStyle;\n\nvar style = {\n transform: transform,\n transition: transition,\n transitionTimingFunction: prefixStyle('transitionTimingFunction'),\n transitionDuration: prefixStyle('transitionDuration'),\n transitionDelay: prefixStyle('transitionDelay'),\n transformOrigin: prefixStyle('transformOrigin'),\n transitionEnd: prefixStyle('transitionEnd')\n};\n\nvar TOUCH_EVENT = 1;\nvar MOUSE_EVENT = 2;\n\nvar eventType = {\n touchstart: TOUCH_EVENT,\n touchmove: TOUCH_EVENT,\n touchend: TOUCH_EVENT,\n\n mousedown: MOUSE_EVENT,\n mousemove: MOUSE_EVENT,\n mouseup: MOUSE_EVENT\n};\n\nfunction getRect(el) {\n if (el instanceof window.SVGElement) {\n var rect = el.getBoundingClientRect();\n return {\n top: rect.top,\n left: rect.left,\n width: rect.width,\n height: rect.height\n };\n } else {\n return {\n top: el.offsetTop,\n left: el.offsetLeft,\n width: el.offsetWidth,\n height: el.offsetHeight\n };\n }\n}\n\nfunction preventDefaultException(el, exceptions) {\n for (var i in exceptions) {\n if (exceptions[i].test(el[i])) {\n return true;\n }\n }\n return false;\n}\n\nfunction tap(e, eventName) {\n var ev = document.createEvent('Event');\n ev.initEvent(eventName, true, true);\n ev.pageX = e.pageX;\n ev.pageY = e.pageY;\n e.target.dispatchEvent(ev);\n}\n\nfunction click(e) {\n var event = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'click';\n\n var eventSource = void 0;\n if (e.type === 'mouseup' || e.type === 'mousecancel') {\n eventSource = e;\n } else if (e.type === 'touchend' || e.type === 'touchcancel') {\n eventSource = e.changedTouches[0];\n }\n var posSrc = {};\n if (eventSource) {\n posSrc.screenX = eventSource.screenX || 0;\n posSrc.screenY = eventSource.screenY || 0;\n posSrc.clientX = eventSource.clientX || 0;\n posSrc.clientY = eventSource.clientY || 0;\n }\n var ev = void 0;\n var bubbles = true;\n var cancelable = true;\n if (typeof MouseEvent !== 'undefined') {\n try {\n ev = new MouseEvent(event, extend({\n bubbles: bubbles,\n cancelable: cancelable\n }, posSrc));\n } catch (e) {\n createEvent();\n }\n } else {\n createEvent();\n }\n\n function createEvent() {\n ev = document.createEvent('Event');\n ev.initEvent(event, bubbles, cancelable);\n extend(ev, posSrc);\n }\n\n // forwardedTouchEvent set to true in case of the conflict with fastclick\n ev.forwardedTouchEvent = true;\n ev._constructed = true;\n e.target.dispatchEvent(ev);\n}\n\nfunction dblclick(e) {\n click(e, 'dblclick');\n}\n\nfunction prepend(el, target) {\n if (target.firstChild) {\n before(el, target.firstChild);\n } else {\n target.appendChild(el);\n }\n}\n\nfunction before(el, target) {\n target.parentNode.insertBefore(el, target);\n}\n\nfunction removeChild(el, child) {\n el.removeChild(child);\n}\n\nvar DEFAULT_OPTIONS = {\n startX: 0,\n startY: 0,\n scrollX: false,\n scrollY: true,\n freeScroll: false,\n directionLockThreshold: 5,\n eventPassthrough: '',\n click: false,\n tap: false,\n /**\n * support any side\n * bounce: {\n * top: true,\n * bottom: true,\n * left: true,\n * right: true\n * }\n */\n bounce: true,\n bounceTime: 800,\n momentum: true,\n momentumLimitTime: 300,\n momentumLimitDistance: 15,\n swipeTime: 2500,\n swipeBounceTime: 500,\n deceleration: 0.0015,\n flickLimitTime: 200,\n flickLimitDistance: 100,\n resizePolling: 60,\n probeType: 0,\n preventDefault: true,\n preventDefaultException: {\n tagName: /^(INPUT|TEXTAREA|BUTTON|SELECT|AUDIO)$/\n },\n HWCompositing: true,\n useTransition: true,\n useTransform: true,\n bindToWrapper: false,\n disableMouse: hasTouch,\n disableTouch: !hasTouch,\n observeDOM: true,\n autoBlur: true,\n /**\n * for picker\n * wheel: {\n * selectedIndex: 0,\n * rotate: 25,\n * adjustTime: 400\n * wheelWrapperClass: 'wheel-scroll',\n * wheelItemClass: 'wheel-item'\n * }\n */\n wheel: false,\n /**\n * for slide\n * snap: {\n * loop: false,\n * el: domEl,\n * threshold: 0.1,\n * stepX: 100,\n * stepY: 100,\n * speed: 400,\n * easing: {\n * style: 'cubic-bezier(0.25, 0.46, 0.45, 0.94)',\n * fn: function (t) {\n * return t * (2 - t)\n * }\n * }\n * listenFlick: true\n * }\n */\n snap: false,\n /**\n * for scrollbar\n * scrollbar: {\n * fade: true,\n * interactive: false\n * }\n */\n scrollbar: false,\n /**\n * for pull down and refresh\n * pullDownRefresh: {\n * threshold: 50,\n * stop: 20\n * }\n */\n pullDownRefresh: false,\n /**\n * for pull up and load\n * pullUpLoad: {\n * threshold: 50\n * }\n */\n pullUpLoad: false,\n /**\n * for mouse wheel\n * mouseWheel: {\n * speed: 20,\n * invert: false,\n * easeTime: 300\n * }\n */\n mouseWheel: false,\n stopPropagation: false,\n /**\n * for zoom\n * zoom: {\n * start: 1,\n * min: 1,\n * max: 4\n * }\n */\n zoom: false,\n /**\n * for infinity\n * infinity: {\n * render(item, div) {\n * },\n * createTombstone() {\n * },\n * fetch(count) {\n * }\n * }\n */\n infinity: false,\n /**\n * for double click\n * dblclick: {\n * delay: 300\n * }\n */\n dblclick: false\n};\n\nfunction initMixin(BScroll) {\n BScroll.prototype._init = function (options) {\n this._handleOptions(options);\n\n // init private custom events\n this._events = {};\n\n this.x = 0;\n this.y = 0;\n this.directionX = 0;\n this.directionY = 0;\n\n this.setScale(1);\n\n this._addDOMEvents();\n\n this._initExtFeatures();\n\n this._watchTransition();\n\n if (this.options.observeDOM) {\n this._initDOMObserver();\n }\n\n if (this.options.autoBlur) {\n this._handleAutoBlur();\n }\n\n this.refresh();\n\n if (!this.options.snap) {\n this.scrollTo(this.options.startX, this.options.startY);\n }\n\n this.enable();\n };\n\n BScroll.prototype.setScale = function (scale) {\n this.lastScale = isUndef(this.scale) ? scale : this.scale;\n this.scale = scale;\n };\n\n BScroll.prototype._handleOptions = function (options) {\n this.options = extend({}, DEFAULT_OPTIONS, options);\n\n this.translateZ = this.options.HWCompositing && hasPerspective ? ' translateZ(0)' : '';\n\n this.options.useTransition = this.options.useTransition && hasTransition;\n this.options.useTransform = this.options.useTransform && hasTransform;\n\n this.options.preventDefault = !this.options.eventPassthrough && this.options.preventDefault;\n\n // If you want eventPassthrough I have to lock one of the axes\n this.options.scrollX = this.options.eventPassthrough === 'horizontal' ? false : this.options.scrollX;\n this.options.scrollY = this.options.eventPassthrough === 'vertical' ? false : this.options.scrollY;\n\n // With eventPassthrough we also need lockDirection mechanism\n this.options.freeScroll = this.options.freeScroll && !this.options.eventPassthrough;\n this.options.directionLockThreshold = this.options.eventPassthrough ? 0 : this.options.directionLockThreshold;\n\n if (this.options.tap === true) {\n this.options.tap = 'tap';\n }\n };\n\n BScroll.prototype._addDOMEvents = function () {\n var eventOperation = addEvent;\n this._handleDOMEvents(eventOperation);\n };\n\n BScroll.prototype._removeDOMEvents = function () {\n var eventOperation = removeEvent;\n this._handleDOMEvents(eventOperation);\n };\n\n BScroll.prototype._handleDOMEvents = function (eventOperation) {\n var target = this.options.bindToWrapper ? this.wrapper : window;\n eventOperation(window, 'orientationchange', this);\n eventOperation(window, 'resize', this);\n\n if (this.options.click) {\n eventOperation(this.wrapper, 'click', this, true);\n }\n\n if (!this.options.disableMouse) {\n eventOperation(this.wrapper, 'mousedown', this);\n eventOperation(target, 'mousemove', this);\n eventOperation(target, 'mousecancel', this);\n eventOperation(target, 'mouseup', this);\n }\n\n if (hasTouch && !this.options.disableTouch) {\n eventOperation(this.wrapper, 'touchstart', this);\n eventOperation(target, 'touchmove', this);\n eventOperation(target, 'touchcancel', this);\n eventOperation(target, 'touchend', this);\n }\n\n eventOperation(this.scroller, style.transitionEnd, this);\n };\n\n BScroll.prototype._initExtFeatures = function () {\n if (this.options.snap) {\n this._initSnap();\n }\n if (this.options.scrollbar) {\n this._initScrollbar();\n }\n if (this.options.pullUpLoad) {\n this._initPullUp();\n }\n if (this.options.pullDownRefresh) {\n this._initPullDown();\n }\n if (this.options.wheel) {\n this._initWheel();\n }\n if (this.options.mouseWheel) {\n this._initMouseWheel();\n }\n if (this.options.zoom) {\n this._initZoom();\n }\n if (this.options.infinity) {\n this._initInfinite();\n }\n };\n\n BScroll.prototype._watchTransition = function () {\n if (typeof Object.defineProperty !== 'function') {\n return;\n }\n var me = this;\n var isInTransition = false;\n var key = this.options.useTransition ? 'isInTransition' : 'isAnimating';\n Object.defineProperty(this, key, {\n get: function get() {\n return isInTransition;\n },\n set: function set(newVal) {\n isInTransition = newVal;\n // fix issue #359\n var el = me.scroller.children.length ? me.scroller.children : [me.scroller];\n var pointerEvents = isInTransition && !me.pulling ? 'none' : 'auto';\n for (var i = 0; i < el.length; i++) {\n el[i].style.pointerEvents = pointerEvents;\n }\n }\n });\n };\n\n BScroll.prototype._handleAutoBlur = function () {\n this.on('scrollStart', function () {\n var activeElement = document.activeElement;\n if (activeElement && (activeElement.tagName === 'INPUT' || activeElement.tagName === 'TEXTAREA')) {\n activeElement.blur();\n }\n });\n };\n\n BScroll.prototype._initDOMObserver = function () {\n var _this = this;\n\n if (typeof MutationObserver !== 'undefined') {\n var timer = void 0;\n var observer = new MutationObserver(function (mutations) {\n // don't do any refresh during the transition, or outside of the boundaries\n if (_this._shouldNotRefresh()) {\n return;\n }\n var immediateRefresh = false;\n var deferredRefresh = false;\n for (var i = 0; i < mutations.length; i++) {\n var mutation = mutations[i];\n if (mutation.type !== 'attributes') {\n immediateRefresh = true;\n break;\n } else {\n if (mutation.target !== _this.scroller) {\n deferredRefresh = true;\n break;\n }\n }\n }\n if (immediateRefresh) {\n _this.refresh();\n } else if (deferredRefresh) {\n // attributes changes too often\n clearTimeout(timer);\n timer = setTimeout(function () {\n if (!_this._shouldNotRefresh()) {\n _this.refresh();\n }\n }, 60);\n }\n });\n var config = {\n attributes: true,\n childList: true,\n subtree: true\n };\n observer.observe(this.scroller, config);\n\n this.on('destroy', function () {\n observer.disconnect();\n });\n } else {\n this._checkDOMUpdate();\n }\n };\n\n BScroll.prototype._shouldNotRefresh = function () {\n var outsideBoundaries = this.x > this.minScrollX || this.x < this.maxScrollX || this.y > this.minScrollY || this.y < this.maxScrollY;\n\n return this.isInTransition || this.stopFromTransition || outsideBoundaries;\n };\n\n BScroll.prototype._checkDOMUpdate = function () {\n var scrollerRect = getRect(this.scroller);\n var oldWidth = scrollerRect.width;\n var oldHeight = scrollerRect.height;\n\n function check() {\n if (this.destroyed) {\n return;\n }\n scrollerRect = getRect(this.scroller);\n var newWidth = scrollerRect.width;\n var newHeight = scrollerRect.height;\n\n if (oldWidth !== newWidth || oldHeight !== newHeight) {\n this.refresh();\n }\n oldWidth = newWidth;\n oldHeight = newHeight;\n\n next.call(this);\n }\n\n function next() {\n var _this2 = this;\n\n setTimeout(function () {\n check.call(_this2);\n }, 1000);\n }\n\n next.call(this);\n };\n\n BScroll.prototype.handleEvent = function (e) {\n switch (e.type) {\n case 'touchstart':\n case 'mousedown':\n this._start(e);\n if (this.options.zoom && e.touches && e.touches.length > 1) {\n this._zoomStart(e);\n }\n break;\n case 'touchmove':\n case 'mousemove':\n if (this.options.zoom && e.touches && e.touches.length > 1) {\n this._zoom(e);\n } else {\n this._move(e);\n }\n break;\n case 'touchend':\n case 'mouseup':\n case 'touchcancel':\n case 'mousecancel':\n if (this.scaled) {\n this._zoomEnd(e);\n } else {\n this._end(e);\n }\n break;\n case 'orientationchange':\n case 'resize':\n this._resize();\n break;\n case 'transitionend':\n case 'webkitTransitionEnd':\n case 'oTransitionEnd':\n case 'MSTransitionEnd':\n this._transitionEnd(e);\n break;\n case 'click':\n if (this.enabled && !e._constructed) {\n if (!preventDefaultException(e.target, this.options.preventDefaultException)) {\n e.preventDefault();\n e.stopPropagation();\n }\n }\n break;\n case 'wheel':\n case 'DOMMouseScroll':\n case 'mousewheel':\n this._onMouseWheel(e);\n break;\n }\n };\n\n BScroll.prototype.refresh = function () {\n var isWrapperStatic = window.getComputedStyle(this.wrapper, null).position === 'static';\n var wrapperRect = getRect(this.wrapper);\n this.wrapperWidth = wrapperRect.width;\n this.wrapperHeight = wrapperRect.height;\n\n var scrollerRect = getRect(this.scroller);\n this.scrollerWidth = Math.round(scrollerRect.width * this.scale);\n this.scrollerHeight = Math.round(scrollerRect.height * this.scale);\n\n this.relativeX = scrollerRect.left;\n this.relativeY = scrollerRect.top;\n\n if (isWrapperStatic) {\n this.relativeX -= wrapperRect.left;\n this.relativeY -= wrapperRect.top;\n }\n\n this.minScrollX = 0;\n this.minScrollY = 0;\n\n var wheel = this.options.wheel;\n if (wheel) {\n this.items = this.scroller.children;\n // check whether there are all disable items or not when refresh\n this._checkWheelAllDisabled();\n this.options.itemHeight = this.itemHeight = this.items.length ? this.scrollerHeight / this.items.length : 0;\n if (this.selectedIndex === undefined) {\n this.selectedIndex = wheel.selectedIndex || 0;\n }\n this.options.startY = -this.selectedIndex * this.itemHeight;\n\n this.maxScrollX = 0;\n this.maxScrollY = -this.itemHeight * (this.items.length - 1);\n } else {\n this.maxScrollX = this.wrapperWidth - this.scrollerWidth;\n if (!this.options.infinity) {\n this.maxScrollY = this.wrapperHeight - this.scrollerHeight;\n }\n if (this.maxScrollX < 0) {\n this.maxScrollX -= this.relativeX;\n this.minScrollX = -this.relativeX;\n } else if (this.scale > 1) {\n this.maxScrollX = this.maxScrollX / 2 - this.relativeX;\n this.minScrollX = this.maxScrollX;\n }\n if (this.maxScrollY < 0) {\n this.maxScrollY -= this.relativeY;\n this.minScrollY = -this.relativeY;\n } else if (this.scale > 1) {\n this.maxScrollY = this.maxScrollY / 2 - this.relativeY;\n this.minScrollY = this.maxScrollY;\n }\n }\n\n this.hasHorizontalScroll = this.options.scrollX && this.maxScrollX < this.minScrollX;\n this.hasVerticalScroll = this.options.scrollY && this.maxScrollY < this.minScrollY;\n\n if (!this.hasHorizontalScroll) {\n this.maxScrollX = this.minScrollX;\n this.scrollerWidth = this.wrapperWidth;\n }\n\n if (!this.hasVerticalScroll) {\n this.maxScrollY = this.minScrollY;\n this.scrollerHeight = this.wrapperHeight;\n }\n\n this.endTime = 0;\n this.directionX = 0;\n this.directionY = 0;\n this.wrapperOffset = offset(this.wrapper);\n\n this.trigger('refresh');\n\n !this.scaled && this.resetPosition();\n };\n\n BScroll.prototype.enable = function () {\n this.enabled = true;\n };\n\n BScroll.prototype.disable = function () {\n this.enabled = false;\n };\n}\n\nvar ease = {\n // easeOutQuint\n swipe: {\n style: 'cubic-bezier(0.23, 1, 0.32, 1)',\n fn: function fn(t) {\n return 1 + --t * t * t * t * t;\n }\n },\n // easeOutQuard\n swipeBounce: {\n style: 'cubic-bezier(0.25, 0.46, 0.45, 0.94)',\n fn: function fn(t) {\n return t * (2 - t);\n }\n },\n // easeOutQuart\n bounce: {\n style: 'cubic-bezier(0.165, 0.84, 0.44, 1)',\n fn: function fn(t) {\n return 1 - --t * t * t * t;\n }\n }\n};\n\nfunction momentum(current, start, time, lowerMargin, upperMargin, wrapperSize, options, scroll) {\n var distance = current - start;\n var speed = Math.abs(distance) / time;\n\n var deceleration = options.deceleration,\n itemHeight = options.itemHeight,\n swipeBounceTime = options.swipeBounceTime,\n wheel = options.wheel,\n swipeTime = options.swipeTime;\n\n var duration = swipeTime;\n var rate = wheel ? 4 : 15;\n\n var destination = current + speed / deceleration * (distance < 0 ? -1 : 1);\n\n if (wheel && itemHeight) {\n destination = scroll._findNearestValidWheel(destination).y;\n }\n\n if (destination < lowerMargin) {\n destination = wrapperSize ? Math.max(lowerMargin - wrapperSize / 4, lowerMargin - wrapperSize / rate * speed) : lowerMargin;\n duration = swipeBounceTime;\n } else if (destination > upperMargin) {\n destination = wrapperSize ? Math.min(upperMargin + wrapperSize / 4, upperMargin + wrapperSize / rate * speed) : upperMargin;\n duration = swipeBounceTime;\n }\n\n return {\n destination: Math.round(destination),\n duration: duration\n };\n}\n\nvar DEFAULT_INTERVAL = 100 / 60;\n\nfunction noop() {}\n\nvar requestAnimationFrame = function () {\n if (!inBrowser) {\n /* istanbul ignore if */\n return noop;\n }\n return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame ||\n // if all else fails, use setTimeout\n function (callback) {\n return window.setTimeout(callback, (callback.interval || DEFAULT_INTERVAL) / 2); // make interval as precise as possible.\n };\n}();\n\nvar cancelAnimationFrame = function () {\n if (!inBrowser) {\n /* istanbul ignore if */\n return noop;\n }\n return window.cancelAnimationFrame || window.webkitCancelAnimationFrame || window.mozCancelAnimationFrame || window.oCancelAnimationFrame || function (id) {\n window.clearTimeout(id);\n };\n}();\n\nvar DIRECTION_UP = 1;\nvar DIRECTION_DOWN = -1;\nvar DIRECTION_LEFT = 1;\nvar DIRECTION_RIGHT = -1;\n\nvar PROBE_DEBOUNCE = 1;\n\nvar PROBE_REALTIME = 3;\n\nfunction warn(msg) {\n console.error('[BScroll warn]: ' + msg);\n}\n\nfunction assert(condition, msg) {\n if (!condition) {\n throw new Error('[BScroll] ' + msg);\n }\n}\n\nfunction coreMixin(BScroll) {\n BScroll.prototype._start = function (e) {\n var _eventType = eventType[e.type];\n if (_eventType !== TOUCH_EVENT) {\n if (e.button !== 0) {\n return;\n }\n }\n if (!this.enabled || this.destroyed || this.initiated && this.initiated !== _eventType) {\n return;\n }\n this.initiated = _eventType;\n\n if (this.options.preventDefault && !preventDefaultException(e.target, this.options.preventDefaultException)) {\n e.preventDefault();\n }\n if (this.options.stopPropagation) {\n e.stopPropagation();\n }\n\n this.moved = false;\n this.distX = 0;\n this.distY = 0;\n this.directionX = 0;\n this.directionY = 0;\n this.movingDirectionX = 0;\n this.movingDirectionY = 0;\n this.directionLocked = 0;\n\n this._transitionTime();\n this.startTime = getNow();\n\n if (this.options.wheel) {\n this.target = e.target;\n }\n\n this.stop();\n\n var point = e.touches ? e.touches[0] : e;\n\n this.startX = this.x;\n this.startY = this.y;\n this.absStartX = this.x;\n this.absStartY = this.y;\n this.pointX = point.pageX;\n this.pointY = point.pageY;\n\n this.trigger('beforeScrollStart');\n };\n\n BScroll.prototype._move = function (e) {\n if (!this.enabled || this.destroyed || eventType[e.type] !== this.initiated) {\n return;\n }\n\n if (this.options.preventDefault) {\n e.preventDefault();\n }\n if (this.options.stopPropagation) {\n e.stopPropagation();\n }\n\n var point = e.touches ? e.touches[0] : e;\n var deltaX = point.pageX - this.pointX;\n var deltaY = point.pageY - this.pointY;\n\n this.pointX = point.pageX;\n this.pointY = point.pageY;\n\n this.distX += deltaX;\n this.distY += deltaY;\n\n var absDistX = Math.abs(this.distX);\n var absDistY = Math.abs(this.distY);\n\n var timestamp = getNow();\n\n // We need to move at least momentumLimitDistance pixels for the scrolling to initiate\n if (timestamp - this.endTime > this.options.momentumLimitTime && !this.moved && absDistY < this.options.momentumLimitDistance && absDistX < this.options.momentumLimitDistance) {\n return;\n }\n\n // If you are scrolling in one direction lock the other\n if (!this.directionLocked && !this.options.freeScroll) {\n if (absDistX > absDistY + this.options.directionLockThreshold) {\n this.directionLocked = 'h'; // lock horizontally\n } else if (absDistY >= absDistX + this.options.directionLockThreshold) {\n this.directionLocked = 'v'; // lock vertically\n } else {\n this.directionLocked = 'n'; // no lock\n }\n }\n\n if (this.directionLocked === 'h') {\n if (this.options.eventPassthrough === 'vertical') {\n e.preventDefault();\n } else if (this.options.eventPassthrough === 'horizontal') {\n this.initiated = false;\n return;\n }\n deltaY = 0;\n } else if (this.directionLocked === 'v') {\n if (this.options.eventPassthrough === 'horizontal') {\n e.preventDefault();\n } else if (this.options.eventPassthrough === 'vertical') {\n this.initiated = false;\n return;\n }\n deltaX = 0;\n }\n\n deltaX = this.hasHorizontalScroll ? deltaX : 0;\n deltaY = this.hasVerticalScroll ? deltaY : 0;\n this.movingDirectionX = deltaX > 0 ? DIRECTION_RIGHT : deltaX < 0 ? DIRECTION_LEFT : 0;\n this.movingDirectionY = deltaY > 0 ? DIRECTION_DOWN : deltaY < 0 ? DIRECTION_UP : 0;\n\n var newX = this.x + deltaX;\n var newY = this.y + deltaY;\n\n var top = false;\n var bottom = false;\n var left = false;\n var right = false;\n // Slow down or stop if outside of the boundaries\n var bounce = this.options.bounce;\n if (bounce !== false) {\n top = bounce.top === undefined ? true : bounce.top;\n bottom = bounce.bottom === undefined ? true : bounce.bottom;\n left = bounce.left === undefined ? true : bounce.left;\n right = bounce.right === undefined ? true : bounce.right;\n }\n if (newX > this.minScrollX || newX < this.maxScrollX) {\n if (newX > this.minScrollX && left || newX < this.maxScrollX && right) {\n newX = this.x + deltaX / 3;\n } else {\n newX = newX > this.minScrollX ? this.minScrollX : this.maxScrollX;\n }\n }\n if (newY > this.minScrollY || newY < this.maxScrollY) {\n if (newY > this.minScrollY && top || newY < this.maxScrollY && bottom) {\n newY = this.y + deltaY / 3;\n } else {\n newY = newY > this.minScrollY ? this.minScrollY : this.maxScrollY;\n }\n }\n\n if (!this.moved) {\n this.moved = true;\n this.trigger('scrollStart');\n }\n\n this._translate(newX, newY);\n\n if (timestamp - this.startTime > this.options.momentumLimitTime) {\n this.startTime = timestamp;\n this.startX = this.x;\n this.startY = this.y;\n\n if (this.options.probeType === PROBE_DEBOUNCE) {\n this.trigger('scroll', {\n x: this.x,\n y: this.y\n });\n }\n }\n\n if (this.options.probeType > PROBE_DEBOUNCE) {\n this.trigger('scroll', {\n x: this.x,\n y: this.y\n });\n }\n\n var scrollLeft = document.documentElement.scrollLeft || window.pageXOffset || document.body.scrollLeft;\n var scrollTop = document.documentElement.scrollTop || window.pageYOffset || document.body.scrollTop;\n\n var pX = this.pointX - scrollLeft;\n var pY = this.pointY - scrollTop;\n\n if (pX > document.documentElement.clientWidth - this.options.momentumLimitDistance || pX < this.options.momentumLimitDistance || pY < this.options.momentumLimitDistance || pY > document.documentElement.clientHeight - this.options.momentumLimitDistance) {\n this._end(e);\n }\n };\n\n BScroll.prototype._end = function (e) {\n if (!this.enabled || this.destroyed || eventType[e.type] !== this.initiated) {\n return;\n }\n this.initiated = false;\n\n if (this.options.preventDefault && !preventDefaultException(e.target, this.options.preventDefaultException)) {\n e.preventDefault();\n }\n if (this.options.stopPropagation) {\n e.stopPropagation();\n }\n\n this.trigger('touchEnd', {\n x: this.x,\n y: this.y\n });\n\n this.isInTransition = false;\n\n // ensures that the last position is rounded\n var newX = Math.round(this.x);\n var newY = Math.round(this.y);\n\n var deltaX = newX - this.absStartX;\n var deltaY = newY - this.absStartY;\n this.directionX = deltaX > 0 ? DIRECTION_RIGHT : deltaX < 0 ? DIRECTION_LEFT : 0;\n this.directionY = deltaY > 0 ? DIRECTION_DOWN : deltaY < 0 ? DIRECTION_UP : 0;\n\n // if configure pull down refresh, check it first\n if (this.options.pullDownRefresh && this._checkPullDown()) {\n return;\n }\n\n // check if it is a click operation\n if (this._checkClick(e)) {\n this.trigger('scrollCancel');\n return;\n }\n\n // reset if we are outside of the boundaries\n if (this.resetPosition(this.options.bounceTime, ease.bounce)) {\n return;\n }\n\n this._translate(newX, newY);\n\n this.endTime = getNow();\n var duration = this.endTime - this.startTime;\n var absDistX = Math.abs(newX - this.startX);\n var absDistY = Math.abs(newY - this.startY);\n\n // flick\n if (this._events.flick && duration < this.options.flickLimitTime && absDistX < this.options.flickLimitDistance && absDistY < this.options.flickLimitDistance) {\n this.trigger('flick');\n return;\n }\n\n var time = 0;\n // start momentum animation if needed\n if (this.options.momentum && duration < this.options.momentumLimitTime && (absDistY > this.options.momentumLimitDistance || absDistX > this.options.momentumLimitDistance)) {\n var top = false;\n var bottom = false;\n var left = false;\n var right = false;\n var bounce = this.options.bounce;\n if (bounce !== false) {\n top = bounce.top === undefined ? true : bounce.top;\n bottom = bounce.bottom === undefined ? true : bounce.bottom;\n left = bounce.left === undefined ? true : bounce.left;\n right = bounce.right === undefined ? true : bounce.right;\n }\n var wrapperWidth = this.directionX === DIRECTION_RIGHT && left || this.directionX === DIRECTION_LEFT && right ? this.wrapperWidth : 0;\n var wrapperHeight = this.directionY === DIRECTION_DOWN && top || this.directionY === DIRECTION_UP && bottom ? this.wrapperHeight : 0;\n var momentumX = this.hasHorizontalScroll ? momentum(this.x, this.startX, duration, this.maxScrollX, this.minScrollX, wrapperWidth, this.options, this) : { destination: newX, duration: 0 };\n var momentumY = this.hasVerticalScroll ? momentum(this.y, this.startY, duration, this.maxScrollY, this.minScrollY, wrapperHeight, this.options, this) : { destination: newY, duration: 0 };\n newX = momentumX.destination;\n newY = momentumY.destination;\n time = Math.max(momentumX.duration, momentumY.duration);\n this.isInTransition = true;\n } else {\n if (this.options.wheel) {\n newY = this._findNearestValidWheel(newY).y;\n time = this.options.wheel.adjustTime || 400;\n }\n }\n\n var easing = ease.swipe;\n if (this.options.snap) {\n var snap = this._nearestSnap(newX, newY);\n this.currentPage = snap;\n time = this.options.snapSpeed || Math.max(Math.max(Math.min(Math.abs(newX - snap.x), 1000), Math.min(Math.abs(newY - snap.y), 1000)), 300);\n newX = snap.x;\n newY = snap.y;\n\n this.directionX = 0;\n this.directionY = 0;\n easing = this.options.snap.easing || ease.bounce;\n }\n\n if (newX !== this.x || newY !== this.y) {\n // change easing function when scroller goes out of the boundaries\n if (newX > this.minScrollX || newX < this.maxScrollX || newY > this.minScrollY || newY < this.maxScrollY) {\n easing = ease.swipeBounce;\n }\n this.scrollTo(newX, newY, time, easing);\n return;\n }\n\n if (this.options.wheel) {\n this.selectedIndex = this._findNearestValidWheel(this.y).index;\n }\n\n this.trigger('scrollEnd', {\n x: this.x,\n y: this.y\n });\n };\n\n BScroll.prototype._checkClick = function (e) {\n // when in the process of pulling down, it should not prevent click\n var preventClick = this.stopFromTransition && !this.pulling;\n this.stopFromTransition = false;\n\n // we scrolled less than 15 pixels\n if (!this.moved) {\n if (this.options.wheel) {\n if (this.target && this.target.className === this.options.wheel.wheelWrapperClass) {\n var index = this._findNearestValidWheel(this.y).index;\n var _offset = Math.round((this.pointY + offsetToBody(this.wrapper).top - this.wrapperHeight / 2) / this.itemHeight);\n this.target = this.items[index + _offset];\n }\n var top = offset(this.target).top;\n var left = offset(this.target).left;\n top -= this.wrapperOffset.top;\n top -= Math.round(this.target.offsetHeight / 2 - this.wrapper.offsetHeight / 2) || 0;\n left -= this.wrapperOffset.left;\n left -= Math.round(this.target.offsetWidth / 2 - this.wrapper.offsetWidth / 2) || 0;\n\n top = this._findNearestValidWheel(top).y;\n this.scrollTo(left, top, this.options.wheel.adjustTime || 400, ease.swipe);\n return true;\n } else {\n if (!preventClick) {\n var _dblclick = this.options.dblclick;\n var dblclickTrigged = false;\n if (_dblclick && this.lastClickTime) {\n var _dblclick$delay = _dblclick.delay,\n delay = _dblclick$delay === undefined ? 300 : _dblclick$delay;\n\n if (getNow() - this.lastClickTime < delay) {\n dblclickTrigged = true;\n dblclick(e);\n }\n }\n if (this.options.tap) {\n tap(e, this.options.tap);\n }\n\n if (this.options.click && !preventDefaultException(e.target, this.options.preventDefaultException)) {\n click(e);\n }\n this.lastClickTime = dblclickTrigged ? null : getNow();\n return true;\n }\n return false;\n }\n }\n return false;\n };\n\n BScroll.prototype._resize = function () {\n var _this = this;\n\n if (!this.enabled) {\n return;\n }\n // fix a scroll problem under Android condition\n if (isAndroid) {\n this.wrapper.scrollTop = 0;\n }\n clearTimeout(this.resizeTimeout);\n this.resizeTimeout = setTimeout(function () {\n _this.refresh();\n }, this.options.resizePolling);\n };\n\n BScroll.prototype._startProbe = function () {\n cancelAnimationFrame(this.probeTimer);\n this.probeTimer = requestAnimationFrame(probe);\n\n var me = this;\n\n function probe() {\n var pos = me.getComputedPosition();\n me.trigger('scroll', pos);\n if (!me.isInTransition) {\n me.trigger('scrollEnd', pos);\n return;\n }\n me.probeTimer = requestAnimationFrame(probe);\n }\n };\n\n BScroll.prototype._transitionTime = function () {\n var time = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n\n this.scrollerStyle[style.transitionDuration] = time + 'ms';\n\n if (this.options.wheel) {\n for (var i = 0; i < this.items.length; i++) {\n this.items[i].style[style.transitionDuration] = time + 'ms';\n }\n }\n\n if (this.indicators) {\n for (var _i = 0; _i < this.indicators.length; _i++) {\n this.indicators[_i].transitionTime(time);\n }\n }\n };\n\n BScroll.prototype._transitionTimingFunction = function (easing) {\n this.scrollerStyle[style.transitionTimingFunction] = easing;\n\n if (this.options.wheel) {\n for (var i = 0; i < this.items.length; i++) {\n this.items[i].style[style.transitionTimingFunction] = easing;\n }\n }\n\n if (this.indicators) {\n for (var _i2 = 0; _i2 < this.indicators.length; _i2++) {\n this.indicators[_i2].transitionTimingFunction(easing);\n }\n }\n };\n\n BScroll.prototype._transitionEnd = function (e) {\n if (e.target !== this.scroller || !this.isInTransition) {\n return;\n }\n\n this._transitionTime();\n var needReset = !this.pulling || this.movingDirectionY === DIRECTION_UP;\n if (needReset && !this.resetPosition(this.options.bounceTime, ease.bounce)) {\n this.isInTransition = false;\n if (this.options.probeType !== PROBE_REALTIME) {\n this.trigger('scrollEnd', {\n x: this.x,\n y: this.y\n });\n }\n }\n };\n\n BScroll.prototype._translate = function (x, y, scale) {\n assert(!isUndef(x) && !isUndef(y), 'Translate x or y is null or undefined.');\n if (isUndef(scale)) {\n scale = this.scale;\n }\n if (this.options.useTransform) {\n this.scrollerStyle[style.transform] = 'translate(' + x + 'px,' + y + 'px) scale(' + scale + ')' + this.translateZ;\n } else {\n x = Math.round(x);\n y = Math.round(y);\n this.scrollerStyle.left = x + 'px';\n this.scrollerStyle.top = y + 'px';\n }\n\n if (this.options.wheel) {\n var _options$wheel$rotate = this.options.wheel.rotate,\n rotate = _options$wheel$rotate === undefined ? 25 : _options$wheel$rotate;\n\n for (var i = 0; i < this.items.length; i++) {\n var deg = rotate * (y / this.itemHeight + i);\n this.items[i].style[style.transform] = 'rotateX(' + deg + 'deg)';\n }\n }\n\n this.x = x;\n this.y = y;\n this.setScale(scale);\n\n if (this.indicators) {\n for (var _i3 = 0; _i3 < this.indicators.length; _i3++) {\n this.indicators[_i3].updatePosition();\n }\n }\n };\n\n BScroll.prototype._animate = function (destX, destY, duration, easingFn) {\n var me = this;\n var startX = this.x;\n var startY = this.y;\n var startScale = this.lastScale;\n var destScale = this.scale;\n var startTime = getNow();\n var destTime = startTime + duration;\n\n function step() {\n var now = getNow();\n\n if (now >= destTime) {\n me.isAnimating = false;\n me._translate(destX, destY, destScale);\n\n me.trigger('scroll', {\n x: me.x,\n y: me.y\n });\n\n if (!me.pulling && !me.resetPosition(me.options.bounceTime)) {\n me.trigger('scrollEnd', {\n x: me.x,\n y: me.y\n });\n }\n return;\n }\n now = (now - startTime) / duration;\n var easing = easingFn(now);\n var newX = (destX - startX) * easing + startX;\n var newY = (destY - startY) * easing + startY;\n var newScale = (destScale - startScale) * easing + startScale;\n\n me._translate(newX, newY, newScale);\n\n if (me.isAnimating) {\n me.animateTimer = requestAnimationFrame(step);\n }\n\n if (me.options.probeType === PROBE_REALTIME) {\n me.trigger('scroll', {\n x: me.x,\n y: me.y\n });\n }\n }\n\n this.isAnimating = true;\n cancelAnimationFrame(this.animateTimer);\n step();\n };\n\n BScroll.prototype.scrollBy = function (x, y) {\n var time = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n var easing = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : ease.bounce;\n\n x = this.x + x;\n y = this.y + y;\n\n this.scrollTo(x, y, time, easing);\n };\n\n BScroll.prototype.scrollTo = function (x, y) {\n var time = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n var easing = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : ease.bounce;\n var isSilent = arguments[4];\n\n if (this.options.wheel) {\n y = this._findNearestValidWheel(y).y;\n }\n if (x === this.x && y === this.y) {\n return;\n }\n this.isInTransition = this.options.useTransition && time > 0 && (this.x !== x || this.y !== y);\n\n if (!time || this.options.useTransition) {\n this._transitionTimingFunction(easing.style);\n this._transitionTime(time);\n this._translate(x, y);\n\n if (time && this.options.probeType === PROBE_REALTIME) {\n this._startProbe();\n }\n if (!time && !isSilent) {\n // don't trigger resetPosition when zoom feature is open, fix #748\n if (this.options.zoom) return;\n this.trigger('scroll', {\n x: x,\n y: y\n });\n // force reflow to put everything in position\n this._reflow = document.body.offsetHeight;\n if (!this.resetPosition(this.options.bounceTime, ease.bounce)) {\n this.trigger('scrollEnd', {\n x: x,\n y: y\n });\n }\n }\n\n if (this.options.wheel) {\n this.selectedIndex = this._findNearestValidWheel(y).index;\n }\n } else {\n this._animate(x, y, time, easing.fn);\n }\n };\n\n BScroll.prototype.scrollToElement = function (el, time, offsetX, offsetY, easing) {\n if (!el) {\n return;\n }\n el = el.nodeType ? el : this.scroller.querySelector(el);\n\n if (this.options.wheel && !el.classList.contains(this.options.wheel.wheelItemClass)) {\n return;\n }\n\n var pos = offset(el);\n pos.left -= this.wrapperOffset.left;\n pos.top -= this.wrapperOffset.top;\n\n // if offsetX/Y are true we center the element to the screen\n if (offsetX === true) {\n offsetX = Math.round(el.offsetWidth / 2 - this.wrapper.offsetWidth / 2);\n }\n if (offsetY === true) {\n offsetY = Math.round(el.offsetHeight / 2 - this.wrapper.offsetHeight / 2);\n }\n\n pos.left -= offsetX || 0;\n pos.top -= offsetY || 0;\n pos.left = pos.left > this.minScrollX ? this.minScrollX : pos.left < this.maxScrollX ? this.maxScrollX : pos.left;\n pos.top = pos.top > this.minScrollY ? this.minScrollY : pos.top < this.maxScrollY ? this.maxScrollY : pos.top;\n\n if (this.options.wheel) {\n pos.top = this._findNearestValidWheel(pos.top).y;\n }\n\n this.scrollTo(pos.left, pos.top, time, easing);\n };\n\n BScroll.prototype.resetPosition = function () {\n var time = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n var easeing = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ease.bounce;\n\n var x = this.x;\n var roundX = Math.round(x);\n if (!this.hasHorizontalScroll || roundX > this.minScrollX) {\n x = this.minScrollX;\n } else if (roundX < this.maxScrollX) {\n x = this.maxScrollX;\n }\n\n var y = this.y;\n var roundY = Math.round(y);\n if (!this.hasVerticalScroll || roundY > this.minScrollY) {\n y = this.minScrollY;\n } else if (roundY < this.maxScrollY) {\n y = this.maxScrollY;\n }\n\n if (x === this.x && y === this.y) {\n return false;\n }\n\n this.scrollTo(x, y, time, easeing);\n\n return true;\n };\n\n BScroll.prototype.getComputedPosition = function () {\n var matrix = window.getComputedStyle(this.scroller, null);\n var x = void 0;\n var y = void 0;\n\n if (this.options.useTransform) {\n matrix = matrix[style.transform].split(')')[0].split(', ');\n x = +(matrix[12] || matrix[4]);\n y = +(matrix[13] || matrix[5]);\n } else {\n x = +matrix.left.replace(/[^-\\d.]/g, '');\n y = +matrix.top.replace(/[^-\\d.]/g, '');\n }\n\n return {\n x: x,\n y: y\n };\n };\n\n BScroll.prototype.stop = function () {\n if (this.options.useTransition && this.isInTransition) {\n this.isInTransition = false;\n cancelAnimationFrame(this.probeTimer);\n var pos = this.getComputedPosition();\n this._translate(pos.x, pos.y);\n if (this.options.wheel) {\n this.target = this.items[this._findNearestValidWheel(pos.y).index];\n } else {\n this.trigger('scrollEnd', {\n x: this.x,\n y: this.y\n });\n }\n this.stopFromTransition = true;\n } else if (!this.options.useTransition && this.isAnimating) {\n this.isAnimating = false;\n cancelAnimationFrame(this.animateTimer);\n this.trigger('scrollEnd', {\n x: this.x,\n y: this.y\n });\n this.stopFromTransition = true;\n }\n };\n\n BScroll.prototype.destroy = function () {\n this.destroyed = true;\n this.trigger('destroy');\n if (this.options.useTransition) {\n cancelAnimationFrame(this.probeTimer);\n } else {\n cancelAnimationFrame(this.animateTimer);\n }\n this._removeDOMEvents();\n // remove custom events\n this._events = {};\n };\n}\n\nfunction snapMixin(BScroll) {\n BScroll.prototype._initSnap = function () {\n var _this = this;\n\n this.currentPage = {};\n var snap = this.options.snap;\n\n if (snap.loop) {\n var children = this.scroller.children;\n if (children.length > 1) {\n prepend(children[children.length - 1].cloneNode(true), this.scroller);\n this.scroller.appendChild(children[1].cloneNode(true));\n } else {\n // Loop does not make any sense if there is only one child.\n snap.loop = false;\n }\n }\n\n var el = snap.el;\n if (typeof el === 'string') {\n el = this.scroller.querySelectorAll(el);\n }\n\n this.on('refresh', function () {\n _this.pages = [];\n\n if (!_this.wrapperWidth || !_this.wrapperHeight || !_this.scrollerWidth || !_this.scrollerHeight) {\n return;\n }\n\n var stepX = snap.stepX || _this.wrapperWidth;\n var stepY = snap.stepY || _this.wrapperHeight;\n\n var x = 0;\n var y = void 0;\n var cx = void 0;\n var cy = void 0;\n var i = 0;\n var l = void 0;\n var m = 0;\n var n = void 0;\n var rect = void 0;\n if (!el) {\n cx = Math.round(stepX / 2);\n cy = Math.round(stepY / 2);\n\n while (x > -_this.scrollerWidth) {\n _this.pages[i] = [];\n l = 0;\n y = 0;\n\n while (y > -_this.scrollerHeight) {\n _this.pages[i][l] = {\n x: Math.max(x, _this.maxScrollX),\n y: Math.max(y, _this.maxScrollY),\n width: stepX,\n height: stepY,\n cx: x - cx,\n cy: y - cy\n };\n\n y -= stepY;\n l++;\n }\n\n x -= stepX;\n i++;\n }\n } else {\n l = el.length;\n n = -1;\n\n for (; i < l; i++) {\n rect = getRect(el[i]);\n if (i === 0 || rect.left <= getRect(el[i - 1]).left) {\n m = 0;\n n++;\n }\n\n if (!_this.pages[m]) {\n _this.pages[m] = [];\n }\n\n x = Math.max(-rect.left, _this.maxScrollX);\n y = Math.max(-rect.top, _this.maxScrollY);\n cx = x - Math.round(rect.width / 2);\n cy = y - Math.round(rect.height / 2);\n\n _this.pages[m][n] = {\n x: x,\n y: y,\n width: rect.width,\n height: rect.height,\n cx: cx,\n cy: cy\n };\n\n if (x > _this.maxScrollX) {\n m++;\n }\n }\n }\n\n _this._checkSnapLoop();\n\n var initPageX = snap._loopX ? 1 : 0;\n var initPageY = snap._loopY ? 1 : 0;\n _this._goToPage(_this.currentPage.pageX || initPageX, _this.currentPage.pageY || initPageY, 0, undefined, true);\n\n // Update snap threshold if needed.\n var snapThreshold = snap.threshold;\n if (snapThreshold % 1 === 0) {\n _this.snapThresholdX = snapThreshold;\n _this.snapThresholdY = snapThreshold;\n } else {\n _this.snapThresholdX = Math.round(_this.pages[_this.currentPage.pageX][_this.currentPage.pageY].width * snapThreshold);\n _this.snapThresholdY = Math.round(_this.pages[_this.currentPage.pageX][_this.currentPage.pageY].height * snapThreshold);\n }\n });\n\n this.on('scrollEnd', function () {\n if (snap.loop) {\n if (snap._loopX) {\n if (_this.currentPage.pageX === 0) {\n _this._goToPage(_this.pages.length - 2, _this.currentPage.pageY, 0, undefined, true);\n }\n if (_this.currentPage.pageX === _this.pages.length - 1) {\n _this._goToPage(1, _this.currentPage.pageY, 0, undefined, true);\n }\n } else {\n if (_this.currentPage.pageY === 0) {\n _this._goToPage(_this.currentPage.pageX, _this.pages[0].length - 2, 0, undefined, true);\n }\n if (_this.currentPage.pageY === _this.pages[0].length - 1) {\n _this._goToPage(_this.currentPage.pageX, 1, 0, undefined, true);\n }\n }\n }\n });\n\n if (snap.listenFlick !== false) {\n this.on('flick', function () {\n var time = snap.speed || Math.max(Math.max(Math.min(Math.abs(_this.x - _this.startX), 1000), Math.min(Math.abs(_this.y - _this.startY), 1000)), 300);\n\n _this._goToPage(_this.currentPage.pageX + _this.directionX, _this.currentPage.pageY + _this.directionY, time);\n });\n }\n\n this.on('destroy', function () {\n if (snap.loop) {\n var _children = _this.scroller.children;\n if (_children.length > 2) {\n removeChild(_this.scroller, _children[_children.length - 1]);\n removeChild(_this.scroller, _children[0]);\n }\n }\n });\n };\n\n BScroll.prototype._checkSnapLoop = function () {\n var snap = this.options.snap;\n\n if (!snap.loop || !this.pages || !this.pages.length) {\n return;\n }\n\n if (this.pages.length > 1) {\n snap._loopX = true;\n }\n if (this.pages[0] && this.pages[0].length > 1) {\n snap._loopY = true;\n }\n if (snap._loopX && snap._loopY) {\n warn('Loop does not support two direction at the same time.');\n }\n };\n\n BScroll.prototype._nearestSnap = function (x, y) {\n if (!this.pages.length) {\n return { x: 0, y: 0, pageX: 0, pageY: 0 };\n }\n\n var i = 0;\n // Check if we exceeded the snap threshold\n if (Math.abs(x - this.absStartX) <= this.snapThresholdX && Math.abs(y - this.absStartY) <= this.snapThresholdY) {\n return this.currentPage;\n }\n\n if (x > this.minScrollX) {\n x = this.minScrollX;\n } else if (x < this.maxScrollX) {\n x = this.maxScrollX;\n }\n\n if (y > this.minScrollY) {\n y = this.minScrollY;\n } else if (y < this.maxScrollY) {\n y = this.maxScrollY;\n }\n\n var l = this.pages.length;\n for (; i < l; i++) {\n if (x >= this.pages[i][0].cx) {\n x = this.pages[i][0].x;\n break;\n }\n }\n\n l = this.pages[i].length;\n\n var m = 0;\n for (; m < l; m++) {\n if (y >= this.pages[0][m].cy) {\n y = this.pages[0][m].y;\n break;\n }\n }\n\n if (i === this.currentPage.pageX) {\n i += this.directionX;\n\n if (i < 0) {\n i = 0;\n } else if (i >= this.pages.length) {\n i = this.pages.length - 1;\n }\n\n x = this.pages[i][0].x;\n }\n\n if (m === this.currentPage.pageY) {\n m += this.directionY;\n\n if (m < 0) {\n m = 0;\n } else if (m >= this.pages[0].length) {\n m = this.pages[0].length - 1;\n }\n\n y = this.pages[0][m].y;\n }\n\n return {\n x: x,\n y: y,\n pageX: i,\n pageY: m\n };\n };\n\n BScroll.prototype._goToPage = function (x) {\n var y = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var time = arguments[2];\n var easing = arguments[3];\n var isSilent = arguments[4];\n\n var snap = this.options.snap;\n\n if (!snap || !this.pages || !this.pages.length) {\n return;\n }\n\n easing = easing || snap.easing || ease.bounce;\n\n if (x >= this.pages.length) {\n x = this.pages.length - 1;\n } else if (x < 0) {\n x = 0;\n }\n\n if (!this.pages[x]) {\n return;\n }\n\n if (y >= this.pages[x].length) {\n y = this.pages[x].length - 1;\n } else if (y < 0) {\n y = 0;\n }\n\n var posX = this.pages[x][y].x;\n var posY = this.pages[x][y].y;\n\n time = time === undefined ? snap.speed || Math.max(Math.max(Math.min(Math.abs(posX - this.x), 1000), Math.min(Math.abs(posY - this.y), 1000)), 300) : time;\n\n this.currentPage = {\n x: posX,\n y: posY,\n pageX: x,\n pageY: y\n };\n this.scrollTo(posX, posY, time, easing, isSilent);\n };\n\n BScroll.prototype.goToPage = function (x, y, time, easing) {\n var snap = this.options.snap;\n if (!snap || !this.pages || !this.pages.length) {\n return;\n }\n\n if (snap.loop) {\n var len = void 0;\n if (snap._loopX) {\n len = this.pages.length - 2;\n if (x >= len) {\n x = len - 1;\n } else if (x < 0) {\n x = 0;\n }\n x += 1;\n } else {\n len = this.pages[0].length - 2;\n if (y >= len) {\n y = len - 1;\n } else if (y < 0) {\n y = 0;\n }\n y += 1;\n }\n }\n this._goToPage(x, y, time, easing);\n };\n\n BScroll.prototype.next = function (time, easing) {\n var snap = this.options.snap;\n if (!snap) {\n return;\n }\n\n var x = this.currentPage.pageX;\n var y = this.currentPage.pageY;\n\n x++;\n if (x >= this.pages.length && this.hasVerticalScroll) {\n x = 0;\n y++;\n }\n\n this._goToPage(x, y, time, easing);\n };\n\n BScroll.prototype.prev = function (time, easing) {\n var snap = this.options.snap;\n if (!snap) {\n return;\n }\n\n var x = this.currentPage.pageX;\n var y = this.currentPage.pageY;\n\n x--;\n if (x < 0 && this.hasVerticalScroll) {\n x = 0;\n y--;\n }\n\n this._goToPage(x, y, time, easing);\n };\n\n BScroll.prototype.getCurrentPage = function () {\n var snap = this.options.snap;\n if (!snap) {\n return null;\n }\n\n if (snap.loop) {\n var currentPage = void 0;\n if (snap._loopX) {\n currentPage = extend({}, this.currentPage, {\n pageX: this.currentPage.pageX - 1\n });\n } else {\n currentPage = extend({}, this.currentPage, {\n pageY: this.currentPage.pageY - 1\n });\n }\n return currentPage;\n }\n return this.currentPage;\n };\n}\n\nfunction wheelMixin(BScroll) {\n BScroll.prototype.wheelTo = function () {\n var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n\n if (this.options.wheel) {\n var y = -index * this.itemHeight;\n this.scrollTo(0, y);\n }\n };\n\n BScroll.prototype.getSelectedIndex = function () {\n return this.options.wheel && this.selectedIndex;\n };\n\n BScroll.prototype._initWheel = function () {\n var wheel = this.options.wheel;\n if (!wheel.wheelWrapperClass) {\n wheel.wheelWrapperClass = 'wheel-scroll';\n }\n if (!wheel.wheelItemClass) {\n wheel.wheelItemClass = 'wheel-item';\n }\n if (!wheel.wheelDisabledItemClass) {\n wheel.wheelDisabledItemClass = 'wheel-disabled-item';\n }\n if (wheel.selectedIndex === undefined) {\n wheel.selectedIndex = 0;\n }\n };\n\n BScroll.prototype._findNearestValidWheel = function (y) {\n y = y > 0 ? 0 : y < this.maxScrollY ? this.maxScrollY : y;\n var wheel = this.options.wheel;\n var currentIndex = Math.abs(Math.round(-y / this.itemHeight));\n var cacheIndex = currentIndex;\n var items = this.items;\n // Impersonation web native select\n // first, check whether there is a enable item whose index is smaller than currentIndex\n // then, check whether there is a enable item whose index is bigger than currentIndex\n // otherwise, there are all disabled items, just keep currentIndex unchange\n while (currentIndex >= 0) {\n if (items[currentIndex].className.indexOf(wheel.wheelDisabledItemClass) === -1) {\n break;\n }\n currentIndex--;\n }\n\n if (currentIndex < 0) {\n currentIndex = cacheIndex;\n while (currentIndex <= items.length - 1) {\n if (items[currentIndex].className.indexOf(wheel.wheelDisabledItemClass) === -1) {\n break;\n }\n currentIndex++;\n }\n }\n\n // keep it unchange when all the items are disabled\n if (currentIndex === items.length) {\n currentIndex = cacheIndex;\n }\n // when all the items are disabled, this.selectedIndex should always be -1\n return {\n index: this.wheelItemsAllDisabled ? -1 : currentIndex,\n y: -currentIndex * this.itemHeight\n };\n };\n\n BScroll.prototype._checkWheelAllDisabled = function () {\n var wheel = this.options.wheel;\n var items = this.items;\n this.wheelItemsAllDisabled = true;\n for (var i = 0; i < items.length; i++) {\n if (items[i].className.indexOf(wheel.wheelDisabledItemClass) === -1) {\n this.wheelItemsAllDisabled = false;\n break;\n }\n }\n };\n}\n\nvar INDICATOR_MIN_LEN = 8;\n\nfunction scrollbarMixin(BScroll) {\n BScroll.prototype._initScrollbar = function () {\n var _this = this;\n\n var _options$scrollbar = this.options.scrollbar,\n _options$scrollbar$fa = _options$scrollbar.fade,\n fade = _options$scrollbar$fa === undefined ? true : _options$scrollbar$fa,\n _options$scrollbar$in = _options$scrollbar.interactive,\n interactive = _options$scrollbar$in === undefined ? false : _options$scrollbar$in;\n\n this.indicators = [];\n var indicator = void 0;\n\n if (this.options.scrollX) {\n indicator = {\n el: createScrollbar('horizontal'),\n direction: 'horizontal',\n fade: fade,\n interactive: interactive\n };\n this._insertScrollBar(indicator.el);\n\n this.indicators.push(new Indicator(this, indicator));\n }\n\n if (this.options.scrollY) {\n indicator = {\n el: createScrollbar('vertical'),\n direction: 'vertical',\n fade: fade,\n interactive: interactive\n };\n this._insertScrollBar(indicator.el);\n this.indicators.push(new Indicator(this, indicator));\n }\n\n this.on('refresh', function () {\n for (var i = 0; i < _this.indicators.length; i++) {\n _this.indicators[i].refresh();\n }\n });\n\n if (fade) {\n this.on('scrollEnd', function () {\n for (var i = 0; i < _this.indicators.length; i++) {\n _this.indicators[i].fade();\n }\n });\n\n this.on('scrollCancel', function () {\n for (var i = 0; i < _this.indicators.length; i++) {\n _this.indicators[i].fade();\n }\n });\n\n this.on('scrollStart', function () {\n for (var i = 0; i < _this.indicators.length; i++) {\n _this.indicators[i].fade(true);\n }\n });\n\n this.on('beforeScrollStart', function () {\n for (var i = 0; i < _this.indicators.length; i++) {\n _this.indicators[i].fade(true, true);\n }\n });\n }\n\n this.on('destroy', function () {\n _this._removeScrollBars();\n });\n };\n\n BScroll.prototype._insertScrollBar = function (scrollbar) {\n this.wrapper.appendChild(scrollbar);\n };\n\n BScroll.prototype._removeScrollBars = function () {\n for (var i = 0; i < this.indicators.length; i++) {\n this.indicators[i].destroy();\n }\n };\n}\n\nfunction createScrollbar(direction) {\n var scrollbar = document.createElement('div');\n var indicator = document.createElement('div');\n\n scrollbar.style.cssText = 'position:absolute;z-index:9999;pointerEvents:none';\n indicator.style.cssText = 'box-sizing:border-box;position:absolute;background:rgba(0,0,0,0.5);border:1px solid rgba(255,255,255,0.9);border-radius:3px;';\n\n indicator.className = 'bscroll-indicator';\n\n if (direction === 'horizontal') {\n scrollbar.style.cssText += ';height:7px;left:2px;right:2px;bottom:0';\n indicator.style.height = '100%';\n scrollbar.className = 'bscroll-horizontal-scrollbar';\n } else {\n scrollbar.style.cssText += ';width:7px;bottom:2px;top:2px;right:1px';\n indicator.style.width = '100%';\n scrollbar.className = 'bscroll-vertical-scrollbar';\n }\n\n scrollbar.style.cssText += ';overflow:hidden';\n scrollbar.appendChild(indicator);\n\n return scrollbar;\n}\n\nfunction Indicator(scroller, options) {\n this.wrapper = options.el;\n this.wrapperStyle = this.wrapper.style;\n this.indicator = this.wrapper.children[0];\n this.indicatorStyle = this.indicator.style;\n this.scroller = scroller;\n this.direction = options.direction;\n if (options.fade) {\n this.visible = 0;\n this.wrapperStyle.opacity = '0';\n } else {\n this.visible = 1;\n }\n\n this.sizeRatioX = 1;\n this.sizeRatioY = 1;\n this.maxPosX = 0;\n this.maxPosY = 0;\n this.x = 0;\n this.y = 0;\n\n if (options.interactive) {\n this._addDOMEvents();\n }\n}\n\nIndicator.prototype.handleEvent = function (e) {\n switch (e.type) {\n case 'touchstart':\n case 'mousedown':\n this._start(e);\n break;\n case 'touchmove':\n case 'mousemove':\n this._move(e);\n break;\n case 'touchend':\n case 'mouseup':\n case 'touchcancel':\n case 'mousecancel':\n this._end(e);\n break;\n }\n};\n\nIndicator.prototype.refresh = function () {\n if (this._shouldShow()) {\n this.transitionTime();\n this._calculate();\n this.updatePosition();\n }\n};\n\nIndicator.prototype.fade = function (visible, hold) {\n var _this2 = this;\n\n if (hold && !this.visible) {\n return;\n }\n\n var time = visible ? 250 : 500;\n\n visible = visible ? '1' : '0';\n\n this.wrapperStyle[style.transitionDuration] = time + 'ms';\n\n clearTimeout(this.fadeTimeout);\n this.fadeTimeout = setTimeout(function () {\n _this2.wrapperStyle.opacity = visible;\n _this2.visible = +visible;\n }, 0);\n};\n\nIndicator.prototype.updatePosition = function () {\n if (this.direction === 'vertical') {\n var y = Math.round(this.sizeRatioY * this.scroller.y);\n\n if (y < 0) {\n this.transitionTime(500);\n var height = Math.max(this.indicatorHeight + y * 3, INDICATOR_MIN_LEN);\n this.indicatorStyle.height = height + 'px';\n y = 0;\n } else if (y > this.maxPosY) {\n this.transitionTime(500);\n var _height = Math.max(this.indicatorHeight - (y - this.maxPosY) * 3, INDICATOR_MIN_LEN);\n this.indicatorStyle.height = _height + 'px';\n y = this.maxPosY + this.indicatorHeight - _height;\n } else {\n this.indicatorStyle.height = this.indicatorHeight + 'px';\n }\n this.y = y;\n\n if (this.scroller.options.useTransform) {\n this.indicatorStyle[style.transform] = 'translateY(' + y + 'px)' + this.scroller.translateZ;\n } else {\n this.indicatorStyle.top = y + 'px';\n }\n } else {\n var x = Math.round(this.sizeRatioX * this.scroller.x);\n\n if (x < 0) {\n this.transitionTime(500);\n var width = Math.max(this.indicatorWidth + x * 3, INDICATOR_MIN_LEN);\n this.indicatorStyle.width = width + 'px';\n x = 0;\n } else if (x > this.maxPosX) {\n this.transitionTime(500);\n var _width = Math.max(this.indicatorWidth - (x - this.maxPosX) * 3, INDICATOR_MIN_LEN);\n this.indicatorStyle.width = _width + 'px';\n x = this.maxPosX + this.indicatorWidth - _width;\n } else {\n this.indicatorStyle.width = this.indicatorWidth + 'px';\n }\n\n this.x = x;\n\n if (this.scroller.options.useTransform) {\n this.indicatorStyle[style.transform] = 'translateX(' + x + 'px)' + this.scroller.translateZ;\n } else {\n this.indicatorStyle.left = x + 'px';\n }\n }\n};\n\nIndicator.prototype.transitionTime = function () {\n var time = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n\n this.indicatorStyle[style.transitionDuration] = time + 'ms';\n};\n\nIndicator.prototype.transitionTimingFunction = function (easing) {\n this.indicatorStyle[style.transitionTimingFunction] = easing;\n};\n\nIndicator.prototype.destroy = function () {\n this._removeDOMEvents();\n this.wrapper.parentNode.removeChild(this.wrapper);\n};\n\nIndicator.prototype._start = function (e) {\n var point = e.touches ? e.touches[0] : e;\n\n e.preventDefault();\n e.stopPropagation();\n\n this.transitionTime();\n\n this.initiated = true;\n this.moved = false;\n this.lastPointX = point.pageX;\n this.lastPointY = point.pageY;\n\n this.startTime = getNow();\n\n this._handleMoveEvents(addEvent);\n this.scroller.trigger('beforeScrollStart');\n};\n\nIndicator.prototype._move = function (e) {\n var point = e.touches ? e.touches[0] : e;\n\n e.preventDefault();\n e.stopPropagation();\n\n if (!this.moved) {\n this.scroller.trigger('scrollStart');\n }\n\n this.moved = true;\n\n var deltaX = point.pageX - this.lastPointX;\n this.lastPointX = point.pageX;\n\n var deltaY = point.pageY - this.lastPointY;\n this.lastPointY = point.pageY;\n\n var newX = this.x + deltaX;\n var newY = this.y + deltaY;\n\n this._pos(newX, newY);\n};\n\nIndicator.prototype._end = function (e) {\n if (!this.initiated) {\n return;\n }\n this.initiated = false;\n\n e.preventDefault();\n e.stopPropagation();\n\n this._handleMoveEvents(removeEvent);\n\n var snapOption = this.scroller.options.snap;\n if (snapOption) {\n var speed = snapOption.speed,\n _snapOption$easing = snapOption.easing,\n easing = _snapOption$easing === undefined ? ease.bounce : _snapOption$easing;\n\n var snap = this.scroller._nearestSnap(this.scroller.x, this.scroller.y);\n\n var time = speed || Math.max(Math.max(Math.min(Math.abs(this.scroller.x - snap.x), 1000), Math.min(Math.abs(this.scroller.y - snap.y), 1000)), 300);\n\n if (this.scroller.x !== snap.x || this.scroller.y !== snap.y) {\n this.scroller.directionX = 0;\n this.scroller.directionY = 0;\n this.scroller.currentPage = snap;\n this.scroller.scrollTo(snap.x, snap.y, time, easing);\n }\n }\n\n if (this.moved) {\n this.scroller.trigger('scrollEnd', {\n x: this.scroller.x,\n y: this.scroller.y\n });\n }\n};\n\nIndicator.prototype._pos = function (x, y) {\n if (x < 0) {\n x = 0;\n } else if (x > this.maxPosX) {\n x = this.maxPosX;\n }\n\n if (y < 0) {\n y = 0;\n } else if (y > this.maxPosY) {\n y = this.maxPosY;\n }\n\n x = Math.round(x / this.sizeRatioX);\n y = Math.round(y / this.sizeRatioY);\n\n this.scroller.scrollTo(x, y);\n this.scroller.trigger('scroll', {\n x: this.scroller.x,\n y: this.scroller.y\n });\n};\n\nIndicator.prototype._shouldShow = function () {\n if (this.direction === 'vertical' && this.scroller.hasVerticalScroll || this.direction === 'horizontal' && this.scroller.hasHorizontalScroll) {\n this.wrapper.style.display = '';\n return true;\n }\n this.wrapper.style.display = 'none';\n return false;\n};\n\nIndicator.prototype._calculate = function () {\n if (this.direction === 'vertical') {\n var wrapperHeight = this.wrapper.clientHeight;\n this.indicatorHeight = Math.max(Math.round(wrapperHeight * wrapperHeight / (this.scroller.scrollerHeight || wrapperHeight || 1)), INDICATOR_MIN_LEN);\n this.indicatorStyle.height = this.indicatorHeight + 'px';\n\n this.maxPosY = wrapperHeight - this.indicatorHeight;\n\n this.sizeRatioY = this.maxPosY / this.scroller.maxScrollY;\n } else {\n var wrapperWidth = this.wrapper.clientWidth;\n this.indicatorWidth = Math.max(Math.round(wrapperWidth * wrapperWidth / (this.scroller.scrollerWidth || wrapperWidth || 1)), INDICATOR_MIN_LEN);\n this.indicatorStyle.width = this.indicatorWidth + 'px';\n\n this.maxPosX = wrapperWidth - this.indicatorWidth;\n\n this.sizeRatioX = this.maxPosX / this.scroller.maxScrollX;\n }\n};\n\nIndicator.prototype._addDOMEvents = function () {\n var eventOperation = addEvent;\n this._handleDOMEvents(eventOperation);\n};\n\nIndicator.prototype._removeDOMEvents = function () {\n var eventOperation = removeEvent;\n this._handleDOMEvents(eventOperation);\n this._handleMoveEvents(eventOperation);\n};\n\nIndicator.prototype._handleMoveEvents = function (eventOperation) {\n if (!this.scroller.options.disableTouch) {\n eventOperation(window, 'touchmove', this);\n }\n if (!this.scroller.options.disableMouse) {\n eventOperation(window, 'mousemove', this);\n }\n};\n\nIndicator.prototype._handleDOMEvents = function (eventOperation) {\n if (!this.scroller.options.disableTouch) {\n eventOperation(this.indicator, 'touchstart', this);\n eventOperation(window, 'touchend', this);\n }\n if (!this.scroller.options.disableMouse) {\n eventOperation(this.indicator, 'mousedown', this);\n eventOperation(window, 'mouseup', this);\n }\n};\n\nfunction pullDownMixin(BScroll) {\n BScroll.prototype._initPullDown = function () {\n // must watch scroll in real time\n this.options.probeType = PROBE_REALTIME;\n };\n\n BScroll.prototype._checkPullDown = function () {\n var _options$pullDownRefr = this.options.pullDownRefresh,\n _options$pullDownRefr2 = _options$pullDownRefr.threshold,\n threshold = _options$pullDownRefr2 === undefined ? 90 : _options$pullDownRefr2,\n _options$pullDownRefr3 = _options$pullDownRefr.stop,\n stop = _options$pullDownRefr3 === undefined ? 40 : _options$pullDownRefr3;\n\n // check if a real pull down action\n\n if (this.directionY !== DIRECTION_DOWN || this.y < threshold) {\n return false;\n }\n\n if (!this.pulling) {\n this.pulling = true;\n this.trigger('pullingDown');\n }\n this.scrollTo(this.x, stop, this.options.bounceTime, ease.bounce);\n\n return this.pulling;\n };\n\n BScroll.prototype.finishPullDown = function () {\n this.pulling = false;\n this.resetPosition(this.options.bounceTime, ease.bounce);\n };\n\n BScroll.prototype.openPullDown = function () {\n var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n\n this.options.pullDownRefresh = config;\n this._initPullDown();\n };\n\n BScroll.prototype.closePullDown = function () {\n this.options.pullDownRefresh = false;\n };\n\n BScroll.prototype.autoPullDownRefresh = function () {\n var _options$pullDownRefr4 = this.options.pullDownRefresh,\n _options$pullDownRefr5 = _options$pullDownRefr4.threshold,\n threshold = _options$pullDownRefr5 === undefined ? 90 : _options$pullDownRefr5,\n _options$pullDownRefr6 = _options$pullDownRefr4.stop,\n stop = _options$pullDownRefr6 === undefined ? 40 : _options$pullDownRefr6;\n\n\n if (this.pulling) {\n return;\n }\n this.pulling = true;\n\n this.scrollTo(this.x, threshold);\n this.trigger('pullingDown');\n this.scrollTo(this.x, stop, this.options.bounceTime, ease.bounce);\n };\n}\n\nfunction pullUpMixin(BScroll) {\n BScroll.prototype._initPullUp = function () {\n // must watch scroll in real time\n this.options.probeType = PROBE_REALTIME;\n\n this.pullupWatching = false;\n this._watchPullUp();\n };\n\n BScroll.prototype._watchPullUp = function () {\n if (this.pullupWatching) {\n return;\n }\n this.pullupWatching = true;\n this.on('scroll', this._checkToEnd);\n };\n\n BScroll.prototype._checkToEnd = function (pos) {\n var _this = this;\n\n var _options$pullUpLoad$t = this.options.pullUpLoad.threshold,\n threshold = _options$pullUpLoad$t === undefined ? 0 : _options$pullUpLoad$t;\n\n if (this.movingDirectionY === DIRECTION_UP && pos.y <= this.maxScrollY + threshold) {\n // reset pullupWatching status after scroll end.\n this.once('scrollEnd', function () {\n _this.pullupWatching = false;\n });\n this.trigger('pullingUp');\n this.off('scroll', this._checkToEnd);\n }\n };\n\n BScroll.prototype.finishPullUp = function () {\n var _this2 = this;\n\n if (this.pullupWatching) {\n this.once('scrollEnd', function () {\n _this2._watchPullUp();\n });\n } else {\n this._watchPullUp();\n }\n };\n\n BScroll.prototype.openPullUp = function () {\n var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n\n this.options.pullUpLoad = config;\n this._initPullUp();\n };\n\n BScroll.prototype.closePullUp = function () {\n this.options.pullUpLoad = false;\n if (!this.pullupWatching) {\n return;\n }\n this.pullupWatching = false;\n this.off('scroll', this._checkToEnd);\n };\n}\n\nfunction mouseWheelMixin(BScroll) {\n BScroll.prototype._initMouseWheel = function () {\n var _this = this;\n\n this._handleMouseWheelEvent(addEvent);\n\n this.on('destroy', function () {\n clearTimeout(_this.mouseWheelTimer);\n clearTimeout(_this.mouseWheelEndTimer);\n _this._handleMouseWheelEvent(removeEvent);\n });\n\n this.firstWheelOpreation = true;\n };\n\n BScroll.prototype._handleMouseWheelEvent = function (eventOperation) {\n eventOperation(this.wrapper, 'wheel', this);\n eventOperation(this.wrapper, 'mousewheel', this);\n eventOperation(this.wrapper, 'DOMMouseScroll', this);\n };\n\n BScroll.prototype._onMouseWheel = function (e) {\n var _this2 = this;\n\n if (!this.enabled) {\n return;\n }\n e.preventDefault();\n\n if (this.options.stopPropagation) {\n e.stopPropagation();\n }\n\n if (this.firstWheelOpreation) {\n this.trigger('scrollStart');\n }\n this.firstWheelOpreation = false;\n\n var _options$mouseWheel = this.options.mouseWheel,\n _options$mouseWheel$s = _options$mouseWheel.speed,\n speed = _options$mouseWheel$s === undefined ? 20 : _options$mouseWheel$s,\n _options$mouseWheel$i = _options$mouseWheel.invert,\n invert = _options$mouseWheel$i === undefined ? false : _options$mouseWheel$i,\n _options$mouseWheel$e = _options$mouseWheel.easeTime,\n easeTime = _options$mouseWheel$e === undefined ? 300 : _options$mouseWheel$e;\n\n\n clearTimeout(this.mouseWheelTimer);\n this.mouseWheelTimer = setTimeout(function () {\n if (!_this2.options.snap && !easeTime) {\n _this2.trigger('scrollEnd', {\n x: _this2.x,\n y: _this2.y\n });\n }\n _this2.firstWheelOpreation = true;\n }, 400);\n\n var wheelDeltaX = void 0;\n var wheelDeltaY = void 0;\n\n switch (true) {\n case 'deltaX' in e:\n if (e.deltaMode === 1) {\n wheelDeltaX = -e.deltaX * speed;\n wheelDeltaY = -e.deltaY * speed;\n } else {\n wheelDeltaX = -e.deltaX;\n wheelDeltaY = -e.deltaY;\n }\n break;\n case 'wheelDeltaX' in e:\n wheelDeltaX = e.wheelDeltaX / 120 * speed;\n wheelDeltaY = e.wheelDeltaY / 120 * speed;\n break;\n case 'wheelDelta' in e:\n wheelDeltaX = wheelDeltaY = e.wheelDelta / 120 * speed;\n break;\n case 'detail' in e:\n wheelDeltaX = wheelDeltaY = -e.detail / 3 * speed;\n break;\n default:\n return;\n }\n\n var direction = invert ? -1 : 1;\n wheelDeltaX *= direction;\n wheelDeltaY *= direction;\n\n if (!this.hasVerticalScroll) {\n wheelDeltaX = wheelDeltaY;\n wheelDeltaY = 0;\n }\n\n var newX = void 0;\n var newY = void 0;\n if (this.options.snap) {\n newX = this.currentPage.pageX;\n newY = this.currentPage.pageY;\n\n if (wheelDeltaX > 0) {\n newX--;\n } else if (wheelDeltaX < 0) {\n newX++;\n }\n\n if (wheelDeltaY > 0) {\n newY--;\n } else if (wheelDeltaY < 0) {\n newY++;\n }\n\n this._goToPage(newX, newY);\n return;\n }\n\n newX = this.x + Math.round(this.hasHorizontalScroll ? wheelDeltaX : 0);\n newY = this.y + Math.round(this.hasVerticalScroll ? wheelDeltaY : 0);\n\n this.movingDirectionX = this.directionX = wheelDeltaX > 0 ? -1 : wheelDeltaX < 0 ? 1 : 0;\n this.movingDirectionY = this.directionY = wheelDeltaY > 0 ? -1 : wheelDeltaY < 0 ? 1 : 0;\n\n if (newX > this.minScrollX) {\n newX = this.minScrollX;\n } else if (newX < this.maxScrollX) {\n newX = this.maxScrollX;\n }\n\n if (newY > this.minScrollY) {\n newY = this.minScrollY;\n } else if (newY < this.maxScrollY) {\n newY = this.maxScrollY;\n }\n\n var needTriggerEnd = this.y === newY;\n this.scrollTo(newX, newY, easeTime, ease.swipe);\n this.trigger('scroll', {\n x: this.x,\n y: this.y\n });\n clearTimeout(this.mouseWheelEndTimer);\n if (needTriggerEnd) {\n this.mouseWheelEndTimer = setTimeout(function () {\n _this2.trigger('scrollEnd', {\n x: _this2.x,\n y: _this2.y\n });\n }, easeTime);\n }\n };\n}\n\nfunction zoomMixin(BScroll) {\n BScroll.prototype._initZoom = function () {\n var _options$zoom = this.options.zoom,\n _options$zoom$start = _options$zoom.start,\n start = _options$zoom$start === undefined ? 1 : _options$zoom$start,\n _options$zoom$min = _options$zoom.min,\n min = _options$zoom$min === undefined ? 1 : _options$zoom$min,\n _options$zoom$max = _options$zoom.max,\n max = _options$zoom$max === undefined ? 4 : _options$zoom$max;\n\n this.scale = Math.min(Math.max(start, min), max);\n this.setScale(this.scale);\n this.scrollerStyle[style.transformOrigin] = '0 0';\n };\n\n BScroll.prototype._zoomTo = function (scale, originX, originY, startScale) {\n this.scaled = true;\n\n var lastScale = scale / (startScale || this.scale);\n this.setScale(scale);\n\n this.refresh();\n\n var newX = Math.round(this.startX - (originX - this.relativeX) * (lastScale - 1));\n var newY = Math.round(this.startY - (originY - this.relativeY) * (lastScale - 1));\n\n if (newX > this.minScrollX) {\n newX = this.minScrollX;\n } else if (newX < this.maxScrollX) {\n newX = this.maxScrollX;\n }\n\n if (newY > this.minScrollY) {\n newY = this.minScrollY;\n } else if (newY < this.maxScrollY) {\n newY = this.maxScrollY;\n }\n\n if (this.x !== newX || this.y !== newY) {\n this.scrollTo(newX, newY, this.options.bounceTime);\n }\n\n this.scaled = false;\n };\n\n BScroll.prototype.zoomTo = function (scale, x, y) {\n var _offsetToBody = offsetToBody(this.wrapper),\n left = _offsetToBody.left,\n top = _offsetToBody.top;\n\n var originX = x + left - this.x;\n var originY = y + top - this.y;\n this._zoomTo(scale, originX, originY);\n };\n\n BScroll.prototype._zoomStart = function (e) {\n var firstFinger = e.touches[0];\n var secondFinger = e.touches[1];\n var deltaX = Math.abs(firstFinger.pageX - secondFinger.pageX);\n var deltaY = Math.abs(firstFinger.pageY - secondFinger.pageY);\n\n this.startDistance = getDistance(deltaX, deltaY);\n this.startScale = this.scale;\n\n var _offsetToBody2 = offsetToBody(this.wrapper),\n left = _offsetToBody2.left,\n top = _offsetToBody2.top;\n\n this.originX = Math.abs(firstFinger.pageX + secondFinger.pageX) / 2 + left - this.x;\n this.originY = Math.abs(firstFinger.pageY + secondFinger.pageY) / 2 + top - this.y;\n\n this.trigger('zoomStart');\n };\n\n BScroll.prototype._zoom = function (e) {\n if (!this.enabled || this.destroyed || eventType[e.type] !== this.initiated) {\n return;\n }\n\n if (this.options.preventDefault) {\n e.preventDefault();\n }\n\n if (this.options.stopPropagation) {\n e.stopPropagation();\n }\n\n var firstFinger = e.touches[0];\n var secondFinger = e.touches[1];\n var deltaX = Math.abs(firstFinger.pageX - secondFinger.pageX);\n var deltaY = Math.abs(firstFinger.pageY - secondFinger.pageY);\n var distance = getDistance(deltaX, deltaY);\n var scale = distance / this.startDistance * this.startScale;\n\n this.scaled = true;\n\n var _options$zoom2 = this.options.zoom,\n _options$zoom2$min = _options$zoom2.min,\n min = _options$zoom2$min === undefined ? 1 : _options$zoom2$min,\n _options$zoom2$max = _options$zoom2.max,\n max = _options$zoom2$max === undefined ? 4 : _options$zoom2$max;\n\n\n if (scale < min) {\n scale = 0.5 * min * Math.pow(2.0, scale / min);\n } else if (scale > max) {\n scale = 2.0 * max * Math.pow(0.5, max / scale);\n }\n\n var lastScale = scale / this.startScale;\n\n var x = this.startX - (this.originX - this.relativeX) * (lastScale - 1);\n var y = this.startY - (this.originY - this.relativeY) * (lastScale - 1);\n\n this.setScale(scale);\n\n this.scrollTo(x, y, 0);\n };\n\n BScroll.prototype._zoomEnd = function (e) {\n if (!this.enabled || this.destroyed || eventType[e.type] !== this.initiated) {\n return;\n }\n\n if (this.options.preventDefault) {\n e.preventDefault();\n }\n\n if (this.options.stopPropagation) {\n e.stopPropagation();\n }\n\n this.isInTransition = false;\n this.isAnimating = false;\n this.initiated = 0;\n\n var _options$zoom3 = this.options.zoom,\n _options$zoom3$min = _options$zoom3.min,\n min = _options$zoom3$min === undefined ? 1 : _options$zoom3$min,\n _options$zoom3$max = _options$zoom3.max,\n max = _options$zoom3$max === undefined ? 4 : _options$zoom3$max;\n\n\n var scale = this.scale > max ? max : this.scale < min ? min : this.scale;\n\n this._zoomTo(scale, this.originX, this.originY, this.startScale);\n\n this.trigger('zoomEnd');\n };\n}\n\n// import { ease } from '../util/ease'\n\n// Number of items to instantiate beyond current view in the scroll direction.\nvar RUNWAY_ITEMS = 30;\n\n// Number of items to instantiate beyond current view in the opposite direction.\nvar RUNWAY_ITEMS_OPPOSITE = 10;\n\n// The animation interval (in ms) for fading in content from tombstones.\nvar ANIMATION_DURATION_MS = 200;\n\n// The number of pixels of default additional length to allow scrolling to.\nvar DEFAULT_SCROLL_RUNWAY = 2000;\n\nfunction infiniteMixin(BScroll) {\n BScroll.prototype._initInfinite = function () {\n this.options.probeType = 3;\n this.maxScrollY = -DEFAULT_SCROLL_RUNWAY;\n this.infiniteScroller = new InfiniteScroller(this, this.options.infinity);\n };\n}\n\nfunction isTombstoneNode(node) {\n if (node && node.classList) {\n return node.classList.contains('tombstone');\n }\n}\n\nfunction InfiniteScroller(scroller, options) {\n var _this = this;\n\n this.options = options;\n assert(typeof this.options.createTombstone === 'function', 'Infinite scroll need createTombstone Function to create tombstone');\n\n assert(typeof this.options.fetch === 'function', 'Infinite scroll need fetch Function to fetch new data.');\n\n assert(typeof this.options.render === 'function', 'Infinite scroll need render Function to render each item.');\n\n this.firstAttachedItem = 0;\n this.lastAttachedItem = 0;\n\n this.anchorScrollTop = 0;\n this.anchorItem = {\n index: 0,\n offset: 0\n };\n this.tombstoneHeight = 0;\n this.tombstoneWidth = 0;\n this.tombstones = [];\n this.tombstonesAnimationHandlers = [];\n\n this.items = [];\n this.loadedItems = 0;\n this.requestInProgress = false;\n this.hasMore = true;\n\n this.scroller = scroller;\n this.wrapperEl = this.scroller.wrapper;\n this.scrollerEl = this.scroller.scroller;\n\n this.scroller.on('resize', function () {\n _this.onResize();\n });\n this.scroller.on('destroy', function () {\n _this.destroy();\n });\n\n // wait scroll core init\n this._onResizeHandler = setTimeout(function () {\n _this.onResize();\n\n // must wait tombstoneHeight has size\n _this.scroller.on('scroll', function () {\n _this.onScroll();\n });\n });\n}\n\nInfiniteScroller.prototype.destroy = function () {\n var _this2 = this;\n\n // In extreme scene, destroy is triggered before _onResizeHandler\n clearTimeout(this._onResizeHandler);\n this.tombstonesAnimationHandlers.forEach(function (handler) {\n clearTimeout(handler);\n });\n this.tombstonesAnimationHandlers = null;\n this.items.forEach(function (item) {\n if (item.node) {\n _this2.scrollerEl.removeChild(item.node);\n item.node = null;\n }\n });\n this.scroller.infiniteScroller = null;\n this.scroller = null;\n this.wrapperEl = null;\n this.scrollerEl = null;\n this.items = null;\n this.tombstones = null;\n};\n\nInfiniteScroller.prototype.onScroll = function () {\n var scrollTop = -this.scroller.y;\n var delta = scrollTop - this.anchorScrollTop;\n if (scrollTop === 0) {\n this.anchorItem = {\n index: 0,\n offset: 0\n };\n } else {\n this.anchorItem = this._calculateAnchoredItem(this.anchorItem, delta);\n }\n\n this.anchorScrollTop = scrollTop;\n var lastScreenItem = this._calculateAnchoredItem(this.anchorItem, this.scroller.wrapperHeight);\n\n var start = this.anchorItem.index;\n var end = lastScreenItem.index;\n if (delta < 0) {\n start -= RUNWAY_ITEMS;\n end += RUNWAY_ITEMS_OPPOSITE;\n } else {\n start -= RUNWAY_ITEMS_OPPOSITE;\n end += RUNWAY_ITEMS;\n }\n this.fill(start, end);\n this.maybeRequestContent();\n};\n\nInfiniteScroller.prototype.onResize = function () {\n var tombstone = this.options.createTombstone();\n tombstone.style.position = 'absolute';\n this.scrollerEl.appendChild(tombstone);\n tombstone.style.display = '';\n this.tombstoneHeight = tombstone.offsetHeight;\n this.tombstoneWidth = tombstone.offsetWidth;\n this.scrollerEl.removeChild(tombstone);\n\n for (var i = 0; i < this.items.length; i++) {\n this.items[i].height = this.items[i].width = 0;\n }\n\n this.onScroll();\n};\n\nInfiniteScroller.prototype.fill = function (start, end) {\n this.firstAttachedItem = Math.max(0, start);\n if (!this.hasMore) {\n end = Math.min(end, this.items.length);\n }\n this.lastAttachedItem = end;\n this.attachContent();\n};\n\nInfiniteScroller.prototype.maybeRequestContent = function () {\n var _this3 = this;\n\n if (this.requestInProgress || !this.hasMore) {\n return;\n }\n var itemsNeeded = this.lastAttachedItem - this.loadedItems;\n if (itemsNeeded <= 0) {\n return;\n }\n this.requestInProgress = true;\n this.options.fetch(itemsNeeded).then(function (items) {\n _this3.requestInProgress = false;\n if (items) {\n _this3.addContent(items);\n } else {\n _this3.hasMore = false;\n var tombstoneLen = _this3._removeTombstones();\n var curPos = 0;\n if (_this3.anchorItem.index <= _this3.items.length) {\n curPos = _this3._fixScrollPosition();\n _this3._setupAnimations({}, curPos);\n _this3.scroller.resetPosition(_this3.scroller.options.bounceTime);\n } else {\n _this3.anchorItem.index -= tombstoneLen;\n curPos = _this3._fixScrollPosition();\n _this3._setupAnimations({}, curPos);\n _this3.scroller.stop();\n _this3.scroller.resetPosition();\n _this3.onScroll();\n }\n }\n });\n};\n\nInfiniteScroller.prototype.addContent = function (items) {\n for (var i = 0; i < items.length; i++) {\n if (this.items.length <= this.loadedItems) {\n this._addItem();\n }\n this.items[this.loadedItems++].data = items[i];\n }\n this.attachContent();\n this.maybeRequestContent();\n};\n\nInfiniteScroller.prototype.attachContent = function () {\n var unusedNodes = this._collectUnusedNodes();\n var tombstoneAnimations = this._createDOMNodes(unusedNodes);\n this._cleanupUnusedNodes(unusedNodes);\n this._cacheNodeSize();\n var curPos = this._fixScrollPosition();\n this._setupAnimations(tombstoneAnimations, curPos);\n};\n\nInfiniteScroller.prototype.resetMore = function () {\n this.hasMore = true;\n};\n\nInfiniteScroller.prototype._removeTombstones = function () {\n var markIndex = void 0;\n var tombstoneLen = 0;\n var itemLen = this.items.length;\n for (var i = 0; i < itemLen; i++) {\n var currentNode = this.items[i].node;\n var currentData = this.items[i].data;\n if ((!currentNode || isTombstoneNode(currentNode)) && !currentData) {\n // 0 should be excluded\n if (markIndex === void 0) {\n markIndex = i;\n }\n if (currentNode) {\n this.scrollerEl.removeChild(currentNode);\n }\n }\n }\n tombstoneLen = itemLen - markIndex;\n this.items.splice(markIndex);\n this.lastAttachedItem = Math.min(this.lastAttachedItem, this.items.length);\n return tombstoneLen;\n};\n\nInfiniteScroller.prototype._collectUnusedNodes = function () {\n var unusedNodes = [];\n for (var i = 0; i < this.items.length; i++) {\n // Skip the items which should be visible.\n if (i === this.firstAttachedItem) {\n i = this.lastAttachedItem - 1;\n continue;\n }\n var currentNode = this.items[i].node;\n if (currentNode) {\n if (isTombstoneNode(currentNode)) {\n // Cache tombstones for reuse\n this.tombstones.push(currentNode);\n this.tombstones[this.tombstones.length - 1].style.display = 'none';\n } else {\n unusedNodes.push(currentNode);\n }\n }\n this.items[i].node = null;\n }\n return unusedNodes;\n};\n\nInfiniteScroller.prototype._createDOMNodes = function (unusedNodes) {\n var tombstoneAnimations = {};\n for (var i = this.firstAttachedItem; i < this.lastAttachedItem; i++) {\n while (this.items.length <= i) {\n this._addItem();\n }\n var currentNode = this.items[i].node;\n var currentData = this.items[i].data;\n if (currentNode) {\n if (isTombstoneNode(currentNode) && currentData) {\n currentNode.style.zIndex = 1;\n tombstoneAnimations[i] = [currentNode, this.items[i].top - this.anchorScrollTop];\n this.items[i].node = null;\n } else {\n continue;\n }\n }\n var node = currentData ? this.options.render(currentData, unusedNodes.pop()) : this._getTombStone();\n node.style.position = 'absolute';\n this.items[i].top = -1;\n this.scrollerEl.appendChild(node);\n this.items[i].node = node;\n }\n return tombstoneAnimations;\n};\n\nInfiniteScroller.prototype._cleanupUnusedNodes = function (unusedNodes) {\n while (unusedNodes.length) {\n this.scrollerEl.removeChild(unusedNodes.pop());\n }\n};\n\nInfiniteScroller.prototype._cacheNodeSize = function () {\n for (var i = this.firstAttachedItem; i < this.lastAttachedItem; i++) {\n var item = this.items[i];\n // Only cache the height if we have the real contents, not a placeholder.\n if (item.data && !item.height) {\n var isTombstone = isTombstoneNode(item.node);\n item.height = isTombstone ? this.tombstoneHeight : item.node.offsetHeight;\n item.width = isTombstone ? this.tombstoneWidth : item.node.offsetWidth;\n }\n }\n};\n\nInfiniteScroller.prototype._fixScrollPosition = function () {\n this.anchorScrollTop = 0;\n for (var _i = 0; _i < this.anchorItem.index; _i++) {\n this.anchorScrollTop += this.items[_i].height || this.tombstoneHeight;\n }\n this.anchorScrollTop += this.anchorItem.offset;\n\n // Position all nodes.\n var curPos = this.anchorScrollTop - this.anchorItem.offset;\n var i = this.anchorItem.index;\n while (i > this.firstAttachedItem) {\n curPos -= this.items[i - 1].height || this.tombstoneHeight;\n i--;\n }\n\n return curPos;\n};\n\nInfiniteScroller.prototype._setupAnimations = function (tombstoneAnimations, curPos) {\n var _this4 = this;\n\n for (var i in tombstoneAnimations) {\n var animation = tombstoneAnimations[i];\n this.items[i].node.style[style.transform] = 'translateY(' + (this.anchorScrollTop + animation[1]) + 'px) scale(' + this.tombstoneWidth / this.items[i].width + ', ' + this.tombstoneHeight / this.items[i].height + ')';\n // Call offsetTop on the nodes to be animated to force them to apply current transforms.\n /* eslint-disable no-unused-expressions */\n this.items[i].node.offsetTop;\n animation[0].offsetTop;\n this.items[i].node.style[style.transition] = cssVendor + 'transform ' + ANIMATION_DURATION_MS + 'ms';\n }\n\n for (var _i2 = this.firstAttachedItem; _i2 < this.lastAttachedItem; _i2++) {\n var _animation = tombstoneAnimations[_i2];\n if (_animation) {\n var tombstoneNode = _animation[0];\n tombstoneNode.style[style.transition] = cssVendor + 'transform ' + ANIMATION_DURATION_MS + 'ms, opacity ' + ANIMATION_DURATION_MS + 'ms';\n tombstoneNode.style[style.transform] = 'translateY(' + curPos + 'px) scale(' + this.items[_i2].width / this.tombstoneWidth + ', ' + this.items[_i2].height / this.tombstoneHeight + ')';\n tombstoneNode.style.opacity = 0;\n }\n if (curPos !== this.items[_i2].top) {\n if (!_animation) {\n this.items[_i2].node.style[style.transition] = '';\n }\n this.items[_i2].node.style[style.transform] = 'translateY(' + curPos + 'px)';\n }\n this.items[_i2].top = curPos;\n curPos += this.items[_i2].height || this.tombstoneHeight;\n }\n\n this.scroller.maxScrollY = -(curPos - this.scroller.wrapperHeight + (this.hasMore ? DEFAULT_SCROLL_RUNWAY : 0));\n\n var tombstoneAnimationsHandler = setTimeout(function () {\n for (var _i3 in tombstoneAnimations) {\n var _animation2 = tombstoneAnimations[_i3];\n _animation2[0].style.display = 'none';\n // Tombstone can be recycled now.\n _this4.tombstones.push(_animation2[0]);\n }\n }, ANIMATION_DURATION_MS);\n\n this.tombstonesAnimationHandlers.push(tombstoneAnimationsHandler);\n};\n\nInfiniteScroller.prototype._getTombStone = function () {\n var tombstone = this.tombstones.pop();\n if (tombstone) {\n tombstone.style.display = '';\n tombstone.style.opacity = 1;\n tombstone.style[style.transform] = '';\n tombstone.style[style.transition] = '';\n return tombstone;\n }\n return this.options.createTombstone();\n};\n\nInfiniteScroller.prototype._addItem = function () {\n this.items.push({\n data: null,\n node: null,\n height: 0,\n width: 0,\n top: 0\n });\n};\n\nInfiniteScroller.prototype._calculateAnchoredItem = function (initialAnchor, delta) {\n if (delta === 0) {\n return initialAnchor;\n }\n var i = initialAnchor.index;\n var tombstones = 0;\n\n delta += initialAnchor.offset;\n if (delta < 0) {\n while (delta < 0 && i > 0 && this.items[i - 1].height) {\n delta += this.items[i - 1].height;\n i--;\n }\n tombstones = Math.max(-i, Math.ceil(Math.min(delta, 0) / this.tombstoneHeight));\n } else {\n while (delta > 0 && i < this.items.length && this.items[i].height && this.items[i].height < delta) {\n delta -= this.items[i].height;\n i++;\n }\n if (i >= this.items.length || !this.items[i].height) {\n tombstones = Math.floor(Math.max(delta, 0) / this.tombstoneHeight);\n }\n }\n i += tombstones;\n delta -= tombstones * this.tombstoneHeight;\n\n return {\n index: i,\n offset: delta\n };\n};\n\nfunction BScroll(el, options) {\n this.wrapper = typeof el === 'string' ? document.querySelector(el) : el;\n if (!this.wrapper) {\n warn('Can not resolve the wrapper DOM.');\n }\n this.scroller = this.wrapper.children[0];\n if (!this.scroller) {\n warn('The wrapper need at least one child element to be scroller.');\n }\n // cache style for better performance\n this.scrollerStyle = this.scroller.style;\n\n this._init(options);\n}\n\ninitMixin(BScroll);\ncoreMixin(BScroll);\neventMixin(BScroll);\nsnapMixin(BScroll);\nwheelMixin(BScroll);\nscrollbarMixin(BScroll);\npullDownMixin(BScroll);\npullUpMixin(BScroll);\nmouseWheelMixin(BScroll);\nzoomMixin(BScroll);\ninfiniteMixin(BScroll);\n\nBScroll.Version = '1.15.2';\n\nexport default BScroll;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/better-scroll/dist/bscroll.esm.js\n// module id = GQaK\n// module chunks = 0","\"use strict\";\n\nexports.__esModule = true;\n\nvar _from = require(\"../core-js/array/from\");\n\nvar _from2 = _interopRequireDefault(_from);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function (arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n } else {\n return (0, _from2.default)(arr);\n }\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/babel-runtime/helpers/toConsumableArray.js\n// module id = Gu7T\n// module chunks = 0","var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('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//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/library/modules/_object-keys-internal.js\n// module id = Ibhu\n// module chunks = 0","// memoryStorage is a useful last fallback to ensure that the store\n// is functions (meaning store.get(), store.set(), etc will all function).\n// However, stored values will not persist when the browser navigates to\n// a new page or reloads the current page.\n\nmodule.exports = {\n\tname: 'memoryStorage',\n\tread: read,\n\twrite: write,\n\teach: each,\n\tremove: remove,\n\tclearAll: clearAll,\n}\n\nvar memoryStorage = {}\n\nfunction read(key) {\n\treturn memoryStorage[key]\n}\n\nfunction write(key, data) {\n\tmemoryStorage[key] = data\n}\n\nfunction each(callback) {\n\tfor (var key in memoryStorage) {\n\t\tif (memoryStorage.hasOwnProperty(key)) {\n\t\t\tcallback(memoryStorage[key], key)\n\t\t}\n\t}\n}\n\nfunction remove(key) {\n\tdelete memoryStorage[key]\n}\n\nfunction clearAll(key) {\n\tmemoryStorage = {}\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/store/storages/memoryStorage.js\n// module id = JNzJ\n// module chunks = 0","'use strict';\n\nmodule.exports = function bind(fn, thisArg) {\n return function wrap() {\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n return fn.apply(thisArg, args);\n };\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/axios/lib/helpers/bind.js\n// module id = JP+z\n// module chunks = 0","'use strict';\n\nvar utils = require('./utils');\nvar normalizeHeaderName = require('./helpers/normalizeHeaderName');\n\nvar DEFAULT_CONTENT_TYPE = {\n 'Content-Type': 'application/x-www-form-urlencoded'\n};\n\nfunction setContentTypeIfUnset(headers, value) {\n if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {\n headers['Content-Type'] = value;\n }\n}\n\nfunction getDefaultAdapter() {\n var adapter;\n if (typeof XMLHttpRequest !== 'undefined') {\n // For browsers use XHR adapter\n adapter = require('./adapters/xhr');\n } else if (typeof process !== 'undefined') {\n // For node use HTTP adapter\n adapter = require('./adapters/http');\n }\n return adapter;\n}\n\nvar defaults = {\n adapter: getDefaultAdapter(),\n\n transformRequest: [function transformRequest(data, headers) {\n normalizeHeaderName(headers, 'Content-Type');\n if (utils.isFormData(data) ||\n utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');\n return data.toString();\n }\n if (utils.isObject(data)) {\n setContentTypeIfUnset(headers, 'application/json;charset=utf-8');\n return JSON.stringify(data);\n }\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n /*eslint no-param-reassign:0*/\n if (typeof data === 'string') {\n try {\n data = JSON.parse(data);\n } catch (e) { /* Ignore */ }\n }\n return data;\n }],\n\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n }\n};\n\ndefaults.headers = {\n common: {\n 'Accept': 'application/json, text/plain, */*'\n }\n};\n\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n defaults.headers[method] = {};\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);\n});\n\nmodule.exports = defaults;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/axios/lib/defaults.js\n// module id = KCLY\n// module chunks = 0","exports.f = require('./_wks');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/library/modules/_wks-ext.js\n// module id = Kh4W\n// module chunks = 0","var ctx = require('./_ctx');\nvar invoke = require('./_invoke');\nvar html = require('./_html');\nvar cel = require('./_dom-create');\nvar global = require('./_global');\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 (require('./_cof')(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//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/library/modules/_task.js\n// module id = L42u\n// module chunks = 0","var pIE = require('./_object-pie');\nvar createDesc = require('./_property-desc');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar has = require('./_has');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = require('./_descriptors') ? 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//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/library/modules/_object-gopd.js\n// module id = LKZe\n// module chunks = 0","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar types_1 = require(\"@sentry/types\");\n/** Noop transport */\nvar NoopTransport = /** @class */ (function () {\n function NoopTransport() {\n }\n /**\n * @inheritDoc\n */\n NoopTransport.prototype.sendEvent = function (_) {\n return tslib_1.__awaiter(this, void 0, void 0, function () {\n return tslib_1.__generator(this, function (_a) {\n return [2 /*return*/, Promise.resolve({\n reason: \"NoopTransport: Event has been skipped because no Dsn is configured.\",\n status: types_1.Status.Skipped,\n })];\n });\n });\n };\n /**\n * @inheritDoc\n */\n NoopTransport.prototype.close = function (_) {\n return tslib_1.__awaiter(this, void 0, void 0, function () {\n return tslib_1.__generator(this, function (_a) {\n return [2 /*return*/, Promise.resolve(true)];\n });\n });\n };\n return NoopTransport;\n}());\nexports.NoopTransport = NoopTransport;\n//# sourceMappingURL=noop.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@sentry/core/dist/transports/noop.js\n// module id = LOEF\n// module chunks = 0","var assign = make_assign()\nvar create = make_create()\nvar trim = make_trim()\nvar Global = (typeof window !== 'undefined' ? window : global)\n\nmodule.exports = {\n\tassign: assign,\n\tcreate: create,\n\ttrim: trim,\n\tbind: bind,\n\tslice: slice,\n\teach: each,\n\tmap: map,\n\tpluck: pluck,\n\tisList: isList,\n\tisFunction: isFunction,\n\tisObject: isObject,\n\tGlobal: Global\n}\n\nfunction make_assign() {\n\tif (Object.assign) {\n\t\treturn Object.assign\n\t} else {\n\t\treturn function shimAssign(obj, props1, props2, etc) {\n\t\t\tfor (var i = 1; i < arguments.length; i++) {\n\t\t\t\teach(Object(arguments[i]), function(val, key) {\n\t\t\t\t\tobj[key] = val\n\t\t\t\t})\n\t\t\t}\t\t\t\n\t\t\treturn obj\n\t\t}\n\t}\n}\n\nfunction make_create() {\n\tif (Object.create) {\n\t\treturn function create(obj, assignProps1, assignProps2, etc) {\n\t\t\tvar assignArgsList = slice(arguments, 1)\n\t\t\treturn assign.apply(this, [Object.create(obj)].concat(assignArgsList))\n\t\t}\n\t} else {\n\t\tfunction F() {} // eslint-disable-line no-inner-declarations\n\t\treturn function create(obj, assignProps1, assignProps2, etc) {\n\t\t\tvar assignArgsList = slice(arguments, 1)\n\t\t\tF.prototype = obj\n\t\t\treturn assign.apply(this, [new F()].concat(assignArgsList))\n\t\t}\n\t}\n}\n\nfunction make_trim() {\n\tif (String.prototype.trim) {\n\t\treturn function trim(str) {\n\t\t\treturn String.prototype.trim.call(str)\n\t\t}\n\t} else {\n\t\treturn function trim(str) {\n\t\t\treturn str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '')\n\t\t}\n\t}\n}\n\nfunction bind(obj, fn) {\n\treturn function() {\n\t\treturn fn.apply(obj, Array.prototype.slice.call(arguments, 0))\n\t}\n}\n\nfunction slice(arr, index) {\n\treturn Array.prototype.slice.call(arr, index || 0)\n}\n\nfunction each(obj, fn) {\n\tpluck(obj, function(val, key) {\n\t\tfn(val, key)\n\t\treturn false\n\t})\n}\n\nfunction map(obj, fn) {\n\tvar res = (isList(obj) ? [] : {})\n\tpluck(obj, function(v, k) {\n\t\tres[k] = fn(v, k)\n\t\treturn false\n\t})\n\treturn res\n}\n\nfunction pluck(obj, fn) {\n\tif (isList(obj)) {\n\t\tfor (var i=0; i 1) {\n path = split.slice(0, -1).join('/');\n projectId = split.pop();\n }\n object_1.assign(this, { host: host, pass: pass, path: path, projectId: projectId, port: port, protocol: protocol, user: user });\n };\n /** Maps Dsn components into this instance. */\n Dsn.prototype.fromComponents = function (components) {\n this.protocol = components.protocol;\n this.user = components.user;\n this.pass = components.pass || '';\n this.host = components.host;\n this.port = components.port || '';\n this.path = components.path || '';\n this.projectId = components.projectId;\n };\n /** Validates this Dsn and throws on error. */\n Dsn.prototype.validate = function () {\n var e_1, _a;\n try {\n for (var _b = tslib_1.__values(['protocol', 'user', 'host', 'projectId']), _c = _b.next(); !_c.done; _c = _b.next()) {\n var component = _c.value;\n if (!this[component]) {\n throw new error_1.SentryError(\"Invalid Dsn: Missing \" + component);\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_1) throw e_1.error; }\n }\n if (this.protocol !== 'http' && this.protocol !== 'https') {\n throw new error_1.SentryError(\"Invalid Dsn: Unsupported protocol \\\"\" + this.protocol + \"\\\"\");\n }\n if (this.port && is_1.isNaN(parseInt(this.port, 10))) {\n throw new error_1.SentryError(\"Invalid Dsn: Invalid port number \\\"\" + this.port + \"\\\"\");\n }\n };\n return Dsn;\n}());\nexports.Dsn = Dsn;\n//# sourceMappingURL=dsn.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@sentry/core/dist/dsn.js\n// module id = MzuG\n// module chunks = 0","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar logger_1 = require(\"@sentry/utils/logger\");\nvar object_1 = require(\"@sentry/utils/object\");\nvar error_1 = require(\"./error\");\nvar noop_1 = require(\"./transports/noop\");\n/**\n * This is the base implemention of a Backend.\n */\nvar BaseBackend = /** @class */ (function () {\n /** Creates a new browser backend instance. */\n function BaseBackend(options) {\n this.options = options;\n if (!this.options.dsn) {\n logger_1.logger.warn('No DSN provided, backend will not do anything.');\n }\n this.transport = this.setupTransport();\n }\n /**\n * Sets up the transport so it can be used later to send requests.\n */\n BaseBackend.prototype.setupTransport = function () {\n return new noop_1.NoopTransport();\n };\n /**\n * @inheritDoc\n */\n BaseBackend.prototype.eventFromException = function (_exception, _hint) {\n return tslib_1.__awaiter(this, void 0, void 0, function () {\n return tslib_1.__generator(this, function (_a) {\n throw new error_1.SentryError('Backend has to implement `eventFromException` method');\n });\n });\n };\n /**\n * @inheritDoc\n */\n BaseBackend.prototype.eventFromMessage = function (_message, _level, _hint) {\n return tslib_1.__awaiter(this, void 0, void 0, function () {\n return tslib_1.__generator(this, function (_a) {\n throw new error_1.SentryError('Backend has to implement `eventFromMessage` method');\n });\n });\n };\n /**\n * @inheritDoc\n */\n BaseBackend.prototype.sendEvent = function (event) {\n return tslib_1.__awaiter(this, void 0, void 0, function () {\n return tslib_1.__generator(this, function (_a) {\n // TODO: Remove with v5\n // tslint:disable-next-line\n if (this.transport.captureEvent) {\n // tslint:disable-next-line\n return [2 /*return*/, this.transport.captureEvent(event)];\n }\n // --------------------\n return [2 /*return*/, this.transport.sendEvent(object_1.serialize(event))];\n });\n });\n };\n /**\n * @inheritDoc\n */\n BaseBackend.prototype.storeBreadcrumb = function (_) {\n return true;\n };\n /**\n * @inheritDoc\n */\n BaseBackend.prototype.storeScope = function (_) {\n // Noop\n };\n /**\n * @inheritDoc\n */\n BaseBackend.prototype.getTransport = function () {\n return this.transport;\n };\n return BaseBackend;\n}());\nexports.BaseBackend = BaseBackend;\n//# sourceMappingURL=basebackend.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@sentry/core/dist/basebackend.js\n// module id = NJTI\n// module chunks = 0","var ctx = require('./_ctx');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar getIterFn = require('./core.get-iterator-method');\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//////////////////\n// WEBPACK FOOTER\n// ./node_modules/core-js/library/modules/_for-of.js\n// module id = NWt+\n// module chunks = 0","/*!\n * vuex v3.6.0\n * (c) 2020 Evan You\n * @license MIT\n */\nfunction applyMixin (Vue) {\n var version = Number(Vue.version.split('.')[0]);\n\n if (version >= 2) {\n Vue.mixin({ beforeCreate: vuexInit });\n } else {\n // override init and inject vuex init procedure\n // for 1.x backwards compatibility.\n var _init = Vue.prototype._init;\n Vue.prototype._init = function (options) {\n if ( options === void 0 ) options = {};\n\n options.init = options.init\n ? [vuexInit].concat(options.init)\n : vuexInit;\n _init.call(this, options);\n };\n }\n\n /**\n * Vuex init hook, injected into each instances init hooks list.\n */\n\n function vuexInit () {\n var options = this.$options;\n // store injection\n if (options.store) {\n this.$store = typeof options.store === 'function'\n ? options.store()\n : options.store;\n } else if (options.parent && options.parent.$store) {\n this.$store = options.parent.$store;\n }\n }\n}\n\nvar target = typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined'\n ? global\n : {};\nvar devtoolHook = target.__VUE_DEVTOOLS_GLOBAL_HOOK__;\n\nfunction devtoolPlugin (store) {\n if (!devtoolHook) { return }\n\n store._devtoolHook = devtoolHook;\n\n devtoolHook.emit('vuex:init', store);\n\n devtoolHook.on('vuex:travel-to-state', function (targetState) {\n store.replaceState(targetState);\n });\n\n store.subscribe(function (mutation, state) {\n devtoolHook.emit('vuex:mutation', mutation, state);\n }, { prepend: true });\n\n store.subscribeAction(function (action, state) {\n devtoolHook.emit('vuex:action', action, state);\n }, { prepend: true });\n}\n\n/**\n * Get the first item that pass the test\n * by second argument function\n *\n * @param {Array} list\n * @param {Function} f\n * @return {*}\n */\nfunction find (list, f) {\n return list.filter(f)[0]\n}\n\n/**\n * Deep copy the given object considering circular structure.\n * This function caches all nested objects and its copies.\n * If it detects circular structure, use cached copy to avoid infinite loop.\n *\n * @param {*} obj\n * @param {Array