UNPKG

666 kBSource Map (JSON)View Raw
1{"version":3,"file":"my-f2.js","sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap 865313d5ebf978a8a8cf","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/util/common.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/global.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/graphic/shape.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/graphic/index.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/geom/base.js","webpack:///./node_modules/_@antv_util@1.2.5@@antv/util/lib/each.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/geom/shape/shape.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/graphic/util/vector2.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/component/guide/base.js","webpack:///./node_modules/_@antv_util@1.2.5@@antv/util/lib/type/is-type.js","webpack:///./node_modules/_@antv_util@1.2.5@@antv/util/lib/type/is-nil.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/chart/chart.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/graphic/util/bbox.js","webpack:///./node_modules/_@antv_util@1.2.5@@antv/util/lib/type/is-string.js","webpack:///./node_modules/_@antv_util@1.2.5@@antv/util/lib/type/is-number.js","webpack:///./node_modules/_@antv_util@1.2.5@@antv/util/lib/type/is-array.js","webpack:///./node_modules/_@antv_scale@0.0.9@@antv/scale/lib/base.js","webpack:///./node_modules/_@antv_util@1.2.5@@antv/util/lib/type/is-object.js","webpack:///./node_modules/_@antv_attr@0.0.7@@antv/attr/lib/base.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/util/helper.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/geom/shape/util.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/interaction/base.js","webpack:///./node_modules/_@antv_util@1.2.5@@antv/util/lib/mix.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/coord/base.js","webpack:///./node_modules/_@antv_adjust@0.1.1@@antv/adjust/lib/base.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/component/axis/abstract.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/graphic/element.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/graphic/util/matrix.js","webpack:///./node_modules/_@antv_scale@0.0.9@@antv/scale/lib/time-util.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/interaction/helper.js","webpack:///./node_modules/_@antv_util@1.2.5@@antv/util/lib/to-string.js","webpack:///./node_modules/_@antv_util@1.2.5@@antv/util/lib/type/is-date.js","webpack:///./node_modules/_@antv_util@1.2.5@@antv/util/lib/type/is-plain-object.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/base.js","webpack:///./node_modules/_@antv_scale@0.0.9@@antv/scale/lib/category.js","webpack:///./node_modules/_@antv_scale@0.0.9@@antv/scale/lib/auto/cat.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/graphic/container.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/graphic/group.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/graphic/util/requestAnimationFrame.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/graphic/util/smooth.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/geom/path.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/geom/shape/line.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/geom/mixin/size.js","webpack:///./node_modules/_@antv_util@1.3.1@@antv/util/lib/type/is-array.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/component/marker.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/component/list.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/animation/animate.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/animation/util.js","webpack:///./src/index.js","webpack:///./src/core.js","webpack:///./src/renderer.js","webpack:///./node_modules/_wolfy87-eventemitter@5.2.5@wolfy87-eventemitter/EventEmitter.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/core.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/theme.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/util/dom.js","webpack:///./node_modules/_@antv_util@1.2.5@@antv/util/lib/string/upper-first.js","webpack:///./node_modules/_@antv_util@1.2.5@@antv/util/lib/string/lower-first.js","webpack:///./node_modules/_@antv_util@1.2.5@@antv/util/lib/type/is-boolean.js","webpack:///./node_modules/_@antv_util@1.2.5@@antv/util/lib/type/is-function.js","webpack:///./node_modules/_@antv_util@1.2.5@@antv/util/lib/type/is-object-like.js","webpack:///./node_modules/_@antv_util@1.2.5@@antv/util/lib/deep-mix.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/chart/plot.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/coord/index.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/coord/cartesian.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/attr/index.js","webpack:///./node_modules/_@antv_attr@0.0.7@@antv/attr/lib/position.js","webpack:///./node_modules/_@antv_attr@0.0.7@@antv/attr/lib/shape.js","webpack:///./node_modules/_@antv_attr@0.0.7@@antv/attr/lib/size.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/attr/color.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/attr/color-util.js","webpack:///./node_modules/_@antv_util@1.3.1@@antv/util/lib/mix.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/chart/controller/scale.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/scale/index.js","webpack:///./node_modules/_@antv_scale@0.0.9@@antv/scale/lib/linear.js","webpack:///./node_modules/_@antv_scale@0.0.9@@antv/scale/lib/auto/number.js","webpack:///./node_modules/_@antv_scale@0.0.9@@antv/scale/lib/auto/util.js","webpack:///./node_modules/_@antv_scale@0.0.9@@antv/scale/lib/identity.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/chart/controller/axis.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/component/axis/index.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/component/axis/line.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/graphic/canvas.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/graphic/util/style-parse.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/graphic/shape/rect.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/graphic/shape/circle.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/graphic/shape/line.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/graphic/shape/polygon.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/graphic/shape/polyline.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/graphic/shape/arc.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/graphic/shape/sector.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/graphic/shape/text.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/graphic/shape/custom.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/geom/index.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/geom/point.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/geom/shape/point.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/geom/line.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/geom/area.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/geom/shape/area.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/geom/interval.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/geom/shape/interval.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/geom/polygon.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/geom/shape/polygon.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/geom/schema.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/geom/shape/schema.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/geom/adjust/index.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/geom/adjust/stack.js","webpack:///./node_modules/_@antv_adjust@0.1.1@@antv/adjust/lib/stack.js","webpack:///./node_modules/_@antv_util@1.3.1@@antv/util/lib/type/is-type.js","webpack:///./node_modules/_@antv_util@1.3.1@@antv/util/lib/type/is-nil.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/geom/adjust/dodge.js","webpack:///./node_modules/_@antv_adjust@0.1.1@@antv/adjust/lib/dodge.js","webpack:///./node_modules/_@antv_util@1.3.1@@antv/util/lib/each.js","webpack:///./node_modules/_@antv_util@1.3.1@@antv/util/lib/type/is-object.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/coord/polar.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/component/axis/circle.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/scale/time-cat.js","webpack:///./node_modules/_@antv_scale@0.0.9@@antv/scale/lib/time-cat.js","webpack:///./node_modules/_fecha@2.3.3@fecha/fecha.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/component/guide/arc.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/component/guide/line.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/component/guide/text.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/component/guide/tag.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/component/guide/rect.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/component/guide/region-filter.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/component/guide/point.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/plugin/tooltip.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/component/tooltip.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/component/text-box.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/plugin/guide.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/plugin/legend.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/animation/detail.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/graphic/animate/timeline.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/graphic/animate/animator.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/graphic/animate/easing.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/animation/shape-action.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/animation/group-action.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/plugin/scroll-bar.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/plugin/pie-label.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/interaction/pie-select.js","webpack:///./node_modules/_hammerjs@2.0.8@hammerjs/hammer.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/interaction/interval-select.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/interaction/pan.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/plugin/filter.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/interaction/mixin/move.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/interaction/mixin/press-tooltip.js","webpack:///./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/interaction/mixin/update-scale.js"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"myF2\"] = factory();\n\telse\n\t\troot[\"myF2\"] = factory();\n})(typeof self !== 'undefined' ? self : this, function() {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 48);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 865313d5ebf978a8a8cf","/**\n * @fileOverview Utility for F2\n * @author dxq613 @gmail.com\n * @author sima.zhang1990@gmail.com\n */\nvar DomUtil = require('./dom');\n\nvar Util = {\n upperFirst: require('@antv/util/lib/string/upper-first'),\n lowerFirst: require('@antv/util/lib/string/lower-first'),\n isString: require('@antv/util/lib/type/is-string'),\n isNumber: require('@antv/util/lib/type/is-number'),\n isBoolean: require('@antv/util/lib/type/is-boolean'),\n isFunction: require('@antv/util/lib/type/is-function'),\n isDate: require('@antv/util/lib/type/is-date'),\n isArray: require('@antv/util/lib/type/is-array'),\n isNil: require('@antv/util/lib/type/is-nil'),\n isObject: require('@antv/util/lib/type/is-object'),\n isPlainObject: require('@antv/util/lib/type/is-plain-object'),\n deepMix: require('@antv/util/lib/deep-mix'),\n mix: require('@antv/util/lib/mix'),\n each: require('@antv/util/lib/each'),\n isObjectValueEqual: function isObjectValueEqual(a, b) {\n // for vue.js\n a = Object.assign({}, a);\n b = Object.assign({}, b);\n var aProps = Object.getOwnPropertyNames(a);\n var bProps = Object.getOwnPropertyNames(b);\n\n if (aProps.length !== bProps.length) {\n return false;\n }\n\n for (var i = 0, len = aProps.length; i < len; i++) {\n var propName = aProps[i];\n\n if (a[propName] !== b[propName]) {\n return false;\n }\n }\n\n return true;\n },\n wrapBehavior: function wrapBehavior(obj, action) {\n if (obj['_wrap_' + action]) {\n return obj['_wrap_' + action];\n }\n\n var method = function method(e) {\n obj[action](e);\n };\n\n obj['_wrap_' + action] = method;\n return method;\n },\n getWrapBehavior: function getWrapBehavior(obj, action) {\n return obj['_wrap_' + action];\n },\n parsePadding: function parsePadding(padding) {\n var top;\n var right;\n var bottom;\n var left;\n\n if (Util.isNumber(padding) || Util.isString(padding)) {\n top = bottom = left = right = padding;\n } else if (Util.isArray(padding)) {\n top = padding[0];\n right = !Util.isNil(padding[1]) ? padding[1] : padding[0];\n bottom = !Util.isNil(padding[2]) ? padding[2] : padding[0];\n left = !Util.isNil(padding[3]) ? padding[3] : right;\n }\n\n return [top, right, bottom, left];\n },\n directionEnabled: function directionEnabled(mode, dir) {\n if (mode === undefined) {\n return true;\n } else if (typeof mode === 'string') {\n return mode.indexOf(dir) !== -1;\n }\n\n return false;\n }\n};\nUtil.Array = {\n merge: function merge(dataArray) {\n var rst = [];\n\n for (var i = 0, len = dataArray.length; i < len; i++) {\n rst = rst.concat(dataArray[i]);\n }\n\n return rst;\n },\n values: function values(data, name) {\n var rst = [];\n var tmpMap = {};\n\n for (var i = 0, len = data.length; i < len; i++) {\n var obj = data[i];\n var value = obj[name];\n\n if (!Util.isNil(value)) {\n if (!Util.isArray(value)) {\n if (!tmpMap[value]) {\n rst.push(value);\n tmpMap[value] = true;\n }\n } else {\n Util.each(value, function (val) {\n if (!tmpMap[val]) {\n rst.push(val);\n tmpMap[val] = true;\n }\n });\n }\n }\n }\n\n return rst;\n },\n firstValue: function firstValue(data, name) {\n var rst = null;\n\n for (var i = 0, len = data.length; i < len; i++) {\n var obj = data[i];\n var value = obj[name];\n\n if (!Util.isNil(value)) {\n if (Util.isArray(value)) {\n rst = value[0];\n } else {\n rst = value;\n }\n\n break;\n }\n }\n\n return rst;\n },\n group: function group(data, fields, appendConditions) {\n if (appendConditions === void 0) {\n appendConditions = {};\n }\n\n if (!fields) {\n return [data];\n }\n\n var groups = Util.Array.groupToMap(data, fields);\n var array = [];\n\n if (fields.length === 1 && appendConditions[fields[0]]) {\n var values = appendConditions[fields[0]];\n Util.each(values, function (value) {\n value = '_' + value;\n array.push(groups[value]);\n });\n } else {\n for (var i in groups) {\n array.push(groups[i]);\n }\n }\n\n return array;\n },\n groupToMap: function groupToMap(data, fields) {\n if (!fields) {\n return {\n 0: data\n };\n }\n\n var callback = function callback(row) {\n var unique = '_';\n\n for (var i = 0, l = fields.length; i < l; i++) {\n unique += row[fields[i]] && row[fields[i]].toString();\n }\n\n return unique;\n };\n\n var groups = {};\n\n for (var i = 0, len = data.length; i < len; i++) {\n var row = data[i];\n var key = callback(row);\n\n if (groups[key]) {\n groups[key].push(row);\n } else {\n groups[key] = [row];\n }\n }\n\n return groups;\n },\n remove: function remove(arr, obj) {\n if (!arr) {\n return;\n }\n\n var index = arr.indexOf(obj);\n\n if (index !== -1) {\n arr.splice(index, 1);\n }\n },\n getRange: function getRange(values) {\n if (!values.length) {\n return {\n min: 0,\n max: 0\n };\n }\n\n var max = Math.max.apply(null, values);\n var min = Math.min.apply(null, values);\n return {\n min: min,\n max: max\n };\n }\n};\nUtil.mix(Util, DomUtil);\nmodule.exports = Util;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/util/common.js\n// module id = 0\n// module chunks = 0","var Theme = require('./theme');\n\nvar Util = require('./util/common');\n\nvar Global = {\n version: '3.3.5',\n scales: {},\n widthRatio: {\n column: 1 / 2,\n rose: 0.999999,\n multiplePie: 3 / 4\n },\n lineDash: [4, 4]\n};\n\nGlobal.setTheme = function (theme) {\n Util.deepMix(this, theme);\n};\n\nGlobal.setTheme(Theme);\nmodule.exports = Global;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/global.js\n// module id = 1\n// module chunks = 0","function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}\n\nvar Util = require('../util/common');\n\nvar Element = require('./element');\n\nvar Shape =\n/*#__PURE__*/\nfunction (_Element) {\n _inheritsLoose(Shape, _Element);\n\n function Shape() {\n return _Element.apply(this, arguments) || this;\n }\n\n var _proto = Shape.prototype;\n\n _proto._initProperties = function _initProperties() {\n this._attrs = {\n zIndex: 0,\n visible: true,\n destroyed: false,\n isShape: true,\n attrs: {}\n };\n };\n\n _proto.getType = function getType() {\n return this._attrs.type;\n };\n\n _proto.drawInner = function drawInner(context) {\n var self = this;\n var attrs = self.get('attrs');\n self.createPath(context);\n var originOpacity = context.globalAlpha;\n\n if (self.hasFill()) {\n var fillOpacity = attrs.fillOpacity;\n\n if (!Util.isNil(fillOpacity) && fillOpacity !== 1) {\n context.globalAlpha = fillOpacity;\n context.fill();\n context.globalAlpha = originOpacity;\n } else {\n context.fill();\n }\n }\n\n if (self.hasStroke()) {\n var lineWidth = attrs.lineWidth;\n\n if (lineWidth > 0) {\n var strokeOpacity = attrs.strokeOpacity;\n\n if (!Util.isNil(strokeOpacity) && strokeOpacity !== 1) {\n context.globalAlpha = strokeOpacity;\n }\n\n context.stroke();\n }\n }\n };\n\n _proto.getBBox = function getBBox() {\n var bbox = this._attrs.bbox;\n\n if (!bbox) {\n bbox = this.calculateBox();\n\n if (bbox) {\n bbox.x = bbox.minX;\n bbox.y = bbox.minY;\n bbox.width = bbox.maxX - bbox.minX;\n bbox.height = bbox.maxY - bbox.minY;\n }\n\n this._attrs.bbox = bbox;\n }\n\n return bbox;\n };\n\n _proto.calculateBox = function calculateBox() {\n return null;\n };\n\n _proto.createPath = function createPath() {};\n\n return Shape;\n}(Element);\n\nmodule.exports = Shape;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/graphic/shape.js\n// module id = 2\n// module chunks = 0","var G = {\n Canvas: require('./canvas'),\n Group: require('./group'),\n Shape: require('./shape'),\n Matrix: require('./util/matrix'),\n Vector2: require('./util/vector2')\n};\n\nrequire('./shape/rect');\n\nrequire('./shape/circle');\n\nrequire('./shape/line');\n\nrequire('./shape/polygon');\n\nrequire('./shape/polyline');\n\nrequire('./shape/arc');\n\nrequire('./shape/sector');\n\nrequire('./shape/text');\n\nrequire('./shape/custom');\n\nmodule.exports = G;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/graphic/index.js\n// module id = 3\n// module chunks = 0","function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}\n\nvar Util = require('../util/common');\n\nvar Base = require('../base');\n\nvar GROUP_ATTRS = ['color', 'size', 'shape'];\nvar FIELD_ORIGIN = '_origin';\nvar FIELD_ORIGIN_Y = '_originY';\n\nvar Global = require('../global');\n\nvar Attr = require('../attr/index');\n\nvar GeometryShape = require('./shape/shape');\n\nvar Adjust = require('@antv/adjust/lib/base');\n\nfunction parseFields(field) {\n if (Util.isArray(field)) {\n return field;\n }\n\n if (Util.isString(field)) {\n return field.split('*');\n }\n\n return [field];\n}\n/**\n * The parent class for Geometry\n * @class Geom\n */\n\n\nvar Geom =\n/*#__PURE__*/\nfunction (_Base) {\n _inheritsLoose(Geom, _Base);\n\n function Geom() {\n return _Base.apply(this, arguments) || this;\n }\n\n var _proto = Geom.prototype;\n\n _proto.getDefaultCfg = function getDefaultCfg() {\n return {\n /**\n * geometry type\n * @type {String}\n */\n type: null,\n\n /**\n * the data of geometry\n * @type {Array}\n */\n data: null,\n\n /**\n * the attrs of geo,etry\n * @type {Object}\n */\n attrs: {},\n scales: {},\n\n /**\n * group for storing the shapes\n * @type {Canvas}\n */\n container: null,\n\n /**\n * style options\n * @type {Object}\n */\n styleOptions: null,\n chart: null,\n shapeType: '',\n\n /**\n * wether to generate key points for each shape\n * @protected\n * @type {Boolean}\n */\n generatePoints: false,\n attrOptions: {},\n sortable: false,\n startOnZero: true,\n visible: true,\n connectNulls: false\n };\n };\n\n _proto.init = function init() {\n var self = this;\n\n self._initAttrs();\n\n var dataArray = self._processData();\n\n if (self.get('adjust')) {\n self._adjustData(dataArray);\n }\n\n self.set('dataArray', dataArray);\n };\n\n _proto._getGroupScales = function _getGroupScales() {\n var self = this;\n var scales = [];\n Util.each(GROUP_ATTRS, function (attrName) {\n var attr = self.getAttr(attrName);\n\n if (attr) {\n var attrScales = attr.scales;\n Util.each(attrScales, function (scale) {\n if (scale && scale.isCategory && scales.indexOf(scale) === -1) {\n scales.push(scale);\n }\n });\n }\n });\n return scales;\n };\n\n _proto._groupData = function _groupData(data) {\n var self = this;\n var colDefs = self.get('colDefs');\n\n var groupScales = self._getGroupScales();\n\n if (groupScales.length) {\n var appendConditions = {};\n var names = [];\n Util.each(groupScales, function (scale) {\n var field = scale.field;\n names.push(field);\n\n if (colDefs && colDefs[field] && colDefs[field].values) {\n // users have defined\n appendConditions[scale.field] = colDefs[field].values;\n }\n });\n return Util.Array.group(data, names, appendConditions);\n }\n\n return [data];\n };\n\n _proto._setAttrOptions = function _setAttrOptions(attrName, attrCfg) {\n var options = this.get('attrOptions');\n options[attrName] = attrCfg;\n };\n\n _proto._createAttrOption = function _createAttrOption(attrName, field, cfg, defaultValues) {\n var attrCfg = {};\n attrCfg.field = field;\n\n if (cfg) {\n if (Util.isFunction(cfg)) {\n attrCfg.callback = cfg;\n } else {\n attrCfg.values = cfg;\n }\n } else {\n attrCfg.values = defaultValues;\n }\n\n this._setAttrOptions(attrName, attrCfg);\n };\n\n _proto._initAttrs = function _initAttrs() {\n var self = this;\n var attrs = self.get('attrs');\n var attrOptions = self.get('attrOptions');\n var coord = self.get('coord');\n\n for (var type in attrOptions) {\n if (attrOptions.hasOwnProperty(type)) {\n var option = attrOptions[type];\n var className = Util.upperFirst(type);\n var fields = parseFields(option.field);\n\n if (type === 'position') {\n option.coord = coord;\n }\n\n var scales = [];\n\n for (var i = 0, len = fields.length; i < len; i++) {\n var field = fields[i];\n\n var scale = self._createScale(field);\n\n scales.push(scale);\n }\n\n if (type === 'position') {\n var yScale = scales[1];\n\n if (coord.type === 'polar' && coord.transposed && self.hasAdjust('stack')) {\n if (yScale.values.length) {\n yScale.change({\n nice: false,\n min: 0,\n max: Math.max.apply(null, yScale.values)\n });\n }\n }\n }\n\n option.scales = scales;\n var attr = new Attr[className](option);\n attrs[type] = attr;\n }\n }\n };\n\n _proto._createScale = function _createScale(field) {\n var scales = this.get('scales');\n var scale = scales[field];\n\n if (!scale) {\n scale = this.get('chart').createScale(field);\n scales[field] = scale;\n }\n\n return scale;\n };\n\n _proto._processData = function _processData() {\n var self = this;\n var data = this.get('data');\n var dataArray = [];\n\n var groupedArray = this._groupData(data);\n\n for (var i = 0, len = groupedArray.length; i < len; i++) {\n var subData = groupedArray[i];\n\n var tempData = self._saveOrigin(subData);\n\n if (this.hasAdjust('dodge')) {\n self._numberic(tempData);\n }\n\n dataArray.push(tempData);\n }\n\n return dataArray;\n };\n\n _proto._saveOrigin = function _saveOrigin(data) {\n var rst = [];\n\n for (var i = 0, len = data.length; i < len; i++) {\n var origin = data[i];\n var obj = {};\n\n for (var k in origin) {\n obj[k] = origin[k];\n }\n\n obj[FIELD_ORIGIN] = origin;\n rst.push(obj);\n }\n\n return rst;\n };\n\n _proto._numberic = function _numberic(data) {\n var positionAttr = this.getAttr('position');\n var scales = positionAttr.scales;\n\n for (var j = 0, len = data.length; j < len; j++) {\n var obj = data[j];\n var count = Math.min(2, scales.length);\n\n for (var i = 0; i < count; i++) {\n var scale = scales[i];\n\n if (scale.isCategory) {\n var field = scale.field;\n obj[field] = scale.translate(obj[field]);\n }\n }\n }\n };\n\n _proto._adjustData = function _adjustData(dataArray) {\n var self = this;\n var adjust = self.get('adjust');\n\n if (adjust) {\n var adjustType = Util.upperFirst(adjust.type);\n\n if (!Adjust[adjustType]) {\n throw new Error('not support such adjust : ' + adjust);\n }\n\n var xScale = self.getXScale();\n var yScale = self.getYScale();\n var cfg = Util.mix({\n xField: xScale.field,\n yField: yScale.field\n }, adjust);\n var adjustObject = new Adjust[adjustType](cfg);\n adjustObject.processAdjust(dataArray);\n\n if (adjustType === 'Stack') {\n self._updateStackRange(yScale.field, yScale, dataArray);\n }\n }\n };\n\n _proto._updateStackRange = function _updateStackRange(field, scale, dataArray) {\n var mergeArray = Util.Array.merge(dataArray);\n var min = scale.min;\n var max = scale.max;\n\n for (var i = 0, len = mergeArray.length; i < len; i++) {\n var obj = mergeArray[i];\n var tmpMin = Math.min.apply(null, obj[field]);\n var tmpMax = Math.max.apply(null, obj[field]);\n\n if (tmpMin < min) {\n min = tmpMin;\n }\n\n if (tmpMax > max) {\n max = tmpMax;\n }\n }\n\n if (min < scale.min || max > scale.max) {\n scale.change({\n min: min,\n max: max\n });\n }\n };\n\n _proto._sort = function _sort(mappedArray) {\n var self = this;\n var xScale = self.getXScale();\n var field = xScale.field,\n type = xScale.type;\n\n if (type !== 'identity' && xScale.values.length > 1) {\n Util.each(mappedArray, function (itemArr) {\n itemArr.sort(function (obj1, obj2) {\n if (type === 'timeCat') {\n return xScale._toTimeStamp(obj1[FIELD_ORIGIN][field]) - xScale._toTimeStamp(obj2[FIELD_ORIGIN][field]);\n }\n\n return xScale.translate(obj1[FIELD_ORIGIN][field]) - xScale.translate(obj2[FIELD_ORIGIN][field]);\n });\n });\n }\n\n self.set('hasSorted', true);\n self.set('dataArray', mappedArray);\n };\n\n _proto.paint = function paint() {\n var self = this;\n var dataArray = self.get('dataArray');\n var mappedArray = [];\n var shapeFactory = self.getShapeFactory();\n shapeFactory.setCoord(self.get('coord'));\n\n self._beforeMapping(dataArray);\n\n for (var i = 0, len = dataArray.length; i < len; i++) {\n var data = dataArray[i];\n\n if (data.length) {\n data = self._mapping(data);\n mappedArray.push(data);\n self.draw(data, shapeFactory);\n }\n }\n\n self.set('dataArray', mappedArray);\n };\n\n _proto.getShapeFactory = function getShapeFactory() {\n var shapeFactory = this.get('shapeFactory');\n\n if (!shapeFactory) {\n var shapeType = this.get('shapeType');\n shapeFactory = GeometryShape.getShapeFactory(shapeType);\n this.set('shapeFactory', shapeFactory);\n }\n\n return shapeFactory;\n };\n\n _proto._mapping = function _mapping(data) {\n var self = this;\n var attrs = self.get('attrs');\n var yField = self.getYScale().field;\n var mappedData = [];\n\n for (var i = 0, len = data.length; i < len; i++) {\n var record = data[i];\n var newRecord = {};\n newRecord[FIELD_ORIGIN] = record[FIELD_ORIGIN];\n newRecord.points = record.points; // 避免\n\n newRecord[FIELD_ORIGIN_Y] = record[yField];\n\n for (var k in attrs) {\n if (attrs.hasOwnProperty(k)) {\n var attr = attrs[k];\n var names = attr.names;\n\n var values = self._getAttrValues(attr, record);\n\n if (names.length > 1) {\n for (var j = 0, _len = values.length; j < _len; j++) {\n var val = values[j];\n var name = names[j];\n newRecord[name] = Util.isArray(val) && val.length === 1 ? val[0] : val;\n }\n } else {\n newRecord[names[0]] = values.length === 1 ? values[0] : values;\n }\n }\n }\n\n mappedData.push(newRecord);\n }\n\n return mappedData;\n };\n\n _proto._getAttrValues = function _getAttrValues(attr, record) {\n var scales = attr.scales;\n var params = [];\n\n for (var i = 0, len = scales.length; i < len; i++) {\n var scale = scales[i];\n var field = scale.field;\n\n if (scale.type === 'identity') {\n params.push(scale.value);\n } else {\n params.push(record[field]);\n }\n }\n\n var values = attr.mapping.apply(attr, params);\n return values;\n };\n\n _proto.getAttrValue = function getAttrValue(attrName, record) {\n var attr = this.getAttr(attrName);\n var rst = null;\n\n if (attr) {\n var values = this._getAttrValues(attr, record);\n\n rst = values[0];\n }\n\n return rst;\n };\n\n _proto._beforeMapping = function _beforeMapping(dataArray) {\n var self = this;\n\n if (self.get('sortable')) {\n self._sort(dataArray);\n }\n\n if (self.get('generatePoints')) {\n Util.each(dataArray, function (data) {\n self._generatePoints(data);\n });\n }\n };\n\n _proto.isInCircle = function isInCircle() {\n var coord = this.get('coord');\n return coord && coord.isPolar;\n };\n\n _proto.getCallbackCfg = function getCallbackCfg(fields, cfg, origin) {\n if (!fields) {\n return cfg;\n }\n\n var tmpCfg = {};\n var params = fields.map(function (field) {\n return origin[field];\n });\n Util.each(cfg, function (v, k) {\n if (Util.isFunction(v)) {\n tmpCfg[k] = v.apply(null, params);\n } else {\n tmpCfg[k] = v;\n }\n });\n return tmpCfg;\n };\n\n _proto.getDrawCfg = function getDrawCfg(obj) {\n var self = this;\n var isInCircle = self.isInCircle();\n var cfg = {\n origin: obj,\n x: obj.x,\n y: obj.y,\n color: obj.color,\n size: obj.size,\n shape: obj.shape,\n isInCircle: isInCircle,\n opacity: obj.opacity\n };\n var styleOptions = self.get('styleOptions');\n\n if (styleOptions && styleOptions.style) {\n cfg.style = self.getCallbackCfg(styleOptions.fields, styleOptions.style, obj[FIELD_ORIGIN]);\n }\n\n if (self.get('generatePoints')) {\n cfg.points = obj.points;\n }\n\n if (isInCircle) {\n cfg.center = self.get('coord').center;\n }\n\n return cfg;\n };\n\n _proto.draw = function draw(data, shapeFactory) {\n var self = this;\n var container = self.get('container');\n var yScale = self.getYScale();\n Util.each(data, function (obj, index) {\n if (yScale && Util.isNil(obj._origin[yScale.field])) {\n return;\n }\n\n obj.index = index;\n var cfg = self.getDrawCfg(obj);\n var shape = obj.shape;\n self.drawShape(shape, obj, cfg, container, shapeFactory);\n });\n };\n\n _proto.drawShape = function drawShape(shape, shapeData, cfg, container, shapeFactory) {\n var gShape = shapeFactory.drawShape(shape, cfg, container);\n\n if (gShape) {\n Util.each([].concat(gShape), function (s) {\n s.set('origin', shapeData);\n });\n }\n };\n\n _proto._generatePoints = function _generatePoints(data) {\n var self = this;\n var shapeFactory = self.getShapeFactory();\n var shapeAttr = self.getAttr('shape');\n\n for (var i = 0, len = data.length; i < len; i++) {\n var obj = data[i];\n var cfg = self.createShapePointsCfg(obj);\n var shape = shapeAttr ? self._getAttrValues(shapeAttr, obj) : null;\n var points = shapeFactory.getShapePoints(shape, cfg);\n obj.points = points;\n }\n }\n /**\n * get the info of each shape\n * @protected\n * @param {Object} obj the data item\n * @return {Object} cfg return the result\n */\n ;\n\n _proto.createShapePointsCfg = function createShapePointsCfg(obj) {\n var xScale = this.getXScale();\n var yScale = this.getYScale();\n\n var x = this._normalizeValues(obj[xScale.field], xScale);\n\n var y;\n\n if (yScale) {\n y = this._normalizeValues(obj[yScale.field], yScale);\n } else {\n y = obj.y ? obj.y : 0.1;\n }\n\n return {\n x: x,\n y: y,\n y0: yScale ? yScale.scale(this.getYMinValue()) : undefined\n };\n };\n\n _proto.getYMinValue = function getYMinValue() {\n var yScale = this.getYScale();\n var min = yScale.min,\n max = yScale.max;\n var value;\n\n if (this.get('startOnZero')) {\n if (max <= 0 && min <= 0) {\n value = max;\n } else {\n value = min >= 0 ? min : 0;\n }\n } else {\n value = min;\n }\n\n return value;\n };\n\n _proto._normalizeValues = function _normalizeValues(values, scale) {\n var rst = [];\n\n if (Util.isArray(values)) {\n for (var i = 0, len = values.length; i < len; i++) {\n var v = values[i];\n rst.push(scale.scale(v));\n }\n } else {\n rst = scale.scale(values);\n }\n\n return rst;\n };\n\n _proto.getAttr = function getAttr(name) {\n return this.get('attrs')[name];\n };\n\n _proto.getXScale = function getXScale() {\n return this.getAttr('position').scales[0];\n };\n\n _proto.getYScale = function getYScale() {\n return this.getAttr('position').scales[1];\n };\n\n _proto.hasAdjust = function hasAdjust(adjust) {\n return this.get('adjust') && this.get('adjust').type === adjust;\n };\n\n _proto._getSnap = function _getSnap(scale, item, arr) {\n var i = 0;\n var values;\n var yField = this.getYScale().field; // 叠加的维度\n\n if (this.hasAdjust('stack') && scale.field === yField) {\n values = [];\n arr.forEach(function (obj) {\n values.push(obj[FIELD_ORIGIN_Y]);\n });\n\n for (var len = values.length; i < len; i++) {\n if (values[0][0] > item) {\n break;\n }\n\n if (values[values.length - 1][1] <= item) {\n i = values.length - 1;\n break;\n }\n\n if (values[i][0] <= item && values[i][1] > item) {\n break;\n }\n }\n } else {\n values = scale.values;\n values.sort(function (a, b) {\n return a - b;\n });\n\n for (var _len2 = values.length; i < _len2; i++) {\n if ((values[0] + values[1]) / 2 > item) {\n break;\n }\n\n if ((values[i - 1] + values[i]) / 2 <= item && (values[i + 1] + values[i]) / 2 > item) {\n break;\n }\n\n if ((values[values.length - 2] + values[values.length - 1]) / 2 <= item) {\n i = values.length - 1;\n break;\n }\n }\n }\n\n var result = values[i];\n return result;\n };\n\n _proto.getSnapRecords = function getSnapRecords(point) {\n var self = this;\n var coord = self.get('coord');\n var xScale = self.getXScale();\n var yScale = self.getYScale();\n var xfield = xScale.field;\n var dataArray = self.get('dataArray');\n\n if (!this.get('hasSorted')) {\n this._sort(dataArray);\n }\n\n var rst = [];\n var invertPoint = coord.invertPoint(point);\n var invertPointX = invertPoint.x;\n\n if (self.isInCircle() && !coord.transposed && invertPointX > (1 + xScale.rangeMax()) / 2) {\n invertPointX = xScale.rangeMin();\n }\n\n var xValue = xScale.invert(invertPointX);\n\n if (!xScale.isCategory) {\n xValue = self._getSnap(xScale, xValue);\n }\n\n var tmp = [];\n dataArray.forEach(function (data) {\n data.forEach(function (obj) {\n var originValue = Util.isNil(obj[FIELD_ORIGIN]) ? obj[xfield] : obj[FIELD_ORIGIN][xfield];\n\n if (self._isEqual(originValue, xValue, xScale)) {\n tmp.push(obj);\n }\n });\n }); // special for pie chart\n\n if (this.hasAdjust('stack') && coord.isPolar && coord.transposed && xScale.values.length === 1) {\n if (invertPointX >= 0 && invertPointX <= 1) {\n var yValue = yScale.invert(invertPoint.y);\n yValue = self._getSnap(yScale, yValue, tmp);\n tmp.forEach(function (obj) {\n if (Util.isArray(yValue) ? obj[FIELD_ORIGIN_Y].toString() === yValue.toString() : obj[FIELD_ORIGIN_Y] === yValue) {\n rst.push(obj);\n }\n });\n }\n } else {\n rst = tmp;\n }\n\n return rst;\n };\n\n _proto._isEqual = function _isEqual(originValue, value, scale) {\n if (scale.type === 'timeCat') {\n return scale._toTimeStamp(originValue) === value;\n }\n\n return value === originValue;\n };\n\n _proto.position = function position(field) {\n this._setAttrOptions('position', {\n field: field\n });\n\n return this;\n };\n\n _proto.color = function color(field, values) {\n this._createAttrOption('color', field, values, Global.colors);\n\n return this;\n };\n\n _proto.size = function size(field, values) {\n this._createAttrOption('size', field, values, Global.sizes);\n\n return this;\n };\n\n _proto.shape = function shape(field, values) {\n var type = this.get('type');\n var shapes = Global.shapes[type] || [];\n\n this._createAttrOption('shape', field, values, shapes);\n\n return this;\n };\n\n _proto.style = function style(field, cfg) {\n var styleOptions = this.get('styleOptions');\n\n if (!styleOptions) {\n styleOptions = {};\n this.set('styleOptions', styleOptions);\n }\n\n if (Util.isObject(field)) {\n cfg = field;\n field = null;\n }\n\n var fields;\n\n if (field) {\n fields = parseFields(field);\n }\n\n styleOptions.fields = fields;\n styleOptions.style = cfg;\n return this;\n };\n\n _proto.adjust = function adjust(type) {\n if (Util.isString(type)) {\n type = {\n type: type\n };\n }\n\n this.set('adjust', type);\n return this;\n };\n\n _proto.animate = function animate(cfg) {\n this.set('animateCfg', cfg);\n return this;\n };\n\n _proto.reset = function reset() {\n this.set('attrOptions', {});\n this.set('adjust', null);\n this.clearInner();\n };\n\n _proto.clearInner = function clearInner() {\n var container = this.get('container');\n\n if (container) {\n container.clear();\n container.setMatrix([1, 0, 0, 1, 0, 0]);\n }\n\n container && container.clear();\n this.set('attrs', {});\n this.set('groupScales', null);\n this.set('xDistance', null);\n this.set('_width', null);\n };\n\n _proto.clear = function clear() {\n this.clearInner();\n this.set('scales', {});\n };\n\n _proto.destroy = function destroy() {\n this.clear();\n\n _Base.prototype.destroy.call(this);\n };\n\n _proto._display = function _display(visible) {\n this.set('visible', visible);\n var container = this.get('container');\n var canvas = container.get('canvas');\n container.set('visible', visible);\n canvas.draw();\n };\n\n _proto.show = function show() {\n this._display(true);\n };\n\n _proto.hide = function hide() {\n this._display(false);\n };\n\n return Geom;\n}(Base);\n\nmodule.exports = Geom;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/geom/base.js\n// module id = 4\n// module chunks = 0","var isObject = require('./type/is-object');\n\nvar isArray = require('./type/is-array');\n\nvar each = function each(elements, func) {\n if (!elements) {\n return;\n }\n\n var rst = void 0;\n\n if (isArray(elements)) {\n for (var i = 0, len = elements.length; i < len; i++) {\n rst = func(elements[i], i);\n\n if (rst === false) {\n break;\n }\n }\n } else if (isObject(elements)) {\n for (var k in elements) {\n if (elements.hasOwnProperty(k)) {\n rst = func(elements[k], k);\n\n if (rst === false) {\n break;\n }\n }\n }\n }\n};\n\nmodule.exports = each;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_util@1.2.5@@antv/util/lib/each.js\n// module id = 5\n// module chunks = 0","var Util = require('../../util/common');\n\nvar Global = require('../../global');\n\nvar Shape = {};\nvar ShapeBase = {\n _coord: null,\n\n /**\n * draw the shape\n * @param {Object} cfg options\n * @param {Object} container container to store the shapes\n */\n draw: function draw(cfg, container) {\n if (this.drawShape) {\n this.drawShape(cfg, container);\n }\n },\n\n /**\n * set the coordinate instance\n * @param {Coord} coord coordinate instance\n */\n setCoord: function setCoord(coord) {\n this._coord = coord;\n },\n\n /**\n * convert the normalized value to the canvas position\n * @param {point} point the point to convert\n * @return {point} point return the result\n */\n parsePoint: function parsePoint(point) {\n var coord = this._coord;\n\n if (coord.isPolar) {\n if (point.x === 1) point.x = 0.9999999;\n if (point.y === 1) point.y = 0.9999999;\n }\n\n return coord.convertPoint(point);\n },\n\n /**\n * convert the normalized value to the canvas position\n * @param {points} points the array that store the points\n * @return {points} points return the result\n */\n parsePoints: function parsePoints(points) {\n if (!points) return false;\n var self = this;\n var rst = [];\n points.forEach(function (point) {\n rst.push(self.parsePoint(point));\n });\n return rst;\n }\n};\nvar ShapeFactoryBase = {\n defaultShapeType: null,\n setCoord: function setCoord(coord) {\n this._coord = coord;\n },\n getShape: function getShape(type) {\n var self = this;\n\n if (Util.isArray(type)) {\n type = type[0];\n }\n\n var shape = self[type] || self[self.defaultShapeType];\n shape._coord = self._coord;\n return shape;\n },\n getShapePoints: function getShapePoints(type, cfg) {\n var shape = this.getShape(type);\n var fn = shape.getPoints || shape.getShapePoints || this.getDefaultPoints;\n var points = fn(cfg);\n return points;\n },\n getDefaultPoints: function getDefaultPoints()\n /* cfg */\n {\n return [];\n },\n drawShape: function drawShape(type, cfg, container) {\n var shape = this.getShape(type);\n\n if (!cfg.color) {\n cfg.color = Global.colors[0];\n }\n\n return shape.draw(cfg, container);\n }\n};\n\nShape.registerFactory = function (factoryName, cfg) {\n var className = Util.upperFirst(factoryName);\n var geomObj = Util.mix({}, ShapeFactoryBase, cfg);\n Shape[className] = geomObj;\n geomObj.name = factoryName;\n return geomObj;\n};\n\nShape.registerShape = function (factoryName, shapeType, cfg) {\n var className = Util.upperFirst(factoryName);\n var factory = Shape[className];\n var shapeObj = Util.mix({}, ShapeBase, cfg);\n factory[shapeType] = shapeObj;\n return shapeObj;\n};\n\nShape.registShape = Shape.registerShape;\n\nShape.getShapeFactory = function (factoryName) {\n var self = this;\n factoryName = factoryName || 'point';\n var className = Util.upperFirst(factoryName);\n return self[className];\n};\n\nmodule.exports = Shape;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/geom/shape/shape.js\n// module id = 6\n// module chunks = 0","/**\n * 2 Dimensional Vector\n * @module vector2\n */\nmodule.exports = {\n /**\n * Creates a new, empty vector2\n *\n * @return {vector2} a new 2D vector\n */\n create: function create() {\n return [0, 0];\n },\n\n /**\n * Calculates the length of a vector2\n *\n * @param {vector2} v vector to calculate length of\n * @return {Number} length of v\n */\n length: function length(v) {\n var x = v[0];\n var y = v[1];\n return Math.sqrt(x * x + y * y);\n },\n\n /**\n * Normalize a vector2\n *\n * @param {vector2} out the receiving vector\n * @param {vector2} v vector to normalize\n * @return {vector2} out\n */\n normalize: function normalize(out, v) {\n var len = this.length(v);\n\n if (len === 0) {\n out[0] = 0;\n out[1] = 0;\n } else {\n out[0] = v[0] / len;\n out[1] = v[1] / len;\n }\n\n return out;\n },\n\n /**\n * Adds two vector2's\n *\n * @param {vector2} out the receiving vector\n * @param {vector2} v1 the first operand\n * @param {vector2} v2 the second operand\n * @return {vector2} out\n */\n add: function add(out, v1, v2) {\n out[0] = v1[0] + v2[0];\n out[1] = v1[1] + v2[1];\n return out;\n },\n\n /**\n * Subtracts vector v2 from vector v1\n *\n * @param {vector2} out the receiving vector\n * @param {vector2} v1 the first operand\n * @param {vector2} v2 the second operand\n * @return {vector2} out\n */\n sub: function sub(out, v1, v2) {\n out[0] = v1[0] - v2[0];\n out[1] = v1[1] - v2[1];\n return out;\n },\n\n /**\n * Scales a vector2 by a scalar number\n *\n * @param {vector2} out the receiving vector\n * @param {vector2} v the vector to scale\n * @param {Number} s amount to scale the vector by\n * @return {vector2} out\n */\n scale: function scale(out, v, s) {\n out[0] = v[0] * s;\n out[1] = v[1] * s;\n return out;\n },\n\n /**\n * Calculates the dot product of two vector2's\n *\n * @param {vector2} v1 the first operand\n * @param {vector2} v2 the second operand\n * @return {Number} dot product of v1 and v2\n */\n dot: function dot(v1, v2) {\n return v1[0] * v2[0] + v1[1] * v2[1];\n },\n\n /**\n * Calculates the direction of two vector2's\n *\n * @param {vector2} v1 the first operand\n * @param {vector2} v2 the second operand\n * @return {Boolean} the direction of v1 and v2\n */\n direction: function direction(v1, v2) {\n return v1[0] * v2[1] - v2[0] * v1[1];\n },\n\n /**\n * Calculates the angle of two vector2's\n *\n * @param {vector2} v1 the first operand\n * @param {vector2} v2 the second operand\n * @return {Number} angle of v1 and v2\n */\n angle: function angle(v1, v2) {\n var theta = this.dot(v1, v2) / (this.length(v1) * this.length(v2));\n return Math.acos(theta);\n },\n\n /**\n * Calculates the angle of two vector2's with direction\n *\n * @param {vector2} v1 the first operand\n * @param {vector2} v2 the second operand\n * @param {Boolean} direction the direction of two vector2's\n * @return {Number} angle of v1 and v2\n */\n angleTo: function angleTo(v1, v2, direction) {\n var angle = this.angle(v1, v2);\n var angleLargeThanPI = this.direction(v1, v2) >= 0;\n\n if (direction) {\n if (angleLargeThanPI) {\n return Math.PI * 2 - angle;\n }\n\n return angle;\n }\n\n if (angleLargeThanPI) {\n return angle;\n }\n\n return Math.PI * 2 - angle;\n },\n\n /**\n * whether a vector2 is zero vector\n *\n * @param {vector2} v vector to calculate\n * @return {Boolean} is or not a zero vector\n */\n zero: function zero(v) {\n return v[0] === 0 && v[1] === 0;\n },\n\n /**\n * Calculates the euclidian distance between two vector2's\n *\n * @param {vector2} v1 the first operand\n * @param {vector2} v2 the second operand\n * @return {Number} distance between a and b\n */\n distance: function distance(v1, v2) {\n var x = v2[0] - v1[0];\n var y = v2[1] - v1[1];\n return Math.sqrt(x * x + y * y);\n },\n\n /**\n * Creates a new vector2 initialized with values from an existing vector\n *\n * @param {vector2} v vector to clone\n * @return {Array} a new 2D vector\n */\n clone: function clone(v) {\n return [v[0], v[1]];\n },\n\n /**\n * Return the minimum of two vector2's\n *\n * @param {vector2} out the receiving vector\n * @param {vector2} v1 the first operand\n * @param {vector2} v2 the second operand\n * @return {vector2} out\n */\n min: function min(out, v1, v2) {\n out[0] = Math.min(v1[0], v2[0]);\n out[1] = Math.min(v1[1], v2[1]);\n return out;\n },\n\n /**\n * Return the maximum of two vector2's\n *\n * @param {vector2} out the receiving vector\n * @param {vector2} v1 the first operand\n * @param {vector2} v2 the second operand\n * @return {vector2} out\n */\n max: function max(out, v1, v2) {\n out[0] = Math.max(v1[0], v2[0]);\n out[1] = Math.max(v1[1], v2[1]);\n return out;\n },\n\n /**\n * Transforms the vector2 with a mat2d\n *\n * @param {vector2} out the receiving vector\n * @param {vector2} v the vector to transform\n * @param {mat2d} m matrix to transform with\n * @return {vector2} out\n */\n transformMat2d: function transformMat2d(out, v, m) {\n var x = v[0];\n var y = v[1];\n out[0] = m[0] * x + m[2] * y + m[4];\n out[1] = m[1] * x + m[3] * y + m[5];\n return out;\n }\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/graphic/util/vector2.js\n// module id = 7\n// module chunks = 0","var Util = require('../../util/common');\n\nvar KEYWORDS_PERCENT = {\n min: 0,\n median: 0.5,\n max: 1\n};\n\nvar GuideBase =\n/*#__PURE__*/\nfunction () {\n var _proto = GuideBase.prototype;\n\n _proto._initDefaultCfg = function _initDefaultCfg() {};\n\n function GuideBase(cfg) {\n this._initDefaultCfg();\n\n Util.deepMix(this, cfg);\n }\n\n _proto._getNormalizedValue = function _getNormalizedValue(val, scale) {\n var rst;\n\n if (Util.isNil(KEYWORDS_PERCENT[val])) {\n rst = scale.scale(val);\n } else {\n rst = KEYWORDS_PERCENT[val];\n }\n\n return rst;\n };\n\n _proto.parsePercentPoint = function parsePercentPoint(coord, position) {\n var xPercent = parseFloat(position[0]) / 100;\n var yPercent = parseFloat(position[1]) / 100;\n var start = coord.start;\n var end = coord.end;\n var width = Math.abs(start.x - end.x);\n var height = Math.abs(start.y - end.y);\n var x = width * xPercent + Math.min(start.x, end.x);\n var y = height * yPercent + Math.min(start.y, end.y);\n return {\n x: x,\n y: y\n };\n };\n\n _proto.parsePoint = function parsePoint(coord, position) {\n var self = this;\n var xScale = self.xScale;\n var yScales = self.yScales;\n\n if (Util.isFunction(position)) {\n position = position(xScale, yScales); // position 必须是对象\n } // 如果数据格式是 ['50%', '50%'] 的格式\n\n\n if (Util.isString(position[0]) && position[0].indexOf('%') !== -1) {\n return this.parsePercentPoint(coord, position);\n }\n\n var x = self._getNormalizedValue(position[0], xScale);\n\n var y = self._getNormalizedValue(position[1], yScales[0]);\n\n var point = coord.convertPoint({\n x: x,\n y: y\n });\n\n if (self.limitInPlot) {\n // limit in chart plotRange\n if (x >= 0 && x <= 1 && y >= 0 && y <= 1) {\n return point;\n }\n\n return null;\n }\n\n return point;\n }\n /**\n * render the guide component\n * @param {Coord} coord coordinate instance\n * @param {Canvas.Group} group the container\n */\n ;\n\n _proto.render = function render()\n /* coord,group */\n {};\n\n _proto.repaint = function repaint() {\n this.remove();\n var coord = this.coord,\n container = this.container,\n canvas = this.canvas;\n\n if (container && !container.isDestroyed()) {\n this.render(coord, container);\n canvas.draw();\n }\n };\n\n _proto.remove = function remove() {\n var element = this.element;\n element && element.remove(true);\n };\n\n _proto.changeVisible = function changeVisible(visible) {\n var self = this;\n self.visible = visible;\n var element = self.element;\n if (!element) return;\n\n if (element.set) {\n element.set('visible', visible);\n } else {\n element.style.display = visible ? '' : 'none';\n }\n };\n\n return GuideBase;\n}();\n\nmodule.exports = GuideBase;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/component/guide/base.js\n// module id = 8\n// module chunks = 0","var toString = {}.toString;\n\nvar isType = function isType(value, type) {\n return toString.call(value) === '[object ' + type + ']';\n};\n\nmodule.exports = isType;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_util@1.2.5@@antv/util/lib/type/is-type.js\n// module id = 9\n// module chunks = 0","// isFinite,\nvar isNil = function isNil(value) {\n /**\n * isNil(null) => true\n * isNil() => true\n */\n return value === null || value === undefined;\n};\n\nmodule.exports = isNil;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_util@1.2.5@@antv/util/lib/type/is-nil.js\n// module id = 10\n// module chunks = 0","function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nvar Base = require('../base');\n\nvar Plot = require('./plot');\n\nvar Util = require('../util/common');\n\nvar Coord = require('../coord/index');\n\nvar Geom = require('../geom/base');\n\nvar ScaleController = require('./controller/scale');\n\nvar AxisController = require('./controller/axis');\n\nvar Global = require('../global');\n\nvar _require = require('../graphic/index'),\n Canvas = _require.Canvas;\n\nvar Helper = require('../util/helper');\n\nfunction isFullCircle(coord) {\n var startAngle = coord.startAngle;\n var endAngle = coord.endAngle;\n\n if (!Util.isNil(startAngle) && !Util.isNil(endAngle) && endAngle - startAngle < Math.PI * 2) {\n return false;\n }\n\n return true;\n}\n\nfunction compare(a, b) {\n return a - b;\n}\n\nfunction _isScaleExist(scales, compareScale) {\n var flag = false;\n Util.each(scales, function (scale) {\n var scaleValues = [].concat(scale.values);\n var compareScaleValues = [].concat(compareScale.values);\n\n if (scale.type === compareScale.type && scale.field === compareScale.field && scaleValues.sort(compare).toString() === compareScaleValues.sort(compare).toString()) {\n flag = true;\n return;\n }\n });\n return flag;\n}\n\nvar Chart =\n/*#__PURE__*/\nfunction (_Base) {\n _inheritsLoose(Chart, _Base);\n\n Chart.initPlugins = function initPlugins() {\n return {\n _plugins: [],\n _cacheId: 0,\n register: function register(plugins) {\n var p = this._plugins;\n [].concat(plugins).forEach(function (plugin) {\n if (p.indexOf(plugin) === -1) {\n p.push(plugin);\n }\n });\n this._cacheId++;\n },\n unregister: function unregister(plugins) {\n var p = this._plugins;\n [].concat(plugins).forEach(function (plugin) {\n var idx = p.indexOf(plugin);\n\n if (idx !== -1) {\n p.splice(idx, 1);\n }\n });\n this._cacheId++;\n },\n clear: function clear() {\n this._plugins = [];\n this._cacheId++;\n },\n count: function count() {\n return this._plugins.length;\n },\n getAll: function getAll() {\n return this._plugins;\n },\n notify: function notify(chart, hook, args) {\n var descriptors = this.descriptors(chart);\n var ilen = descriptors.length;\n var i;\n var descriptor;\n var plugin;\n var params;\n var method;\n\n for (i = 0; i < ilen; ++i) {\n descriptor = descriptors[i];\n plugin = descriptor.plugin;\n method = plugin[hook];\n\n if (typeof method === 'function') {\n params = [chart].concat(args || []);\n\n if (method.apply(plugin, params) === false) {\n return false;\n }\n }\n }\n\n return true;\n },\n descriptors: function descriptors(chart) {\n var cache = chart._plugins || (chart._plugins = {});\n\n if (cache.id === this._cacheId) {\n return cache.descriptors;\n }\n\n var plugins = [];\n var descriptors = [];\n\n this._plugins.concat(chart && chart.get('plugins') || []).forEach(function (plugin) {\n var idx = plugins.indexOf(plugin);\n\n if (idx !== -1) {\n return;\n }\n\n plugins.push(plugin);\n descriptors.push({\n plugin: plugin\n });\n });\n\n cache.descriptors = descriptors;\n cache.id = this._cacheId;\n return descriptors;\n }\n };\n };\n\n var _proto = Chart.prototype;\n\n _proto.getDefaultCfg = function getDefaultCfg() {\n return {\n /**\n * the id of canvas\n * @type {String}\n */\n id: null,\n\n /**\n * padding\n * @type {Array|Number}\n */\n padding: Global.padding,\n\n /**\n * data\n * @type {Array}\n */\n data: null,\n\n /**\n * scales of chart\n * @type {Object}\n */\n scales: {},\n\n /**\n * @private\n * geometry instances\n * @type {Array}\n */\n geoms: null,\n\n /**\n * scale configuration\n * @type {Object}\n */\n colDefs: null,\n pixelRatio: Global.pixelRatio,\n\n /**\n * filter options\n * @type {Object}\n */\n filters: null,\n appendPadding: Global.appendPadding\n };\n };\n\n _proto._syncYScales = function _syncYScales() {\n var geoms = this.get('geoms');\n var syncScales = [];\n var min = [];\n var max = [];\n Util.each(geoms, function (geom) {\n var yScale = geom.getYScale();\n\n if (yScale.isLinear) {\n syncScales.push(yScale);\n min.push(yScale.min);\n max.push(yScale.max);\n }\n });\n min = Math.min.apply(null, min);\n max = Math.max.apply(null, max);\n Util.each(syncScales, function (scale) {\n scale.change({\n min: min\n });\n scale.change({\n max: max\n });\n });\n };\n\n _proto._getFieldsForLegend = function _getFieldsForLegend() {\n var fields = [];\n var geoms = this.get('geoms');\n Util.each(geoms, function (geom) {\n var attrOptions = geom.get('attrOptions');\n var attrCfg = attrOptions.color;\n\n if (attrCfg && attrCfg.field && Util.isString(attrCfg.field)) {\n var arr = attrCfg.field.split('*');\n Util.each(arr, function (item) {\n if (fields.indexOf(item) === -1) {\n fields.push(item);\n }\n });\n }\n });\n return fields;\n };\n\n _proto._createScale = function _createScale(field, data) {\n var scaleController = this.get('scaleController');\n return scaleController.createScale(field, data);\n };\n\n _proto._adjustScale = function _adjustScale() {\n var self = this;\n var coord = self.get('coord');\n var xScale = self.getXScale();\n var yScales = self.getYScales();\n var scales = [];\n xScale && scales.push(xScale);\n scales = scales.concat(yScales);\n var inFullCircle = coord.isPolar && isFullCircle(coord);\n var scaleController = self.get('scaleController');\n var colDefs = scaleController.defs;\n Util.each(scales, function (scale) {\n if ((scale.isCategory || scale.isIdentity) && scale.values && !(colDefs[scale.field] && colDefs[scale.field].range)) {\n var count = scale.values.length;\n var range;\n\n if (count === 1) {\n range = [0.5, 1];\n } else {\n var widthRatio = 1;\n var offset = 0;\n\n if (inFullCircle) {\n if (!coord.transposed) {\n range = [0, 1 - 1 / count];\n } else {\n widthRatio = Global.widthRatio.multiplePie;\n offset = 1 / count * widthRatio;\n range = [offset / 2, 1 - offset / 2];\n }\n } else {\n offset = 1 / count * 1 / 2;\n range = [offset, 1 - offset];\n }\n }\n\n scale.range = range;\n }\n });\n var geoms = this.get('geoms');\n\n for (var i = 0; i < geoms.length; i++) {\n var geom = geoms[i];\n\n if (geom.get('type') === 'interval') {\n var yScale = geom.getYScale();\n var field = yScale.field,\n min = yScale.min,\n max = yScale.max,\n type = yScale.type;\n\n if (!(colDefs[field] && colDefs[field].min) && type !== 'time') {\n if (min > 0) {\n yScale.change({\n min: 0\n });\n } else if (max <= 0) {\n yScale.change({\n max: 0\n });\n }\n }\n }\n }\n };\n\n _proto._removeGeoms = function _removeGeoms() {\n var geoms = this.get('geoms');\n\n while (geoms.length > 0) {\n var geom = geoms.shift();\n geom.destroy();\n }\n };\n\n _proto._clearGeoms = function _clearGeoms() {\n var geoms = this.get('geoms');\n\n for (var i = 0, length = geoms.length; i < length; i++) {\n var geom = geoms[i];\n geom.clear();\n }\n };\n\n _proto._clearInner = function _clearInner() {\n this.set('scales', {});\n this.set('legendItems', null);\n\n this._clearGeoms();\n\n Chart.plugins.notify(this, 'clearInner');\n this.get('axisController') && this.get('axisController').clear();\n };\n\n _proto._execFilter = function _execFilter(data) {\n var filters = this.get('filters');\n\n if (filters) {\n data = data.filter(function (obj) {\n var rst = true;\n Util.each(filters, function (fn, k) {\n if (fn) {\n rst = fn(obj[k], obj);\n\n if (!rst) {\n return false;\n }\n }\n });\n return rst;\n });\n }\n\n return data;\n };\n\n _proto._initGeoms = function _initGeoms(geoms) {\n var coord = this.get('coord');\n var data = this.get('filteredData');\n var colDefs = this.get('colDefs');\n\n for (var i = 0, length = geoms.length; i < length; i++) {\n var geom = geoms[i];\n geom.set('data', data);\n geom.set('coord', coord);\n geom.set('colDefs', colDefs);\n geom.init();\n }\n };\n\n _proto._initCoord = function _initCoord() {\n var plot = this.get('plotRange');\n var coordCfg = Util.mix({\n type: 'cartesian'\n }, this.get('coordCfg'), {\n plot: plot\n });\n var type = coordCfg.type;\n var C = Coord[Util.upperFirst(type)];\n var coord = new C(coordCfg);\n this.set('coord', coord);\n };\n\n _proto._initLayout = function _initLayout() {\n var padding = this.get('_padding');\n\n if (!padding) {\n padding = this.get('margin') || this.get('padding');\n padding = Util.parsePadding(padding);\n }\n\n var top = padding[0] === 'auto' ? 0 : padding[0];\n var right = padding[1] === 'auto' ? 0 : padding[1];\n var bottom = padding[2] === 'auto' ? 0 : padding[2];\n var left = padding[3] === 'auto' ? 0 : padding[3];\n var width = this.get('width');\n var height = this.get('height');\n var plot = new Plot({\n start: {\n x: left,\n y: top\n },\n end: {\n x: width - right,\n y: height - bottom\n }\n });\n this.set('plotRange', plot);\n this.set('plot', plot);\n };\n\n _proto._initCanvas = function _initCanvas() {\n var self = this;\n\n try {\n var canvas = new Canvas({\n el: self.get('el') || self.get('id'),\n context: self.get('context'),\n pixelRatio: self.get('pixelRatio'),\n width: self.get('width'),\n height: self.get('height'),\n fontFamily: Global.fontFamily\n });\n self.set('canvas', canvas);\n self.set('width', canvas.get('width'));\n self.set('height', canvas.get('height'));\n } catch (error) {\n throw error;\n }\n\n Chart.plugins.notify(self, 'afterCanvasInit');\n\n self._initLayout();\n };\n\n _proto._initLayers = function _initLayers() {\n var canvas = this.get('canvas');\n this.set('backPlot', canvas.addGroup());\n this.set('middlePlot', canvas.addGroup({\n zIndex: 10\n }));\n this.set('frontPlot', canvas.addGroup({\n zIndex: 20\n }));\n };\n\n _proto._init = function _init() {\n var self = this;\n\n self._initCanvas();\n\n self._initLayers();\n\n self.set('geoms', []);\n self.set('scaleController', new ScaleController());\n self.set('axisController', new AxisController({\n frontPlot: self.get('frontPlot').addGroup({\n className: 'axisContainer'\n }),\n backPlot: self.get('backPlot').addGroup({\n className: 'axisContainer'\n }),\n chart: self\n }));\n Chart.plugins.notify(self, 'init');\n };\n\n function Chart(cfg) {\n var _this;\n\n _this = _Base.call(this, cfg) || this;\n\n var self = _assertThisInitialized(_assertThisInitialized(_this));\n\n Util.each(Geom, function (geomConstructor, className) {\n var methodName = Util.lowerFirst(className);\n\n self[methodName] = function (cfg) {\n var geom = new geomConstructor(cfg);\n self.addGeom(geom);\n return geom;\n };\n });\n\n self._init();\n\n return _this;\n }\n /**\n * set data and some scale configuration\n * @chainable\n * @param {Array} data the dataset to visualize\n * @param {Object} colDefs the configuration for scales\n * @return {Chart} return the chart instance\n */\n\n\n _proto.source = function source(data, colDefs) {\n this.set('data', data);\n\n if (colDefs) {\n this.scale(colDefs);\n }\n\n return this;\n };\n\n _proto.scale = function scale(field, cfg) {\n var colDefs = this.get('colDefs') || {};\n\n if (Util.isObject(field)) {\n Util.mix(colDefs, field);\n } else {\n colDefs[field] = cfg;\n }\n\n this.set('colDefs', colDefs);\n var scaleController = this.get('scaleController');\n scaleController.defs = colDefs;\n return this;\n }\n /**\n * configure the axis\n * @chainable\n * @param {String|Boolean} field the field name of data\n * @param {Object} cfg configuration for axis\n * @return {Chart} return the chart instance\n */\n ;\n\n _proto.axis = function axis(field, cfg) {\n var axisController = this.get('axisController');\n\n if (!field) {\n axisController.axisCfg = null;\n } else {\n axisController.axisCfg = axisController.axisCfg || {};\n axisController.axisCfg[field] = cfg;\n }\n\n return this;\n }\n /**\n * configure the coordinate\n * @chainable\n * @param {String} type set the type of coodinate\n * @param {Object} cfg configuration for coordinate\n * @return {Chart} return the chart instance\n */\n ;\n\n _proto.coord = function coord(type, cfg) {\n var coordCfg;\n\n if (Util.isObject(type)) {\n coordCfg = type;\n } else {\n coordCfg = cfg || {};\n coordCfg.type = type || 'cartesian';\n }\n\n this.set('coordCfg', coordCfg);\n return this;\n };\n\n _proto.filter = function filter(field, condition) {\n var filters = this.get('filters') || {};\n filters[field] = condition;\n this.set('filters', filters);\n }\n /**\n * render the chart\n * @chainable\n * @return {Chart} return the chart instance\n */\n ;\n\n _proto.render = function render() {\n var canvas = this.get('canvas');\n var geoms = this.get('geoms');\n var data = this.get('data') || [];\n\n var filteredData = this._execFilter(data); // filter data\n\n\n this.set('filteredData', filteredData);\n\n this._initCoord(); // initialization coordinate instance\n\n\n Chart.plugins.notify(this, 'beforeGeomInit');\n\n this._initGeoms(geoms); // init all geometry instances\n\n\n this.get('syncY') && this._syncYScales();\n\n this._adjustScale(); // do some adjust for data\n\n\n Chart.plugins.notify(this, 'beforeGeomDraw');\n\n this._renderAxis();\n\n var middlePlot = this.get('middlePlot');\n\n if (this.get('limitInPlot') && !middlePlot.attr('clip')) {\n var coord = this.get('coord');\n var clip = Helper.getClip(coord);\n clip.set('canvas', middlePlot.get('canvas'));\n middlePlot.attr('clip', clip);\n }\n\n for (var i = 0, length = geoms.length; i < length; i++) {\n var geom = geoms[i];\n geom.paint();\n }\n\n Chart.plugins.notify(this, 'afterGeomDraw');\n canvas.sort();\n this.get('frontPlot').sort();\n Chart.plugins.notify(this, 'beforeCanvasDraw');\n canvas.draw();\n return this;\n }\n /**\n * clear the chart, include geometris and all the shapes\n * @chainable\n * @return {Chart} return the chart\n */\n ;\n\n _proto.clear = function clear() {\n Chart.plugins.notify(this, 'clear');\n\n this._removeGeoms();\n\n this._clearInner();\n\n this.set('filters', null);\n this.set('isUpdate', false);\n this.set('_padding', null);\n var canvas = this.get('canvas');\n canvas.draw();\n return this;\n };\n\n _proto.repaint = function repaint() {\n this.set('isUpdate', true);\n Chart.plugins.notify(this, 'repaint');\n\n this._clearInner();\n\n this.render();\n };\n\n _proto.changeData = function changeData(data) {\n this.set('data', data);\n Chart.plugins.notify(this, 'changeData');\n this.set('_padding', null);\n this.repaint();\n };\n\n _proto.changeSize = function changeSize(width, height) {\n if (width) {\n this.set('width', width);\n } else {\n width = this.get('width');\n }\n\n if (height) {\n this.set('height', height);\n } else {\n height = this.get('height');\n }\n\n var canvas = this.get('canvas');\n canvas.changeSize(width, height);\n\n this._initLayout();\n\n this.repaint();\n return this;\n };\n\n _proto.destroy = function destroy() {\n this.clear();\n var canvas = this.get('canvas');\n canvas.destroy();\n Chart.plugins.notify(this, 'afterCanvasDestroyed');\n\n if (this._interactions) {\n Util.each(this._interactions, function (interaction) {\n interaction.destroy();\n });\n }\n\n _Base.prototype.destroy.call(this);\n }\n /**\n * calculate dataset's position on canvas\n * @param {Object} record the dataset\n * @return {Object} return the position\n */\n ;\n\n _proto.getPosition = function getPosition(record) {\n var self = this;\n var coord = self.get('coord');\n var xScale = self.getXScale();\n var yScale = self.getYScales()[0];\n var xField = xScale.field;\n var x = xScale.scale(record[xField]);\n var yField = yScale.field;\n var y = yScale.scale(record[yField]);\n return coord.convertPoint({\n x: x,\n y: y\n });\n }\n /**\n * get the data item of the point\n * @param {Object} point canvas position\n * @return {Object} return the data item\n */\n ;\n\n _proto.getRecord = function getRecord(point) {\n var self = this;\n var coord = self.get('coord');\n var xScale = self.getXScale();\n var yScale = self.getYScales()[0];\n var invertPoint = coord.invertPoint(point);\n var record = {};\n record[xScale.field] = xScale.invert(invertPoint.x);\n record[yScale.field] = yScale.invert(invertPoint.y);\n return record;\n }\n /**\n * get the dataset of the point\n * @param {Object} point canvas position\n * @return {Array} return the dataset\n **/\n ;\n\n _proto.getSnapRecords = function getSnapRecords(point) {\n var geom = this.get('geoms')[0];\n var data = [];\n\n if (geom) {\n // need to judge\n data = geom.getSnapRecords(point);\n }\n\n return data;\n }\n /**\n * creat scale instances\n * @param {String} field field name of data\n * @return {Scale} return the scale\n */\n ;\n\n _proto.createScale = function createScale(field) {\n var data = this.get('data');\n var filteredData = this.get('filteredData');\n\n if (filteredData.length) {\n var legendFields = this._getFieldsForLegend();\n\n if (legendFields.indexOf(field) === -1) {\n data = filteredData;\n }\n }\n\n var scales = this.get('scales');\n\n if (!scales[field]) {\n scales[field] = this._createScale(field, data);\n }\n\n return scales[field];\n }\n /**\n * @protected\n * add geometry instance to geoms\n * @param {Geom} geom geometry instance\n */\n ;\n\n _proto.addGeom = function addGeom(geom) {\n var geoms = this.get('geoms');\n var middlePlot = this.get('middlePlot');\n geoms.push(geom);\n geom.set('chart', this);\n geom.set('container', middlePlot.addGroup());\n }\n /**\n * get the scale of x axis\n * @return {Scale} return the scale\n */\n ;\n\n _proto.getXScale = function getXScale() {\n var self = this;\n var geoms = self.get('geoms');\n var xScale = geoms[0].getXScale();\n return xScale;\n }\n /**\n * get the scale of y axis\n * @return {Array} return the scale\n */\n ;\n\n _proto.getYScales = function getYScales() {\n var geoms = this.get('geoms');\n var rst = [];\n Util.each(geoms, function (geom) {\n var yScale = geom.getYScale();\n\n if (rst.indexOf(yScale) === -1) {\n rst.push(yScale);\n }\n });\n return rst;\n };\n\n _proto.getLegendItems = function getLegendItems() {\n if (this.get('legendItems')) {\n return this.get('legendItems');\n }\n\n var legendItems = {};\n var scales = [];\n var geoms = this.get('geoms');\n Util.each(geoms, function (geom) {\n var colorAttr = geom.getAttr('color');\n\n if (colorAttr) {\n var scale = colorAttr.getScale('color');\n\n if (scale.type !== 'identity' && !_isScaleExist(scales, scale)) {\n scales.push(scale);\n var field = scale.field;\n var ticks = scale.getTicks();\n var items = [];\n Util.each(ticks, function (tick) {\n var text = tick.text;\n var name = text;\n var scaleValue = tick.value;\n var value = scale.invert(scaleValue);\n var color = colorAttr.mapping(value).join('') || Global.defaultColor;\n var marker = {\n fill: color,\n radius: 3,\n symbol: 'circle',\n stroke: '#fff'\n };\n items.push({\n name: name,\n // for display\n dataValue: value,\n // the origin value\n checked: true,\n marker: marker\n });\n });\n legendItems[field] = items;\n }\n }\n });\n this.set('legendItems', legendItems);\n return legendItems;\n } // register the plugins\n ;\n\n _proto.registerPlugins = function registerPlugins(plugins) {\n var self = this;\n var chartPlugins = self.get('plugins') || [];\n\n if (!Util.isArray(chartPlugins)) {\n chartPlugins = [chartPlugins];\n }\n\n [].concat(plugins).forEach(function (plugin) {\n if (chartPlugins.indexOf(plugin) === -1) {\n plugin.init && plugin.init(self); // init\n\n chartPlugins.push(plugin);\n }\n });\n Chart.plugins._cacheId++;\n self.set('plugins', chartPlugins);\n };\n\n _proto._renderAxis = function _renderAxis() {\n var axisController = this.get('axisController');\n var xScale = this.getXScale();\n var yScales = this.getYScales();\n var coord = this.get('coord');\n Chart.plugins.notify(this, 'beforeRenderAxis');\n axisController.createAxis(coord, xScale, yScales);\n };\n\n _proto._isAutoPadding = function _isAutoPadding() {\n if (this.get('_padding')) {\n return false;\n }\n\n var padding = this.get('padding');\n\n if (Util.isArray(padding)) {\n return padding.indexOf('auto') !== -1;\n }\n\n return padding === 'auto';\n };\n\n _proto._updateLayout = function _updateLayout(padding) {\n var width = this.get('width');\n var height = this.get('height');\n var start = {\n x: padding[3],\n y: padding[0]\n };\n var end = {\n x: width - padding[1],\n y: height - padding[2]\n };\n var plot = this.get('plot');\n var coord = this.get('coord');\n plot.reset(start, end);\n coord.reset(plot);\n };\n\n return Chart;\n}(Base);\n\nChart.plugins = Chart.initPlugins();\nmodule.exports = Chart;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/chart/chart.js\n// module id = 11\n// module chunks = 0","var Vector2 = require('./vector2');\n\nvar start = Vector2.create();\nvar end = Vector2.create();\nvar extremity = Vector2.create();\n\nfunction getCubicBezierXYatT(startPt, controlPt1, controlPt2, endPt, T) {\n var x = CubicN(T, startPt.x, controlPt1.x, controlPt2.x, endPt.x);\n var y = CubicN(T, startPt.y, controlPt1.y, controlPt2.y, endPt.y);\n return {\n x: x,\n y: y\n };\n} // cubic helper formula at T distance\n\n\nfunction CubicN(T, a, b, c, d) {\n var t2 = T * T;\n var t3 = t2 * T;\n return a + (-a * 3 + T * (3 * a - a * T)) * T + (3 * b + T * (-6 * b + b * 3 * T)) * T + (c * 3 - c * 3 * T) * t2 + d * t3;\n}\n\nfunction cubicBezierBounds(c) {\n var minX = Infinity;\n var maxX = -Infinity;\n var minY = Infinity;\n var maxY = -Infinity;\n var s = {\n x: c[0],\n y: c[1]\n };\n var c1 = {\n x: c[2],\n y: c[3]\n };\n var c2 = {\n x: c[4],\n y: c[5]\n };\n var e = {\n x: c[6],\n y: c[7]\n };\n\n for (var t = 0; t < 100; t++) {\n var pt = getCubicBezierXYatT(s, c1, c2, e, t / 100);\n\n if (pt.x < minX) {\n minX = pt.x;\n }\n\n if (pt.x > maxX) {\n maxX = pt.x;\n }\n\n if (pt.y < minY) {\n minY = pt.y;\n }\n\n if (pt.y > maxY) {\n maxY = pt.y;\n }\n }\n\n return {\n minX: minX,\n minY: minY,\n maxX: maxX,\n maxY: maxY\n };\n}\n\nmodule.exports = {\n getBBoxFromPoints: function getBBoxFromPoints(points, lineWidth) {\n if (points.length === 0) {\n return;\n }\n\n var p = points[0];\n var left = p.x;\n var right = p.x;\n var top = p.y;\n var bottom = p.y;\n var len = points.length;\n\n for (var i = 1; i < len; i++) {\n p = points[i];\n left = Math.min(left, p.x);\n right = Math.max(right, p.x);\n top = Math.min(top, p.y);\n bottom = Math.max(bottom, p.y);\n }\n\n lineWidth = lineWidth / 2 || 0;\n return {\n minX: left - lineWidth,\n minY: top - lineWidth,\n maxX: right + lineWidth,\n maxY: bottom + lineWidth\n };\n },\n getBBoxFromLine: function getBBoxFromLine(x0, y0, x1, y1, lineWidth) {\n lineWidth = lineWidth / 2 || 0;\n return {\n minX: Math.min(x0, x1) - lineWidth,\n minY: Math.min(y0, y1) - lineWidth,\n maxX: Math.max(x0, x1) + lineWidth,\n maxY: Math.max(y0, y1) + lineWidth\n };\n },\n getBBoxFromArc: function getBBoxFromArc(x, y, r, startAngle, endAngle, anticlockwise) {\n var diff = Math.abs(startAngle - endAngle);\n\n if (diff % Math.PI * 2 < 1e-4 && diff > 1e-4) {\n // Is a circle\n return {\n minX: x - r,\n minY: y - r,\n maxX: x + r,\n maxY: y + r\n };\n }\n\n start[0] = Math.cos(startAngle) * r + x;\n start[1] = Math.sin(startAngle) * r + y;\n end[0] = Math.cos(endAngle) * r + x;\n end[1] = Math.sin(endAngle) * r + y;\n var min = [0, 0];\n var max = [0, 0];\n Vector2.min(min, start, end);\n Vector2.max(max, start, end); // Thresh to [0, Math.PI * 2]\n\n startAngle = startAngle % (Math.PI * 2);\n\n if (startAngle < 0) {\n startAngle = startAngle + Math.PI * 2;\n }\n\n endAngle = endAngle % (Math.PI * 2);\n\n if (endAngle < 0) {\n endAngle = endAngle + Math.PI * 2;\n }\n\n if (startAngle > endAngle && !anticlockwise) {\n endAngle += Math.PI * 2;\n } else if (startAngle < endAngle && anticlockwise) {\n startAngle += Math.PI * 2;\n }\n\n if (anticlockwise) {\n var tmp = endAngle;\n endAngle = startAngle;\n startAngle = tmp;\n }\n\n for (var angle = 0; angle < endAngle; angle += Math.PI / 2) {\n if (angle > startAngle) {\n extremity[0] = Math.cos(angle) * r + x;\n extremity[1] = Math.sin(angle) * r + y;\n Vector2.min(min, extremity, min);\n Vector2.max(max, extremity, max);\n }\n }\n\n return {\n minX: min[0],\n minY: min[1],\n maxX: max[0],\n maxY: max[1]\n };\n },\n getBBoxFromBezierGroup: function getBBoxFromBezierGroup(points, lineWidth) {\n var minX = Infinity;\n var maxX = -Infinity;\n var minY = Infinity;\n var maxY = -Infinity;\n\n for (var i = 0, len = points.length; i < len; i++) {\n var bbox = cubicBezierBounds(points[i]);\n\n if (bbox.minX < minX) {\n minX = bbox.minX;\n }\n\n if (bbox.maxX > maxX) {\n maxX = bbox.maxX;\n }\n\n if (bbox.minY < minY) {\n minY = bbox.minY;\n }\n\n if (bbox.maxY > maxY) {\n maxY = bbox.maxY;\n }\n }\n\n lineWidth = lineWidth / 2 || 0;\n return {\n minX: minX - lineWidth,\n minY: minY - lineWidth,\n maxX: maxX + lineWidth,\n maxY: maxY + lineWidth\n };\n }\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/graphic/util/bbox.js\n// module id = 12\n// module chunks = 0","var isType = require('./is-type');\n\nvar isString = function isString(str) {\n return isType(str, 'String');\n};\n\nmodule.exports = isString;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_util@1.2.5@@antv/util/lib/type/is-string.js\n// module id = 13\n// module chunks = 0","/**\n * 判断是否数字\n * @return {Boolean} 是否数字\n */\nvar isType = require('./is-type');\n\nvar isNumber = function isNumber(value) {\n return isType(value, 'Number');\n};\n\nmodule.exports = isNumber;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_util@1.2.5@@antv/util/lib/type/is-number.js\n// module id = 14\n// module chunks = 0","var isType = require('./is-type');\n\nvar isArray = Array.isArray ? Array.isArray : function (value) {\n return isType(value, 'Array');\n};\nmodule.exports = isArray;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_util@1.2.5@@antv/util/lib/type/is-array.js\n// module id = 15\n// module chunks = 0","var mix = require('@antv/util/lib/mix');\n\nvar each = require('@antv/util/lib/each');\n\nvar isObject = require('@antv/util/lib/type/is-object');\n\nvar isNil = require('@antv/util/lib/type/is-nil');\n\nvar Scale =\n/*#__PURE__*/\nfunction () {\n var _proto = Scale.prototype;\n\n _proto._initDefaultCfg = function _initDefaultCfg() {\n this.type = 'base';\n /**\n * 格式化函数,输出文本或者tick时的格式化函数\n * @type {Function}\n */\n\n this.formatter = null;\n /**\n * 输出的值域\n * @type {Array}\n */\n\n this.range = [0, 1];\n /**\n * 度量的标记\n * @type {Array}\n */\n\n this.ticks = null;\n /**\n * 参与度量计算的值,可选项\n * @type {Array}\n */\n\n this.values = [];\n };\n\n function Scale(cfg) {\n this._initDefaultCfg();\n\n mix(this, cfg);\n this.init();\n }\n /**\n * 度量初始化\n * @protected\n */\n\n\n _proto.init = function init() {};\n /**\n * 获取该度量的ticks,返回的是多个对象,\n * - text: tick 的文本\n * - value: 对应的度量转换后的值\n * <code>\n * [\n * {text: 0,value:0}\n * {text: 1,value:0.2}\n * {text: 2,value:0.4}\n * {text: 3,value:0.6}\n * {text: 4,value:0.8}\n * {text: 5,value:1}\n * ]\n * </code>\n * @param {Number} count 输出tick的个数的近似值,默认是 10\n * @return {Array} 返回 ticks 数组\n */\n\n\n _proto.getTicks = function getTicks() {\n var self = this;\n var ticks = self.ticks;\n var rst = [];\n each(ticks, function (tick) {\n var obj;\n\n if (isObject(tick)) {\n obj = tick;\n } else {\n obj = {\n text: self.getText(tick),\n tickValue: tick,\n value: self.scale(tick)\n };\n }\n\n rst.push(obj);\n });\n return rst;\n };\n /**\n * 获取格式化后的文本\n * @param {*} value 输入的数据\n * @param {*} key 字段的 key\n * @return {String} 格式化的文本\n */\n\n\n _proto.getText = function getText(value, key) {\n var formatter = this.formatter;\n value = formatter ? formatter(value, key) : value;\n\n if (isNil(value) || !value.toString) {\n value = '';\n }\n\n return value.toString();\n };\n /**\n * 输出的值域最小值\n * @protected\n * @return {Number} 返回最小的值\n */\n\n\n _proto.rangeMin = function rangeMin() {\n return this.range[0];\n };\n /**\n * 输出的值域最大值\n * @protected\n * @return {Number} 返回最大的值\n */\n\n\n _proto.rangeMax = function rangeMax() {\n var range = this.range;\n return range[range.length - 1];\n };\n /**\n * 度量转换后的结果,翻转回输入域\n * @param {Number} value 需要翻转的数值\n * @return {*} 度量的输入值\n */\n\n\n _proto.invert = function invert(value) {\n return value;\n };\n /**\n * 将传入的值从非数值转换成数值格式,如分类字符串、时间字符串等\n * @param {*} value 传入的值\n * @return {Number} 转换的值\n */\n\n\n _proto.translate = function translate(value) {\n return value;\n };\n /**\n * 进行度量转换\n * @param {*} value 输入值\n * @return {Number} 输出值,在设定的输出值域之间,默认[0,1]\n */\n\n\n _proto.scale = function scale(value) {\n return value;\n };\n /**\n * 克隆一个新的scale,拥有跟当前scale相同的输入域、输出域等\n * @return {Scale} 克隆的度量\n */\n\n\n _proto.clone = function clone() {\n var self = this;\n var constr = self.constructor;\n var cfg = {};\n each(self, function (v, k) {\n cfg[k] = self[k];\n });\n return new constr(cfg);\n };\n /**\n * 更改度量的属性信息\n * @param {Object} info 属性信息\n * @chainable\n * @return {Scale} 返回自身的引用\n */\n\n\n _proto.change = function change(info) {\n this.ticks = null;\n mix(this, info);\n this.init();\n return this;\n };\n\n return Scale;\n}();\n\nmodule.exports = Scale;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_scale@0.0.9@@antv/scale/lib/base.js\n// module id = 16\n// module chunks = 0","var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n} : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n};\n\nvar isObject = function isObject(value) {\n /**\n * isObject({}) => true\n * isObject([1, 2, 3]) => true\n * isObject(Function) => true\n * isObject(null) => false\n */\n var type = typeof value === 'undefined' ? 'undefined' : _typeof(value);\n return value !== null && type === 'object' || type === 'function';\n};\n\nmodule.exports = isObject;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_util@1.2.5@@antv/util/lib/type/is-object.js\n// module id = 17\n// module chunks = 0","/**\n * @fileOverview the Attribute base class\n */\nvar isString = require('@antv/util/lib/type/is-string');\n\nvar isArray = require('@antv/util/lib/type/is-array');\n\nvar mix = require('@antv/util/lib/mix');\n\nvar each = require('@antv/util/lib/each');\n\nfunction toScaleString(scale, value) {\n if (isString(value)) {\n return value;\n }\n\n return scale.invert(scale.scale(value));\n}\n/**\n * 所有视觉通道属性的基类\n * @class Attr\n */\n\n\nvar AttributeBase =\n/*#__PURE__*/\nfunction () {\n function AttributeBase(cfg) {\n /**\n * 属性的类型\n * @type {String}\n */\n this.type = 'base';\n /**\n * 属性的名称\n * @type {String}\n */\n\n this.name = null;\n /**\n * 回调函数\n * @type {Function}\n */\n\n this.method = null;\n /**\n * 备选的值数组\n * @type {Array}\n */\n\n this.values = [];\n /**\n * 属性内部的度量\n * @type {Array}\n */\n\n this.scales = [];\n /**\n * 是否通过线性取值, 如果未指定,则根据数值的类型判定\n * @type {Boolean}\n */\n\n this.linear = null;\n mix(this, cfg);\n } // 获取属性值,将值映射到视觉通道\n\n\n var _proto = AttributeBase.prototype;\n\n _proto._getAttrValue = function _getAttrValue(scale, value) {\n var values = this.values;\n\n if (scale.isCategory && !this.linear) {\n var index = scale.translate(value);\n return values[index % values.length];\n }\n\n var percent = scale.scale(value);\n return this.getLinearValue(percent);\n };\n /**\n * 如果进行线性映射,返回对应的映射值\n * @protected\n * @param {Number} percent 百分比\n * @return {*} 颜色值、形状、大小等\n */\n\n\n _proto.getLinearValue = function getLinearValue(percent) {\n var values = this.values;\n var steps = values.length - 1;\n var step = Math.floor(steps * percent);\n var leftPercent = steps * percent - step;\n var start = values[step];\n var end = step === steps ? start : values[step + 1];\n var rstValue = start + (end - start) * leftPercent;\n return rstValue;\n };\n /**\n * 默认的回调函数\n * @param {*} value 回调函数的值\n * @type {Function}\n * @return {Array} 返回映射后的值\n */\n\n\n _proto.callback = function callback(value) {\n var self = this;\n var scale = self.scales[0];\n var rstValue = null;\n\n if (scale.type === 'identity') {\n rstValue = scale.value;\n } else {\n rstValue = self._getAttrValue(scale, value);\n }\n\n return rstValue;\n };\n /**\n * 根据度量获取属性名\n * @return {Array} dims of this Attribute\n */\n\n\n _proto.getNames = function getNames() {\n var scales = this.scales;\n var names = this.names;\n var length = Math.min(scales.length, names.length);\n var rst = [];\n\n for (var i = 0; i < length; i++) {\n rst.push(names[i]);\n }\n\n return rst;\n };\n /**\n * 根据度量获取维度名\n * @return {Array} dims of this Attribute\n */\n\n\n _proto.getFields = function getFields() {\n var scales = this.scales;\n var rst = [];\n each(scales, function (scale) {\n rst.push(scale.field);\n });\n return rst;\n };\n /**\n * 根据名称获取度量\n * @param {String} name the name of scale\n * @return {Scale} scale\n */\n\n\n _proto.getScale = function getScale(name) {\n var scales = this.scales;\n var names = this.names;\n var index = names.indexOf(name);\n return scales[index];\n };\n /**\n * 映射数据\n * @param {*} param1...paramn 多个数值\n * @return {Array} 映射的值组成的数组\n */\n\n\n _proto.mapping = function mapping() {\n var scales = this.scales;\n var callback = this.callback;\n\n for (var _len = arguments.length, params = new Array(_len), _key = 0; _key < _len; _key++) {\n params[_key] = arguments[_key];\n }\n\n var values = params;\n\n if (callback) {\n for (var i = 0, len = params.length; i < len; i++) {\n params[i] = this._toOriginParam(params[i], scales[i]);\n }\n\n values = callback.apply(this, params);\n }\n\n values = [].concat(values);\n return values;\n }; // 原始的参数\n\n\n _proto._toOriginParam = function _toOriginParam(param, scale) {\n var rst = param;\n\n if (!scale.isLinear) {\n if (isArray(param)) {\n rst = [];\n\n for (var i = 0, len = param.length; i < len; i++) {\n rst.push(toScaleString(scale, param[i]));\n }\n } else {\n rst = toScaleString(scale, param);\n }\n }\n\n return rst;\n };\n\n return AttributeBase;\n}();\n\nmodule.exports = AttributeBase;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_attr@0.0.7@@antv/attr/lib/base.js\n// module id = 18\n// module chunks = 0","var _require = require('../graphic/index'),\n Shape = _require.Shape;\n\nmodule.exports = {\n getClip: function getClip(coord) {\n var start = coord.start;\n var end = coord.end;\n var width = end.x - start.x;\n var height = Math.abs(end.y - start.y);\n var margin = 10;\n var clip;\n\n if (coord.isPolar) {\n var circleRadius = coord.circleRadius,\n center = coord.center,\n startAngle = coord.startAngle,\n endAngle = coord.endAngle;\n clip = new Shape.Sector({\n attrs: {\n x: center.x,\n y: center.y,\n r: circleRadius,\n r0: 0,\n startAngle: startAngle,\n endAngle: endAngle\n }\n });\n } else {\n clip = new Shape.Rect({\n attrs: {\n x: start.x,\n y: end.y - margin,\n width: width,\n height: height + 2 * margin\n }\n });\n }\n\n clip.isClip = true;\n return clip;\n },\n isPointInPlot: function isPointInPlot(point, plot) {\n var x = point.x,\n y = point.y;\n var tl = plot.tl,\n tr = plot.tr,\n br = plot.br;\n return x >= tl.x && x <= tr.x && y >= tl.y && y <= br.y;\n }\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/util/helper.js\n// module id = 19\n// module chunks = 0","/**\n * @fileOverview shape util\n * @author dxq613@gmail.com\n */\nvar Util = require('../../util/common');\n\nvar ShapeUtil = {\n splitPoints: function splitPoints(obj) {\n var points = [];\n var x = obj.x;\n var y = obj.y;\n y = Util.isArray(y) ? y : [y];\n y.forEach(function (yItem, index) {\n var point = {\n x: Util.isArray(x) ? x[index] : x,\n y: yItem\n };\n points.push(point);\n });\n return points;\n },\n splitArray: function splitArray(data, yField, connectNulls) {\n if (!data.length) return [];\n var arr = [];\n var tmp = [];\n var yValue;\n Util.each(data, function (obj) {\n yValue = obj._origin ? obj._origin[yField] : obj[yField];\n\n if (connectNulls) {\n if (!Util.isNil(yValue)) {\n tmp.push(obj);\n }\n } else {\n if (Util.isArray(yValue) && Util.isNil(yValue[0]) || Util.isNil(yValue)) {\n if (tmp.length) {\n arr.push(tmp);\n tmp = [];\n }\n } else {\n tmp.push(obj);\n }\n }\n });\n\n if (tmp.length) {\n arr.push(tmp);\n }\n\n return arr;\n }\n};\nmodule.exports = ShapeUtil;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/geom/shape/util.js\n// module id = 20\n// module chunks = 0","/**\n * The parent class of interaction\n * @author sima.zhang1990@gmail.com\n */\nvar Util = require('../util/common');\n\nvar Chart = require('../chart/chart');\n\nvar Hammer;\n\nif (!Util.isWx && !Util.isMy) {\n Hammer = require('hammerjs');\n}\n\nvar TOUCH_EVENTS = ['touchstart', 'touchmove', 'touchend'];\n\nvar Interaction =\n/*#__PURE__*/\nfunction () {\n var _proto = Interaction.prototype;\n\n _proto.getDefaultCfg = function getDefaultCfg() {\n return {\n startEvent: TOUCH_EVENTS[0],\n processEvent: TOUCH_EVENTS[1],\n endEvent: TOUCH_EVENTS[2],\n resetEvent: null\n };\n };\n\n _proto._start = function _start(ev) {\n this.preStart && this.preStart(ev);\n this.start(ev);\n this.onStart && this.onStart(ev);\n };\n\n _proto._process = function _process(ev) {\n this.preProcess && this.preProcess(ev);\n this.process(ev);\n this.onProcess && this.onProcess(ev);\n };\n\n _proto._end = function _end(ev) {\n this.preEnd && this.preEnd(ev);\n this.end(ev);\n this.onEnd && this.onEnd(ev);\n };\n\n _proto._reset = function _reset(ev) {\n this.preReset && this.preReset(ev);\n this.reset(ev);\n this.onReset && this.onReset(ev);\n } // override\n ;\n\n _proto.start = function start() {} // override\n ;\n\n _proto.process = function process() {} // override\n ;\n\n _proto.end = function end() {} // override\n ;\n\n _proto.reset = function reset() {};\n\n function Interaction(cfg, chart) {\n var defaultCfg = this.getDefaultCfg();\n Util.deepMix(this, defaultCfg, cfg);\n this.chart = chart;\n this.canvas = chart.get('canvas');\n this.el = chart.get('canvas').get('el');\n\n this._bindEvents();\n }\n\n _proto._bindEvents = function _bindEvents() {\n this._clearEvents(); // clear events\n\n\n var startEvent = this.startEvent,\n processEvent = this.processEvent,\n endEvent = this.endEvent,\n resetEvent = this.resetEvent,\n el = this.el;\n\n if (Hammer) {\n this.hammer = new Hammer(el);\n }\n\n this._bindEvent(startEvent, '_start');\n\n this._bindEvent(processEvent, '_process');\n\n this._bindEvent(endEvent, '_end');\n\n this._bindEvent(resetEvent, '_reset');\n };\n\n _proto._clearEvents = function _clearEvents() {\n var startEvent = this.startEvent,\n processEvent = this.processEvent,\n endEvent = this.endEvent,\n resetEvent = this.resetEvent;\n\n if (this.hammer) {\n this.hammer.destroy();\n this.hammer = null;\n }\n\n this._clearTouchEvent(startEvent, '_start');\n\n this._clearTouchEvent(processEvent, '_process');\n\n this._clearTouchEvent(endEvent, '_end');\n\n this._clearTouchEvent(resetEvent, '_reset');\n };\n\n _proto._bindEvent = function _bindEvent(eventName, methodName) {\n var el = this.el;\n\n if (eventName) {\n if (TOUCH_EVENTS.indexOf(eventName) !== -1) {\n Util.addEventListener(el, eventName, Util.wrapBehavior(this, methodName));\n } else if (this.hammer) {\n this.hammer.on(eventName, Util.wrapBehavior(this, methodName));\n }\n }\n };\n\n _proto._clearTouchEvent = function _clearTouchEvent(eventName, methodName) {\n var el = this.el;\n\n if (eventName && TOUCH_EVENTS.indexOf(eventName) !== -1) {\n Util.removeEventListener(el, eventName, Util.getWrapBehavior(this, methodName));\n }\n };\n\n _proto.destroy = function destroy() {\n this._clearEvents();\n };\n\n return Interaction;\n}();\n\nChart._Interactions = {};\n\nChart.registerInteraction = function (type, constructor) {\n Chart._Interactions[type] = constructor;\n};\n\nChart.getInteraction = function (type) {\n return Chart._Interactions[type];\n};\n\nChart.prototype.interaction = function (type, cfg) {\n var interactions = this._interactions || {};\n\n if (interactions[type]) {\n // if reprated, destroy last\n interactions[type].destroy();\n }\n\n var Ctor = Chart.getInteraction(type);\n var interact = new Ctor(cfg, this);\n interactions[type] = interact;\n this._interactions = interactions;\n return this;\n};\n\nChart.prototype.clearInteraction = function (type) {\n var interactions = this._interactions;\n if (!interactions) return;\n\n if (type) {\n interactions[type] && interactions[type].destroy();\n delete interactions[type];\n } else {\n Util.each(interactions, function (interaction, key) {\n interaction.destroy();\n delete interactions[key];\n });\n }\n\n return this;\n};\n\nmodule.exports = Interaction;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/interaction/base.js\n// module id = 21\n// module chunks = 0","function _mix(dist, obj) {\n for (var key in obj) {\n if (obj.hasOwnProperty(key) && key !== 'constructor' && obj[key] !== undefined) {\n dist[key] = obj[key];\n }\n }\n}\n\nvar mix = function mix(dist, src1, src2, src3) {\n if (src1) _mix(dist, src1);\n if (src2) _mix(dist, src2);\n if (src3) _mix(dist, src3);\n return dist;\n};\n\nmodule.exports = mix;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_util@1.2.5@@antv/util/lib/mix.js\n// module id = 22\n// module chunks = 0","var Util = require('../util/common');\n\nvar Base =\n/*#__PURE__*/\nfunction () {\n var _proto = Base.prototype;\n\n _proto._initDefaultCfg = function _initDefaultCfg() {};\n\n function Base(cfg) {\n this._initDefaultCfg();\n\n Util.mix(this, cfg);\n var start;\n var end;\n\n if (this.plot) {\n start = this.plot.bl;\n end = this.plot.tr;\n this.start = start;\n this.end = end;\n } else {\n start = this.start;\n end = this.end;\n }\n\n this.init(start, end);\n }\n\n _proto.init = function init() {};\n\n _proto.convertPoint = function convertPoint(point) {\n return point;\n };\n\n _proto.invertPoint = function invertPoint(point) {\n return point;\n };\n\n _proto.reset = function reset(plot) {\n this.plot = plot;\n var bl = plot.bl,\n tr = plot.tr;\n this.start = bl;\n this.end = tr;\n this.init(bl, tr);\n };\n\n return Base;\n}();\n\nmodule.exports = Base;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/coord/base.js\n// module id = 23\n// module chunks = 0","var mix = require('@antv/util/lib/mix');\n\nvar Adjust =\n/*#__PURE__*/\nfunction () {\n var _proto = Adjust.prototype;\n\n _proto._initDefaultCfg = function _initDefaultCfg() {\n this.adjustNames = ['x', 'y']; // 调整的维度,默认,x,y都做调整\n };\n\n function Adjust(cfg) {\n this._initDefaultCfg();\n\n mix(this, cfg);\n }\n /**\n * @override\n */\n\n\n _proto.processAdjust = function processAdjust()\n /* dataArray */\n {};\n\n return Adjust;\n}();\n\nmodule.exports = Adjust;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_adjust@0.1.1@@antv/adjust/lib/base.js\n// module id = 24\n// module chunks = 0","var Util = require('../../util/common');\n\nvar Global = require('../../global');\n\nvar Vector2 = require('../../graphic/util/vector2');\n\nvar Abastract =\n/*#__PURE__*/\nfunction () {\n var _proto = Abastract.prototype;\n\n _proto._initDefaultCfg = function _initDefaultCfg() {\n /**\n * ticks\n * @type {Array}\n */\n this.ticks = [];\n /**\n * the configuration for tickLine\n * @type {Object}\n */\n\n this.tickLine = {};\n /**\n * the direction of ticks, 1 means clockwise\n * @type {Number}\n */\n\n this.offsetFactor = 1;\n /**\n * the top container\n * @type {container}\n */\n\n this.frontContainer = null;\n /**\n * the back container\n * @type {[type]}\n */\n\n this.backContainer = null;\n /**\n * points for draw grid line\n * @type {Array}\n */\n\n this.gridPoints = [];\n };\n\n function Abastract(cfg) {\n this._initDefaultCfg();\n\n Util.mix(this, cfg);\n this.draw();\n }\n\n _proto.draw = function draw() {\n var line = this.line,\n tickLine = this.tickLine,\n label = this.label,\n grid = this.grid;\n grid && this.drawGrid(grid); // draw the grid lines\n\n tickLine && this.drawTicks(tickLine); // draw the tickLine\n\n line && this.drawLine(line); // draw axis line\n\n label && this.drawLabels(); // draw ticks\n };\n\n _proto.drawTicks = function drawTicks(tickCfg) {\n var self = this;\n var ticks = self.ticks;\n var length = tickCfg.length;\n var container = self.getContainer(tickCfg.top);\n Util.each(ticks, function (tick) {\n var start = self.getOffsetPoint(tick.value);\n var end = self.getSidePoint(start, length);\n var shape = container.addShape('line', {\n className: 'axis-tick',\n attrs: Util.mix({\n x1: start.x,\n y1: start.y,\n x2: end.x,\n y2: end.y\n }, tickCfg)\n });\n shape._id = self._id + '-ticks';\n });\n };\n\n _proto.drawLabels = function drawLabels() {\n var self = this;\n var labelOffset = self.labelOffset;\n var labels = self.labels;\n Util.each(labels, function (labelShape) {\n var container = self.getContainer(labelShape.get('top'));\n var start = self.getOffsetPoint(labelShape.get('value'));\n\n var _self$getSidePoint = self.getSidePoint(start, labelOffset),\n x = _self$getSidePoint.x,\n y = _self$getSidePoint.y;\n\n labelShape.attr(Util.mix({\n x: x,\n y: y\n }, self.getTextAlignInfo(start, labelOffset), labelShape.get('textStyle')));\n labelShape._id = self._id + '-' + labelShape.attr('text');\n container.add(labelShape);\n });\n };\n\n _proto.drawLine = function drawLine() {};\n\n _proto.drawGrid = function drawGrid(grid) {\n var self = this;\n var gridPoints = self.gridPoints,\n ticks = self.ticks;\n var gridCfg = grid;\n var count = gridPoints.length;\n Util.each(gridPoints, function (subPoints, index) {\n if (Util.isFunction(grid)) {\n var tick = ticks[index] || {};\n var executedGrid = grid(tick.text, index, count);\n gridCfg = executedGrid ? Util.mix({}, Global._defaultAxis.grid, executedGrid) : null;\n }\n\n if (gridCfg) {\n var type = gridCfg.type; // has two types: 'line' and 'arc'\n\n var points = subPoints.points;\n var container = self.getContainer(gridCfg.top);\n var shape;\n\n if (type === 'arc') {\n var center = self.center,\n startAngle = self.startAngle,\n endAngle = self.endAngle;\n var radius = Vector2.length([points[0].x - center.x, points[0].y - center.y]);\n shape = container.addShape('Arc', {\n className: 'axis-grid',\n attrs: Util.mix({\n x: center.x,\n y: center.y,\n startAngle: startAngle,\n endAngle: endAngle,\n r: radius\n }, gridCfg)\n });\n } else {\n shape = container.addShape('Polyline', {\n className: 'axis-grid',\n attrs: Util.mix({\n points: points\n }, gridCfg)\n });\n }\n\n shape._id = subPoints._id;\n }\n });\n };\n\n _proto.getOffsetPoint = function getOffsetPoint() {};\n\n _proto.getAxisVector = function getAxisVector() {};\n\n _proto.getOffsetVector = function getOffsetVector(point, offset) {\n var self = this;\n var axisVector = self.getAxisVector(point);\n var normal = Vector2.normalize([], axisVector);\n var factor = self.offsetFactor;\n var verticalVector = [normal[1] * -1 * factor, normal[0] * factor];\n return Vector2.scale([], verticalVector, offset);\n };\n\n _proto.getSidePoint = function getSidePoint(point, offset) {\n var self = this;\n var offsetVector = self.getOffsetVector(point, offset);\n return {\n x: point.x + offsetVector[0],\n y: point.y + offsetVector[1]\n };\n };\n\n _proto.getTextAlignInfo = function getTextAlignInfo(point, offset) {\n var self = this;\n var offsetVector = self.getOffsetVector(point, offset);\n var align;\n var baseLine;\n\n if (offsetVector[0] > 0) {\n align = 'left';\n } else if (offsetVector[0] < 0) {\n align = 'right';\n } else {\n align = 'center';\n }\n\n if (offsetVector[1] > 0) {\n baseLine = 'top';\n } else if (offsetVector[1] < 0) {\n baseLine = 'bottom';\n } else {\n baseLine = 'middle';\n }\n\n return {\n textAlign: align,\n textBaseline: baseLine\n };\n };\n\n _proto.getContainer = function getContainer(isTop) {\n var frontContainer = this.frontContainer,\n backContainer = this.backContainer;\n return isTop ? frontContainer : backContainer;\n };\n\n return Abastract;\n}();\n\nmodule.exports = Abastract;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/component/axis/abstract.js\n// module id = 25\n// module chunks = 0","var Util = require('../util/common');\n\nvar MatrixUtil = require('./util/matrix');\n\nvar Vector2 = require('./util/vector2');\n\nvar StyleUtil = require('./util/style-parse');\n\nfunction isUnchanged(m) {\n return m[0] === 1 && m[1] === 0 && m[2] === 0 && m[3] === 1 && m[4] === 0 && m[5] === 0;\n}\n\nvar ALIAS_ATTRS_MAP = {\n stroke: 'strokeStyle',\n fill: 'fillStyle',\n opacity: 'globalAlpha'\n};\nvar SHAPE_ATTRS = ['fillStyle', 'font', 'globalAlpha', 'lineCap', 'lineWidth', 'lineJoin', 'miterLimit', 'shadowBlur', 'shadowColor', 'shadowOffsetX', 'shadowOffsetY', 'strokeStyle', 'textAlign', 'textBaseline', 'lineDash', 'shadow' // 兼容支付宝小程序\n];\nvar CLIP_SHAPES = ['circle', 'sector', 'polygon', 'rect', 'polyline'];\n\nvar Element =\n/*#__PURE__*/\nfunction () {\n var _proto = Element.prototype;\n\n _proto._initProperties = function _initProperties() {\n this._attrs = {\n zIndex: 0,\n visible: true,\n destroyed: false\n };\n };\n\n function Element(cfg) {\n this._initProperties();\n\n Util.mix(this._attrs, cfg);\n var attrs = this._attrs.attrs;\n\n if (attrs) {\n this.initAttrs(attrs);\n }\n\n this.initTransform();\n }\n\n _proto.get = function get(name) {\n return this._attrs[name];\n };\n\n _proto.set = function set(name, value) {\n this._attrs[name] = value;\n };\n\n _proto.isGroup = function isGroup() {\n return this.get('isGroup');\n };\n\n _proto.isShape = function isShape() {\n return this.get('isShape');\n };\n\n _proto.initAttrs = function initAttrs(attrs) {\n this.attr(Util.mix(this.getDefaultAttrs(), attrs));\n };\n\n _proto.getDefaultAttrs = function getDefaultAttrs() {\n return {};\n };\n\n _proto._setAttr = function _setAttr(name, value) {\n var attrs = this._attrs.attrs;\n\n if (name === 'clip') {\n value = this._setAttrClip(value);\n } else {\n var alias = ALIAS_ATTRS_MAP[name];\n\n if (alias) {\n attrs[alias] = value;\n }\n }\n\n attrs[name] = value;\n };\n\n _proto._getAttr = function _getAttr(name) {\n return this._attrs.attrs[name];\n } // _afterAttrsSet() {}\n ;\n\n _proto._setAttrClip = function _setAttrClip(clip) {\n if (clip && CLIP_SHAPES.indexOf(clip._attrs.type) > -1) {\n if (clip.get('canvas') === null) {\n clip = Object.assign({}, clip);\n }\n\n clip.set('parent', this.get('parent'));\n clip.set('context', this.get('context'));\n return clip;\n }\n\n return null;\n };\n\n _proto.attr = function attr(name, value) {\n var self = this;\n if (self.get('destroyed')) return null;\n var argumentsLen = arguments.length;\n\n if (argumentsLen === 0) {\n return self._attrs.attrs;\n }\n\n if (Util.isObject(name)) {\n this._attrs.bbox = null;\n\n for (var k in name) {\n self._setAttr(k, name[k]);\n }\n\n if (self._afterAttrsSet) {\n self._afterAttrsSet();\n }\n\n return self;\n }\n\n if (argumentsLen === 2) {\n this._attrs.bbox = null;\n\n self._setAttr(name, value);\n\n if (self._afterAttrsSet) {\n self._afterAttrsSet();\n }\n\n return self;\n }\n\n return self._getAttr(name);\n };\n\n _proto.getParent = function getParent() {\n return this.get('parent');\n };\n\n _proto.draw = function draw(context) {\n if (this.get('destroyed')) {\n return;\n }\n\n if (this.get('visible')) {\n this.setContext(context);\n this.drawInner(context);\n this.restoreContext(context);\n }\n };\n\n _proto.setContext = function setContext(context) {\n var clip = this._attrs.attrs.clip;\n context.save();\n\n if (clip) {\n clip.resetTransform(context);\n clip.createPath(context);\n context.clip();\n }\n\n this.resetContext(context);\n this.resetTransform(context);\n };\n\n _proto.restoreContext = function restoreContext(context) {\n context.restore();\n };\n\n _proto.resetContext = function resetContext(context) {\n var elAttrs = this._attrs.attrs;\n\n if (!this._attrs.isGroup) {\n for (var k in elAttrs) {\n if (SHAPE_ATTRS.indexOf(k) > -1) {\n var v = elAttrs[k];\n\n if (k === 'fillStyle' || k === 'strokeStyle') {\n v = StyleUtil.parseStyle(v, this, context);\n }\n\n if (k === 'lineDash' && context.setLineDash && Util.isArray(v)) {\n context.setLineDash(v);\n } else {\n context[k] = v;\n }\n }\n }\n }\n };\n\n _proto.hasFill = function hasFill() {\n return this.get('canFill') && this._attrs.attrs.fillStyle;\n };\n\n _proto.hasStroke = function hasStroke() {\n return this.get('canStroke') && this._attrs.attrs.strokeStyle;\n };\n\n _proto.drawInner = function drawInner()\n /* context */\n {};\n\n _proto.show = function show() {\n this.set('visible', true);\n return this;\n };\n\n _proto.hide = function hide() {\n this.set('visible', false);\n return this;\n };\n\n _proto.isVisible = function isVisible() {\n return this.get('visible');\n };\n\n _proto._removeFromParent = function _removeFromParent() {\n var parent = this.get('parent');\n\n if (parent) {\n var children = parent.get('children');\n Util.Array.remove(children, this);\n }\n\n return this;\n };\n\n _proto.remove = function remove(destroy) {\n if (destroy) {\n this.destroy();\n } else {\n this._removeFromParent();\n }\n };\n\n _proto.destroy = function destroy() {\n var destroyed = this.get('destroyed');\n\n if (destroyed) {\n return null;\n }\n\n this._removeFromParent();\n\n this._attrs = {};\n this.set('destroyed', true);\n };\n\n _proto.getBBox = function getBBox() {\n return {\n minX: 0,\n maxX: 0,\n minY: 0,\n maxY: 0,\n width: 0,\n height: 0\n };\n };\n\n _proto.initTransform = function initTransform() {\n var attrs = this._attrs.attrs || {};\n\n if (!attrs.matrix) {\n attrs.matrix = [1, 0, 0, 1, 0, 0];\n }\n\n this._attrs.attrs = attrs;\n };\n\n _proto.getMatrix = function getMatrix() {\n return this._attrs.attrs.matrix;\n };\n\n _proto.setMatrix = function setMatrix(m) {\n this._attrs.attrs.matrix = [m[0], m[1], m[2], m[3], m[4], m[5]];\n };\n\n _proto.transform = function transform(actions) {\n var matrix = this._attrs.attrs.matrix;\n this._attrs.attrs.matrix = MatrixUtil.transform(matrix, actions);\n return this;\n };\n\n _proto.setTransform = function setTransform(actions) {\n this._attrs.attrs.matrix = [1, 0, 0, 1, 0, 0];\n return this.transform(actions);\n };\n\n _proto.translate = function translate(x, y) {\n var matrix = this._attrs.attrs.matrix;\n MatrixUtil.translate(matrix, matrix, [x, y]);\n };\n\n _proto.rotate = function rotate(rad) {\n var matrix = this._attrs.attrs.matrix;\n MatrixUtil.rotate(matrix, matrix, rad);\n };\n\n _proto.scale = function scale(sx, sy) {\n var matrix = this._attrs.attrs.matrix;\n MatrixUtil.scale(matrix, matrix, [sx, sy]);\n };\n\n _proto.moveTo = function moveTo(x, y) {\n var cx = this._attrs.x || 0;\n var cy = this._attrs.y || 0;\n this.translate(x - cx, y - cy);\n this.set('x', x);\n this.set('y', y);\n };\n\n _proto.apply = function apply(v) {\n var m = this._attrs.attrs.matrix;\n Vector2.transformMat2d(v, v, m);\n return this;\n };\n\n _proto.resetTransform = function resetTransform(context) {\n var mo = this._attrs.attrs.matrix;\n\n if (!isUnchanged(mo)) {\n context.transform(mo[0], mo[1], mo[2], mo[3], mo[4], mo[5]);\n }\n };\n\n _proto.isDestroyed = function isDestroyed() {\n return this.get('destroyed');\n };\n\n return Element;\n}();\n\nmodule.exports = Element;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/graphic/element.js\n// module id = 26\n// module chunks = 0","var Matrix = {\n multiply: function multiply(m1, m2) {\n var m11 = m1[0] * m2[0] + m1[2] * m2[1];\n var m12 = m1[1] * m2[0] + m1[3] * m2[1];\n var m21 = m1[0] * m2[2] + m1[2] * m2[3];\n var m22 = m1[1] * m2[2] + m1[3] * m2[3];\n var dx = m1[0] * m2[4] + m1[2] * m2[5] + m1[4];\n var dy = m1[1] * m2[4] + m1[3] * m2[5] + m1[5];\n return [m11, m12, m21, m22, dx, dy];\n },\n scale: function scale(out, m, v) {\n out[0] = m[0] * v[0];\n out[1] = m[1] * v[0];\n out[2] = m[2] * v[1];\n out[3] = m[3] * v[1];\n out[4] = m[4];\n out[5] = m[5];\n return out;\n },\n rotate: function rotate(out, m, radian) {\n var c = Math.cos(radian);\n var s = Math.sin(radian);\n var m11 = m[0] * c + m[2] * s;\n var m12 = m[1] * c + m[3] * s;\n var m21 = m[0] * -s + m[2] * c;\n var m22 = m[1] * -s + m[3] * c;\n out[0] = m11;\n out[1] = m12;\n out[2] = m21;\n out[3] = m22;\n out[4] = m[4];\n out[5] = m[5];\n return out;\n },\n translate: function translate(out, m, v) {\n out[0] = m[0];\n out[1] = m[1];\n out[2] = m[2];\n out[3] = m[3];\n out[4] = m[4] + m[0] * v[0] + m[2] * v[1];\n out[5] = m[5] + m[1] * v[0] + m[3] * v[1];\n return out;\n },\n transform: function transform(m, actions) {\n var out = [].concat(m);\n\n for (var i = 0, len = actions.length; i < len; i++) {\n var action = actions[i];\n\n switch (action[0]) {\n case 't':\n Matrix.translate(out, out, [action[1], action[2]]);\n break;\n\n case 's':\n Matrix.scale(out, out, [action[1], action[2]]);\n break;\n\n case 'r':\n Matrix.rotate(out, out, action[1]);\n break;\n\n default:\n break;\n }\n }\n\n return out;\n }\n};\nmodule.exports = Matrix;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/graphic/util/matrix.js\n// module id = 27\n// module chunks = 0","/**\n * @fileOverview 提取公共代码到util方法\n * @author dxq613@gmail.com\n */\nvar isString = require('@antv/util/lib/type/is-string');\n\nvar isDate = require('@antv/util/lib/type/is-date');\n\nmodule.exports = {\n toTimeStamp: function toTimeStamp(value) {\n if (isString(value)) {\n if (value.indexOf('T') > 0) {\n value = new Date(value).getTime();\n } else {\n value = new Date(value.replace(/-/ig, '/')).getTime();\n }\n }\n\n if (isDate(value)) {\n value = value.getTime();\n }\n\n return value;\n }\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_scale@0.0.9@@antv/scale/lib/time-util.js\n// module id = 28\n// module chunks = 0","var TimeUtil = require('@antv/scale/lib/time-util');\n\nvar Util = require('../util/common');\n\nmodule.exports = {\n getColDef: function getColDef(chart, field) {\n var colDef;\n\n if (chart.get('colDefs') && chart.get('colDefs')[field]) {\n colDef = chart.get('colDefs')[field];\n }\n\n return colDef;\n },\n getFieldRange: function getFieldRange(scale, limitRange, type) {\n if (!scale) return [0, 1];\n var minRatio = 0;\n var maxRatio = 0;\n\n if (type === 'linear') {\n var min = limitRange.min,\n max = limitRange.max;\n minRatio = (scale.min - min) / (max - min);\n maxRatio = (scale.max - min) / (max - min);\n } else {\n var originValues = limitRange;\n var values = scale.values;\n var firstIndex = originValues.indexOf(values[0]);\n var lastIndex = originValues.indexOf(values[values.length - 1]);\n minRatio = firstIndex / (originValues.length - 1);\n maxRatio = lastIndex / (originValues.length - 1);\n }\n\n return [minRatio, maxRatio];\n },\n getLimitRange: function getLimitRange(data, scale) {\n var result;\n var field = scale.field,\n type = scale.type;\n var values = Util.Array.values(data, field);\n\n if (type === 'linear') {\n result = Util.Array.getRange(values);\n\n if (scale.min < result.min) {\n result.min = scale.min;\n }\n\n if (scale.max > result.max) {\n result.max = scale.max;\n }\n } else if (type === 'timeCat') {\n Util.each(values, function (v, i) {\n values[i] = TimeUtil.toTimeStamp(v);\n });\n values.sort(function (v1, v2) {\n return v1 - v2;\n });\n result = values;\n } else {\n result = values;\n }\n\n return result;\n }\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/interaction/helper.js\n// module id = 29\n// module chunks = 0","var isNil = require('./type/is-nil');\n\nfunction toString(value) {\n if (isNil(value)) return '';\n return value.toString();\n}\n\nmodule.exports = toString;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_util@1.2.5@@antv/util/lib/to-string.js\n// module id = 30\n// module chunks = 0","var isType = require('./is-type');\n\nvar isDate = function isDate(value) {\n return isType(value, 'Date');\n};\n\nmodule.exports = isDate;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_util@1.2.5@@antv/util/lib/type/is-date.js\n// module id = 31\n// module chunks = 0","var isObjectLike = require('./is-object-like');\n\nvar isType = require('./is-type');\n\nvar isPlainObject = function isPlainObject(value) {\n /**\n * isObjectLike(new Foo) => false\n * isObjectLike([1, 2, 3]) => false\n * isObjectLike({ x: 0, y: 0 }) => true\n * isObjectLike(Object.create(null)) => true\n */\n if (!isObjectLike(value) || !isType(value, 'Object')) {\n return false;\n }\n\n if (Object.getPrototypeOf(value) === null) {\n return true;\n }\n\n var proto = value;\n\n while (Object.getPrototypeOf(proto) !== null) {\n proto = Object.getPrototypeOf(proto);\n }\n\n return Object.getPrototypeOf(value) === proto;\n};\n\nmodule.exports = isPlainObject;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_util@1.2.5@@antv/util/lib/type/is-plain-object.js\n// module id = 32\n// module chunks = 0","/**\n * @fileOverview Base class of chart and geometry\n * @author dxq613@gmail.com\n */\nvar Util = require('./util/common');\n\nvar Base =\n/*#__PURE__*/\nfunction () {\n var _proto = Base.prototype;\n\n _proto.getDefaultCfg = function getDefaultCfg() {\n return {};\n };\n\n function Base(cfg) {\n var attrs = {};\n var defaultCfg = this.getDefaultCfg();\n this._attrs = attrs;\n Util.mix(attrs, defaultCfg, cfg);\n }\n\n _proto.get = function get(name) {\n return this._attrs[name];\n };\n\n _proto.set = function set(name, value) {\n this._attrs[name] = value;\n };\n\n _proto.destroy = function destroy() {\n this._attrs = {};\n this.destroyed = true;\n };\n\n return Base;\n}();\n\nmodule.exports = Base;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/base.js\n// module id = 33\n// module chunks = 0","function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}\n\nvar Base = require('./base');\n\nvar catAuto = require('./auto/cat');\n\nvar each = require('@antv/util/lib/each');\n\nvar isNumber = require('@antv/util/lib/type/is-number');\n\nvar isString = require('@antv/util/lib/type/is-string');\n\nvar Category =\n/*#__PURE__*/\nfunction (_Base) {\n _inheritsLoose(Category, _Base);\n\n function Category() {\n return _Base.apply(this, arguments) || this;\n }\n\n var _proto = Category.prototype;\n\n _proto._initDefaultCfg = function _initDefaultCfg() {\n _Base.prototype._initDefaultCfg.call(this);\n\n this.type = 'cat';\n /**\n * 是否分类度量\n * @type {Boolean}\n */\n\n this.isCategory = true;\n this.isRounding = true; // 是否进行取整操作\n };\n /**\n * @override\n */\n\n\n _proto.init = function init() {\n var self = this;\n var values = self.values;\n var tickCount = self.tickCount;\n each(values, function (v, i) {\n values[i] = v.toString();\n });\n\n if (!self.ticks) {\n var ticks = values;\n\n if (tickCount) {\n var temp = catAuto({\n maxCount: tickCount,\n data: values,\n isRounding: self.isRounding\n });\n ticks = temp.ticks;\n }\n\n this.ticks = ticks;\n }\n };\n /**\n * @override\n */\n\n\n _proto.getText = function getText(value) {\n if (this.values.indexOf(value) === -1 && isNumber(value)) {\n value = this.values[Math.round(value)];\n }\n\n return _Base.prototype.getText.call(this, value);\n };\n /**\n * @override\n */\n\n\n _proto.translate = function translate(value) {\n var index = this.values.indexOf(value);\n\n if (index === -1 && isNumber(value)) {\n index = value;\n } else if (index === -1) {\n index = NaN;\n }\n\n return index;\n };\n /**\n * @override\n */\n\n\n _proto.scale = function scale(value) {\n var rangeMin = this.rangeMin();\n var rangeMax = this.rangeMax();\n var percent;\n\n if (isString(value) || this.values.indexOf(value) !== -1) {\n value = this.translate(value);\n }\n\n if (this.values.length > 1) {\n percent = value / (this.values.length - 1);\n } else {\n percent = value;\n }\n\n return rangeMin + percent * (rangeMax - rangeMin);\n };\n /**\n * @override\n */\n\n\n _proto.invert = function invert(value) {\n if (isString(value)) {\n // 如果已经是字符串\n return value;\n }\n\n var min = this.rangeMin();\n var max = this.rangeMax(); // 归一到 范围内\n\n if (value < min) {\n value = min;\n }\n\n if (value > max) {\n value = max;\n }\n\n var percent = (value - min) / (max - min);\n var index = Math.round(percent * (this.values.length - 1)) % this.values.length;\n index = index || 0;\n return this.values[index];\n };\n\n return Category;\n}(Base);\n\nBase.Cat = Category;\nmodule.exports = Category;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_scale@0.0.9@@antv/scale/lib/category.js\n// module id = 34\n// module chunks = 0","/**\n * @fileOverview 计算分类的的坐标点\n * @author dxq613@gmail.com\n */\nvar each = require('@antv/util/lib/each');\n\nvar MAX_COUNT = 8;\nvar SUB_COUNT = 4; // 控制个数不能过小\n\nfunction getSimpleArray(data) {\n var arr = [];\n each(data, function (sub) {\n arr = arr.concat(sub);\n });\n return arr;\n}\n\nfunction getGreatestFactor(count, number) {\n var i;\n\n for (i = number; i > 0; i--) {\n if (count % i === 0) {\n break;\n }\n } // 如果是素数,没有可以整除的数字\n\n\n if (i === 1) {\n for (i = number; i > 0; i--) {\n if ((count - 1) % i === 0) {\n break;\n }\n }\n }\n\n return i;\n}\n\nmodule.exports = function (info) {\n var rst = {};\n var ticks = [];\n var isRounding = info.isRounding;\n var categories = getSimpleArray(info.data);\n var length = categories.length;\n var maxCount = info.maxCount || MAX_COUNT;\n var tickCount;\n\n if (isRounding) {\n // 取整操作\n tickCount = getGreatestFactor(length - 1, maxCount - 1) + 1; // 如果计算出来只有两个坐标点,则直接使用传入的 maxCount\n\n if (tickCount === 2) {\n tickCount = maxCount;\n } else if (tickCount < maxCount - SUB_COUNT) {\n tickCount = maxCount - SUB_COUNT;\n }\n } else {\n tickCount = maxCount;\n }\n\n if (!isRounding && length <= tickCount + tickCount / 2) {\n ticks = [].concat(categories);\n } else {\n var step = parseInt(length / (tickCount - 1), 10);\n var groups = categories.map(function (e, i) {\n return i % step === 0 ? categories.slice(i, i + step) : null;\n }).filter(function (e) {\n return e;\n });\n\n for (var i = 1, groupLen = groups.length; i < groupLen && (isRounding ? i * step < length - step : i < tickCount - 1); i++) {\n ticks.push(groups[i][0]);\n }\n\n if (categories.length) {\n ticks.unshift(categories[0]);\n var last = categories[length - 1];\n\n if (ticks.indexOf(last) === -1) {\n ticks.push(last);\n }\n }\n }\n\n rst.categories = categories;\n rst.ticks = ticks;\n return rst;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_scale@0.0.9@@antv/scale/lib/auto/cat.js\n// module id = 35\n// module chunks = 0","var Util = require('../util/common');\n\nvar Shape = require('./shape');\n\nvar SHAPE_MAP = {};\nvar INDEX = '_INDEX';\n\nfunction getComparer(compare) {\n return function (left, right) {\n var result = compare(left, right);\n return result === 0 ? left[INDEX] - right[INDEX] : result;\n };\n}\n\nmodule.exports = {\n getGroupClass: function getGroupClass() {},\n getChildren: function getChildren() {\n return this.get('children');\n },\n addShape: function addShape(type, cfg) {\n if (cfg === void 0) {\n cfg = {};\n }\n\n var canvas = this.get('canvas');\n var shapeType = SHAPE_MAP[type];\n\n if (!shapeType) {\n shapeType = Util.upperFirst(type);\n SHAPE_MAP[type] = shapeType;\n }\n\n cfg.canvas = canvas;\n\n if (shapeType === 'Text' && canvas && canvas.get('fontFamily')) {\n cfg.attrs.fontFamily = cfg.attrs.fontFamily || canvas.get('fontFamily');\n }\n\n var shape = new Shape[shapeType](cfg);\n this.add(shape);\n return shape;\n },\n addGroup: function addGroup(cfg) {\n var canvas = this.get('canvas');\n var groupClass = this.getGroupClass();\n cfg = Util.mix({}, cfg);\n cfg.canvas = canvas;\n cfg.parent = this;\n var rst = new groupClass(cfg);\n this.add(rst);\n return rst;\n },\n contain: function contain(item) {\n var children = this.get('children');\n return children.indexOf(item) > -1;\n },\n sort: function sort() {\n var children = this.get('children');\n\n for (var i = 0, len = children.length; i < len; i++) {\n var child = children[i];\n child[INDEX] = i;\n }\n\n children.sort(getComparer(function (obj1, obj2) {\n return obj1.get('zIndex') - obj2.get('zIndex');\n }));\n return this;\n },\n clear: function clear() {\n var children = this.get('children');\n\n while (children.length !== 0) {\n children[children.length - 1].remove(true);\n }\n\n return this;\n },\n add: function add(items) {\n var self = this;\n var children = self.get('children');\n\n if (!Util.isArray(items)) {\n items = [items];\n }\n\n for (var i = 0, len = items.length; i < len; i++) {\n var item = items[i];\n var parent = item.get('parent');\n\n if (parent) {\n var descendants = parent.get('children');\n Util.Array.remove(descendants, item);\n }\n\n self._setEvn(item);\n\n children.push(item);\n }\n\n return self;\n },\n _setEvn: function _setEvn(item) {\n var self = this;\n item._attrs.parent = self;\n item._attrs.context = self._attrs.context;\n item._attrs.canvas = self._attrs.canvas;\n var clip = item._attrs.attrs.clip;\n\n if (clip) {\n clip.set('parent', self);\n clip.set('context', self.get('context'));\n }\n\n if (item._attrs.isGroup) {\n var children = item._attrs.children;\n\n for (var i = 0, len = children.length; i < len; i++) {\n item._setEvn(children[i]);\n }\n }\n }\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/graphic/container.js\n// module id = 36\n// module chunks = 0","function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}\n\nvar Util = require('../util/common');\n\nvar Element = require('./element');\n\nvar Container = require('./container');\n\nvar Vector2 = require('./util/vector2');\n\nvar Group =\n/*#__PURE__*/\nfunction (_Element) {\n _inheritsLoose(Group, _Element);\n\n function Group() {\n return _Element.apply(this, arguments) || this;\n }\n\n var _proto = Group.prototype;\n\n _proto._initProperties = function _initProperties() {\n this._attrs = {\n zIndex: 0,\n visible: true,\n destroyed: false,\n isGroup: true,\n children: []\n };\n };\n\n _proto.drawInner = function drawInner(context) {\n var children = this.get('children');\n\n for (var i = 0, len = children.length; i < len; i++) {\n var child = children[i];\n child.draw(context);\n }\n\n return this;\n };\n\n _proto.getBBox = function getBBox() {\n var self = this;\n var minX = Infinity;\n var maxX = -Infinity;\n var minY = Infinity;\n var maxY = -Infinity;\n var children = self.get('children');\n\n for (var i = 0, length = children.length; i < length; i++) {\n var child = children[i];\n\n if (child.get('visible')) {\n var box = child.getBBox();\n\n if (!box) {\n continue;\n }\n\n var leftTop = [box.minX, box.minY];\n var leftBottom = [box.minX, box.maxY];\n var rightTop = [box.maxX, box.minY];\n var rightBottom = [box.maxX, box.maxY];\n var matrix = child.attr('matrix');\n Vector2.transformMat2d(leftTop, leftTop, matrix);\n Vector2.transformMat2d(leftBottom, leftBottom, matrix);\n Vector2.transformMat2d(rightTop, rightTop, matrix);\n Vector2.transformMat2d(rightBottom, rightBottom, matrix);\n minX = Math.min(leftTop[0], leftBottom[0], rightTop[0], rightBottom[0], minX);\n maxX = Math.max(leftTop[0], leftBottom[0], rightTop[0], rightBottom[0], maxX);\n minY = Math.min(leftTop[1], leftBottom[1], rightTop[1], rightBottom[1], minY);\n maxY = Math.max(leftTop[1], leftBottom[1], rightTop[1], rightBottom[1], maxY);\n }\n }\n\n return {\n minX: minX,\n minY: minY,\n maxX: maxX,\n maxY: maxY,\n x: minX,\n y: minY,\n width: maxX - minX,\n height: maxY - minY\n };\n };\n\n _proto.destroy = function destroy() {\n if (this.get('destroyed')) {\n return;\n }\n\n this.clear();\n\n _Element.prototype.destroy.call(this);\n };\n\n return Group;\n}(Element);\n\nUtil.mix(Group.prototype, Container, {\n getGroupClass: function getGroupClass() {\n return Group;\n }\n});\nmodule.exports = Group;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/graphic/group.js\n// module id = 37\n// module chunks = 0","module.exports = {\n requestAnimationFrame: typeof window === 'object' && window.requestAnimationFrame ? window.requestAnimationFrame : function (fn) {\n return setTimeout(fn, 16);\n }\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/graphic/util/requestAnimationFrame.js\n// module id = 38\n// module chunks = 0","/**\n * @fileOverview convert the line to curve\n * @author dxq613@gmail.com\n */\nvar Vector2 = require('./vector2');\n\nfunction getPoint(v) {\n return [v.x, v.y];\n}\n\nfunction smoothBezier(points, smooth, isLoop, constraint) {\n var cps = [];\n var prevPoint;\n var nextPoint;\n var hasConstraint = !!constraint;\n var min;\n var max;\n var point;\n var len;\n var l;\n var i;\n\n if (hasConstraint) {\n min = [Infinity, Infinity];\n max = [-Infinity, -Infinity];\n\n for (i = 0, l = points.length; i < l; i++) {\n point = getPoint(points[i]);\n Vector2.min(min, min, point);\n Vector2.max(max, max, point);\n }\n\n Vector2.min(min, min, constraint[0]);\n Vector2.max(max, max, constraint[1]);\n }\n\n for (i = 0, len = points.length; i < len; i++) {\n point = getPoint(points[i]);\n\n if (isLoop) {\n prevPoint = getPoint(points[i ? i - 1 : len - 1]);\n nextPoint = getPoint(points[(i + 1) % len]);\n } else {\n if (i === 0 || i === len - 1) {\n cps.push([point[0], point[1]]);\n continue;\n } else {\n prevPoint = getPoint(points[i - 1]);\n nextPoint = getPoint(points[i + 1]);\n }\n }\n\n var v = Vector2.sub([], nextPoint, prevPoint);\n Vector2.scale(v, v, smooth);\n var d0 = Vector2.distance(point, prevPoint);\n var d1 = Vector2.distance(point, nextPoint);\n var sum = d0 + d1;\n\n if (sum !== 0) {\n d0 /= sum;\n d1 /= sum;\n }\n\n var v1 = Vector2.scale([], v, -d0);\n var v2 = Vector2.scale([], v, d1);\n var cp0 = Vector2.add([], point, v1);\n var cp1 = Vector2.add([], point, v2);\n\n if (hasConstraint) {\n Vector2.max(cp0, cp0, min);\n Vector2.min(cp0, cp0, max);\n Vector2.max(cp1, cp1, min);\n Vector2.min(cp1, cp1, max);\n }\n\n cps.push([cp0[0], cp0[1]]);\n cps.push([cp1[0], cp1[1]]);\n }\n\n if (isLoop) {\n cps.push(cps.shift());\n }\n\n return cps;\n}\n\nfunction catmullRom2bezier(pointList, z, constraint) {\n var isLoop = !!z;\n var controlPointList = smoothBezier(pointList, 0.4, isLoop, constraint);\n var len = pointList.length;\n var d1 = [];\n var cp1;\n var cp2;\n var p;\n\n for (var i = 0; i < len - 1; i++) {\n cp1 = controlPointList[i * 2];\n cp2 = controlPointList[i * 2 + 1];\n p = pointList[i + 1];\n d1.push(['C', cp1[0], cp1[1], cp2[0], cp2[1], p.x, p.y]);\n }\n\n if (isLoop) {\n cp1 = controlPointList[len];\n cp2 = controlPointList[len + 1];\n p = pointList[0];\n d1.push(['C', cp1[0], cp1[1], cp2[0], cp2[1], p.x, p.y]);\n }\n\n return d1;\n}\n\nmodule.exports = {\n smooth: catmullRom2bezier\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/graphic/util/smooth.js\n// module id = 39\n// module chunks = 0","function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}\n\nvar Geom = require('./base');\n\nvar ShapeUtil = require('./shape/util');\n\nvar Util = require('../util/common');\n\nrequire('./shape/line');\n\nvar Path =\n/*#__PURE__*/\nfunction (_Geom) {\n _inheritsLoose(Path, _Geom);\n\n function Path() {\n return _Geom.apply(this, arguments) || this;\n }\n\n var _proto = Path.prototype;\n\n _proto.getDefaultCfg = function getDefaultCfg() {\n var cfg = _Geom.prototype.getDefaultCfg.call(this);\n\n cfg.type = 'path';\n cfg.shapeType = 'line';\n return cfg;\n };\n\n _proto.getDrawCfg = function getDrawCfg(obj) {\n var cfg = _Geom.prototype.getDrawCfg.call(this, obj);\n\n cfg.isStack = this.hasAdjust('stack');\n return cfg;\n };\n\n _proto.draw = function draw(data, shapeFactory) {\n var self = this;\n var container = self.get('container');\n var yScale = self.getYScale();\n var connectNulls = self.get('connectNulls');\n var splitArray = ShapeUtil.splitArray(data, yScale.field, connectNulls);\n var cfg = this.getDrawCfg(data[0]);\n cfg.origin = data;\n Util.each(splitArray, function (subData, splitedIndex) {\n cfg.splitedIndex = splitedIndex;\n cfg.points = subData;\n self.drawShape(cfg.shape, data[0], cfg, container, shapeFactory);\n });\n };\n\n return Path;\n}(Geom);\n\nGeom.Path = Path;\nmodule.exports = Path;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/geom/path.js\n// module id = 40\n// module chunks = 0","var Util = require('../../util/common');\n\nvar Shape = require('./shape');\n\nvar ShapeUtil = require('./util');\n\nvar Global = require('../../global'); // register line geom\n\n\nvar Line = Shape.registerFactory('line', {\n defaultShapeType: 'line'\n});\n\nfunction getStyle(cfg) {\n var style = {\n strokeStyle: cfg.color\n };\n\n if (cfg.size >= 0) {\n style.lineWidth = cfg.size;\n }\n\n Util.mix(style, cfg.style);\n return Util.mix({}, Global.shape.line, style);\n}\n\nfunction drawLines(cfg, container, style, smooth) {\n var points = cfg.points;\n\n if (points.length && Util.isArray(points[0].y)) {\n var topPoints = [];\n var bottomPoints = [];\n\n for (var i = 0, len = points.length; i < len; i++) {\n var point = points[i];\n var tmp = ShapeUtil.splitPoints(point);\n bottomPoints.push(tmp[0]);\n topPoints.push(tmp[1]);\n }\n\n if (cfg.isInCircle) {\n topPoints.push(topPoints[0]);\n bottomPoints.push(bottomPoints[0]);\n }\n\n if (cfg.isStack) {\n return container.addShape('Polyline', {\n className: 'line',\n attrs: Util.mix({\n points: topPoints,\n smooth: smooth\n }, style)\n });\n }\n\n var topShape = container.addShape('Polyline', {\n className: 'line',\n attrs: Util.mix({\n points: topPoints,\n smooth: smooth\n }, style)\n });\n var bottomShape = container.addShape('Polyline', {\n className: 'line',\n attrs: Util.mix({\n points: bottomPoints,\n smooth: smooth\n }, style)\n });\n return [topShape, bottomShape];\n }\n\n if (cfg.isInCircle) {\n points.push(points[0]);\n }\n\n return container.addShape('Polyline', {\n className: 'line',\n attrs: Util.mix({\n points: points,\n smooth: smooth\n }, style)\n });\n}\n\nvar SHAPES = ['line', 'smooth', 'dash'];\nUtil.each(SHAPES, function (shapeType) {\n Shape.registerShape('line', shapeType, {\n draw: function draw(cfg, container) {\n var smooth = shapeType === 'smooth';\n var style = getStyle(cfg);\n\n if (shapeType === 'dash') {\n style.lineDash = Global.lineDash;\n }\n\n return drawLines(cfg, container, style, smooth);\n }\n });\n});\nmodule.exports = Line;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/geom/shape/line.js\n// module id = 41\n// module chunks = 0","/**\n * @fileOverview Utility for calculate the with ratui in x axis\n * @author sima.zhang1990@gmail.com\n * @author dxq613@gmail.com\n */\nvar Global = require('../../global');\n\nvar Util = require('../../util/common');\n\nvar SizeMixin = {\n getDefalutSize: function getDefalutSize() {\n var defaultSize = this.get('defaultSize');\n\n if (!defaultSize) {\n var coord = this.get('coord');\n var xScale = this.getXScale();\n var dataArray = this.get('dataArray');\n var count = xScale.values.length;\n var range = xScale.range;\n var normalizeSize = 1 / count;\n var widthRatio = 1;\n\n if (coord && coord.isPolar) {\n if (coord.transposed && count > 1) {\n widthRatio = Global.widthRatio.multiplePie;\n } else {\n widthRatio = Global.widthRatio.rose;\n }\n } else {\n if (xScale.isLinear) {\n normalizeSize *= range[1] - range[0];\n }\n\n widthRatio = Global.widthRatio.column;\n }\n\n normalizeSize *= widthRatio;\n\n if (this.hasAdjust('dodge')) {\n normalizeSize = normalizeSize / dataArray.length;\n }\n\n defaultSize = normalizeSize;\n this.set('defaultSize', defaultSize);\n }\n\n return defaultSize;\n },\n getDimWidth: function getDimWidth(dimName) {\n var coord = this.get('coord');\n var start = coord.convertPoint({\n x: 0,\n y: 0\n });\n var end = coord.convertPoint({\n x: dimName === 'x' ? 1 : 0,\n y: dimName === 'x' ? 0 : 1\n });\n var width = 0;\n\n if (start && end) {\n width = Math.sqrt(Math.pow(end.x - start.x, 2) + Math.pow(end.y - start.y, 2));\n }\n\n return width;\n },\n _getWidth: function _getWidth() {\n var width = this.get('_width');\n\n if (!width) {\n var coord = this.get('coord');\n\n if (coord && coord.isPolar && !coord.transposed) {\n width = (coord.endAngle - coord.startAngle) * coord.circleRadius;\n } else {\n width = this.getDimWidth('x');\n }\n\n this.set('_width', width);\n }\n\n return width;\n },\n _toNormalizedSize: function _toNormalizedSize(size) {\n var width = this._getWidth();\n\n return size / width;\n },\n _toCoordSize: function _toCoordSize(normalizeSize) {\n var width = this._getWidth();\n\n return width * normalizeSize;\n },\n getNormalizedSize: function getNormalizedSize(obj) {\n var size = this.getAttrValue('size', obj);\n\n if (Util.isNil(size)) {\n size = this.getDefalutSize();\n } else {\n size = this._toNormalizedSize(size);\n }\n\n return size;\n },\n getSize: function getSize(obj) {\n var size = this.getAttrValue('size', obj);\n\n if (Util.isNil(size)) {\n var normalizeSize = this.getDefalutSize();\n size = this._toCoordSize(normalizeSize);\n }\n\n return size;\n }\n};\nmodule.exports = SizeMixin;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/geom/mixin/size.js\n// module id = 42\n// module chunks = 0","var isType = require('./is-type');\n\nvar isArray = Array.isArray ? Array.isArray : function (value) {\n return isType(value, 'Array');\n};\nmodule.exports = isArray;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_util@1.3.1@@antv/util/lib/type/is-array.js\n// module id = 43\n// module chunks = 0","function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}\n/**\n * marker shapes,used for tooltip and legend\n */\n\n\nvar Util = require('../util/common');\n\nvar _require = require('../graphic/index'),\n Shape = _require.Shape;\n\nvar SYMBOLS = {\n circle: function circle(x, y, r, ctx) {\n ctx.arc(x, y, r, 0, Math.PI * 2, false);\n },\n square: function square(x, y, r, ctx) {\n ctx.moveTo(x - r, y - r);\n ctx.lineTo(x + r, y - r);\n ctx.lineTo(x + r, y + r);\n ctx.lineTo(x - r, y + r);\n ctx.closePath();\n }\n};\n\nvar Marker =\n/*#__PURE__*/\nfunction (_Shape) {\n _inheritsLoose(Marker, _Shape);\n\n function Marker() {\n return _Shape.apply(this, arguments) || this;\n }\n\n var _proto = Marker.prototype;\n\n _proto._initProperties = function _initProperties() {\n _Shape.prototype._initProperties.call(this);\n\n this._attrs.canFill = true;\n this._attrs.canStroke = true;\n this._attrs.type = 'marker';\n };\n\n _proto.getDefaultAttrs = function getDefaultAttrs() {\n return {\n x: 0,\n y: 0,\n lineWidth: 0\n };\n };\n\n _proto.createPath = function createPath(context) {\n var attrs = this.get('attrs');\n var x = attrs.x,\n y = attrs.y,\n radius = attrs.radius;\n var symbol = attrs.symbol || 'circle';\n var method;\n\n if (Util.isFunction(symbol)) {\n method = symbol;\n } else {\n method = SYMBOLS[symbol];\n }\n\n context.beginPath();\n method(x, y, radius, context, this);\n };\n\n _proto.calculateBox = function calculateBox() {\n var attrs = this.get('attrs');\n var x = attrs.x,\n y = attrs.y,\n radius = attrs.radius;\n return {\n minX: x - radius,\n minY: y - radius,\n maxX: x + radius,\n maxY: y + radius\n };\n };\n\n return Marker;\n}(Shape);\n\nmodule.exports = Marker;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/component/marker.js\n// module id = 44\n// module chunks = 0","var Util = require('../util/common');\n\nvar _require = require('../graphic/index'),\n Group = _require.Group;\n\nvar Marker = require('./marker');\n\nvar MARKER_RADIUS = 3;\n\nvar List =\n/*#__PURE__*/\nfunction () {\n var _proto = List.prototype;\n\n _proto.getDefaultCfg = function getDefaultCfg() {\n return {\n showTitle: false,\n\n /**\n * title string\n * @type {?String}\n */\n title: null,\n\n /**\n * items array\n * @type {?Array}\n */\n items: null,\n\n /**\n * offset between title and items\n * @type {Number}\n */\n titleGap: 12,\n\n /**\n * offset between each item\n * @type {Number}\n */\n itemGap: 10,\n\n /**\n * the offset between each item in vertical direaction\n * @type {Number}\n */\n itemMarginBottom: 12,\n\n /**\n * the formatter for item text\n * @type {[type]}\n */\n itemFormatter: null,\n itemWidth: null,\n\n /**\n * offset between marker and text\n * @type {Number}\n */\n wordSpace: 6,\n x: 0,\n y: 0,\n layout: 'horizontal',\n\n /**\n * the join string of `name` and `value`\n * @type {String}\n */\n joinString: ': '\n };\n };\n\n function List(cfg) {\n Util.deepMix(this, this.getDefaultCfg(), cfg);\n\n this._init();\n\n this._renderTitle();\n\n this._renderItems();\n }\n\n _proto._init = function _init() {\n var container = new Group({\n zIndex: this.zIndex || 0\n });\n this.container = container;\n var wrapper = container.addGroup();\n this.wrapper = wrapper;\n var itemsGroup = wrapper.addGroup({\n className: 'itemsGroup'\n });\n this.itemsGroup = itemsGroup;\n\n if (this.parent) {\n this.parent.add(container);\n }\n };\n\n _proto._renderTitle = function _renderTitle(title) {\n title = title || this.title;\n var titleShape = this.titleShape;\n var titleHeight = 0;\n\n if (this.showTitle && title) {\n if (titleShape && !titleShape.get('destroyed')) {\n titleShape.attr('text', title);\n } else {\n var wrapper = this.wrapper,\n titleStyle = this.titleStyle;\n titleShape = wrapper.addShape('text', {\n className: 'title',\n attrs: Util.mix({\n x: 0,\n y: 0,\n text: title\n }, titleStyle)\n });\n this.titleShape = titleShape;\n }\n\n titleHeight = titleShape.getBBox().height + this.titleGap;\n }\n\n this._titleHeight = titleHeight;\n };\n\n _proto._renderItems = function _renderItems(items) {\n var self = this;\n items = items || self.items;\n\n if (!items) {\n return;\n }\n\n if (self.reversed) {\n items.reverse();\n }\n\n Util.each(items, function (item, index) {\n self._addItem(item, index);\n });\n\n if (items.length > 1) {\n this._adjustItems();\n }\n\n this._renderBackground();\n };\n\n _proto._renderBackground = function _renderBackground() {\n var background = this.background;\n\n if (background) {\n var container = this.container;\n var wrapper = this.wrapper;\n\n var _wrapper$getBBox = wrapper.getBBox(),\n minX = _wrapper$getBBox.minX,\n minY = _wrapper$getBBox.minY,\n width = _wrapper$getBBox.width,\n height = _wrapper$getBBox.height;\n\n var padding = background.padding || [0, 0, 0, 0];\n padding = Util.parsePadding(padding);\n var attrs = Util.mix({\n x: minX - padding[3],\n y: minY - padding[0],\n width: width + padding[1] + padding[3],\n height: height + padding[0] + padding[2]\n }, background);\n var backShape = this.backShape;\n\n if (backShape) {\n backShape.attr(attrs);\n } else {\n backShape = container.addShape('Rect', {\n zIndex: -1,\n attrs: attrs\n });\n }\n\n this.backShape = backShape;\n container.sort();\n }\n };\n\n _proto._addItem = function _addItem(item) {\n var itemsGroup = this.itemsGroup;\n var itemGroup = itemsGroup.addGroup({\n name: item.name,\n value: item.value,\n dataValue: item.dataValue,\n checked: item.checked\n });\n var unCheckStyle = this.unCheckStyle,\n unCheckColor = this.unCheckColor,\n nameStyle = this.nameStyle,\n valueStyle = this.valueStyle,\n wordSpace = this.wordSpace;\n var marker = item.marker,\n value = item.value;\n var startX = 0;\n\n if (unCheckColor) {\n unCheckStyle.fill = unCheckColor;\n }\n\n if (marker) {\n var radius = marker.radius || MARKER_RADIUS;\n var markerAttrs = Util.mix({\n x: radius,\n y: this._titleHeight\n }, marker);\n\n if (item.checked === false) {\n Util.mix(markerAttrs, unCheckStyle);\n }\n\n var markerShape = new Marker({\n className: 'item-marker',\n attrs: markerAttrs\n });\n itemGroup.add(markerShape);\n startX += markerShape.getBBox().width + wordSpace;\n }\n\n var nameText;\n var name = item.name;\n\n if (name) {\n var joinString = this.joinString || '';\n name = value ? name + joinString : name;\n nameText = itemGroup.addShape('text', {\n className: 'name',\n attrs: Util.mix({\n x: startX,\n y: this._titleHeight,\n text: this._formatItemValue(name)\n }, nameStyle, item.checked === false ? unCheckStyle : null)\n });\n }\n\n if (value) {\n var valueX = startX;\n\n if (nameText) {\n valueX += nameText.getBBox().width;\n }\n\n itemGroup.addShape('text', {\n className: 'value',\n attrs: Util.mix({\n x: valueX,\n y: this._titleHeight,\n text: value\n }, valueStyle, item.checked === false ? unCheckStyle : null)\n });\n }\n\n return itemGroup;\n };\n\n _proto._formatItemValue = function _formatItemValue(value) {\n var formatter = this.itemFormatter;\n\n if (formatter) {\n value = formatter.call(this, value);\n }\n\n return value;\n };\n\n _proto._getMaxItemWidth = function _getMaxItemWidth() {\n var width;\n var itemWidth = this.itemWidth;\n\n if (Util.isNumber(itemWidth) || Util.isNil(itemWidth)) {\n return itemWidth;\n }\n\n if (itemWidth === 'auto') {\n var itemsGroup = this.itemsGroup;\n var children = itemsGroup.get('children');\n var count = children.length;\n var maxItemWidth = 0;\n\n for (var i = 0; i < count; i++) {\n var _children$i$getBBox = children[i].getBBox(),\n _width = _children$i$getBBox.width;\n\n maxItemWidth = Math.max(maxItemWidth, _width);\n }\n\n var maxLength = this.maxLength;\n var itemGap = this.itemGap;\n var twoAvgWidth = (maxLength - itemGap) / 2;\n var threeAvgWidth = (maxLength - itemGap * 2) / 3;\n\n if (count === 2) {\n width = Math.max(maxItemWidth, twoAvgWidth);\n } else {\n // 1. max <= 3Avg, 3Avg\n // 2. 3Avg < max && max < 2avg, 2avg\n // 3. max > 2avg, max, one column\n if (maxItemWidth <= threeAvgWidth) {\n width = threeAvgWidth;\n } else if (maxItemWidth <= twoAvgWidth) {\n width = twoAvgWidth;\n } else {\n width = maxItemWidth;\n }\n }\n\n return width;\n }\n };\n\n _proto._adjustHorizontal = function _adjustHorizontal() {\n var maxLength = this.maxLength,\n itemsGroup = this.itemsGroup;\n var children = itemsGroup.get('children');\n var itemGap = this.itemGap,\n itemMarginBottom = this.itemMarginBottom;\n var titleHeight = this._titleHeight;\n var row = 0;\n var rowWidth = 0;\n var width;\n var height;\n\n var itemWidth = this._getMaxItemWidth();\n\n var legendHitBoxes = [];\n\n for (var i = 0, len = children.length; i < len; i++) {\n var child = children[i];\n var box = child.getBBox();\n var childHeight = box.height;\n var childWidth = box.width;\n width = itemWidth || childWidth;\n height = childHeight + itemMarginBottom;\n\n if (width - (maxLength - rowWidth) > 0.0001) {\n row++;\n rowWidth = 0;\n }\n\n child.moveTo(rowWidth, row * height);\n legendHitBoxes.push({\n x: rowWidth,\n y: row * height + titleHeight - childHeight / 2,\n width: childWidth * 1.375,\n height: childHeight * 1.375\n });\n rowWidth += width + itemGap;\n }\n\n this.legendHitBoxes = legendHitBoxes;\n return;\n };\n\n _proto._adjustVertical = function _adjustVertical() {\n var maxLength = this.maxLength,\n itemsGroup = this.itemsGroup;\n var itemGap = this.itemGap,\n itemMarginBottom = this.itemMarginBottom,\n itemWidth = this.itemWidth;\n var titleHeight = this._titleHeight;\n var children = itemsGroup.get('children');\n var colHeight = 0;\n var width;\n var height;\n var maxItemWidth = 0;\n var totalWidth = 0;\n var legendHitBoxes = [];\n\n for (var i = 0, length = children.length; i < length; i++) {\n var child = children[i];\n var bbox = child.getBBox();\n width = bbox.width;\n height = bbox.height;\n\n if (Util.isNumber(itemWidth)) {\n maxItemWidth = itemWidth + itemGap;\n } else if (width > maxItemWidth) {\n maxItemWidth = width + itemGap;\n }\n\n if (maxLength - colHeight < height) {\n colHeight = 0;\n totalWidth += maxItemWidth;\n child.moveTo(totalWidth, 0);\n legendHitBoxes.push({\n x: totalWidth,\n y: titleHeight - height / 2,\n width: width * 1.375,\n height: height * 1.375\n });\n } else {\n child.moveTo(totalWidth, colHeight);\n legendHitBoxes.push({\n x: totalWidth,\n y: colHeight - height / 2 + titleHeight,\n width: width * 1.375,\n height: height * 1.375\n });\n }\n\n colHeight += height + itemMarginBottom;\n }\n\n this.legendHitBoxes = legendHitBoxes;\n return;\n };\n\n _proto._adjustItems = function _adjustItems() {\n var layout = this.layout;\n\n if (layout === 'horizontal') {\n this._adjustHorizontal();\n } else {\n this._adjustVertical();\n }\n };\n\n _proto.moveTo = function moveTo(x, y) {\n this.x = x;\n this.y = y;\n var container = this.container;\n container && container.moveTo(x, y);\n return this;\n };\n\n _proto.setItems = function setItems(items) {\n this.clearItems();\n\n this._renderItems(items);\n };\n\n _proto.setTitle = function setTitle(title) {\n this._renderTitle(title);\n };\n\n _proto.clearItems = function clearItems() {\n var itemsGroup = this.itemsGroup;\n itemsGroup.clear();\n };\n\n _proto.getWidth = function getWidth() {\n var container = this.container;\n var bbox = container.getBBox();\n return bbox.width;\n };\n\n _proto.getHeight = function getHeight() {\n var container = this.container;\n var bbox = container.getBBox();\n return bbox.height;\n };\n\n _proto.show = function show() {\n var container = this.container;\n container.show();\n };\n\n _proto.hide = function hide() {\n var container = this.container;\n container.hide();\n };\n\n _proto.clear = function clear() {\n var container = this.container;\n container.clear();\n container.remove(true);\n };\n\n return List;\n}();\n\nmodule.exports = List;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/component/list.js\n// module id = 45\n// module chunks = 0","/**\n * Animate configuration and register\n * @author sima.zhang1990@gmail.com\n */\nvar Util = require('../util/common');\n\nvar defaultAnimationCfg = {\n appear: {\n duration: 450,\n easing: 'quadraticOut'\n },\n // 'appear' animation options\n update: {\n duration: 300,\n easing: 'quadraticOut'\n },\n // 'update' animation options\n enter: {\n duration: 300,\n easing: 'quadraticOut'\n },\n // 'enter' animation options\n leave: {\n duration: 350,\n easing: 'quadraticIn' // 'leave' animation options\n\n }\n};\nvar Animate = {\n defaultCfg: {},\n Action: {},\n getAnimation: function getAnimation(geomType, coord, animationType) {\n var geomAnimateCfg = this.defaultCfg[geomType];\n\n if (geomAnimateCfg) {\n var animation = geomAnimateCfg[animationType];\n\n if (Util.isFunction(animation)) {\n return animation(coord);\n }\n }\n\n return false;\n },\n getAnimateCfg: function getAnimateCfg(geomType, animationType) {\n var defaultCfg = defaultAnimationCfg[animationType];\n var geomConfig = this.defaultCfg[geomType];\n\n if (geomConfig && geomConfig.cfg && geomConfig.cfg[animationType]) {\n return Util.deepMix({}, defaultCfg, geomConfig.cfg[animationType]);\n }\n\n return defaultCfg;\n },\n registerAnimation: function registerAnimation(animationName, animationFun) {\n if (!this.Action) {\n this.Action = {};\n }\n\n this.Action[animationName] = animationFun;\n }\n};\nmodule.exports = Animate;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/animation/animate.js\n// module id = 46\n// module chunks = 0","/**\n * Utility\n * @author sima.zhang1990@gmail.com\n */\nvar _require = require('../graphic/index'),\n Matrix = _require.Matrix;\n\nvar Util = require('../util/common');\n\nvar Helpers = {\n getCoordInfo: function getCoordInfo(coord) {\n var start = coord.start;\n var end = coord.end;\n return {\n start: start,\n end: end,\n width: end.x - start.x,\n height: Math.abs(end.y - start.y)\n };\n },\n getScaledMatrix: function getScaledMatrix(shape, v, direct) {\n var scaledMatrix;\n shape.apply(v);\n var x = v[0];\n var y = v[1];\n\n if (direct === 'x') {\n shape.transform([['t', x, y], ['s', 0.01, 1], ['t', -x, -y]]);\n var matrix = shape.getMatrix();\n scaledMatrix = Matrix.transform(matrix, [['t', x, y], ['s', 100, 1], ['t', -x, -y]]);\n } else if (direct === 'y') {\n shape.transform([['t', x, y], ['s', 1, 0.01], ['t', -x, -y]]);\n\n var _matrix = shape.getMatrix();\n\n scaledMatrix = Matrix.transform(_matrix, [['t', x, y], ['s', 1, 100], ['t', -x, -y]]);\n } else if (direct === 'xy') {\n shape.transform([['t', x, y], ['s', 0.01, 0.01], ['t', -x, -y]]);\n\n var _matrix2 = shape.getMatrix();\n\n scaledMatrix = Matrix.transform(_matrix2, [['t', x, y], ['s', 100, 100], ['t', -x, -y]]);\n }\n\n return scaledMatrix;\n },\n getAnimateParam: function getAnimateParam(animateCfg, index, id) {\n var result = {};\n\n if (animateCfg.delay) {\n result.delay = Util.isFunction(animateCfg.delay) ? animateCfg.delay(index, id) : animateCfg.delay;\n }\n\n result.easing = animateCfg.easing;\n result.duration = animateCfg.duration;\n result.delay = animateCfg.delay;\n return result;\n },\n doAnimation: function doAnimation(shape, endState, animateCfg, callback) {\n var id = shape._id;\n var index = shape.get('index');\n\n var _Helpers$getAnimatePa = Helpers.getAnimateParam(animateCfg, index, id),\n easing = _Helpers$getAnimatePa.easing,\n delay = _Helpers$getAnimatePa.delay,\n duration = _Helpers$getAnimatePa.duration;\n\n var anim = shape.animate().to({\n attrs: endState,\n duration: duration,\n delay: delay,\n easing: easing\n });\n\n if (callback) {\n anim.onEnd(function () {\n callback();\n });\n }\n }\n};\nmodule.exports = Helpers;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/animation/util.js\n// module id = 47\n// module chunks = 0","var F2 = require('./core');\n\nrequire('@antv/f2/lib/geom/');\n\nrequire('@antv/f2/lib/geom/adjust/');\n\nrequire('@antv/f2/lib/coord/polar'); // polar coordinate\n\n\nrequire('@antv/f2/lib/component/axis/circle'); // the axis for polar coordinate\n\n\nrequire('@antv/f2/lib/scale/time-cat'); // timeCat scale\n\n\nrequire('@antv/f2/lib/component/guide/arc'); // guide components\n\n\nrequire('@antv/f2/lib/component/guide/line'); // guide components\n\n\nrequire('@antv/f2/lib/component/guide/text'); // guide components\n\n\nrequire('@antv/f2/lib/component/guide/tag'); // guide components\n\n\nrequire('@antv/f2/lib/component/guide/rect'); // guide components\n\n\nrequire('@antv/f2/lib/component/guide/region-filter'); // guide components\n\n\nrequire('@antv/f2/lib/component/guide/point'); // guide components\n\n\nvar Tooltip = require('@antv/f2/lib/plugin/tooltip');\n\nvar Guide = require('@antv/f2/lib/plugin/guide');\n\nvar Legend = require('@antv/f2/lib/plugin/legend');\n\nvar Animation = require('@antv/f2/lib/animation/detail');\n\nvar ScrollBar = require('@antv/f2/lib/plugin/scroll-bar');\n\nvar PieLabel = require('@antv/f2/lib/plugin/pie-label');\n\nF2.Animate = require('@antv/f2/lib/animation/animate'); // register plugins\n\nF2.Chart.plugins.register([Tooltip, Legend, Guide, Animation, ScrollBar, PieLabel]); // add interaction\n\nrequire('@antv/f2/lib/interaction/pie-select');\n\nrequire('@antv/f2/lib/interaction/interval-select');\n\nrequire('@antv/f2/lib/interaction/pan');\n\nF2.Interaction = require('@antv/f2/lib/interaction/base');\nmodule.exports = F2;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/index.js\n// module id = 48\n// module chunks = 0","var Renderer = require('./renderer');\n\nvar Core = require('@antv/f2/lib/core'); // 引入 F2 的核心包\n\n\nfunction strLen(str) {\n var len = 0;\n\n for (var i = 0; i < str.length; i++) {\n if (str.charCodeAt(i) > 0 && str.charCodeAt(i) < 128) {\n len++;\n } else {\n len += 2;\n }\n }\n\n return len;\n} // override some methods\n// 由于目前钉钉小程序框架善不支持 measureText 方法,故用此方法 mock\n\n\nCore.Util.measureText = function (text, font, ctx) {\n if (!ctx || !ctx.measureText) {\n var fontSize = 12;\n\n if (font) {\n fontSize = parseInt(font.split(' ')[3], 10);\n }\n\n fontSize /= 2;\n return {\n width: strLen(text) * fontSize\n };\n }\n\n ctx.font = font || '12px sans-serif';\n return ctx.measureText(text);\n}; // 为小程序封装事件机制\n\n\nCore.Util.addEventListener = function (source, type, listener) {\n source.addListener(type, listener);\n};\n\nCore.Util.removeEventListener = function (source, type, listener) {\n source.removeListener(type, listener);\n};\n\nCore.Util.createEvent = function (event, chart) {\n var type = event.type;\n var x = 0;\n var y = 0;\n var touches = event.touches;\n\n if (touches && touches.length > 0) {\n x = touches[0].x;\n y = touches[0].y;\n }\n\n return {\n type: type,\n chart: chart,\n x: x,\n y: y\n };\n};\n\nCore.Renderer = Renderer;\nmodule.exports = Core;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/core.js\n// module id = 49\n// module chunks = 0","function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\n/**\n * f2 专为适配微信小程序绘图上下文 context 而封装的伪 Canvas\n * @authors (sima.zhang1990@gmail.com)\n * @version 1.0.0\n */\nvar EventEmitter = require('wolfy87-eventemitter');\n\nvar CAPITALIZED_ATTRS_MAP = {\n fillStyle: 'FillStyle',\n fontSize: 'FontSize',\n globalAlpha: 'GlobalAlpha',\n opacity: 'GlobalAlpha',\n lineCap: 'LineCap',\n lineJoin: 'LineJoin',\n lineWidth: 'LineWidth',\n miterLimit: 'MiterLimit',\n strokeStyle: 'StrokeStyle',\n textAlign: 'TextAlign',\n textBaseline: 'TextBaseline',\n shadow: 'Shadow'\n};\n\nvar Renderer =\n/*#__PURE__*/\nfunction (_EventEmitter) {\n _inheritsLoose(Renderer, _EventEmitter);\n\n function Renderer(myCtx) {\n var _this;\n\n _this = _EventEmitter.call(this) || this;\n\n var self = _assertThisInitialized(_assertThisInitialized(_this));\n\n self.ctx = myCtx;\n self.style = {}; // just mock\n\n self._initContext(myCtx);\n\n return _this;\n }\n\n var _proto = Renderer.prototype;\n\n _proto.getContext = function getContext(type) {\n if (type === '2d') {\n return this.ctx;\n }\n };\n\n _proto._initContext = function _initContext(myCtx) {\n Object.keys(CAPITALIZED_ATTRS_MAP).map(function (key) {\n Object.defineProperty(myCtx, key, {\n set: function set(value) {\n // myCtx.setShadow(shadowOffsetX, shadowOffsetY, shadowBlur, shadowColor)\n if (key === 'shadow' && myCtx.setShadow && Array.isArray(value)) {\n myCtx.setShadow(value[0], value[1], value[2], value[3]);\n } else {\n var name = 'set' + CAPITALIZED_ATTRS_MAP[key];\n myCtx[name](value);\n }\n }\n });\n return key;\n });\n };\n\n return Renderer;\n}(EventEmitter);\n\nmodule.exports = Renderer;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/renderer.js\n// module id = 50\n// module chunks = 0","/*!\n * EventEmitter v5.2.5 - git.io/ee\n * Unlicense - http://unlicense.org/\n * Oliver Caldwell - http://oli.me.uk/\n * @preserve\n */\n;\n\n(function (exports) {\n 'use strict';\n /**\n * Class for managing events.\n * Can be extended to provide event functionality in other classes.\n *\n * @class EventEmitter Manages event registering and emitting.\n */\n\n function EventEmitter() {} // Shortcuts to improve speed and size\n\n\n var proto = EventEmitter.prototype;\n var originalGlobalValue = exports.EventEmitter;\n /**\n * Finds the index of the listener for the event in its storage array.\n *\n * @param {Function[]} listeners Array of listeners to search through.\n * @param {Function} listener Method to look for.\n * @return {Number} Index of the specified listener, -1 if not found\n * @api private\n */\n\n function indexOfListener(listeners, listener) {\n var i = listeners.length;\n\n while (i--) {\n if (listeners[i].listener === listener) {\n return i;\n }\n }\n\n return -1;\n }\n /**\n * Alias a method while keeping the context correct, to allow for overwriting of target method.\n *\n * @param {String} name The name of the target method.\n * @return {Function} The aliased method\n * @api private\n */\n\n\n function alias(name) {\n return function aliasClosure() {\n return this[name].apply(this, arguments);\n };\n }\n /**\n * Returns the listener array for the specified event.\n * Will initialise the event object and listener arrays if required.\n * Will return an object if you use a regex search. The object contains keys for each matched event. So /ba[rz]/ might return an object containing bar and baz. But only if you have either defined them with defineEvent or added some listeners to them.\n * Each property in the object response is an array of listener functions.\n *\n * @param {String|RegExp} evt Name of the event to return the listeners from.\n * @return {Function[]|Object} All listener functions for the event.\n */\n\n\n proto.getListeners = function getListeners(evt) {\n var events = this._getEvents();\n\n var response;\n var key; // Return a concatenated array of all matching events if\n // the selector is a regular expression.\n\n if (evt instanceof RegExp) {\n response = {};\n\n for (key in events) {\n if (events.hasOwnProperty(key) && evt.test(key)) {\n response[key] = events[key];\n }\n }\n } else {\n response = events[evt] || (events[evt] = []);\n }\n\n return response;\n };\n /**\n * Takes a list of listener objects and flattens it into a list of listener functions.\n *\n * @param {Object[]} listeners Raw listener objects.\n * @return {Function[]} Just the listener functions.\n */\n\n\n proto.flattenListeners = function flattenListeners(listeners) {\n var flatListeners = [];\n var i;\n\n for (i = 0; i < listeners.length; i += 1) {\n flatListeners.push(listeners[i].listener);\n }\n\n return flatListeners;\n };\n /**\n * Fetches the requested listeners via getListeners but will always return the results inside an object. This is mainly for internal use but others may find it useful.\n *\n * @param {String|RegExp} evt Name of the event to return the listeners from.\n * @return {Object} All listener functions for an event in an object.\n */\n\n\n proto.getListenersAsObject = function getListenersAsObject(evt) {\n var listeners = this.getListeners(evt);\n var response;\n\n if (listeners instanceof Array) {\n response = {};\n response[evt] = listeners;\n }\n\n return response || listeners;\n };\n\n function isValidListener(listener) {\n if (typeof listener === 'function' || listener instanceof RegExp) {\n return true;\n } else if (listener && typeof listener === 'object') {\n return isValidListener(listener.listener);\n } else {\n return false;\n }\n }\n /**\n * Adds a listener function to the specified event.\n * The listener will not be added if it is a duplicate.\n * If the listener returns true then it will be removed after it is called.\n * If you pass a regular expression as the event name then the listener will be added to all events that match it.\n *\n * @param {String|RegExp} evt Name of the event to attach the listener to.\n * @param {Function} listener Method to be called when the event is emitted. If the function returns true then it will be removed after calling.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n\n\n proto.addListener = function addListener(evt, listener) {\n if (!isValidListener(listener)) {\n throw new TypeError('listener must be a function');\n }\n\n var listeners = this.getListenersAsObject(evt);\n var listenerIsWrapped = typeof listener === 'object';\n var key;\n\n for (key in listeners) {\n if (listeners.hasOwnProperty(key) && indexOfListener(listeners[key], listener) === -1) {\n listeners[key].push(listenerIsWrapped ? listener : {\n listener: listener,\n once: false\n });\n }\n }\n\n return this;\n };\n /**\n * Alias of addListener\n */\n\n\n proto.on = alias('addListener');\n /**\n * Semi-alias of addListener. It will add a listener that will be\n * automatically removed after its first execution.\n *\n * @param {String|RegExp} evt Name of the event to attach the listener to.\n * @param {Function} listener Method to be called when the event is emitted. If the function returns true then it will be removed after calling.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n\n proto.addOnceListener = function addOnceListener(evt, listener) {\n return this.addListener(evt, {\n listener: listener,\n once: true\n });\n };\n /**\n * Alias of addOnceListener.\n */\n\n\n proto.once = alias('addOnceListener');\n /**\n * Defines an event name. This is required if you want to use a regex to add a listener to multiple events at once. If you don't do this then how do you expect it to know what event to add to? Should it just add to every possible match for a regex? No. That is scary and bad.\n * You need to tell it what event names should be matched by a regex.\n *\n * @param {String} evt Name of the event to create.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n\n proto.defineEvent = function defineEvent(evt) {\n this.getListeners(evt);\n return this;\n };\n /**\n * Uses defineEvent to define multiple events.\n *\n * @param {String[]} evts An array of event names to define.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n\n\n proto.defineEvents = function defineEvents(evts) {\n for (var i = 0; i < evts.length; i += 1) {\n this.defineEvent(evts[i]);\n }\n\n return this;\n };\n /**\n * Removes a listener function from the specified event.\n * When passed a regular expression as the event name, it will remove the listener from all events that match it.\n *\n * @param {String|RegExp} evt Name of the event to remove the listener from.\n * @param {Function} listener Method to remove from the event.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n\n\n proto.removeListener = function removeListener(evt, listener) {\n var listeners = this.getListenersAsObject(evt);\n var index;\n var key;\n\n for (key in listeners) {\n if (listeners.hasOwnProperty(key)) {\n index = indexOfListener(listeners[key], listener);\n\n if (index !== -1) {\n listeners[key].splice(index, 1);\n }\n }\n }\n\n return this;\n };\n /**\n * Alias of removeListener\n */\n\n\n proto.off = alias('removeListener');\n /**\n * Adds listeners in bulk using the manipulateListeners method.\n * If you pass an object as the first argument you can add to multiple events at once. The object should contain key value pairs of events and listeners or listener arrays. You can also pass it an event name and an array of listeners to be added.\n * You can also pass it a regular expression to add the array of listeners to all events that match it.\n * Yeah, this function does quite a bit. That's probably a bad thing.\n *\n * @param {String|Object|RegExp} evt An event name if you will pass an array of listeners next. An object if you wish to add to multiple events at once.\n * @param {Function[]} [listeners] An optional array of listener functions to add.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n\n proto.addListeners = function addListeners(evt, listeners) {\n // Pass through to manipulateListeners\n return this.manipulateListeners(false, evt, listeners);\n };\n /**\n * Removes listeners in bulk using the manipulateListeners method.\n * If you pass an object as the first argument you can remove from multiple events at once. The object should contain key value pairs of events and listeners or listener arrays.\n * You can also pass it an event name and an array of listeners to be removed.\n * You can also pass it a regular expression to remove the listeners from all events that match it.\n *\n * @param {String|Object|RegExp} evt An event name if you will pass an array of listeners next. An object if you wish to remove from multiple events at once.\n * @param {Function[]} [listeners] An optional array of listener functions to remove.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n\n\n proto.removeListeners = function removeListeners(evt, listeners) {\n // Pass through to manipulateListeners\n return this.manipulateListeners(true, evt, listeners);\n };\n /**\n * Edits listeners in bulk. The addListeners and removeListeners methods both use this to do their job. You should really use those instead, this is a little lower level.\n * The first argument will determine if the listeners are removed (true) or added (false).\n * If you pass an object as the second argument you can add/remove from multiple events at once. The object should contain key value pairs of events and listeners or listener arrays.\n * You can also pass it an event name and an array of listeners to be added/removed.\n * You can also pass it a regular expression to manipulate the listeners of all events that match it.\n *\n * @param {Boolean} remove True if you want to remove listeners, false if you want to add.\n * @param {String|Object|RegExp} evt An event name if you will pass an array of listeners next. An object if you wish to add/remove from multiple events at once.\n * @param {Function[]} [listeners] An optional array of listener functions to add/remove.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n\n\n proto.manipulateListeners = function manipulateListeners(remove, evt, listeners) {\n var i;\n var value;\n var single = remove ? this.removeListener : this.addListener;\n var multiple = remove ? this.removeListeners : this.addListeners; // If evt is an object then pass each of its properties to this method\n\n if (typeof evt === 'object' && !(evt instanceof RegExp)) {\n for (i in evt) {\n if (evt.hasOwnProperty(i) && (value = evt[i])) {\n // Pass the single listener straight through to the singular method\n if (typeof value === 'function') {\n single.call(this, i, value);\n } else {\n // Otherwise pass back to the multiple function\n multiple.call(this, i, value);\n }\n }\n }\n } else {\n // So evt must be a string\n // And listeners must be an array of listeners\n // Loop over it and pass each one to the multiple method\n i = listeners.length;\n\n while (i--) {\n single.call(this, evt, listeners[i]);\n }\n }\n\n return this;\n };\n /**\n * Removes all listeners from a specified event.\n * If you do not specify an event then all listeners will be removed.\n * That means every event will be emptied.\n * You can also pass a regex to remove all events that match it.\n *\n * @param {String|RegExp} [evt] Optional name of the event to remove all listeners for. Will remove from every event if not passed.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n\n\n proto.removeEvent = function removeEvent(evt) {\n var type = typeof evt;\n\n var events = this._getEvents();\n\n var key; // Remove different things depending on the state of evt\n\n if (type === 'string') {\n // Remove all listeners for the specified event\n delete events[evt];\n } else if (evt instanceof RegExp) {\n // Remove all events matching the regex.\n for (key in events) {\n if (events.hasOwnProperty(key) && evt.test(key)) {\n delete events[key];\n }\n }\n } else {\n // Remove all listeners in all events\n delete this._events;\n }\n\n return this;\n };\n /**\n * Alias of removeEvent.\n *\n * Added to mirror the node API.\n */\n\n\n proto.removeAllListeners = alias('removeEvent');\n /**\n * Emits an event of your choice.\n * When emitted, every listener attached to that event will be executed.\n * If you pass the optional argument array then those arguments will be passed to every listener upon execution.\n * Because it uses `apply`, your array of arguments will be passed as if you wrote them out separately.\n * So they will not arrive within the array on the other side, they will be separate.\n * You can also pass a regular expression to emit to all events that match it.\n *\n * @param {String|RegExp} evt Name of the event to emit and execute listeners for.\n * @param {Array} [args] Optional array of arguments to be passed to each listener.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n\n proto.emitEvent = function emitEvent(evt, args) {\n var listenersMap = this.getListenersAsObject(evt);\n var listeners;\n var listener;\n var i;\n var key;\n var response;\n\n for (key in listenersMap) {\n if (listenersMap.hasOwnProperty(key)) {\n listeners = listenersMap[key].slice(0);\n\n for (i = 0; i < listeners.length; i++) {\n // If the listener returns true then it shall be removed from the event\n // The function is executed either with a basic call or an apply if there is an args array\n listener = listeners[i];\n\n if (listener.once === true) {\n this.removeListener(evt, listener.listener);\n }\n\n response = listener.listener.apply(this, args || []);\n\n if (response === this._getOnceReturnValue()) {\n this.removeListener(evt, listener.listener);\n }\n }\n }\n }\n\n return this;\n };\n /**\n * Alias of emitEvent\n */\n\n\n proto.trigger = alias('emitEvent');\n /**\n * Subtly different from emitEvent in that it will pass its arguments on to the listeners, as opposed to taking a single array of arguments to pass on.\n * As with emitEvent, you can pass a regex in place of the event name to emit to all events that match it.\n *\n * @param {String|RegExp} evt Name of the event to emit and execute listeners for.\n * @param {...*} Optional additional arguments to be passed to each listener.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n\n proto.emit = function emit(evt) {\n var args = Array.prototype.slice.call(arguments, 1);\n return this.emitEvent(evt, args);\n };\n /**\n * Sets the current value to check against when executing listeners. If a\n * listeners return value matches the one set here then it will be removed\n * after execution. This value defaults to true.\n *\n * @param {*} value The new value to check for when executing listeners.\n * @return {Object} Current instance of EventEmitter for chaining.\n */\n\n\n proto.setOnceReturnValue = function setOnceReturnValue(value) {\n this._onceReturnValue = value;\n return this;\n };\n /**\n * Fetches the current value to check against when executing listeners. If\n * the listeners return value matches this one then it should be removed\n * automatically. It will return true by default.\n *\n * @return {*|Boolean} The current value to check for or the default, true.\n * @api private\n */\n\n\n proto._getOnceReturnValue = function _getOnceReturnValue() {\n if (this.hasOwnProperty('_onceReturnValue')) {\n return this._onceReturnValue;\n } else {\n return true;\n }\n };\n /**\n * Fetches the events object and creates one if required.\n *\n * @return {Object} The events storage object.\n * @api private\n */\n\n\n proto._getEvents = function _getEvents() {\n return this._events || (this._events = {});\n };\n /**\n * Reverts the global {@link EventEmitter} to its previous value and returns a reference to this version.\n *\n * @return {Function} Non conflicting EventEmitter class.\n */\n\n\n EventEmitter.noConflict = function noConflict() {\n exports.EventEmitter = originalGlobalValue;\n return EventEmitter;\n }; // Expose the class either via AMD, CommonJS or the global object\n\n\n if (typeof define === 'function' && define.amd) {\n define(function () {\n return EventEmitter;\n });\n } else if (typeof module === 'object' && module.exports) {\n module.exports = EventEmitter;\n } else {\n exports.EventEmitter = EventEmitter;\n }\n})(typeof window !== 'undefined' ? window : this || {});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_wolfy87-eventemitter@5.2.5@wolfy87-eventemitter/EventEmitter.js\n// module id = 51\n// module chunks = 0","var Core = {};\n\nvar Global = require('./global');\n\nCore.Global = Global;\nCore.version = Global.version;\nCore.Chart = require('./chart/chart');\nCore.Shape = require('./geom/shape/shape');\nCore.G = require('./graphic/index');\nCore.Util = require('./util/common'); // Core.track = function(enable) {\n// Global.trackable = enable;\n// };\n// require('./track');\n// 2018-12-27 关闭打点\n\nCore.track = function () {\n return null;\n};\n\nmodule.exports = Core;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/core.js\n// module id = 52\n// module chunks = 0","/**\n * @fileOverview default theme\n * @author dxq613@gail.com\n */\nvar Util = require('./util/common');\n\nvar color1 = '#E8E8E8'; // color of axis-line and axis-grid\n\nvar color2 = '#808080'; // color of axis label\n\nvar defaultAxis = {\n label: {\n fill: color2,\n fontSize: 10\n },\n line: {\n stroke: color1,\n lineWidth: 1\n },\n grid: {\n type: 'line',\n stroke: color1,\n lineWidth: 1,\n lineDash: [2]\n },\n tickLine: null,\n labelOffset: 7.5\n};\nvar Theme = {\n fontFamily: '\"Helvetica Neue\", \"San Francisco\", Helvetica, Tahoma, Arial, \"PingFang SC\", \"Hiragino Sans GB\", \"Heiti SC\", \"Microsoft YaHei\", sans-serif',\n defaultColor: '#1890FF',\n pixelRatio: 1,\n padding: 'auto',\n appendPadding: 15,\n colors: ['#1890FF', '#2FC25B', '#FACC14', '#223273', '#8543E0', '#13C2C2', '#3436C7', '#F04864'],\n shapes: {\n line: ['line', 'dash'],\n point: ['circle', 'hollowCircle']\n },\n sizes: [4, 10],\n axis: {\n common: defaultAxis,\n // common axis configuration\n bottom: Util.mix({}, defaultAxis, {\n grid: null\n }),\n left: Util.mix({}, defaultAxis, {\n line: null\n }),\n right: Util.mix({}, defaultAxis, {\n line: null\n }),\n circle: Util.mix({}, defaultAxis, {\n line: null\n }),\n radius: Util.mix({}, defaultAxis, {\n labelOffset: 4\n })\n },\n shape: {\n line: {\n lineWidth: 2,\n lineJoin: 'round',\n lineCap: 'round'\n },\n point: {\n lineWidth: 0,\n size: 3\n },\n area: {\n fillOpacity: 0.1\n }\n },\n _defaultAxis: defaultAxis\n};\nmodule.exports = Theme;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/theme.js\n// module id = 53\n// module chunks = 0","var DomUtil;\n/**\n * Detects support for options object argument in addEventListener.\n * https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Safely_detecting_option_support\n * @private\n */\n\nvar supportsEventListenerOptions = function () {\n var supports = false;\n\n try {\n var options = Object.defineProperty({}, 'passive', {\n get: function get() {\n supports = true;\n }\n });\n window.addEventListener('e', null, options);\n } catch (e) {// continue regardless of error\n }\n\n return supports;\n}(); // Default passive to true as expected by Chrome for 'touchstart' and 'touchend' events.\n// https://github.com/chartjs/Chart.js/issues/4287\n\n\nvar eventListenerOptions = supportsEventListenerOptions ? {\n passive: true\n} : false;\n\nfunction createEvent(type, chart, x, y, nativeEvent) {\n return {\n type: type,\n chart: chart,\n native: nativeEvent || null,\n x: x !== undefined ? x : null,\n y: y !== undefined ? y : null\n };\n}\n\nfunction fromNativeEvent(event, chart) {\n var type = event.type;\n var point = {};\n var touches = event.targetTouches;\n\n if (touches && touches.length > 0) {\n point.x = touches[0].clientX;\n point.y = touches[0].clientY;\n } else {\n point.x = event.clientX;\n point.y = event.clientY;\n }\n\n var canvas = chart.get('canvas');\n var pos = DomUtil.getRelativePosition(point, canvas);\n return createEvent(type, chart, pos.x, pos.y, event);\n}\n\nDomUtil = {\n /* global wx, my, module */\n isWx: typeof wx === 'object' && typeof wx.getSystemInfoSync === 'function',\n // weixin miniprogram\n isMy: typeof my === 'object' && typeof my.getSystemInfoSync === 'function',\n // ant miniprogram\n isNode: typeof module !== 'undefined' && typeof module.exports !== 'undefined',\n // in node\n isBrowser: typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.sessionStorage !== 'undefined',\n // in browser\n getPixelRatio: function getPixelRatio() {\n return window && window.devicePixelRatio || 1;\n },\n getStyle: function getStyle(el, property) {\n return el.currentStyle ? el.currentStyle[property] : document.defaultView.getComputedStyle(el, null).getPropertyValue(property);\n },\n getWidth: function getWidth(el) {\n var width = this.getStyle(el, 'width');\n\n if (width === 'auto') {\n width = el.offsetWidth;\n }\n\n return parseFloat(width);\n },\n getHeight: function getHeight(el) {\n var height = this.getStyle(el, 'height');\n\n if (height === 'auto') {\n height = el.offsetHeight;\n }\n\n return parseFloat(height);\n },\n getDomById: function getDomById(id) {\n if (!id) {\n return null;\n }\n\n return document.getElementById(id);\n },\n getRelativePosition: function getRelativePosition(point, canvas) {\n var canvasDom = canvas.get('el');\n\n var _canvasDom$getBoundin = canvasDom.getBoundingClientRect(),\n top = _canvasDom$getBoundin.top,\n right = _canvasDom$getBoundin.right,\n bottom = _canvasDom$getBoundin.bottom,\n left = _canvasDom$getBoundin.left;\n\n var paddingLeft = parseFloat(this.getStyle(canvasDom, 'padding-left'));\n var paddingTop = parseFloat(this.getStyle(canvasDom, 'padding-top'));\n var paddingRight = parseFloat(this.getStyle(canvasDom, 'padding-right'));\n var paddingBottom = parseFloat(this.getStyle(canvasDom, 'padding-bottom'));\n var width = right - left - paddingLeft - paddingRight;\n var height = bottom - top - paddingTop - paddingBottom;\n var pixelRatio = canvas.get('pixelRatio');\n var mouseX = (point.x - left - paddingLeft) / width * canvasDom.width / pixelRatio;\n var mouseY = (point.y - top - paddingTop) / height * canvasDom.height / pixelRatio;\n return {\n x: mouseX,\n y: mouseY\n };\n },\n addEventListener: function addEventListener(source, type, listener) {\n DomUtil.isBrowser && source.addEventListener(type, listener, eventListenerOptions);\n },\n removeEventListener: function removeEventListener(source, type, listener) {\n DomUtil.isBrowser && source.removeEventListener(type, listener, eventListenerOptions);\n },\n createEvent: function createEvent(event, chart) {\n return fromNativeEvent(event, chart);\n },\n measureText: function measureText(text, font, ctx) {\n if (!ctx) {\n ctx = document.createElement('canvas').getContext('2d');\n }\n\n ctx.font = font || '12px sans-serif';\n return ctx.measureText(text);\n }\n};\nmodule.exports = DomUtil;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/util/dom.js\n// module id = 54\n// module chunks = 0","var toString = require('../to-string');\n\nvar upperFirst = function upperFirst(value) {\n var str = toString(value);\n return str.charAt(0).toUpperCase() + str.substring(1);\n};\n\nmodule.exports = upperFirst;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_util@1.2.5@@antv/util/lib/string/upper-first.js\n// module id = 55\n// module chunks = 0","var toString = require('../to-string');\n\nvar lowerFirst = function lowerFirst(value) {\n var str = toString(value);\n return str.charAt(0).toLowerCase() + str.substring(1);\n};\n\nmodule.exports = lowerFirst;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_util@1.2.5@@antv/util/lib/string/lower-first.js\n// module id = 56\n// module chunks = 0","/**\n * 是否是布尔类型\n *\n * @param {Object} value 测试的值\n * @return {Boolean}\n */\nvar isType = require('./is-type');\n\nvar isBoolean = function isBoolean(value) {\n return isType(value, 'Boolean');\n};\n\nmodule.exports = isBoolean;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_util@1.2.5@@antv/util/lib/type/is-boolean.js\n// module id = 57\n// module chunks = 0","/**\n * 是否为函数\n * @param {*} fn 对象\n * @return {Boolean} 是否函数\n */\nvar isType = require('./is-type');\n\nvar isFunction = function isFunction(value) {\n return isType(value, 'Function');\n};\n\nmodule.exports = isFunction;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_util@1.2.5@@antv/util/lib/type/is-function.js\n// module id = 58\n// module chunks = 0","var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n} : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n};\n\nvar isObjectLike = function isObjectLike(value) {\n /**\n * isObjectLike({}) => true\n * isObjectLike([1, 2, 3]) => true\n * isObjectLike(Function) => false\n * isObjectLike(null) => false\n */\n return (typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object' && value !== null;\n};\n\nmodule.exports = isObjectLike;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_util@1.2.5@@antv/util/lib/type/is-object-like.js\n// module id = 59\n// module chunks = 0","var isPlainObject = require('./type/is-plain-object');\n\nvar isArray = require('./type/is-array');\n\nvar MAX_MIX_LEVEL = 5;\n\nfunction _deepMix(dist, src, level, maxLevel) {\n level = level || 0;\n maxLevel = maxLevel || MAX_MIX_LEVEL;\n\n for (var key in src) {\n if (src.hasOwnProperty(key)) {\n var value = src[key];\n\n if (value !== null && isPlainObject(value)) {\n if (!isPlainObject(dist[key])) {\n dist[key] = {};\n }\n\n if (level < maxLevel) {\n _deepMix(dist[key], value, level + 1, maxLevel);\n } else {\n dist[key] = src[key];\n }\n } else if (isArray(value)) {\n dist[key] = [];\n dist[key] = dist[key].concat(value);\n } else if (value !== undefined) {\n dist[key] = value;\n }\n }\n }\n}\n\nvar deepMix = function deepMix() {\n var args = new Array(arguments.length);\n var length = args.length;\n\n for (var i = 0; i < length; i++) {\n args[i] = arguments[i];\n }\n\n var rst = args[0];\n\n for (var _i = 1; _i < length; _i++) {\n _deepMix(rst, args[_i]);\n }\n\n return rst;\n};\n\nmodule.exports = deepMix;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_util@1.2.5@@antv/util/lib/deep-mix.js\n// module id = 60\n// module chunks = 0","var Util = require('../util/common');\n\nvar Plot =\n/*#__PURE__*/\nfunction () {\n function Plot(cfg) {\n Util.mix(this, cfg);\n\n this._init();\n }\n\n var _proto = Plot.prototype;\n\n _proto._init = function _init() {\n var self = this;\n var start = self.start;\n var end = self.end;\n var xMin = Math.min(start.x, end.x);\n var xMax = Math.max(start.x, end.x);\n var yMin = Math.min(start.y, end.y);\n var yMax = Math.max(start.y, end.y);\n this.tl = {\n x: xMin,\n y: yMin\n };\n this.tr = {\n x: xMax,\n y: yMin\n };\n this.bl = {\n x: xMin,\n y: yMax\n };\n this.br = {\n x: xMax,\n y: yMax\n };\n this.width = xMax - xMin;\n this.height = yMax - yMin;\n }\n /**\n * reset\n * @param {Object} start start point\n * @param {Object} end end point\n */\n ;\n\n _proto.reset = function reset(start, end) {\n this.start = start;\n this.end = end;\n\n this._init();\n }\n /**\n * check the point is in the range of plot\n * @param {Nubmer} x x value\n * @param {[type]} y y value\n * @return {Boolean} return the result\n */\n ;\n\n _proto.isInRange = function isInRange(x, y) {\n if (Util.isObject(x)) {\n y = x.y;\n x = x.x;\n }\n\n var tl = this.tl;\n var br = this.br;\n return tl.x <= x && x <= br.x && tl.y <= y && y <= br.y;\n };\n\n return Plot;\n}();\n\nmodule.exports = Plot;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/chart/plot.js\n// module id = 61\n// module chunks = 0","var Coord = require('./base');\n\nrequire('./cartesian');\n\nmodule.exports = Coord;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/coord/index.js\n// module id = 62\n// module chunks = 0","function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}\n\nvar Base = require('./base');\n\nvar Cartesian =\n/*#__PURE__*/\nfunction (_Base) {\n _inheritsLoose(Cartesian, _Base);\n\n function Cartesian() {\n return _Base.apply(this, arguments) || this;\n }\n\n var _proto = Cartesian.prototype;\n\n _proto._initDefaultCfg = function _initDefaultCfg() {\n this.type = 'cartesian';\n this.transposed = false;\n this.isRect = true;\n };\n\n _proto.init = function init(start, end) {\n this.x = {\n start: start.x,\n end: end.x\n };\n this.y = {\n start: start.y,\n end: end.y\n };\n };\n\n _proto.convertPoint = function convertPoint(point) {\n var self = this;\n var transposed = self.transposed;\n var xDim = transposed ? 'y' : 'x';\n var yDim = transposed ? 'x' : 'y';\n var x = self.x;\n var y = self.y;\n return {\n x: x.start + (x.end - x.start) * point[xDim],\n y: y.start + (y.end - y.start) * point[yDim]\n };\n };\n\n _proto.invertPoint = function invertPoint(point) {\n var self = this;\n var transposed = self.transposed;\n var xDim = transposed ? 'y' : 'x';\n var yDim = transposed ? 'x' : 'y';\n var x = self.x;\n var y = self.y;\n var rst = {};\n rst[xDim] = (point.x - x.start) / (x.end - x.start);\n rst[yDim] = (point.y - y.start) / (y.end - y.start);\n return rst;\n };\n\n return Cartesian;\n}(Base);\n\nBase.Cartesian = Cartesian;\nBase.Rect = Cartesian;\nmodule.exports = Cartesian;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/coord/cartesian.js\n// module id = 63\n// module chunks = 0","module.exports = {\n Position: require('@antv/attr/lib/position'),\n Shape: require('@antv/attr/lib/shape'),\n Size: require('@antv/attr/lib/size'),\n Color: require('./color')\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/attr/index.js\n// module id = 64\n// module chunks = 0","function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}\n\nvar isNil = require('@antv/util/lib/type/is-nil');\n\nvar isArray = require('@antv/util/lib/type/is-array');\n\nvar each = require('@antv/util/lib/each');\n\nvar Base = require('./base');\n\nvar Position =\n/*#__PURE__*/\nfunction (_Base) {\n _inheritsLoose(Position, _Base);\n\n function Position(cfg) {\n var _this;\n\n _this = _Base.call(this, cfg) || this;\n _this.names = ['x', 'y'];\n _this.type = 'position';\n return _this;\n }\n\n var _proto = Position.prototype;\n\n _proto.mapping = function mapping(x, y) {\n var scales = this.scales;\n var coord = this.coord;\n var scaleX = scales[0];\n var scaleY = scales[1];\n var rstX;\n var rstY;\n var obj;\n\n if (isNil(x) || isNil(y)) {\n return [];\n }\n\n if (isArray(y) && isArray(x)) {\n rstX = [];\n rstY = [];\n\n for (var i = 0, j = 0, xLen = x.length, yLen = y.length; i < xLen && j < yLen; i++, j++) {\n obj = coord.convertPoint({\n x: scaleX.scale(x[i]),\n y: scaleY.scale(y[j])\n });\n rstX.push(obj.x);\n rstY.push(obj.y);\n }\n } else if (isArray(y)) {\n x = scaleX.scale(x);\n rstY = [];\n each(y, function (yVal) {\n yVal = scaleY.scale(yVal);\n obj = coord.convertPoint({\n x: x,\n y: yVal\n });\n\n if (rstX && rstX !== obj.x) {\n if (!isArray(rstX)) {\n rstX = [rstX];\n }\n\n rstX.push(obj.x);\n } else {\n rstX = obj.x;\n }\n\n rstY.push(obj.y);\n });\n } else if (isArray(x)) {\n y = scaleY.scale(y);\n rstX = [];\n each(x, function (xVal) {\n xVal = scaleX.scale(xVal);\n obj = coord.convertPoint({\n x: xVal,\n y: y\n });\n\n if (rstY && rstY !== obj.y) {\n if (!isArray(rstY)) {\n rstY = [rstY];\n }\n\n rstY.push(obj.y);\n } else {\n rstY = obj.y;\n }\n\n rstX.push(obj.x);\n });\n } else {\n x = scaleX.scale(x);\n y = scaleY.scale(y);\n var point = coord.convertPoint({\n x: x,\n y: y\n });\n rstX = point.x;\n rstY = point.y;\n }\n\n return [rstX, rstY];\n };\n\n return Position;\n}(Base);\n\nmodule.exports = Position;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_attr@0.0.7@@antv/attr/lib/position.js\n// module id = 65\n// module chunks = 0","function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}\n\nvar Base = require('./base');\n\nvar Shape =\n/*#__PURE__*/\nfunction (_Base) {\n _inheritsLoose(Shape, _Base);\n\n function Shape(cfg) {\n var _this;\n\n _this = _Base.call(this, cfg) || this;\n _this.names = ['shape'];\n _this.type = 'shape';\n _this.gradient = null;\n return _this;\n }\n /**\n * @override\n */\n\n\n var _proto = Shape.prototype;\n\n _proto.getLinearValue = function getLinearValue(percent) {\n var values = this.values;\n var index = Math.round((values.length - 1) * percent);\n return values[index];\n };\n\n return Shape;\n}(Base);\n\nmodule.exports = Shape;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_attr@0.0.7@@antv/attr/lib/shape.js\n// module id = 66\n// module chunks = 0","function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}\n\nvar Base = require('./base');\n\nvar Size =\n/*#__PURE__*/\nfunction (_Base) {\n _inheritsLoose(Size, _Base);\n\n function Size(cfg) {\n var _this;\n\n _this = _Base.call(this, cfg) || this;\n _this.names = ['size'];\n _this.type = 'size';\n _this.gradient = null;\n return _this;\n }\n\n return Size;\n}(Base);\n\nmodule.exports = Size;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_attr@0.0.7@@antv/attr/lib/size.js\n// module id = 67\n// module chunks = 0","function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}\n\nvar Util = require('../util/common');\n\nvar ColorUtil = require('./color-util');\n\nvar Base = require('@antv/attr/lib/base');\n\nvar Color =\n/*#__PURE__*/\nfunction (_Base) {\n _inheritsLoose(Color, _Base);\n\n function Color(cfg) {\n var _this;\n\n _this = _Base.call(this, cfg) || this;\n _this.names = ['color'];\n _this.type = 'color';\n _this.gradient = null;\n\n if (Util.isString(_this.values)) {\n _this.linear = true;\n }\n\n return _this;\n }\n /**\n * @override\n */\n\n\n var _proto = Color.prototype;\n\n _proto.getLinearValue = function getLinearValue(percent) {\n var gradient = this.gradient;\n\n if (!gradient) {\n var values = this.values;\n gradient = ColorUtil.gradient(values);\n this.gradient = gradient;\n }\n\n return gradient(percent);\n };\n\n return Color;\n}(Base);\n\nmodule.exports = Color;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/attr/color.js\n// module id = 68\n// module chunks = 0","var Util = require('../util/common'); // Get the interpolation between colors\n\n\nfunction getValue(start, end, percent, index) {\n var value = start[index] + (end[index] - start[index]) * percent;\n return value;\n} // convert to hex\n\n\nfunction arr2hex(arr) {\n return '#' + toRGBValue(arr[0]) + toRGBValue(arr[1]) + toRGBValue(arr[2]);\n}\n\nfunction toRGBValue(value) {\n value = Math.round(value);\n value = value.toString(16);\n\n if (value.length === 1) {\n value = '0' + value;\n }\n\n return value;\n}\n\nfunction calColor(colors, percent) {\n var steps = colors.length - 1;\n var step = Math.floor(steps * percent);\n var left = steps * percent - step;\n var start = colors[step];\n var end = step === steps ? start : colors[step + 1];\n var rgb = arr2hex([getValue(start, end, left, 0), getValue(start, end, left, 1), getValue(start, end, left, 2)]);\n return rgb;\n}\n\nfunction hex2arr(str) {\n var arr = [];\n arr.push(parseInt(str.substr(1, 2), 16));\n arr.push(parseInt(str.substr(3, 2), 16));\n arr.push(parseInt(str.substr(5, 2), 16));\n return arr;\n}\n\nvar colorCache = {\n black: '#000000',\n blue: '#0000ff',\n grey: '#808080',\n green: '#008000',\n orange: '#ffa500',\n pink: '#ffc0cb',\n purple: '#800080',\n red: '#ff0000',\n white: '#ffffff',\n yellow: '#ffff00'\n};\nvar ColorUtil = {\n /**\n * Returns a hexadecimal string representing this color in RGB space, such as #f7eaba.\n * @param {String} color color value\n * @return {String} Returns a hexadecimal string\n */\n toHex: function toHex(color) {\n if (colorCache[color]) {\n return colorCache[color];\n }\n\n if (color[0] === '#') {\n if (color.length === 7) {\n return color;\n }\n\n var hex = color.replace(/^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i, function (m, r, g, b) {\n return '#' + r + r + g + g + b + b;\n }); // hex3 to hex6\n\n colorCache[color] = hex;\n return hex;\n } // rgb/rgba to hex\n\n\n var rst = color.match(/^rgba?[\\s+]?\\([\\s+]?(\\d+)[\\s+]?,[\\s+]?(\\d+)[\\s+]?,[\\s+]?(\\d+)[\\s+]?/i);\n rst.shift();\n rst = arr2hex(rst);\n colorCache[color] = rst;\n return rst;\n },\n hex2arr: hex2arr,\n\n /**\n * handle the gradient color\n * @param {Array} colors the colors\n * @return {String} return the color value\n */\n gradient: function gradient(colors) {\n var points = [];\n\n if (Util.isString(colors)) {\n colors = colors.split('-');\n }\n\n Util.each(colors, function (color) {\n if (color.indexOf('#') === -1) {\n color = ColorUtil.toHex(color);\n }\n\n points.push(hex2arr(color));\n });\n return function (percent) {\n return calColor(points, percent);\n };\n }\n};\nmodule.exports = ColorUtil;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/attr/color-util.js\n// module id = 69\n// module chunks = 0","function _mix(dist, obj) {\n for (var key in obj) {\n if (obj.hasOwnProperty(key) && key !== 'constructor' && obj[key] !== undefined) {\n dist[key] = obj[key];\n }\n }\n}\n\nvar mix = function mix(dist, src1, src2, src3) {\n if (src1) _mix(dist, src1);\n if (src2) _mix(dist, src2);\n if (src3) _mix(dist, src3);\n return dist;\n};\n\nmodule.exports = mix;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_util@1.3.1@@antv/util/lib/mix.js\n// module id = 70\n// module chunks = 0","var Util = require('../../util/common');\n\nvar Global = require('../../global');\n\nvar Scale = require('../../scale/');\n\nvar SCALE_TYPES_MAP = {\n linear: 'Linear',\n cat: 'Cat',\n timeCat: 'TimeCat',\n identity: 'Identity'\n};\n\nvar ScaleController =\n/*#__PURE__*/\nfunction () {\n function ScaleController(cfg) {\n // defs 列定义\n this.defs = {};\n Util.mix(this, cfg);\n }\n\n var _proto = ScaleController.prototype;\n\n _proto._getDef = function _getDef(field) {\n var defs = this.defs;\n var def = null;\n\n if (Global.scales[field] || defs[field]) {\n def = Util.mix({}, Global.scales[field]);\n Util.each(defs[field], function (v, k) {\n if (Util.isNil(v)) {\n delete def[k];\n } else {\n def[k] = v;\n }\n });\n }\n\n return def;\n };\n\n _proto._getDefaultType = function _getDefaultType(field, data, def) {\n if (def && def.type) {\n return def.type;\n }\n\n var type = 'linear';\n var value = Util.Array.firstValue(data, field);\n\n if (Util.isArray(value)) {\n value = value[0];\n }\n\n if (Util.isString(value)) {\n type = 'cat';\n }\n\n return type;\n };\n\n _proto._getScaleCfg = function _getScaleCfg(type, field, data, def) {\n var values;\n\n if (def && def.values) {\n values = def.values;\n } else {\n values = Util.Array.values(data, field);\n }\n\n var cfg = {\n field: field,\n values: values\n };\n\n if (type !== 'cat' && type !== 'timeCat') {\n if (!def || !(def.min && def.max)) {\n var _Util$Array$getRange = Util.Array.getRange(values),\n min = _Util$Array$getRange.min,\n max = _Util$Array$getRange.max;\n\n cfg.min = min;\n cfg.max = max;\n cfg.nice = true;\n }\n }\n\n if (type === 'cat' || type === 'timeCat') {\n cfg.isRounding = false; // used for tickCount calculation\n }\n\n return cfg;\n };\n\n _proto.createScale = function createScale(field, data) {\n var self = this;\n\n var def = self._getDef(field);\n\n var scale;\n\n if (!data || !data.length) {\n if (def && def.type) {\n def.field = field;\n scale = new Scale[SCALE_TYPES_MAP[def.type]](def);\n } else {\n scale = new Scale.Identity({\n value: field,\n field: field.toString(),\n values: [field]\n });\n }\n\n return scale;\n }\n\n var firstObj = data[0];\n var firstValue = firstObj[field];\n\n if (firstValue === null) {\n firstValue = Util.Array.firstValue(data, field);\n }\n\n if (Util.isNumber(field) || Util.isNil(firstValue) && !def) {\n scale = new Scale.Identity({\n value: field,\n field: field.toString(),\n values: [field]\n });\n } else {\n var type = self._getDefaultType(field, data, def);\n\n var cfg = self._getScaleCfg(type, field, data, def);\n\n def && Util.mix(cfg, def);\n scale = new Scale[SCALE_TYPES_MAP[type]](cfg);\n }\n\n return scale;\n };\n\n return ScaleController;\n}();\n\nmodule.exports = ScaleController;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/chart/controller/scale.js\n// module id = 71\n// module chunks = 0","var Scale = require('@antv/scale/lib/base');\n\nrequire('@antv/scale/lib/linear');\n\nrequire('@antv/scale/lib/identity');\n\nrequire('@antv/scale/lib/category');\n\nmodule.exports = Scale;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/scale/index.js\n// module id = 72\n// module chunks = 0","function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}\n/**\n * @fileOverview The measurement of linear data scale function\n * @author dxq613@gmail.com\n */\n\n\nvar isNil = require('@antv/util/lib/type/is-nil');\n\nvar each = require('@antv/util/lib/each');\n\nvar Base = require('./base');\n\nvar numberAuto = require('./auto/number');\n/**\n * 线性度量\n * @class Scale.Linear\n */\n\n\nvar Linear =\n/*#__PURE__*/\nfunction (_Base) {\n _inheritsLoose(Linear, _Base);\n\n function Linear() {\n return _Base.apply(this, arguments) || this;\n }\n\n var _proto = Linear.prototype;\n\n _proto._initDefaultCfg = function _initDefaultCfg() {\n _Base.prototype._initDefaultCfg.call(this);\n\n var self = this;\n self.type = 'linear';\n self.isLinear = true;\n /**\n * 是否为了用户习惯,优化min,max和ticks,如果进行优化,则会根据生成的ticks调整min,max,否则舍弃(min,max)范围之外的ticks\n * @type {Boolean}\n * @default false\n */\n\n self.nice = false;\n /**\n * min value of the scale\n * @type {Number}\n * @default null\n */\n\n self.min = null;\n /**\n * min value limitted of the scale\n * @type {Number}\n * @default null\n */\n\n self.minLimit = null;\n /**\n * max value of the scale\n * @type {Number}\n * @default null\n */\n\n self.max = null;\n /**\n * max value limitted of the scale\n * @type {Number}\n * @default null\n */\n\n self.maxLimit = null;\n /**\n * 自动生成标记时的个数\n * @type {Number}\n * @default null\n */\n\n self.tickCount = null;\n /**\n * 坐标轴点之间的间距,指的是真实数据的差值\n * @type {Number}\n * @default null\n */\n\n self.tickInterval = null;\n /**\n * 坐标轴点之间的最小间距,指的是真实数据的差值\n * @type {Number}\n * @default null\n */\n\n self.minTickInterval = null;\n /**\n * 用于计算坐标点时逼近的数组\n * @type {Array}\n */\n\n self.snapArray = null;\n };\n /**\n * @protected\n * @override\n */\n\n\n _proto.init = function init() {\n var self = this;\n\n if (!self.ticks) {\n self.min = self.translate(self.min);\n self.max = self.translate(self.max);\n self.initTicks();\n } else {\n var ticks = self.ticks;\n var firstValue = self.translate(ticks[0]);\n var lastValue = self.translate(ticks[ticks.length - 1]);\n\n if (isNil(self.min) || self.min > firstValue) {\n self.min = firstValue;\n }\n\n if (isNil(self.max) || self.max < lastValue) {\n self.max = lastValue;\n }\n }\n };\n /**\n * 计算坐标点\n * @protected\n * @return {Array} 计算完成的坐标点\n */\n\n\n _proto.calculateTicks = function calculateTicks() {\n var min = this.min,\n max = this.max,\n minLimit = this.minLimit,\n maxLimit = this.maxLimit,\n tickCount = this.tickCount,\n tickInterval = this.tickInterval,\n minTickInterval = this.minTickInterval,\n snapArray = this.snapArray;\n\n if (tickCount === 1) {\n throw new Error('linear scale\\'tickCount should not be 1');\n }\n\n if (max < min) {\n throw new Error(\"max: \" + max + \" should not be less than min: \" + min);\n }\n\n var tmp = numberAuto({\n min: min,\n max: max,\n minLimit: minLimit,\n maxLimit: maxLimit,\n minCount: tickCount,\n maxCount: tickCount,\n interval: tickInterval,\n minTickInterval: minTickInterval,\n snapArray: snapArray\n });\n return tmp.ticks;\n }; // 初始化ticks\n\n\n _proto.initTicks = function initTicks() {\n var self = this;\n var calTicks = self.calculateTicks();\n\n if (self.nice) {\n // 如果需要优化显示的tick\n self.ticks = calTicks;\n self.min = calTicks[0];\n self.max = calTicks[calTicks.length - 1];\n } else {\n var ticks = [];\n each(calTicks, function (tick) {\n if (tick >= self.min && tick <= self.max) {\n ticks.push(tick);\n }\n }); // 如果 ticks 为空,直接输入最小值、最大值\n\n if (!ticks.length) {\n ticks.push(self.min);\n ticks.push(self.max);\n }\n\n self.ticks = ticks;\n }\n };\n /**\n * @override\n */\n\n\n _proto.scale = function scale(value) {\n if (isNil(value)) {\n return NaN;\n }\n\n var max = this.max;\n var min = this.min;\n\n if (max === min) {\n return 0;\n }\n\n var percent = (value - min) / (max - min);\n var rangeMin = this.rangeMin();\n var rangeMax = this.rangeMax();\n return rangeMin + percent * (rangeMax - rangeMin);\n };\n /**\n * @override\n */\n\n\n _proto.invert = function invert(value) {\n var percent = (value - this.rangeMin()) / (this.rangeMax() - this.rangeMin());\n return this.min + percent * (this.max - this.min);\n };\n\n return Linear;\n}(Base);\n\nBase.Linear = Linear;\nmodule.exports = Linear;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_scale@0.0.9@@antv/scale/lib/linear.js\n// module id = 73\n// module chunks = 0","/**\n * @fileOverview 自动计算数字坐标轴\n * @author dxq613@gmail.com\n */\nvar isNil = require('@antv/util/lib/type/is-nil');\n\nvar isNumber = require('@antv/util/lib/type/is-number');\n\nvar AutoUtil = require('./util');\n\nvar MIN_COUNT = 5;\nvar MAX_COUNT = 7;\nvar SNAP_COUNT_ARRAY = [0, 1, 1.2, 1.5, 1.6, 2, 2.2, 2.4, 2.5, 3, 4, 5, 6, 7.5, 8, 10];\nvar SNAP_ARRAY = [0, 1, 2, 4, 5, 10];\n\nmodule.exports = function (info) {\n var min = info.min;\n var max = info.max;\n var interval = info.interval;\n var minTickInterval = info.minTickInterval;\n var ticks = [];\n var minCount = info.minCount || MIN_COUNT;\n var maxCount = info.maxCount || MAX_COUNT;\n var isFixedCount = minCount === maxCount; // 是否限定死了个数\n\n var minLimit = isNil(info.minLimit) ? -Infinity : info.minLimit; // 限定的最小值\n\n var maxLimit = isNil(info.maxLimit) ? Infinity : info.maxLimit; // 限定最大值\n\n var avgCount = (minCount + maxCount) / 2;\n var count = avgCount; // 用户传入的逼近数组\n\n var snapArray = info.snapArray ? info.snapArray : isFixedCount ? SNAP_COUNT_ARRAY : SNAP_ARRAY; // 如果限定大小范围,同时大小范围等于用户传入的范围,同时限定了个数,interval 按照个数均分\n\n if (min === minLimit && max === maxLimit && isFixedCount) {\n interval = (max - min) / (count - 1);\n }\n\n if (isNil(min)) {\n min = 0;\n }\n\n if (isNil(max)) {\n max = 0;\n }\n\n if (max === min) {\n if (min === 0) {\n max = 1;\n } else {\n if (min > 0) {\n min = 0;\n } else {\n max = 0;\n }\n }\n\n if (max - min < 5 && !interval && max - min >= 1) {\n interval = 1;\n }\n }\n\n if (isNil(interval)) {\n // 计算间距\n var temp = (max - min) / (avgCount - 1);\n interval = AutoUtil.snapFactorTo(temp, snapArray, 'ceil');\n\n if (maxCount !== minCount) {\n count = parseInt((max - min) / interval, 10);\n\n if (count > maxCount) {\n count = maxCount;\n }\n\n if (count < minCount) {\n count = minCount;\n } // 不确定tick的个数时,使得tick偏小\n\n\n interval = AutoUtil.snapFactorTo((max - min) / (count - 1), snapArray, 'floor');\n }\n } // interval should not be less than minTickInterval\n\n\n if (isNumber(minTickInterval) && interval < minTickInterval) {\n interval = minTickInterval;\n }\n\n if (info.interval || maxCount !== minCount) {\n // 校正 max 和 min\n max = Math.min(AutoUtil.snapMultiple(max, interval, 'ceil'), maxLimit); // 向上逼近\n\n min = Math.max(AutoUtil.snapMultiple(min, interval, 'floor'), minLimit); // 向下逼近\n\n count = Math.round((max - min) / interval);\n min = AutoUtil.fixedBase(min, interval);\n max = AutoUtil.fixedBase(max, interval);\n } else {\n avgCount = parseInt(avgCount, 10); // 取整\n\n var avg = (max + min) / 2;\n var avgTick = AutoUtil.snapMultiple(avg, interval, 'ceil');\n var sideCount = Math.floor((avgCount - 2) / 2);\n var maxTick = avgTick + sideCount * interval;\n var minTick;\n\n if (avgCount % 2 === 0) {\n minTick = avgTick - sideCount * interval;\n } else {\n minTick = avgTick - (sideCount + 1) * interval;\n }\n\n if (maxTick < max) {\n maxTick = maxTick + interval;\n }\n\n if (minTick > min) {\n minTick = minTick - interval;\n }\n\n max = AutoUtil.fixedBase(maxTick, interval);\n min = AutoUtil.fixedBase(minTick, interval);\n }\n\n max = Math.min(max, maxLimit);\n min = Math.max(min, minLimit);\n ticks.push(min);\n\n for (var i = 1; i < count; i++) {\n var tickValue = AutoUtil.fixedBase(interval * i + min, interval);\n\n if (tickValue < max) {\n ticks.push(tickValue);\n }\n }\n\n if (ticks[ticks.length - 1] < max) {\n ticks.push(max);\n }\n\n return {\n min: min,\n max: max,\n interval: interval,\n count: count,\n ticks: ticks\n };\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_scale@0.0.9@@antv/scale/lib/auto/number.js\n// module id = 74\n// module chunks = 0","/**\n * @fileOverview 计算方法\n * @author dxq613@gmail.com\n */\n// 如果小数点后面超过 10 位浮点数时进行一下处理\nvar DECIMAL_LENGTH = 12; // 获取系数\n\nfunction getFactor(v) {\n var factor = 1;\n\n if (v === Infinity || v === -Infinity) {\n throw new Error('Not support Infinity!');\n }\n\n if (v < 1) {\n var count = 0;\n\n while (v < 1) {\n factor = factor / 10;\n v = v * 10;\n count++;\n } // 浮点数计算出现问题\n\n\n if (factor.toString().length > DECIMAL_LENGTH) {\n factor = parseFloat(factor.toFixed(count));\n }\n } else {\n while (v > 10) {\n factor = factor * 10;\n v = v / 10;\n }\n }\n\n return factor;\n} // 取小于当前值的\n\n\nfunction arrayFloor(values, value) {\n var length = values.length;\n\n if (length === 0) {\n return NaN;\n }\n\n var pre = values[0];\n\n if (value < values[0]) {\n return NaN;\n }\n\n if (value >= values[length - 1]) {\n return values[length - 1];\n }\n\n for (var i = 1; i < values.length; i++) {\n if (value < values[i]) {\n break;\n }\n\n pre = values[i];\n }\n\n return pre;\n} // 大于当前值的第一个\n\n\nfunction arrayCeiling(values, value) {\n var length = values.length;\n\n if (length === 0) {\n return NaN;\n } // var pre = values[0];\n\n\n var rst;\n\n if (value > values[length - 1]) {\n return NaN;\n }\n\n if (value < values[0]) {\n return values[0];\n }\n\n for (var i = 1; i < values.length; i++) {\n if (value <= values[i]) {\n rst = values[i];\n break;\n }\n }\n\n return rst;\n}\n\nvar Util = {\n // 获取逼近的数值\n snapFactorTo: function snapFactorTo(v, arr, snapType) {\n // 假设 v = -512,isFloor = true\n if (isNaN(v)) {\n return NaN;\n }\n\n var factor = 1; // 计算系数\n\n if (v !== 0) {\n if (v < 0) {\n factor = -1;\n }\n\n v = v * factor; // v = 512\n\n var tmpFactor = getFactor(v);\n factor = factor * tmpFactor; // factor = -100\n\n v = v / tmpFactor; // v = 5.12\n }\n\n if (snapType === 'floor') {\n v = Util.snapFloor(arr, v); // v = 5\n } else if (snapType === 'ceil') {\n v = Util.snapCeiling(arr, v); // v = 6\n } else {\n v = Util.snapTo(arr, v); // 四舍五入 5\n }\n\n var rst = v * factor; // 如果出现浮点数计算问题,需要处理一下\n\n if (Math.abs(factor) < 1 && rst.toString().length > DECIMAL_LENGTH) {\n var decimalVal = parseInt(1 / factor);\n var symbol = factor > 0 ? 1 : -1;\n rst = v / decimalVal * symbol;\n }\n\n return rst;\n },\n // 获取逼近的倍数\n snapMultiple: function snapMultiple(v, base, snapType) {\n var div;\n\n if (snapType === 'ceil') {\n div = Math.ceil(v / base);\n } else if (snapType === 'floor') {\n div = Math.floor(v / base);\n } else {\n div = Math.round(v / base);\n }\n\n return div * base;\n },\n\n /**\n * 获取逼近的值,用于对齐数据\n * @param {Array} values 数据集合\n * @param {Number} value 数值\n * @return {Number} 逼近的值\n */\n snapTo: function snapTo(values, value) {\n // 这里假定values是升序排列\n var floorVal = arrayFloor(values, value);\n var ceilingVal = arrayCeiling(values, value);\n\n if (isNaN(floorVal) || isNaN(ceilingVal)) {\n if (values[0] >= value) {\n return values[0];\n }\n\n var last = values[values.length - 1];\n\n if (last <= value) {\n return last;\n }\n }\n\n if (Math.abs(value - floorVal) < Math.abs(ceilingVal - value)) {\n return floorVal;\n }\n\n return ceilingVal;\n },\n\n /**\n * 获取逼近的最小值,用于对齐数据\n * @param {Array} values 数据集合\n * @param {Number} value 数值\n * @return {Number} 逼近的最小值\n */\n snapFloor: function snapFloor(values, value) {\n // 这里假定values是升序排列\n return arrayFloor(values, value);\n },\n\n /**\n * 获取逼近的最大值,用于对齐数据\n * @param {Array} values 数据集合\n * @param {Number} value 数值\n * @return {Number} 逼近的最大值\n */\n snapCeiling: function snapCeiling(values, value) {\n // 这里假定values是升序排列\n return arrayCeiling(values, value);\n },\n fixedBase: function fixedBase(v, base) {\n var str = base.toString();\n var index = str.indexOf('.');\n\n if (index === -1) {\n return Math.round(v);\n }\n\n var length = str.substr(index + 1).length;\n\n if (length > 20) {\n length = 20;\n }\n\n return parseFloat(v.toFixed(length));\n }\n};\nmodule.exports = Util;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_scale@0.0.9@@antv/scale/lib/auto/util.js\n// module id = 75\n// module chunks = 0","function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}\n\nvar Base = require('./base');\n\nvar isNumber = require('@antv/util/lib/type/is-number');\n\nvar Identity =\n/*#__PURE__*/\nfunction (_Base) {\n _inheritsLoose(Identity, _Base);\n\n function Identity() {\n return _Base.apply(this, arguments) || this;\n }\n\n var _proto = Identity.prototype;\n\n _proto._initDefaultCfg = function _initDefaultCfg() {\n _Base.prototype._initDefaultCfg.call(this);\n\n this.isIdentity = true;\n this.type = 'identity';\n /**\n * 常量值\n * @type {*}\n */\n\n this.value = null;\n };\n /**\n * @override\n */\n\n\n _proto.getText = function getText() {\n return this.value.toString();\n };\n /**\n * @override\n */\n\n\n _proto.scale = function scale(value) {\n if (this.value !== value && isNumber(value)) {\n return value;\n }\n\n return this.range[0];\n };\n /**\n * @override\n */\n\n\n _proto.invert = function invert() {\n return this.value;\n };\n\n return Identity;\n}(Base);\n\nBase.Identity = Identity;\nmodule.exports = Identity;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_scale@0.0.9@@antv/scale/lib/identity.js\n// module id = 76\n// module chunks = 0","var Util = require('../../util/common');\n\nvar Axis = require('../../component/axis/');\n\nvar Global = require('../../global');\n\nvar _require = require('../../graphic/index'),\n Shape = _require.Shape;\n\nfunction formatTicks(ticks) {\n var tmp = ticks.slice(0);\n\n if (tmp.length > 0) {\n var first = tmp[0];\n var last = tmp[tmp.length - 1];\n\n if (first.value !== 0) {\n tmp.unshift({\n value: 0\n });\n }\n\n if (last.value !== 1) {\n tmp.push({\n value: 1\n });\n }\n }\n\n return tmp;\n}\n\nvar AxisController =\n/*#__PURE__*/\nfunction () {\n function AxisController(cfg) {\n this.axisCfg = {};\n this.frontPlot = null;\n this.backPlot = null;\n this.axes = {}; // store the axes's options\n\n Util.mix(this, cfg);\n }\n\n var _proto = AxisController.prototype;\n\n _proto._isHide = function _isHide(field) {\n var axisCfg = this.axisCfg;\n return !axisCfg || axisCfg[field] === false;\n };\n\n _proto._getLinePosition = function _getLinePosition(scale, dimType, index, transposed) {\n var position = '';\n var field = scale.field;\n var axisCfg = this.axisCfg;\n\n if (axisCfg[field] && axisCfg[field].position) {\n position = axisCfg[field].position;\n } else if (dimType === 'x') {\n position = transposed ? 'left' : 'bottom';\n } else if (dimType === 'y') {\n position = index ? 'right' : 'left';\n\n if (transposed) {\n position = 'bottom';\n }\n }\n\n return position;\n };\n\n _proto._getLineCfg = function _getLineCfg(coord, dimType, position) {\n var start;\n var end;\n var factor = 1; // Mark clockwise or counterclockwise\n\n if (dimType === 'x') {\n start = {\n x: 0,\n y: 0\n };\n end = {\n x: 1,\n y: 0\n };\n } else {\n if (position === 'right') {\n // there will be several y axes\n start = {\n x: 1,\n y: 0\n };\n end = {\n x: 1,\n y: 1\n };\n } else {\n start = {\n x: 0,\n y: 0\n };\n end = {\n x: 0,\n y: 1\n };\n factor = -1;\n }\n }\n\n if (coord.transposed) {\n factor *= -1;\n }\n\n return {\n offsetFactor: factor,\n start: coord.convertPoint(start),\n end: coord.convertPoint(end)\n };\n };\n\n _proto._getCircleCfg = function _getCircleCfg(coord) {\n return {\n startAngle: coord.startAngle,\n endAngle: coord.endAngle,\n center: coord.center,\n radius: coord.circleRadius\n };\n };\n\n _proto._getRadiusCfg = function _getRadiusCfg(coord) {\n var transposed = coord.transposed;\n var start;\n var end;\n\n if (transposed) {\n start = {\n x: 0,\n y: 0\n };\n end = {\n x: 1,\n y: 0\n };\n } else {\n start = {\n x: 0,\n y: 0\n };\n end = {\n x: 0,\n y: 1\n };\n }\n\n return {\n offsetFactor: -1,\n start: coord.convertPoint(start),\n end: coord.convertPoint(end)\n };\n };\n\n _proto._getAxisCfg = function _getAxisCfg(coord, scale, verticalScale, dimType, defaultCfg) {\n var self = this;\n var axisCfg = this.axisCfg;\n var ticks = scale.getTicks();\n var cfg = Util.deepMix({\n ticks: ticks,\n frontContainer: this.frontPlot,\n backContainer: this.backPlot\n }, defaultCfg, axisCfg[scale.field]);\n var labels = [];\n var label = cfg.label;\n var count = ticks.length;\n var maxWidth = 0;\n var maxHeight = 0;\n var labelCfg = label;\n Util.each(ticks, function (tick, index) {\n if (Util.isFunction(label)) {\n var executedLabel = label(tick.text, index, count);\n labelCfg = executedLabel ? Util.mix({}, Global._defaultAxis.label, executedLabel) : null;\n }\n\n if (labelCfg) {\n var textStyle = {};\n\n if (labelCfg.textAlign) {\n textStyle.textAlign = labelCfg.textAlign;\n }\n\n if (labelCfg.textBaseline) {\n textStyle.textBaseline = labelCfg.textBaseline;\n }\n\n var axisLabel = new Shape.Text({\n className: 'axis-label',\n attrs: Util.mix({\n x: 0,\n y: 0,\n text: tick.text,\n fontFamily: self.chart.get('canvas').get('fontFamily')\n }, labelCfg),\n value: tick.value,\n textStyle: textStyle,\n top: labelCfg.top,\n context: self.chart.get('canvas').get('context')\n });\n labels.push(axisLabel);\n\n var _axisLabel$getBBox = axisLabel.getBBox(),\n width = _axisLabel$getBBox.width,\n height = _axisLabel$getBBox.height;\n\n maxWidth = Math.max(maxWidth, width);\n maxHeight = Math.max(maxHeight, height);\n }\n });\n cfg.labels = labels;\n cfg.maxWidth = maxWidth;\n cfg.maxHeight = maxHeight;\n return cfg;\n };\n\n _proto._createAxis = function _createAxis(coord, scale, verticalScale, dimType, index) {\n if (index === void 0) {\n index = '';\n }\n\n var self = this;\n var coordType = coord.type;\n var transposed = coord.transposed;\n var type;\n var key;\n var defaultCfg;\n\n if (coordType === 'cartesian' || coordType === 'rect') {\n var position = self._getLinePosition(scale, dimType, index, transposed);\n\n defaultCfg = Global.axis[position];\n defaultCfg.position = position;\n type = 'Line';\n key = position;\n } else {\n if (dimType === 'x' && !transposed || dimType === 'y' && transposed) {\n defaultCfg = Global.axis.circle;\n type = 'Circle';\n key = 'circle';\n } else {\n defaultCfg = Global.axis.radius;\n type = 'Line';\n key = 'radius';\n }\n }\n\n var cfg = self._getAxisCfg(coord, scale, verticalScale, dimType, defaultCfg);\n\n cfg.type = type;\n cfg.dimType = dimType;\n cfg.verticalScale = verticalScale;\n cfg.index = index;\n this.axes[key] = cfg;\n };\n\n _proto.createAxis = function createAxis(coord, xScale, yScales) {\n var self = this;\n\n if (xScale && !self._isHide(xScale.field)) {\n self._createAxis(coord, xScale, yScales[0], 'x');\n }\n\n Util.each(yScales, function (yScale, index) {\n if (!self._isHide(yScale.field)) {\n self._createAxis(coord, yScale, xScale, 'y', index);\n }\n });\n var axes = this.axes;\n var chart = self.chart;\n\n if (chart._isAutoPadding()) {\n var userPadding = Util.parsePadding(chart.get('padding'));\n var appendPadding = Util.parsePadding(chart.get('appendPadding'));\n var legendRange = chart.get('legendRange') || {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n };\n var padding = [userPadding[0] === 'auto' ? legendRange.top + appendPadding[0] * 2 : userPadding[0], userPadding[1] === 'auto' ? legendRange.right + appendPadding[1] : userPadding[1], userPadding[2] === 'auto' ? legendRange.bottom + appendPadding[2] : userPadding[2], userPadding[3] === 'auto' ? legendRange.left + appendPadding[3] : userPadding[3]];\n\n if (coord.isPolar) {\n var circleAxis = axes.circle;\n\n if (circleAxis) {\n var maxHeight = circleAxis.maxHeight,\n maxWidth = circleAxis.maxWidth,\n labelOffset = circleAxis.labelOffset;\n padding[0] += maxHeight + labelOffset;\n padding[1] += maxWidth + labelOffset;\n padding[2] += maxHeight + labelOffset;\n padding[3] += maxWidth + labelOffset;\n }\n } else {\n if (axes.right && userPadding[1] === 'auto') {\n var _axes$right = axes.right,\n _maxWidth = _axes$right.maxWidth,\n _labelOffset = _axes$right.labelOffset;\n padding[1] += _maxWidth + _labelOffset;\n }\n\n if (axes.left && userPadding[3] === 'auto') {\n var _axes$left = axes.left,\n _maxWidth2 = _axes$left.maxWidth,\n _labelOffset2 = _axes$left.labelOffset;\n padding[3] += _maxWidth2 + _labelOffset2;\n }\n\n if (axes.bottom && userPadding[2] === 'auto') {\n var _axes$bottom = axes.bottom,\n _maxHeight = _axes$bottom.maxHeight,\n _labelOffset3 = _axes$bottom.labelOffset;\n padding[2] += _maxHeight + _labelOffset3;\n }\n }\n\n chart.set('_padding', padding);\n\n chart._updateLayout(padding);\n }\n\n Util.each(axes, function (axis) {\n var type = axis.type,\n grid = axis.grid,\n verticalScale = axis.verticalScale,\n ticks = axis.ticks,\n dimType = axis.dimType,\n position = axis.position,\n index = axis.index;\n var appendCfg;\n\n if (coord.isPolar) {\n if (type === 'Line') {\n appendCfg = self._getRadiusCfg(coord);\n } else if (type === 'Circle') {\n appendCfg = self._getCircleCfg(coord);\n }\n } else {\n appendCfg = self._getLineCfg(coord, dimType, position);\n }\n\n if (grid && verticalScale) {\n var gridPoints = [];\n var verticalTicks = formatTicks(verticalScale.getTicks());\n Util.each(ticks, function (tick) {\n var subPoints = [];\n Util.each(verticalTicks, function (verticalTick) {\n var x = dimType === 'x' ? tick.value : verticalTick.value;\n var y = dimType === 'x' ? verticalTick.value : tick.value;\n\n if (x >= 0 && x <= 1 && y >= 0 && y <= 1) {\n var point = coord.convertPoint({\n x: x,\n y: y\n });\n subPoints.push(point);\n }\n });\n gridPoints.push({\n points: subPoints,\n _id: 'axis-' + dimType + index + '-grid-' + tick.tickValue\n });\n });\n axis.gridPoints = gridPoints;\n\n if (coord.isPolar) {\n axis.center = coord.center;\n axis.startAngle = coord.startAngle;\n axis.endAngle = coord.endAngle;\n }\n }\n\n appendCfg._id = 'axis-' + dimType;\n\n if (!Util.isNil(index)) {\n appendCfg._id = 'axis-' + dimType + index;\n }\n\n new Axis[type](Util.mix(axis, appendCfg));\n });\n };\n\n _proto.clear = function clear() {\n this.axes = {};\n this.frontPlot.clear();\n this.backPlot.clear();\n };\n\n return AxisController;\n}();\n\nmodule.exports = AxisController;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/chart/controller/axis.js\n// module id = 77\n// module chunks = 0","var Abstract = require('./abstract');\n\nrequire('./line');\n\nmodule.exports = Abstract;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/component/axis/index.js\n// module id = 78\n// module chunks = 0","function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}\n\nvar Util = require('../../util/common');\n\nvar Abstract = require('./abstract');\n\nvar Line =\n/*#__PURE__*/\nfunction (_Abstract) {\n _inheritsLoose(Line, _Abstract);\n\n function Line() {\n return _Abstract.apply(this, arguments) || this;\n }\n\n var _proto = Line.prototype;\n\n _proto._initDefaultCfg = function _initDefaultCfg() {\n _Abstract.prototype._initDefaultCfg.call(this);\n\n this.start = null;\n this.end = null;\n };\n\n _proto.getOffsetPoint = function getOffsetPoint(value) {\n var start = this.start,\n end = this.end;\n return {\n x: start.x + (end.x - start.x) * value,\n y: start.y + (end.y - start.y) * value\n };\n };\n\n _proto.getAxisVector = function getAxisVector() {\n var start = this.start,\n end = this.end;\n return [end.x - start.x, end.y - start.y];\n };\n\n _proto.drawLine = function drawLine(lineCfg) {\n var container = this.getContainer(lineCfg.top);\n var start = this.start,\n end = this.end;\n container.addShape('line', {\n className: 'axis-line',\n attrs: Util.mix({\n x1: start.x,\n y1: start.y,\n x2: end.x,\n y2: end.y\n }, lineCfg)\n });\n };\n\n return Line;\n}(Abstract);\n\nAbstract.Line = Line;\nmodule.exports = Line;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/component/axis/line.js\n// module id = 79\n// module chunks = 0","var Util = require('../util/common');\n\nvar Container = require('./container');\n\nvar Group = require('./group');\n\nvar _require = require('./util/requestAnimationFrame'),\n requestAnimationFrame = _require.requestAnimationFrame;\n\nvar Canvas =\n/*#__PURE__*/\nfunction () {\n var _proto = Canvas.prototype;\n\n _proto.get = function get(name) {\n return this._attrs[name];\n };\n\n _proto.set = function set(name, value) {\n this._attrs[name] = value;\n };\n\n function Canvas(cfg) {\n this._attrs = Util.mix({\n type: 'canvas',\n children: []\n }, cfg);\n\n this._initPixelRatio();\n\n this._initCanvas();\n }\n\n _proto._initPixelRatio = function _initPixelRatio() {\n var pixelRatio = this.get('pixelRatio');\n\n if (!pixelRatio) {\n this.set('pixelRatio', Util.getPixelRatio());\n }\n };\n\n _proto.beforeDraw = function beforeDraw() {\n var context = this._attrs.context;\n var el = this._attrs.el;\n !Util.isWx && !Util.isMy && context && context.clearRect(0, 0, el.width, el.height);\n };\n\n _proto._initCanvas = function _initCanvas() {\n var self = this;\n var el = self.get('el');\n var context = self.get('context');\n var canvas;\n\n if (context) {\n // CanvasRenderingContext2D\n canvas = context.canvas;\n } else if (Util.isString(el)) {\n // HTMLElement's id\n canvas = Util.getDomById(el);\n } else {\n // HTMLElement\n canvas = el;\n }\n\n if (!canvas) {\n throw new Error('Please specify the id or el of the chart!');\n }\n\n if (context && canvas && !canvas.getContext) {\n canvas.getContext = function () {\n return context;\n };\n }\n\n var width = self.get('width');\n\n if (!width) {\n width = Util.getWidth(canvas);\n }\n\n var height = self.get('height');\n\n if (!height) {\n height = Util.getHeight(canvas);\n }\n\n self.set('canvas', this);\n self.set('el', canvas);\n self.set('context', context || canvas.getContext('2d'));\n self.changeSize(width, height);\n };\n\n _proto.changeSize = function changeSize(width, height) {\n var pixelRatio = this.get('pixelRatio');\n var canvasDOM = this.get('el');\n\n if (Util.isBrowser) {\n canvasDOM.style.width = width + 'px';\n canvasDOM.style.height = height + 'px';\n }\n\n if (!Util.isWx && !Util.isMy) {\n canvasDOM.width = width * pixelRatio;\n canvasDOM.height = height * pixelRatio;\n\n if (pixelRatio !== 1) {\n var ctx = this.get('context');\n ctx.scale(pixelRatio, pixelRatio);\n }\n }\n\n this.set('width', width);\n this.set('height', height);\n };\n\n _proto.getWidth = function getWidth() {\n var pixelRatio = this.get('pixelRatio');\n var width = this.get('width');\n return width * pixelRatio;\n };\n\n _proto.getHeight = function getHeight() {\n var pixelRatio = this.get('pixelRatio');\n var height = this.get('height');\n return height * pixelRatio;\n };\n\n _proto.getPointByClient = function getPointByClient(clientX, clientY) {\n var el = this.get('el');\n var bbox = el.getBoundingClientRect();\n var width = bbox.right - bbox.left;\n var height = bbox.bottom - bbox.top;\n return {\n x: (clientX - bbox.left) * (el.width / width),\n y: (clientY - bbox.top) * (el.height / height)\n };\n };\n\n _proto._beginDraw = function _beginDraw() {\n this._attrs.toDraw = true;\n };\n\n _proto._endDraw = function _endDraw() {\n this._attrs.toDraw = false;\n };\n\n _proto.draw = function draw() {\n var self = this;\n\n function drawInner() {\n self.set('animateHandler', requestAnimationFrame(function () {\n self.set('animateHandler', undefined);\n\n if (self.get('toDraw')) {\n drawInner();\n }\n }));\n self.beforeDraw();\n\n try {\n var context = self._attrs.context;\n var children = self._attrs.children;\n\n for (var i = 0, len = children.length; i < len; i++) {\n var child = children[i];\n child.draw(context);\n }\n\n if (Util.isWx || Util.isMy) {\n context.draw();\n }\n } catch (ev) {\n console.warn('error in draw canvas, detail as:');\n console.warn(ev);\n\n self._endDraw();\n }\n\n self._endDraw();\n }\n\n if (self.get('destroyed')) {\n return;\n }\n\n if (self.get('animateHandler')) {\n this._beginDraw();\n } else {\n drawInner();\n }\n };\n\n _proto.destroy = function destroy() {\n if (this.get('destroyed')) {\n return;\n }\n\n this.clear();\n this._attrs = {};\n this.set('destroyed', true);\n };\n\n _proto.isDestroyed = function isDestroyed() {\n return this.get('destroyed');\n };\n\n return Canvas;\n}();\n\nUtil.mix(Canvas.prototype, Container, {\n getGroupClass: function getGroupClass() {\n return Group;\n }\n});\nmodule.exports = Canvas;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/graphic/canvas.js\n// module id = 80\n// module chunks = 0","var Util = require('../../util/common');\n\nfunction _mod(n, m) {\n return (n % m + m) % m;\n}\n\nfunction _addStop(steps, gradient) {\n Util.each(steps, function (item) {\n item = item.split(':');\n gradient.addColorStop(Number(item[0]), item[1]);\n });\n} // the string format: 'l(0) 0:#ffffff 0.5:#7ec2f3 1:#1890ff'\n\n\nfunction _parseLineGradient(color, shape, context) {\n var arr = color.split(' ');\n var angle = arr[0].slice(2, arr[0].length - 1);\n angle = _mod(parseFloat(angle) * Math.PI / 180, Math.PI * 2);\n var steps = arr.slice(1);\n\n var _shape$getBBox = shape.getBBox(),\n minX = _shape$getBBox.minX,\n minY = _shape$getBBox.minY,\n maxX = _shape$getBBox.maxX,\n maxY = _shape$getBBox.maxY;\n\n var start;\n var end;\n\n if (angle >= 0 && angle < 0.5 * Math.PI) {\n start = {\n x: minX,\n y: minY\n };\n end = {\n x: maxX,\n y: maxY\n };\n } else if (0.5 * Math.PI <= angle && angle < Math.PI) {\n start = {\n x: maxX,\n y: minY\n };\n end = {\n x: minX,\n y: maxY\n };\n } else if (Math.PI <= angle && angle < 1.5 * Math.PI) {\n start = {\n x: maxX,\n y: maxY\n };\n end = {\n x: minX,\n y: minY\n };\n } else {\n start = {\n x: minX,\n y: maxY\n };\n end = {\n x: maxX,\n y: minY\n };\n }\n\n var tanTheta = Math.tan(angle);\n var tanTheta2 = tanTheta * tanTheta;\n var x = (end.x - start.x + tanTheta * (end.y - start.y)) / (tanTheta2 + 1) + start.x;\n var y = tanTheta * (end.x - start.x + tanTheta * (end.y - start.y)) / (tanTheta2 + 1) + start.y;\n var gradient = context.createLinearGradient(start.x, start.y, x, y);\n\n _addStop(steps, gradient);\n\n return gradient;\n} // the string format: 'r(0.5, 0.5, 0.1) 0:#ffffff 1:#1890ff'\n\n\nfunction _parseRadialGradient(color, shape, context) {\n var arr = color.split(' ');\n var circleCfg = arr[0].slice(2, arr[0].length - 1);\n circleCfg = circleCfg.split(',');\n var fx = parseFloat(circleCfg[0]);\n var fy = parseFloat(circleCfg[1]);\n var fr = parseFloat(circleCfg[2]);\n var steps = arr.slice(1); // if radius is 0, no gradient, stroke with the last color\n\n if (fr === 0) {\n var _color = steps[steps.length - 1];\n return _color.split(':')[1];\n }\n\n var _shape$getBBox2 = shape.getBBox(),\n width = _shape$getBBox2.width,\n height = _shape$getBBox2.height,\n minX = _shape$getBBox2.minX,\n minY = _shape$getBBox2.minY;\n\n var r = Math.sqrt(width * width + height * height) / 2;\n var gradient = context.createRadialGradient(minX + width * fx, minY + height * fy, fr * r, minX + width / 2, minY + height / 2, r);\n\n _addStop(steps, gradient);\n\n return gradient;\n}\n\nmodule.exports = {\n parseStyle: function parseStyle(color, shape, context) {\n if (color[1] === '(') {\n try {\n var firstCode = color[0];\n\n if (firstCode === 'l') {\n return _parseLineGradient(color, shape, context);\n } else if (firstCode === 'r') {\n return _parseRadialGradient(color, shape, context);\n }\n } catch (ev) {\n console.error('error in parsing gradient string, please check if there are any extra whitespaces.');\n console.error(ev);\n }\n }\n\n return color;\n }\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/graphic/util/style-parse.js\n// module id = 81\n// module chunks = 0","function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}\n\nvar Util = require('../../util/common');\n\nvar Shape = require('../shape');\n\nvar Rect =\n/*#__PURE__*/\nfunction (_Shape) {\n _inheritsLoose(Rect, _Shape);\n\n function Rect() {\n return _Shape.apply(this, arguments) || this;\n }\n\n var _proto = Rect.prototype;\n\n _proto._initProperties = function _initProperties() {\n _Shape.prototype._initProperties.call(this);\n\n this._attrs.canFill = true;\n this._attrs.canStroke = true;\n this._attrs.type = 'rect';\n };\n\n _proto.getDefaultAttrs = function getDefaultAttrs() {\n return {\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n radius: 0,\n lineWidth: 0\n };\n };\n\n _proto.createPath = function createPath(context) {\n var self = this;\n var attrs = self.get('attrs');\n var x = attrs.x,\n y = attrs.y,\n width = attrs.width,\n height = attrs.height;\n context.beginPath();\n var radius = attrs.radius;\n\n if (!radius || !(width * height)) {\n context.rect(x, y, width, height);\n } else {\n radius = Util.parsePadding(radius);\n context.moveTo(x + radius[0], y);\n context.lineTo(x + width - radius[1], y);\n context.arc(x + width - radius[1], y + radius[1], radius[1], -Math.PI / 2, 0, false);\n context.lineTo(x + width, y + height - radius[2]);\n context.arc(x + width - radius[2], y + height - radius[2], radius[2], 0, Math.PI / 2, false);\n context.lineTo(x + radius[3], y + height);\n context.arc(x + radius[3], y + height - radius[3], radius[3], Math.PI / 2, Math.PI, false);\n context.lineTo(x, y + radius[0]);\n context.arc(x + radius[0], y + radius[0], radius[0], Math.PI, Math.PI * 3 / 2, false);\n context.closePath();\n }\n };\n\n _proto.calculateBox = function calculateBox() {\n var attrs = this.get('attrs');\n var x = attrs.x,\n y = attrs.y,\n width = attrs.width,\n height = attrs.height;\n return {\n minX: x,\n minY: y,\n maxX: x + width,\n maxY: y + height\n };\n };\n\n return Rect;\n}(Shape);\n\nShape.Rect = Rect;\nmodule.exports = Rect;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/graphic/shape/rect.js\n// module id = 82\n// module chunks = 0","function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}\n\nvar Shape = require('../shape');\n\nvar Circle =\n/*#__PURE__*/\nfunction (_Shape) {\n _inheritsLoose(Circle, _Shape);\n\n function Circle() {\n return _Shape.apply(this, arguments) || this;\n }\n\n var _proto = Circle.prototype;\n\n _proto._initProperties = function _initProperties() {\n _Shape.prototype._initProperties.call(this);\n\n this._attrs.canFill = true;\n this._attrs.canStroke = true;\n this._attrs.type = 'circle';\n };\n\n _proto.getDefaultAttrs = function getDefaultAttrs() {\n return {\n x: 0,\n y: 0,\n r: 0,\n lineWidth: 0\n };\n };\n\n _proto.createPath = function createPath(context) {\n var attrs = this.get('attrs');\n var x = attrs.x,\n y = attrs.y,\n r = attrs.r;\n context.beginPath();\n context.arc(x, y, r, 0, Math.PI * 2, false);\n context.closePath();\n };\n\n _proto.calculateBox = function calculateBox() {\n var attrs = this.get('attrs');\n var x = attrs.x,\n y = attrs.y,\n r = attrs.r;\n return {\n minX: x - r,\n maxX: x + r,\n minY: y - r,\n maxY: y + r\n };\n };\n\n return Circle;\n}(Shape);\n\nShape.Circle = Circle;\nmodule.exports = Circle;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/graphic/shape/circle.js\n// module id = 83\n// module chunks = 0","function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}\n\nvar Shape = require('../shape');\n\nvar bbox = require('../util/bbox');\n\nvar Line =\n/*#__PURE__*/\nfunction (_Shape) {\n _inheritsLoose(Line, _Shape);\n\n function Line() {\n return _Shape.apply(this, arguments) || this;\n }\n\n var _proto = Line.prototype;\n\n _proto._initProperties = function _initProperties() {\n _Shape.prototype._initProperties.call(this);\n\n this._attrs.canStroke = true;\n this._attrs.type = 'line';\n };\n\n _proto.getDefaultAttrs = function getDefaultAttrs() {\n return {\n x1: 0,\n y1: 0,\n x2: 0,\n y2: 0,\n lineWidth: 1\n };\n };\n\n _proto.createPath = function createPath(context) {\n var attrs = this.get('attrs');\n var x1 = attrs.x1,\n y1 = attrs.y1,\n x2 = attrs.x2,\n y2 = attrs.y2;\n context.beginPath();\n context.moveTo(x1, y1);\n context.lineTo(x2, y2);\n };\n\n _proto.calculateBox = function calculateBox() {\n var attrs = this.get('attrs');\n var x1 = attrs.x1,\n y1 = attrs.y1,\n x2 = attrs.x2,\n y2 = attrs.y2,\n lineWidth = attrs.lineWidth;\n return bbox.getBBoxFromLine(x1, y1, x2, y2, lineWidth);\n };\n\n return Line;\n}(Shape);\n\nShape.Line = Line;\nmodule.exports = Line;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/graphic/shape/line.js\n// module id = 84\n// module chunks = 0","function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}\n\nvar Shape = require('../shape');\n\nvar bbox = require('../util/bbox');\n\nvar Polygon =\n/*#__PURE__*/\nfunction (_Shape) {\n _inheritsLoose(Polygon, _Shape);\n\n function Polygon() {\n return _Shape.apply(this, arguments) || this;\n }\n\n var _proto = Polygon.prototype;\n\n _proto._initProperties = function _initProperties() {\n _Shape.prototype._initProperties.call(this);\n\n this._attrs.canFill = true;\n this._attrs.canStroke = true;\n this._attrs.type = 'polygon';\n };\n\n _proto.getDefaultAttrs = function getDefaultAttrs() {\n return {\n points: null,\n lineWidth: 0\n };\n };\n\n _proto.createPath = function createPath(context) {\n var self = this;\n var attrs = self.get('attrs');\n var points = attrs.points;\n context.beginPath();\n\n for (var i = 0, len = points.length; i < len; i++) {\n var point = points[i];\n\n if (i === 0) {\n context.moveTo(point.x, point.y);\n } else {\n context.lineTo(point.x, point.y);\n }\n }\n\n context.closePath();\n };\n\n _proto.calculateBox = function calculateBox() {\n var attrs = this.get('attrs');\n var points = attrs.points;\n return bbox.getBBoxFromPoints(points);\n };\n\n return Polygon;\n}(Shape);\n\nShape.Polygon = Polygon;\nmodule.exports = Polygon;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/graphic/shape/polygon.js\n// module id = 85\n// module chunks = 0","function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}\n\nvar Shape = require('../shape');\n\nvar Smooth = require('../util/smooth');\n\nvar bbox = require('../util/bbox'); // filter the point which x or y is NaN\n\n\nfunction _filterPoints(points) {\n var filteredPoints = [];\n\n for (var i = 0, len = points.length; i < len; i++) {\n var point = points[i];\n\n if (!isNaN(point.x) && !isNaN(point.y)) {\n filteredPoints.push(point);\n }\n }\n\n return filteredPoints;\n}\n\nvar Polyline =\n/*#__PURE__*/\nfunction (_Shape) {\n _inheritsLoose(Polyline, _Shape);\n\n function Polyline() {\n return _Shape.apply(this, arguments) || this;\n }\n\n var _proto = Polyline.prototype;\n\n _proto._initProperties = function _initProperties() {\n _Shape.prototype._initProperties.call(this);\n\n this._attrs.canFill = true;\n this._attrs.canStroke = true;\n this._attrs.type = 'polyline';\n };\n\n _proto.getDefaultAttrs = function getDefaultAttrs() {\n return {\n points: null,\n lineWidth: 1,\n smooth: false\n };\n };\n\n _proto.createPath = function createPath(context) {\n var self = this;\n var attrs = self.get('attrs');\n var points = attrs.points,\n smooth = attrs.smooth;\n\n var filteredPoints = _filterPoints(points);\n\n context.beginPath();\n\n if (filteredPoints.length) {\n context.moveTo(filteredPoints[0].x, filteredPoints[0].y);\n\n if (smooth) {\n var constaint = [[0, 0], [1, 1]];\n var sps = Smooth.smooth(filteredPoints, false, constaint);\n\n for (var i = 0, n = sps.length; i < n; i++) {\n var sp = sps[i];\n context.bezierCurveTo(sp[1], sp[2], sp[3], sp[4], sp[5], sp[6]);\n }\n } else {\n var _i;\n\n var l;\n\n for (_i = 1, l = filteredPoints.length - 1; _i < l; _i++) {\n context.lineTo(filteredPoints[_i].x, filteredPoints[_i].y);\n }\n\n context.lineTo(filteredPoints[l].x, filteredPoints[l].y);\n }\n }\n };\n\n _proto.calculateBox = function calculateBox() {\n var attrs = this.get('attrs');\n var points = attrs.points,\n smooth = attrs.smooth,\n lineWidth = attrs.lineWidth;\n\n var filteredPoints = _filterPoints(points);\n\n if (smooth) {\n var newPoints = [];\n var constaint = [[0, 0], [1, 1]];\n var sps = Smooth.smooth(filteredPoints, false, constaint);\n\n for (var i = 0, n = sps.length; i < n; i++) {\n var sp = sps[i];\n\n if (i === 0) {\n newPoints.push([filteredPoints[0].x, filteredPoints[0].y, sp[1], sp[2], sp[3], sp[4], sp[5], sp[6]]);\n } else {\n var lastPoint = sps[i - 1];\n newPoints.push([lastPoint[5], lastPoint[6], sp[1], sp[2], sp[3], sp[4], sp[5], sp[6]]);\n }\n }\n\n return bbox.getBBoxFromBezierGroup(newPoints, lineWidth);\n }\n\n return bbox.getBBoxFromPoints(filteredPoints, lineWidth);\n };\n\n return Polyline;\n}(Shape);\n\nShape.Polyline = Polyline;\nmodule.exports = Polyline;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/graphic/shape/polyline.js\n// module id = 86\n// module chunks = 0","function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}\n\nvar Shape = require('../shape');\n\nvar bbox = require('../util/bbox');\n\nvar Arc =\n/*#__PURE__*/\nfunction (_Shape) {\n _inheritsLoose(Arc, _Shape);\n\n function Arc() {\n return _Shape.apply(this, arguments) || this;\n }\n\n var _proto = Arc.prototype;\n\n _proto._initProperties = function _initProperties() {\n _Shape.prototype._initProperties.call(this);\n\n this._attrs.canStroke = true;\n this._attrs.canFill = true;\n this._attrs.type = 'arc';\n };\n\n _proto.getDefaultAttrs = function getDefaultAttrs() {\n return {\n x: 0,\n y: 0,\n r: 0,\n startAngle: 0,\n endAngle: Math.PI * 2,\n clockwise: false,\n lineWidth: 1\n };\n };\n\n _proto.createPath = function createPath(context) {\n var attrs = this.get('attrs');\n var x = attrs.x,\n y = attrs.y,\n r = attrs.r,\n startAngle = attrs.startAngle,\n endAngle = attrs.endAngle,\n clockwise = attrs.clockwise;\n context.beginPath();\n context.arc(x, y, r, startAngle, endAngle, clockwise);\n };\n\n _proto.calculateBox = function calculateBox() {\n var attrs = this.get('attrs');\n var x = attrs.x,\n y = attrs.y,\n r = attrs.r,\n startAngle = attrs.startAngle,\n endAngle = attrs.endAngle,\n clockwise = attrs.clockwise;\n return bbox.getBBoxFromArc(x, y, r, startAngle, endAngle, clockwise);\n };\n\n return Arc;\n}(Shape);\n\nShape.Arc = Arc;\nmodule.exports = Arc;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/graphic/shape/arc.js\n// module id = 87\n// module chunks = 0","function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}\n\nvar Shape = require('../shape');\n\nvar bbox = require('../util/bbox');\n\nvar Sector =\n/*#__PURE__*/\nfunction (_Shape) {\n _inheritsLoose(Sector, _Shape);\n\n function Sector() {\n return _Shape.apply(this, arguments) || this;\n }\n\n var _proto = Sector.prototype;\n\n _proto._initProperties = function _initProperties() {\n _Shape.prototype._initProperties.call(this);\n\n this._attrs.canFill = true;\n this._attrs.canStroke = true;\n this._attrs.type = 'sector';\n };\n\n _proto.getDefaultAttrs = function getDefaultAttrs() {\n return {\n x: 0,\n y: 0,\n lineWidth: 0,\n r: 0,\n r0: 0,\n startAngle: 0,\n endAngle: Math.PI * 2,\n clockwise: false\n };\n };\n\n _proto.createPath = function createPath(context) {\n var attrs = this.get('attrs');\n var x = attrs.x,\n y = attrs.y,\n startAngle = attrs.startAngle,\n endAngle = attrs.endAngle,\n r = attrs.r,\n r0 = attrs.r0,\n clockwise = attrs.clockwise;\n context.beginPath();\n var unitX = Math.cos(startAngle);\n var unitY = Math.sin(startAngle);\n context.moveTo(unitX * r0 + x, unitY * r0 + y);\n context.lineTo(unitX * r + x, unitY * r + y);\n context.arc(x, y, r, startAngle, endAngle, clockwise);\n context.lineTo(Math.cos(endAngle) * r0 + x, Math.sin(endAngle) * r0 + y);\n\n if (r0 !== 0) {\n context.arc(x, y, r0, endAngle, startAngle, !clockwise);\n }\n\n context.closePath();\n };\n\n _proto.calculateBox = function calculateBox() {\n var attrs = this.get('attrs');\n var x = attrs.x,\n y = attrs.y,\n r = attrs.r,\n r0 = attrs.r0,\n startAngle = attrs.startAngle,\n endAngle = attrs.endAngle,\n clockwise = attrs.clockwise;\n var outerBBox = bbox.getBBoxFromArc(x, y, r, startAngle, endAngle, clockwise);\n var innerBBox = bbox.getBBoxFromArc(x, y, r0, startAngle, endAngle, clockwise);\n return {\n minX: Math.min(outerBBox.minX, innerBBox.minX),\n minY: Math.min(outerBBox.minY, innerBBox.minY),\n maxX: Math.max(outerBBox.maxX, innerBBox.maxX),\n maxY: Math.max(outerBBox.maxY, innerBBox.maxY)\n };\n };\n\n return Sector;\n}(Shape);\n\nShape.Sector = Sector;\nmodule.exports = Sector;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/graphic/shape/sector.js\n// module id = 88\n// module chunks = 0","function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}\n\nvar Util = require('../../util/common');\n\nvar Shape = require('../shape');\n\nvar textWidthCacheCounter = 0;\nvar textWidthCache = {};\nvar TEXT_CACHE_MAX = 5000;\n\nvar Text =\n/*#__PURE__*/\nfunction (_Shape) {\n _inheritsLoose(Text, _Shape);\n\n function Text() {\n return _Shape.apply(this, arguments) || this;\n }\n\n var _proto = Text.prototype;\n\n _proto._initProperties = function _initProperties() {\n _Shape.prototype._initProperties.call(this);\n\n this._attrs.canFill = true;\n this._attrs.canStroke = true;\n this._attrs.type = 'text';\n };\n\n _proto.getDefaultAttrs = function getDefaultAttrs() {\n return {\n lineWidth: 0,\n lineCount: 1,\n fontSize: 12,\n fontFamily: 'sans-serif',\n fontStyle: 'normal',\n fontWeight: 'normal',\n fontVariant: 'normal',\n textAlign: 'start',\n textBaseline: 'bottom',\n lineHeight: null,\n textArr: null\n };\n };\n\n _proto._getFontStyle = function _getFontStyle() {\n var attrs = this._attrs.attrs;\n var fontSize = attrs.fontSize,\n fontFamily = attrs.fontFamily,\n fontWeight = attrs.fontWeight,\n fontStyle = attrs.fontStyle,\n fontVariant = attrs.fontVariant;\n return fontStyle + \" \" + fontVariant + \" \" + fontWeight + \" \" + fontSize + \"px \" + fontFamily;\n };\n\n _proto._afterAttrsSet = function _afterAttrsSet() {\n var attrs = this._attrs.attrs;\n attrs.font = this._getFontStyle();\n\n if (attrs.text) {\n var text = attrs.text;\n var textArr = null;\n var lineCount = 1;\n\n if (Util.isString(text) && text.indexOf('\\n') !== -1) {\n textArr = text.split('\\n');\n lineCount = textArr.length;\n }\n\n attrs.lineCount = lineCount;\n attrs.textArr = textArr;\n }\n\n this.set('attrs', attrs);\n };\n\n _proto._getTextHeight = function _getTextHeight() {\n var attrs = this._attrs.attrs;\n\n if (attrs.height) {\n return attrs.height;\n }\n\n var lineCount = attrs.lineCount;\n var fontSize = attrs.fontSize * 1;\n\n if (lineCount > 1) {\n var spaceingY = this._getSpaceingY();\n\n return fontSize * lineCount + spaceingY * (lineCount - 1);\n }\n\n return fontSize;\n };\n\n _proto._getSpaceingY = function _getSpaceingY() {\n var attrs = this._attrs.attrs;\n var lineHeight = attrs.lineHeight;\n var fontSize = attrs.fontSize * 1;\n return lineHeight ? lineHeight - fontSize : fontSize * 0.14;\n };\n\n _proto.drawInner = function drawInner(context) {\n var self = this;\n var attrs = self._attrs.attrs;\n var text = attrs.text;\n var x = attrs.x;\n var y = attrs.y;\n\n if (Util.isNil(text) || isNaN(x) || isNaN(y)) {\n // text will be 0\n return;\n }\n\n var textArr = attrs.textArr;\n var fontSize = attrs.fontSize * 1;\n\n var spaceingY = self._getSpaceingY();\n\n if (attrs.rotate) {\n // do rotation\n context.translate(x, y);\n context.rotate(attrs.rotate);\n x = 0;\n y = 0;\n }\n\n var textBaseline = attrs.textBaseline;\n var height;\n\n if (textArr) {\n height = self._getTextHeight();\n }\n\n var subY; // context.beginPath();\n\n if (self.hasFill()) {\n var fillOpacity = attrs.fillOpacity;\n\n if (!Util.isNil(fillOpacity) && fillOpacity !== 1) {\n context.globalAlpha = fillOpacity;\n }\n\n if (textArr) {\n for (var i = 0, len = textArr.length; i < len; i++) {\n var subText = textArr[i];\n subY = y + i * (spaceingY + fontSize) - height + fontSize; // bottom;\n\n if (textBaseline === 'middle') {\n subY += height - fontSize - (height - fontSize) / 2;\n }\n\n if (textBaseline === 'top') {\n subY += height - fontSize;\n }\n\n context.fillText(subText, x, subY);\n }\n } else {\n context.fillText(text, x, y);\n }\n }\n\n if (self.hasStroke()) {\n if (textArr) {\n for (var _i = 0, _len = textArr.length; _i < _len; _i++) {\n var _subText = textArr[_i];\n subY = y + _i * (spaceingY + fontSize) - height + fontSize; // bottom;\n\n if (textBaseline === 'middle') {\n subY += height - fontSize - (height - fontSize) / 2;\n }\n\n if (textBaseline === 'top') {\n subY += height - fontSize;\n }\n\n context.strokeText(_subText, x, subY);\n }\n } else {\n context.strokeText(text, x, y);\n }\n }\n };\n\n _proto.calculateBox = function calculateBox() {\n var self = this;\n var attrs = self._attrs.attrs;\n var x = attrs.x,\n y = attrs.y,\n textAlign = attrs.textAlign,\n textBaseline = attrs.textBaseline;\n\n var width = self._getTextWidth(); // attrs.width\n\n\n if (!width) {\n return {\n minX: x,\n minY: y,\n maxX: x,\n maxY: y\n };\n }\n\n var height = self._getTextHeight(); // attrs.height\n\n\n var point = {\n x: x,\n y: y - height\n }; // default textAlign: start, textBaseline: bottom\n\n if (textAlign) {\n if (textAlign === 'end' || textAlign === 'right') {\n point.x -= width;\n } else if (textAlign === 'center') {\n point.x -= width / 2;\n }\n }\n\n if (textBaseline) {\n if (textBaseline === 'top') {\n point.y += height;\n } else if (textBaseline === 'middle') {\n point.y += height / 2;\n }\n }\n\n return {\n minX: point.x,\n minY: point.y,\n maxX: point.x + width,\n maxY: point.y + height\n };\n };\n\n _proto._getTextWidth = function _getTextWidth() {\n var attrs = this._attrs.attrs;\n\n if (attrs.width) {\n return attrs.width;\n }\n\n var text = attrs.text;\n var context = this.get('context');\n if (Util.isNil(text)) return undefined;\n var font = attrs.font;\n var textArr = attrs.textArr;\n var key = text + '' + font;\n\n if (textWidthCache[key]) {\n return textWidthCache[key];\n }\n\n var width = 0;\n\n if (textArr) {\n for (var i = 0, length = textArr.length; i < length; i++) {\n var subText = textArr[i];\n width = Math.max(width, Util.measureText(subText, font, context).width);\n }\n } else {\n width = Util.measureText(text, font, context).width;\n }\n\n if (textWidthCacheCounter > TEXT_CACHE_MAX) {\n textWidthCacheCounter = 0;\n textWidthCache = {};\n }\n\n textWidthCacheCounter++;\n textWidthCache[key] = width;\n return width;\n };\n\n return Text;\n}(Shape);\n\nShape.Text = Text;\nmodule.exports = Text;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/graphic/shape/text.js\n// module id = 89\n// module chunks = 0","function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}\n\nvar Shape = require('../shape');\n\nvar Custom =\n/*#__PURE__*/\nfunction (_Shape) {\n _inheritsLoose(Custom, _Shape);\n\n function Custom() {\n return _Shape.apply(this, arguments) || this;\n }\n\n var _proto = Custom.prototype;\n\n _proto._initProperties = function _initProperties() {\n _Shape.prototype._initProperties.call(this);\n\n this._attrs.canFill = true;\n this._attrs.canStroke = true;\n this._attrs.createPath = null;\n this._attrs.type = 'custom';\n };\n\n _proto.createPath = function createPath(context) {\n var createPath = this.get('createPath');\n createPath && createPath.call(this, context);\n };\n\n _proto.calculateBox = function calculateBox() {\n var calculateBox = this.get('calculateBox');\n return calculateBox && calculateBox.call(this);\n };\n\n return Custom;\n}(Shape);\n\nShape.Custom = Custom;\nmodule.exports = Custom;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/graphic/shape/custom.js\n// module id = 90\n// module chunks = 0","var Geom = require('./base');\n\nrequire('./point');\n\nrequire('./path');\n\nrequire('./line');\n\nrequire('./area');\n\nrequire('./interval');\n\nrequire('./polygon');\n\nrequire('./schema');\n\nmodule.exports = Geom;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/geom/index.js\n// module id = 91\n// module chunks = 0","function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}\n\nvar Util = require('../util/common');\n\nvar Geom = require('./base');\n\nrequire('./shape/point');\n\nvar Point =\n/*#__PURE__*/\nfunction (_Geom) {\n _inheritsLoose(Point, _Geom);\n\n function Point() {\n return _Geom.apply(this, arguments) || this;\n }\n\n var _proto = Point.prototype;\n\n _proto.getDefaultCfg = function getDefaultCfg() {\n var cfg = _Geom.prototype.getDefaultCfg.call(this);\n\n cfg.type = 'point';\n cfg.shapeType = 'point';\n cfg.generatePoints = true;\n return cfg;\n };\n\n _proto.draw = function draw(data, shapeFactory) {\n var self = this;\n var container = self.get('container');\n Util.each(data, function (obj) {\n var shape = obj.shape;\n var cfg = self.getDrawCfg(obj);\n\n if (Util.isArray(obj.y)) {\n var hasStack = self.hasAdjust('stack');\n Util.each(obj.y, function (y, idx) {\n cfg.y = y;\n\n if (!hasStack || idx !== 0) {\n self.drawShape(shape, obj, cfg, container, shapeFactory);\n }\n });\n } else if (!Util.isNil(obj.y)) {\n self.drawShape(shape, obj, cfg, container, shapeFactory);\n }\n });\n };\n\n return Point;\n}(Geom);\n\nGeom.Point = Point;\nmodule.exports = Point;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/geom/point.js\n// module id = 92\n// module chunks = 0","var Util = require('../../util/common');\n\nvar Global = require('../../global');\n\nvar ShapeUtil = require('./util');\n\nvar Shape = require('./shape');\n\nvar SHAPES = ['circle', 'hollowCircle', 'rect'];\nvar Point = Shape.registerFactory('point', {\n defaultShapeType: 'circle',\n getDefaultPoints: function getDefaultPoints(pointInfo) {\n return ShapeUtil.splitPoints(pointInfo);\n }\n});\n\nfunction getPointsCfg(cfg) {\n var style = {\n lineWidth: 0,\n stroke: cfg.color,\n fill: cfg.color\n };\n\n if (cfg.size) {\n style.size = cfg.size;\n }\n\n Util.mix(style, cfg.style);\n return Util.mix({}, Global.shape.point, style);\n}\n\nfunction drawShape(cfg, container, shape) {\n if (cfg.size === 0) return;\n var pointCfg = getPointsCfg(cfg);\n var size = pointCfg.r || pointCfg.size;\n var x = cfg.x;\n var y = !Util.isArray(cfg.y) ? [cfg.y] : cfg.y;\n\n if (shape === 'hollowCircle') {\n pointCfg.lineWidth = 1;\n pointCfg.fill = null;\n }\n\n for (var i = 0, len = y.length; i < len; i++) {\n if (shape === 'rect') {\n return container.addShape('Rect', {\n className: 'point',\n attrs: Util.mix({\n x: x - size,\n y: y[i] - size,\n width: size * 2,\n height: size * 2\n }, pointCfg)\n });\n }\n\n return container.addShape('Circle', {\n className: 'point',\n attrs: Util.mix({\n x: x,\n y: y[i],\n r: size\n }, pointCfg)\n });\n }\n}\n\nUtil.each(SHAPES, function (shapeType) {\n Shape.registerShape('point', shapeType, {\n draw: function draw(cfg, container) {\n return drawShape(cfg, container, shapeType);\n }\n });\n});\nmodule.exports = Point;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/geom/shape/point.js\n// module id = 93\n// module chunks = 0","function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}\n\nvar Path = require('./path');\n\nvar Geom = require('./base');\n\nrequire('./shape/line');\n\nvar Line =\n/*#__PURE__*/\nfunction (_Path) {\n _inheritsLoose(Line, _Path);\n\n function Line() {\n return _Path.apply(this, arguments) || this;\n }\n\n var _proto = Line.prototype;\n\n _proto.getDefaultCfg = function getDefaultCfg() {\n var cfg = _Path.prototype.getDefaultCfg.call(this);\n\n cfg.type = 'line';\n cfg.sortable = true;\n return cfg;\n };\n\n return Line;\n}(Path);\n\nGeom.Line = Line;\nmodule.exports = Line;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/geom/line.js\n// module id = 94\n// module chunks = 0","function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}\n/**\n * @fileOverview area geometry\n * @author dxq613 @gmail.com\n * @author sima.zhang1990@gmail.com\n */\n\n\nvar Geom = require('./base');\n\nvar ShapeUtil = require('./shape/util');\n\nvar Util = require('../util/common');\n\nrequire('./shape/area');\n\nvar Area =\n/*#__PURE__*/\nfunction (_Geom) {\n _inheritsLoose(Area, _Geom);\n\n function Area() {\n return _Geom.apply(this, arguments) || this;\n }\n\n var _proto = Area.prototype;\n /**\n * get the default configuration\n * @protected\n * @return {Object} return the result\n */\n\n _proto.getDefaultCfg = function getDefaultCfg() {\n var cfg = _Geom.prototype.getDefaultCfg.call(this);\n\n cfg.type = 'area';\n cfg.shapeType = 'area';\n cfg.generatePoints = true;\n cfg.sortable = true;\n return cfg;\n };\n\n _proto.draw = function draw(data, shapeFactory) {\n var self = this;\n var container = self.get('container');\n var cfg = this.getDrawCfg(data[0]);\n var yScale = self.getYScale();\n var connectNulls = self.get('connectNulls');\n var splitArray = ShapeUtil.splitArray(data, yScale.field, connectNulls);\n cfg.origin = data;\n Util.each(splitArray, function (subData, splitedIndex) {\n cfg.splitedIndex = splitedIndex;\n var points = subData.map(function (obj) {\n return obj.points;\n });\n cfg.points = points;\n self.drawShape(cfg.shape, data[0], cfg, container, shapeFactory);\n });\n };\n\n return Area;\n}(Geom);\n\nGeom.Area = Area;\nmodule.exports = Area;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/geom/area.js\n// module id = 95\n// module chunks = 0","var Util = require('../../util/common');\n\nvar Shape = require('./shape');\n\nvar Smooth = require('../../graphic/util/smooth');\n\nvar bbox = require('../../graphic/util/bbox');\n\nvar Global = require('../../global');\n\nfunction equals(v1, v2) {\n return Math.abs(v1 - v2) < 0.00001;\n}\n\nfunction notEmpty(value) {\n return !isNaN(value) && !Util.isNil(value);\n}\n\nfunction filterPoints(points) {\n var filteredPoints = []; // filter the point which x or y is NaN\n\n for (var i = 0, len = points.length; i < len; i++) {\n var point = points[i];\n\n if (notEmpty(point.x) && notEmpty(point.y)) {\n filteredPoints.push(point);\n }\n }\n\n return filteredPoints;\n}\n\nfunction equalsCenter(points, center) {\n var eqls = true;\n Util.each(points, function (point) {\n if (!equals(point.x, center.x) || !equals(point.y, center.y)) {\n eqls = false;\n return false;\n }\n });\n return eqls;\n}\n\nfunction drawRectShape(topPoints, bottomPoints, container, style, isSmooth) {\n var shape;\n var points = topPoints.concat(bottomPoints);\n\n if (isSmooth) {\n shape = container.addShape('Custom', {\n className: 'area',\n attrs: Util.mix({\n points: points\n }, style),\n createPath: function createPath(context) {\n var constaint = [[0, 0], [1, 1]];\n var points = filterPoints(this._attrs.attrs.points);\n var pointsLen = points.length;\n var topPoints = points.slice(0, pointsLen / 2);\n var bottomPoints = points.slice(pointsLen / 2, pointsLen);\n var topSps = Smooth.smooth(topPoints, false, constaint);\n context.beginPath();\n context.moveTo(topPoints[0].x, topPoints[0].y);\n\n for (var i = 0, n = topSps.length; i < n; i++) {\n var sp = topSps[i];\n context.bezierCurveTo(sp[1], sp[2], sp[3], sp[4], sp[5], sp[6]);\n }\n\n if (bottomPoints.length) {\n var bottomSps = Smooth.smooth(bottomPoints, false, constaint);\n context.lineTo(bottomPoints[0].x, bottomPoints[0].y);\n\n for (var _i = 0, _n = bottomSps.length; _i < _n; _i++) {\n var _sp = bottomSps[_i];\n context.bezierCurveTo(_sp[1], _sp[2], _sp[3], _sp[4], _sp[5], _sp[6]);\n }\n }\n\n context.closePath();\n },\n calculateBox: function calculateBox() {\n var points = filterPoints(this._attrs.attrs.points);\n return bbox.getBBoxFromPoints(points);\n }\n });\n } else {\n shape = container.addShape('Polyline', {\n className: 'area',\n attrs: Util.mix({\n points: points\n }, style)\n });\n }\n\n return shape;\n}\n\nfunction drawShape(cfg, container, isSmooth) {\n var self = this;\n var points = cfg.points;\n var topPoints = [];\n var bottomPoints = [];\n Util.each(points, function (point) {\n bottomPoints.push(point[0]);\n topPoints.push(point[1]);\n });\n var style = Util.mix({\n fillStyle: cfg.color\n }, Global.shape.area, cfg.style);\n bottomPoints.reverse();\n topPoints = self.parsePoints(topPoints);\n bottomPoints = self.parsePoints(bottomPoints);\n\n if (cfg.isInCircle) {\n topPoints.push(topPoints[0]);\n bottomPoints.unshift(bottomPoints[bottomPoints.length - 1]);\n\n if (equalsCenter(bottomPoints, cfg.center)) {\n bottomPoints = [];\n }\n }\n\n return drawRectShape(topPoints, bottomPoints, container, style, isSmooth);\n}\n\nvar Area = Shape.registerFactory('area', {\n defaultShapeType: 'area',\n getDefaultPoints: function getDefaultPoints(obj) {\n var x = obj.x;\n var y = obj.y;\n var y0 = obj.y0;\n y = Util.isArray(y) ? y : [y0, y];\n var points = [];\n points.push({\n x: x,\n y: y[0]\n }, {\n x: x,\n y: y[1]\n });\n return points;\n }\n});\nvar SHAPES = ['area', 'smooth'];\nUtil.each(SHAPES, function (shapeType) {\n Shape.registerShape('area', shapeType, {\n draw: function draw(cfg, container) {\n var smooth = shapeType === 'smooth';\n return drawShape.call(this, cfg, container, smooth);\n }\n });\n});\nmodule.exports = Area;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/geom/shape/area.js\n// module id = 96\n// module chunks = 0","function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nvar Geom = require('./base');\n\nvar Util = require('../util/common');\n\nvar SizeMixin = require('./mixin/size');\n\nrequire('./shape/interval');\n\nvar Interval =\n/*#__PURE__*/\nfunction (_Geom) {\n _inheritsLoose(Interval, _Geom);\n\n var _proto = Interval.prototype;\n\n _proto.getDefaultCfg = function getDefaultCfg() {\n var cfg = _Geom.prototype.getDefaultCfg.call(this);\n\n cfg.type = 'interval';\n cfg.shapeType = 'interval';\n cfg.generatePoints = true;\n return cfg;\n };\n\n function Interval(cfg) {\n var _this;\n\n _this = _Geom.call(this, cfg) || this;\n Util.mix(_assertThisInitialized(_assertThisInitialized(_this)), SizeMixin);\n return _this;\n }\n\n _proto.createShapePointsCfg = function createShapePointsCfg(obj) {\n var cfg = _Geom.prototype.createShapePointsCfg.call(this, obj);\n\n cfg.size = this.getNormalizedSize(obj);\n return cfg;\n };\n\n _proto.clearInner = function clearInner() {\n _Geom.prototype.clearInner.call(this);\n\n this.set('defaultSize', null);\n };\n\n return Interval;\n}(Geom);\n\nGeom.Interval = Interval;\nmodule.exports = Interval;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/geom/interval.js\n// module id = 97\n// module chunks = 0","var Util = require('../../util/common');\n\nvar Shape = require('./shape');\n\nvar Vector2 = require('../../graphic/util/vector2');\n\nvar Global = require('../../global');\n\nfunction getRectPoints(cfg) {\n var x = cfg.x,\n y = cfg.y,\n y0 = cfg.y0,\n size = cfg.size;\n var ymin = y0;\n var ymax = y;\n\n if (Util.isArray(y)) {\n ymax = y[1];\n ymin = y[0];\n }\n\n var xmin;\n var xmax;\n\n if (Util.isArray(x)) {\n xmin = x[0];\n xmax = x[1];\n } else {\n xmin = x - size / 2;\n xmax = x + size / 2;\n }\n\n return [{\n x: xmin,\n y: ymin\n }, {\n x: xmin,\n y: ymax\n }, {\n x: xmax,\n y: ymax\n }, {\n x: xmax,\n y: ymin\n }];\n}\n\nfunction getRectRange(points) {\n var xValues = [];\n var yValues = [];\n\n for (var i = 0, len = points.length; i < len; i++) {\n var point = points[i];\n xValues.push(point.x);\n yValues.push(point.y);\n }\n\n var xMin = Math.min.apply(null, xValues);\n var yMin = Math.min.apply(null, yValues);\n var xMax = Math.max.apply(null, xValues);\n var yMax = Math.max.apply(null, yValues);\n return {\n x: xMin,\n y: yMin,\n width: xMax - xMin,\n height: yMax - yMin\n };\n}\n\nvar Interval = Shape.registerFactory('interval', {\n defaultShapeType: 'rect',\n getDefaultPoints: function getDefaultPoints(cfg) {\n return getRectPoints(cfg);\n }\n});\nShape.registerShape('interval', 'rect', {\n draw: function draw(cfg, container) {\n var points = this.parsePoints(cfg.points);\n var style = Util.mix({\n fill: cfg.color\n }, Global.shape.interval, cfg.style);\n\n if (cfg.isInCircle) {\n var newPoints = points.slice(0);\n\n if (this._coord.transposed) {\n newPoints = [points[0], points[3], points[2], points[1]];\n }\n\n var _cfg$center = cfg.center,\n x = _cfg$center.x,\n y = _cfg$center.y;\n var v = [1, 0];\n var v0 = [newPoints[0].x - x, newPoints[0].y - y];\n var v1 = [newPoints[1].x - x, newPoints[1].y - y];\n var v2 = [newPoints[2].x - x, newPoints[2].y - y];\n var startAngle = Vector2.angleTo(v, v1);\n var endAngle = Vector2.angleTo(v, v2);\n var r0 = Vector2.length(v0);\n var r = Vector2.length(v1);\n\n if (startAngle >= 1.5 * Math.PI) {\n startAngle = startAngle - 2 * Math.PI;\n }\n\n if (endAngle >= 1.5 * Math.PI) {\n endAngle = endAngle - 2 * Math.PI;\n }\n\n return container.addShape('Sector', {\n className: 'interval',\n attrs: Util.mix({\n x: x,\n y: y,\n r: r,\n r0: r0,\n startAngle: startAngle,\n endAngle: endAngle\n }, style)\n });\n }\n\n var rectCfg = getRectRange(points);\n return container.addShape('rect', {\n className: 'interval',\n attrs: Util.mix(rectCfg, style)\n });\n }\n});\nmodule.exports = Interval;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/geom/shape/interval.js\n// module id = 98\n// module chunks = 0","function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}\n\nvar Geom = require('./base');\n\nvar Util = require('../util/common');\n\nrequire('./shape/polygon');\n\nvar Polygon =\n/*#__PURE__*/\nfunction (_Geom) {\n _inheritsLoose(Polygon, _Geom);\n\n function Polygon() {\n return _Geom.apply(this, arguments) || this;\n }\n\n var _proto = Polygon.prototype;\n\n _proto.getDefaultCfg = function getDefaultCfg() {\n var cfg = _Geom.prototype.getDefaultCfg.call(this);\n\n cfg.type = 'polygon';\n cfg.shapeType = 'polygon';\n cfg.generatePoints = true;\n return cfg;\n };\n\n _proto.createShapePointsCfg = function createShapePointsCfg(obj) {\n var cfg = _Geom.prototype.createShapePointsCfg.call(this, obj);\n\n var self = this;\n var x = cfg.x;\n var y = cfg.y;\n var temp;\n\n if (!(Util.isArray(x) && Util.isArray(y))) {\n var xScale = self.getXScale();\n var yScale = self.getYScale();\n var xCount = xScale.values ? xScale.values.length : xScale.ticks.length;\n var yCount = yScale.values ? yScale.values.length : yScale.ticks.length;\n var xOffset = 0.5 * 1 / xCount;\n var yOffset = 0.5 * 1 / yCount;\n\n if (xScale.isCategory && yScale.isCategory) {\n x = [x - xOffset, x - xOffset, x + xOffset, x + xOffset];\n y = [y - yOffset, y + yOffset, y + yOffset, y - yOffset];\n } else if (Util.isArray(x)) {\n temp = x;\n x = [temp[0], temp[0], temp[1], temp[1]];\n y = [y - yOffset / 2, y + yOffset / 2, y + yOffset / 2, y - yOffset / 2];\n } else if (Util.isArray(y)) {\n temp = y;\n y = [temp[0], temp[1], temp[1], temp[0]];\n x = [x - xOffset / 2, x - xOffset / 2, x + xOffset / 2, x + xOffset / 2];\n }\n\n cfg.x = x;\n cfg.y = y;\n }\n\n return cfg;\n };\n\n return Polygon;\n}(Geom);\n\nGeom.Polygon = Polygon;\nmodule.exports = Polygon;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/geom/polygon.js\n// module id = 99\n// module chunks = 0","var Shape = require('./shape');\n\nvar Util = require('../../util/common');\n\nvar Polygon = Shape.registerFactory('polygon', {\n defaultShapeType: 'polygon',\n getDefaultPoints: function getDefaultPoints(pointInfo) {\n var points = [];\n var x = pointInfo.x,\n y = pointInfo.y;\n\n for (var i = 0, len = x.length; i < len; i++) {\n points.push({\n x: x[i],\n y: y[i]\n });\n }\n\n return points;\n }\n});\nShape.registerShape('polygon', 'polygon', {\n draw: function draw(cfg, container) {\n var points = this.parsePoints(cfg.points);\n var style = Util.mix({\n fill: cfg.color,\n points: points\n }, cfg.style);\n return container.addShape('Polygon', {\n className: 'polygon',\n attrs: style\n });\n }\n});\nmodule.exports = Polygon;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/geom/shape/polygon.js\n// module id = 100\n// module chunks = 0","function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nvar Geom = require('./base');\n\nvar Util = require('../util/common');\n\nvar SizeMixin = require('./mixin/size');\n\nrequire('./shape/schema');\n\nvar Schema =\n/*#__PURE__*/\nfunction (_Geom) {\n _inheritsLoose(Schema, _Geom);\n\n var _proto = Schema.prototype;\n\n _proto.getDefaultCfg = function getDefaultCfg() {\n var cfg = _Geom.prototype.getDefaultCfg.call(this);\n\n cfg.type = 'schema';\n cfg.shapeType = 'schema';\n cfg.generatePoints = true;\n return cfg;\n };\n\n function Schema(cfg) {\n var _this;\n\n _this = _Geom.call(this, cfg) || this;\n Util.mix(_assertThisInitialized(_assertThisInitialized(_this)), SizeMixin);\n return _this;\n }\n\n _proto.createShapePointsCfg = function createShapePointsCfg(obj) {\n var cfg = _Geom.prototype.createShapePointsCfg.call(this, obj);\n\n cfg.size = this.getNormalizedSize(obj);\n return cfg;\n };\n\n _proto.clearInner = function clearInner() {\n _Geom.prototype.clearInner.call(this);\n\n this.set('defaultSize', null);\n };\n\n return Schema;\n}(Geom);\n\nGeom.Schema = Schema;\nmodule.exports = Schema;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/geom/schema.js\n// module id = 101\n// module chunks = 0","var Shape = require('./shape');\n\nvar Util = require('../../util/common');\n\nfunction _sortValue(value) {\n var sorted = value.sort(function (a, b) {\n return a < b ? 1 : -1;\n });\n var length = sorted.length;\n\n if (length < 4) {\n var min = sorted[length - 1];\n\n for (var i = 0; i < 4 - length; i++) {\n sorted.push(min);\n }\n }\n\n return sorted;\n} // from left bottom corner, and clockwise\n\n\nfunction getCandlePoints(x, y, width) {\n var yValues = _sortValue(y);\n\n var points = [{\n x: x,\n y: yValues[0]\n }, {\n x: x,\n y: yValues[1]\n }, {\n x: x - width / 2,\n y: yValues[2]\n }, {\n x: x - width / 2,\n y: yValues[1]\n }, {\n x: x + width / 2,\n y: yValues[1]\n }, {\n x: x + width / 2,\n y: yValues[2]\n }, {\n x: x,\n y: yValues[2]\n }, {\n x: x,\n y: yValues[3]\n }];\n return points;\n}\n\nvar Schema = Shape.registerFactory('schema', {});\nShape.registerShape('schema', 'candle', {\n getPoints: function getPoints(cfg) {\n return getCandlePoints(cfg.x, cfg.y, cfg.size);\n },\n draw: function draw(cfg, container) {\n var points = this.parsePoints(cfg.points);\n var style = Util.mix({\n stroke: cfg.color,\n fill: cfg.color,\n lineWidth: 1\n }, cfg.style);\n return container.addShape('Custom', {\n className: 'schema',\n attrs: style,\n createPath: function createPath(ctx) {\n ctx.beginPath();\n ctx.moveTo(points[0].x, points[0].y);\n ctx.lineTo(points[1].x, points[1].y);\n ctx.moveTo(points[2].x, points[2].y);\n\n for (var i = 3; i < 6; i++) {\n ctx.lineTo(points[i].x, points[i].y);\n }\n\n ctx.closePath();\n ctx.moveTo(points[6].x, points[6].y);\n ctx.lineTo(points[7].x, points[7].y);\n }\n });\n }\n});\nmodule.exports = Schema;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/geom/shape/schema.js\n// module id = 102\n// module chunks = 0","module.exports = {\n Stack: require('./stack'),\n Dodge: require('./dodge')\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/geom/adjust/index.js\n// module id = 103\n// module chunks = 0","var Stack = require('@antv/adjust/lib/stack');\n\nmodule.exports = Stack;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/geom/adjust/stack.js\n// module id = 104\n// module chunks = 0","function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}\n\nvar isArray = require('@antv/util/lib/type/is-array');\n\nvar isNil = require('@antv/util/lib/type/is-nil');\n\nvar Adjust = require('./base');\n\nvar Stack =\n/*#__PURE__*/\nfunction (_Adjust) {\n _inheritsLoose(Stack, _Adjust);\n\n function Stack() {\n return _Adjust.apply(this, arguments) || this;\n }\n\n var _proto = Stack.prototype;\n\n _proto._initDefaultCfg = function _initDefaultCfg() {\n this.xField = null; // 调整对应的 x 方向对应的字段名称\n\n this.yField = null; // 调整对应的 y 方向对应的字段名称\n };\n\n _proto.processAdjust = function processAdjust(dataArray) {\n this.processStack(dataArray);\n };\n\n _proto.processStack = function processStack(dataArray) {\n var self = this;\n var xField = self.xField;\n var yField = self.yField;\n var count = dataArray.length;\n var stackCache = {\n positive: {},\n negative: {}\n }; // 层叠顺序翻转\n\n if (self.reverseOrder) {\n dataArray = dataArray.slice(0).reverse();\n }\n\n for (var i = 0; i < count; i++) {\n var data = dataArray[i];\n\n for (var j = 0, len = data.length; j < len; j++) {\n var item = data[j];\n var x = item[xField] || 0;\n var y = item[yField];\n var xkey = x.toString();\n y = isArray(y) ? y[1] : y;\n\n if (!isNil(y)) {\n var direction = y >= 0 ? 'positive' : 'negative';\n\n if (!stackCache[direction][xkey]) {\n stackCache[direction][xkey] = 0;\n }\n\n item[yField] = [stackCache[direction][xkey], y + stackCache[direction][xkey]];\n stackCache[direction][xkey] += y;\n }\n }\n }\n };\n\n return Stack;\n}(Adjust);\n\nAdjust.Stack = Stack;\nmodule.exports = Stack;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_adjust@0.1.1@@antv/adjust/lib/stack.js\n// module id = 105\n// module chunks = 0","var toString = {}.toString;\n\nvar isType = function isType(value, type) {\n return toString.call(value) === '[object ' + type + ']';\n};\n\nmodule.exports = isType;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_util@1.3.1@@antv/util/lib/type/is-type.js\n// module id = 106\n// module chunks = 0","// isFinite,\nvar isNil = function isNil(value) {\n /**\n * isNil(null) => true\n * isNil() => true\n */\n return value === null || value === undefined;\n};\n\nmodule.exports = isNil;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_util@1.3.1@@antv/util/lib/type/is-nil.js\n// module id = 107\n// module chunks = 0","var Dodge = require('@antv/adjust/lib/dodge');\n\nmodule.exports = Dodge;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/geom/adjust/dodge.js\n// module id = 108\n// module chunks = 0","function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}\n\nvar Adjust = require('./base');\n\nvar each = require('@antv/util/lib/each');\n\nvar MARGIN_RATIO = 1 / 2;\nvar DODGE_RATIO = 1 / 2;\n\nvar Dodge =\n/*#__PURE__*/\nfunction (_Adjust) {\n _inheritsLoose(Dodge, _Adjust);\n\n function Dodge() {\n return _Adjust.apply(this, arguments) || this;\n }\n\n var _proto = Dodge.prototype;\n\n _proto._initDefaultCfg = function _initDefaultCfg() {\n /**\n * 调整过程中,2个数据的间距\n * @type {Number}\n */\n this.marginRatio = MARGIN_RATIO;\n /**\n * 调整占单位宽度的比例,例如:占2个分类间距的 1/2\n * @type {Number}\n */\n\n this.dodgeRatio = DODGE_RATIO;\n this.adjustNames = ['x', 'y']; // 调整的维度,默认,x,y都做调整\n };\n\n _proto.getDodgeOffset = function getDodgeOffset(range, index, count) {\n var self = this;\n var pre = range.pre;\n var next = range.next;\n var tickLength = next - pre;\n var width = tickLength * self.dodgeRatio / count;\n var margin = self.marginRatio * width;\n var offset = 1 / 2 * (tickLength - count * width - (count - 1) * margin) + ((index + 1) * width + index * margin) - 1 / 2 * width - 1 / 2 * tickLength;\n return (pre + next) / 2 + offset;\n };\n\n _proto.processAdjust = function processAdjust(dataArray) {\n var self = this;\n var count = dataArray.length;\n var xField = self.xField;\n each(dataArray, function (data, index) {\n for (var i = 0, len = data.length; i < len; i++) {\n var obj = data[i];\n var value = obj[xField];\n var range = {\n pre: len === 1 ? value - 1 : value - 0.5,\n next: len === 1 ? value + 1 : value + 0.5\n };\n var dodgeValue = self.getDodgeOffset(range, index, count);\n obj[xField] = dodgeValue;\n }\n });\n };\n\n return Dodge;\n}(Adjust);\n\nAdjust.Dodge = Dodge;\nmodule.exports = Dodge;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_adjust@0.1.1@@antv/adjust/lib/dodge.js\n// module id = 109\n// module chunks = 0","var isObject = require('./type/is-object');\n\nvar isArray = require('./type/is-array');\n\nvar each = function each(elements, func) {\n if (!elements) {\n return;\n }\n\n var rst = void 0;\n\n if (isArray(elements)) {\n for (var i = 0, len = elements.length; i < len; i++) {\n rst = func(elements[i], i);\n\n if (rst === false) {\n break;\n }\n }\n } else if (isObject(elements)) {\n for (var k in elements) {\n if (elements.hasOwnProperty(k)) {\n rst = func(elements[k], k);\n\n if (rst === false) {\n break;\n }\n }\n }\n }\n};\n\nmodule.exports = each;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_util@1.3.1@@antv/util/lib/each.js\n// module id = 110\n// module chunks = 0","var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n} : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n};\n\nvar isObject = function isObject(value) {\n /**\n * isObject({}) => true\n * isObject([1, 2, 3]) => true\n * isObject(Function) => true\n * isObject(null) => false\n */\n var type = typeof value === 'undefined' ? 'undefined' : _typeof(value);\n return value !== null && type === 'object' || type === 'function';\n};\n\nmodule.exports = isObject;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_util@1.3.1@@antv/util/lib/type/is-object.js\n// module id = 111\n// module chunks = 0","function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}\n\nvar Base = require('./base');\n\nvar Vector2 = require('../graphic/util/vector2');\n\nvar Matrix = require('../graphic/util/matrix');\n\nvar Polar =\n/*#__PURE__*/\nfunction (_Base) {\n _inheritsLoose(Polar, _Base);\n\n function Polar() {\n return _Base.apply(this, arguments) || this;\n }\n\n var _proto = Polar.prototype;\n\n _proto._initDefaultCfg = function _initDefaultCfg() {\n this.type = 'polar';\n this.startAngle = -Math.PI / 2;\n this.endAngle = Math.PI * 3 / 2;\n this.inner = 0;\n this.innerRadius = 0; // alias\n\n this.isPolar = true;\n this.transposed = false;\n this.center = null;\n this.radius = null; // relative, 0 ~ 1\n };\n\n _proto.init = function init(start, end) {\n var self = this;\n var inner = self.inner || self.innerRadius;\n var width = Math.abs(end.x - start.x);\n var height = Math.abs(end.y - start.y);\n var maxRadius;\n var center;\n\n if (self.startAngle === -Math.PI && self.endAngle === 0) {\n maxRadius = Math.min(width / 2, height);\n center = {\n x: (start.x + end.x) / 2,\n y: start.y\n };\n } else {\n maxRadius = Math.min(width, height) / 2;\n center = {\n x: (start.x + end.x) / 2,\n y: (start.y + end.y) / 2\n };\n }\n\n var radius = self.radius;\n\n if (radius > 0 && radius <= 1) {\n maxRadius = maxRadius * radius;\n }\n\n this.x = {\n start: self.startAngle,\n end: self.endAngle\n };\n this.y = {\n start: maxRadius * inner,\n end: maxRadius\n };\n this.center = center;\n this.circleRadius = maxRadius; // the radius value in px\n };\n\n _proto.convertPoint = function convertPoint(point) {\n var self = this;\n var center = self.center;\n var transposed = self.transposed;\n var xDim = transposed ? 'y' : 'x';\n var yDim = transposed ? 'x' : 'y';\n var x = self.x;\n var y = self.y;\n var angle = x.start + (x.end - x.start) * point[xDim];\n var radius = y.start + (y.end - y.start) * point[yDim];\n return {\n x: center.x + Math.cos(angle) * radius,\n y: center.y + Math.sin(angle) * radius\n };\n };\n\n _proto.invertPoint = function invertPoint(point) {\n var self = this;\n var center = self.center,\n transposed = self.transposed,\n x = self.x,\n y = self.y;\n var xDim = transposed ? 'y' : 'x';\n var yDim = transposed ? 'x' : 'y';\n var m = [1, 0, 0, 1, 0, 0];\n Matrix.rotate(m, m, x.start);\n var startV = [1, 0];\n Vector2.transformMat2d(startV, startV, m);\n startV = [startV[0], startV[1]];\n var pointV = [point.x - center.x, point.y - center.y];\n\n if (Vector2.zero(pointV)) {\n return {\n x: 0,\n y: 0\n };\n }\n\n var theta = Vector2.angleTo(startV, pointV, x.end < x.start);\n\n if (Math.abs(theta - Math.PI * 2) < 0.001) {\n theta = 0;\n }\n\n var l = Vector2.length(pointV);\n var percentX = theta / (x.end - x.start);\n percentX = x.end - x.start > 0 ? percentX : -percentX;\n var percentY = (l - y.start) / (y.end - y.start);\n var rst = {};\n rst[xDim] = percentX;\n rst[yDim] = percentY;\n return rst;\n };\n\n return Polar;\n}(Base);\n\nBase.Polar = Polar;\nmodule.exports = Polar;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/coord/polar.js\n// module id = 112\n// module chunks = 0","function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}\n\nvar Util = require('../../util/common');\n\nvar Abstract = require('./abstract');\n\nvar Circle =\n/*#__PURE__*/\nfunction (_Abstract) {\n _inheritsLoose(Circle, _Abstract);\n\n function Circle() {\n return _Abstract.apply(this, arguments) || this;\n }\n\n var _proto = Circle.prototype;\n\n _proto._initDefaultCfg = function _initDefaultCfg() {\n _Abstract.prototype._initDefaultCfg.call(this);\n\n this.startAngle = -Math.PI / 2; // start angle,in radian\n\n this.endAngle = Math.PI * 3 / 2; // end angle, in radian\n\n this.radius = null; // radius\n\n this.center = null; // center\n };\n\n _proto.getOffsetPoint = function getOffsetPoint(value) {\n var startAngle = this.startAngle,\n endAngle = this.endAngle;\n var angle = startAngle + (endAngle - startAngle) * value;\n return this._getCirclePoint(angle);\n };\n\n _proto._getCirclePoint = function _getCirclePoint(angle, radius) {\n var self = this;\n var center = self.center;\n radius = radius || self.radius;\n return {\n x: center.x + Math.cos(angle) * radius,\n y: center.y + Math.sin(angle) * radius\n };\n };\n\n _proto.getTextAlignInfo = function getTextAlignInfo(point, offset) {\n var self = this;\n var offsetVector = self.getOffsetVector(point, offset);\n var align;\n var baseLine = 'middle';\n\n if (offsetVector[0] > 0) {\n align = 'left';\n } else if (offsetVector[0] < 0) {\n align = 'right';\n } else {\n align = 'center';\n\n if (offsetVector[1] > 0) {\n baseLine = 'top';\n } else if (offsetVector[1] < 0) {\n baseLine = 'bottom';\n }\n }\n\n return {\n textAlign: align,\n textBaseline: baseLine\n };\n };\n\n _proto.getAxisVector = function getAxisVector(point) {\n var center = this.center;\n var factor = this.offsetFactor;\n return [(point.y - center.y) * factor, (point.x - center.x) * -1 * factor];\n };\n\n _proto.drawLine = function drawLine(lineCfg) {\n var center = this.center,\n radius = this.radius,\n startAngle = this.startAngle,\n endAngle = this.endAngle;\n var container = this.getContainer(lineCfg.top);\n container.addShape('arc', {\n className: 'axis-line',\n attrs: Util.mix({\n x: center.x,\n y: center.y,\n r: radius,\n startAngle: startAngle,\n endAngle: endAngle\n }, lineCfg)\n });\n };\n\n return Circle;\n}(Abstract);\n\nAbstract.Circle = Circle;\nmodule.exports = Circle;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/component/axis/circle.js\n// module id = 113\n// module chunks = 0","var TimeCat = require('@antv/scale/lib/time-cat');\n\nmodule.exports = TimeCat;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/scale/time-cat.js\n// module id = 114\n// module chunks = 0","function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}\n/**\n * @fileOverview 时间数据作为分类类型\n * @author dxq613@gmail.com\n */\n\n\nvar Base = require('./base');\n\nvar Category = require('./category');\n\nvar fecha = require('fecha');\n\nvar catAuto = require('./auto/cat');\n\nvar TimeUtil = require('./time-util');\n\nvar each = require('@antv/util/lib/each');\n\nvar isNumber = require('@antv/util/lib/type/is-number');\n\nvar isObject = require('@antv/util/lib/type/is-object');\n\nvar isString = require('@antv/util/lib/type/is-string');\n/**\n * 度量的构造函数\n * @class Scale.TimeCategory\n */\n\n\nvar TimeCategory =\n/*#__PURE__*/\nfunction (_Category) {\n _inheritsLoose(TimeCategory, _Category);\n\n function TimeCategory() {\n return _Category.apply(this, arguments) || this;\n }\n\n var _proto = TimeCategory.prototype;\n\n _proto._initDefaultCfg = function _initDefaultCfg() {\n _Category.prototype._initDefaultCfg.call(this);\n\n this.type = 'timeCat';\n /**\n * 是否需要排序,默认进行排序\n * @type {Boolean}\n */\n\n this.sortable = true;\n this.tickCount = 5;\n /**\n * 时间格式化\n * @type {String}\n */\n\n this.mask = 'YYYY-MM-DD';\n };\n\n _proto.init = function init() {\n var self = this;\n var values = this.values; // 针对时间分类类型,会将时间统一转换为时间戳\n\n each(values, function (v, i) {\n values[i] = self._toTimeStamp(v);\n });\n\n if (this.sortable) {\n // 允许排序\n values.sort(function (v1, v2) {\n return v1 - v2;\n });\n }\n\n if (!self.ticks) {\n self.ticks = this.calculateTicks();\n }\n };\n /**\n * 计算 ticks\n * @return {array} 返回 ticks 数组\n */\n\n\n _proto.calculateTicks = function calculateTicks() {\n var self = this;\n var count = self.tickCount;\n var ticks;\n\n if (count) {\n var temp = catAuto({\n maxCount: count,\n data: self.values,\n isRounding: self.isRounding\n });\n ticks = temp.ticks;\n } else {\n ticks = self.values;\n }\n\n return ticks;\n };\n /**\n * @override\n */\n\n\n _proto.translate = function translate(value) {\n value = this._toTimeStamp(value);\n var index = this.values.indexOf(value);\n\n if (index === -1) {\n if (isNumber(value) && value < this.values.length) {\n index = value;\n } else {\n index = NaN;\n }\n }\n\n return index;\n };\n /**\n * @override\n */\n\n\n _proto.scale = function scale(value) {\n var rangeMin = this.rangeMin();\n var rangeMax = this.rangeMax();\n var index = this.translate(value);\n var percent;\n\n if (this.values.length === 1 || isNaN(index)) {\n // is index is NAN should not be set as 0\n percent = index;\n } else if (index > -1) {\n percent = index / (this.values.length - 1);\n } else {\n percent = 0;\n }\n\n return rangeMin + percent * (rangeMax - rangeMin);\n };\n /**\n * @override\n */\n\n\n _proto.getText = function getText(value) {\n var result = '';\n var index = this.translate(value);\n\n if (index > -1) {\n result = this.values[index];\n } else {\n result = value;\n }\n\n var formatter = this.formatter;\n result = parseInt(result, 10);\n result = formatter ? formatter(result) : fecha.format(result, this.mask);\n return result;\n };\n /**\n * @override\n */\n\n\n _proto.getTicks = function getTicks() {\n var self = this;\n var ticks = this.ticks;\n var rst = [];\n each(ticks, function (tick) {\n var obj;\n\n if (isObject(tick)) {\n obj = tick;\n } else {\n obj = {\n text: isString(tick) ? tick : self.getText(tick),\n value: self.scale(tick),\n tickValue: tick // 用于坐标轴上文本动画时确定前后帧的对应关系\n\n };\n }\n\n rst.push(obj);\n });\n return rst;\n }; // 将时间转换为时间戳\n\n\n _proto._toTimeStamp = function _toTimeStamp(value) {\n return TimeUtil.toTimeStamp(value);\n };\n\n return TimeCategory;\n}(Category);\n\nBase.TimeCat = TimeCategory;\nmodule.exports = TimeCategory;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_scale@0.0.9@@antv/scale/lib/time-cat.js\n// module id = 115\n// module chunks = 0","(function (main) {\n 'use strict';\n /**\n * Parse or format dates\n * @class fecha\n */\n\n var fecha = {};\n var token = /d{1,4}|M{1,4}|YY(?:YY)?|S{1,3}|Do|ZZ|([HhMsDm])\\1?|[aA]|\"[^\"]*\"|'[^']*'/g;\n var twoDigits = /\\d\\d?/;\n var threeDigits = /\\d{3}/;\n var fourDigits = /\\d{4}/;\n var word = /[0-9]*['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]+|[\\u0600-\\u06FF\\/]+(\\s*?[\\u0600-\\u06FF]+){1,2}/i;\n var literal = /\\[([^]*?)\\]/gm;\n\n var noop = function () {};\n\n function shorten(arr, sLen) {\n var newArr = [];\n\n for (var i = 0, len = arr.length; i < len; i++) {\n newArr.push(arr[i].substr(0, sLen));\n }\n\n return newArr;\n }\n\n function monthUpdate(arrName) {\n return function (d, v, i18n) {\n var index = i18n[arrName].indexOf(v.charAt(0).toUpperCase() + v.substr(1).toLowerCase());\n\n if (~index) {\n d.month = index;\n }\n };\n }\n\n function pad(val, len) {\n val = String(val);\n len = len || 2;\n\n while (val.length < len) {\n val = '0' + val;\n }\n\n return val;\n }\n\n var dayNames = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];\n var monthNames = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];\n var monthNamesShort = shorten(monthNames, 3);\n var dayNamesShort = shorten(dayNames, 3);\n fecha.i18n = {\n dayNamesShort: dayNamesShort,\n dayNames: dayNames,\n monthNamesShort: monthNamesShort,\n monthNames: monthNames,\n amPm: ['am', 'pm'],\n DoFn: function DoFn(D) {\n return D + ['th', 'st', 'nd', 'rd'][D % 10 > 3 ? 0 : (D - D % 10 !== 10) * D % 10];\n }\n };\n var formatFlags = {\n D: function (dateObj) {\n return dateObj.getDate();\n },\n DD: function (dateObj) {\n return pad(dateObj.getDate());\n },\n Do: function (dateObj, i18n) {\n return i18n.DoFn(dateObj.getDate());\n },\n d: function (dateObj) {\n return dateObj.getDay();\n },\n dd: function (dateObj) {\n return pad(dateObj.getDay());\n },\n ddd: function (dateObj, i18n) {\n return i18n.dayNamesShort[dateObj.getDay()];\n },\n dddd: function (dateObj, i18n) {\n return i18n.dayNames[dateObj.getDay()];\n },\n M: function (dateObj) {\n return dateObj.getMonth() + 1;\n },\n MM: function (dateObj) {\n return pad(dateObj.getMonth() + 1);\n },\n MMM: function (dateObj, i18n) {\n return i18n.monthNamesShort[dateObj.getMonth()];\n },\n MMMM: function (dateObj, i18n) {\n return i18n.monthNames[dateObj.getMonth()];\n },\n YY: function (dateObj) {\n return String(dateObj.getFullYear()).substr(2);\n },\n YYYY: function (dateObj) {\n return pad(dateObj.getFullYear(), 4);\n },\n h: function (dateObj) {\n return dateObj.getHours() % 12 || 12;\n },\n hh: function (dateObj) {\n return pad(dateObj.getHours() % 12 || 12);\n },\n H: function (dateObj) {\n return dateObj.getHours();\n },\n HH: function (dateObj) {\n return pad(dateObj.getHours());\n },\n m: function (dateObj) {\n return dateObj.getMinutes();\n },\n mm: function (dateObj) {\n return pad(dateObj.getMinutes());\n },\n s: function (dateObj) {\n return dateObj.getSeconds();\n },\n ss: function (dateObj) {\n return pad(dateObj.getSeconds());\n },\n S: function (dateObj) {\n return Math.round(dateObj.getMilliseconds() / 100);\n },\n SS: function (dateObj) {\n return pad(Math.round(dateObj.getMilliseconds() / 10), 2);\n },\n SSS: function (dateObj) {\n return pad(dateObj.getMilliseconds(), 3);\n },\n a: function (dateObj, i18n) {\n return dateObj.getHours() < 12 ? i18n.amPm[0] : i18n.amPm[1];\n },\n A: function (dateObj, i18n) {\n return dateObj.getHours() < 12 ? i18n.amPm[0].toUpperCase() : i18n.amPm[1].toUpperCase();\n },\n ZZ: function (dateObj) {\n var o = dateObj.getTimezoneOffset();\n return (o > 0 ? '-' : '+') + pad(Math.floor(Math.abs(o) / 60) * 100 + Math.abs(o) % 60, 4);\n }\n };\n var parseFlags = {\n D: [twoDigits, function (d, v) {\n d.day = v;\n }],\n Do: [new RegExp(twoDigits.source + word.source), function (d, v) {\n d.day = parseInt(v, 10);\n }],\n M: [twoDigits, function (d, v) {\n d.month = v - 1;\n }],\n YY: [twoDigits, function (d, v) {\n var da = new Date(),\n cent = +('' + da.getFullYear()).substr(0, 2);\n d.year = '' + (v > 68 ? cent - 1 : cent) + v;\n }],\n h: [twoDigits, function (d, v) {\n d.hour = v;\n }],\n m: [twoDigits, function (d, v) {\n d.minute = v;\n }],\n s: [twoDigits, function (d, v) {\n d.second = v;\n }],\n YYYY: [fourDigits, function (d, v) {\n d.year = v;\n }],\n S: [/\\d/, function (d, v) {\n d.millisecond = v * 100;\n }],\n SS: [/\\d{2}/, function (d, v) {\n d.millisecond = v * 10;\n }],\n SSS: [threeDigits, function (d, v) {\n d.millisecond = v;\n }],\n d: [twoDigits, noop],\n ddd: [word, noop],\n MMM: [word, monthUpdate('monthNamesShort')],\n MMMM: [word, monthUpdate('monthNames')],\n a: [word, function (d, v, i18n) {\n var val = v.toLowerCase();\n\n if (val === i18n.amPm[0]) {\n d.isPm = false;\n } else if (val === i18n.amPm[1]) {\n d.isPm = true;\n }\n }],\n ZZ: [/([\\+\\-]\\d\\d:?\\d\\d|Z)/, function (d, v) {\n if (v === 'Z') v = '+00:00';\n var parts = (v + '').match(/([\\+\\-]|\\d\\d)/gi),\n minutes;\n\n if (parts) {\n minutes = +(parts[1] * 60) + parseInt(parts[2], 10);\n d.timezoneOffset = parts[0] === '+' ? minutes : -minutes;\n }\n }]\n };\n parseFlags.dd = parseFlags.d;\n parseFlags.dddd = parseFlags.ddd;\n parseFlags.DD = parseFlags.D;\n parseFlags.mm = parseFlags.m;\n parseFlags.hh = parseFlags.H = parseFlags.HH = parseFlags.h;\n parseFlags.MM = parseFlags.M;\n parseFlags.ss = parseFlags.s;\n parseFlags.A = parseFlags.a; // Some common format strings\n\n fecha.masks = {\n default: 'ddd MMM DD YYYY HH:mm:ss',\n shortDate: 'M/D/YY',\n mediumDate: 'MMM D, YYYY',\n longDate: 'MMMM D, YYYY',\n fullDate: 'dddd, MMMM D, YYYY',\n shortTime: 'HH:mm',\n mediumTime: 'HH:mm:ss',\n longTime: 'HH:mm:ss.SSS'\n };\n /***\n * Format a date\n * @method format\n * @param {Date|number} dateObj\n * @param {string} mask Format of the date, i.e. 'mm-dd-yy' or 'shortDate'\n */\n\n fecha.format = function (dateObj, mask, i18nSettings) {\n var i18n = i18nSettings || fecha.i18n;\n\n if (typeof dateObj === 'number') {\n dateObj = new Date(dateObj);\n }\n\n if (Object.prototype.toString.call(dateObj) !== '[object Date]' || isNaN(dateObj.getTime())) {\n throw new Error('Invalid Date in fecha.format');\n }\n\n mask = fecha.masks[mask] || mask || fecha.masks['default'];\n var literals = []; // Make literals inactive by replacing them with ??\n\n mask = mask.replace(literal, function ($0, $1) {\n literals.push($1);\n return '??';\n }); // Apply formatting rules\n\n mask = mask.replace(token, function ($0) {\n return $0 in formatFlags ? formatFlags[$0](dateObj, i18n) : $0.slice(1, $0.length - 1);\n }); // Inline literal values back into the formatted value\n\n return mask.replace(/\\?\\?/g, function () {\n return literals.shift();\n });\n };\n /**\n * Parse a date string into an object, changes - into /\n * @method parse\n * @param {string} dateStr Date string\n * @param {string} format Date parse format\n * @returns {Date|boolean}\n */\n\n\n fecha.parse = function (dateStr, format, i18nSettings) {\n var i18n = i18nSettings || fecha.i18n;\n\n if (typeof format !== 'string') {\n throw new Error('Invalid format in fecha.parse');\n }\n\n format = fecha.masks[format] || format; // Avoid regular expression denial of service, fail early for really long strings\n // https://www.owasp.org/index.php/Regular_expression_Denial_of_Service_-_ReDoS\n\n if (dateStr.length > 1000) {\n return false;\n }\n\n var isValid = true;\n var dateInfo = {};\n format.replace(token, function ($0) {\n if (parseFlags[$0]) {\n var info = parseFlags[$0];\n var index = dateStr.search(info[0]);\n\n if (!~index) {\n isValid = false;\n } else {\n dateStr.replace(info[0], function (result) {\n info[1](dateInfo, result, i18n);\n dateStr = dateStr.substr(index + result.length);\n return result;\n });\n }\n }\n\n return parseFlags[$0] ? '' : $0.slice(1, $0.length - 1);\n });\n\n if (!isValid) {\n return false;\n }\n\n var today = new Date();\n\n if (dateInfo.isPm === true && dateInfo.hour != null && +dateInfo.hour !== 12) {\n dateInfo.hour = +dateInfo.hour + 12;\n } else if (dateInfo.isPm === false && +dateInfo.hour === 12) {\n dateInfo.hour = 0;\n }\n\n var date;\n\n if (dateInfo.timezoneOffset != null) {\n dateInfo.minute = +(dateInfo.minute || 0) - +dateInfo.timezoneOffset;\n date = new Date(Date.UTC(dateInfo.year || today.getFullYear(), dateInfo.month || 0, dateInfo.day || 1, dateInfo.hour || 0, dateInfo.minute || 0, dateInfo.second || 0, dateInfo.millisecond || 0));\n } else {\n date = new Date(dateInfo.year || today.getFullYear(), dateInfo.month || 0, dateInfo.day || 1, dateInfo.hour || 0, dateInfo.minute || 0, dateInfo.second || 0, dateInfo.millisecond || 0);\n }\n\n return date;\n };\n /* istanbul ignore next */\n\n\n if (typeof module !== 'undefined' && module.exports) {\n module.exports = fecha;\n } else if (typeof define === 'function' && define.amd) {\n define(function () {\n return fecha;\n });\n } else {\n main.fecha = fecha;\n }\n})(this);\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_fecha@2.3.3@fecha/fecha.js\n// module id = 116\n// module chunks = 0","function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}\n\nvar Util = require('../../util/common');\n\nvar GuideBase = require('./base');\n\nvar Arc =\n/*#__PURE__*/\nfunction (_GuideBase) {\n _inheritsLoose(Arc, _GuideBase);\n\n function Arc() {\n return _GuideBase.apply(this, arguments) || this;\n }\n\n var _proto = Arc.prototype;\n\n _proto._initDefaultCfg = function _initDefaultCfg() {\n this.type = 'arc';\n /**\n * start point\n * @type {Array | Function}\n */\n\n this.start = [];\n /**\n * end point\n * @type {Array | Function}\n */\n\n this.end = [];\n /**\n * style configuration\n * @type {Object}\n */\n\n this.style = {\n stroke: '#999',\n lineWidth: 1\n };\n };\n\n _proto.render = function render(coord, container) {\n var self = this;\n var start = self.parsePoint(coord, self.start);\n var end = self.parsePoint(coord, self.end);\n\n if (!start || !end) {\n return;\n }\n\n var coordCenter = coord.center;\n var radius = Math.sqrt((start.x - coordCenter.x) * (start.x - coordCenter.x) + (start.y - coordCenter.y) * (start.y - coordCenter.y));\n var startAngle = Math.atan2(start.y - coordCenter.y, start.x - coordCenter.x);\n var endAngle = Math.atan2(end.y - coordCenter.y, end.x - coordCenter.x);\n var shape = container.addShape('arc', {\n className: 'guide-arc',\n attrs: Util.mix({\n x: coordCenter.x,\n y: coordCenter.y,\n r: radius,\n startAngle: startAngle,\n endAngle: endAngle\n }, self.style)\n });\n self.element = shape;\n return shape;\n };\n\n return Arc;\n}(GuideBase);\n\nGuideBase.Arc = Arc;\nmodule.exports = Arc;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/component/guide/arc.js\n// module id = 117\n// module chunks = 0","function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}\n\nvar Util = require('../../util/common');\n\nvar GuideBase = require('./base');\n\nvar Line =\n/*#__PURE__*/\nfunction (_GuideBase) {\n _inheritsLoose(Line, _GuideBase);\n\n function Line() {\n return _GuideBase.apply(this, arguments) || this;\n }\n\n var _proto = Line.prototype;\n\n _proto._initDefaultCfg = function _initDefaultCfg() {\n this.type = 'line';\n this.start = [];\n this.end = [];\n this.style = {\n stroke: '#000',\n lineWidth: 1\n };\n };\n\n _proto.render = function render(coord, container) {\n var points = [];\n points[0] = this.parsePoint(coord, this.start);\n points[1] = this.parsePoint(coord, this.end);\n\n if (!points[0] || !points[1]) {\n return;\n }\n\n var shape = container.addShape('Line', {\n className: 'guide-line',\n attrs: Util.mix({\n x1: points[0].x,\n y1: points[0].y,\n x2: points[1].x,\n y2: points[1].y\n }, this.style)\n });\n this.element = shape;\n return shape;\n };\n\n return Line;\n}(GuideBase);\n\nGuideBase.Line = Line;\nmodule.exports = Line;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/component/guide/line.js\n// module id = 118\n// module chunks = 0","function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}\n\nvar Util = require('../../util/common');\n\nvar GuideBase = require('./base');\n\nvar Text =\n/*#__PURE__*/\nfunction (_GuideBase) {\n _inheritsLoose(Text, _GuideBase);\n\n function Text() {\n return _GuideBase.apply(this, arguments) || this;\n }\n\n var _proto = Text.prototype;\n\n _proto._initDefaultCfg = function _initDefaultCfg() {\n this.type = 'text';\n /**\n * the position of text\n * @type {Function | Array}\n */\n\n this.position = null;\n /**\n * the display content\n * @type {String}\n */\n\n this.content = null;\n /**\n * style configuration for text\n * @type {Object}\n */\n\n this.style = {\n fill: '#000'\n };\n /**\n * offset of horizontal direction\n * @type {Number}\n */\n\n this.offsetX = 0;\n /**\n * offset of vertical direction\n * @type {Number}\n */\n\n this.offsetY = 0;\n };\n\n _proto.render = function render(coord, container) {\n var position = this.position;\n var point = this.parsePoint(coord, position);\n\n if (!point) {\n return;\n }\n\n var content = this.content,\n style = this.style,\n offsetX = this.offsetX,\n offsetY = this.offsetY;\n\n if (offsetX) {\n point.x += offsetX;\n }\n\n if (offsetY) {\n point.y += offsetY;\n }\n\n var shape = container.addShape('text', {\n className: 'guide-text',\n attrs: Util.mix({\n x: point.x,\n y: point.y,\n text: content\n }, style)\n });\n this.element = shape;\n return shape;\n };\n\n return Text;\n}(GuideBase);\n\nGuideBase.Text = Text;\nmodule.exports = Text;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/component/guide/text.js\n// module id = 119\n// module chunks = 0","function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}\n\nvar Util = require('../../util/common');\n\nvar GuideBase = require('./base');\n\nvar Tag =\n/*#__PURE__*/\nfunction (_GuideBase) {\n _inheritsLoose(Tag, _GuideBase);\n\n function Tag() {\n return _GuideBase.apply(this, arguments) || this;\n }\n\n var _proto = Tag.prototype;\n\n _proto._initDefaultCfg = function _initDefaultCfg() {\n this.type = 'tag';\n this.position = null;\n this.content = null;\n this.direct = 'tl';\n this.autoAdjust = true;\n this.offsetX = 0;\n this.offsetY = 0;\n this.side = 4;\n this.background = {\n padding: 5,\n radius: 2,\n fill: '#1890FF'\n };\n this.textStyle = {\n fontSize: 12,\n fill: '#fff',\n textAlign: 'center',\n textBaseline: 'middle'\n };\n this.withPoint = true;\n this.pointStyle = {\n fill: '#1890FF',\n r: 3,\n lineWidth: 1,\n stroke: '#fff'\n };\n };\n\n _proto._getDirect = function _getDirect(container, point, tagWidth, tagHeight) {\n var direct = this.direct;\n var side = this.side;\n var canvas = container.get('canvas');\n var clientWidth = canvas.get('width');\n var clientHeight = canvas.get('height');\n var x = point.x,\n y = point.y;\n var vertical = direct[0];\n var horizontal = direct[1]; // adjust for vertical direction\n\n if (vertical === 't' && y - side - tagHeight < 0) {\n vertical = 'b';\n } else if (vertical === 'b' && y + side + tagHeight > clientHeight) {\n vertical = 't';\n } // adjust for horizontal direction\n\n\n var diff = vertical === 'c' ? side : 0;\n\n if (horizontal === 'l' && x - diff - tagWidth < 0) {\n horizontal = 'r';\n } else if (horizontal === 'r' && x + diff + tagWidth > clientWidth) {\n horizontal = 'l';\n } else if (horizontal === 'c') {\n if (tagWidth / 2 + x + diff > clientWidth) {\n horizontal = 'l';\n } else if (x - tagWidth / 2 - diff < 0) {\n horizontal = 'r';\n }\n }\n\n direct = vertical + horizontal;\n return direct;\n };\n\n _proto.render = function render(coord, container) {\n var position = this.parsePoint(coord, this.position);\n\n if (!position) {\n return;\n }\n\n var content = this.content,\n background = this.background,\n textStyle = this.textStyle;\n var shapes = [];\n var wrapperContainer = container.addGroup({\n className: 'guide-tag'\n });\n\n if (this.withPoint) {\n var pointShape = wrapperContainer.addShape('Circle', {\n className: 'guide-tag-point',\n attrs: Util.mix({\n x: position.x,\n y: position.y\n }, this.pointStyle)\n });\n shapes.push(pointShape);\n }\n\n var tagContainer = wrapperContainer.addGroup(); // create a text shape\n\n var tagText = tagContainer.addShape('text', {\n className: 'guide-tag-text',\n zIndex: 1,\n attrs: Util.mix({\n x: 0,\n y: 0,\n text: content\n }, textStyle)\n });\n shapes.push(tagText); // create background box\n\n var textBBox = tagText.getBBox();\n var padding = Util.parsePadding(background.padding);\n var tagWidth = textBBox.width + padding[1] + padding[3];\n var tagHeight = textBBox.height + padding[0] + padding[2];\n var yMin = textBBox.minY - padding[0];\n var xMin = textBBox.minX - padding[3];\n var tagBg = tagContainer.addShape('rect', {\n className: 'guide-tag-bg',\n zIndex: -1,\n attrs: Util.mix({\n x: xMin,\n y: yMin,\n width: tagWidth,\n height: tagHeight\n }, background)\n });\n shapes.push(tagBg);\n var direct = this.autoAdjust ? this._getDirect(container, position, tagWidth, tagHeight) : this.direct;\n var side = this.side;\n var x = position.x + this.offsetX;\n var y = position.y + this.offsetY;\n var arrowPoints;\n var radius = Util.parsePadding(background.radius);\n\n if (direct === 'tl') {\n arrowPoints = [{\n x: tagWidth + xMin - side - 1,\n y: tagHeight + yMin - 1\n }, // 这个 1 是为了防止出现白边\n {\n x: tagWidth + xMin,\n y: tagHeight + yMin - 1\n }, {\n x: tagWidth + xMin,\n y: tagHeight + side + yMin\n }];\n radius[2] = 0;\n x = x - tagWidth;\n y = y - side - tagHeight;\n } else if (direct === 'cl') {\n arrowPoints = [{\n x: tagWidth + xMin - 1,\n y: (tagHeight - side) / 2 + yMin - 1\n }, {\n x: tagWidth + xMin - 1,\n y: (tagHeight + side) / 2 + yMin + 1\n }, {\n x: tagWidth + side + xMin,\n y: tagHeight / 2 + yMin\n }];\n x = x - tagWidth - side;\n y = y - tagHeight / 2;\n } else if (direct === 'bl') {\n arrowPoints = [{\n x: tagWidth + xMin,\n y: -side + yMin\n }, {\n x: tagWidth + xMin - side - 1,\n y: yMin + 1\n }, {\n x: tagWidth + xMin,\n y: yMin + 1\n }];\n radius[1] = 0;\n x = x - tagWidth;\n y = y + side;\n } else if (direct === 'bc') {\n arrowPoints = [{\n x: tagWidth / 2 + xMin,\n y: -side + yMin\n }, {\n x: (tagWidth - side) / 2 + xMin - 1,\n y: yMin + 1\n }, {\n x: (tagWidth + side) / 2 + xMin + 1,\n y: yMin + 1\n }];\n x = x - tagWidth / 2;\n y = y + side;\n } else if (direct === 'br') {\n arrowPoints = [{\n x: xMin,\n y: yMin - side\n }, {\n x: xMin,\n y: yMin + 1\n }, {\n x: xMin + side + 1,\n y: yMin + 1\n }];\n radius[0] = 0;\n y = y + side;\n } else if (direct === 'cr') {\n arrowPoints = [{\n x: xMin - side,\n y: tagHeight / 2 + yMin\n }, {\n x: xMin + 1,\n y: (tagHeight - side) / 2 + yMin - 1\n }, {\n x: xMin + 1,\n y: (tagHeight + side) / 2 + yMin + 1\n }];\n x = x + side;\n y = y - tagHeight / 2;\n } else if (direct === 'tr') {\n arrowPoints = [{\n x: xMin,\n y: tagHeight + side + yMin\n }, {\n x: xMin,\n y: tagHeight + yMin - 1\n }, {\n x: side + xMin + 1,\n y: tagHeight + yMin - 1\n }];\n radius[3] = 0;\n y = y - tagHeight - side;\n } else if (direct === 'tc') {\n arrowPoints = [{\n x: (tagWidth - side) / 2 + xMin - 1,\n y: tagHeight + yMin - 1\n }, {\n x: (tagWidth + side) / 2 + xMin + 1,\n y: tagHeight + yMin - 1\n }, {\n x: tagWidth / 2 + xMin,\n y: tagHeight + side + yMin\n }];\n x = x - tagWidth / 2;\n y = y - tagHeight - side;\n }\n\n var sideShape = tagContainer.addShape('Polygon', {\n className: 'guide-tag-side',\n zIndex: 0,\n attrs: {\n points: arrowPoints,\n fill: background.fill\n }\n });\n shapes.push(sideShape);\n tagBg.attr('radius', radius);\n tagContainer.moveTo(x - xMin, y - yMin);\n tagContainer.sort();\n this.element = wrapperContainer;\n return shapes;\n };\n\n return Tag;\n}(GuideBase);\n\nGuideBase.Tag = Tag;\nmodule.exports = Tag;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/component/guide/tag.js\n// module id = 120\n// module chunks = 0","function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}\n\nvar Util = require('../../util/common');\n\nvar GuideBase = require('./base');\n\nvar Rect =\n/*#__PURE__*/\nfunction (_GuideBase) {\n _inheritsLoose(Rect, _GuideBase);\n\n function Rect() {\n return _GuideBase.apply(this, arguments) || this;\n }\n\n var _proto = Rect.prototype;\n\n _proto._initDefaultCfg = function _initDefaultCfg() {\n this.type = 'rect';\n this.start = [];\n this.end = [];\n this.style = {\n fill: '#CCD7EB',\n opacity: 0.4\n };\n };\n\n _proto.render = function render(coord, container) {\n var start = this.parsePoint(coord, this.start);\n var end = this.parsePoint(coord, this.end);\n\n if (!start || !end) {\n return;\n }\n\n var shape = container.addShape('rect', {\n className: 'guide-rect',\n attrs: Util.mix({\n x: Math.min(start.x, end.x),\n y: Math.min(start.y, end.y),\n width: Math.abs(end.x - start.x),\n height: Math.abs(start.y - end.y)\n }, this.style)\n });\n this.element = shape;\n return shape;\n };\n\n return Rect;\n}(GuideBase);\n\nGuideBase.Rect = Rect;\nmodule.exports = Rect;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/component/guide/rect.js\n// module id = 121\n// module chunks = 0","function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}\n\nvar Util = require('../../util/common');\n\nvar GuideBase = require('./base');\n\nvar _require = require('../../graphic/shape'),\n Rect = _require.Rect;\n\nvar RegionFilter =\n/*#__PURE__*/\nfunction (_GuideBase) {\n _inheritsLoose(RegionFilter, _GuideBase);\n\n function RegionFilter() {\n return _GuideBase.apply(this, arguments) || this;\n }\n\n var _proto = RegionFilter.prototype;\n\n _proto._initDefaultCfg = function _initDefaultCfg() {\n this.type = 'regionFilter';\n this.start = [];\n this.end = [];\n this.color = null;\n this.style = null;\n };\n\n _proto.render = function render(coord) {\n var start = this.parsePoint(coord, this.start);\n var end = this.parsePoint(coord, this.end);\n\n if (!start || !end) {\n return;\n }\n\n var clip = new Rect({\n attrs: {\n x: Math.min(start.x, end.x),\n y: Math.min(start.y, end.y),\n width: Math.abs(end.x - start.x),\n height: Math.abs(end.y - start.y)\n }\n }); // 新建剪切区域\n\n this.clip = clip;\n var chart = this.chart;\n var color = this.color;\n var style = this.style || {};\n var regionElements = [];\n var geoms = chart.get('geoms');\n geoms.map(function (geom) {\n var geomContainer = geom.get('container');\n var children = geomContainer.get('children');\n var group = geomContainer.addGroup({\n zIndex: 10,\n className: 'guide-region-filter'\n });\n children.map(function (c) {\n if (c.get('isShape')) {\n var type = c.get('type');\n var attrs = Util.mix({}, c.get('attrs'), style);\n\n if (color && (attrs.fill || attrs.fillStyle)) {\n attrs.fill = attrs.fillStyle = color;\n }\n\n if (color && (attrs.stroke || attrs.strokeStyle)) {\n attrs.stroke = attrs.strokeStyle = color;\n }\n\n var cfg = {\n attrs: attrs\n };\n\n if (type === 'custom' || type === 'Custom') {\n // custom 类型的 shape 会自定义绘制 path 的逻辑\n cfg.createPath = c.get('createPath');\n cfg.calculateBox = c.get('calculateBox');\n }\n\n group.addShape(type, cfg);\n }\n\n return c;\n });\n group.attr('clip', clip);\n geomContainer.sort();\n regionElements.push(group);\n return geom;\n });\n this.element = regionElements;\n };\n\n _proto.remove = function remove() {\n var element = this.element;\n Util.each(element, function (group) {\n group && group.remove(true);\n });\n this.clip && this.clip.remove(true);\n };\n\n return RegionFilter;\n}(GuideBase);\n\nGuideBase.RegionFilter = RegionFilter;\nmodule.exports = RegionFilter;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/component/guide/region-filter.js\n// module id = 122\n// module chunks = 0","function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}\n\nvar Util = require('../../util/common');\n\nvar GuideBase = require('./base');\n\nvar Point =\n/*#__PURE__*/\nfunction (_GuideBase) {\n _inheritsLoose(Point, _GuideBase);\n\n function Point() {\n return _GuideBase.apply(this, arguments) || this;\n }\n\n var _proto = Point.prototype;\n\n _proto._initDefaultCfg = function _initDefaultCfg() {\n this.type = 'point';\n this.position = null;\n this.offsetX = 0;\n this.offsetY = 0;\n this.style = {\n fill: '#1890FF',\n r: 3,\n lineWidth: 1,\n stroke: '#fff'\n };\n };\n\n _proto.render = function render(coord, container) {\n var position = this.parsePoint(coord, this.position);\n if (!position) return null;\n var shape = container.addShape('Circle', {\n className: 'guide-point',\n attrs: Util.mix({\n x: position.x + this.offsetX,\n y: position.y + this.offsetY\n }, this.style)\n });\n this.element = shape;\n return shape;\n };\n\n return Point;\n}(GuideBase);\n\nGuideBase.Point = Point;\nmodule.exports = Point;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/component/guide/point.js\n// module id = 123\n// module chunks = 0","var Util = require('../util/common');\n\nvar Global = require('../global');\n\nvar Tooltip = require('../component/tooltip');\n\nvar Helper = require('../util/helper'); // Register the default configuration for Tooltip\n\n\nGlobal.tooltip = Util.deepMix({\n triggerOn: ['touchstart', 'touchmove'],\n // triggerOff: 'touchend',\n alwaysShow: false,\n showTitle: false,\n showCrosshairs: false,\n crosshairsStyle: {\n stroke: 'rgba(0, 0, 0, 0.25)',\n lineWidth: 1\n },\n showTooltipMarker: true,\n background: {\n radius: 1,\n fill: 'rgba(0, 0, 0, 0.65)',\n padding: [3, 5]\n },\n titleStyle: {\n fontSize: 12,\n fill: '#fff',\n textAlign: 'start',\n textBaseline: 'top'\n },\n nameStyle: {\n fontSize: 12,\n fill: 'rgba(255, 255, 255, 0.65)',\n textAlign: 'start',\n textBaseline: 'middle'\n },\n valueStyle: {\n fontSize: 12,\n fill: '#fff',\n textAlign: 'start',\n textBaseline: 'middle'\n },\n showItemMarker: true,\n itemMarkerStyle: {\n radius: 3,\n symbol: 'circle',\n lineWidth: 1,\n stroke: '#fff'\n },\n layout: 'horizontal',\n snap: false\n}, Global.tooltip || {});\n\nfunction _getTooltipValueScale(geom) {\n var colorAttr = geom.getAttr('color');\n\n if (colorAttr) {\n var colorScale = colorAttr.getScale(colorAttr.type);\n\n if (colorScale.isLinear) {\n return colorScale;\n }\n }\n\n var xScale = geom.getXScale();\n var yScale = geom.getYScale();\n\n if (yScale) {\n return yScale;\n }\n\n return xScale;\n}\n\nfunction getTooltipName(geom, origin) {\n var name;\n var nameScale;\n\n var groupScales = geom._getGroupScales();\n\n if (groupScales.length) {\n Util.each(groupScales, function (scale) {\n nameScale = scale;\n return false;\n });\n }\n\n if (nameScale) {\n var field = nameScale.field;\n name = nameScale.getText(origin[field]);\n } else {\n var valueScale = _getTooltipValueScale(geom);\n\n name = valueScale.alias || valueScale.field;\n }\n\n return name;\n}\n\nfunction getTooltipValue(geom, origin) {\n var scale = _getTooltipValueScale(geom);\n\n return scale.getText(origin[scale.field]);\n}\n\nfunction getTooltipTitle(geom, origin) {\n var position = geom.getAttr('position');\n var field = position.getFields()[0];\n var scale = geom.get('scales')[field];\n return scale.getText(origin[scale.field]);\n}\n\nfunction _indexOfArray(items, item) {\n var rst = -1;\n Util.each(items, function (sub, index) {\n if (sub.title === item.title && sub.name === item.name && sub.value === item.value && sub.color === item.color) {\n rst = index;\n return false;\n }\n });\n return rst;\n}\n\nfunction _uniqItems(items) {\n var tmp = [];\n Util.each(items, function (item) {\n var index = _indexOfArray(tmp, item);\n\n if (index === -1) {\n tmp.push(item);\n } else {\n tmp[index] = item;\n }\n });\n return tmp;\n}\n\nfunction isEqual(arr1, arr2) {\n return JSON.stringify(arr1) === JSON.stringify(arr2);\n}\n\nvar TooltipController =\n/*#__PURE__*/\nfunction () {\n function TooltipController(cfg) {\n this.enable = true;\n this.cfg = {};\n this.tooltip = null;\n this.chart = null;\n this.timeStamp = 0;\n Util.mix(this, cfg);\n var chart = this.chart;\n this.canvasDom = chart.get('canvas').get('el');\n }\n\n var _proto = TooltipController.prototype;\n\n _proto._setCrosshairsCfg = function _setCrosshairsCfg() {\n var self = this;\n var chart = self.chart;\n var defaultCfg = Util.mix({}, Global.tooltip);\n var geoms = chart.get('geoms');\n var shapes = [];\n Util.each(geoms, function (geom) {\n var type = geom.get('type');\n\n if (shapes.indexOf(type) === -1) {\n shapes.push(type);\n }\n });\n var coordType = chart.get('coord').type;\n\n if (geoms.length && (coordType === 'cartesian' || coordType === 'rect')) {\n if (shapes.length === 1 && ['line', 'area', 'path', 'point'].indexOf(shapes[0]) !== -1) {\n Util.mix(defaultCfg, {\n showCrosshairs: true\n });\n }\n }\n\n return defaultCfg;\n };\n\n _proto._getMaxLength = function _getMaxLength(cfg) {\n if (cfg === void 0) {\n cfg = {};\n }\n\n var _cfg = cfg,\n layout = _cfg.layout,\n plotRange = _cfg.plotRange;\n return layout === 'horizontal' ? plotRange.br.x - plotRange.bl.x : plotRange.bl.y - plotRange.tr.y;\n };\n\n _proto.render = function render() {\n var self = this;\n\n if (self.tooltip) {\n return;\n }\n\n var chart = self.chart;\n var canvas = chart.get('canvas');\n var frontPlot = chart.get('frontPlot').addGroup({\n className: 'tooltipContainer',\n zIndex: 10\n });\n var backPlot = chart.get('backPlot').addGroup({\n className: 'tooltipContainer'\n });\n var plotRange = chart.get('plotRange');\n var coord = chart.get('coord');\n\n var defaultCfg = self._setCrosshairsCfg();\n\n var cfg = self.cfg;\n cfg = Util.deepMix({\n plotRange: plotRange,\n frontPlot: frontPlot,\n backPlot: backPlot,\n canvas: canvas,\n fixed: coord.transposed || coord.isPolar\n }, defaultCfg, cfg);\n cfg.maxLength = self._getMaxLength(cfg);\n this.cfg = cfg;\n var tooltip = new Tooltip(cfg);\n self.tooltip = tooltip;\n self.bindEvents();\n };\n\n _proto.clear = function clear() {\n var tooltip = this.tooltip;\n tooltip && tooltip.destroy();\n this.tooltip = null;\n this.prePoint = null;\n this._lastActive = null;\n this.unBindEvents();\n };\n\n _proto._getTooltipMarkerStyle = function _getTooltipMarkerStyle(cfg) {\n if (cfg === void 0) {\n cfg = {};\n }\n\n var _cfg2 = cfg,\n type = _cfg2.type,\n items = _cfg2.items;\n var tooltipCfg = this.cfg;\n\n if (type === 'rect') {\n var x;\n var y;\n var width;\n var height;\n var chart = this.chart;\n\n var _chart$get = chart.get('plotRange'),\n tl = _chart$get.tl,\n br = _chart$get.br;\n\n var coord = chart.get('coord');\n var firstItem = items[0];\n var lastItem = items[items.length - 1];\n var intervalWidth = firstItem.width;\n\n if (coord.transposed) {\n x = tl.x;\n y = lastItem.y - intervalWidth * 0.75;\n width = br.x - tl.x;\n height = firstItem.y - lastItem.y + 1.5 * intervalWidth;\n } else {\n x = firstItem.x - intervalWidth * 0.75;\n y = tl.y;\n width = lastItem.x - firstItem.x + 1.5 * intervalWidth;\n height = br.y - tl.y;\n }\n\n cfg.style = Util.mix({\n x: x,\n y: y,\n width: width,\n height: height,\n fill: '#CCD6EC',\n opacity: 0.3\n }, tooltipCfg.tooltipMarkerStyle);\n } else {\n cfg.style = Util.mix({\n radius: 4,\n fill: '#fff',\n lineWidth: 2\n }, tooltipCfg.tooltipMarkerStyle);\n }\n\n return cfg;\n };\n\n _proto._setTooltip = function _setTooltip(point, items, tooltipMarkerCfg) {\n if (tooltipMarkerCfg === void 0) {\n tooltipMarkerCfg = {};\n }\n\n var lastActive = this._lastActive;\n var tooltip = this.tooltip;\n var cfg = this.cfg;\n items = _uniqItems(items);\n var chart = this.chart;\n var coord = chart.get('coord');\n var yScale = chart.getYScales()[0];\n var snap = cfg.snap;\n\n if (snap === false && yScale.isLinear) {\n var invertPoint = coord.invertPoint(point);\n var plot = chart.get('plotRange');\n var tip;\n var pos;\n\n if (Helper.isPointInPlot(point, plot)) {\n if (coord.transposed) {\n tip = yScale.invert(invertPoint.x);\n pos = point.x;\n tooltip.setXTipContent(tip);\n tooltip.setXTipPosition(pos);\n tooltip.setYCrosshairPosition(pos);\n } else {\n tip = yScale.invert(invertPoint.y);\n pos = point.y;\n tooltip.setYTipContent(tip);\n tooltip.setYTipPosition(pos);\n tooltip.setXCrosshairPosition(pos);\n }\n }\n }\n\n if (cfg.onShow) {\n cfg.onShow({\n x: point.x,\n y: point.y,\n tooltip: tooltip,\n items: items,\n tooltipMarkerCfg: tooltipMarkerCfg\n });\n }\n\n if (isEqual(lastActive, items)) {\n if (snap === false && (Util.directionEnabled(cfg.crosshairsType, 'y') || cfg.showYTip)) {\n var canvas = this.chart.get('canvas');\n canvas.draw();\n }\n\n return;\n }\n\n this._lastActive = items;\n var onChange = cfg.onChange;\n\n if (onChange) {\n onChange({\n x: point.x,\n y: point.y,\n tooltip: tooltip,\n items: items,\n tooltipMarkerCfg: tooltipMarkerCfg\n });\n }\n\n var first = items[0];\n var title = first.title || first.name;\n var xTipPosX = first.x;\n\n if (items.length > 1) {\n xTipPosX = (items[0].x + items[items.length - 1].x) / 2;\n }\n\n tooltip.setContent(title, items, coord.transposed);\n tooltip.setPosition(items, point);\n\n if (coord.transposed) {\n var yTipPosY = first.y;\n\n if (items.length > 1) {\n yTipPosY = (items[0].y + items[items.length - 1].y) / 2;\n }\n\n tooltip.setYTipContent(title);\n tooltip.setYTipPosition(yTipPosY);\n tooltip.setXCrosshairPosition(yTipPosY);\n\n if (snap) {\n tooltip.setXTipContent(first.value);\n tooltip.setXTipPosition(xTipPosX);\n tooltip.setYCrosshairPosition(xTipPosX);\n }\n } else {\n tooltip.setXTipContent(title);\n tooltip.setXTipPosition(xTipPosX);\n tooltip.setYCrosshairPosition(xTipPosX);\n\n if (snap) {\n tooltip.setYTipContent(first.value);\n tooltip.setYTipPosition(first.y);\n tooltip.setXCrosshairPosition(first.y);\n }\n }\n\n var markerItems = tooltipMarkerCfg.items;\n\n if (cfg.showTooltipMarker && markerItems.length) {\n tooltipMarkerCfg = this._getTooltipMarkerStyle(tooltipMarkerCfg);\n tooltip.setMarkers(tooltipMarkerCfg);\n } else {\n tooltip.clearMarkers();\n }\n\n tooltip.show();\n };\n\n _proto.showTooltip = function showTooltip(point) {\n var self = this;\n var chart = self.chart;\n var tooltipMarkerType;\n var tooltipMarkerItems = [];\n var items = [];\n var cfg = self.cfg;\n var marker;\n\n if (cfg.showItemMarker) {\n marker = cfg.itemMarkerStyle;\n }\n\n var geoms = chart.get('geoms');\n var coord = chart.get('coord');\n Util.each(geoms, function (geom) {\n if (geom.get('visible')) {\n var type = geom.get('type');\n var records = geom.getSnapRecords(point);\n Util.each(records, function (record) {\n if (record.x && record.y) {\n var x = record.x,\n y = record.y,\n _origin = record._origin,\n color = record.color;\n var tooltipItem = {\n x: x,\n y: Util.isArray(y) ? y[1] : y,\n color: color || Global.defaultColor,\n origin: _origin,\n name: getTooltipName(geom, _origin),\n value: getTooltipValue(geom, _origin),\n title: getTooltipTitle(geom, _origin)\n };\n\n if (marker) {\n tooltipItem.marker = Util.mix({\n fill: color || Global.defaultColor\n }, marker);\n }\n\n items.push(tooltipItem);\n\n if (['line', 'area', 'path'].indexOf(type) !== -1) {\n tooltipMarkerType = 'circle';\n tooltipMarkerItems.push(tooltipItem);\n } else if (type === 'interval' && (coord.type === 'cartesian' || coord.type === 'rect')) {\n tooltipMarkerType = 'rect';\n tooltipItem.width = geom.getSize(record._origin);\n tooltipMarkerItems.push(tooltipItem);\n }\n }\n });\n }\n });\n\n if (items.length) {\n var tooltipMarkerCfg = {\n items: tooltipMarkerItems,\n type: tooltipMarkerType\n };\n\n self._setTooltip(point, items, tooltipMarkerCfg);\n } else {\n self.hideTooltip();\n }\n };\n\n _proto.hideTooltip = function hideTooltip() {\n var cfg = this.cfg;\n this._lastActive = null;\n var tooltip = this.tooltip;\n\n if (tooltip) {\n tooltip.hide();\n\n if (cfg.onHide) {\n cfg.onHide({\n tooltip: tooltip\n });\n }\n\n var canvas = this.chart.get('canvas');\n canvas.draw();\n }\n };\n\n _proto.handleShowEvent = function handleShowEvent(ev) {\n var chart = this.chart;\n if (!this.enable || chart.get('_closeTooltip')) return;\n var plot = chart.get('plotRange');\n var point = Util.createEvent(ev, chart);\n\n if (!Helper.isPointInPlot(point, plot) && !this.cfg.alwaysShow) {\n // not in chart plot\n this.hideTooltip();\n return;\n }\n\n var lastTimeStamp = this.timeStamp;\n var timeStamp = +new Date();\n\n if (timeStamp - lastTimeStamp > 16) {\n this.showTooltip(point);\n this.timeStamp = timeStamp;\n }\n };\n\n _proto.handleHideEvent = function handleHideEvent() {\n var chart = this.chart;\n if (!this.enable || chart.get('_closeTooltip')) return;\n this.hideTooltip();\n };\n\n _proto.handleDocEvent = function handleDocEvent(ev) {\n var chart = this.chart;\n if (!this.enable || chart.get('_closeTooltip')) return;\n var canvasDom = this.canvasDom;\n\n if (ev.target !== canvasDom) {\n this.hideTooltip();\n }\n };\n\n _proto._handleEvent = function _handleEvent(methodName, method, action) {\n var canvasDom = this.canvasDom;\n Util.each([].concat(methodName), function (aMethod) {\n if (action === 'bind') {\n Util.addEventListener(canvasDom, aMethod, method);\n } else {\n Util.removeEventListener(canvasDom, aMethod, method);\n }\n });\n };\n\n _proto.bindEvents = function bindEvents() {\n var cfg = this.cfg;\n var triggerOn = cfg.triggerOn,\n triggerOff = cfg.triggerOff,\n alwaysShow = cfg.alwaysShow;\n var showMethod = Util.wrapBehavior(this, 'handleShowEvent');\n var hideMethod = Util.wrapBehavior(this, 'handleHideEvent');\n triggerOn && this._handleEvent(triggerOn, showMethod, 'bind');\n triggerOff && this._handleEvent(triggerOff, hideMethod, 'bind'); // TODO: 当用户点击 canvas 外的事件时 tooltip 消失\n\n if (!alwaysShow) {\n var docMethod = Util.wrapBehavior(this, 'handleDocEvent');\n Util.isBrowser && Util.addEventListener(document, 'touchstart', docMethod);\n }\n };\n\n _proto.unBindEvents = function unBindEvents() {\n var cfg = this.cfg;\n var triggerOn = cfg.triggerOn,\n triggerOff = cfg.triggerOff,\n alwaysShow = cfg.alwaysShow;\n var showMethod = Util.getWrapBehavior(this, 'handleShowEvent');\n var hideMethod = Util.getWrapBehavior(this, 'handleHideEvent');\n triggerOn && this._handleEvent(triggerOn, showMethod, 'unBind');\n triggerOff && this._handleEvent(triggerOff, hideMethod, 'unBind');\n\n if (!alwaysShow) {\n var docMethod = Util.getWrapBehavior(this, 'handleDocEvent');\n Util.isBrowser && Util.removeEventListener(document, 'touchstart', docMethod);\n }\n };\n\n return TooltipController;\n}();\n\nmodule.exports = {\n init: function init(chart) {\n var tooltipController = new TooltipController({\n chart: chart\n });\n chart.set('tooltipController', tooltipController);\n\n chart.tooltip = function (enable, cfg) {\n if (Util.isObject(enable)) {\n cfg = enable;\n enable = true;\n }\n\n tooltipController.enable = enable;\n\n if (cfg) {\n tooltipController.cfg = cfg;\n }\n\n return this;\n };\n },\n afterGeomDraw: function afterGeomDraw(chart) {\n var tooltipController = chart.get('tooltipController');\n tooltipController.render();\n\n chart.showTooltip = function (point) {\n tooltipController.showTooltip(point);\n return this;\n };\n\n chart.hideTooltip = function () {\n tooltipController.hideTooltip();\n return this;\n };\n },\n clearInner: function clearInner(chart) {\n var tooltipController = chart.get('tooltipController');\n tooltipController.clear();\n }\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/plugin/tooltip.js\n// module id = 124\n// module chunks = 0","var Util = require('../util/common');\n\nvar Marker = require('./marker');\n\nvar Container = require('./list');\n\nvar TextBox = require('./text-box');\n\nvar GAP = 4;\n/**\n * TODOList:\n * 1. 移除 fixed 参数\n */\n\nvar Tooltip =\n/*#__PURE__*/\nfunction () {\n var _proto = Tooltip.prototype;\n\n _proto.getDefaultCfg = function getDefaultCfg() {\n return {\n /**\n * wether show the crosshairs\n * @type {Object}\n */\n showCrosshairs: false,\n\n /**\n * the style for crosshairs\n * @type {Object}\n */\n crosshairsStyle: {\n stroke: 'rgba(0, 0, 0, 0.25)',\n lineWidth: 1\n },\n\n /**\n * the type of crosshairs, optional value is 'x', 'y' or 'xy', default is 'y'\n */\n crosshairsType: 'y',\n\n /**\n * show or hide the x axis tip\n */\n showXTip: false,\n\n /**\n * show or hide the y axis tip\n */\n showYTip: false,\n xTip: null,\n xTipBackground: {\n radius: 1,\n fill: 'rgba(0, 0, 0, 0.65)',\n padding: [3, 5]\n },\n yTip: null,\n yTipBackground: {\n radius: 1,\n fill: 'rgba(0, 0, 0, 0.65)',\n padding: [3, 5]\n },\n\n /**\n * the style for tooltip container's background\n * @type {Object}\n */\n background: null,\n\n /**\n * layout, can be horizontal or vertical\n * @type {String}\n */\n layout: 'horizontal',\n offsetX: 0,\n offsetY: 0\n };\n };\n\n function Tooltip(cfg) {\n Util.deepMix(this, this.getDefaultCfg(), cfg);\n var frontPlot = this.frontPlot,\n custom = this.custom;\n\n if (!custom) {\n // custom means user do customize\n var container = new Container(Util.mix({\n parent: frontPlot,\n zIndex: 3\n }, cfg));\n this.container = container;\n var fixed = this.fixed,\n background = this.background;\n\n if (!fixed) {\n this.tooltipArrow = frontPlot.addShape('Polygon', {\n className: 'tooltip-arrow',\n visible: false,\n zIndex: 2,\n attrs: Util.mix({\n points: []\n }, background)\n });\n }\n }\n\n if (this.showXTip) {\n var xTipBackground = this.xTipBackground;\n var xTipBox = new TextBox({\n className: 'xTip',\n background: xTipBackground,\n visible: false\n });\n frontPlot.add(xTipBox.container);\n this.xTipBox = xTipBox;\n }\n\n if (this.showYTip) {\n var yTipBackground = this.yTipBackground;\n var yTipBox = new TextBox({\n className: 'yTip',\n background: yTipBackground,\n visible: false\n });\n frontPlot.add(yTipBox.container);\n this.yTipBox = yTipBox;\n }\n\n if (this.showCrosshairs) {\n this._renderCrosshairs();\n }\n\n frontPlot.sort();\n }\n\n _proto.setContent = function setContent(title, items) {\n this.title = title;\n this.items = items;\n\n if (!this.custom) {\n var container = this.container;\n container.setTitle(title);\n container.setItems(items);\n }\n };\n\n _proto.setYTipContent = function setYTipContent(val) {\n var yTip = this.yTip;\n\n if (Util.isFunction(yTip)) {\n val = yTip(val);\n } else {\n val = Util.mix({\n text: val\n }, yTip);\n }\n\n this.yTipBox && this.yTipBox.updateContent(val);\n };\n\n _proto.setYTipPosition = function setYTipPosition(pos) {\n var plotRange = this.plotRange;\n var crosshairsShapeX = this.crosshairsShapeX;\n\n if (this.showYTip) {\n var yTipBox = this.yTipBox;\n var yTipHeight = yTipBox.getHeight();\n var yTipWidth = yTipBox.getWidth();\n var posX = plotRange.tl.x - yTipWidth;\n var posY = pos - yTipHeight / 2;\n\n if (posY <= plotRange.tl.y) {\n posY = plotRange.tl.y;\n }\n\n if (posY + yTipHeight >= plotRange.br.y) {\n posY = plotRange.br.y - yTipHeight;\n }\n\n if (posX < 0) {\n posX = plotRange.tl.x;\n crosshairsShapeX && crosshairsShapeX.attr('x1', plotRange.tl.x + yTipWidth);\n }\n\n yTipBox.updatePosition(posX, posY);\n }\n };\n\n _proto.setXTipContent = function setXTipContent(val) {\n var xTip = this.xTip;\n\n if (Util.isFunction(xTip)) {\n val = xTip(val);\n } else {\n val = Util.mix({\n text: val\n }, xTip);\n }\n\n this.xTipBox && this.xTipBox.updateContent(val);\n };\n\n _proto.setXTipPosition = function setXTipPosition(pos) {\n var showXTip = this.showXTip,\n canvas = this.canvas,\n plotRange = this.plotRange,\n xTipBox = this.xTipBox,\n crosshairsShapeY = this.crosshairsShapeY;\n\n if (showXTip) {\n // const el = canvas.get('el');\n // const canvasHeight = Util.getHeight(el);\n var canvasHeight = canvas.get('height');\n var xTipWidth = xTipBox.getWidth();\n var xTipHeight = xTipBox.getHeight();\n var posX = pos - xTipWidth / 2;\n var posY = plotRange.br.y;\n\n if (posX <= plotRange.tl.x) {\n posX = plotRange.tl.x;\n }\n\n if (posX + xTipWidth >= plotRange.tr.x) {\n posX = plotRange.tr.x - xTipWidth;\n }\n\n if (canvasHeight - posY < xTipHeight) {\n posY -= xTipHeight;\n }\n\n xTipBox.updatePosition(posX, posY);\n crosshairsShapeY && crosshairsShapeY.attr('y1', posY);\n }\n };\n\n _proto.setXCrosshairPosition = function setXCrosshairPosition(pos) {\n this.crosshairsShapeX && this.crosshairsShapeX.moveTo(0, pos);\n };\n\n _proto.setYCrosshairPosition = function setYCrosshairPosition(pos) {\n this.crosshairsShapeY && this.crosshairsShapeY.moveTo(pos, 0);\n };\n\n _proto.setPosition = function setPosition(items) {\n var container = this.container,\n plotRange = this.plotRange,\n offsetX = this.offsetX,\n offsetY = this.offsetY,\n fixed = this.fixed,\n tooltipArrow = this.tooltipArrow;\n\n if (!container) {\n return;\n }\n\n var containerBBox = container.container.getBBox();\n var minX = containerBBox.minX,\n minY = containerBBox.minY,\n width = containerBBox.width,\n height = containerBBox.height;\n var tl = plotRange.tl,\n tr = plotRange.tr;\n var posX = 0;\n var posY = tl.y - height - GAP + offsetY;\n\n if (fixed) {\n var x = (tl.x + tr.x) / 2;\n posX = x - width / 2 + offsetX;\n } else {\n var _x;\n\n if (items.length > 1) {\n _x = (items[0].x + items[items.length - 1].x) / 2;\n } else {\n _x = items[0].x;\n }\n\n posX = _x - width / 2 + offsetX;\n\n if (posX < tl.x) {\n posX = tl.x;\n }\n\n if (posX + width > tr.x) {\n posX = tr.x - width;\n }\n\n if (tooltipArrow) {\n tooltipArrow.attr('points', [{\n x: _x - 3,\n y: tl.y - GAP + offsetY\n }, {\n x: _x + 3,\n y: tl.y - GAP + offsetY\n }, {\n x: _x,\n y: tl.y + offsetY\n }]);\n var backShape = container.backShape;\n var radius = Util.parsePadding(backShape.attr('radius'));\n\n if (_x === tl.x) {\n radius[3] = 0;\n tooltipArrow.attr('points', [{\n x: tl.x,\n y: tl.y + offsetY\n }, {\n x: tl.x,\n y: tl.y - GAP + offsetY\n }, {\n x: tl.x + GAP,\n y: tl.y - GAP + offsetY\n }]);\n } else if (_x === tr.x) {\n radius[2] = 0;\n tooltipArrow.attr('points', [{\n x: tr.x,\n y: tl.y + offsetY\n }, {\n x: tr.x - GAP,\n y: tl.y - GAP + offsetY\n }, {\n x: tr.x,\n y: tl.y - GAP + offsetY\n }]);\n }\n\n backShape.attr('radius', radius);\n }\n }\n\n container.moveTo(posX - minX, posY - minY);\n };\n\n _proto.setMarkers = function setMarkers(cfg) {\n if (cfg === void 0) {\n cfg = {};\n }\n\n var self = this;\n var _cfg = cfg,\n items = _cfg.items,\n style = _cfg.style,\n type = _cfg.type;\n\n var markerGroup = self._getMarkerGroup(type);\n\n if (type === 'circle') {\n for (var i = 0, length = items.length; i < length; i++) {\n var item = items[i];\n var marker = new Marker({\n className: 'tooltip-circle-marker',\n attrs: Util.mix({\n x: item.x,\n y: item.y,\n stroke: item.color\n }, style)\n });\n markerGroup.add(marker);\n }\n } else {\n markerGroup.addShape('rect', {\n className: 'tooltip-rect-marker',\n attrs: style\n });\n }\n };\n\n _proto.clearMarkers = function clearMarkers() {\n var markerGroup = this.markerGroup;\n markerGroup && markerGroup.clear();\n };\n\n _proto.show = function show() {\n var crosshairsShapeX = this.crosshairsShapeX;\n var crosshairsShapeY = this.crosshairsShapeY;\n var markerGroup = this.markerGroup;\n var container = this.container;\n var tooltipArrow = this.tooltipArrow;\n var xTipBox = this.xTipBox;\n var yTipBox = this.yTipBox;\n var canvas = this.canvas;\n crosshairsShapeX && crosshairsShapeX.show();\n crosshairsShapeY && crosshairsShapeY.show();\n markerGroup && markerGroup.show();\n container && container.show();\n tooltipArrow && tooltipArrow.show();\n xTipBox && xTipBox.show();\n yTipBox && yTipBox.show();\n canvas.draw();\n };\n\n _proto.hide = function hide() {\n var crosshairsShapeX = this.crosshairsShapeX;\n var crosshairsShapeY = this.crosshairsShapeY;\n var markerGroup = this.markerGroup;\n var container = this.container;\n var tooltipArrow = this.tooltipArrow;\n var xTipBox = this.xTipBox;\n var yTipBox = this.yTipBox;\n crosshairsShapeX && crosshairsShapeX.hide();\n crosshairsShapeY && crosshairsShapeY.hide();\n markerGroup && markerGroup.hide();\n container && container.hide();\n tooltipArrow && tooltipArrow.hide();\n xTipBox && xTipBox.hide();\n yTipBox && yTipBox.hide();\n };\n\n _proto.destroy = function destroy() {\n var crosshairsShapeX = this.crosshairsShapeX;\n var crosshairsShapeY = this.crosshairsShapeY;\n var markerGroup = this.markerGroup;\n var container = this.container;\n var tooltipArrow = this.tooltipArrow;\n var xTipBox = this.xTipBox;\n var yTipBox = this.yTipBox;\n crosshairsShapeX && crosshairsShapeX.remove(true);\n crosshairsShapeY && crosshairsShapeY.remove(true);\n markerGroup && markerGroup.remove(true);\n tooltipArrow && tooltipArrow.remove(true);\n container && container.clear();\n xTipBox && xTipBox.clear();\n yTipBox && yTipBox.clear();\n this.destroyed = true;\n };\n\n _proto._getMarkerGroup = function _getMarkerGroup(type) {\n var markerGroup = this.markerGroup;\n\n if (!markerGroup) {\n if (type === 'circle') {\n markerGroup = this.frontPlot.addGroup({\n zIndex: 1\n });\n this.frontPlot.sort();\n } else {\n markerGroup = this.backPlot.addGroup();\n }\n\n this.markerGroup = markerGroup;\n } else {\n markerGroup.clear();\n }\n\n return markerGroup;\n };\n\n _proto._renderCrosshairs = function _renderCrosshairs() {\n var crosshairsType = this.crosshairsType,\n crosshairsStyle = this.crosshairsStyle,\n frontPlot = this.frontPlot,\n plotRange = this.plotRange;\n var tl = plotRange.tl,\n br = plotRange.br;\n\n if (Util.directionEnabled(crosshairsType, 'x')) {\n this.crosshairsShapeX = frontPlot.addShape('Line', {\n className: 'tooltip-crosshairs-x',\n zIndex: 0,\n visible: false,\n attrs: Util.mix({\n x1: tl.x,\n y1: 0,\n x2: br.x,\n y2: 0\n }, crosshairsStyle)\n });\n }\n\n if (Util.directionEnabled(crosshairsType, 'y')) {\n this.crosshairsShapeY = frontPlot.addShape('Line', {\n className: 'tooltip-crosshairs-y',\n zIndex: 0,\n visible: false,\n attrs: Util.mix({\n x1: 0,\n y1: br.y,\n x2: 0,\n y2: tl.y\n }, crosshairsStyle)\n });\n }\n };\n\n return Tooltip;\n}();\n\nmodule.exports = Tooltip;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/component/tooltip.js\n// module id = 125\n// module chunks = 0","var Util = require('../util/common');\n\nvar _require = require('../graphic/index'),\n Group = _require.Group;\n\nvar TextBox =\n/*#__PURE__*/\nfunction () {\n var _proto = TextBox.prototype;\n\n _proto.getDefaultCfg = function getDefaultCfg() {\n return {\n x: 0,\n y: 0,\n content: '',\n textStyle: {\n fontSize: 12,\n fill: '#fff',\n textAlign: 'center',\n textBaseline: 'middle'\n },\n background: {\n radius: 1,\n fill: 'rgba(0, 0, 0, 0.65)',\n padding: [3, 5]\n },\n width: 0,\n height: 0,\n className: ''\n };\n };\n\n function TextBox(cfg) {\n Util.deepMix(this, this.getDefaultCfg(), cfg);\n\n this._init();\n\n var content = this.content,\n x = this.x,\n y = this.y;\n\n if (!Util.isNil(content)) {\n this.updateContent(content);\n }\n\n this.updatePosition(x, y);\n }\n\n _proto._init = function _init() {\n var content = this.content,\n textStyle = this.textStyle,\n background = this.background,\n className = this.className,\n visible = this.visible;\n var container = new Group({\n className: className,\n zIndex: 0,\n visible: visible\n });\n var text = container.addShape('Text', {\n className: className + '-text',\n zIndex: 1,\n attrs: Util.mix({\n text: content,\n x: 0,\n y: 0\n }, textStyle)\n });\n var backgroundShape = container.addShape('Rect', {\n className: className + '-bg',\n zIndex: -1,\n attrs: Util.mix({\n x: 0,\n y: 0,\n width: 0,\n height: 0\n }, background)\n });\n container.sort();\n this.container = container;\n this.textShape = text;\n this.backgroundShape = backgroundShape;\n };\n\n _proto._getBBox = function _getBBox() {\n var textShape = this.textShape;\n var background = this.background;\n var textBBox = textShape.getBBox();\n var padding = Util.parsePadding(background.padding);\n var width = textBBox.width + padding[1] + padding[3];\n var height = textBBox.height + padding[0] + padding[2];\n var x = textBBox.minX - padding[3];\n var y = textBBox.minY - padding[0];\n return {\n x: x,\n y: y,\n width: width,\n height: height\n };\n };\n\n _proto.updateContent = function updateContent(text) {\n var textShape = this.textShape,\n backgroundShape = this.backgroundShape;\n\n if (!Util.isNil(text)) {\n if (!Util.isObject(text)) {\n text = {\n text: text\n };\n }\n\n textShape.attr(text); // update box shape\n\n var _this$_getBBox = this._getBBox(),\n x = _this$_getBBox.x,\n y = _this$_getBBox.y,\n tipWidth = _this$_getBBox.width,\n tipHeight = _this$_getBBox.height;\n\n var width = this.width || tipWidth;\n var height = this.height || tipHeight;\n backgroundShape.attr({\n x: x,\n y: y,\n width: width,\n height: height\n });\n this._width = width;\n this._height = height;\n this.content = text.text;\n }\n };\n\n _proto.updatePosition = function updatePosition(x, y) {\n var container = this.container;\n\n var _this$_getBBox2 = this._getBBox(),\n xMin = _this$_getBBox2.x,\n yMin = _this$_getBBox2.y;\n\n container.moveTo(x - xMin, y - yMin);\n this.x = x - xMin;\n this.y = y - yMin;\n };\n\n _proto.getWidth = function getWidth() {\n return this._width;\n };\n\n _proto.getHeight = function getHeight() {\n return this._height;\n };\n\n _proto.show = function show() {\n this.container.show();\n };\n\n _proto.hide = function hide() {\n this.container.hide();\n };\n\n _proto.clear = function clear() {\n var container = this.container;\n container.clear();\n container.remove(true);\n this.container = null;\n this.textShape = null;\n this.backgroundShape = null;\n };\n\n return TextBox;\n}();\n\nmodule.exports = TextBox;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/component/text-box.js\n// module id = 126\n// module chunks = 0","var Util = require('../util/common');\n\nvar Guide = require('../component/guide/base');\n\nvar Global = require('../global'); // register the default configuration for Guide\n\n\nGlobal.guide = Util.deepMix({\n line: {\n style: {\n stroke: '#a3a3a3',\n lineWidth: 1\n },\n top: true\n },\n text: {\n style: {\n fill: '#787878',\n textAlign: 'center',\n textBaseline: 'middle'\n },\n offsetX: 0,\n offsetY: 0,\n top: true\n },\n rect: {\n style: {\n fill: '#fafafa'\n },\n top: false\n },\n arc: {\n style: {\n stroke: '#a3a3a3'\n },\n top: true\n },\n html: {\n offsetX: 0,\n offsetY: 0,\n alignX: 'center',\n alignY: 'middle'\n },\n tag: {\n top: true,\n offsetX: 0,\n offsetY: 0,\n side: 4,\n background: {\n padding: 5,\n radius: 2,\n fill: '#1890FF'\n },\n textStyle: {\n fontSize: 12,\n fill: '#fff',\n textAlign: 'center',\n textBaseline: 'middle'\n }\n },\n point: {\n top: true,\n offsetX: 0,\n offsetY: 0,\n style: {\n fill: '#fff',\n r: 3,\n lineWidth: 2,\n stroke: '#1890ff'\n }\n }\n}, Global.guide || {});\n\nvar GuideController =\n/*#__PURE__*/\nfunction () {\n function GuideController(cfg) {\n this.guides = [];\n this.xScale = null;\n this.yScales = null;\n this.guideShapes = [];\n Util.mix(this, cfg);\n }\n\n var _proto = GuideController.prototype;\n\n _proto._toString = function _toString(position) {\n if (Util.isFunction(position)) {\n position = position(this.xScale, this.yScales);\n }\n\n position = position.toString();\n return position;\n };\n\n _proto._getId = function _getId(shape, guide) {\n var id = guide.id;\n\n if (!id) {\n var type = guide.type;\n\n if (type === 'arc' || type === 'line' || type === 'rect') {\n id = this._toString(guide.start) + '-' + this._toString(guide.end);\n } else {\n id = this._toString(guide.position);\n }\n }\n\n return id;\n };\n\n _proto.paint = function paint(coord) {\n var self = this;\n var chart = self.chart,\n guides = self.guides,\n xScale = self.xScale,\n yScales = self.yScales;\n var guideShapes = [];\n Util.each(guides, function (guide, idx) {\n guide.xScale = xScale;\n guide.yScales = yScales;\n var container;\n\n if (guide.type === 'regionFilter') {\n // TODO: RegionFilter support animation\n guide.chart = chart;\n } else {\n container = guide.top ? self.frontPlot : self.backPlot;\n }\n\n guide.coord = coord;\n guide.container = container;\n guide.canvas = chart.get('canvas');\n var shape = guide.render(coord, container);\n\n if (shape) {\n var id = self._getId(shape, guide);\n\n [].concat(shape).forEach(function (s) {\n s._id = s.get('className') + '-' + id;\n s.set('index', idx);\n guideShapes.push(s);\n });\n }\n });\n self.guideShapes = guideShapes;\n };\n\n _proto.clear = function clear() {\n this.reset();\n this.guides = [];\n return this;\n };\n\n _proto.reset = function reset() {\n var guides = this.guides;\n Util.each(guides, function (guide) {\n guide.remove();\n });\n };\n\n _proto._createGuide = function _createGuide(type, cfg) {\n var ClassName = Util.upperFirst(type);\n var guide = new Guide[ClassName](Util.deepMix({}, Global.guide[type], cfg));\n this.guides.push(guide);\n return guide;\n };\n\n _proto.line = function line(cfg) {\n if (cfg === void 0) {\n cfg = {};\n }\n\n return this._createGuide('line', cfg);\n };\n\n _proto.text = function text(cfg) {\n if (cfg === void 0) {\n cfg = {};\n }\n\n return this._createGuide('text', cfg);\n };\n\n _proto.arc = function arc(cfg) {\n if (cfg === void 0) {\n cfg = {};\n }\n\n return this._createGuide('arc', cfg);\n };\n\n _proto.html = function html(cfg) {\n if (cfg === void 0) {\n cfg = {};\n }\n\n return this._createGuide('html', cfg);\n };\n\n _proto.rect = function rect(cfg) {\n if (cfg === void 0) {\n cfg = {};\n }\n\n return this._createGuide('rect', cfg);\n };\n\n _proto.tag = function tag(cfg) {\n if (cfg === void 0) {\n cfg = {};\n }\n\n return this._createGuide('tag', cfg);\n };\n\n _proto.point = function point(cfg) {\n if (cfg === void 0) {\n cfg = {};\n }\n\n return this._createGuide('point', cfg);\n };\n\n _proto.regionFilter = function regionFilter(cfg) {\n if (cfg === void 0) {\n cfg = {};\n }\n\n return this._createGuide('regionFilter', cfg);\n };\n\n return GuideController;\n}();\n\nmodule.exports = {\n init: function init(chart) {\n var guideController = new GuideController({\n frontPlot: chart.get('frontPlot').addGroup({\n zIndex: 20,\n className: 'guideContainer'\n }),\n backPlot: chart.get('backPlot').addGroup({\n className: 'guideContainer'\n })\n });\n chart.set('guideController', guideController);\n /**\n * 为图表添加 guide\n * @return {GuideController} 返回 guide 控制器\n */\n\n chart.guide = function () {\n return guideController;\n };\n },\n afterGeomDraw: function afterGeomDraw(chart) {\n var guideController = chart.get('guideController');\n\n if (!guideController.guides.length) {\n return;\n }\n\n var xScale = chart.getXScale();\n var yScales = chart.getYScales();\n var coord = chart.get('coord');\n guideController.xScale = xScale;\n guideController.yScales = yScales;\n guideController.chart = chart; // for regionFilter\n\n guideController.paint(coord);\n },\n clear: function clear(chart) {\n chart.get('guideController').clear();\n },\n repaint: function repaint(chart) {\n chart.get('guideController').reset();\n }\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/plugin/guide.js\n// module id = 127\n// module chunks = 0","var Util = require('../util/common');\n\nvar List = require('../component/list');\n\nvar Global = require('../global');\n\nvar LEGEND_GAP = 12;\nvar MARKER_SIZE = 3;\nvar DEFAULT_CFG = {\n itemMarginBottom: 12,\n itemGap: 10,\n showTitle: false,\n titleStyle: {\n fontSize: 12,\n fill: '#808080',\n textAlign: 'start',\n textBaseline: 'top'\n },\n nameStyle: {\n fill: '#808080',\n fontSize: 12,\n textAlign: 'start',\n textBaseline: 'middle'\n },\n valueStyle: {\n fill: '#000000',\n fontSize: 12,\n textAlign: 'start',\n textBaseline: 'middle'\n },\n unCheckStyle: {\n fill: '#bfbfbf'\n },\n itemWidth: 'auto',\n wordSpace: 6,\n selectedMode: 'multiple' // 'multiple' or 'single'\n\n}; // Register the default configuration for Legend\n\nGlobal.legend = Util.deepMix({\n common: DEFAULT_CFG,\n // common legend configuration\n right: Util.mix({\n position: 'right',\n layout: 'vertical'\n }, DEFAULT_CFG),\n left: Util.mix({\n position: 'left',\n layout: 'vertical'\n }, DEFAULT_CFG),\n top: Util.mix({\n position: 'top',\n layout: 'horizontal'\n }, DEFAULT_CFG),\n bottom: Util.mix({\n position: 'bottom',\n layout: 'horizontal'\n }, DEFAULT_CFG)\n}, Global.legend || {});\n\nfunction getPaddingByPos(pos, appendPadding) {\n var padding = 0;\n appendPadding = Util.parsePadding(appendPadding);\n\n switch (pos) {\n case 'top':\n padding = appendPadding[0];\n break;\n\n case 'right':\n padding = appendPadding[1];\n break;\n\n case 'bottom':\n padding = appendPadding[2];\n break;\n\n case 'left':\n padding = appendPadding[3];\n break;\n\n default:\n break;\n }\n\n return padding;\n}\n\nvar LegendController =\n/*#__PURE__*/\nfunction () {\n function LegendController(cfg) {\n this.legendCfg = {};\n this.enable = true;\n this.position = 'top';\n Util.mix(this, cfg);\n var chart = this.chart;\n this.canvasDom = chart.get('canvas').get('el');\n this.clear();\n }\n\n var _proto = LegendController.prototype;\n\n _proto.addLegend = function addLegend(scale, items, filterVals) {\n var self = this;\n var legendCfg = self.legendCfg;\n var field = scale.field;\n var fieldCfg = legendCfg[field];\n\n if (fieldCfg === false) {\n return null;\n }\n\n if (fieldCfg && fieldCfg.custom) {\n self.addCustomLegend(field);\n } else {\n var position = legendCfg.position || self.position;\n\n if (fieldCfg && fieldCfg.position) {\n position = fieldCfg.position;\n }\n\n if (scale.isCategory) {\n self._addCategoryLegend(scale, items, position, filterVals);\n }\n }\n };\n\n _proto.addCustomLegend = function addCustomLegend(field) {\n var self = this;\n var legendCfg = self.legendCfg;\n\n if (field && legendCfg[field]) {\n legendCfg = legendCfg[field];\n }\n\n var position = legendCfg.position || self.position;\n var legends = self.legends;\n legends[position] = legends[position] || [];\n var items = legendCfg.items;\n\n if (!items) {\n return null;\n }\n\n var container = self.container;\n Util.each(items, function (item) {\n if (!Util.isPlainObject(item.marker)) {\n item.marker = {\n symbol: item.marker || 'circle',\n fill: item.fill,\n radius: MARKER_SIZE\n };\n } else {\n item.marker.radius = item.marker.radius || MARKER_SIZE;\n }\n\n item.checked = Util.isNil(item.checked) ? true : item.checked;\n item.name = item.name || item.value;\n });\n var legend = new List(Util.deepMix({}, Global.legend[position], legendCfg, {\n maxLength: self._getMaxLength(position),\n items: items,\n parent: container\n }));\n legends[position].push(legend);\n };\n\n _proto.clear = function clear() {\n var legends = this.legends;\n Util.each(legends, function (legendItems) {\n Util.each(legendItems, function (legend) {\n legend.clear();\n });\n });\n this.legends = {};\n this.unBindEvents();\n };\n\n _proto._isFiltered = function _isFiltered(scale, values, value) {\n var rst = false;\n Util.each(values, function (val) {\n rst = rst || scale.getText(val) === scale.getText(value);\n\n if (rst) {\n return false;\n }\n });\n return rst;\n };\n\n _proto._getMaxLength = function _getMaxLength(position) {\n var chart = this.chart;\n var appendPadding = Util.parsePadding(chart.get('appendPadding'));\n return position === 'right' || position === 'left' ? chart.get('height') - (appendPadding[0] + appendPadding[2]) : chart.get('width') - (appendPadding[1] + appendPadding[3]);\n };\n\n _proto._addCategoryLegend = function _addCategoryLegend(scale, items, position, filterVals) {\n var self = this;\n var legendCfg = self.legendCfg,\n legends = self.legends,\n container = self.container,\n chart = self.chart;\n var field = scale.field;\n legends[position] = legends[position] || [];\n var symbol = 'circle';\n\n if (legendCfg[field] && legendCfg[field].marker) {\n symbol = legendCfg[field].marker;\n } else if (legendCfg.marker) {\n symbol = legendCfg.marker;\n }\n\n Util.each(items, function (item) {\n if (Util.isPlainObject(symbol)) {\n Util.mix(item.marker, symbol);\n } else {\n item.marker.symbol = symbol;\n }\n\n if (filterVals) {\n item.checked = self._isFiltered(scale, filterVals, item.dataValue);\n }\n });\n var legendItems = chart.get('legendItems');\n legendItems[field] = items;\n var lastCfg = Util.deepMix({}, Global.legend[position], legendCfg[field] || legendCfg, {\n maxLength: self._getMaxLength(position),\n items: items,\n field: field,\n filterVals: filterVals,\n parent: container\n });\n\n if (lastCfg.showTitle) {\n Util.deepMix(lastCfg, {\n title: scale.alias || scale.field\n });\n }\n\n var legend = new List(lastCfg);\n legends[position].push(legend);\n return legend;\n };\n\n _proto._alignLegend = function _alignLegend(legend, pre, position) {\n var self = this;\n var _self$plotRange = self.plotRange,\n tl = _self$plotRange.tl,\n bl = _self$plotRange.bl;\n var chart = self.chart;\n var offsetX = legend.offsetX || 0;\n var offsetY = legend.offsetY || 0;\n var chartWidth = chart.get('width');\n var chartHeight = chart.get('height');\n var appendPadding = Util.parsePadding(chart.get('appendPadding'));\n var legendHeight = legend.getHeight();\n var legendWidth = legend.getWidth();\n var x = 0;\n var y = 0;\n\n if (position === 'left' || position === 'right') {\n var verticalAlign = legend.verticalAlign || 'middle';\n var height = Math.abs(tl.y - bl.y);\n x = position === 'left' ? appendPadding[3] : chartWidth - legendWidth - appendPadding[1];\n y = (height - legendHeight) / 2 + tl.y;\n\n if (verticalAlign === 'top') {\n y = tl.y;\n } else if (verticalAlign === 'bottom') {\n y = bl.y - legendHeight;\n }\n\n if (pre) {\n y = pre.get('y') - legendHeight - LEGEND_GAP;\n }\n } else {\n var align = legend.align || 'left';\n x = appendPadding[3];\n\n if (align === 'center') {\n x = chartWidth / 2 - legendWidth / 2;\n } else if (align === 'right') {\n x = chartWidth - (legendWidth + appendPadding[1]);\n }\n\n y = position === 'top' ? appendPadding[0] + Math.abs(legend.container.getBBox().minY) : chartHeight - legendHeight;\n\n if (pre) {\n var preWidth = pre.getWidth();\n x = pre.x + preWidth + LEGEND_GAP;\n }\n }\n\n if (position === 'bottom' && offsetY > 0) {\n offsetY = 0;\n }\n\n if (position === 'right' && offsetX > 0) {\n offsetX = 0;\n }\n\n legend.moveTo(x + offsetX, y + offsetY);\n };\n\n _proto.alignLegends = function alignLegends() {\n var self = this;\n var legends = self.legends;\n Util.each(legends, function (legendItems, position) {\n Util.each(legendItems, function (legend, index) {\n var pre = legendItems[index - 1];\n\n self._alignLegend(legend, pre, position);\n });\n });\n return self;\n };\n\n _proto.handleEvent = function handleEvent(ev) {\n var self = this;\n\n function findItem(x, y) {\n var result = null;\n var legends = self.legends;\n Util.each(legends, function (legendItems) {\n Util.each(legendItems, function (legend) {\n var itemsGroup = legend.itemsGroup,\n legendHitBoxes = legend.legendHitBoxes;\n var children = itemsGroup.get('children');\n\n if (children.length) {\n var legendPosX = legend.x;\n var legendPosY = legend.y;\n Util.each(legendHitBoxes, function (box, index) {\n if (x >= box.x + legendPosX && x <= box.x + box.width + legendPosX && y >= box.y + legendPosY && y <= box.height + box.y + legendPosY) {\n // inbox\n result = {\n clickedItem: children[index],\n clickedLegend: legend\n };\n return false;\n }\n });\n }\n });\n });\n return result;\n }\n\n var chart = self.chart;\n\n var _Util$createEvent = Util.createEvent(ev, chart),\n x = _Util$createEvent.x,\n y = _Util$createEvent.y;\n\n var clicked = findItem(x, y);\n\n if (clicked && clicked.clickedLegend.clickable !== false) {\n var clickedItem = clicked.clickedItem,\n clickedLegend = clicked.clickedLegend;\n\n if (clickedLegend.onClick) {\n ev.clickedItem = clickedItem;\n clickedLegend.onClick(ev);\n } else if (!clickedLegend.custom) {\n var checked = clickedItem.get('checked');\n var value = clickedItem.get('dataValue');\n var filterVals = clickedLegend.filterVals,\n field = clickedLegend.field,\n selectedMode = clickedLegend.selectedMode;\n var isSingeSelected = selectedMode === 'single';\n\n if (isSingeSelected) {\n chart.filter(field, function (val) {\n return val === value;\n });\n } else {\n if (!checked) {\n filterVals.push(value);\n } else {\n Util.Array.remove(filterVals, value);\n }\n\n chart.filter(field, function (val) {\n return filterVals.indexOf(val) !== -1;\n });\n }\n\n chart.repaint();\n }\n }\n };\n\n _proto.bindEvents = function bindEvents() {\n var legendCfg = this.legendCfg;\n var triggerOn = legendCfg.triggerOn || 'touchstart';\n var method = Util.wrapBehavior(this, 'handleEvent');\n Util.addEventListener(this.canvasDom, triggerOn, method);\n };\n\n _proto.unBindEvents = function unBindEvents() {\n var legendCfg = this.legendCfg;\n var triggerOn = legendCfg.triggerOn || 'touchstart';\n var method = Util.getWrapBehavior(this, 'handleEvent');\n Util.removeEventListener(this.canvasDom, triggerOn, method);\n };\n\n return LegendController;\n}();\n\nmodule.exports = {\n init: function init(chart) {\n var legendController = new LegendController({\n container: chart.get('backPlot'),\n plotRange: chart.get('plotRange'),\n chart: chart\n });\n chart.set('legendController', legendController);\n\n chart.legend = function (field, cfg) {\n var legendCfg = legendController.legendCfg;\n legendController.enable = true;\n\n if (Util.isBoolean(field)) {\n legendController.enable = field;\n legendCfg = cfg || {};\n } else if (Util.isObject(field)) {\n legendCfg = field;\n } else {\n legendCfg[field] = cfg;\n }\n\n legendController.legendCfg = legendCfg;\n return this;\n };\n },\n beforeGeomDraw: function beforeGeomDraw(chart) {\n var legendController = chart.get('legendController');\n if (!legendController.enable) return null; // legend is not displayed\n\n var legendCfg = legendController.legendCfg;\n\n if (legendCfg && legendCfg.custom) {\n legendController.addCustomLegend();\n } else {\n var legendItems = chart.getLegendItems();\n var scales = chart.get('scales');\n var filters = chart.get('filters');\n Util.each(legendItems, function (items, field) {\n var scale = scales[field];\n var values = scale.values;\n var filterVals;\n\n if (filters && filters[field]) {\n filterVals = values.filter(filters[field]);\n } else {\n filterVals = values.slice(0);\n }\n\n legendController.addLegend(scale, items, filterVals);\n });\n }\n\n if (legendCfg && legendCfg.clickable !== false) {\n legendController.bindEvents();\n }\n\n var legends = legendController.legends;\n var legendRange = {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n };\n Util.each(legends, function (legendItems, position) {\n var padding = 0;\n Util.each(legendItems, function (legend) {\n var width = legend.getWidth();\n var height = legend.getHeight();\n\n if (position === 'top' || position === 'bottom') {\n padding = Math.max(padding, height);\n\n if (legend.offsetY > 0) {\n padding += legend.offsetY;\n }\n } else {\n padding = Math.max(padding, width);\n\n if (legend.offsetX > 0) {\n padding += legend.offsetX;\n }\n }\n });\n legendRange[position] = padding + getPaddingByPos(position, chart.get('appendPadding'));\n });\n chart.set('legendRange', legendRange);\n },\n afterGeomDraw: function afterGeomDraw(chart) {\n var legendController = chart.get('legendController');\n legendController.alignLegends();\n },\n clearInner: function clearInner(chart) {\n var legendController = chart.get('legendController');\n legendController.clear();\n chart.set('legendRange', null);\n }\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/plugin/legend.js\n// module id = 128\n// module chunks = 0","/**\n * Handle the detail animations\n * @author sima.zhang1990@gmail.com\n */\nvar Util = require('../util/common');\n\nvar Element = require('../graphic/element');\n\nvar Timeline = require('../graphic/animate/timeline');\n\nvar Animator = require('../graphic/animate/animator');\n\nvar Animate = require('./animate');\n\nvar ShapeAction = require('./shape-action');\n\nvar GroupAction = require('./group-action');\n\nvar Chart = require('../chart/chart');\n\nvar timeline;\n\nElement.prototype.animate = function () {\n var attrs = Util.mix({}, this.get('attrs'));\n return new Animator(this, attrs, timeline);\n};\n\nChart.prototype.animate = function (cfg) {\n this.set('animate', cfg);\n return this;\n};\n\nAnimate.Action = ShapeAction;\nAnimate.defaultCfg = {\n interval: {\n enter: function enter(coord) {\n if (coord.isPolar && coord.transposed) {\n // for pie chart\n return function (shape) {\n shape.set('zIndex', -1);\n var container = shape.get('parent');\n container.sort();\n };\n }\n\n return ShapeAction.fadeIn;\n }\n },\n area: {\n enter: function enter(coord) {\n if (coord.isPolar) return null;\n return ShapeAction.fadeIn;\n }\n },\n line: {\n enter: function enter(coord) {\n if (coord.isPolar) return null;\n return ShapeAction.fadeIn;\n }\n },\n path: {\n enter: function enter(coord) {\n if (coord.isPolar) return null;\n return ShapeAction.fadeIn;\n }\n }\n};\nvar GROUP_ANIMATION = {\n line: function line(coord) {\n if (coord.isPolar) {\n return GroupAction.groupScaleInXY;\n }\n\n return GroupAction.groupWaveIn;\n },\n area: function area(coord) {\n if (coord.isPolar) {\n return GroupAction.groupScaleInXY;\n }\n\n return GroupAction.groupWaveIn;\n },\n path: function path(coord) {\n if (coord.isPolar) {\n return GroupAction.groupScaleInXY;\n }\n\n return GroupAction.groupWaveIn;\n },\n point: function point() {\n return GroupAction.shapesScaleInXY;\n },\n interval: function interval(coord) {\n var result;\n\n if (coord.isPolar) {\n // polar coodinate\n result = GroupAction.groupScaleInXY;\n\n if (coord.transposed) {\n // pie chart\n result = GroupAction.groupWaveIn;\n }\n } else {\n result = coord.transposed ? GroupAction.groupScaleInX : GroupAction.groupScaleInY;\n }\n\n return result;\n },\n schema: function schema() {\n return GroupAction.groupWaveIn;\n }\n};\n\nfunction diff(fromAttrs, toAttrs) {\n var endState = {};\n\n for (var k in toAttrs) {\n if (Util.isNumber(fromAttrs[k]) && fromAttrs[k] !== toAttrs[k]) {\n endState[k] = toAttrs[k];\n } else if (Util.isArray(fromAttrs[k]) && JSON.stringify(fromAttrs[k]) !== JSON.stringify(toAttrs[k])) {\n endState[k] = toAttrs[k];\n }\n }\n\n return endState;\n} // Add a unique id identifier to each shape\n\n\nfunction _getShapeId(geom, dataObj, geomIdx) {\n var type = geom.get('type');\n var id = 'geom' + geomIdx + '-' + type;\n var xScale = geom.getXScale();\n var yScale = geom.getYScale();\n var xField = xScale.field || 'x';\n var yField = yScale.field || 'y';\n var yVal = dataObj[yField];\n var xVal;\n\n if (xScale.isIdentity) {\n xVal = xScale.value;\n } else {\n xVal = dataObj[xField];\n }\n\n if (type === 'interval' || type === 'schema') {\n id += '-' + xVal;\n } else if (type === 'line' || type === 'area' || type === 'path') {\n id += '-' + type;\n } else {\n id += xScale.isCategory ? '-' + xVal : '-' + xVal + '-' + yVal;\n }\n\n var groupScales = geom._getGroupScales();\n\n Util.each(groupScales, function (groupScale) {\n var field = groupScale.field;\n\n if (groupScale.type !== 'identity') {\n id += '-' + dataObj[field];\n }\n });\n return id;\n} // get geometry's shapes\n\n\nfunction getShapes(geoms, chart, coord) {\n var shapes = [];\n Util.each(geoms, function (geom, geomIdx) {\n var geomContainer = geom.get('container');\n var geomShapes = geomContainer.get('children');\n var type = geom.get('type');\n var animateCfg = Util.isNil(geom.get('animateCfg')) ? _getAnimateCfgByShapeType(type, chart) : geom.get('animateCfg');\n\n if (animateCfg !== false) {\n Util.each(geomShapes, function (shape, index) {\n if (shape.get('className') === type) {\n shape._id = _getShapeId(geom, shape.get('origin')._origin, geomIdx);\n shape.set('coord', coord);\n shape.set('animateCfg', animateCfg);\n shape.set('index', index);\n shapes.push(shape);\n }\n });\n }\n\n geom.set('shapes', geomShapes);\n });\n return shapes;\n}\n\nfunction cache(shapes) {\n var rst = {};\n\n for (var i = 0, len = shapes.length; i < len; i++) {\n var shape = shapes[i];\n if (!shape._id || shape.isClip) continue;\n var id = shape._id;\n rst[id] = {\n _id: id,\n type: shape.get('type'),\n // the type of shape\n attrs: Util.mix({}, shape._attrs.attrs),\n // the graphics attributes of shape\n className: shape.get('className'),\n geomType: shape.get('className'),\n index: shape.get('index'),\n coord: shape.get('coord'),\n animateCfg: shape.get('animateCfg')\n };\n }\n\n return rst;\n}\n\nfunction getAnimate(geomType, coord, animationType, animationName) {\n var result;\n\n if (Util.isFunction(animationName)) {\n result = animationName;\n } else if (Util.isString(animationName)) {\n result = Animate.Action[animationName];\n } else {\n result = Animate.getAnimation(geomType, coord, animationType);\n }\n\n return result;\n}\n\nfunction getAnimateCfg(geomType, animationType, animateCfg) {\n if (animateCfg === false || Util.isObject(animateCfg) && animateCfg[animationType] === false) {\n return false;\n }\n\n var defaultCfg = Animate.getAnimateCfg(geomType, animationType);\n\n if (animateCfg && animateCfg[animationType]) {\n return Util.deepMix({}, defaultCfg, animateCfg[animationType]);\n }\n\n return defaultCfg;\n}\n\nfunction addAnimate(cache, shapes, canvas) {\n var animate;\n var animateCfg; // the order of animation: leave -> update -> enter\n\n var updateShapes = [];\n var newShapes = [];\n Util.each(shapes, function (shape) {\n var result = cache[shape._id];\n\n if (!result) {\n newShapes.push(shape);\n } else {\n shape.set('cacheShape', result);\n updateShapes.push(shape);\n delete cache[shape._id];\n }\n }); // first do the leave animation\n\n Util.each(cache, function (deletedShape) {\n var className = deletedShape.className,\n coord = deletedShape.coord,\n _id = deletedShape._id,\n attrs = deletedShape.attrs,\n index = deletedShape.index,\n type = deletedShape.type;\n animateCfg = getAnimateCfg(className, 'leave', deletedShape.animateCfg);\n if (animateCfg === false) return true;\n animate = getAnimate(className, coord, 'leave', animateCfg.animation);\n\n if (Util.isFunction(animate)) {\n var tempShape = canvas.addShape(type, {\n attrs: attrs,\n index: index,\n canvas: canvas,\n className: className\n });\n tempShape._id = _id;\n animate(tempShape, animateCfg, coord);\n }\n }); // then do the update animation\n\n Util.each(updateShapes, function (updateShape) {\n var className = updateShape.get('className');\n animateCfg = getAnimateCfg(className, 'update', updateShape.get('animateCfg'));\n if (animateCfg === false) return true;\n var coord = updateShape.get('coord');\n var cacheAttrs = updateShape.get('cacheShape').attrs;\n var endState = diff(cacheAttrs, updateShape._attrs.attrs); // 判断如果属性相同的话就不进行变换\n\n if (Object.keys(endState).length) {\n animate = getAnimate(className, coord, 'update', animateCfg.animation);\n\n if (Util.isFunction(animate)) {\n animate(updateShape, animateCfg, coord);\n } else {\n updateShape.attr(cacheAttrs);\n updateShape.animate().to({\n attrs: endState,\n duration: animateCfg.duration,\n easing: animateCfg.easing,\n delay: animateCfg.delay\n }).onEnd(function () {\n updateShape.set('cacheShape', null);\n });\n }\n }\n }); // last, enter animation\n\n Util.each(newShapes, function (newShape) {\n // 新图形元素的进场元素\n var className = newShape.get('className');\n var coord = newShape.get('coord');\n animateCfg = getAnimateCfg(className, 'enter', newShape.get('animateCfg'));\n if (animateCfg === false) return true;\n animate = getAnimate(className, coord, 'enter', animateCfg.animation);\n\n if (Util.isFunction(animate)) {\n if (className === 'interval' && coord.isPolar && coord.transposed) {\n var index = newShape.get('index');\n var lastShape = updateShapes[index - 1];\n animate(newShape, animateCfg, lastShape);\n } else {\n animate(newShape, animateCfg, coord);\n }\n }\n });\n}\n\nfunction _getAnimateCfgByShapeType(type, chart) {\n if (!type) {\n return null;\n }\n\n var animateCfg = chart.get('animate');\n\n if (type.indexOf('guide-tag') > -1) {\n type = 'guide-tag';\n }\n\n if (Util.isObject(animateCfg)) {\n return animateCfg[type];\n }\n\n if (animateCfg === false) {\n return false;\n }\n\n return null;\n}\n\nmodule.exports = {\n afterCanvasInit: function afterCanvasInit()\n /* chart */\n {\n timeline = new Timeline();\n timeline.play();\n },\n beforeCanvasDraw: function beforeCanvasDraw(chart) {\n if (chart.get('animate') === false) {\n return;\n }\n\n var isUpdate = chart.get('isUpdate');\n var canvas = chart.get('canvas');\n var coord = chart.get('coord');\n var geoms = chart.get('geoms');\n var caches = canvas.get('caches') || [];\n\n if (caches.length === 0) {\n isUpdate = false;\n }\n\n var cacheShapes = getShapes(geoms, chart, coord);\n\n var _chart$get = chart.get('axisController'),\n frontPlot = _chart$get.frontPlot,\n backPlot = _chart$get.backPlot;\n\n var axisShapes = frontPlot.get('children').concat(backPlot.get('children'));\n var guideShapes = [];\n\n if (chart.get('guideController')) {\n guideShapes = chart.get('guideController').guideShapes;\n }\n\n var componentShapes = [];\n axisShapes.concat(guideShapes).forEach(function (s) {\n var className = s.get('className');\n\n var animateCfg = _getAnimateCfgByShapeType(className, chart);\n\n s.set('coord', coord);\n s.set('animateCfg', animateCfg);\n componentShapes.push(s);\n cacheShapes.push(s);\n });\n canvas.set('caches', cache(cacheShapes));\n\n if (isUpdate) {\n addAnimate(caches, cacheShapes, canvas);\n } else {\n // do the appear animation\n var animateCfg;\n var animate;\n Util.each(geoms, function (geom) {\n var type = geom.get('type');\n var geomCfg = Util.isNil(geom.get('animateCfg')) ? _getAnimateCfgByShapeType(type, chart) : geom.get('animateCfg');\n\n if (geomCfg !== false) {\n animateCfg = getAnimateCfg(type, 'appear', geomCfg);\n animate = getAnimate(type, coord, 'appear', animateCfg.animation);\n\n if (Util.isFunction(animate)) {\n var shapes = geom.get('shapes');\n Util.each(shapes, function (shape) {\n animate(shape, animateCfg, coord);\n });\n } else if (GROUP_ANIMATION[type]) {\n // do the default animation\n animate = GroupAction[animateCfg.animation] || GROUP_ANIMATION[type](coord);\n var yScale = geom.getYScale();\n var zeroY = coord.convertPoint({\n x: 0,\n y: yScale.scale(geom.getYMinValue())\n });\n var container = geom.get('container');\n animate && animate(container, animateCfg, coord, zeroY);\n }\n }\n }); // do the animation of components\n\n Util.each(componentShapes, function (shape) {\n var animateCfg = shape.get('animateCfg');\n var className = shape.get('className');\n\n if (animateCfg && animateCfg.appear) {\n // if user configure\n var defaultCfg = Animate.getAnimateCfg(className, 'appear');\n var appearCfg = Util.deepMix({}, defaultCfg, animateCfg.appear);\n\n var _animate = getAnimate(className, coord, 'appear', appearCfg.animation);\n\n if (Util.isFunction(_animate)) {\n _animate(shape, appearCfg, coord);\n }\n }\n });\n }\n },\n afterCanvasDestroyed: function afterCanvasDestroyed()\n /* chart */\n {\n timeline.stop();\n }\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/animation/detail.js\n// module id = 129\n// module chunks = 0","var _require = require('../util/requestAnimationFrame'),\n requestAnimationFrame = _require.requestAnimationFrame;\n\nvar clock = typeof performance === 'object' && performance.now ? performance : Date;\n\nvar Timeline =\n/*#__PURE__*/\nfunction () {\n function Timeline() {\n this.anims = [];\n this.time = null;\n this.playing = false;\n this.canvas = [];\n }\n\n var _proto = Timeline.prototype;\n\n _proto.play = function play() {\n var self = this;\n self.time = clock.now();\n self.playing = true;\n\n function step() {\n if (self.playing) {\n requestAnimationFrame(step);\n self.update();\n }\n }\n\n requestAnimationFrame(step);\n };\n\n _proto.stop = function stop() {\n this.playing = false;\n this.time = null;\n this.canvas = [];\n };\n\n _proto.update = function update() {\n var currentTime = clock.now();\n this.canvas = [];\n\n for (var i = 0; i < this.anims.length; i++) {\n var propertyAnim = this.anims[i];\n\n if (currentTime < propertyAnim.startTime || propertyAnim.hasEnded) {\n continue;\n }\n\n var shape = propertyAnim.shape; // shape\n\n if (shape.get('destroyed')) {\n this.anims.splice(i, 1);\n i--;\n continue;\n }\n\n var startState = propertyAnim.startState,\n endState = propertyAnim.endState,\n interpolate = propertyAnim.interpolate,\n duration = propertyAnim.duration;\n\n if (currentTime >= propertyAnim.startTime && !propertyAnim.hasStarted) {\n propertyAnim.hasStarted = true;\n\n if (propertyAnim.onStart) {\n propertyAnim.onStart();\n }\n }\n\n var t = (currentTime - propertyAnim.startTime) / duration;\n t = Math.max(0, Math.min(t, 1));\n t = propertyAnim.easing(t);\n\n if (propertyAnim.onFrame) {\n propertyAnim.onFrame(t);\n } else {\n for (var key in interpolate) {\n var diff = interpolate[key];\n var value = diff(t);\n var newValue = void 0;\n\n if (key === 'points') {\n newValue = [];\n var aLen = Math.max(startState.points.length, endState.points.length);\n\n for (var j = 0; j < aLen; j += 2) {\n newValue.push({\n x: value[j],\n y: value[j + 1]\n });\n }\n } else {\n newValue = value;\n }\n\n shape._attrs.attrs[key] = newValue;\n shape._attrs.bbox = null; // should clear calculated bbox\n }\n }\n\n var canvas = shape.get('canvas');\n\n if (this.canvas.indexOf(canvas) === -1) {\n this.canvas.push(canvas);\n }\n\n if (propertyAnim.onUpdate) {\n propertyAnim.onUpdate(t);\n }\n\n if (currentTime >= propertyAnim.endTime && !propertyAnim.hasEnded) {\n propertyAnim.hasEnded = true;\n\n if (propertyAnim.onEnd) {\n propertyAnim.onEnd();\n }\n }\n\n if (t === 1) {\n // end\n this.anims.splice(i, 1);\n i--;\n }\n }\n\n this.canvas.map(function (c) {\n c.draw();\n return c;\n });\n this.time = clock.now();\n };\n\n return Timeline;\n}();\n\nmodule.exports = Timeline;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/graphic/animate/timeline.js\n// module id = 130\n// module chunks = 0","var Easing = require('./easing');\n\nfunction plainArray(arr) {\n var result = [];\n\n for (var i = 0, len = arr.length; i < len; i++) {\n if (arr[i]) {\n result.push(arr[i].x);\n result.push(arr[i].y);\n }\n }\n\n return result;\n}\n\nfunction interpolateNumber(a, b) {\n a = +a;\n b -= a;\n return function (t) {\n return a + b * t;\n };\n}\n\nfunction interpolateArray(a, b) {\n var nb = b ? b.length : 0;\n var na = a ? Math.min(nb, a.length) : 0;\n var x = new Array(na);\n var c = new Array(nb);\n var i;\n\n for (i = 0; i < na; ++i) {\n x[i] = interpolateNumber(a[i], b[i]);\n }\n\n for (; i < nb; ++i) {\n c[i] = b[i];\n }\n\n return function (t) {\n for (i = 0; i < na; ++i) {\n c[i] = x[i](t);\n }\n\n return c;\n };\n}\n\nvar Animator =\n/*#__PURE__*/\nfunction () {\n function Animator(shape, source, timeline) {\n this.hasStarted = false;\n this.hasEnded = false;\n this.shape = shape;\n this.source = source;\n this.timeline = timeline;\n this.animate = null;\n } // delay, attrs, duration, easing\n\n\n var _proto = Animator.prototype;\n\n _proto.to = function to(cfg) {\n if (cfg === void 0) {\n cfg = {};\n }\n\n var delay = cfg.delay || 0;\n var attrs = cfg.attrs || {};\n var duration = cfg.duration || 1000;\n var easing; // 缓动函数\n\n if (typeof cfg.easing === 'function') {\n easing = cfg.easing;\n } else {\n easing = Easing[cfg.easing] || Easing.linear;\n }\n\n var animInfo = {\n shape: this.shape,\n startTime: this.timeline.time + delay,\n duration: duration,\n easing: easing\n };\n var interpolate = {}; // 差值函数\n\n for (var attrName in attrs) {\n var startValue = this.source[attrName];\n var endValue = attrs[attrName];\n\n if (attrName === 'points') {\n startValue = plainArray(startValue);\n endValue = plainArray(endValue);\n interpolate.points = interpolateArray(startValue, endValue);\n this.source.points = startValue;\n attrs.points = endValue;\n } else if (attrName === 'matrix') {\n interpolate.matrix = interpolateArray(startValue, endValue);\n } else {\n interpolate[attrName] = interpolateNumber(startValue, endValue);\n }\n }\n\n animInfo.interpolate = interpolate;\n animInfo.startState = this.source;\n animInfo.endState = attrs;\n animInfo.endTime = animInfo.startTime + duration;\n this.timeline.anims.push(animInfo);\n this.animate = animInfo;\n return this;\n };\n\n _proto.onFrame = function onFrame(callback) {\n // 自定义每一帧动画的动作\n if (this.animate) {\n this.animate.onFrame = function (frame) {\n callback(frame);\n };\n }\n\n return this;\n };\n\n _proto.onStart = function onStart(callback) {\n if (this.animate) {\n this.animate.onStart = function () {\n callback();\n };\n }\n\n return this;\n };\n\n _proto.onUpdate = function onUpdate(callback) {\n if (this.animate) {\n this.animate.onUpdate = function (frame) {\n callback(frame);\n };\n }\n\n return this;\n };\n\n _proto.onEnd = function onEnd(callback) {\n if (this.animate) {\n this.animate.onEnd = function () {\n callback();\n };\n }\n\n return this;\n };\n\n return Animator;\n}();\n\nmodule.exports = Animator;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/graphic/animate/animator.js\n// module id = 131\n// module chunks = 0","var Easing = {\n linear: function linear(k) {\n return k;\n },\n quadraticIn: function quadraticIn(k) {\n return k * k;\n },\n quadraticOut: function quadraticOut(k) {\n return k * (2 - k);\n },\n quadraticInOut: function quadraticInOut(k) {\n if ((k *= 2) < 1) {\n return 0.5 * k * k;\n }\n\n return -0.5 * (--k * (k - 2) - 1);\n },\n cubicIn: function cubicIn(k) {\n return k * k * k;\n },\n cubicOut: function cubicOut(k) {\n return --k * k * k + 1;\n },\n cubicInOut: function cubicInOut(k) {\n if ((k *= 2) < 1) {\n return 0.5 * k * k * k;\n }\n\n return 0.5 * ((k -= 2) * k * k + 2);\n },\n elasticIn: function elasticIn(k) {\n var s;\n var a = 0.1;\n var p = 0.4;\n if (k === 0) return 0;\n if (k === 1) return 1;\n\n if (!p) {\n p = 0.3;\n }\n\n if (!a || a < 1) {\n a = 1;\n s = p / 4;\n } else {\n s = p / (2 * Math.PI) * Math.asin(1 / a);\n }\n\n return -(a * Math.pow(2, 10 * (k -= 1)) * Math.sin((k - s) * (2 * Math.PI) / p));\n },\n elasticOut: function elasticOut(k) {\n var s;\n var a = 0.1;\n var p = 0.4;\n if (k === 0) return 0;\n if (k === 1) return 1;\n\n if (!p) {\n p = 0.3;\n }\n\n if (!a || a < 1) {\n a = 1;\n s = p / 4;\n } else {\n s = p / (2 * Math.PI) * Math.asin(1 / a);\n }\n\n return a * Math.pow(2, -10 * k) * Math.sin((k - s) * (2 * Math.PI) / p) + 1;\n },\n elasticInOut: function elasticInOut(k) {\n var s;\n var a = 0.1;\n var p = 0.4;\n if (k === 0) return 0;\n if (k === 1) return 1;\n\n if (!p) {\n p = 0.3;\n }\n\n if (!a || a < 1) {\n a = 1;\n s = p / 4;\n } else {\n s = p / (2 * Math.PI) * Math.asin(1 / a);\n }\n\n if ((k *= 2) < 1) {\n return -0.5 * (a * Math.pow(2, 10 * (k -= 1)) * Math.sin((k - s) * (2 * Math.PI) / p));\n }\n\n return a * Math.pow(2, -10 * (k -= 1)) * Math.sin((k - s) * (2 * Math.PI) / p) * 0.5 + 1;\n },\n backIn: function backIn(k) {\n var s = 1.70158;\n return k * k * ((s + 1) * k - s);\n },\n backOut: function backOut(k) {\n var s = 1.70158;\n return (k = k - 1) * k * ((s + 1) * k + s) + 1;\n },\n backInOut: function backInOut(k) {\n var s = 1.70158 * 1.525;\n\n if ((k *= 2) < 1) {\n return 0.5 * (k * k * ((s + 1) * k - s));\n }\n\n return 0.5 * ((k -= 2) * k * ((s + 1) * k + s) + 2);\n },\n bounceIn: function bounceIn(k) {\n return 1 - Easing.bounceOut(1 - k);\n },\n bounceOut: function bounceOut(k) {\n if ((k /= 1) < 1 / 2.75) {\n return 7.5625 * k * k;\n } else if (k < 2 / 2.75) {\n return 7.5625 * (k -= 1.5 / 2.75) * k + 0.75;\n } else if (k < 2.5 / 2.75) {\n return 7.5625 * (k -= 2.25 / 2.75) * k + 0.9375;\n }\n\n return 7.5625 * (k -= 2.625 / 2.75) * k + 0.984375;\n },\n bounceInOut: function bounceInOut(k) {\n if (k < 0.5) {\n return Easing.bounceIn(k * 2) * 0.5;\n }\n\n return Easing.bounceOut(k * 2 - 1) * 0.5 + 0.5;\n }\n};\nmodule.exports = Easing;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/graphic/animate/easing.js\n// module id = 132\n// module chunks = 0","/**\n * Animation functions for shape\n * @author sima.zhang1990@gmail.com\n */\nvar Util = require('../util/common');\n\nvar Helpers = require('./util');\n/*\nfunction waveIn(shape, animateCfg, coord) {\n const clip = Helpers.getClip(coord);\n clip.set('canvas', shape.get('canvas'));\n shape.attr('clip', clip);\n const onEnd = function() {\n shape.attr('clip', null);\n clip.remove(true);\n };\n Helpers.doAnimation(clip, clip.endState, animateCfg, onEnd);\n}\n\nfunction scaleInX(shape, animateCfg) {\n const box = shape.getBBox();\n const points = shape.get('origin').points;\n let x;\n const y = (box.minY + box.maxY) / 2;\n\n if (points[0].y - points[1].y > 0) { // 当顶点在零点之下\n x = box.maxX;\n } else {\n x = box.minX;\n }\n const scaledMatrix = Helpers.getScaledMatrix(shape, [ x, y ], 'x');\n Helpers.doAnimation(shape, { matrix: scaledMatrix }, animateCfg);\n}\n\nfunction scaleInY(shape, animateCfg) {\n const box = shape.getBBox();\n const points = shape.get('origin').points;\n const x = (box.minX + box.maxX) / 2;\n let y;\n\n if (points[0].y - points[1].y <= 0) { // 当顶点在零点之下\n y = box.maxY;\n } else {\n y = box.minY;\n }\n const scaledMatrix = Helpers.getScaledMatrix(shape, [ x, y ], 'x');\n Helpers.doAnimation(shape, { matrix: scaledMatrix }, animateCfg);\n}\n*/\n\n\nfunction fadeIn(shape, animateCfg) {\n var fillOpacity = Util.isNil(shape.attr('fillOpacity')) ? 1 : shape.attr('fillOpacity');\n var strokeOpacity = Util.isNil(shape.attr('strokeOpacity')) ? 1 : shape.attr('strokeOpacity');\n shape.attr('fillOpacity', 0);\n shape.attr('strokeOpacity', 0);\n var endState = {\n fillOpacity: fillOpacity,\n strokeOpacity: strokeOpacity\n };\n Helpers.doAnimation(shape, endState, animateCfg);\n}\n\nmodule.exports = {\n // waveIn,\n // scaleInX,\n // scaleInY,\n fadeIn: fadeIn\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/animation/shape-action.js\n// module id = 133\n// module chunks = 0","/**\n * Group animate functions\n * @author sima.zhang1990@gmail.com\n */\nvar Util = require('./util');\n\nvar Helper = require('../util/helper');\n\nvar _require = require('../graphic/index'),\n Shape = _require.Shape;\n\nfunction _groupScaleIn(container, animateCfg, coord, zeroY, type) {\n var _Util$getCoordInfo = Util.getCoordInfo(coord),\n start = _Util$getCoordInfo.start,\n end = _Util$getCoordInfo.end,\n width = _Util$getCoordInfo.width,\n height = _Util$getCoordInfo.height;\n\n var x;\n var y;\n var clip = new Shape.Rect({\n attrs: {\n x: start.x,\n y: end.y,\n width: width,\n height: height\n }\n });\n\n if (type === 'y') {\n x = start.x + width / 2;\n y = zeroY.y < start.y ? zeroY.y : start.y;\n } else if (type === 'x') {\n x = zeroY.x > start.x ? zeroY.x : start.x;\n y = start.y + height / 2;\n } else if (type === 'xy') {\n if (coord.isPolar) {\n x = coord.center.x;\n y = coord.center.y;\n } else {\n x = (start.x + end.x) / 2;\n y = (start.y + end.y) / 2;\n }\n }\n\n var endMatrix = Util.getScaledMatrix(clip, [x, y], type);\n clip.isClip = true;\n clip.endState = {\n matrix: endMatrix\n };\n clip.set('canvas', container.get('canvas'));\n container.attr('clip', clip);\n\n var onEnd = function onEnd() {\n container.attr('clip', null);\n clip.remove(true);\n };\n\n Util.doAnimation(clip, clip.endState, animateCfg, onEnd);\n}\n\nfunction _shapeScale(container, animateCfg, type) {\n var shapes = container.get('children');\n var x;\n var y;\n var endMatrix;\n\n for (var i = 0, len = shapes.length; i < len; i++) {\n var shape = shapes[i];\n var box = shape.getBBox();\n x = (box.minX + box.maxX) / 2;\n y = (box.minY + box.maxY) / 2;\n endMatrix = Util.getScaledMatrix(shape, [x, y], type);\n Util.doAnimation(shape, {\n matrix: endMatrix\n }, animateCfg);\n }\n}\n\nfunction groupScaleInX(container, animateCfg, coord, zeroY) {\n _groupScaleIn(container, animateCfg, coord, zeroY, 'x');\n}\n\nfunction groupScaleInY(container, animateCfg, coord, zeroY) {\n _groupScaleIn(container, animateCfg, coord, zeroY, 'y');\n}\n\nfunction groupScaleInXY(container, animateCfg, coord, zeroY) {\n _groupScaleIn(container, animateCfg, coord, zeroY, 'xy');\n}\n\nfunction shapesScaleInX(container, animateCfg) {\n _shapeScale(container, animateCfg, 'x');\n}\n\nfunction shapesScaleInY(container, animateCfg) {\n _shapeScale(container, animateCfg, 'y');\n}\n\nfunction shapesScaleInXY(container, animateCfg) {\n _shapeScale(container, animateCfg, 'xy');\n}\n\nfunction groupWaveIn(container, animateCfg, coord) {\n var clip = Helper.getClip(coord);\n clip.set('canvas', container.get('canvas'));\n container.attr('clip', clip);\n\n var onEnd = function onEnd() {\n container.attr('clip', null);\n clip.remove(true);\n };\n\n var endState = {};\n\n if (coord.isPolar) {\n var startAngle = coord.startAngle,\n endAngle = coord.endAngle;\n endState.endAngle = endAngle;\n clip.attr('endAngle', startAngle);\n } else {\n var start = coord.start,\n end = coord.end;\n var width = Math.abs(start.x - end.x);\n var height = Math.abs(start.y - end.y);\n\n if (coord.isTransposed) {\n clip.attr('height', 0);\n endState.height = height;\n } else {\n clip.attr('width', 0);\n endState.width = width;\n }\n }\n\n Util.doAnimation(clip, endState, animateCfg, onEnd);\n}\n\nmodule.exports = {\n groupWaveIn: groupWaveIn,\n groupScaleInX: groupScaleInX,\n groupScaleInY: groupScaleInY,\n groupScaleInXY: groupScaleInXY,\n shapesScaleInX: shapesScaleInX,\n shapesScaleInY: shapesScaleInY,\n shapesScaleInXY: shapesScaleInXY\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/animation/group-action.js\n// module id = 134\n// module chunks = 0","var Helper = require('../interaction/helper');\n\nvar Util = require('../util/common');\n\nvar DEFAULT_CFG = {\n mode: 'x',\n xStyle: {\n backgroundColor: 'rgba(202, 215, 239, .2)',\n fillerColor: 'rgba(202, 215, 239, .5)',\n size: 4,\n lineCap: 'round',\n offsetX: 0,\n offsetY: 8\n },\n yStyle: {\n backgroundColor: 'rgba(202, 215, 239, .2)',\n fillerColor: 'rgba(202, 215, 239, .5)',\n size: 4,\n lineCap: 'round',\n offsetX: 8,\n offsetY: 0\n }\n};\nmodule.exports = {\n init: function init(chart) {\n chart.set('_limitRange', {});\n\n chart.scrollBar = function (cfg) {\n if (cfg === true) {\n cfg = DEFAULT_CFG;\n } else if (Util.isObject(cfg)) {\n cfg = Util.deepMix({}, DEFAULT_CFG, cfg);\n }\n\n this.set('_scrollBarCfg', cfg);\n };\n },\n clear: function clear(chart) {\n chart.set('_limitRange', {});\n },\n changeData: function changeData(chart) {\n chart.set('_limitRange', {});\n },\n clearInner: function clearInner(chart) {\n var hBar = chart.get('_horizontalBar');\n var vBar = chart.get('_verticalBar');\n hBar && hBar.remove(true);\n vBar && vBar.remove(true);\n chart.set('_horizontalBar', null);\n chart.set('_verticalBar', null);\n },\n afterGeomDraw: function afterGeomDraw(chart) {\n var scrollBarCfg = chart.get('_scrollBarCfg');\n if (!scrollBarCfg) return;\n var data = chart.get('data');\n var plotRange = chart.get('plotRange');\n var backPlot = chart.get('backPlot');\n var canvas = chart.get('canvas');\n var canvasHeight = canvas.get('height');\n var limitRange = chart.get('_limitRange');\n var mode = scrollBarCfg.mode;\n\n if (Util.directionEnabled(mode, 'x')) {\n var _scrollBarCfg$xStyle = scrollBarCfg.xStyle,\n offsetX = _scrollBarCfg$xStyle.offsetX,\n offsetY = _scrollBarCfg$xStyle.offsetY,\n lineCap = _scrollBarCfg$xStyle.lineCap,\n backgroundColor = _scrollBarCfg$xStyle.backgroundColor,\n fillerColor = _scrollBarCfg$xStyle.fillerColor,\n size = _scrollBarCfg$xStyle.size;\n var xScale = chart.getXScale();\n var xLimitRange = limitRange[xScale.field];\n\n if (!xLimitRange) {\n xLimitRange = Helper.getLimitRange(data, xScale);\n limitRange[xScale.field] = xLimitRange;\n }\n\n var currentRange = Helper.getFieldRange(xScale, xLimitRange, xScale.type);\n var horizontalBar = chart.get('_horizontalBar');\n var yPos = canvasHeight - size / 2 + offsetY;\n\n if (horizontalBar) {\n var progressLine = horizontalBar.get('children')[1];\n progressLine.attr({\n x1: Math.max(plotRange.bl.x + plotRange.width * currentRange[0] + offsetX, plotRange.bl.x),\n x2: Math.min(plotRange.bl.x + plotRange.width * currentRange[1] + offsetX, plotRange.br.x)\n });\n } else {\n horizontalBar = backPlot.addGroup({\n className: 'horizontalBar'\n });\n horizontalBar.addShape('line', {\n attrs: {\n x1: plotRange.bl.x + offsetX,\n y1: yPos,\n x2: plotRange.br.x + offsetX,\n y2: yPos,\n lineWidth: size,\n stroke: backgroundColor,\n lineCap: lineCap\n }\n });\n horizontalBar.addShape('line', {\n attrs: {\n x1: Math.max(plotRange.bl.x + plotRange.width * currentRange[0] + offsetX, plotRange.bl.x),\n y1: yPos,\n x2: Math.min(plotRange.bl.x + plotRange.width * currentRange[1] + offsetX, plotRange.br.x),\n y2: yPos,\n lineWidth: size,\n stroke: fillerColor,\n lineCap: lineCap\n }\n });\n chart.set('_horizontalBar', horizontalBar);\n }\n }\n\n if (Util.directionEnabled(mode, 'y')) {\n var _scrollBarCfg$yStyle = scrollBarCfg.yStyle,\n _offsetX = _scrollBarCfg$yStyle.offsetX,\n _offsetY = _scrollBarCfg$yStyle.offsetY,\n _lineCap = _scrollBarCfg$yStyle.lineCap,\n _backgroundColor = _scrollBarCfg$yStyle.backgroundColor,\n _fillerColor = _scrollBarCfg$yStyle.fillerColor,\n _size = _scrollBarCfg$yStyle.size;\n var yScale = chart.getYScales()[0];\n var yLimitRange = limitRange[yScale.field];\n\n if (!yLimitRange) {\n yLimitRange = Helper.getLimitRange(data, yScale);\n limitRange[yScale.field] = yLimitRange;\n }\n\n var _currentRange = Helper.getFieldRange(yScale, yLimitRange, yScale.type);\n\n var verticalBar = chart.get('_verticalBar');\n var xPos = _size / 2 + _offsetX;\n\n if (verticalBar) {\n var _progressLine = verticalBar.get('children')[1];\n\n _progressLine.attr({\n y1: Math.max(plotRange.tl.y + plotRange.height * _currentRange[0] + _offsetY, plotRange.tl.y),\n y2: Math.min(plotRange.tl.y + plotRange.height * _currentRange[1] + _offsetY, plotRange.bl.y)\n });\n } else {\n verticalBar = backPlot.addGroup({\n className: 'verticalBar'\n });\n verticalBar.addShape('line', {\n attrs: {\n x1: xPos,\n y1: plotRange.tl.y + _offsetY,\n x2: xPos,\n y2: plotRange.bl.y + _offsetY,\n lineWidth: _size,\n stroke: _backgroundColor,\n lineCap: _lineCap\n }\n });\n verticalBar.addShape('line', {\n attrs: {\n x1: xPos,\n y1: Math.max(plotRange.tl.y + plotRange.height * _currentRange[0] + _offsetY, plotRange.tl.y),\n x2: xPos,\n y2: Math.min(plotRange.tl.y + plotRange.height * _currentRange[1] + _offsetY, plotRange.bl.y),\n lineWidth: _size,\n stroke: _fillerColor,\n lineCap: _lineCap\n }\n });\n chart.set('_verticalBar', verticalBar);\n }\n }\n }\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/plugin/scroll-bar.js\n// module id = 135\n// module chunks = 0","var Util = require('../util/common');\n\nvar _require = require('../graphic/'),\n Group = _require.Group;\n\nvar DEFAULT_CFG = {\n anchorOffset: 5,\n // 锚点的偏移量\n inflectionOffset: 15,\n // 拐点的偏移量\n sidePadding: 20,\n // 文本距离画布四边的距离\n lineHeight: 32,\n // 文本的行高\n adjustOffset: 15,\n // 发生调整时的偏移量\n skipOverlapLabels: false,\n // 是否不展示重叠的文本\n triggerOn: 'touchstart',\n // 点击行为触发的时间类型\n activeShape: false,\n // 当有图形被选中的时候,是否激活图形\n activeStyle: {\n offset: 1,\n appendRadius: 8,\n fillOpacity: 0.5\n },\n label1OffsetY: -1,\n label2OffsetY: 1\n};\n\nfunction getEndPoint(center, angle, r) {\n return {\n x: center.x + r * Math.cos(angle),\n y: center.y + r * Math.sin(angle)\n };\n} // 计算中间角度\n\n\nfunction getMiddleAngle(startAngle, endAngle) {\n if (endAngle < startAngle) {\n endAngle += Math.PI * 2;\n }\n\n return (endAngle + startAngle) / 2;\n} // 判断两个矩形是否相交\n\n\nfunction isOverlap(label1, label2) {\n var label1BBox = label1.getBBox();\n var label2BBox = label2.getBBox();\n return Math.max(label1BBox.minX, label2BBox.minX) <= Math.min(label1BBox.maxX, label2BBox.minX) && Math.max(label1BBox.minY, label2BBox.minY) <= Math.min(label1BBox.maxY, label2BBox.maxY);\n}\n\nvar controller =\n/*#__PURE__*/\nfunction () {\n function controller(cfg) {\n Util.mix(this, cfg);\n var chart = this.chart;\n this.canvasDom = chart.get('canvas').get('el');\n }\n\n var _proto = controller.prototype;\n\n _proto.renderLabels = function renderLabels() {\n var self = this;\n var chart = self.chart,\n pieLabelCfg = self.pieLabelCfg,\n labelGroup = self.labelGroup;\n var halves = [[], // left\n [] // right\n ]; // 存储左右 labels\n\n var geom = chart.get('geoms')[0];\n var shapes = geom.get('container').get('children');\n var anchorOffset = pieLabelCfg.anchorOffset,\n inflectionOffset = pieLabelCfg.inflectionOffset,\n label1 = pieLabelCfg.label1,\n label2 = pieLabelCfg.label2,\n lineHeight = pieLabelCfg.lineHeight,\n skipOverlapLabels = pieLabelCfg.skipOverlapLabels,\n label1OffsetY = pieLabelCfg.label1OffsetY,\n label2OffsetY = pieLabelCfg.label2OffsetY;\n var coord = chart.get('coord');\n var center = coord.center,\n radius = coord.circleRadius;\n shapes.forEach(function (shape) {\n var _shape$_attrs$attrs = shape._attrs.attrs,\n startAngle = _shape$_attrs$attrs.startAngle,\n endAngle = _shape$_attrs$attrs.endAngle;\n var middleAngle = getMiddleAngle(startAngle, endAngle);\n var anchorPoint = getEndPoint(center, middleAngle, radius + anchorOffset);\n var inflectionPoint = getEndPoint(center, middleAngle, radius + inflectionOffset);\n var origin = shape.get('origin');\n var _origin = origin._origin,\n color = origin.color;\n var label = {\n _anchor: anchorPoint,\n _inflection: inflectionPoint,\n _data: _origin,\n x: inflectionPoint.x,\n y: inflectionPoint.y,\n r: radius + inflectionOffset,\n fill: color\n };\n var textGroup = new Group({\n context: chart.get('canvas').get('context'),\n // 兼容 node、小程序环境\n data: _origin // 存储原始数据\n\n });\n var textAttrs = {\n x: 0,\n y: 0,\n fontSize: 12,\n lineHeight: 12,\n fill: '#808080'\n };\n\n if (Util.isFunction(label1)) {\n textGroup.addShape('Text', {\n attrs: Util.mix({\n textBaseline: 'bottom'\n }, textAttrs, label1(_origin, color)),\n data: _origin,\n // 存储原始数据\n offsetY: label1OffsetY\n });\n }\n\n if (Util.isFunction(label2)) {\n textGroup.addShape('Text', {\n attrs: Util.mix({\n textBaseline: 'top'\n }, textAttrs, label2(_origin, color)),\n data: _origin,\n // 存储原始数据\n offsetY: label2OffsetY\n });\n }\n\n label.textGroup = textGroup; // 判断文本的方向\n\n if (anchorPoint.x < center.x) {\n label._side = 'left';\n halves[0].push(label);\n } else {\n label._side = 'right';\n halves[1].push(label);\n }\n });\n var drawnLabels = [];\n\n if (skipOverlapLabels) {\n var lastLabel; // 存储上一个 label 对象,用于检测文本是否重叠\n\n var labels = halves[1].concat(halves[0]); // 顺时针\n\n for (var i = 0, len = labels.length; i < len; i++) {\n var label = labels[i];\n\n var textGroup = self._drawLabel(label);\n\n if (lastLabel) {\n if (isOverlap(textGroup, lastLabel)) {\n // 重叠了就不绘制\n continue;\n }\n }\n\n labelGroup.add(textGroup);\n\n self._drawLabelLine(label);\n\n lastLabel = textGroup;\n drawnLabels.push(textGroup);\n }\n } else {\n var height = chart.get('height');\n var maxCountForOneSide = parseInt(height / lineHeight, 10);\n halves.forEach(function (half) {\n if (half.length > maxCountForOneSide) {\n half.splice(maxCountForOneSide, half.length - maxCountForOneSide);\n }\n\n half.sort(function (a, b) {\n return a.y - b.y;\n });\n\n var labels = self._antiCollision(half);\n\n drawnLabels = drawnLabels.concat(labels);\n });\n }\n\n this.drawnLabels = drawnLabels;\n };\n\n _proto.bindEvents = function bindEvents() {\n var pieLabelCfg = this.pieLabelCfg;\n var triggerOn = pieLabelCfg.triggerOn || 'touchstart';\n var method = Util.wrapBehavior(this, '_handleEvent');\n Util.addEventListener(this.canvasDom, triggerOn, method);\n };\n\n _proto.unBindEvents = function unBindEvents() {\n var pieLabelCfg = this.pieLabelCfg;\n var triggerOn = pieLabelCfg.triggerOn || 'touchstart';\n var method = Util.getWrapBehavior(this, '_handleEvent');\n Util.removeEventListener(this.canvasDom, triggerOn, method);\n };\n\n _proto.clear = function clear() {\n this.labelGroup && this.labelGroup.clear();\n this.halo && this.halo.remove(true);\n this.lastSelectedData = null;\n this.drawnLabels = [];\n this.unBindEvents();\n };\n\n _proto._drawLabel = function _drawLabel(label) {\n var pieLabelCfg = this.pieLabelCfg,\n chart = this.chart;\n var canvasWidth = chart.get('width');\n var sidePadding = pieLabelCfg.sidePadding;\n var y = label.y,\n textGroup = label.textGroup;\n var children = textGroup.get('children');\n var textAttrs = {\n textAlign: label._side === 'left' ? 'left' : 'right',\n x: label._side === 'left' ? sidePadding : canvasWidth - sidePadding\n };\n children.forEach(function (child) {\n child.attr(textAttrs);\n child.attr('y', y + child.get('offsetY'));\n });\n return textGroup;\n };\n\n _proto._drawLabelLine = function _drawLabelLine(label, maxLabelWidth) {\n var chart = this.chart,\n pieLabelCfg = this.pieLabelCfg,\n labelGroup = this.labelGroup;\n var canvasWidth = chart.get('width');\n var sidePadding = pieLabelCfg.sidePadding,\n adjustOffset = pieLabelCfg.adjustOffset,\n lineStyle = pieLabelCfg.lineStyle,\n anchorStyle = pieLabelCfg.anchorStyle,\n skipOverlapLabels = pieLabelCfg.skipOverlapLabels;\n var _anchor = label._anchor,\n _inflection = label._inflection,\n fill = label.fill,\n y = label.y;\n var lastPoint = {\n x: label._side === 'left' ? sidePadding : canvasWidth - sidePadding,\n y: y\n };\n var points = [_anchor, _inflection, lastPoint];\n\n if (!skipOverlapLabels && _inflection.y !== y) {\n // 展示全部文本文本位置做过调整\n if (_inflection.y < y) {\n // 文本被调整下去了,则添加拐点连接线\n var point1 = _inflection;\n var point2 = {\n x: label._side === 'left' ? lastPoint.x + maxLabelWidth + adjustOffset : lastPoint.x - maxLabelWidth - adjustOffset,\n y: _inflection.y\n };\n var point3 = {\n x: label._side === 'left' ? lastPoint.x + maxLabelWidth : lastPoint.x - maxLabelWidth,\n y: lastPoint.y\n };\n points = [_anchor, point1, point2, point3, lastPoint];\n\n if (label._side === 'right' && point2.x < point1.x || label._side === 'left' && point2.x > point1.x) {\n points = [_anchor, point3, lastPoint];\n }\n } else {\n points = [_anchor, {\n x: _inflection.x,\n y: y\n }, lastPoint];\n }\n }\n\n labelGroup.addShape('Polyline', {\n attrs: Util.mix({\n points: points,\n lineWidth: 1,\n stroke: fill\n }, lineStyle)\n }); // 绘制锚点\n\n labelGroup.addShape('Circle', {\n attrs: Util.mix({\n x: _anchor.x,\n y: _anchor.y,\n r: 2,\n fill: fill\n }, anchorStyle)\n });\n };\n\n _proto._antiCollision = function _antiCollision(half) {\n var self = this;\n var chart = self.chart,\n pieLabelCfg = self.pieLabelCfg;\n var coord = chart.get('coord');\n var canvasHeight = chart.get('height');\n var center = coord.center,\n r = coord.circleRadius;\n var inflectionOffset = pieLabelCfg.inflectionOffset,\n lineHeight = pieLabelCfg.lineHeight;\n var startY = center.y - r - inflectionOffset - lineHeight;\n var overlapping = true;\n var totalH = canvasHeight;\n var i;\n var maxY = 0;\n var minY = Number.MIN_VALUE;\n var maxLabelWidth = 0;\n var boxes = half.map(function (label) {\n var labelY = label.y;\n\n if (labelY > maxY) {\n maxY = labelY;\n }\n\n if (labelY < minY) {\n minY = labelY;\n }\n\n var textGroup = label.textGroup;\n var labelWidth = textGroup.getBBox().width;\n\n if (labelWidth >= maxLabelWidth) {\n maxLabelWidth = labelWidth;\n }\n\n return {\n size: lineHeight,\n targets: [labelY - startY]\n };\n });\n\n if (maxY - startY > totalH) {\n totalH = maxY - startY;\n }\n\n var iteratorBoxed = function iteratorBoxed(boxes) {\n boxes.forEach(function (box) {\n var target = (Math.min.apply(minY, box.targets) + Math.max.apply(minY, box.targets)) / 2;\n box.pos = Math.min(Math.max(minY, target - box.size / 2), totalH - box.size);\n });\n };\n\n while (overlapping) {\n iteratorBoxed(boxes); // detect overlapping and join boxes\n\n overlapping = false;\n i = boxes.length;\n\n while (i--) {\n if (i > 0) {\n var previousBox = boxes[i - 1];\n var box = boxes[i];\n\n if (previousBox.pos + previousBox.size > box.pos) {\n // overlapping\n previousBox.size += box.size;\n previousBox.targets = previousBox.targets.concat(box.targets); // overflow, shift up\n\n if (previousBox.pos + previousBox.size > totalH) {\n previousBox.pos = totalH - previousBox.size;\n }\n\n boxes.splice(i, 1); // removing box\n\n overlapping = true;\n }\n }\n }\n }\n\n i = 0;\n boxes.forEach(function (b) {\n var posInCompositeBox = startY; // middle of the label\n\n b.targets.forEach(function () {\n half[i].y = b.pos + posInCompositeBox + lineHeight / 2;\n posInCompositeBox += lineHeight;\n i++;\n });\n });\n var drawnLabels = [];\n half.forEach(function (label) {\n var textGroup = self._drawLabel(label);\n\n var labelGroup = self.labelGroup;\n labelGroup.add(textGroup);\n\n self._drawLabelLine(label, maxLabelWidth);\n\n drawnLabels.push(textGroup);\n });\n return drawnLabels;\n };\n\n _proto._handleEvent = function _handleEvent(ev) {\n var self = this;\n var chart = self.chart,\n drawnLabels = self.drawnLabels,\n pieLabelCfg = self.pieLabelCfg;\n var onClick = pieLabelCfg.onClick,\n activeShape = pieLabelCfg.activeShape;\n var canvasEvent = Util.createEvent(ev, chart);\n var x = canvasEvent.x,\n y = canvasEvent.y; // 查找被点击的 label\n\n var clickedShape;\n\n for (var i = 0, len = drawnLabels.length; i < len; i++) {\n var shape = drawnLabels[i];\n var bbox = shape.getBBox(); // 通过最小包围盒来判断击中情况\n\n if (x >= bbox.minX && x <= bbox.maxX && y >= bbox.minY && y <= bbox.maxY) {\n clickedShape = shape;\n break;\n }\n }\n\n var pieData = chart.getSnapRecords({\n x: x,\n y: y\n });\n\n if (clickedShape) {\n canvasEvent.data = clickedShape.get('data');\n } else if (pieData.length) {\n // 击中饼图扇形区域\n canvasEvent.data = pieData[0]._origin;\n }\n\n onClick && onClick(canvasEvent);\n canvasEvent.data && activeShape && this._activeShape(canvasEvent.data);\n };\n\n _proto._getSelectedShapeByData = function _getSelectedShapeByData(data) {\n var selectedShape = null;\n var chart = this.chart;\n var geom = chart.get('geoms')[0];\n var container = geom.get('container');\n var children = container.get('children');\n Util.each(children, function (child) {\n if (child.get('isShape') && child.get('className') === geom.get('type')) {\n // get geometry's shape\n var shapeData = child.get('origin')._origin;\n\n if (Util.isObjectValueEqual(shapeData, data)) {\n selectedShape = child;\n return false;\n }\n }\n });\n return selectedShape;\n };\n\n _proto._activeShape = function _activeShape(data) {\n var chart = this.chart,\n lastSelectedData = this.lastSelectedData,\n pieLabelCfg = this.pieLabelCfg;\n\n if (data === lastSelectedData) {\n return;\n }\n\n this.lastSelectedData = data;\n var activeStyle = pieLabelCfg.activeStyle;\n\n var selectedShape = this._getSelectedShapeByData(data);\n\n var _selectedShape$_attrs = selectedShape._attrs.attrs,\n x = _selectedShape$_attrs.x,\n y = _selectedShape$_attrs.y,\n startAngle = _selectedShape$_attrs.startAngle,\n endAngle = _selectedShape$_attrs.endAngle,\n r = _selectedShape$_attrs.r,\n fill = _selectedShape$_attrs.fill;\n var frontPlot = chart.get('frontPlot');\n this.halo && this.halo.remove(true);\n var halo = frontPlot.addShape('sector', {\n attrs: Util.mix({\n x: x,\n y: y,\n r: r + activeStyle.offset + activeStyle.appendRadius,\n r0: r + activeStyle.offset,\n fill: fill,\n startAngle: startAngle,\n endAngle: endAngle\n }, activeStyle)\n });\n this.halo = halo;\n chart.get('canvas').draw();\n };\n\n return controller;\n}();\n\nmodule.exports = {\n init: function init(chart) {\n var frontPlot = chart.get('frontPlot');\n var labelGroup = frontPlot.addGroup({\n className: 'pie-label',\n zIndex: 0\n });\n var pieLabelController = new controller({\n chart: chart,\n labelGroup: labelGroup\n });\n chart.set('pieLabelController', pieLabelController);\n\n chart.pieLabel = function (cfg) {\n cfg = Util.deepMix({}, DEFAULT_CFG, cfg);\n pieLabelController.pieLabelCfg = cfg;\n return this;\n };\n },\n afterGeomDraw: function afterGeomDraw(chart) {\n var controller = chart.get('pieLabelController');\n\n if (controller.pieLabelCfg) {\n // 用户配置了饼图文本\n controller.renderLabels();\n controller.bindEvents(); // 绑定事件\n }\n },\n clearInner: function clearInner(chart) {\n var controller = chart.get('pieLabelController');\n\n if (controller.pieLabelCfg) {\n // 用户配置了饼图文本\n controller.clear();\n }\n }\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/plugin/pie-label.js\n// module id = 136\n// module chunks = 0","function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nvar Util = require('../util/common');\n\nvar Interaction = require('./base');\n\nvar Chart = require('../chart/chart');\n\nvar PieSelect =\n/*#__PURE__*/\nfunction (_Interaction) {\n _inheritsLoose(PieSelect, _Interaction);\n\n var _proto = PieSelect.prototype;\n\n _proto.getDefaultCfg = function getDefaultCfg() {\n var defaultCfg = _Interaction.prototype.getDefaultCfg.call(this);\n\n defaultCfg = Util.mix({}, defaultCfg, {\n startEvent: 'tap',\n processEvent: null,\n animate: false,\n offset: 1,\n appendRadius: 8,\n style: {\n fillOpacity: 0.5\n },\n cancelable: true,\n defaultSelected: null // set the default selected shape\n\n });\n\n if (Util.isWx || Util.isMy) {\n // 小程序\n defaultCfg.startEvent = 'touchstart';\n defaultCfg.endEvent = 'touchend';\n }\n\n return defaultCfg;\n };\n\n function PieSelect(cfg, chart) {\n var _this;\n\n _this = _Interaction.call(this, cfg, chart) || this;\n\n var self = _assertThisInitialized(_assertThisInitialized(_this));\n\n chart.registerPlugins({\n clearInner: function clearInner() {\n self.halo && self.halo.remove(true);\n self.selected = false;\n self.selectedShape = null;\n self.lastShape = null;\n self.halo = null;\n self.defaultSelected = null;\n }\n });\n var defaultSelected = self.defaultSelected;\n\n if (Util.isObject(defaultSelected)) {\n var selectedShape = self._getSelectedShapeByData(defaultSelected);\n\n selectedShape && self._selectedShape(selectedShape);\n\n _this.canvas.draw();\n }\n\n return _this;\n }\n\n _proto._getSelectedShapeByData = function _getSelectedShapeByData(data) {\n var selectedShape = null;\n var chart = this.chart;\n var geom = chart.get('geoms')[0];\n var container = geom.get('container');\n var children = container.get('children');\n Util.each(children, function (child) {\n if (child.get('isShape') && child.get('className') === geom.get('type')) {\n // get geometry's shape\n var shapeData = child.get('origin')._origin;\n\n if (Util.isObjectValueEqual(shapeData, data)) {\n selectedShape = child;\n return false;\n }\n }\n });\n return selectedShape;\n };\n\n _proto._selectedShape = function _selectedShape(selectedShape) {\n var offset = this.offset,\n style = this.style,\n appendRadius = this.appendRadius,\n chart = this.chart;\n this.lastShape = selectedShape;\n var _selectedShape$_attrs = selectedShape._attrs.attrs,\n x = _selectedShape$_attrs.x,\n y = _selectedShape$_attrs.y,\n startAngle = _selectedShape$_attrs.startAngle,\n endAngle = _selectedShape$_attrs.endAngle,\n r = _selectedShape$_attrs.r,\n fill = _selectedShape$_attrs.fill;\n var frontPlot = chart.get('frontPlot');\n var halo = frontPlot.addShape('sector', {\n attrs: Util.mix({\n x: x,\n y: y,\n r: r + offset + appendRadius,\n r0: r + offset,\n fill: fill,\n startAngle: startAngle,\n endAngle: endAngle\n }, style)\n });\n this.halo = halo;\n var animate = this.animate;\n\n if (animate) {\n if (animate === true) {\n animate = {\n duration: 300\n };\n }\n\n halo.attr('r', r + offset);\n halo.animate().to(Util.mix({\n attrs: {\n r: r + offset + appendRadius\n }\n }, animate));\n }\n };\n\n _proto.start = function start(ev) {\n var chart = this.chart;\n\n if (ev.type === 'tap') {\n ev.clientX = ev.center.x;\n ev.clientY = ev.center.y;\n }\n\n var _Util$createEvent = Util.createEvent(ev, chart),\n x = _Util$createEvent.x,\n y = _Util$createEvent.y;\n\n this.halo && this.halo.remove(true);\n var records = chart.getSnapRecords({\n x: x,\n y: y\n });\n\n if (!records.length) {\n this.selected = false;\n this.selectedShape = null;\n return;\n }\n\n var data = records[0]._origin;\n\n var selectedShape = this._getSelectedShapeByData(data);\n\n var lastShape = this.lastShape;\n this.selectedShape = selectedShape;\n this.selected = true;\n\n if (selectedShape === lastShape) {\n if (!this.cancelable) {\n return;\n }\n\n this.halo && this.halo.remove(true);\n this.lastShape = null;\n this.selected = false;\n } else {\n this._selectedShape(selectedShape);\n }\n\n this.canvas.draw();\n };\n\n _proto.end = function end(ev) {\n var selectedShape = this.selectedShape;\n\n if (selectedShape && !selectedShape.get('destroyed')) {\n ev.data = selectedShape.get('origin')._origin;\n ev.shapeInfo = selectedShape.get('origin');\n ev.shape = selectedShape;\n ev.selected = !!this.selected;\n }\n };\n\n return PieSelect;\n}(Interaction);\n\nChart.registerInteraction('pie-select', PieSelect);\nmodule.exports = PieSelect;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/interaction/pie-select.js\n// module id = 137\n// module chunks = 0","/*! Hammer.JS - v2.0.7 - 2016-04-22\n * http://hammerjs.github.io/\n *\n * Copyright (c) 2016 Jorik Tangelder;\n * Licensed under the MIT license */\n(function (window, document, exportName, undefined) {\n 'use strict';\n\n var VENDOR_PREFIXES = ['', 'webkit', 'Moz', 'MS', 'ms', 'o'];\n var TEST_ELEMENT = document.createElement('div');\n var TYPE_FUNCTION = 'function';\n var round = Math.round;\n var abs = Math.abs;\n var now = Date.now;\n /**\n * set a timeout with a given scope\n * @param {Function} fn\n * @param {Number} timeout\n * @param {Object} context\n * @returns {number}\n */\n\n function setTimeoutContext(fn, timeout, context) {\n return setTimeout(bindFn(fn, context), timeout);\n }\n /**\n * if the argument is an array, we want to execute the fn on each entry\n * if it aint an array we don't want to do a thing.\n * this is used by all the methods that accept a single and array argument.\n * @param {*|Array} arg\n * @param {String} fn\n * @param {Object} [context]\n * @returns {Boolean}\n */\n\n\n function invokeArrayArg(arg, fn, context) {\n if (Array.isArray(arg)) {\n each(arg, context[fn], context);\n return true;\n }\n\n return false;\n }\n /**\n * walk objects and arrays\n * @param {Object} obj\n * @param {Function} iterator\n * @param {Object} context\n */\n\n\n function each(obj, iterator, context) {\n var i;\n\n if (!obj) {\n return;\n }\n\n if (obj.forEach) {\n obj.forEach(iterator, context);\n } else if (obj.length !== undefined) {\n i = 0;\n\n while (i < obj.length) {\n iterator.call(context, obj[i], i, obj);\n i++;\n }\n } else {\n for (i in obj) {\n obj.hasOwnProperty(i) && iterator.call(context, obj[i], i, obj);\n }\n }\n }\n /**\n * wrap a method with a deprecation warning and stack trace\n * @param {Function} method\n * @param {String} name\n * @param {String} message\n * @returns {Function} A new function wrapping the supplied method.\n */\n\n\n function deprecate(method, name, message) {\n var deprecationMessage = 'DEPRECATED METHOD: ' + name + '\\n' + message + ' AT \\n';\n return function () {\n var e = new Error('get-stack-trace');\n var stack = e && e.stack ? e.stack.replace(/^[^\\(]+?[\\n$]/gm, '').replace(/^\\s+at\\s+/gm, '').replace(/^Object.<anonymous>\\s*\\(/gm, '{anonymous}()@') : 'Unknown Stack Trace';\n var log = window.console && (window.console.warn || window.console.log);\n\n if (log) {\n log.call(window.console, deprecationMessage, stack);\n }\n\n return method.apply(this, arguments);\n };\n }\n /**\n * extend object.\n * means that properties in dest will be overwritten by the ones in src.\n * @param {Object} target\n * @param {...Object} objects_to_assign\n * @returns {Object} target\n */\n\n\n var assign;\n\n if (typeof Object.assign !== 'function') {\n assign = function assign(target) {\n if (target === undefined || target === null) {\n throw new TypeError('Cannot convert undefined or null to object');\n }\n\n var output = Object(target);\n\n for (var index = 1; index < arguments.length; index++) {\n var source = arguments[index];\n\n if (source !== undefined && source !== null) {\n for (var nextKey in source) {\n if (source.hasOwnProperty(nextKey)) {\n output[nextKey] = source[nextKey];\n }\n }\n }\n }\n\n return output;\n };\n } else {\n assign = Object.assign;\n }\n /**\n * extend object.\n * means that properties in dest will be overwritten by the ones in src.\n * @param {Object} dest\n * @param {Object} src\n * @param {Boolean} [merge=false]\n * @returns {Object} dest\n */\n\n\n var extend = deprecate(function extend(dest, src, merge) {\n var keys = Object.keys(src);\n var i = 0;\n\n while (i < keys.length) {\n if (!merge || merge && dest[keys[i]] === undefined) {\n dest[keys[i]] = src[keys[i]];\n }\n\n i++;\n }\n\n return dest;\n }, 'extend', 'Use `assign`.');\n /**\n * merge the values from src in the dest.\n * means that properties that exist in dest will not be overwritten by src\n * @param {Object} dest\n * @param {Object} src\n * @returns {Object} dest\n */\n\n var merge = deprecate(function merge(dest, src) {\n return extend(dest, src, true);\n }, 'merge', 'Use `assign`.');\n /**\n * simple class inheritance\n * @param {Function} child\n * @param {Function} base\n * @param {Object} [properties]\n */\n\n function inherit(child, base, properties) {\n var baseP = base.prototype,\n childP;\n childP = child.prototype = Object.create(baseP);\n childP.constructor = child;\n childP._super = baseP;\n\n if (properties) {\n assign(childP, properties);\n }\n }\n /**\n * simple function bind\n * @param {Function} fn\n * @param {Object} context\n * @returns {Function}\n */\n\n\n function bindFn(fn, context) {\n return function boundFn() {\n return fn.apply(context, arguments);\n };\n }\n /**\n * let a boolean value also be a function that must return a boolean\n * this first item in args will be used as the context\n * @param {Boolean|Function} val\n * @param {Array} [args]\n * @returns {Boolean}\n */\n\n\n function boolOrFn(val, args) {\n if (typeof val == TYPE_FUNCTION) {\n return val.apply(args ? args[0] || undefined : undefined, args);\n }\n\n return val;\n }\n /**\n * use the val2 when val1 is undefined\n * @param {*} val1\n * @param {*} val2\n * @returns {*}\n */\n\n\n function ifUndefined(val1, val2) {\n return val1 === undefined ? val2 : val1;\n }\n /**\n * addEventListener with multiple events at once\n * @param {EventTarget} target\n * @param {String} types\n * @param {Function} handler\n */\n\n\n function addEventListeners(target, types, handler) {\n each(splitStr(types), function (type) {\n target.addEventListener(type, handler, false);\n });\n }\n /**\n * removeEventListener with multiple events at once\n * @param {EventTarget} target\n * @param {String} types\n * @param {Function} handler\n */\n\n\n function removeEventListeners(target, types, handler) {\n each(splitStr(types), function (type) {\n target.removeEventListener(type, handler, false);\n });\n }\n /**\n * find if a node is in the given parent\n * @method hasParent\n * @param {HTMLElement} node\n * @param {HTMLElement} parent\n * @return {Boolean} found\n */\n\n\n function hasParent(node, parent) {\n while (node) {\n if (node == parent) {\n return true;\n }\n\n node = node.parentNode;\n }\n\n return false;\n }\n /**\n * small indexOf wrapper\n * @param {String} str\n * @param {String} find\n * @returns {Boolean} found\n */\n\n\n function inStr(str, find) {\n return str.indexOf(find) > -1;\n }\n /**\n * split string on whitespace\n * @param {String} str\n * @returns {Array} words\n */\n\n\n function splitStr(str) {\n return str.trim().split(/\\s+/g);\n }\n /**\n * find if a array contains the object using indexOf or a simple polyFill\n * @param {Array} src\n * @param {String} find\n * @param {String} [findByKey]\n * @return {Boolean|Number} false when not found, or the index\n */\n\n\n function inArray(src, find, findByKey) {\n if (src.indexOf && !findByKey) {\n return src.indexOf(find);\n } else {\n var i = 0;\n\n while (i < src.length) {\n if (findByKey && src[i][findByKey] == find || !findByKey && src[i] === find) {\n return i;\n }\n\n i++;\n }\n\n return -1;\n }\n }\n /**\n * convert array-like objects to real arrays\n * @param {Object} obj\n * @returns {Array}\n */\n\n\n function toArray(obj) {\n return Array.prototype.slice.call(obj, 0);\n }\n /**\n * unique array with objects based on a key (like 'id') or just by the array's value\n * @param {Array} src [{id:1},{id:2},{id:1}]\n * @param {String} [key]\n * @param {Boolean} [sort=False]\n * @returns {Array} [{id:1},{id:2}]\n */\n\n\n function uniqueArray(src, key, sort) {\n var results = [];\n var values = [];\n var i = 0;\n\n while (i < src.length) {\n var val = key ? src[i][key] : src[i];\n\n if (inArray(values, val) < 0) {\n results.push(src[i]);\n }\n\n values[i] = val;\n i++;\n }\n\n if (sort) {\n if (!key) {\n results = results.sort();\n } else {\n results = results.sort(function sortUniqueArray(a, b) {\n return a[key] > b[key];\n });\n }\n }\n\n return results;\n }\n /**\n * get the prefixed property\n * @param {Object} obj\n * @param {String} property\n * @returns {String|Undefined} prefixed\n */\n\n\n function prefixed(obj, property) {\n var prefix, prop;\n var camelProp = property[0].toUpperCase() + property.slice(1);\n var i = 0;\n\n while (i < VENDOR_PREFIXES.length) {\n prefix = VENDOR_PREFIXES[i];\n prop = prefix ? prefix + camelProp : property;\n\n if (prop in obj) {\n return prop;\n }\n\n i++;\n }\n\n return undefined;\n }\n /**\n * get a unique id\n * @returns {number} uniqueId\n */\n\n\n var _uniqueId = 1;\n\n function uniqueId() {\n return _uniqueId++;\n }\n /**\n * get the window object of an element\n * @param {HTMLElement} element\n * @returns {DocumentView|Window}\n */\n\n\n function getWindowForElement(element) {\n var doc = element.ownerDocument || element;\n return doc.defaultView || doc.parentWindow || window;\n }\n\n var MOBILE_REGEX = /mobile|tablet|ip(ad|hone|od)|android/i;\n var SUPPORT_TOUCH = 'ontouchstart' in window;\n var SUPPORT_POINTER_EVENTS = prefixed(window, 'PointerEvent') !== undefined;\n var SUPPORT_ONLY_TOUCH = SUPPORT_TOUCH && MOBILE_REGEX.test(navigator.userAgent);\n var INPUT_TYPE_TOUCH = 'touch';\n var INPUT_TYPE_PEN = 'pen';\n var INPUT_TYPE_MOUSE = 'mouse';\n var INPUT_TYPE_KINECT = 'kinect';\n var COMPUTE_INTERVAL = 25;\n var INPUT_START = 1;\n var INPUT_MOVE = 2;\n var INPUT_END = 4;\n var INPUT_CANCEL = 8;\n var DIRECTION_NONE = 1;\n var DIRECTION_LEFT = 2;\n var DIRECTION_RIGHT = 4;\n var DIRECTION_UP = 8;\n var DIRECTION_DOWN = 16;\n var DIRECTION_HORIZONTAL = DIRECTION_LEFT | DIRECTION_RIGHT;\n var DIRECTION_VERTICAL = DIRECTION_UP | DIRECTION_DOWN;\n var DIRECTION_ALL = DIRECTION_HORIZONTAL | DIRECTION_VERTICAL;\n var PROPS_XY = ['x', 'y'];\n var PROPS_CLIENT_XY = ['clientX', 'clientY'];\n /**\n * create new input type manager\n * @param {Manager} manager\n * @param {Function} callback\n * @returns {Input}\n * @constructor\n */\n\n function Input(manager, callback) {\n var self = this;\n this.manager = manager;\n this.callback = callback;\n this.element = manager.element;\n this.target = manager.options.inputTarget; // smaller wrapper around the handler, for the scope and the enabled state of the manager,\n // so when disabled the input events are completely bypassed.\n\n this.domHandler = function (ev) {\n if (boolOrFn(manager.options.enable, [manager])) {\n self.handler(ev);\n }\n };\n\n this.init();\n }\n\n Input.prototype = {\n /**\n * should handle the inputEvent data and trigger the callback\n * @virtual\n */\n handler: function () {},\n\n /**\n * bind the events\n */\n init: function () {\n this.evEl && addEventListeners(this.element, this.evEl, this.domHandler);\n this.evTarget && addEventListeners(this.target, this.evTarget, this.domHandler);\n this.evWin && addEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);\n },\n\n /**\n * unbind the events\n */\n destroy: function () {\n this.evEl && removeEventListeners(this.element, this.evEl, this.domHandler);\n this.evTarget && removeEventListeners(this.target, this.evTarget, this.domHandler);\n this.evWin && removeEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);\n }\n };\n /**\n * create new input type manager\n * called by the Manager constructor\n * @param {Hammer} manager\n * @returns {Input}\n */\n\n function createInputInstance(manager) {\n var Type;\n var inputClass = manager.options.inputClass;\n\n if (inputClass) {\n Type = inputClass;\n } else if (SUPPORT_POINTER_EVENTS) {\n Type = PointerEventInput;\n } else if (SUPPORT_ONLY_TOUCH) {\n Type = TouchInput;\n } else if (!SUPPORT_TOUCH) {\n Type = MouseInput;\n } else {\n Type = TouchMouseInput;\n }\n\n return new Type(manager, inputHandler);\n }\n /**\n * handle input events\n * @param {Manager} manager\n * @param {String} eventType\n * @param {Object} input\n */\n\n\n function inputHandler(manager, eventType, input) {\n var pointersLen = input.pointers.length;\n var changedPointersLen = input.changedPointers.length;\n var isFirst = eventType & INPUT_START && pointersLen - changedPointersLen === 0;\n var isFinal = eventType & (INPUT_END | INPUT_CANCEL) && pointersLen - changedPointersLen === 0;\n input.isFirst = !!isFirst;\n input.isFinal = !!isFinal;\n\n if (isFirst) {\n manager.session = {};\n } // source event is the normalized value of the domEvents\n // like 'touchstart, mouseup, pointerdown'\n\n\n input.eventType = eventType; // compute scale, rotation etc\n\n computeInputData(manager, input); // emit secret event\n\n manager.emit('hammer.input', input);\n manager.recognize(input);\n manager.session.prevInput = input;\n }\n /**\n * extend the data with some usable properties like scale, rotate, velocity etc\n * @param {Object} manager\n * @param {Object} input\n */\n\n\n function computeInputData(manager, input) {\n var session = manager.session;\n var pointers = input.pointers;\n var pointersLength = pointers.length; // store the first input to calculate the distance and direction\n\n if (!session.firstInput) {\n session.firstInput = simpleCloneInputData(input);\n } // to compute scale and rotation we need to store the multiple touches\n\n\n if (pointersLength > 1 && !session.firstMultiple) {\n session.firstMultiple = simpleCloneInputData(input);\n } else if (pointersLength === 1) {\n session.firstMultiple = false;\n }\n\n var firstInput = session.firstInput;\n var firstMultiple = session.firstMultiple;\n var offsetCenter = firstMultiple ? firstMultiple.center : firstInput.center;\n var center = input.center = getCenter(pointers);\n input.timeStamp = now();\n input.deltaTime = input.timeStamp - firstInput.timeStamp;\n input.angle = getAngle(offsetCenter, center);\n input.distance = getDistance(offsetCenter, center);\n computeDeltaXY(session, input);\n input.offsetDirection = getDirection(input.deltaX, input.deltaY);\n var overallVelocity = getVelocity(input.deltaTime, input.deltaX, input.deltaY);\n input.overallVelocityX = overallVelocity.x;\n input.overallVelocityY = overallVelocity.y;\n input.overallVelocity = abs(overallVelocity.x) > abs(overallVelocity.y) ? overallVelocity.x : overallVelocity.y;\n input.scale = firstMultiple ? getScale(firstMultiple.pointers, pointers) : 1;\n input.rotation = firstMultiple ? getRotation(firstMultiple.pointers, pointers) : 0;\n input.maxPointers = !session.prevInput ? input.pointers.length : input.pointers.length > session.prevInput.maxPointers ? input.pointers.length : session.prevInput.maxPointers;\n computeIntervalInputData(session, input); // find the correct target\n\n var target = manager.element;\n\n if (hasParent(input.srcEvent.target, target)) {\n target = input.srcEvent.target;\n }\n\n input.target = target;\n }\n\n function computeDeltaXY(session, input) {\n var center = input.center;\n var offset = session.offsetDelta || {};\n var prevDelta = session.prevDelta || {};\n var prevInput = session.prevInput || {};\n\n if (input.eventType === INPUT_START || prevInput.eventType === INPUT_END) {\n prevDelta = session.prevDelta = {\n x: prevInput.deltaX || 0,\n y: prevInput.deltaY || 0\n };\n offset = session.offsetDelta = {\n x: center.x,\n y: center.y\n };\n }\n\n input.deltaX = prevDelta.x + (center.x - offset.x);\n input.deltaY = prevDelta.y + (center.y - offset.y);\n }\n /**\n * velocity is calculated every x ms\n * @param {Object} session\n * @param {Object} input\n */\n\n\n function computeIntervalInputData(session, input) {\n var last = session.lastInterval || input,\n deltaTime = input.timeStamp - last.timeStamp,\n velocity,\n velocityX,\n velocityY,\n direction;\n\n if (input.eventType != INPUT_CANCEL && (deltaTime > COMPUTE_INTERVAL || last.velocity === undefined)) {\n var deltaX = input.deltaX - last.deltaX;\n var deltaY = input.deltaY - last.deltaY;\n var v = getVelocity(deltaTime, deltaX, deltaY);\n velocityX = v.x;\n velocityY = v.y;\n velocity = abs(v.x) > abs(v.y) ? v.x : v.y;\n direction = getDirection(deltaX, deltaY);\n session.lastInterval = input;\n } else {\n // use latest velocity info if it doesn't overtake a minimum period\n velocity = last.velocity;\n velocityX = last.velocityX;\n velocityY = last.velocityY;\n direction = last.direction;\n }\n\n input.velocity = velocity;\n input.velocityX = velocityX;\n input.velocityY = velocityY;\n input.direction = direction;\n }\n /**\n * create a simple clone from the input used for storage of firstInput and firstMultiple\n * @param {Object} input\n * @returns {Object} clonedInputData\n */\n\n\n function simpleCloneInputData(input) {\n // make a simple copy of the pointers because we will get a reference if we don't\n // we only need clientXY for the calculations\n var pointers = [];\n var i = 0;\n\n while (i < input.pointers.length) {\n pointers[i] = {\n clientX: round(input.pointers[i].clientX),\n clientY: round(input.pointers[i].clientY)\n };\n i++;\n }\n\n return {\n timeStamp: now(),\n pointers: pointers,\n center: getCenter(pointers),\n deltaX: input.deltaX,\n deltaY: input.deltaY\n };\n }\n /**\n * get the center of all the pointers\n * @param {Array} pointers\n * @return {Object} center contains `x` and `y` properties\n */\n\n\n function getCenter(pointers) {\n var pointersLength = pointers.length; // no need to loop when only one touch\n\n if (pointersLength === 1) {\n return {\n x: round(pointers[0].clientX),\n y: round(pointers[0].clientY)\n };\n }\n\n var x = 0,\n y = 0,\n i = 0;\n\n while (i < pointersLength) {\n x += pointers[i].clientX;\n y += pointers[i].clientY;\n i++;\n }\n\n return {\n x: round(x / pointersLength),\n y: round(y / pointersLength)\n };\n }\n /**\n * calculate the velocity between two points. unit is in px per ms.\n * @param {Number} deltaTime\n * @param {Number} x\n * @param {Number} y\n * @return {Object} velocity `x` and `y`\n */\n\n\n function getVelocity(deltaTime, x, y) {\n return {\n x: x / deltaTime || 0,\n y: y / deltaTime || 0\n };\n }\n /**\n * get the direction between two points\n * @param {Number} x\n * @param {Number} y\n * @return {Number} direction\n */\n\n\n function getDirection(x, y) {\n if (x === y) {\n return DIRECTION_NONE;\n }\n\n if (abs(x) >= abs(y)) {\n return x < 0 ? DIRECTION_LEFT : DIRECTION_RIGHT;\n }\n\n return y < 0 ? DIRECTION_UP : DIRECTION_DOWN;\n }\n /**\n * calculate the absolute distance between two points\n * @param {Object} p1 {x, y}\n * @param {Object} p2 {x, y}\n * @param {Array} [props] containing x and y keys\n * @return {Number} distance\n */\n\n\n function getDistance(p1, p2, props) {\n if (!props) {\n props = PROPS_XY;\n }\n\n var x = p2[props[0]] - p1[props[0]],\n y = p2[props[1]] - p1[props[1]];\n return Math.sqrt(x * x + y * y);\n }\n /**\n * calculate the angle between two coordinates\n * @param {Object} p1\n * @param {Object} p2\n * @param {Array} [props] containing x and y keys\n * @return {Number} angle\n */\n\n\n function getAngle(p1, p2, props) {\n if (!props) {\n props = PROPS_XY;\n }\n\n var x = p2[props[0]] - p1[props[0]],\n y = p2[props[1]] - p1[props[1]];\n return Math.atan2(y, x) * 180 / Math.PI;\n }\n /**\n * calculate the rotation degrees between two pointersets\n * @param {Array} start array of pointers\n * @param {Array} end array of pointers\n * @return {Number} rotation\n */\n\n\n function getRotation(start, end) {\n return getAngle(end[1], end[0], PROPS_CLIENT_XY) + getAngle(start[1], start[0], PROPS_CLIENT_XY);\n }\n /**\n * calculate the scale factor between two pointersets\n * no scale is 1, and goes down to 0 when pinched together, and bigger when pinched out\n * @param {Array} start array of pointers\n * @param {Array} end array of pointers\n * @return {Number} scale\n */\n\n\n function getScale(start, end) {\n return getDistance(end[0], end[1], PROPS_CLIENT_XY) / getDistance(start[0], start[1], PROPS_CLIENT_XY);\n }\n\n var MOUSE_INPUT_MAP = {\n mousedown: INPUT_START,\n mousemove: INPUT_MOVE,\n mouseup: INPUT_END\n };\n var MOUSE_ELEMENT_EVENTS = 'mousedown';\n var MOUSE_WINDOW_EVENTS = 'mousemove mouseup';\n /**\n * Mouse events input\n * @constructor\n * @extends Input\n */\n\n function MouseInput() {\n this.evEl = MOUSE_ELEMENT_EVENTS;\n this.evWin = MOUSE_WINDOW_EVENTS;\n this.pressed = false; // mousedown state\n\n Input.apply(this, arguments);\n }\n\n inherit(MouseInput, Input, {\n /**\n * handle mouse events\n * @param {Object} ev\n */\n handler: function MEhandler(ev) {\n var eventType = MOUSE_INPUT_MAP[ev.type]; // on start we want to have the left mouse button down\n\n if (eventType & INPUT_START && ev.button === 0) {\n this.pressed = true;\n }\n\n if (eventType & INPUT_MOVE && ev.which !== 1) {\n eventType = INPUT_END;\n } // mouse must be down\n\n\n if (!this.pressed) {\n return;\n }\n\n if (eventType & INPUT_END) {\n this.pressed = false;\n }\n\n this.callback(this.manager, eventType, {\n pointers: [ev],\n changedPointers: [ev],\n pointerType: INPUT_TYPE_MOUSE,\n srcEvent: ev\n });\n }\n });\n var POINTER_INPUT_MAP = {\n pointerdown: INPUT_START,\n pointermove: INPUT_MOVE,\n pointerup: INPUT_END,\n pointercancel: INPUT_CANCEL,\n pointerout: INPUT_CANCEL\n }; // in IE10 the pointer types is defined as an enum\n\n var IE10_POINTER_TYPE_ENUM = {\n 2: INPUT_TYPE_TOUCH,\n 3: INPUT_TYPE_PEN,\n 4: INPUT_TYPE_MOUSE,\n 5: INPUT_TYPE_KINECT // see https://twitter.com/jacobrossi/status/480596438489890816\n\n };\n var POINTER_ELEMENT_EVENTS = 'pointerdown';\n var POINTER_WINDOW_EVENTS = 'pointermove pointerup pointercancel'; // IE10 has prefixed support, and case-sensitive\n\n if (window.MSPointerEvent && !window.PointerEvent) {\n POINTER_ELEMENT_EVENTS = 'MSPointerDown';\n POINTER_WINDOW_EVENTS = 'MSPointerMove MSPointerUp MSPointerCancel';\n }\n /**\n * Pointer events input\n * @constructor\n * @extends Input\n */\n\n\n function PointerEventInput() {\n this.evEl = POINTER_ELEMENT_EVENTS;\n this.evWin = POINTER_WINDOW_EVENTS;\n Input.apply(this, arguments);\n this.store = this.manager.session.pointerEvents = [];\n }\n\n inherit(PointerEventInput, Input, {\n /**\n * handle mouse events\n * @param {Object} ev\n */\n handler: function PEhandler(ev) {\n var store = this.store;\n var removePointer = false;\n var eventTypeNormalized = ev.type.toLowerCase().replace('ms', '');\n var eventType = POINTER_INPUT_MAP[eventTypeNormalized];\n var pointerType = IE10_POINTER_TYPE_ENUM[ev.pointerType] || ev.pointerType;\n var isTouch = pointerType == INPUT_TYPE_TOUCH; // get index of the event in the store\n\n var storeIndex = inArray(store, ev.pointerId, 'pointerId'); // start and mouse must be down\n\n if (eventType & INPUT_START && (ev.button === 0 || isTouch)) {\n if (storeIndex < 0) {\n store.push(ev);\n storeIndex = store.length - 1;\n }\n } else if (eventType & (INPUT_END | INPUT_CANCEL)) {\n removePointer = true;\n } // it not found, so the pointer hasn't been down (so it's probably a hover)\n\n\n if (storeIndex < 0) {\n return;\n } // update the event in the store\n\n\n store[storeIndex] = ev;\n this.callback(this.manager, eventType, {\n pointers: store,\n changedPointers: [ev],\n pointerType: pointerType,\n srcEvent: ev\n });\n\n if (removePointer) {\n // remove from the store\n store.splice(storeIndex, 1);\n }\n }\n });\n var SINGLE_TOUCH_INPUT_MAP = {\n touchstart: INPUT_START,\n touchmove: INPUT_MOVE,\n touchend: INPUT_END,\n touchcancel: INPUT_CANCEL\n };\n var SINGLE_TOUCH_TARGET_EVENTS = 'touchstart';\n var SINGLE_TOUCH_WINDOW_EVENTS = 'touchstart touchmove touchend touchcancel';\n /**\n * Touch events input\n * @constructor\n * @extends Input\n */\n\n function SingleTouchInput() {\n this.evTarget = SINGLE_TOUCH_TARGET_EVENTS;\n this.evWin = SINGLE_TOUCH_WINDOW_EVENTS;\n this.started = false;\n Input.apply(this, arguments);\n }\n\n inherit(SingleTouchInput, Input, {\n handler: function TEhandler(ev) {\n var type = SINGLE_TOUCH_INPUT_MAP[ev.type]; // should we handle the touch events?\n\n if (type === INPUT_START) {\n this.started = true;\n }\n\n if (!this.started) {\n return;\n }\n\n var touches = normalizeSingleTouches.call(this, ev, type); // when done, reset the started state\n\n if (type & (INPUT_END | INPUT_CANCEL) && touches[0].length - touches[1].length === 0) {\n this.started = false;\n }\n\n this.callback(this.manager, type, {\n pointers: touches[0],\n changedPointers: touches[1],\n pointerType: INPUT_TYPE_TOUCH,\n srcEvent: ev\n });\n }\n });\n /**\n * @this {TouchInput}\n * @param {Object} ev\n * @param {Number} type flag\n * @returns {undefined|Array} [all, changed]\n */\n\n function normalizeSingleTouches(ev, type) {\n var all = toArray(ev.touches);\n var changed = toArray(ev.changedTouches);\n\n if (type & (INPUT_END | INPUT_CANCEL)) {\n all = uniqueArray(all.concat(changed), 'identifier', true);\n }\n\n return [all, changed];\n }\n\n var TOUCH_INPUT_MAP = {\n touchstart: INPUT_START,\n touchmove: INPUT_MOVE,\n touchend: INPUT_END,\n touchcancel: INPUT_CANCEL\n };\n var TOUCH_TARGET_EVENTS = 'touchstart touchmove touchend touchcancel';\n /**\n * Multi-user touch events input\n * @constructor\n * @extends Input\n */\n\n function TouchInput() {\n this.evTarget = TOUCH_TARGET_EVENTS;\n this.targetIds = {};\n Input.apply(this, arguments);\n }\n\n inherit(TouchInput, Input, {\n handler: function MTEhandler(ev) {\n var type = TOUCH_INPUT_MAP[ev.type];\n var touches = getTouches.call(this, ev, type);\n\n if (!touches) {\n return;\n }\n\n this.callback(this.manager, type, {\n pointers: touches[0],\n changedPointers: touches[1],\n pointerType: INPUT_TYPE_TOUCH,\n srcEvent: ev\n });\n }\n });\n /**\n * @this {TouchInput}\n * @param {Object} ev\n * @param {Number} type flag\n * @returns {undefined|Array} [all, changed]\n */\n\n function getTouches(ev, type) {\n var allTouches = toArray(ev.touches);\n var targetIds = this.targetIds; // when there is only one touch, the process can be simplified\n\n if (type & (INPUT_START | INPUT_MOVE) && allTouches.length === 1) {\n targetIds[allTouches[0].identifier] = true;\n return [allTouches, allTouches];\n }\n\n var i,\n targetTouches,\n changedTouches = toArray(ev.changedTouches),\n changedTargetTouches = [],\n target = this.target; // get target touches from touches\n\n targetTouches = allTouches.filter(function (touch) {\n return hasParent(touch.target, target);\n }); // collect touches\n\n if (type === INPUT_START) {\n i = 0;\n\n while (i < targetTouches.length) {\n targetIds[targetTouches[i].identifier] = true;\n i++;\n }\n } // filter changed touches to only contain touches that exist in the collected target ids\n\n\n i = 0;\n\n while (i < changedTouches.length) {\n if (targetIds[changedTouches[i].identifier]) {\n changedTargetTouches.push(changedTouches[i]);\n } // cleanup removed touches\n\n\n if (type & (INPUT_END | INPUT_CANCEL)) {\n delete targetIds[changedTouches[i].identifier];\n }\n\n i++;\n }\n\n if (!changedTargetTouches.length) {\n return;\n }\n\n return [// merge targetTouches with changedTargetTouches so it contains ALL touches, including 'end' and 'cancel'\n uniqueArray(targetTouches.concat(changedTargetTouches), 'identifier', true), changedTargetTouches];\n }\n /**\n * Combined touch and mouse input\n *\n * Touch has a higher priority then mouse, and while touching no mouse events are allowed.\n * This because touch devices also emit mouse events while doing a touch.\n *\n * @constructor\n * @extends Input\n */\n\n\n var DEDUP_TIMEOUT = 2500;\n var DEDUP_DISTANCE = 25;\n\n function TouchMouseInput() {\n Input.apply(this, arguments);\n var handler = bindFn(this.handler, this);\n this.touch = new TouchInput(this.manager, handler);\n this.mouse = new MouseInput(this.manager, handler);\n this.primaryTouch = null;\n this.lastTouches = [];\n }\n\n inherit(TouchMouseInput, Input, {\n /**\n * handle mouse and touch events\n * @param {Hammer} manager\n * @param {String} inputEvent\n * @param {Object} inputData\n */\n handler: function TMEhandler(manager, inputEvent, inputData) {\n var isTouch = inputData.pointerType == INPUT_TYPE_TOUCH,\n isMouse = inputData.pointerType == INPUT_TYPE_MOUSE;\n\n if (isMouse && inputData.sourceCapabilities && inputData.sourceCapabilities.firesTouchEvents) {\n return;\n } // when we're in a touch event, record touches to de-dupe synthetic mouse event\n\n\n if (isTouch) {\n recordTouches.call(this, inputEvent, inputData);\n } else if (isMouse && isSyntheticEvent.call(this, inputData)) {\n return;\n }\n\n this.callback(manager, inputEvent, inputData);\n },\n\n /**\n * remove the event listeners\n */\n destroy: function destroy() {\n this.touch.destroy();\n this.mouse.destroy();\n }\n });\n\n function recordTouches(eventType, eventData) {\n if (eventType & INPUT_START) {\n this.primaryTouch = eventData.changedPointers[0].identifier;\n setLastTouch.call(this, eventData);\n } else if (eventType & (INPUT_END | INPUT_CANCEL)) {\n setLastTouch.call(this, eventData);\n }\n }\n\n function setLastTouch(eventData) {\n var touch = eventData.changedPointers[0];\n\n if (touch.identifier === this.primaryTouch) {\n var lastTouch = {\n x: touch.clientX,\n y: touch.clientY\n };\n this.lastTouches.push(lastTouch);\n var lts = this.lastTouches;\n\n var removeLastTouch = function () {\n var i = lts.indexOf(lastTouch);\n\n if (i > -1) {\n lts.splice(i, 1);\n }\n };\n\n setTimeout(removeLastTouch, DEDUP_TIMEOUT);\n }\n }\n\n function isSyntheticEvent(eventData) {\n var x = eventData.srcEvent.clientX,\n y = eventData.srcEvent.clientY;\n\n for (var i = 0; i < this.lastTouches.length; i++) {\n var t = this.lastTouches[i];\n var dx = Math.abs(x - t.x),\n dy = Math.abs(y - t.y);\n\n if (dx <= DEDUP_DISTANCE && dy <= DEDUP_DISTANCE) {\n return true;\n }\n }\n\n return false;\n }\n\n var PREFIXED_TOUCH_ACTION = prefixed(TEST_ELEMENT.style, 'touchAction');\n var NATIVE_TOUCH_ACTION = PREFIXED_TOUCH_ACTION !== undefined; // magical touchAction value\n\n var TOUCH_ACTION_COMPUTE = 'compute';\n var TOUCH_ACTION_AUTO = 'auto';\n var TOUCH_ACTION_MANIPULATION = 'manipulation'; // not implemented\n\n var TOUCH_ACTION_NONE = 'none';\n var TOUCH_ACTION_PAN_X = 'pan-x';\n var TOUCH_ACTION_PAN_Y = 'pan-y';\n var TOUCH_ACTION_MAP = getTouchActionProps();\n /**\n * Touch Action\n * sets the touchAction property or uses the js alternative\n * @param {Manager} manager\n * @param {String} value\n * @constructor\n */\n\n function TouchAction(manager, value) {\n this.manager = manager;\n this.set(value);\n }\n\n TouchAction.prototype = {\n /**\n * set the touchAction value on the element or enable the polyfill\n * @param {String} value\n */\n set: function (value) {\n // find out the touch-action by the event handlers\n if (value == TOUCH_ACTION_COMPUTE) {\n value = this.compute();\n }\n\n if (NATIVE_TOUCH_ACTION && this.manager.element.style && TOUCH_ACTION_MAP[value]) {\n this.manager.element.style[PREFIXED_TOUCH_ACTION] = value;\n }\n\n this.actions = value.toLowerCase().trim();\n },\n\n /**\n * just re-set the touchAction value\n */\n update: function () {\n this.set(this.manager.options.touchAction);\n },\n\n /**\n * compute the value for the touchAction property based on the recognizer's settings\n * @returns {String} value\n */\n compute: function () {\n var actions = [];\n each(this.manager.recognizers, function (recognizer) {\n if (boolOrFn(recognizer.options.enable, [recognizer])) {\n actions = actions.concat(recognizer.getTouchAction());\n }\n });\n return cleanTouchActions(actions.join(' '));\n },\n\n /**\n * this method is called on each input cycle and provides the preventing of the browser behavior\n * @param {Object} input\n */\n preventDefaults: function (input) {\n var srcEvent = input.srcEvent;\n var direction = input.offsetDirection; // if the touch action did prevented once this session\n\n if (this.manager.session.prevented) {\n srcEvent.preventDefault();\n return;\n }\n\n var actions = this.actions;\n var hasNone = inStr(actions, TOUCH_ACTION_NONE) && !TOUCH_ACTION_MAP[TOUCH_ACTION_NONE];\n var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_Y];\n var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_X];\n\n if (hasNone) {\n //do not prevent defaults if this is a tap gesture\n var isTapPointer = input.pointers.length === 1;\n var isTapMovement = input.distance < 2;\n var isTapTouchTime = input.deltaTime < 250;\n\n if (isTapPointer && isTapMovement && isTapTouchTime) {\n return;\n }\n }\n\n if (hasPanX && hasPanY) {\n // `pan-x pan-y` means browser handles all scrolling/panning, do not prevent\n return;\n }\n\n if (hasNone || hasPanY && direction & DIRECTION_HORIZONTAL || hasPanX && direction & DIRECTION_VERTICAL) {\n return this.preventSrc(srcEvent);\n }\n },\n\n /**\n * call preventDefault to prevent the browser's default behavior (scrolling in most cases)\n * @param {Object} srcEvent\n */\n preventSrc: function (srcEvent) {\n this.manager.session.prevented = true;\n srcEvent.preventDefault();\n }\n };\n /**\n * when the touchActions are collected they are not a valid value, so we need to clean things up. *\n * @param {String} actions\n * @returns {*}\n */\n\n function cleanTouchActions(actions) {\n // none\n if (inStr(actions, TOUCH_ACTION_NONE)) {\n return TOUCH_ACTION_NONE;\n }\n\n var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X);\n var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y); // if both pan-x and pan-y are set (different recognizers\n // for different directions, e.g. horizontal pan but vertical swipe?)\n // we need none (as otherwise with pan-x pan-y combined none of these\n // recognizers will work, since the browser would handle all panning\n\n if (hasPanX && hasPanY) {\n return TOUCH_ACTION_NONE;\n } // pan-x OR pan-y\n\n\n if (hasPanX || hasPanY) {\n return hasPanX ? TOUCH_ACTION_PAN_X : TOUCH_ACTION_PAN_Y;\n } // manipulation\n\n\n if (inStr(actions, TOUCH_ACTION_MANIPULATION)) {\n return TOUCH_ACTION_MANIPULATION;\n }\n\n return TOUCH_ACTION_AUTO;\n }\n\n function getTouchActionProps() {\n if (!NATIVE_TOUCH_ACTION) {\n return false;\n }\n\n var touchMap = {};\n var cssSupports = window.CSS && window.CSS.supports;\n ['auto', 'manipulation', 'pan-y', 'pan-x', 'pan-x pan-y', 'none'].forEach(function (val) {\n // If css.supports is not supported but there is native touch-action assume it supports\n // all values. This is the case for IE 10 and 11.\n touchMap[val] = cssSupports ? window.CSS.supports('touch-action', val) : true;\n });\n return touchMap;\n }\n /**\n * Recognizer flow explained; *\n * All recognizers have the initial state of POSSIBLE when a input session starts.\n * The definition of a input session is from the first input until the last input, with all it's movement in it. *\n * Example session for mouse-input: mousedown -> mousemove -> mouseup\n *\n * On each recognizing cycle (see Manager.recognize) the .recognize() method is executed\n * which determines with state it should be.\n *\n * If the recognizer has the state FAILED, CANCELLED or RECOGNIZED (equals ENDED), it is reset to\n * POSSIBLE to give it another change on the next cycle.\n *\n * Possible\n * |\n * +-----+---------------+\n * | |\n * +-----+-----+ |\n * | | |\n * Failed Cancelled |\n * +-------+------+\n * | |\n * Recognized Began\n * |\n * Changed\n * |\n * Ended/Recognized\n */\n\n\n var STATE_POSSIBLE = 1;\n var STATE_BEGAN = 2;\n var STATE_CHANGED = 4;\n var STATE_ENDED = 8;\n var STATE_RECOGNIZED = STATE_ENDED;\n var STATE_CANCELLED = 16;\n var STATE_FAILED = 32;\n /**\n * Recognizer\n * Every recognizer needs to extend from this class.\n * @constructor\n * @param {Object} options\n */\n\n function Recognizer(options) {\n this.options = assign({}, this.defaults, options || {});\n this.id = uniqueId();\n this.manager = null; // default is enable true\n\n this.options.enable = ifUndefined(this.options.enable, true);\n this.state = STATE_POSSIBLE;\n this.simultaneous = {};\n this.requireFail = [];\n }\n\n Recognizer.prototype = {\n /**\n * @virtual\n * @type {Object}\n */\n defaults: {},\n\n /**\n * set options\n * @param {Object} options\n * @return {Recognizer}\n */\n set: function (options) {\n assign(this.options, options); // also update the touchAction, in case something changed about the directions/enabled state\n\n this.manager && this.manager.touchAction.update();\n return this;\n },\n\n /**\n * recognize simultaneous with an other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n recognizeWith: function (otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'recognizeWith', this)) {\n return this;\n }\n\n var simultaneous = this.simultaneous;\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n\n if (!simultaneous[otherRecognizer.id]) {\n simultaneous[otherRecognizer.id] = otherRecognizer;\n otherRecognizer.recognizeWith(this);\n }\n\n return this;\n },\n\n /**\n * drop the simultaneous link. it doesnt remove the link on the other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n dropRecognizeWith: function (otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'dropRecognizeWith', this)) {\n return this;\n }\n\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n delete this.simultaneous[otherRecognizer.id];\n return this;\n },\n\n /**\n * recognizer can only run when an other is failing\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n requireFailure: function (otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'requireFailure', this)) {\n return this;\n }\n\n var requireFail = this.requireFail;\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n\n if (inArray(requireFail, otherRecognizer) === -1) {\n requireFail.push(otherRecognizer);\n otherRecognizer.requireFailure(this);\n }\n\n return this;\n },\n\n /**\n * drop the requireFailure link. it does not remove the link on the other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n dropRequireFailure: function (otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'dropRequireFailure', this)) {\n return this;\n }\n\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n var index = inArray(this.requireFail, otherRecognizer);\n\n if (index > -1) {\n this.requireFail.splice(index, 1);\n }\n\n return this;\n },\n\n /**\n * has require failures boolean\n * @returns {boolean}\n */\n hasRequireFailures: function () {\n return this.requireFail.length > 0;\n },\n\n /**\n * if the recognizer can recognize simultaneous with an other recognizer\n * @param {Recognizer} otherRecognizer\n * @returns {Boolean}\n */\n canRecognizeWith: function (otherRecognizer) {\n return !!this.simultaneous[otherRecognizer.id];\n },\n\n /**\n * You should use `tryEmit` instead of `emit` directly to check\n * that all the needed recognizers has failed before emitting.\n * @param {Object} input\n */\n emit: function (input) {\n var self = this;\n var state = this.state;\n\n function emit(event) {\n self.manager.emit(event, input);\n } // 'panstart' and 'panmove'\n\n\n if (state < STATE_ENDED) {\n emit(self.options.event + stateStr(state));\n }\n\n emit(self.options.event); // simple 'eventName' events\n\n if (input.additionalEvent) {\n // additional event(panleft, panright, pinchin, pinchout...)\n emit(input.additionalEvent);\n } // panend and pancancel\n\n\n if (state >= STATE_ENDED) {\n emit(self.options.event + stateStr(state));\n }\n },\n\n /**\n * Check that all the require failure recognizers has failed,\n * if true, it emits a gesture event,\n * otherwise, setup the state to FAILED.\n * @param {Object} input\n */\n tryEmit: function (input) {\n if (this.canEmit()) {\n return this.emit(input);\n } // it's failing anyway\n\n\n this.state = STATE_FAILED;\n },\n\n /**\n * can we emit?\n * @returns {boolean}\n */\n canEmit: function () {\n var i = 0;\n\n while (i < this.requireFail.length) {\n if (!(this.requireFail[i].state & (STATE_FAILED | STATE_POSSIBLE))) {\n return false;\n }\n\n i++;\n }\n\n return true;\n },\n\n /**\n * update the recognizer\n * @param {Object} inputData\n */\n recognize: function (inputData) {\n // make a new copy of the inputData\n // so we can change the inputData without messing up the other recognizers\n var inputDataClone = assign({}, inputData); // is is enabled and allow recognizing?\n\n if (!boolOrFn(this.options.enable, [this, inputDataClone])) {\n this.reset();\n this.state = STATE_FAILED;\n return;\n } // reset when we've reached the end\n\n\n if (this.state & (STATE_RECOGNIZED | STATE_CANCELLED | STATE_FAILED)) {\n this.state = STATE_POSSIBLE;\n }\n\n this.state = this.process(inputDataClone); // the recognizer has recognized a gesture\n // so trigger an event\n\n if (this.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED | STATE_CANCELLED)) {\n this.tryEmit(inputDataClone);\n }\n },\n\n /**\n * return the state of the recognizer\n * the actual recognizing happens in this method\n * @virtual\n * @param {Object} inputData\n * @returns {Const} STATE\n */\n process: function (inputData) {},\n // jshint ignore:line\n\n /**\n * return the preferred touch-action\n * @virtual\n * @returns {Array}\n */\n getTouchAction: function () {},\n\n /**\n * called when the gesture isn't allowed to recognize\n * like when another is being recognized or it is disabled\n * @virtual\n */\n reset: function () {}\n };\n /**\n * get a usable string, used as event postfix\n * @param {Const} state\n * @returns {String} state\n */\n\n function stateStr(state) {\n if (state & STATE_CANCELLED) {\n return 'cancel';\n } else if (state & STATE_ENDED) {\n return 'end';\n } else if (state & STATE_CHANGED) {\n return 'move';\n } else if (state & STATE_BEGAN) {\n return 'start';\n }\n\n return '';\n }\n /**\n * direction cons to string\n * @param {Const} direction\n * @returns {String}\n */\n\n\n function directionStr(direction) {\n if (direction == DIRECTION_DOWN) {\n return 'down';\n } else if (direction == DIRECTION_UP) {\n return 'up';\n } else if (direction == DIRECTION_LEFT) {\n return 'left';\n } else if (direction == DIRECTION_RIGHT) {\n return 'right';\n }\n\n return '';\n }\n /**\n * get a recognizer by name if it is bound to a manager\n * @param {Recognizer|String} otherRecognizer\n * @param {Recognizer} recognizer\n * @returns {Recognizer}\n */\n\n\n function getRecognizerByNameIfManager(otherRecognizer, recognizer) {\n var manager = recognizer.manager;\n\n if (manager) {\n return manager.get(otherRecognizer);\n }\n\n return otherRecognizer;\n }\n /**\n * This recognizer is just used as a base for the simple attribute recognizers.\n * @constructor\n * @extends Recognizer\n */\n\n\n function AttrRecognizer() {\n Recognizer.apply(this, arguments);\n }\n\n inherit(AttrRecognizer, Recognizer, {\n /**\n * @namespace\n * @memberof AttrRecognizer\n */\n defaults: {\n /**\n * @type {Number}\n * @default 1\n */\n pointers: 1\n },\n\n /**\n * Used to check if it the recognizer receives valid input, like input.distance > 10.\n * @memberof AttrRecognizer\n * @param {Object} input\n * @returns {Boolean} recognized\n */\n attrTest: function (input) {\n var optionPointers = this.options.pointers;\n return optionPointers === 0 || input.pointers.length === optionPointers;\n },\n\n /**\n * Process the input and return the state for the recognizer\n * @memberof AttrRecognizer\n * @param {Object} input\n * @returns {*} State\n */\n process: function (input) {\n var state = this.state;\n var eventType = input.eventType;\n var isRecognized = state & (STATE_BEGAN | STATE_CHANGED);\n var isValid = this.attrTest(input); // on cancel input and we've recognized before, return STATE_CANCELLED\n\n if (isRecognized && (eventType & INPUT_CANCEL || !isValid)) {\n return state | STATE_CANCELLED;\n } else if (isRecognized || isValid) {\n if (eventType & INPUT_END) {\n return state | STATE_ENDED;\n } else if (!(state & STATE_BEGAN)) {\n return STATE_BEGAN;\n }\n\n return state | STATE_CHANGED;\n }\n\n return STATE_FAILED;\n }\n });\n /**\n * Pan\n * Recognized when the pointer is down and moved in the allowed direction.\n * @constructor\n * @extends AttrRecognizer\n */\n\n function PanRecognizer() {\n AttrRecognizer.apply(this, arguments);\n this.pX = null;\n this.pY = null;\n }\n\n inherit(PanRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof PanRecognizer\n */\n defaults: {\n event: 'pan',\n threshold: 10,\n pointers: 1,\n direction: DIRECTION_ALL\n },\n getTouchAction: function () {\n var direction = this.options.direction;\n var actions = [];\n\n if (direction & DIRECTION_HORIZONTAL) {\n actions.push(TOUCH_ACTION_PAN_Y);\n }\n\n if (direction & DIRECTION_VERTICAL) {\n actions.push(TOUCH_ACTION_PAN_X);\n }\n\n return actions;\n },\n directionTest: function (input) {\n var options = this.options;\n var hasMoved = true;\n var distance = input.distance;\n var direction = input.direction;\n var x = input.deltaX;\n var y = input.deltaY; // lock to axis?\n\n if (!(direction & options.direction)) {\n if (options.direction & DIRECTION_HORIZONTAL) {\n direction = x === 0 ? DIRECTION_NONE : x < 0 ? DIRECTION_LEFT : DIRECTION_RIGHT;\n hasMoved = x != this.pX;\n distance = Math.abs(input.deltaX);\n } else {\n direction = y === 0 ? DIRECTION_NONE : y < 0 ? DIRECTION_UP : DIRECTION_DOWN;\n hasMoved = y != this.pY;\n distance = Math.abs(input.deltaY);\n }\n }\n\n input.direction = direction;\n return hasMoved && distance > options.threshold && direction & options.direction;\n },\n attrTest: function (input) {\n return AttrRecognizer.prototype.attrTest.call(this, input) && (this.state & STATE_BEGAN || !(this.state & STATE_BEGAN) && this.directionTest(input));\n },\n emit: function (input) {\n this.pX = input.deltaX;\n this.pY = input.deltaY;\n var direction = directionStr(input.direction);\n\n if (direction) {\n input.additionalEvent = this.options.event + direction;\n }\n\n this._super.emit.call(this, input);\n }\n });\n /**\n * Pinch\n * Recognized when two or more pointers are moving toward (zoom-in) or away from each other (zoom-out).\n * @constructor\n * @extends AttrRecognizer\n */\n\n function PinchRecognizer() {\n AttrRecognizer.apply(this, arguments);\n }\n\n inherit(PinchRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof PinchRecognizer\n */\n defaults: {\n event: 'pinch',\n threshold: 0,\n pointers: 2\n },\n getTouchAction: function () {\n return [TOUCH_ACTION_NONE];\n },\n attrTest: function (input) {\n return this._super.attrTest.call(this, input) && (Math.abs(input.scale - 1) > this.options.threshold || this.state & STATE_BEGAN);\n },\n emit: function (input) {\n if (input.scale !== 1) {\n var inOut = input.scale < 1 ? 'in' : 'out';\n input.additionalEvent = this.options.event + inOut;\n }\n\n this._super.emit.call(this, input);\n }\n });\n /**\n * Press\n * Recognized when the pointer is down for x ms without any movement.\n * @constructor\n * @extends Recognizer\n */\n\n function PressRecognizer() {\n Recognizer.apply(this, arguments);\n this._timer = null;\n this._input = null;\n }\n\n inherit(PressRecognizer, Recognizer, {\n /**\n * @namespace\n * @memberof PressRecognizer\n */\n defaults: {\n event: 'press',\n pointers: 1,\n time: 251,\n // minimal time of the pointer to be pressed\n threshold: 9 // a minimal movement is ok, but keep it low\n\n },\n getTouchAction: function () {\n return [TOUCH_ACTION_AUTO];\n },\n process: function (input) {\n var options = this.options;\n var validPointers = input.pointers.length === options.pointers;\n var validMovement = input.distance < options.threshold;\n var validTime = input.deltaTime > options.time;\n this._input = input; // we only allow little movement\n // and we've reached an end event, so a tap is possible\n\n if (!validMovement || !validPointers || input.eventType & (INPUT_END | INPUT_CANCEL) && !validTime) {\n this.reset();\n } else if (input.eventType & INPUT_START) {\n this.reset();\n this._timer = setTimeoutContext(function () {\n this.state = STATE_RECOGNIZED;\n this.tryEmit();\n }, options.time, this);\n } else if (input.eventType & INPUT_END) {\n return STATE_RECOGNIZED;\n }\n\n return STATE_FAILED;\n },\n reset: function () {\n clearTimeout(this._timer);\n },\n emit: function (input) {\n if (this.state !== STATE_RECOGNIZED) {\n return;\n }\n\n if (input && input.eventType & INPUT_END) {\n this.manager.emit(this.options.event + 'up', input);\n } else {\n this._input.timeStamp = now();\n this.manager.emit(this.options.event, this._input);\n }\n }\n });\n /**\n * Rotate\n * Recognized when two or more pointer are moving in a circular motion.\n * @constructor\n * @extends AttrRecognizer\n */\n\n function RotateRecognizer() {\n AttrRecognizer.apply(this, arguments);\n }\n\n inherit(RotateRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof RotateRecognizer\n */\n defaults: {\n event: 'rotate',\n threshold: 0,\n pointers: 2\n },\n getTouchAction: function () {\n return [TOUCH_ACTION_NONE];\n },\n attrTest: function (input) {\n return this._super.attrTest.call(this, input) && (Math.abs(input.rotation) > this.options.threshold || this.state & STATE_BEGAN);\n }\n });\n /**\n * Swipe\n * Recognized when the pointer is moving fast (velocity), with enough distance in the allowed direction.\n * @constructor\n * @extends AttrRecognizer\n */\n\n function SwipeRecognizer() {\n AttrRecognizer.apply(this, arguments);\n }\n\n inherit(SwipeRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof SwipeRecognizer\n */\n defaults: {\n event: 'swipe',\n threshold: 10,\n velocity: 0.3,\n direction: DIRECTION_HORIZONTAL | DIRECTION_VERTICAL,\n pointers: 1\n },\n getTouchAction: function () {\n return PanRecognizer.prototype.getTouchAction.call(this);\n },\n attrTest: function (input) {\n var direction = this.options.direction;\n var velocity;\n\n if (direction & (DIRECTION_HORIZONTAL | DIRECTION_VERTICAL)) {\n velocity = input.overallVelocity;\n } else if (direction & DIRECTION_HORIZONTAL) {\n velocity = input.overallVelocityX;\n } else if (direction & DIRECTION_VERTICAL) {\n velocity = input.overallVelocityY;\n }\n\n return this._super.attrTest.call(this, input) && direction & input.offsetDirection && input.distance > this.options.threshold && input.maxPointers == this.options.pointers && abs(velocity) > this.options.velocity && input.eventType & INPUT_END;\n },\n emit: function (input) {\n var direction = directionStr(input.offsetDirection);\n\n if (direction) {\n this.manager.emit(this.options.event + direction, input);\n }\n\n this.manager.emit(this.options.event, input);\n }\n });\n /**\n * A tap is ecognized when the pointer is doing a small tap/click. Multiple taps are recognized if they occur\n * between the given interval and position. The delay option can be used to recognize multi-taps without firing\n * a single tap.\n *\n * The eventData from the emitted event contains the property `tapCount`, which contains the amount of\n * multi-taps being recognized.\n * @constructor\n * @extends Recognizer\n */\n\n function TapRecognizer() {\n Recognizer.apply(this, arguments); // previous time and center,\n // used for tap counting\n\n this.pTime = false;\n this.pCenter = false;\n this._timer = null;\n this._input = null;\n this.count = 0;\n }\n\n inherit(TapRecognizer, Recognizer, {\n /**\n * @namespace\n * @memberof PinchRecognizer\n */\n defaults: {\n event: 'tap',\n pointers: 1,\n taps: 1,\n interval: 300,\n // max time between the multi-tap taps\n time: 250,\n // max time of the pointer to be down (like finger on the screen)\n threshold: 9,\n // a minimal movement is ok, but keep it low\n posThreshold: 10 // a multi-tap can be a bit off the initial position\n\n },\n getTouchAction: function () {\n return [TOUCH_ACTION_MANIPULATION];\n },\n process: function (input) {\n var options = this.options;\n var validPointers = input.pointers.length === options.pointers;\n var validMovement = input.distance < options.threshold;\n var validTouchTime = input.deltaTime < options.time;\n this.reset();\n\n if (input.eventType & INPUT_START && this.count === 0) {\n return this.failTimeout();\n } // we only allow little movement\n // and we've reached an end event, so a tap is possible\n\n\n if (validMovement && validTouchTime && validPointers) {\n if (input.eventType != INPUT_END) {\n return this.failTimeout();\n }\n\n var validInterval = this.pTime ? input.timeStamp - this.pTime < options.interval : true;\n var validMultiTap = !this.pCenter || getDistance(this.pCenter, input.center) < options.posThreshold;\n this.pTime = input.timeStamp;\n this.pCenter = input.center;\n\n if (!validMultiTap || !validInterval) {\n this.count = 1;\n } else {\n this.count += 1;\n }\n\n this._input = input; // if tap count matches we have recognized it,\n // else it has began recognizing...\n\n var tapCount = this.count % options.taps;\n\n if (tapCount === 0) {\n // no failing requirements, immediately trigger the tap event\n // or wait as long as the multitap interval to trigger\n if (!this.hasRequireFailures()) {\n return STATE_RECOGNIZED;\n } else {\n this._timer = setTimeoutContext(function () {\n this.state = STATE_RECOGNIZED;\n this.tryEmit();\n }, options.interval, this);\n return STATE_BEGAN;\n }\n }\n }\n\n return STATE_FAILED;\n },\n failTimeout: function () {\n this._timer = setTimeoutContext(function () {\n this.state = STATE_FAILED;\n }, this.options.interval, this);\n return STATE_FAILED;\n },\n reset: function () {\n clearTimeout(this._timer);\n },\n emit: function () {\n if (this.state == STATE_RECOGNIZED) {\n this._input.tapCount = this.count;\n this.manager.emit(this.options.event, this._input);\n }\n }\n });\n /**\n * Simple way to create a manager with a default set of recognizers.\n * @param {HTMLElement} element\n * @param {Object} [options]\n * @constructor\n */\n\n function Hammer(element, options) {\n options = options || {};\n options.recognizers = ifUndefined(options.recognizers, Hammer.defaults.preset);\n return new Manager(element, options);\n }\n /**\n * @const {string}\n */\n\n\n Hammer.VERSION = '2.0.7';\n /**\n * default settings\n * @namespace\n */\n\n Hammer.defaults = {\n /**\n * set if DOM events are being triggered.\n * But this is slower and unused by simple implementations, so disabled by default.\n * @type {Boolean}\n * @default false\n */\n domEvents: false,\n\n /**\n * The value for the touchAction property/fallback.\n * When set to `compute` it will magically set the correct value based on the added recognizers.\n * @type {String}\n * @default compute\n */\n touchAction: TOUCH_ACTION_COMPUTE,\n\n /**\n * @type {Boolean}\n * @default true\n */\n enable: true,\n\n /**\n * EXPERIMENTAL FEATURE -- can be removed/changed\n * Change the parent input target element.\n * If Null, then it is being set the to main element.\n * @type {Null|EventTarget}\n * @default null\n */\n inputTarget: null,\n\n /**\n * force an input class\n * @type {Null|Function}\n * @default null\n */\n inputClass: null,\n\n /**\n * Default recognizer setup when calling `Hammer()`\n * When creating a new Manager these will be skipped.\n * @type {Array}\n */\n preset: [// RecognizerClass, options, [recognizeWith, ...], [requireFailure, ...]\n [RotateRecognizer, {\n enable: false\n }], [PinchRecognizer, {\n enable: false\n }, ['rotate']], [SwipeRecognizer, {\n direction: DIRECTION_HORIZONTAL\n }], [PanRecognizer, {\n direction: DIRECTION_HORIZONTAL\n }, ['swipe']], [TapRecognizer], [TapRecognizer, {\n event: 'doubletap',\n taps: 2\n }, ['tap']], [PressRecognizer]],\n\n /**\n * Some CSS properties can be used to improve the working of Hammer.\n * Add them to this method and they will be set when creating a new Manager.\n * @namespace\n */\n cssProps: {\n /**\n * Disables text selection to improve the dragging gesture. Mainly for desktop browsers.\n * @type {String}\n * @default 'none'\n */\n userSelect: 'none',\n\n /**\n * Disable the Windows Phone grippers when pressing an element.\n * @type {String}\n * @default 'none'\n */\n touchSelect: 'none',\n\n /**\n * Disables the default callout shown when you touch and hold a touch target.\n * On iOS, when you touch and hold a touch target such as a link, Safari displays\n * a callout containing information about the link. This property allows you to disable that callout.\n * @type {String}\n * @default 'none'\n */\n touchCallout: 'none',\n\n /**\n * Specifies whether zooming is enabled. Used by IE10>\n * @type {String}\n * @default 'none'\n */\n contentZooming: 'none',\n\n /**\n * Specifies that an entire element should be draggable instead of its contents. Mainly for desktop browsers.\n * @type {String}\n * @default 'none'\n */\n userDrag: 'none',\n\n /**\n * Overrides the highlight color shown when the user taps a link or a JavaScript\n * clickable element in iOS. This property obeys the alpha value, if specified.\n * @type {String}\n * @default 'rgba(0,0,0,0)'\n */\n tapHighlightColor: 'rgba(0,0,0,0)'\n }\n };\n var STOP = 1;\n var FORCED_STOP = 2;\n /**\n * Manager\n * @param {HTMLElement} element\n * @param {Object} [options]\n * @constructor\n */\n\n function Manager(element, options) {\n this.options = assign({}, Hammer.defaults, options || {});\n this.options.inputTarget = this.options.inputTarget || element;\n this.handlers = {};\n this.session = {};\n this.recognizers = [];\n this.oldCssProps = {};\n this.element = element;\n this.input = createInputInstance(this);\n this.touchAction = new TouchAction(this, this.options.touchAction);\n toggleCssProps(this, true);\n each(this.options.recognizers, function (item) {\n var recognizer = this.add(new item[0](item[1]));\n item[2] && recognizer.recognizeWith(item[2]);\n item[3] && recognizer.requireFailure(item[3]);\n }, this);\n }\n\n Manager.prototype = {\n /**\n * set options\n * @param {Object} options\n * @returns {Manager}\n */\n set: function (options) {\n assign(this.options, options); // Options that need a little more setup\n\n if (options.touchAction) {\n this.touchAction.update();\n }\n\n if (options.inputTarget) {\n // Clean up existing event listeners and reinitialize\n this.input.destroy();\n this.input.target = options.inputTarget;\n this.input.init();\n }\n\n return this;\n },\n\n /**\n * stop recognizing for this session.\n * This session will be discarded, when a new [input]start event is fired.\n * When forced, the recognizer cycle is stopped immediately.\n * @param {Boolean} [force]\n */\n stop: function (force) {\n this.session.stopped = force ? FORCED_STOP : STOP;\n },\n\n /**\n * run the recognizers!\n * called by the inputHandler function on every movement of the pointers (touches)\n * it walks through all the recognizers and tries to detect the gesture that is being made\n * @param {Object} inputData\n */\n recognize: function (inputData) {\n var session = this.session;\n\n if (session.stopped) {\n return;\n } // run the touch-action polyfill\n\n\n this.touchAction.preventDefaults(inputData);\n var recognizer;\n var recognizers = this.recognizers; // this holds the recognizer that is being recognized.\n // so the recognizer's state needs to be BEGAN, CHANGED, ENDED or RECOGNIZED\n // if no recognizer is detecting a thing, it is set to `null`\n\n var curRecognizer = session.curRecognizer; // reset when the last recognizer is recognized\n // or when we're in a new session\n\n if (!curRecognizer || curRecognizer && curRecognizer.state & STATE_RECOGNIZED) {\n curRecognizer = session.curRecognizer = null;\n }\n\n var i = 0;\n\n while (i < recognizers.length) {\n recognizer = recognizers[i]; // find out if we are allowed try to recognize the input for this one.\n // 1. allow if the session is NOT forced stopped (see the .stop() method)\n // 2. allow if we still haven't recognized a gesture in this session, or the this recognizer is the one\n // that is being recognized.\n // 3. allow if the recognizer is allowed to run simultaneous with the current recognized recognizer.\n // this can be setup with the `recognizeWith()` method on the recognizer.\n\n if (session.stopped !== FORCED_STOP && ( // 1\n !curRecognizer || recognizer == curRecognizer || // 2\n recognizer.canRecognizeWith(curRecognizer))) {\n // 3\n recognizer.recognize(inputData);\n } else {\n recognizer.reset();\n } // if the recognizer has been recognizing the input as a valid gesture, we want to store this one as the\n // current active recognizer. but only if we don't already have an active recognizer\n\n\n if (!curRecognizer && recognizer.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED)) {\n curRecognizer = session.curRecognizer = recognizer;\n }\n\n i++;\n }\n },\n\n /**\n * get a recognizer by its event name.\n * @param {Recognizer|String} recognizer\n * @returns {Recognizer|Null}\n */\n get: function (recognizer) {\n if (recognizer instanceof Recognizer) {\n return recognizer;\n }\n\n var recognizers = this.recognizers;\n\n for (var i = 0; i < recognizers.length; i++) {\n if (recognizers[i].options.event == recognizer) {\n return recognizers[i];\n }\n }\n\n return null;\n },\n\n /**\n * add a recognizer to the manager\n * existing recognizers with the same event name will be removed\n * @param {Recognizer} recognizer\n * @returns {Recognizer|Manager}\n */\n add: function (recognizer) {\n if (invokeArrayArg(recognizer, 'add', this)) {\n return this;\n } // remove existing\n\n\n var existing = this.get(recognizer.options.event);\n\n if (existing) {\n this.remove(existing);\n }\n\n this.recognizers.push(recognizer);\n recognizer.manager = this;\n this.touchAction.update();\n return recognizer;\n },\n\n /**\n * remove a recognizer by name or instance\n * @param {Recognizer|String} recognizer\n * @returns {Manager}\n */\n remove: function (recognizer) {\n if (invokeArrayArg(recognizer, 'remove', this)) {\n return this;\n }\n\n recognizer = this.get(recognizer); // let's make sure this recognizer exists\n\n if (recognizer) {\n var recognizers = this.recognizers;\n var index = inArray(recognizers, recognizer);\n\n if (index !== -1) {\n recognizers.splice(index, 1);\n this.touchAction.update();\n }\n }\n\n return this;\n },\n\n /**\n * bind event\n * @param {String} events\n * @param {Function} handler\n * @returns {EventEmitter} this\n */\n on: function (events, handler) {\n if (events === undefined) {\n return;\n }\n\n if (handler === undefined) {\n return;\n }\n\n var handlers = this.handlers;\n each(splitStr(events), function (event) {\n handlers[event] = handlers[event] || [];\n handlers[event].push(handler);\n });\n return this;\n },\n\n /**\n * unbind event, leave emit blank to remove all handlers\n * @param {String} events\n * @param {Function} [handler]\n * @returns {EventEmitter} this\n */\n off: function (events, handler) {\n if (events === undefined) {\n return;\n }\n\n var handlers = this.handlers;\n each(splitStr(events), function (event) {\n if (!handler) {\n delete handlers[event];\n } else {\n handlers[event] && handlers[event].splice(inArray(handlers[event], handler), 1);\n }\n });\n return this;\n },\n\n /**\n * emit event to the listeners\n * @param {String} event\n * @param {Object} data\n */\n emit: function (event, data) {\n // we also want to trigger dom events\n if (this.options.domEvents) {\n triggerDomEvent(event, data);\n } // no handlers, so skip it all\n\n\n var handlers = this.handlers[event] && this.handlers[event].slice();\n\n if (!handlers || !handlers.length) {\n return;\n }\n\n data.type = event;\n\n data.preventDefault = function () {\n data.srcEvent.preventDefault();\n };\n\n var i = 0;\n\n while (i < handlers.length) {\n handlers[i](data);\n i++;\n }\n },\n\n /**\n * destroy the manager and unbinds all events\n * it doesn't unbind dom events, that is the user own responsibility\n */\n destroy: function () {\n this.element && toggleCssProps(this, false);\n this.handlers = {};\n this.session = {};\n this.input.destroy();\n this.element = null;\n }\n };\n /**\n * add/remove the css properties as defined in manager.options.cssProps\n * @param {Manager} manager\n * @param {Boolean} add\n */\n\n function toggleCssProps(manager, add) {\n var element = manager.element;\n\n if (!element.style) {\n return;\n }\n\n var prop;\n each(manager.options.cssProps, function (value, name) {\n prop = prefixed(element.style, name);\n\n if (add) {\n manager.oldCssProps[prop] = element.style[prop];\n element.style[prop] = value;\n } else {\n element.style[prop] = manager.oldCssProps[prop] || '';\n }\n });\n\n if (!add) {\n manager.oldCssProps = {};\n }\n }\n /**\n * trigger dom event\n * @param {String} event\n * @param {Object} data\n */\n\n\n function triggerDomEvent(event, data) {\n var gestureEvent = document.createEvent('Event');\n gestureEvent.initEvent(event, true, true);\n gestureEvent.gesture = data;\n data.target.dispatchEvent(gestureEvent);\n }\n\n assign(Hammer, {\n INPUT_START: INPUT_START,\n INPUT_MOVE: INPUT_MOVE,\n INPUT_END: INPUT_END,\n INPUT_CANCEL: INPUT_CANCEL,\n STATE_POSSIBLE: STATE_POSSIBLE,\n STATE_BEGAN: STATE_BEGAN,\n STATE_CHANGED: STATE_CHANGED,\n STATE_ENDED: STATE_ENDED,\n STATE_RECOGNIZED: STATE_RECOGNIZED,\n STATE_CANCELLED: STATE_CANCELLED,\n STATE_FAILED: STATE_FAILED,\n DIRECTION_NONE: DIRECTION_NONE,\n DIRECTION_LEFT: DIRECTION_LEFT,\n DIRECTION_RIGHT: DIRECTION_RIGHT,\n DIRECTION_UP: DIRECTION_UP,\n DIRECTION_DOWN: DIRECTION_DOWN,\n DIRECTION_HORIZONTAL: DIRECTION_HORIZONTAL,\n DIRECTION_VERTICAL: DIRECTION_VERTICAL,\n DIRECTION_ALL: DIRECTION_ALL,\n Manager: Manager,\n Input: Input,\n TouchAction: TouchAction,\n TouchInput: TouchInput,\n MouseInput: MouseInput,\n PointerEventInput: PointerEventInput,\n TouchMouseInput: TouchMouseInput,\n SingleTouchInput: SingleTouchInput,\n Recognizer: Recognizer,\n AttrRecognizer: AttrRecognizer,\n Tap: TapRecognizer,\n Pan: PanRecognizer,\n Swipe: SwipeRecognizer,\n Pinch: PinchRecognizer,\n Rotate: RotateRecognizer,\n Press: PressRecognizer,\n on: addEventListeners,\n off: removeEventListeners,\n each: each,\n merge: merge,\n extend: extend,\n assign: assign,\n inherit: inherit,\n bindFn: bindFn,\n prefixed: prefixed\n }); // this prevents errors when Hammer is loaded in the presence of an AMD\n // style loader but by script tag, not by the loader.\n\n var freeGlobal = typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}; // jshint ignore:line\n\n freeGlobal.Hammer = Hammer;\n\n if (typeof define === 'function' && define.amd) {\n define(function () {\n return Hammer;\n });\n } else if (typeof module != 'undefined' && module.exports) {\n module.exports = Hammer;\n } else {\n window[exportName] = Hammer;\n }\n})(window, document, 'Hammer');\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_hammerjs@2.0.8@hammerjs/hammer.js\n// module id = 138\n// module chunks = 0","function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}\n\nvar Util = require('../util/common');\n\nvar Helper = require('../util/helper');\n\nvar Interaction = require('./base');\n\nvar Chart = require('../chart/chart');\n\nvar IntervalSelect =\n/*#__PURE__*/\nfunction (_Interaction) {\n _inheritsLoose(IntervalSelect, _Interaction);\n\n var _proto = IntervalSelect.prototype;\n\n _proto.getDefaultCfg = function getDefaultCfg() {\n var defaultCfg = _Interaction.prototype.getDefaultCfg.call(this);\n\n defaultCfg = Util.mix({}, defaultCfg, {\n startEvent: 'tap',\n processEvent: null,\n selectAxis: true,\n selectAxisStyle: {\n fontWeight: 'bold'\n },\n mode: 'shape',\n selectStyle: {\n fillOpacity: 1\n },\n unSelectStyle: {\n fillOpacity: 0.4\n },\n cancelable: true,\n defaultSelected: null // set the default selected shape\n\n });\n\n if (Util.isWx || Util.isMy) {\n // 小程序\n defaultCfg.startEvent = 'touchstart';\n defaultCfg.endEvent = 'touchend';\n }\n\n return defaultCfg;\n };\n\n function IntervalSelect(cfg, chart) {\n var _this;\n\n _this = _Interaction.call(this, cfg, chart) || this;\n var defaultSelected = _this.defaultSelected;\n\n if (Util.isObject(defaultSelected)) {\n var _this$_selectShapesBy = _this._selectShapesByData(defaultSelected),\n selectedShape = _this$_selectShapesBy.selectedShape,\n unSelectedShapes = _this$_selectShapesBy.unSelectedShapes;\n\n selectedShape && _this._selectShapes(selectedShape, unSelectedShapes);\n _this.selectedShape = selectedShape;\n }\n\n return _this;\n }\n\n _proto._getIntervalShapes = function _getIntervalShapes() {\n var children = [];\n var chart = this.chart;\n var geoms = chart.get('geoms');\n geoms.forEach(function (geom) {\n if (geom.get('type') === 'interval') {\n // only works for Interval geometry type\n var container = geom.get('container');\n children = children.concat(container.get('children'));\n }\n });\n return children;\n };\n\n _proto._resetShape = function _resetShape(shape) {\n var originAttrs = shape.get('_originAttrs');\n\n if (originAttrs) {\n shape._attrs.attrs = originAttrs;\n shape.set('_originAttrs', null);\n }\n };\n\n _proto._setEventData = function _setEventData(ev) {\n var selectedShape = this.selectedShape;\n\n if (selectedShape && !selectedShape.get('destroyed')) {\n ev.data = selectedShape.get('origin')._origin;\n ev.shapeInfo = selectedShape.get('origin');\n ev.shape = selectedShape;\n ev.selected = !!selectedShape.get('_selected');\n }\n };\n\n _proto._selectShapesByData = function _selectShapesByData(data) {\n var children = this._getIntervalShapes();\n\n var selectedShape = null;\n var unSelectedShapes = [];\n Util.each(children, function (child) {\n if (child.get('isShape') && child.get('className') === 'interval') {\n // get geometry's shape\n var shapeData = child.get('origin')._origin;\n\n if (Util.isObjectValueEqual(shapeData, data)) {\n selectedShape = child;\n } else {\n unSelectedShapes.push(child);\n }\n }\n });\n return {\n selectedShape: selectedShape,\n unSelectedShapes: unSelectedShapes\n };\n };\n\n _proto._selectShapes = function _selectShapes(selectedShape, unSelectedShapes) {\n var selectStyle = this.selectStyle,\n unSelectStyle = this.unSelectStyle,\n selectAxisStyle = this.selectAxisStyle,\n chart = this.chart;\n\n if (!selectedShape.get('_originAttrs')) {\n var originAttrs = Object.assign({}, selectedShape.attr());\n selectedShape.set('_originAttrs', originAttrs);\n }\n\n selectedShape.attr(selectStyle);\n Util.each(unSelectedShapes, function (child) {\n if (!child.get('_originAttrs')) {\n var _originAttrs = Object.assign({}, child.attr());\n\n child.set('_originAttrs', _originAttrs);\n } else {\n child.attr(child.get('_originAttrs'));\n }\n\n child.set('_selected', false);\n unSelectStyle && child.attr(unSelectStyle);\n });\n selectedShape.set('_selected', true);\n\n if (this.selectAxis) {\n if (this.selectedAxisShape) {\n this._resetShape(this.selectedAxisShape);\n }\n\n var xScale = chart.getXScale();\n\n var origin = selectedShape.get('origin')._origin;\n\n var _chart$get = chart.get('axisController'),\n frontPlot = _chart$get.frontPlot,\n backPlot = _chart$get.backPlot;\n\n var axisShape;\n Util.each(frontPlot.get('children').concat(backPlot.get('children')), function (s) {\n if (s.get('value') === xScale.scale(origin[xScale.field])) {\n axisShape = s;\n return false;\n }\n });\n this.selectedAxisShape = axisShape;\n axisShape.set('_originAttrs', Object.assign({}, axisShape.attr()));\n axisShape.attr(selectAxisStyle);\n }\n\n this.canvas.draw();\n };\n\n _proto.reset = function reset() {\n var self = this;\n\n if (!self.selectedShape) {\n return;\n }\n\n var children = self._getIntervalShapes();\n\n Util.each(children, function (child) {\n self._resetShape(child);\n\n child.set('_selected', false);\n });\n\n if (self.selectedAxisShape) {\n self._resetShape(self.selectedAxisShape);\n }\n\n self.canvas.draw();\n self.selectedShape = null;\n self.selectedAxisShape = null;\n };\n\n _proto.start = function start(ev) {\n var chart = this.chart;\n\n if (ev.type === 'tap') {\n ev.clientX = ev.center.x;\n ev.clientY = ev.center.y;\n }\n\n var _Util$createEvent = Util.createEvent(ev, chart),\n x = _Util$createEvent.x,\n y = _Util$createEvent.y;\n\n var mode = this.mode;\n\n var children = this._getIntervalShapes();\n\n var selectedShape;\n var unSelectedShapes = [];\n\n if (mode === 'shape') {\n var plot = chart.get('plotRange');\n\n if (!Helper.isPointInPlot({\n x: x,\n y: y\n }, plot)) {\n this.reset();\n return;\n }\n\n Util.each(children, function (child) {\n var box = child.getBBox();\n\n if (x >= box.x && x <= box.x + box.width && y >= box.y && y <= box.height + box.y) {\n // inbox\n selectedShape = child;\n } else {\n unSelectedShapes.push(child);\n }\n });\n } else if (mode === 'range') {\n var records = chart.getSnapRecords({\n x: x,\n y: y\n });\n\n if (!records.length) {\n this.reset();\n return;\n }\n\n var data = records[0]._origin;\n\n var result = this._selectShapesByData(data);\n\n selectedShape = result.selectedShape;\n unSelectedShapes = result.unSelectedShapes;\n }\n\n if (selectedShape) {\n this.selectedShape = selectedShape;\n\n if (selectedShape.get('_selected')) {\n if (!this.cancelable) {\n this._setEventData(ev);\n\n return;\n }\n\n this.reset();\n } else {\n this._selectShapes(selectedShape, unSelectedShapes);\n }\n } else {\n this.reset();\n }\n\n this._setEventData(ev);\n };\n\n _proto.end = function end(ev) {\n this._setEventData(ev);\n };\n\n return IntervalSelect;\n}(Interaction);\n\nChart.registerInteraction('interval-select', IntervalSelect);\nmodule.exports = IntervalSelect;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/interaction/interval-select.js\n// module id = 139\n// module chunks = 0","function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nvar Util = require('../util/common');\n\nvar Interaction = require('./base');\n\nvar Chart = require('../chart/chart');\n\nvar FilterPlugin = require('../plugin/filter');\n\nvar MoveMixin = require('./mixin/move');\n\nvar PressTooltipMixin = require('./mixin/press-tooltip');\n\nvar UpdateScaleMixin = require('./mixin/update-scale');\n\nvar Pan =\n/*#__PURE__*/\nfunction (_Interaction) {\n _inheritsLoose(Pan, _Interaction);\n\n var _proto = Pan.prototype;\n\n _proto.getDefaultCfg = function getDefaultCfg() {\n var defaultCfg = _Interaction.prototype.getDefaultCfg.call(this);\n\n defaultCfg = Util.mix({}, defaultCfg, {\n startEvent: 'panstart',\n processEvent: 'panmove',\n endEvent: 'panend',\n resetEvent: 'touchend',\n mode: 'x',\n panThreshold: 10,\n // Minimal pan distance required before recognizing\n pressThreshold: 9,\n // Minimal movement that is allowed while pressing\n pressTime: 251,\n // Minimal press time in ms\n currentDeltaX: null,\n currentDeltaY: null,\n limitRange: {},\n _timestamp: 0,\n lastPoint: null,\n _panCumulativeDelta: 0,\n speed: 5\n });\n\n if (Util.isWx || Util.isMy) {\n // 小程序\n defaultCfg.startEvent = 'touchstart';\n defaultCfg.processEvent = 'touchmove';\n defaultCfg.endEvent = 'touchend';\n }\n\n return defaultCfg;\n };\n\n function Pan(cfg, chart) {\n var _this;\n\n _this = _Interaction.call(this, cfg, chart) || this;\n\n var self = _assertThisInitialized(_assertThisInitialized(_this));\n\n var hammer = self.hammer,\n panThreshold = self.panThreshold;\n\n if (hammer) {\n hammer.get('pan').set({\n threshold: panThreshold\n });\n }\n\n chart.registerPlugins([FilterPlugin, {\n changeData: function changeData() {\n self.limitRange = {};\n },\n clear: function clear() {\n self.limitRange = {};\n }\n }]);\n Util.mix(_assertThisInitialized(_assertThisInitialized(_this)), UpdateScaleMixin, MoveMixin, PressTooltipMixin);\n\n _this._bindPress();\n\n return _this;\n }\n\n _proto.start = function start(e) {\n if (this.pressed) return;\n this.currentDeltaX = 0;\n this.currentDeltaY = 0;\n\n if (e.type === 'touchstart' || e.type === 'touchStart') {\n this.lastPoint = e.touches[0];\n }\n\n this._handleMove(e);\n };\n\n _proto.process = function process(e) {\n if (this.pressed) return;\n\n this._handleMove(e);\n };\n\n _proto.end = function end() {\n if (this.pressed) return;\n this.currentDeltaX = null;\n this.currentDeltaY = null;\n this.lastPoint = null;\n this._panCumulativeDelta = 0;\n };\n\n return Pan;\n}(Interaction);\n\nChart.registerInteraction('pan', Pan);\nmodule.exports = Pan;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/interaction/pan.js\n// module id = 140\n// module chunks = 0","/**\n * filter the data out of scale' range\n */\nvar Util = require('../util/common');\n\nvar TimeUtil = require('@antv/scale/lib/time-util');\n\nmodule.exports = {\n beforeGeomInit: function beforeGeomInit(chart) {\n chart.set('limitInPlot', true);\n var data = chart.get('filteredData');\n var colDefs = chart.get('colDefs');\n if (!colDefs) return data;\n var geoms = chart.get('geoms');\n var isSpecialGeom = false; // TODO\n\n Util.each(geoms, function (geom) {\n if (['area', 'line', 'path'].indexOf(geom.get('type')) !== -1) {\n isSpecialGeom = true;\n return false;\n }\n });\n var fields = [];\n Util.each(colDefs, function (def, key) {\n if (!isSpecialGeom && def && (def.values || def.min || def.max)) {\n fields.push(key);\n }\n });\n\n if (fields.length === 0) {\n return data;\n }\n\n var geomData = [];\n Util.each(data, function (obj) {\n var flag = true;\n Util.each(fields, function (field) {\n var value = obj[field];\n\n if (value) {\n var colDef = colDefs[field];\n\n if (colDef.type === 'timeCat') {\n var values = colDef.values;\n\n if (Util.isNumber(values[0])) {\n value = TimeUtil.toTimeStamp(value);\n }\n }\n\n if (colDef.values && colDef.values.indexOf(value) === -1 || colDef.min && value < colDef.min || colDef.max && value > colDef.max) {\n flag = false;\n }\n }\n });\n\n if (flag) {\n geomData.push(obj);\n }\n });\n chart.set('filteredData', geomData);\n }\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/plugin/filter.js\n// module id = 141\n// module chunks = 0","var Util = require('../../util/common');\n\nvar Helper = require('../helper');\n\nvar TOUCH_EVENTS = ['touchstart', 'touchmove', 'touchend', 'touchStart', 'touchMove', 'touchEnd'];\nvar DAY_TIMESTAMPS = 86400000;\nmodule.exports = {\n _handleMove: function _handleMove(e) {\n if (e.type === 'swipe' && e.deltaTime > 350) {\n // 区分 pan 操作和 swipe 操作\n return null;\n }\n\n var currentDeltaX = this.currentDeltaX,\n currentDeltaY = this.currentDeltaY,\n lastPoint = this.lastPoint;\n var deltaX;\n var deltaY;\n\n if (TOUCH_EVENTS.indexOf(e.type) !== -1) {\n // support touch and miniprogram\n var currentPoint = e.touches[0];\n deltaX = currentPoint.x - lastPoint.x;\n deltaY = currentPoint.y - lastPoint.y;\n this.lastPoint = currentPoint;\n } else if (currentDeltaX !== null && currentDeltaY !== null) {\n deltaX = e.deltaX - currentDeltaX;\n deltaY = e.deltaY - currentDeltaY;\n this.currentDeltaX = e.deltaX;\n this.currentDeltaY = e.deltaY;\n }\n\n if (Math.abs(deltaX) > 0 || Math.abs(deltaY) > 0) {\n var lastTimestamp = this._timestamp;\n var now = +new Date();\n\n if (now - lastTimestamp > 16) {\n this._doMove(deltaX, deltaY);\n\n this._timestamp = now;\n }\n }\n },\n _doMove: function _doMove(deltaX, deltaY) {\n var self = this;\n var mode = self.mode,\n chart = self.chart,\n limitRange = self.limitRange;\n var coord = chart.get('coord');\n var start = coord.start,\n end = coord.end;\n var data = chart.get('data');\n\n if (Util.directionEnabled(mode, 'x') && deltaX !== 0) {\n var xScale = chart.getXScale();\n var xField = xScale.field;\n\n if (!limitRange[xField]) {\n limitRange[xField] = Helper.getLimitRange(data, xScale);\n }\n\n var coordWidth = end.x - start.x;\n\n if (xScale.isCategory) {\n self._handleCatScale(xScale, deltaX, coordWidth);\n } else if (xScale.isLinear) {\n self._handleLinearScale(xScale, deltaX, coordWidth, 'x');\n }\n\n var xDef = Helper.getColDef(chart, xField);\n self.xRange = Helper.getFieldRange(xDef, limitRange[xField], xScale.type);\n }\n\n if (Util.directionEnabled(mode, 'y') && deltaY !== 0) {\n var coordHeight = start.y - end.y;\n var yScales = chart.getYScales();\n Util.each(yScales, function (yScale) {\n var yField = yScale.field;\n\n if (!limitRange[yField]) {\n limitRange[yField] = Helper.getLimitRange(data, yScale);\n }\n\n yScale.isLinear && self._handleLinearScale(yScale, deltaY, coordHeight, 'y');\n });\n var yDef = Helper.getColDef(chart, yScales[0].field);\n self.yRange = Helper.getFieldRange(yDef, limitRange[yScales[0].field], yScales[0].type);\n }\n\n chart.repaint();\n },\n _handleLinearScale: function _handleLinearScale(scale, delta, range, flag) {\n var field = scale.field,\n min = scale.min,\n max = scale.max;\n var limitRange = this.limitRange;\n if (min === limitRange[field].min && max === limitRange[field].max) return;\n var ratio = delta / range;\n var panValue = ratio * (max - min);\n var newMax = flag === 'x' ? max - panValue : max + panValue;\n var newMin = flag === 'x' ? min - panValue : min + panValue;\n\n if (limitRange[field] && !Util.isNil(limitRange[field].min) && newMin <= limitRange[field].min) {\n newMin = limitRange[field].min;\n newMax = max - min + newMin;\n }\n\n if (limitRange[field] && !Util.isNil(limitRange[field].max) && newMax >= limitRange[field].max) {\n newMax = limitRange[field].max;\n newMin = newMax - (max - min);\n }\n\n this.updateLinearScale(field, newMin, newMax);\n },\n _handleCatScale: function _handleCatScale(scale, delta, range) {\n var type = scale.type,\n field = scale.field,\n values = scale.values,\n ticks = scale.ticks;\n var originValues = this.limitRange[field];\n var lastValueIndex = originValues.length - 1;\n var currentLength = values.length;\n var speed = this.speed || 1;\n var step = range / (currentLength * speed);\n var firstIndex = originValues.indexOf(values[0]);\n var lastIndex = originValues.indexOf(values[currentLength - 1]);\n var minIndex = firstIndex;\n var maxIndex = lastIndex;\n var ratio = Math.abs(delta / range);\n var panStep = this.step || Math.max(1, parseInt(ratio * currentLength));\n this._panCumulativeDelta += delta;\n minIndex = this._panCumulativeDelta > step ? Math.max(0, minIndex - panStep) : this._panCumulativeDelta < -step ? Math.min(lastValueIndex - currentLength + 1, minIndex + panStep) : minIndex;\n maxIndex = Math.min(lastValueIndex, minIndex + currentLength - 1);\n\n if (minIndex === firstIndex && maxIndex === lastIndex) {\n return null;\n }\n\n var newValues = originValues.slice(minIndex, maxIndex + 1);\n var newTicks = null;\n\n if (type === 'timeCat') {\n var tickGap = ticks.length > 2 ? ticks[1] - ticks[0] : DAY_TIMESTAMPS;\n\n if (this._panCumulativeDelta > step) {\n for (var i = ticks[0] - tickGap; i >= newValues[0]; i -= tickGap) {\n ticks.unshift(i);\n }\n } else if (this._panCumulativeDelta < -step) {\n for (var _i = ticks[ticks.length - 1] + tickGap; _i <= newValues[newValues.length - 1]; _i += tickGap) {\n ticks.push(_i);\n }\n }\n\n newTicks = ticks;\n }\n\n this.updateCatScale(field, newValues, newTicks, originValues, minIndex, maxIndex);\n this._panCumulativeDelta = minIndex !== firstIndex ? 0 : this._panCumulativeDelta;\n }\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/interaction/mixin/move.js\n// module id = 142\n// module chunks = 0","var Util = require('../../util/common');\n\nmodule.exports = {\n _bindPress: function _bindPress() {\n var chart = this.chart,\n hammer = this.hammer,\n el = this.el,\n pressThreshold = this.pressThreshold,\n pressTime = this.pressTime;\n var tooltipController = chart.get('tooltipController');\n\n if (tooltipController && tooltipController.enable) {\n chart.set('_closeTooltip', true); // 用于交互的特殊标示量\n\n if (hammer) {\n hammer.get('press').set({\n threshold: pressThreshold,\n time: pressTime\n });\n hammer.on('press', Util.wrapBehavior(this, '_handlePress'));\n } else {\n Util.addEventListener(el, 'press', Util.wrapBehavior(this, '_handlePress'));\n }\n }\n },\n reset: function reset() {\n var chart = this.chart;\n var tooltipController = chart.get('tooltipController');\n\n if (tooltipController) {\n this.pressed = false;\n !tooltipController.cfg.alwaysShow && chart.hideTooltip();\n chart.set('_closeTooltip', true); // 用于交互的特殊标示量\n }\n },\n _handlePress: function _handlePress(e) {\n this.pressed = true;\n var center = e.center || e.touches[0];\n this.chart.set('_closeTooltip', false); // 用于交互的特殊标示量\n\n this.chart.showTooltip(center);\n }\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/interaction/mixin/press-tooltip.js\n// module id = 143\n// module chunks = 0","var Helper = require('../helper');\n\nvar Util = require('../../util/common');\n\nmodule.exports = {\n updateLinearScale: function updateLinearScale(field, min, max) {\n var chart = this.chart;\n var colDef = Helper.getColDef(chart, field);\n chart.scale(field, Util.mix({}, colDef, {\n min: min,\n max: max,\n nice: false\n }));\n },\n updateCatScale: function updateCatScale(field, newValues, ticks, values, minIndex, maxIndex) {\n var chart = this.chart;\n var colDef = Helper.getColDef(chart, field);\n chart.scale(field, Util.mix({}, colDef, {\n values: newValues,\n ticks: ticks,\n scale: function scale(value) {\n if (this.type === 'timeCat') {\n value = this._toTimeStamp(value);\n }\n\n var rangeMin = this.rangeMin();\n var rangeMax = this.rangeMax();\n var range = rangeMax - rangeMin;\n var min;\n var max;\n var percent;\n var currentIndex = values.indexOf(value); // 在完整数据集中的索引值\n\n if (currentIndex >= 0 && currentIndex < minIndex) {\n // 不在范围内,左侧数据\n max = rangeMin > 0 ? -0.1 : rangeMin - 0.1;\n min = max - range;\n percent = currentIndex / minIndex;\n } else if (currentIndex >= 0 && currentIndex > maxIndex) {\n // 不在范围内,右侧数据\n min = rangeMax < 1 ? 1.1 : rangeMax + 0.1;\n max = min + range;\n percent = (currentIndex - maxIndex - 1) / (values.length - 1 - maxIndex);\n } else {\n // 数值在当前 this.values 范围内\n var index = this.translate(value);\n\n if (this.values.length === 1) {\n percent = index;\n } else {\n percent = index / (this.values.length - 1);\n }\n\n min = rangeMin;\n max = rangeMax;\n }\n\n return min + percent * (max - min);\n },\n getTicks: function getTicks() {\n var self = this;\n var ticks = this.ticks;\n var rst = [];\n Util.each(ticks, function (tick) {\n var obj;\n\n if (Util.isObject(tick)) {\n obj = tick;\n } else {\n var value = self.scale(tick);\n value = value >= 0 && value <= 1 ? value : NaN;\n obj = {\n text: Util.isString(tick) ? tick : self.getText(tick),\n value: value,\n tickValue: tick // 用于坐标轴上文本动画时确定前后帧的对应关系\n\n };\n }\n\n rst.push(obj);\n });\n return rst;\n }\n }));\n }\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_@antv_f2@3.3.5@@antv/f2/lib/interaction/mixin/update-scale.js\n// module id = 144\n// module chunks = 0"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AC7DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACpOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AChGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AC93BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACzHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AClOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AC9HA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AC/7BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AC9MA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACVA;AACA;AACA;AACA;AACA;AACA;;;;;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACpMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACvNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACjDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACpDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AC5LA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACnDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AC9NA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACtVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACtEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACjEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACrJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACvFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AC1HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AC9GA;AACA;AACA;AACA;AACA;;;;;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AClHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AC3DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACpGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACnHA;AACA;AACA;AACA;AACA;AACA;;;;;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACzFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AC/dA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AC9DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACjFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AC3DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACpEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AC1EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACrfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AC3IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACnDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AC3EA;AACA;AACA;AACA;AACA;;;;;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACnEA;AACA;AACA;AACA;AACA;AACA;;;;;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACpHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACrDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AC/GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AChJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACxOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACnJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AC3NA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AClEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AC9YA;AACA;AACA;AACA;AACA;;;;;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AC9DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACtNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AC9HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACrFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AC/DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AC/DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACjEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AC3HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACpEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACzFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AC5RA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AC1CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AC1DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AC1EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACnCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACpEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACxJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AC/DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACjIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACxEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AClCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AC/DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACrFA;AACA;AACA;AACA;;;;;;ACHA;AACA;AACA;;;;;;ACFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACTA;AACA;AACA;;;;;;ACFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACxEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACtIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACxGA;AACA;AACA;;;;;;ACFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AC7MA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;;;;;;AClVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AC7EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACzDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AC9FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACtRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACxDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AC9GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACpDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACnnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACxeA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AC9KA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACtRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AC3fA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACzcA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACxIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AC5JA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACrIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACpEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AClJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AChLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AChiBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACjNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACrlFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;ACrSA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AClIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AC9DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AChKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;AC1CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;A","sourceRoot":""}
\No newline at end of file