{"mappings":"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","sources":["node_modules/@swc/helpers/lib/_array_with_holes.js","node_modules/@swc/helpers/lib/_iterable_to_array.js","node_modules/@swc/helpers/lib/_non_iterable_rest.js","node_modules/@swc/helpers/lib/_unsupported_iterable_to_array.js","node_modules/@swc/helpers/lib/_array_like_to_array.js","node_modules/@swc/helpers/lib/_array_without_holes.js","node_modules/@swc/helpers/lib/_non_iterable_spread.js","node_modules/@swc/helpers/lib/_define_property.js","node_modules/@swc/helpers/lib/_type_of.js","node_modules/@swc/helpers/lib/_set_prototype_of.js","node_modules/@swc/helpers/lib/_is_native_reflect_construct.js","node_modules/@swc/helpers/lib/_get_prototype_of.js","node_modules/@swc/helpers/lib/_possible_constructor_return.js","node_modules/@swc/helpers/lib/_assert_this_initialized.js","node_modules/@swc/helpers/lib/_super_prop_base.js","node_modules/@swc/helpers/lib/_construct.js","node_modules/@swc/helpers/lib/_is_native_function.js","node_modules/@swc/helpers/lib/_sliced_to_array.js","node_modules/@swc/helpers/lib/_to_consumable_array.js","node_modules/@swc/helpers/lib/_object_spread.js","node_modules/on-change/lib/constants.js","node_modules/on-change/lib/is-builtin.js","node_modules/on-change/lib/is-array.js","node_modules/on-change/lib/is-symbol.js","node_modules/on-change/lib/path.js","node_modules/on-change/lib/is-iterator.js","node_modules/on-change/lib/wrap-iterator.js","node_modules/on-change/lib/ignore-property.js","node_modules/@swc/helpers/lib/_class_call_check.js","node_modules/@swc/helpers/lib/_create_class.js","node_modules/on-change/lib/cache.js","<<jsx-config-pragma.js>>","node_modules/on-change/lib/is-object.js","node_modules/on-change/lib/smart-clone/diff/is-diff-certain.js","node_modules/on-change/lib/smart-clone/diff/is-diff-arrays.js","node_modules/on-change/lib/smart-clone/methods/object.js","node_modules/on-change/lib/smart-clone/methods/array.js","node_modules/on-change/lib/smart-clone/diff/is-diff-sets.js","node_modules/on-change/lib/smart-clone/methods/set.js","node_modules/on-change/lib/smart-clone/diff/is-diff-maps.js","node_modules/on-change/lib/smart-clone/methods/map.js","node_modules/on-change/lib/smart-clone/clone/clone-object.js","node_modules/@swc/helpers/lib/_inherits.js","node_modules/@swc/helpers/lib/_create_super.js","node_modules/on-change/lib/smart-clone/clone/clone-array.js","node_modules/on-change/lib/smart-clone/clone/clone-date.js","node_modules/on-change/lib/smart-clone/clone/clone-set.js","node_modules/on-change/lib/smart-clone/clone/clone-map.js","node_modules/on-change/lib/smart-clone/clone/clone-weakset.js","node_modules/on-change/lib/smart-clone/clone/clone-weakmap.js","node_modules/on-change/lib/smart-clone/smart-clone.js","node_modules/on-change/index.js","src/js/calc.js","node_modules/chart.js/dist/chart.esm.js","node_modules/@swc/helpers/lib/_get.js","node_modules/@swc/helpers/lib/_wrap_native_super.js","node_modules/chart.js/dist/chunks/helpers.segment.js","src/js/render.js","src/js/htmlTemplateForm.js","src/js/index.js"],"sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nexports.default = _arrayWithHoles;\nfunction _arrayWithHoles(arr) {\n    if (Array.isArray(arr)) return arr;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nexports.default = _iterableToArray;\nfunction _iterableToArray(iter) {\n    if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nexports.default = _nonIterableRest;\nfunction _nonIterableRest() {\n    throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nexports.default = _unsupportedIterableToArray;\nvar _arrayLikeToArray = _interopRequireDefault(require(\"./_array_like_to_array\"));\nfunction _unsupportedIterableToArray(o, minLen) {\n    if (!o) return;\n    if (typeof o === \"string\") return (0, _arrayLikeToArray).default(o, minLen);\n    var n = Object.prototype.toString.call(o).slice(8, -1);\n    if (n === \"Object\" && o.constructor) n = o.constructor.name;\n    if (n === \"Map\" || n === \"Set\") return Array.from(n);\n    if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return (0, _arrayLikeToArray).default(o, minLen);\n}\nfunction _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {\n        default: obj\n    };\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nexports.default = _arrayLikeToArray;\nfunction _arrayLikeToArray(arr, len) {\n    if (len == null || len > arr.length) len = arr.length;\n    for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];\n    return arr2;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nexports.default = _arrayWithoutHoles;\nvar _arrayLikeToArray = _interopRequireDefault(require(\"./_array_like_to_array\"));\nfunction _arrayWithoutHoles(arr) {\n    if (Array.isArray(arr)) return (0, _arrayLikeToArray).default(arr);\n}\nfunction _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {\n        default: obj\n    };\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nexports.default = _nonIterableSpread;\nfunction _nonIterableSpread() {\n    throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nexports.default = _defineProperty;\nfunction _defineProperty(obj, key, value) {\n    if (key in obj) {\n        Object.defineProperty(obj, key, {\n            value: value,\n            enumerable: true,\n            configurable: true,\n            writable: true\n        });\n    } else {\n        obj[key] = value;\n    }\n    return obj;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nexports.default = _typeof;\nfunction _typeof(obj) {\n    \"@swc/helpers - typeof\";\n    return obj && obj.constructor === Symbol ? \"symbol\" : typeof obj;\n}\n;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nexports.default = _setPrototypeOf;\nfunction _setPrototypeOf(o, p) {\n    return setPrototypeOf(o, p);\n}\nfunction setPrototypeOf(o1, p1) {\n    setPrototypeOf = Object.setPrototypeOf || function setPrototypeOf(o, p) {\n        o.__proto__ = p;\n        return o;\n    };\n    return setPrototypeOf(o1, p1);\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nexports.default = _isNativeReflectConstruct;\nfunction _isNativeReflectConstruct() {\n    if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n    if (Reflect.construct.sham) return false;\n    if (typeof Proxy === \"function\") return true;\n    try {\n        Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function() {}));\n        return true;\n    } catch (e) {\n        return false;\n    }\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nexports.default = _getPrototypeOf;\nfunction _getPrototypeOf(o) {\n    return getPrototypeOf(o);\n}\nfunction getPrototypeOf(o1) {\n    getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function getPrototypeOf(o) {\n        return o.__proto__ || Object.getPrototypeOf(o);\n    };\n    return getPrototypeOf(o1);\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nexports.default = _possibleConstructorReturn;\nvar _assertThisInitialized = _interopRequireDefault(require(\"./_assert_this_initialized\"));\nvar _typeOf = _interopRequireDefault(require(\"./_type_of\"));\nfunction _possibleConstructorReturn(self, call) {\n    if (call && ((0, _typeOf).default(call) === \"object\" || typeof call === \"function\")) {\n        return call;\n    }\n    return (0, _assertThisInitialized).default(self);\n}\nfunction _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {\n        default: obj\n    };\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nexports.default = _assertThisInitialized;\nfunction _assertThisInitialized(self) {\n    if (self === void 0) {\n        throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n    }\n    return self;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nexports.default = _superPropBase;\nvar _getPrototypeOf = _interopRequireDefault(require(\"./_get_prototype_of\"));\nfunction _superPropBase(object, property) {\n    while(!Object.prototype.hasOwnProperty.call(object, property)){\n        object = (0, _getPrototypeOf).default(object);\n        if (object === null) break;\n    }\n    return object;\n}\nfunction _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {\n        default: obj\n    };\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nexports.default = _construct;\nvar _setPrototypeOf = _interopRequireDefault(require(\"./_set_prototype_of\"));\nfunction _construct(Parent, args, Class) {\n    return construct.apply(null, arguments);\n}\nfunction _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {\n        default: obj\n    };\n}\nfunction isNativeReflectConstruct() {\n    if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n    if (Reflect.construct.sham) return false;\n    if (typeof Proxy === \"function\") return true;\n    try {\n        Date.prototype.toString.call(Reflect.construct(Date, [], function() {}));\n        return true;\n    } catch (e) {\n        return false;\n    }\n}\nfunction construct(Parent1, args1, Class1) {\n    if (isNativeReflectConstruct()) {\n        construct = Reflect.construct;\n    } else {\n        construct = function construct(Parent, args, Class) {\n            var a = [\n                null\n            ];\n            a.push.apply(a, args);\n            var Constructor = Function.bind.apply(Parent, a);\n            var instance = new Constructor();\n            if (Class) (0, _setPrototypeOf).default(instance, Class.prototype);\n            return instance;\n        };\n    }\n    return construct.apply(null, arguments);\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nexports.default = _isNativeFunction;\nfunction _isNativeFunction(fn) {\n    return Function.toString.call(fn).indexOf(\"[native code]\") !== -1;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nexports.default = _slicedToArray;\nvar _arrayWithHoles = _interopRequireDefault(require(\"./_array_with_holes\"));\nvar _iterableToArray = _interopRequireDefault(require(\"./_iterable_to_array\"));\nvar _nonIterableRest = _interopRequireDefault(require(\"./_non_iterable_rest\"));\nvar _unsupportedIterableToArray = _interopRequireDefault(require(\"./_unsupported_iterable_to_array\"));\nfunction _slicedToArray(arr, i) {\n    return (0, _arrayWithHoles).default(arr) || (0, _iterableToArray).default(arr, i) || (0, _unsupportedIterableToArray).default(arr, i) || (0, _nonIterableRest).default();\n}\nfunction _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {\n        default: obj\n    };\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nexports.default = _toConsumableArray;\nvar _arrayWithoutHoles = _interopRequireDefault(require(\"./_array_without_holes\"));\nvar _iterableToArray = _interopRequireDefault(require(\"./_iterable_to_array\"));\nvar _nonIterableSpread = _interopRequireDefault(require(\"./_non_iterable_spread\"));\nvar _unsupportedIterableToArray = _interopRequireDefault(require(\"./_unsupported_iterable_to_array\"));\nfunction _toConsumableArray(arr) {\n    return (0, _arrayWithoutHoles).default(arr) || (0, _iterableToArray).default(arr) || (0, _unsupportedIterableToArray).default(arr) || (0, _nonIterableSpread).default();\n}\nfunction _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {\n        default: obj\n    };\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nexports.default = _objectSpread;\nvar _defineProperty = _interopRequireDefault(require(\"./_define_property\"));\nfunction _objectSpread(target) {\n    for(var i = 1; i < arguments.length; i++){\n        var source = arguments[i] != null ? arguments[i] : {};\n        var ownKeys = Object.keys(source);\n        if (typeof Object.getOwnPropertySymbols === 'function') {\n            ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {\n                return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n            }));\n        }\n        ownKeys.forEach(function(key) {\n            (0, _defineProperty).default(target, key, source[key]);\n        });\n    }\n    return target;\n}\nfunction _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {\n        default: obj\n    };\n}\n","export const PATH_SEPARATOR = '.';\nexport const TARGET = Symbol('target');\nexport const UNSUBSCRIBE = Symbol('unsubscribe');\n","export function isBuiltinWithMutableMethods(value) {\n\treturn value instanceof Date\n\t\t|| value instanceof Set\n\t\t|| value instanceof Map\n\t\t|| value instanceof WeakSet\n\t\t|| value instanceof WeakMap\n\t\t|| ArrayBuffer.isView(value);\n}\n\nexport function isBuiltinWithoutMutableMethods(value) {\n\treturn (typeof value === 'object' ? value === null : typeof value !== 'function') || value instanceof RegExp;\n}\n","export default Array.isArray;\n","export default function isSymbol(value) {\n\treturn typeof value === 'symbol';\n}\n","import {PATH_SEPARATOR} from './constants.js';\nimport isArray from './is-array.js';\nimport isSymbol from './is-symbol.js';\n\nconst path = {\n\tafter: (path, subPath) => {\n\t\tif (isArray(path)) {\n\t\t\treturn path.slice(subPath.length);\n\t\t}\n\n\t\tif (subPath === '') {\n\t\t\treturn path;\n\t\t}\n\n\t\treturn path.slice(subPath.length + 1);\n\t},\n\tconcat: (path, key) => {\n\t\tif (isArray(path)) {\n\t\t\tpath = [...path];\n\n\t\t\tif (key) {\n\t\t\t\tpath.push(key);\n\t\t\t}\n\n\t\t\treturn path;\n\t\t}\n\n\t\tif (key && key.toString !== undefined) {\n\t\t\tif (path !== '') {\n\t\t\t\tpath += PATH_SEPARATOR;\n\t\t\t}\n\n\t\t\tif (isSymbol(key)) {\n\t\t\t\treturn path + key.toString();\n\t\t\t}\n\n\t\t\treturn path + key;\n\t\t}\n\n\t\treturn path;\n\t},\n\tinitial: path => {\n\t\tif (isArray(path)) {\n\t\t\treturn path.slice(0, -1);\n\t\t}\n\n\t\tif (path === '') {\n\t\t\treturn path;\n\t\t}\n\n\t\tconst index = path.lastIndexOf(PATH_SEPARATOR);\n\n\t\tif (index === -1) {\n\t\t\treturn '';\n\t\t}\n\n\t\treturn path.slice(0, index);\n\t},\n\tlast: path => {\n\t\tif (isArray(path)) {\n\t\t\treturn path[path.length - 1] || '';\n\t\t}\n\n\t\tif (path === '') {\n\t\t\treturn path;\n\t\t}\n\n\t\tconst index = path.lastIndexOf(PATH_SEPARATOR);\n\n\t\tif (index === -1) {\n\t\t\treturn path;\n\t\t}\n\n\t\treturn path.slice(index + 1);\n\t},\n\twalk: (path, callback) => {\n\t\tif (isArray(path)) {\n\t\t\tfor (const key of path) {\n\t\t\t\tcallback(key);\n\t\t\t}\n\t\t} else if (path !== '') {\n\t\t\tlet position = 0;\n\t\t\tlet index = path.indexOf(PATH_SEPARATOR);\n\n\t\t\tif (index === -1) {\n\t\t\t\tcallback(path);\n\t\t\t} else {\n\t\t\t\twhile (position < path.length) {\n\t\t\t\t\tif (index === -1) {\n\t\t\t\t\t\tindex = path.length;\n\t\t\t\t\t}\n\n\t\t\t\t\tcallback(path.slice(position, index));\n\n\t\t\t\t\tposition = index + 1;\n\t\t\t\t\tindex = path.indexOf(PATH_SEPARATOR, position);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\tget(object, path) {\n\t\tthis.walk(path, key => {\n\t\t\tif (object) {\n\t\t\t\tobject = object[key];\n\t\t\t}\n\t\t});\n\n\t\treturn object;\n\t},\n};\n\nexport default path;\n","export default function isIterator(value) {\n\treturn typeof value === 'object' && typeof value.next === 'function';\n}\n","import {TARGET} from './constants.js';\n\n// eslint-disable-next-line max-params\nexport default function wrapIterator(iterator, target, thisArg, applyPath, prepareValue) {\n\tconst originalNext = iterator.next;\n\n\tif (target.name === 'entries') {\n\t\titerator.next = function () {\n\t\t\tconst result = originalNext.call(this);\n\n\t\t\tif (result.done === false) {\n\t\t\t\tresult.value[0] = prepareValue(\n\t\t\t\t\tresult.value[0],\n\t\t\t\t\ttarget,\n\t\t\t\t\tresult.value[0],\n\t\t\t\t\tapplyPath,\n\t\t\t\t);\n\t\t\t\tresult.value[1] = prepareValue(\n\t\t\t\t\tresult.value[1],\n\t\t\t\t\ttarget,\n\t\t\t\t\tresult.value[0],\n\t\t\t\t\tapplyPath,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn result;\n\t\t};\n\t} else if (target.name === 'values') {\n\t\tconst keyIterator = thisArg[TARGET].keys();\n\n\t\titerator.next = function () {\n\t\t\tconst result = originalNext.call(this);\n\n\t\t\tif (result.done === false) {\n\t\t\t\tresult.value = prepareValue(\n\t\t\t\t\tresult.value,\n\t\t\t\t\ttarget,\n\t\t\t\t\tkeyIterator.next().value,\n\t\t\t\t\tapplyPath,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn result;\n\t\t};\n\t} else {\n\t\titerator.next = function () {\n\t\t\tconst result = originalNext.call(this);\n\n\t\t\tif (result.done === false) {\n\t\t\t\tresult.value = prepareValue(\n\t\t\t\t\tresult.value,\n\t\t\t\t\ttarget,\n\t\t\t\t\tresult.value,\n\t\t\t\t\tapplyPath,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn result;\n\t\t};\n\t}\n\n\treturn iterator;\n}\n","import isSymbol from './is-symbol.js';\n\nexport default function ignoreProperty(cache, options, property) {\n\treturn cache.isUnsubscribed\n\t\t|| (options.ignoreSymbols && isSymbol(property))\n\t\t|| (options.ignoreUnderscores && property.charAt(0) === '_')\n\t\t|| ('ignoreKeys' in options && options.ignoreKeys.includes(property));\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nexports.default = _classCallCheck;\nfunction _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n        throw new TypeError(\"Cannot call a class as a function\");\n    }\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nexports.default = _createClass;\nfunction _createClass(Constructor, protoProps, staticProps) {\n    if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) _defineProperties(Constructor, staticProps);\n    return Constructor;\n}\nfunction _defineProperties(target, props) {\n    for(var i = 0; i < props.length; i++){\n        var descriptor = props[i];\n        descriptor.enumerable = descriptor.enumerable || false;\n        descriptor.configurable = true;\n        if (\"value\" in descriptor) descriptor.writable = true;\n        Object.defineProperty(target, descriptor.key, descriptor);\n    }\n}\n","import path from './path.js';\n\n/**\n@class Cache\n@private\n*/\nexport default class Cache {\n\tconstructor(equals) {\n\t\tthis._equals = equals;\n\t\tthis._proxyCache = new WeakMap();\n\t\tthis._pathCache = new WeakMap();\n\t\tthis.isUnsubscribed = false;\n\t}\n\n\t_getDescriptorCache() {\n\t\tif (this._descriptorCache === undefined) {\n\t\t\tthis._descriptorCache = new WeakMap();\n\t\t}\n\n\t\treturn this._descriptorCache;\n\t}\n\n\t_getProperties(target) {\n\t\tconst descriptorCache = this._getDescriptorCache();\n\t\tlet properties = descriptorCache.get(target);\n\n\t\tif (properties === undefined) {\n\t\t\tproperties = {};\n\t\t\tdescriptorCache.set(target, properties);\n\t\t}\n\n\t\treturn properties;\n\t}\n\n\t_getOwnPropertyDescriptor(target, property) {\n\t\tif (this.isUnsubscribed) {\n\t\t\treturn Reflect.getOwnPropertyDescriptor(target, property);\n\t\t}\n\n\t\tconst properties = this._getProperties(target);\n\t\tlet descriptor = properties[property];\n\n\t\tif (descriptor === undefined) {\n\t\t\tdescriptor = Reflect.getOwnPropertyDescriptor(target, property);\n\t\t\tproperties[property] = descriptor;\n\t\t}\n\n\t\treturn descriptor;\n\t}\n\n\tgetProxy(target, path, handler, proxyTarget) {\n\t\tif (this.isUnsubscribed) {\n\t\t\treturn target;\n\t\t}\n\n\t\tconst reflectTarget = target[proxyTarget];\n\t\tconst source = reflectTarget || target;\n\n\t\tthis._pathCache.set(source, path);\n\n\t\tlet proxy = this._proxyCache.get(source);\n\n\t\tif (proxy === undefined) {\n\t\t\tproxy = reflectTarget === undefined\n\t\t\t\t? new Proxy(target, handler)\n\t\t\t\t: target;\n\n\t\t\tthis._proxyCache.set(source, proxy);\n\t\t}\n\n\t\treturn proxy;\n\t}\n\n\tgetPath(target) {\n\t\treturn this.isUnsubscribed ? undefined : this._pathCache.get(target);\n\t}\n\n\tisDetached(target, object) {\n\t\treturn !Object.is(target, path.get(object, this.getPath(target)));\n\t}\n\n\tdefineProperty(target, property, descriptor) {\n\t\tif (!Reflect.defineProperty(target, property, descriptor)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (!this.isUnsubscribed) {\n\t\t\tthis._getProperties(target)[property] = descriptor;\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tsetProperty(target, property, value, receiver, previous) { // eslint-disable-line max-params\n\t\tif (!this._equals(previous, value) || !(property in target)) {\n\t\t\tconst descriptor = this._getOwnPropertyDescriptor(target, property);\n\n\t\t\tif (descriptor !== undefined && 'set' in descriptor) {\n\t\t\t\treturn Reflect.set(target, property, value, receiver);\n\t\t\t}\n\n\t\t\treturn Reflect.set(target, property, value);\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tdeleteProperty(target, property, previous) {\n\t\tif (Reflect.deleteProperty(target, property)) {\n\t\t\tif (!this.isUnsubscribed) {\n\t\t\t\tconst properties = this._getDescriptorCache().get(target);\n\n\t\t\t\tif (properties) {\n\t\t\t\t\tdelete properties[property];\n\t\t\t\t\tthis._pathCache.delete(previous);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tisSameDescriptor(a, target, property) {\n\t\tconst b = this._getOwnPropertyDescriptor(target, property);\n\n\t\treturn a !== undefined\n\t\t\t&& b !== undefined\n\t\t\t&& Object.is(a.value, b.value)\n\t\t\t&& (a.writable || false) === (b.writable || false)\n\t\t\t&& (a.enumerable || false) === (b.enumerable || false)\n\t\t\t&& (a.configurable || false) === (b.configurable || false)\n\t\t\t&& a.get === b.get\n\t\t\t&& a.set === b.set;\n\t}\n\n\tisGetInvariant(target, property) {\n\t\tconst descriptor = this._getOwnPropertyDescriptor(target, property);\n\n\t\treturn descriptor !== undefined\n\t\t\t&& descriptor.configurable !== true\n\t\t\t&& descriptor.writable !== true;\n\t}\n\n\tunsubscribe() {\n\t\tthis._descriptorCache = null;\n\t\tthis._pathCache = null;\n\t\tthis._proxyCache = null;\n\t\tthis.isUnsubscribed = true;\n\t}\n}\n",null,"export default function isObject(value) {\n\treturn toString.call(value) === '[object Object]';\n}\n","export default function isDiffCertain() {\n\treturn true;\n}\n","export default function isDiffArrays(clone, value) {\n\treturn clone.length !== value.length || clone.some((item, index) => value[index] !== item);\n}\n","export const IMMUTABLE_OBJECT_METHODS = new Set([\n\t'hasOwnProperty',\n\t'isPrototypeOf',\n\t'propertyIsEnumerable',\n\t'toLocaleString',\n\t'toString',\n\t'valueOf',\n]);\n","import isDiffCertain from '../diff/is-diff-certain.js';\nimport isDiffArrays from '../diff/is-diff-arrays.js';\nimport {IMMUTABLE_OBJECT_METHODS} from './object.js';\n\nconst IMMUTABLE_ARRAY_METHODS = new Set([\n\t'concat',\n\t'includes',\n\t'indexOf',\n\t'join',\n\t'keys',\n\t'lastIndexOf',\n]);\n\nexport const MUTABLE_ARRAY_METHODS = {\n\tpush: isDiffCertain,\n\tpop: isDiffCertain,\n\tshift: isDiffCertain,\n\tunshift: isDiffCertain,\n\tcopyWithin: isDiffArrays,\n\treverse: isDiffArrays,\n\tsort: isDiffArrays,\n\tsplice: isDiffArrays,\n\tflat: isDiffArrays,\n\tfill: isDiffArrays,\n};\n\nexport const HANDLED_ARRAY_METHODS = new Set([\n\t...IMMUTABLE_OBJECT_METHODS,\n\t...IMMUTABLE_ARRAY_METHODS,\n\t...Object.keys(MUTABLE_ARRAY_METHODS),\n]);\n","export default function isDiffSets(clone, value) {\n\tif (clone.size !== value.size) {\n\t\treturn true;\n\t}\n\n\tfor (const element of clone) {\n\t\tif (!value.has(element)) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\treturn false;\n}\n","import isDiffSets from '../diff/is-diff-sets.js';\n\nexport const COLLECTION_ITERATOR_METHODS = [\n\t'keys',\n\t'values',\n\t'entries',\n];\n\nexport const IMMUTABLE_SET_METHODS = new Set([\n\t'has',\n\t'toString',\n]);\n\nexport const MUTABLE_SET_METHODS = {\n\tadd: isDiffSets,\n\tclear: isDiffSets,\n\tdelete: isDiffSets,\n\tforEach: isDiffSets,\n};\n\nexport const HANDLED_SET_METHODS = new Set([\n\t...IMMUTABLE_SET_METHODS,\n\t...Object.keys(MUTABLE_SET_METHODS),\n\t...COLLECTION_ITERATOR_METHODS,\n]);\n","export default function isDiffMaps(clone, value) {\n\tif (clone.size !== value.size) {\n\t\treturn true;\n\t}\n\n\tlet bValue;\n\tfor (const [key, aValue] of clone) {\n\t\tbValue = value.get(key);\n\n\t\tif (bValue !== aValue || (bValue === undefined && !value.has(key))) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\treturn false;\n}\n","import isDiffMaps from '../diff/is-diff-maps.js';\nimport {IMMUTABLE_SET_METHODS, COLLECTION_ITERATOR_METHODS} from './set.js';\n\nconst IMMUTABLE_MAP_METHODS = new Set([...IMMUTABLE_SET_METHODS, 'get']);\n\nexport const MUTABLE_MAP_METHODS = {\n\tset: isDiffMaps,\n\tclear: isDiffMaps,\n\tdelete: isDiffMaps,\n\tforEach: isDiffMaps,\n};\n\nexport const HANDLED_MAP_METHODS = new Set([\n\t...IMMUTABLE_MAP_METHODS,\n\t...Object.keys(MUTABLE_MAP_METHODS),\n\t...COLLECTION_ITERATOR_METHODS,\n]);\n","import path from '../../path.js';\nimport isArray from '../../is-array.js';\nimport isObject from '../../is-object.js';\nimport {MUTABLE_ARRAY_METHODS} from '../methods/array.js';\nimport {MUTABLE_SET_METHODS} from '../methods/set.js';\nimport {MUTABLE_MAP_METHODS} from '../methods/map.js';\nimport {IMMUTABLE_OBJECT_METHODS} from '../methods/object.js';\n\nexport default class CloneObject {\n\tconstructor(value, path, argumentsList, hasOnValidate) {\n\t\tthis._path = path;\n\t\tthis._isChanged = false;\n\t\tthis._clonedCache = new Set();\n\t\tthis._hasOnValidate = hasOnValidate;\n\t\tthis._changes = hasOnValidate ? [] : null;\n\n\t\tthis.clone = path === undefined ? value : this._shallowClone(value);\n\t}\n\n\tstatic isHandledMethod(name) {\n\t\treturn IMMUTABLE_OBJECT_METHODS.has(name);\n\t}\n\n\t_shallowClone(value) {\n\t\tlet clone = value;\n\n\t\tif (isObject(value)) {\n\t\t\tclone = {...value};\n\t\t} else if (isArray(value) || ArrayBuffer.isView(value)) {\n\t\t\tclone = [...value];\n\t\t} else if (value instanceof Date) {\n\t\t\tclone = new Date(value);\n\t\t} else if (value instanceof Set) {\n\t\t\tclone = new Set([...value].map(item => this._shallowClone(item)));\n\t\t} else if (value instanceof Map) {\n\t\t\tclone = new Map();\n\n\t\t\tfor (const [key, item] of value.entries()) {\n\t\t\t\tclone.set(key, this._shallowClone(item));\n\t\t\t}\n\t\t}\n\n\t\tthis._clonedCache.add(clone);\n\n\t\treturn clone;\n\t}\n\n\tpreferredThisArg(isHandledMethod, name, thisArg, thisProxyTarget) {\n\t\tif (isHandledMethod) {\n\t\t\tif (isArray(thisProxyTarget)) {\n\t\t\t\tthis._onIsChanged = MUTABLE_ARRAY_METHODS[name];\n\t\t\t} else if (thisProxyTarget instanceof Set) {\n\t\t\t\tthis._onIsChanged = MUTABLE_SET_METHODS[name];\n\t\t\t} else if (thisProxyTarget instanceof Map) {\n\t\t\t\tthis._onIsChanged = MUTABLE_MAP_METHODS[name];\n\t\t\t}\n\n\t\t\treturn thisProxyTarget;\n\t\t}\n\n\t\treturn thisArg;\n\t}\n\n\tupdate(fullPath, property, value) {\n\t\tconst changePath = path.after(fullPath, this._path);\n\n\t\tif (property !== 'length') {\n\t\t\tlet object = this.clone;\n\n\t\t\tpath.walk(changePath, key => {\n\t\t\t\tif (object && object[key]) {\n\t\t\t\t\tif (!this._clonedCache.has(object[key])) {\n\t\t\t\t\t\tobject[key] = this._shallowClone(object[key]);\n\t\t\t\t\t}\n\n\t\t\t\t\tobject = object[key];\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (this._hasOnValidate) {\n\t\t\t\tthis._changes.push({\n\t\t\t\t\tpath: changePath,\n\t\t\t\t\tproperty,\n\t\t\t\t\tprevious: value,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (object && object[property]) {\n\t\t\t\tobject[property] = value;\n\t\t\t}\n\t\t}\n\n\t\tthis._isChanged = true;\n\t}\n\n\tundo(object) {\n\t\tlet change;\n\n\t\tfor (let index = this._changes.length - 1; index !== -1; index--) {\n\t\t\tchange = this._changes[index];\n\n\t\t\tpath.get(object, change.path)[change.property] = change.previous;\n\t\t}\n\t}\n\n\tisChanged(value) {\n\t\treturn this._onIsChanged === undefined\n\t\t\t? this._isChanged\n\t\t\t: this._onIsChanged(this.clone, value);\n\t}\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nexports.default = _inherits;\nvar _setPrototypeOf = _interopRequireDefault(require(\"./_set_prototype_of\"));\nfunction _inherits(subClass, superClass) {\n    if (typeof superClass !== \"function\" && superClass !== null) {\n        throw new TypeError(\"Super expression must either be null or a function\");\n    }\n    subClass.prototype = Object.create(superClass && superClass.prototype, {\n        constructor: {\n            value: subClass,\n            writable: true,\n            configurable: true\n        }\n    });\n    if (superClass) (0, _setPrototypeOf).default(subClass, superClass);\n}\nfunction _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {\n        default: obj\n    };\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nexports.default = _createSuper;\nvar _isNativeReflectConstruct = _interopRequireDefault(require(\"./_is_native_reflect_construct\"));\nvar _getPrototypeOf = _interopRequireDefault(require(\"./_get_prototype_of\"));\nvar _possibleConstructorReturn = _interopRequireDefault(require(\"./_possible_constructor_return\"));\nfunction _createSuper(Derived) {\n    var hasNativeReflectConstruct = (0, _isNativeReflectConstruct).default();\n    return function _createSuperInternal() {\n        var Super = (0, _getPrototypeOf).default(Derived), result;\n        if (hasNativeReflectConstruct) {\n            var NewTarget = (0, _getPrototypeOf).default(this).constructor;\n            result = Reflect.construct(Super, arguments, NewTarget);\n        } else {\n            result = Super.apply(this, arguments);\n        }\n        return (0, _possibleConstructorReturn).default(this, result);\n    };\n}\nfunction _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {\n        default: obj\n    };\n}\n","import {HANDLED_ARRAY_METHODS} from '../methods/array.js';\nimport CloneObject from './clone-object.js';\n\nexport default class CloneArray extends CloneObject {\n\tstatic isHandledMethod(name) {\n\t\treturn HANDLED_ARRAY_METHODS.has(name);\n\t}\n}\n","import CloneObject from './clone-object.js';\n\nexport default class CloneDate extends CloneObject {\n\tundo(object) {\n\t\tobject.setTime(this.clone.getTime());\n\t}\n\n\tisChanged(value, equals) {\n\t\treturn !equals(this.clone.valueOf(), value.valueOf());\n\t}\n}\n","import {HANDLED_SET_METHODS} from '../methods/set.js';\nimport CloneObject from './clone-object.js';\n\nexport default class CloneSet extends CloneObject {\n\tstatic isHandledMethod(name) {\n\t\treturn HANDLED_SET_METHODS.has(name);\n\t}\n\n\tundo(object) {\n\t\tfor (const value of this.clone) {\n\t\t\tobject.add(value);\n\t\t}\n\n\t\tfor (const value of object) {\n\t\t\tif (!this.clone.has(value)) {\n\t\t\t\tobject.delete(value);\n\t\t\t}\n\t\t}\n\t}\n}\n\n","import {HANDLED_MAP_METHODS} from '../methods/map.js';\nimport CloneObject from './clone-object.js';\n\nexport default class CloneMap extends CloneObject {\n\tstatic isHandledMethod(name) {\n\t\treturn HANDLED_MAP_METHODS.has(name);\n\t}\n\n\tundo(object) {\n\t\tfor (const [key, value] of this.clone.entries()) {\n\t\t\tobject.set(key, value);\n\t\t}\n\n\t\tfor (const key of object.keys()) {\n\t\t\tif (!this.clone.has(key)) {\n\t\t\t\tobject.delete(key);\n\t\t\t}\n\t\t}\n\t}\n}\n","import CloneObject from './clone-object.js';\n\nexport default class CloneWeakSet extends CloneObject {\n\tconstructor(value, path, argumentsList, hasOnValidate) {\n\t\tsuper(undefined, path, argumentsList, hasOnValidate);\n\n\t\tthis._arg1 = argumentsList[0];\n\t\tthis._weakValue = value.has(this._arg1);\n\t}\n\n\tisChanged(value) {\n\t\treturn this._weakValue !== value.has(this._arg1);\n\t}\n\n\tundo(object) {\n\t\tif (this._weakValue && !object.has(this._arg1)) {\n\t\t\tobject.add(this._arg1);\n\t\t} else {\n\t\t\tobject.delete(this._arg1);\n\t\t}\n\t}\n}\n\n","import CloneObject from './clone-object.js';\n\nexport default class CloneWeakMap extends CloneObject {\n\tconstructor(value, path, argumentsList, hasOnValidate) {\n\t\tsuper(undefined, path, argumentsList, hasOnValidate);\n\n\t\tthis._weakKey = argumentsList[0];\n\t\tthis._weakHas = value.has(this._weakKey);\n\t\tthis._weakValue = value.get(this._weakKey);\n\t}\n\n\tisChanged(value) {\n\t\treturn this._weakValue !== value.get(this._weakKey);\n\t}\n\n\tundo(object) {\n\t\tconst weakHas = object.has(this._weakKey);\n\n\t\tif (this._weakHas && !weakHas) {\n\t\t\tobject.set(this._weakKey, this._weakValue);\n\t\t} else if (!this._weakHas && weakHas) {\n\t\t\tobject.delete(this._weakKey);\n\t\t} else if (this._weakValue !== object.get(this._weakKey)) {\n\t\t\tobject.set(this._weakKey, this._weakValue);\n\t\t}\n\t}\n}\n","import isArray from '../is-array.js';\nimport {isBuiltinWithMutableMethods} from '../is-builtin.js';\nimport isObject from '../is-object.js';\nimport CloneObject from './clone/clone-object.js';\nimport CloneArray from './clone/clone-array.js';\nimport CloneDate from './clone/clone-date.js';\nimport CloneSet from './clone/clone-set.js';\nimport CloneMap from './clone/clone-map.js';\nimport CloneWeakSet from './clone/clone-weakset.js';\nimport CloneWeakMap from './clone/clone-weakmap.js';\n\nexport default class SmartClone {\n\tconstructor(hasOnValidate) {\n\t\tthis._stack = [];\n\t\tthis._hasOnValidate = hasOnValidate;\n\t}\n\n\tstatic isHandledType(value) {\n\t\treturn isObject(value)\n\t\t\t|| isArray(value)\n\t\t\t|| isBuiltinWithMutableMethods(value);\n\t}\n\n\tstatic isHandledMethod(target, name) {\n\t\tif (isObject(target)) {\n\t\t\treturn CloneObject.isHandledMethod(name);\n\t\t}\n\n\t\tif (isArray(target)) {\n\t\t\treturn CloneArray.isHandledMethod(name);\n\t\t}\n\n\t\tif (target instanceof Set) {\n\t\t\treturn CloneSet.isHandledMethod(name);\n\t\t}\n\n\t\tif (target instanceof Map) {\n\t\t\treturn CloneMap.isHandledMethod(name);\n\t\t}\n\n\t\treturn isBuiltinWithMutableMethods(target);\n\t}\n\n\tget isCloning() {\n\t\treturn this._stack.length > 0;\n\t}\n\n\tstart(value, path, argumentsList) {\n\t\tlet CloneClass = CloneObject;\n\n\t\tif (isArray(value)) {\n\t\t\tCloneClass = CloneArray;\n\t\t} else if (value instanceof Date) {\n\t\t\tCloneClass = CloneDate;\n\t\t} else if (value instanceof Set) {\n\t\t\tCloneClass = CloneSet;\n\t\t} else if (value instanceof Map) {\n\t\t\tCloneClass = CloneMap;\n\t\t} else if (value instanceof WeakSet) {\n\t\t\tCloneClass = CloneWeakSet;\n\t\t} else if (value instanceof WeakMap) {\n\t\t\tCloneClass = CloneWeakMap;\n\t\t}\n\n\t\tthis._stack.push(new CloneClass(value, path, argumentsList, this._hasOnValidate));\n\t}\n\n\tupdate(fullPath, property, value) {\n\t\tthis._stack[this._stack.length - 1].update(fullPath, property, value);\n\t}\n\n\tpreferredThisArg(target, thisArg, thisProxyTarget) {\n\t\tconst {name} = target;\n\t\tconst isHandledMethod = SmartClone.isHandledMethod(thisProxyTarget, name);\n\n\t\treturn this._stack[this._stack.length - 1]\n\t\t\t.preferredThisArg(isHandledMethod, name, thisArg, thisProxyTarget);\n\t}\n\n\tisChanged(isMutable, value, equals) {\n\t\treturn this._stack[this._stack.length - 1].isChanged(isMutable, value, equals);\n\t}\n\n\tundo(object) {\n\t\tif (this._previousClone !== undefined) {\n\t\t\tthis._previousClone.undo(object);\n\t\t}\n\t}\n\n\tstop() {\n\t\tthis._previousClone = this._stack.pop();\n\n\t\treturn this._previousClone.clone;\n\t}\n}\n","/* eslint-disable unicorn/prefer-spread */\nimport {TARGET, UNSUBSCRIBE} from './lib/constants.js';\nimport {isBuiltinWithMutableMethods, isBuiltinWithoutMutableMethods} from './lib/is-builtin.js';\nimport path from './lib/path.js';\nimport isSymbol from './lib/is-symbol.js';\nimport isIterator from './lib/is-iterator.js';\nimport wrapIterator from './lib/wrap-iterator.js';\nimport ignoreProperty from './lib/ignore-property.js';\nimport Cache from './lib/cache.js';\nimport SmartClone from './lib/smart-clone/smart-clone.js';\n\nconst defaultOptions = {\n\tequals: Object.is,\n\tisShallow: false,\n\tpathAsArray: false,\n\tignoreSymbols: false,\n\tignoreUnderscores: false,\n\tignoreDetached: false,\n\tdetails: false,\n};\n\nconst onChange = (object, onChange, options = {}) => {\n\toptions = {\n\t\t...defaultOptions,\n\t\t...options,\n\t};\n\n\tconst proxyTarget = Symbol('ProxyTarget');\n\tconst {equals, isShallow, ignoreDetached, details} = options;\n\tconst cache = new Cache(equals);\n\tconst hasOnValidate = typeof options.onValidate === 'function';\n\tconst smartClone = new SmartClone(hasOnValidate);\n\n\t// eslint-disable-next-line max-params\n\tconst validate = (target, property, value, previous, applyData) => !hasOnValidate\n\t\t|| smartClone.isCloning\n\t\t|| options.onValidate(path.concat(cache.getPath(target), property), value, previous, applyData) === true;\n\n\tconst handleChangeOnTarget = (target, property, value, previous) => {\n\t\tif (\n\t\t\t!ignoreProperty(cache, options, property)\n\t\t\t&& !(ignoreDetached && cache.isDetached(target, object))\n\t\t) {\n\t\t\thandleChange(cache.getPath(target), property, value, previous);\n\t\t}\n\t};\n\n\t// eslint-disable-next-line max-params\n\tconst handleChange = (changePath, property, value, previous, applyData) => {\n\t\tif (smartClone.isCloning) {\n\t\t\tsmartClone.update(changePath, property, previous);\n\t\t} else {\n\t\t\tonChange(path.concat(changePath, property), value, previous, applyData);\n\t\t}\n\t};\n\n\tconst getProxyTarget = value => value\n\t\t? (value[proxyTarget] || value)\n\t\t: value;\n\n\tconst prepareValue = (value, target, property, basePath) => {\n\t\tif (\n\t\t\tisBuiltinWithoutMutableMethods(value)\n\t\t\t|| property === 'constructor'\n\t\t\t|| (isShallow && !SmartClone.isHandledMethod(target, property))\n\t\t\t|| ignoreProperty(cache, options, property)\n\t\t\t|| cache.isGetInvariant(target, property)\n\t\t\t|| (ignoreDetached && cache.isDetached(target, object))\n\t\t) {\n\t\t\treturn value;\n\t\t}\n\n\t\tif (basePath === undefined) {\n\t\t\tbasePath = cache.getPath(target);\n\t\t}\n\n\t\treturn cache.getProxy(value, path.concat(basePath, property), handler, proxyTarget);\n\t};\n\n\tconst handler = {\n\t\tget(target, property, receiver) {\n\t\t\tif (isSymbol(property)) {\n\t\t\t\tif (property === proxyTarget || property === TARGET) {\n\t\t\t\t\treturn target;\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\tproperty === UNSUBSCRIBE\n\t\t\t\t\t&& !cache.isUnsubscribed\n\t\t\t\t\t&& cache.getPath(target).length === 0\n\t\t\t\t) {\n\t\t\t\t\tcache.unsubscribe();\n\t\t\t\t\treturn target;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst value = isBuiltinWithMutableMethods(target)\n\t\t\t\t? Reflect.get(target, property)\n\t\t\t\t: Reflect.get(target, property, receiver);\n\n\t\t\treturn prepareValue(value, target, property);\n\t\t},\n\n\t\tset(target, property, value, receiver) {\n\t\t\tvalue = getProxyTarget(value);\n\n\t\t\tconst reflectTarget = target[proxyTarget] || target;\n\t\t\tconst previous = reflectTarget[property];\n\n\t\t\tif (equals(previous, value) && property in target) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tconst isValid = validate(target, property, value, previous);\n\n\t\t\tif (\n\t\t\t\tisValid\n\t\t\t\t&& cache.setProperty(reflectTarget, property, value, receiver, previous)\n\t\t\t) {\n\t\t\t\thandleChangeOnTarget(target, property, target[property], previous);\n\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\treturn !isValid;\n\t\t},\n\n\t\tdefineProperty(target, property, descriptor) {\n\t\t\tif (!cache.isSameDescriptor(descriptor, target, property)) {\n\t\t\t\tconst previous = target[property];\n\n\t\t\t\tif (\n\t\t\t\t\tvalidate(target, property, descriptor.value, previous)\n\t\t\t\t\t&& cache.defineProperty(target, property, descriptor, previous)\n\t\t\t\t) {\n\t\t\t\t\thandleChangeOnTarget(target, property, descriptor.value, previous);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn true;\n\t\t},\n\n\t\tdeleteProperty(target, property) {\n\t\t\tif (!Reflect.has(target, property)) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tconst previous = Reflect.get(target, property);\n\t\t\tconst isValid = validate(target, property, undefined, previous);\n\n\t\t\tif (\n\t\t\t\tisValid\n\t\t\t\t&& cache.deleteProperty(target, property, previous)\n\t\t\t) {\n\t\t\t\thandleChangeOnTarget(target, property, undefined, previous);\n\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\treturn !isValid;\n\t\t},\n\n\t\tapply(target, thisArg, argumentsList) {\n\t\t\tconst thisProxyTarget = thisArg[proxyTarget] || thisArg;\n\n\t\t\tif (cache.isUnsubscribed) {\n\t\t\t\treturn Reflect.apply(target, thisProxyTarget, argumentsList);\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\t(details === false\n\t\t\t\t\t|| (details !== true && !details.includes(target.name)))\n\t\t\t\t&& SmartClone.isHandledType(thisProxyTarget)\n\t\t\t) {\n\t\t\t\tlet applyPath = path.initial(cache.getPath(target));\n\t\t\t\tconst isHandledMethod = SmartClone.isHandledMethod(thisProxyTarget, target.name);\n\n\t\t\t\tsmartClone.start(thisProxyTarget, applyPath, argumentsList);\n\n\t\t\t\tlet result = Reflect.apply(\n\t\t\t\t\ttarget,\n\t\t\t\t\tsmartClone.preferredThisArg(target, thisArg, thisProxyTarget),\n\t\t\t\t\tisHandledMethod\n\t\t\t\t\t\t? argumentsList.map(argument => getProxyTarget(argument))\n\t\t\t\t\t\t: argumentsList,\n\t\t\t\t);\n\n\t\t\t\tconst isChanged = smartClone.isChanged(thisProxyTarget, equals);\n\t\t\t\tconst previous = smartClone.stop();\n\n\t\t\t\tif (SmartClone.isHandledType(result) && isHandledMethod) {\n\t\t\t\t\tif (thisArg instanceof Map && target.name === 'get') {\n\t\t\t\t\t\tapplyPath = path.concat(applyPath, argumentsList[0]);\n\t\t\t\t\t}\n\n\t\t\t\t\tresult = cache.getProxy(result, applyPath, handler);\n\t\t\t\t}\n\n\t\t\t\tif (isChanged) {\n\t\t\t\t\tconst applyData = {\n\t\t\t\t\t\tname: target.name,\n\t\t\t\t\t\targs: argumentsList,\n\t\t\t\t\t\tresult,\n\t\t\t\t\t};\n\t\t\t\t\tconst changePath = smartClone.isCloning\n\t\t\t\t\t\t? path.initial(applyPath)\n\t\t\t\t\t\t: applyPath;\n\t\t\t\t\tconst property = smartClone.isCloning\n\t\t\t\t\t\t? path.last(applyPath)\n\t\t\t\t\t\t: '';\n\n\t\t\t\t\tif (validate(path.get(object, changePath), property, thisProxyTarget, previous, applyData)) {\n\t\t\t\t\t\thandleChange(changePath, property, thisProxyTarget, previous, applyData);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsmartClone.undo(thisProxyTarget);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\t(thisArg instanceof Map || thisArg instanceof Set)\n\t\t\t\t\t&& isIterator(result)\n\t\t\t\t) {\n\t\t\t\t\treturn wrapIterator(result, target, thisArg, applyPath, prepareValue);\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t}\n\n\t\t\treturn Reflect.apply(target, thisArg, argumentsList);\n\t\t},\n\t};\n\n\tconst proxy = cache.getProxy(object, options.pathAsArray ? [] : '', handler);\n\tonChange = onChange.bind(proxy);\n\n\tif (hasOnValidate) {\n\t\toptions.onValidate = options.onValidate.bind(proxy);\n\t}\n\n\treturn proxy;\n};\n\nonChange.target = proxy => (proxy && proxy[TARGET]) || proxy;\nonChange.unsubscribe = proxy => proxy[UNSUBSCRIBE] || proxy;\n\nexport default onChange;\n","// Set format for results\nconst setFormatNumber = (dataFormat) => +Math.round(dataFormat);\n\n// PMI rate -- (PMI-Ипотечное страхование)\nconst getPmiResult = (excludeValue, mortgageAmount, pmiRate) => {\n  if (!excludeValue) {\n    const result = (mortgageAmount * pmiRate) / 12;\n    return setFormatNumber(result);\n  }\n\n  return 0;\n};\n\n// Property tax function\nconst propertyTaxCalc = (excludeValue, propertyTax) => {\n  if (!excludeValue) {\n    const result = propertyTax / 12;\n    return setFormatNumber(result);\n  }\n\n  return 0;\n};\n\n// Home insurance function\nconst homeInsuranceCalc = (excludeValue, homeInsurance) => {\n  if (!excludeValue) {\n    const result = homeInsurance / 12;\n    return setFormatNumber(result);\n  }\n\n  return 0;\n};\n\n// Monthly function\nconst monthlyPaymentCalc = (\n  mortgageAmount,\n  interestRateResult,\n  paymentsMonths,\n  pmiResult,\n  hoaAmount,\n  propertyTaxResult,\n  homeInsuranceResult,\n) => {\n  if (interestRateResult !== 0) {\n    const result =\n      (mortgageAmount * interestRateResult * (1 + interestRateResult) ** paymentsMonths) /\n        ((1 + interestRateResult) ** paymentsMonths - 1) +\n      pmiResult +\n      hoaAmount +\n      propertyTaxResult +\n      homeInsuranceResult;\n    return setFormatNumber(result);\n  }\n\n  return 0;\n};\n\n// Monthly PI function\nconst monthlyPICalc = (mortgageAmount, interestRateResult, paymentsMonths) => {\n  const result =\n    (mortgageAmount * interestRateResult * (1 + interestRateResult) ** paymentsMonths) /\n    ((1 + interestRateResult) ** paymentsMonths - 1);\n\n  return setFormatNumber(result);\n};\n\n// Total cost function\nconst totalCostAmountCalc = (monthlyPaymentResult, paymentsMonths) => {\n  const result = monthlyPaymentResult * paymentsMonths;\n\n  return setFormatNumber(result);\n};\n\nconst calc = (elements, watchedState) => {\n  const { form, result, donutData } = watchedState;\n  const { values, exclude } = form;\n\n  const homePrice = values['home-price'];\n  const downPayment = values['down-payment'];\n  const interestRate = values['interest-rate'];\n  const homeInsurance = values['home-insurance'];\n  const propertyTax = values['property-tax'];\n  const pmiRate = values['pmi-rate'];\n  const hoaAmount = values['hoa-dues'];\n  const { term } = values;\n  const monthInYear = 12;\n  const percentBase = 100;\n  const mortgageAmount = setFormatNumber(homePrice - downPayment); // основной кредит, основная сумма\n  const paymentsMonths = term * monthInYear; // количество месяцев\n  const interestRateResult = interestRate / percentBase / monthInYear; // процентная ставка по еж.платежу\n\n  const pmiResult = getPmiResult(exclude['pmi-rate'], mortgageAmount, pmiRate);\n\n  const homeInsuranceResult = homeInsuranceCalc(exclude['property-tax'], homeInsurance);\n  const propertyTaxResult = propertyTaxCalc(exclude['property-tax'], propertyTax);\n\n  const monthlyPaymentResult = monthlyPaymentCalc(\n    mortgageAmount,\n    interestRateResult,\n    paymentsMonths,\n    pmiResult,\n    hoaAmount,\n    propertyTaxResult,\n    homeInsuranceResult,\n  );\n  const monthlyPIResult = monthlyPICalc(mortgageAmount, interestRateResult, paymentsMonths);\n\n  const totalCostAmountResult = totalCostAmountCalc(monthlyPaymentResult, paymentsMonths);\n\n  // * RESULTS\n  // calcMortgageAmount - сумма ипотеки\n  result['mortgage-amount'] = mortgageAmount;\n  // calcMonthlyPayment - ежемесячный платеж\n  result['monthly-payment'] = monthlyPaymentResult;\n  // calcTotalCost - общая сумма выплат\n  result['mortgage-insurance'] = pmiResult;\n  // Total Cost Of Mortgage\n  result['mortgage-total-cost'] = totalCostAmountResult;\n  // donut data list\n  donutData.forEach(({ key }, index) => {\n    switch (key) {\n      case 'pi':\n        donutData[index].data = monthlyPIResult;\n        break;\n      case 'insurance':\n        donutData[index].data = homeInsuranceResult;\n        break;\n      case 'taxes':\n        donutData[index].data = propertyTaxResult;\n        break;\n      case 'pmi':\n        donutData[index].data = pmiResult;\n        break;\n      case 'hoa':\n        donutData[index].data = hoaAmount;\n        break;\n\n      default:\n        break;\n    }\n  });\n};\n\nexport default calc;\n","/*!\n * Chart.js v3.8.0\n * https://www.chartjs.org\n * (c) 2022 Chart.js Contributors\n * Released under the MIT License\n */\nimport { r as requestAnimFrame, a as resolve, e as effects, c as color, d as defaults, i as isObject, b as isArray, v as valueOrDefault, u as unlistenArrayEvents, l as listenArrayEvents, f as resolveObjectKey, g as isNumberFinite, h as createContext, j as defined, s as sign, k as isNullOrUndef, _ as _arrayUnique, t as toRadians, m as toPercentage, n as toDimension, T as TAU, o as formatNumber, p as _angleBetween, H as HALF_PI, P as PI, q as isNumber, w as _limitValue, x as _lookupByKey, y as _parseObjectDataRadialScale, z as getRelativePosition, A as _rlookupByKey, B as _isPointInArea, C as getAngleFromPoint, D as toPadding, E as each, F as getMaximumSize, G as _getParentNode, I as readUsedSize, J as throttled, K as supportsEventListenerOptions, L as _isDomSupported, M as log10, N as _factorize, O as finiteOrDefault, Q as callback, R as _addGrace, S as toDegrees, U as _measureText, V as _int16Range, W as _alignPixel, X as clipArea, Y as renderText, Z as unclipArea, $ as toFont, a0 as _toLeftRightCenter, a1 as _alignStartEnd, a2 as overrides, a3 as merge, a4 as _capitalize, a5 as descriptors, a6 as isFunction, a7 as _attachContext, a8 as _createResolver, a9 as _descriptors, aa as mergeIf, ab as uid, ac as debounce, ad as retinaScale, ae as clearCanvas, af as setsEqual, ag as _elementsEqual, ah as _isClickEvent, ai as _isBetween, aj as _readValueToProps, ak as _updateBezierControlPoints, al as _computeSegments, am as _boundSegments, an as _steppedInterpolation, ao as _bezierInterpolation, ap as _pointInLine, aq as _steppedLineTo, ar as _bezierCurveTo, as as drawPoint, at as addRoundedRectPath, au as toTRBL, av as toTRBLCorners, aw as _boundSegment, ax as _normalizeAngle, ay as getRtlAdapter, az as overrideTextDirection, aA as _textX, aB as restoreTextDirection, aC as noop, aD as distanceBetweenPoints, aE as _setMinAndMaxByKey, aF as niceNum, aG as almostWhole, aH as almostEquals, aI as _decimalPlaces, aJ as _longestText, aK as _filterBetween, aL as _lookup } from './chunks/helpers.segment.js';\nexport { d as defaults } from './chunks/helpers.segment.js';\n\nclass Animator {\n  constructor() {\n    this._request = null;\n    this._charts = new Map();\n    this._running = false;\n    this._lastDate = undefined;\n  }\n  _notify(chart, anims, date, type) {\n    const callbacks = anims.listeners[type];\n    const numSteps = anims.duration;\n    callbacks.forEach(fn => fn({\n      chart,\n      initial: anims.initial,\n      numSteps,\n      currentStep: Math.min(date - anims.start, numSteps)\n    }));\n  }\n  _refresh() {\n    if (this._request) {\n      return;\n    }\n    this._running = true;\n    this._request = requestAnimFrame.call(window, () => {\n      this._update();\n      this._request = null;\n      if (this._running) {\n        this._refresh();\n      }\n    });\n  }\n  _update(date = Date.now()) {\n    let remaining = 0;\n    this._charts.forEach((anims, chart) => {\n      if (!anims.running || !anims.items.length) {\n        return;\n      }\n      const items = anims.items;\n      let i = items.length - 1;\n      let draw = false;\n      let item;\n      for (; i >= 0; --i) {\n        item = items[i];\n        if (item._active) {\n          if (item._total > anims.duration) {\n            anims.duration = item._total;\n          }\n          item.tick(date);\n          draw = true;\n        } else {\n          items[i] = items[items.length - 1];\n          items.pop();\n        }\n      }\n      if (draw) {\n        chart.draw();\n        this._notify(chart, anims, date, 'progress');\n      }\n      if (!items.length) {\n        anims.running = false;\n        this._notify(chart, anims, date, 'complete');\n        anims.initial = false;\n      }\n      remaining += items.length;\n    });\n    this._lastDate = date;\n    if (remaining === 0) {\n      this._running = false;\n    }\n  }\n  _getAnims(chart) {\n    const charts = this._charts;\n    let anims = charts.get(chart);\n    if (!anims) {\n      anims = {\n        running: false,\n        initial: true,\n        items: [],\n        listeners: {\n          complete: [],\n          progress: []\n        }\n      };\n      charts.set(chart, anims);\n    }\n    return anims;\n  }\n  listen(chart, event, cb) {\n    this._getAnims(chart).listeners[event].push(cb);\n  }\n  add(chart, items) {\n    if (!items || !items.length) {\n      return;\n    }\n    this._getAnims(chart).items.push(...items);\n  }\n  has(chart) {\n    return this._getAnims(chart).items.length > 0;\n  }\n  start(chart) {\n    const anims = this._charts.get(chart);\n    if (!anims) {\n      return;\n    }\n    anims.running = true;\n    anims.start = Date.now();\n    anims.duration = anims.items.reduce((acc, cur) => Math.max(acc, cur._duration), 0);\n    this._refresh();\n  }\n  running(chart) {\n    if (!this._running) {\n      return false;\n    }\n    const anims = this._charts.get(chart);\n    if (!anims || !anims.running || !anims.items.length) {\n      return false;\n    }\n    return true;\n  }\n  stop(chart) {\n    const anims = this._charts.get(chart);\n    if (!anims || !anims.items.length) {\n      return;\n    }\n    const items = anims.items;\n    let i = items.length - 1;\n    for (; i >= 0; --i) {\n      items[i].cancel();\n    }\n    anims.items = [];\n    this._notify(chart, anims, Date.now(), 'complete');\n  }\n  remove(chart) {\n    return this._charts.delete(chart);\n  }\n}\nvar animator = new Animator();\n\nconst transparent = 'transparent';\nconst interpolators = {\n  boolean(from, to, factor) {\n    return factor > 0.5 ? to : from;\n  },\n  color(from, to, factor) {\n    const c0 = color(from || transparent);\n    const c1 = c0.valid && color(to || transparent);\n    return c1 && c1.valid\n      ? c1.mix(c0, factor).hexString()\n      : to;\n  },\n  number(from, to, factor) {\n    return from + (to - from) * factor;\n  }\n};\nclass Animation {\n  constructor(cfg, target, prop, to) {\n    const currentValue = target[prop];\n    to = resolve([cfg.to, to, currentValue, cfg.from]);\n    const from = resolve([cfg.from, currentValue, to]);\n    this._active = true;\n    this._fn = cfg.fn || interpolators[cfg.type || typeof from];\n    this._easing = effects[cfg.easing] || effects.linear;\n    this._start = Math.floor(Date.now() + (cfg.delay || 0));\n    this._duration = this._total = Math.floor(cfg.duration);\n    this._loop = !!cfg.loop;\n    this._target = target;\n    this._prop = prop;\n    this._from = from;\n    this._to = to;\n    this._promises = undefined;\n  }\n  active() {\n    return this._active;\n  }\n  update(cfg, to, date) {\n    if (this._active) {\n      this._notify(false);\n      const currentValue = this._target[this._prop];\n      const elapsed = date - this._start;\n      const remain = this._duration - elapsed;\n      this._start = date;\n      this._duration = Math.floor(Math.max(remain, cfg.duration));\n      this._total += elapsed;\n      this._loop = !!cfg.loop;\n      this._to = resolve([cfg.to, to, currentValue, cfg.from]);\n      this._from = resolve([cfg.from, currentValue, to]);\n    }\n  }\n  cancel() {\n    if (this._active) {\n      this.tick(Date.now());\n      this._active = false;\n      this._notify(false);\n    }\n  }\n  tick(date) {\n    const elapsed = date - this._start;\n    const duration = this._duration;\n    const prop = this._prop;\n    const from = this._from;\n    const loop = this._loop;\n    const to = this._to;\n    let factor;\n    this._active = from !== to && (loop || (elapsed < duration));\n    if (!this._active) {\n      this._target[prop] = to;\n      this._notify(true);\n      return;\n    }\n    if (elapsed < 0) {\n      this._target[prop] = from;\n      return;\n    }\n    factor = (elapsed / duration) % 2;\n    factor = loop && factor > 1 ? 2 - factor : factor;\n    factor = this._easing(Math.min(1, Math.max(0, factor)));\n    this._target[prop] = this._fn(from, to, factor);\n  }\n  wait() {\n    const promises = this._promises || (this._promises = []);\n    return new Promise((res, rej) => {\n      promises.push({res, rej});\n    });\n  }\n  _notify(resolved) {\n    const method = resolved ? 'res' : 'rej';\n    const promises = this._promises || [];\n    for (let i = 0; i < promises.length; i++) {\n      promises[i][method]();\n    }\n  }\n}\n\nconst numbers = ['x', 'y', 'borderWidth', 'radius', 'tension'];\nconst colors = ['color', 'borderColor', 'backgroundColor'];\ndefaults.set('animation', {\n  delay: undefined,\n  duration: 1000,\n  easing: 'easeOutQuart',\n  fn: undefined,\n  from: undefined,\n  loop: undefined,\n  to: undefined,\n  type: undefined,\n});\nconst animationOptions = Object.keys(defaults.animation);\ndefaults.describe('animation', {\n  _fallback: false,\n  _indexable: false,\n  _scriptable: (name) => name !== 'onProgress' && name !== 'onComplete' && name !== 'fn',\n});\ndefaults.set('animations', {\n  colors: {\n    type: 'color',\n    properties: colors\n  },\n  numbers: {\n    type: 'number',\n    properties: numbers\n  },\n});\ndefaults.describe('animations', {\n  _fallback: 'animation',\n});\ndefaults.set('transitions', {\n  active: {\n    animation: {\n      duration: 400\n    }\n  },\n  resize: {\n    animation: {\n      duration: 0\n    }\n  },\n  show: {\n    animations: {\n      colors: {\n        from: 'transparent'\n      },\n      visible: {\n        type: 'boolean',\n        duration: 0\n      },\n    }\n  },\n  hide: {\n    animations: {\n      colors: {\n        to: 'transparent'\n      },\n      visible: {\n        type: 'boolean',\n        easing: 'linear',\n        fn: v => v | 0\n      },\n    }\n  }\n});\nclass Animations {\n  constructor(chart, config) {\n    this._chart = chart;\n    this._properties = new Map();\n    this.configure(config);\n  }\n  configure(config) {\n    if (!isObject(config)) {\n      return;\n    }\n    const animatedProps = this._properties;\n    Object.getOwnPropertyNames(config).forEach(key => {\n      const cfg = config[key];\n      if (!isObject(cfg)) {\n        return;\n      }\n      const resolved = {};\n      for (const option of animationOptions) {\n        resolved[option] = cfg[option];\n      }\n      (isArray(cfg.properties) && cfg.properties || [key]).forEach((prop) => {\n        if (prop === key || !animatedProps.has(prop)) {\n          animatedProps.set(prop, resolved);\n        }\n      });\n    });\n  }\n  _animateOptions(target, values) {\n    const newOptions = values.options;\n    const options = resolveTargetOptions(target, newOptions);\n    if (!options) {\n      return [];\n    }\n    const animations = this._createAnimations(options, newOptions);\n    if (newOptions.$shared) {\n      awaitAll(target.options.$animations, newOptions).then(() => {\n        target.options = newOptions;\n      }, () => {\n      });\n    }\n    return animations;\n  }\n  _createAnimations(target, values) {\n    const animatedProps = this._properties;\n    const animations = [];\n    const running = target.$animations || (target.$animations = {});\n    const props = Object.keys(values);\n    const date = Date.now();\n    let i;\n    for (i = props.length - 1; i >= 0; --i) {\n      const prop = props[i];\n      if (prop.charAt(0) === '$') {\n        continue;\n      }\n      if (prop === 'options') {\n        animations.push(...this._animateOptions(target, values));\n        continue;\n      }\n      const value = values[prop];\n      let animation = running[prop];\n      const cfg = animatedProps.get(prop);\n      if (animation) {\n        if (cfg && animation.active()) {\n          animation.update(cfg, value, date);\n          continue;\n        } else {\n          animation.cancel();\n        }\n      }\n      if (!cfg || !cfg.duration) {\n        target[prop] = value;\n        continue;\n      }\n      running[prop] = animation = new Animation(cfg, target, prop, value);\n      animations.push(animation);\n    }\n    return animations;\n  }\n  update(target, values) {\n    if (this._properties.size === 0) {\n      Object.assign(target, values);\n      return;\n    }\n    const animations = this._createAnimations(target, values);\n    if (animations.length) {\n      animator.add(this._chart, animations);\n      return true;\n    }\n  }\n}\nfunction awaitAll(animations, properties) {\n  const running = [];\n  const keys = Object.keys(properties);\n  for (let i = 0; i < keys.length; i++) {\n    const anim = animations[keys[i]];\n    if (anim && anim.active()) {\n      running.push(anim.wait());\n    }\n  }\n  return Promise.all(running);\n}\nfunction resolveTargetOptions(target, newOptions) {\n  if (!newOptions) {\n    return;\n  }\n  let options = target.options;\n  if (!options) {\n    target.options = newOptions;\n    return;\n  }\n  if (options.$shared) {\n    target.options = options = Object.assign({}, options, {$shared: false, $animations: {}});\n  }\n  return options;\n}\n\nfunction scaleClip(scale, allowedOverflow) {\n  const opts = scale && scale.options || {};\n  const reverse = opts.reverse;\n  const min = opts.min === undefined ? allowedOverflow : 0;\n  const max = opts.max === undefined ? allowedOverflow : 0;\n  return {\n    start: reverse ? max : min,\n    end: reverse ? min : max\n  };\n}\nfunction defaultClip(xScale, yScale, allowedOverflow) {\n  if (allowedOverflow === false) {\n    return false;\n  }\n  const x = scaleClip(xScale, allowedOverflow);\n  const y = scaleClip(yScale, allowedOverflow);\n  return {\n    top: y.end,\n    right: x.end,\n    bottom: y.start,\n    left: x.start\n  };\n}\nfunction toClip(value) {\n  let t, r, b, l;\n  if (isObject(value)) {\n    t = value.top;\n    r = value.right;\n    b = value.bottom;\n    l = value.left;\n  } else {\n    t = r = b = l = value;\n  }\n  return {\n    top: t,\n    right: r,\n    bottom: b,\n    left: l,\n    disabled: value === false\n  };\n}\nfunction getSortedDatasetIndices(chart, filterVisible) {\n  const keys = [];\n  const metasets = chart._getSortedDatasetMetas(filterVisible);\n  let i, ilen;\n  for (i = 0, ilen = metasets.length; i < ilen; ++i) {\n    keys.push(metasets[i].index);\n  }\n  return keys;\n}\nfunction applyStack(stack, value, dsIndex, options = {}) {\n  const keys = stack.keys;\n  const singleMode = options.mode === 'single';\n  let i, ilen, datasetIndex, otherValue;\n  if (value === null) {\n    return;\n  }\n  for (i = 0, ilen = keys.length; i < ilen; ++i) {\n    datasetIndex = +keys[i];\n    if (datasetIndex === dsIndex) {\n      if (options.all) {\n        continue;\n      }\n      break;\n    }\n    otherValue = stack.values[datasetIndex];\n    if (isNumberFinite(otherValue) && (singleMode || (value === 0 || sign(value) === sign(otherValue)))) {\n      value += otherValue;\n    }\n  }\n  return value;\n}\nfunction convertObjectDataToArray(data) {\n  const keys = Object.keys(data);\n  const adata = new Array(keys.length);\n  let i, ilen, key;\n  for (i = 0, ilen = keys.length; i < ilen; ++i) {\n    key = keys[i];\n    adata[i] = {\n      x: key,\n      y: data[key]\n    };\n  }\n  return adata;\n}\nfunction isStacked(scale, meta) {\n  const stacked = scale && scale.options.stacked;\n  return stacked || (stacked === undefined && meta.stack !== undefined);\n}\nfunction getStackKey(indexScale, valueScale, meta) {\n  return `${indexScale.id}.${valueScale.id}.${meta.stack || meta.type}`;\n}\nfunction getUserBounds(scale) {\n  const {min, max, minDefined, maxDefined} = scale.getUserBounds();\n  return {\n    min: minDefined ? min : Number.NEGATIVE_INFINITY,\n    max: maxDefined ? max : Number.POSITIVE_INFINITY\n  };\n}\nfunction getOrCreateStack(stacks, stackKey, indexValue) {\n  const subStack = stacks[stackKey] || (stacks[stackKey] = {});\n  return subStack[indexValue] || (subStack[indexValue] = {});\n}\nfunction getLastIndexInStack(stack, vScale, positive, type) {\n  for (const meta of vScale.getMatchingVisibleMetas(type).reverse()) {\n    const value = stack[meta.index];\n    if ((positive && value > 0) || (!positive && value < 0)) {\n      return meta.index;\n    }\n  }\n  return null;\n}\nfunction updateStacks(controller, parsed) {\n  const {chart, _cachedMeta: meta} = controller;\n  const stacks = chart._stacks || (chart._stacks = {});\n  const {iScale, vScale, index: datasetIndex} = meta;\n  const iAxis = iScale.axis;\n  const vAxis = vScale.axis;\n  const key = getStackKey(iScale, vScale, meta);\n  const ilen = parsed.length;\n  let stack;\n  for (let i = 0; i < ilen; ++i) {\n    const item = parsed[i];\n    const {[iAxis]: index, [vAxis]: value} = item;\n    const itemStacks = item._stacks || (item._stacks = {});\n    stack = itemStacks[vAxis] = getOrCreateStack(stacks, key, index);\n    stack[datasetIndex] = value;\n    stack._top = getLastIndexInStack(stack, vScale, true, meta.type);\n    stack._bottom = getLastIndexInStack(stack, vScale, false, meta.type);\n  }\n}\nfunction getFirstScaleId(chart, axis) {\n  const scales = chart.scales;\n  return Object.keys(scales).filter(key => scales[key].axis === axis).shift();\n}\nfunction createDatasetContext(parent, index) {\n  return createContext(parent,\n    {\n      active: false,\n      dataset: undefined,\n      datasetIndex: index,\n      index,\n      mode: 'default',\n      type: 'dataset'\n    }\n  );\n}\nfunction createDataContext(parent, index, element) {\n  return createContext(parent, {\n    active: false,\n    dataIndex: index,\n    parsed: undefined,\n    raw: undefined,\n    element,\n    index,\n    mode: 'default',\n    type: 'data'\n  });\n}\nfunction clearStacks(meta, items) {\n  const datasetIndex = meta.controller.index;\n  const axis = meta.vScale && meta.vScale.axis;\n  if (!axis) {\n    return;\n  }\n  items = items || meta._parsed;\n  for (const parsed of items) {\n    const stacks = parsed._stacks;\n    if (!stacks || stacks[axis] === undefined || stacks[axis][datasetIndex] === undefined) {\n      return;\n    }\n    delete stacks[axis][datasetIndex];\n  }\n}\nconst isDirectUpdateMode = (mode) => mode === 'reset' || mode === 'none';\nconst cloneIfNotShared = (cached, shared) => shared ? cached : Object.assign({}, cached);\nconst createStack = (canStack, meta, chart) => canStack && !meta.hidden && meta._stacked\n  && {keys: getSortedDatasetIndices(chart, true), values: null};\nclass DatasetController {\n  constructor(chart, datasetIndex) {\n    this.chart = chart;\n    this._ctx = chart.ctx;\n    this.index = datasetIndex;\n    this._cachedDataOpts = {};\n    this._cachedMeta = this.getMeta();\n    this._type = this._cachedMeta.type;\n    this.options = undefined;\n    this._parsing = false;\n    this._data = undefined;\n    this._objectData = undefined;\n    this._sharedOptions = undefined;\n    this._drawStart = undefined;\n    this._drawCount = undefined;\n    this.enableOptionSharing = false;\n    this.supportsDecimation = false;\n    this.$context = undefined;\n    this._syncList = [];\n    this.initialize();\n  }\n  initialize() {\n    const meta = this._cachedMeta;\n    this.configure();\n    this.linkScales();\n    meta._stacked = isStacked(meta.vScale, meta);\n    this.addElements();\n  }\n  updateIndex(datasetIndex) {\n    if (this.index !== datasetIndex) {\n      clearStacks(this._cachedMeta);\n    }\n    this.index = datasetIndex;\n  }\n  linkScales() {\n    const chart = this.chart;\n    const meta = this._cachedMeta;\n    const dataset = this.getDataset();\n    const chooseId = (axis, x, y, r) => axis === 'x' ? x : axis === 'r' ? r : y;\n    const xid = meta.xAxisID = valueOrDefault(dataset.xAxisID, getFirstScaleId(chart, 'x'));\n    const yid = meta.yAxisID = valueOrDefault(dataset.yAxisID, getFirstScaleId(chart, 'y'));\n    const rid = meta.rAxisID = valueOrDefault(dataset.rAxisID, getFirstScaleId(chart, 'r'));\n    const indexAxis = meta.indexAxis;\n    const iid = meta.iAxisID = chooseId(indexAxis, xid, yid, rid);\n    const vid = meta.vAxisID = chooseId(indexAxis, yid, xid, rid);\n    meta.xScale = this.getScaleForId(xid);\n    meta.yScale = this.getScaleForId(yid);\n    meta.rScale = this.getScaleForId(rid);\n    meta.iScale = this.getScaleForId(iid);\n    meta.vScale = this.getScaleForId(vid);\n  }\n  getDataset() {\n    return this.chart.data.datasets[this.index];\n  }\n  getMeta() {\n    return this.chart.getDatasetMeta(this.index);\n  }\n  getScaleForId(scaleID) {\n    return this.chart.scales[scaleID];\n  }\n  _getOtherScale(scale) {\n    const meta = this._cachedMeta;\n    return scale === meta.iScale\n      ? meta.vScale\n      : meta.iScale;\n  }\n  reset() {\n    this._update('reset');\n  }\n  _destroy() {\n    const meta = this._cachedMeta;\n    if (this._data) {\n      unlistenArrayEvents(this._data, this);\n    }\n    if (meta._stacked) {\n      clearStacks(meta);\n    }\n  }\n  _dataCheck() {\n    const dataset = this.getDataset();\n    const data = dataset.data || (dataset.data = []);\n    const _data = this._data;\n    if (isObject(data)) {\n      this._data = convertObjectDataToArray(data);\n    } else if (_data !== data) {\n      if (_data) {\n        unlistenArrayEvents(_data, this);\n        const meta = this._cachedMeta;\n        clearStacks(meta);\n        meta._parsed = [];\n      }\n      if (data && Object.isExtensible(data)) {\n        listenArrayEvents(data, this);\n      }\n      this._syncList = [];\n      this._data = data;\n    }\n  }\n  addElements() {\n    const meta = this._cachedMeta;\n    this._dataCheck();\n    if (this.datasetElementType) {\n      meta.dataset = new this.datasetElementType();\n    }\n  }\n  buildOrUpdateElements(resetNewElements) {\n    const meta = this._cachedMeta;\n    const dataset = this.getDataset();\n    let stackChanged = false;\n    this._dataCheck();\n    const oldStacked = meta._stacked;\n    meta._stacked = isStacked(meta.vScale, meta);\n    if (meta.stack !== dataset.stack) {\n      stackChanged = true;\n      clearStacks(meta);\n      meta.stack = dataset.stack;\n    }\n    this._resyncElements(resetNewElements);\n    if (stackChanged || oldStacked !== meta._stacked) {\n      updateStacks(this, meta._parsed);\n    }\n  }\n  configure() {\n    const config = this.chart.config;\n    const scopeKeys = config.datasetScopeKeys(this._type);\n    const scopes = config.getOptionScopes(this.getDataset(), scopeKeys, true);\n    this.options = config.createResolver(scopes, this.getContext());\n    this._parsing = this.options.parsing;\n    this._cachedDataOpts = {};\n  }\n  parse(start, count) {\n    const {_cachedMeta: meta, _data: data} = this;\n    const {iScale, _stacked} = meta;\n    const iAxis = iScale.axis;\n    let sorted = start === 0 && count === data.length ? true : meta._sorted;\n    let prev = start > 0 && meta._parsed[start - 1];\n    let i, cur, parsed;\n    if (this._parsing === false) {\n      meta._parsed = data;\n      meta._sorted = true;\n      parsed = data;\n    } else {\n      if (isArray(data[start])) {\n        parsed = this.parseArrayData(meta, data, start, count);\n      } else if (isObject(data[start])) {\n        parsed = this.parseObjectData(meta, data, start, count);\n      } else {\n        parsed = this.parsePrimitiveData(meta, data, start, count);\n      }\n      const isNotInOrderComparedToPrev = () => cur[iAxis] === null || (prev && cur[iAxis] < prev[iAxis]);\n      for (i = 0; i < count; ++i) {\n        meta._parsed[i + start] = cur = parsed[i];\n        if (sorted) {\n          if (isNotInOrderComparedToPrev()) {\n            sorted = false;\n          }\n          prev = cur;\n        }\n      }\n      meta._sorted = sorted;\n    }\n    if (_stacked) {\n      updateStacks(this, parsed);\n    }\n  }\n  parsePrimitiveData(meta, data, start, count) {\n    const {iScale, vScale} = meta;\n    const iAxis = iScale.axis;\n    const vAxis = vScale.axis;\n    const labels = iScale.getLabels();\n    const singleScale = iScale === vScale;\n    const parsed = new Array(count);\n    let i, ilen, index;\n    for (i = 0, ilen = count; i < ilen; ++i) {\n      index = i + start;\n      parsed[i] = {\n        [iAxis]: singleScale || iScale.parse(labels[index], index),\n        [vAxis]: vScale.parse(data[index], index)\n      };\n    }\n    return parsed;\n  }\n  parseArrayData(meta, data, start, count) {\n    const {xScale, yScale} = meta;\n    const parsed = new Array(count);\n    let i, ilen, index, item;\n    for (i = 0, ilen = count; i < ilen; ++i) {\n      index = i + start;\n      item = data[index];\n      parsed[i] = {\n        x: xScale.parse(item[0], index),\n        y: yScale.parse(item[1], index)\n      };\n    }\n    return parsed;\n  }\n  parseObjectData(meta, data, start, count) {\n    const {xScale, yScale} = meta;\n    const {xAxisKey = 'x', yAxisKey = 'y'} = this._parsing;\n    const parsed = new Array(count);\n    let i, ilen, index, item;\n    for (i = 0, ilen = count; i < ilen; ++i) {\n      index = i + start;\n      item = data[index];\n      parsed[i] = {\n        x: xScale.parse(resolveObjectKey(item, xAxisKey), index),\n        y: yScale.parse(resolveObjectKey(item, yAxisKey), index)\n      };\n    }\n    return parsed;\n  }\n  getParsed(index) {\n    return this._cachedMeta._parsed[index];\n  }\n  getDataElement(index) {\n    return this._cachedMeta.data[index];\n  }\n  applyStack(scale, parsed, mode) {\n    const chart = this.chart;\n    const meta = this._cachedMeta;\n    const value = parsed[scale.axis];\n    const stack = {\n      keys: getSortedDatasetIndices(chart, true),\n      values: parsed._stacks[scale.axis]\n    };\n    return applyStack(stack, value, meta.index, {mode});\n  }\n  updateRangeFromParsed(range, scale, parsed, stack) {\n    const parsedValue = parsed[scale.axis];\n    let value = parsedValue === null ? NaN : parsedValue;\n    const values = stack && parsed._stacks[scale.axis];\n    if (stack && values) {\n      stack.values = values;\n      value = applyStack(stack, parsedValue, this._cachedMeta.index);\n    }\n    range.min = Math.min(range.min, value);\n    range.max = Math.max(range.max, value);\n  }\n  getMinMax(scale, canStack) {\n    const meta = this._cachedMeta;\n    const _parsed = meta._parsed;\n    const sorted = meta._sorted && scale === meta.iScale;\n    const ilen = _parsed.length;\n    const otherScale = this._getOtherScale(scale);\n    const stack = createStack(canStack, meta, this.chart);\n    const range = {min: Number.POSITIVE_INFINITY, max: Number.NEGATIVE_INFINITY};\n    const {min: otherMin, max: otherMax} = getUserBounds(otherScale);\n    let i, parsed;\n    function _skip() {\n      parsed = _parsed[i];\n      const otherValue = parsed[otherScale.axis];\n      return !isNumberFinite(parsed[scale.axis]) || otherMin > otherValue || otherMax < otherValue;\n    }\n    for (i = 0; i < ilen; ++i) {\n      if (_skip()) {\n        continue;\n      }\n      this.updateRangeFromParsed(range, scale, parsed, stack);\n      if (sorted) {\n        break;\n      }\n    }\n    if (sorted) {\n      for (i = ilen - 1; i >= 0; --i) {\n        if (_skip()) {\n          continue;\n        }\n        this.updateRangeFromParsed(range, scale, parsed, stack);\n        break;\n      }\n    }\n    return range;\n  }\n  getAllParsedValues(scale) {\n    const parsed = this._cachedMeta._parsed;\n    const values = [];\n    let i, ilen, value;\n    for (i = 0, ilen = parsed.length; i < ilen; ++i) {\n      value = parsed[i][scale.axis];\n      if (isNumberFinite(value)) {\n        values.push(value);\n      }\n    }\n    return values;\n  }\n  getMaxOverflow() {\n    return false;\n  }\n  getLabelAndValue(index) {\n    const meta = this._cachedMeta;\n    const iScale = meta.iScale;\n    const vScale = meta.vScale;\n    const parsed = this.getParsed(index);\n    return {\n      label: iScale ? '' + iScale.getLabelForValue(parsed[iScale.axis]) : '',\n      value: vScale ? '' + vScale.getLabelForValue(parsed[vScale.axis]) : ''\n    };\n  }\n  _update(mode) {\n    const meta = this._cachedMeta;\n    this.update(mode || 'default');\n    meta._clip = toClip(valueOrDefault(this.options.clip, defaultClip(meta.xScale, meta.yScale, this.getMaxOverflow())));\n  }\n  update(mode) {}\n  draw() {\n    const ctx = this._ctx;\n    const chart = this.chart;\n    const meta = this._cachedMeta;\n    const elements = meta.data || [];\n    const area = chart.chartArea;\n    const active = [];\n    const start = this._drawStart || 0;\n    const count = this._drawCount || (elements.length - start);\n    const drawActiveElementsOnTop = this.options.drawActiveElementsOnTop;\n    let i;\n    if (meta.dataset) {\n      meta.dataset.draw(ctx, area, start, count);\n    }\n    for (i = start; i < start + count; ++i) {\n      const element = elements[i];\n      if (element.hidden) {\n        continue;\n      }\n      if (element.active && drawActiveElementsOnTop) {\n        active.push(element);\n      } else {\n        element.draw(ctx, area);\n      }\n    }\n    for (i = 0; i < active.length; ++i) {\n      active[i].draw(ctx, area);\n    }\n  }\n  getStyle(index, active) {\n    const mode = active ? 'active' : 'default';\n    return index === undefined && this._cachedMeta.dataset\n      ? this.resolveDatasetElementOptions(mode)\n      : this.resolveDataElementOptions(index || 0, mode);\n  }\n  getContext(index, active, mode) {\n    const dataset = this.getDataset();\n    let context;\n    if (index >= 0 && index < this._cachedMeta.data.length) {\n      const element = this._cachedMeta.data[index];\n      context = element.$context ||\n        (element.$context = createDataContext(this.getContext(), index, element));\n      context.parsed = this.getParsed(index);\n      context.raw = dataset.data[index];\n      context.index = context.dataIndex = index;\n    } else {\n      context = this.$context ||\n        (this.$context = createDatasetContext(this.chart.getContext(), this.index));\n      context.dataset = dataset;\n      context.index = context.datasetIndex = this.index;\n    }\n    context.active = !!active;\n    context.mode = mode;\n    return context;\n  }\n  resolveDatasetElementOptions(mode) {\n    return this._resolveElementOptions(this.datasetElementType.id, mode);\n  }\n  resolveDataElementOptions(index, mode) {\n    return this._resolveElementOptions(this.dataElementType.id, mode, index);\n  }\n  _resolveElementOptions(elementType, mode = 'default', index) {\n    const active = mode === 'active';\n    const cache = this._cachedDataOpts;\n    const cacheKey = elementType + '-' + mode;\n    const cached = cache[cacheKey];\n    const sharing = this.enableOptionSharing && defined(index);\n    if (cached) {\n      return cloneIfNotShared(cached, sharing);\n    }\n    const config = this.chart.config;\n    const scopeKeys = config.datasetElementScopeKeys(this._type, elementType);\n    const prefixes = active ? [`${elementType}Hover`, 'hover', elementType, ''] : [elementType, ''];\n    const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n    const names = Object.keys(defaults.elements[elementType]);\n    const context = () => this.getContext(index, active);\n    const values = config.resolveNamedOptions(scopes, names, context, prefixes);\n    if (values.$shared) {\n      values.$shared = sharing;\n      cache[cacheKey] = Object.freeze(cloneIfNotShared(values, sharing));\n    }\n    return values;\n  }\n  _resolveAnimations(index, transition, active) {\n    const chart = this.chart;\n    const cache = this._cachedDataOpts;\n    const cacheKey = `animation-${transition}`;\n    const cached = cache[cacheKey];\n    if (cached) {\n      return cached;\n    }\n    let options;\n    if (chart.options.animation !== false) {\n      const config = this.chart.config;\n      const scopeKeys = config.datasetAnimationScopeKeys(this._type, transition);\n      const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n      options = config.createResolver(scopes, this.getContext(index, active, transition));\n    }\n    const animations = new Animations(chart, options && options.animations);\n    if (options && options._cacheable) {\n      cache[cacheKey] = Object.freeze(animations);\n    }\n    return animations;\n  }\n  getSharedOptions(options) {\n    if (!options.$shared) {\n      return;\n    }\n    return this._sharedOptions || (this._sharedOptions = Object.assign({}, options));\n  }\n  includeOptions(mode, sharedOptions) {\n    return !sharedOptions || isDirectUpdateMode(mode) || this.chart._animationsDisabled;\n  }\n  updateElement(element, index, properties, mode) {\n    if (isDirectUpdateMode(mode)) {\n      Object.assign(element, properties);\n    } else {\n      this._resolveAnimations(index, mode).update(element, properties);\n    }\n  }\n  updateSharedOptions(sharedOptions, mode, newOptions) {\n    if (sharedOptions && !isDirectUpdateMode(mode)) {\n      this._resolveAnimations(undefined, mode).update(sharedOptions, newOptions);\n    }\n  }\n  _setStyle(element, index, mode, active) {\n    element.active = active;\n    const options = this.getStyle(index, active);\n    this._resolveAnimations(index, mode, active).update(element, {\n      options: (!active && this.getSharedOptions(options)) || options\n    });\n  }\n  removeHoverStyle(element, datasetIndex, index) {\n    this._setStyle(element, index, 'active', false);\n  }\n  setHoverStyle(element, datasetIndex, index) {\n    this._setStyle(element, index, 'active', true);\n  }\n  _removeDatasetHoverStyle() {\n    const element = this._cachedMeta.dataset;\n    if (element) {\n      this._setStyle(element, undefined, 'active', false);\n    }\n  }\n  _setDatasetHoverStyle() {\n    const element = this._cachedMeta.dataset;\n    if (element) {\n      this._setStyle(element, undefined, 'active', true);\n    }\n  }\n  _resyncElements(resetNewElements) {\n    const data = this._data;\n    const elements = this._cachedMeta.data;\n    for (const [method, arg1, arg2] of this._syncList) {\n      this[method](arg1, arg2);\n    }\n    this._syncList = [];\n    const numMeta = elements.length;\n    const numData = data.length;\n    const count = Math.min(numData, numMeta);\n    if (count) {\n      this.parse(0, count);\n    }\n    if (numData > numMeta) {\n      this._insertElements(numMeta, numData - numMeta, resetNewElements);\n    } else if (numData < numMeta) {\n      this._removeElements(numData, numMeta - numData);\n    }\n  }\n  _insertElements(start, count, resetNewElements = true) {\n    const meta = this._cachedMeta;\n    const data = meta.data;\n    const end = start + count;\n    let i;\n    const move = (arr) => {\n      arr.length += count;\n      for (i = arr.length - 1; i >= end; i--) {\n        arr[i] = arr[i - count];\n      }\n    };\n    move(data);\n    for (i = start; i < end; ++i) {\n      data[i] = new this.dataElementType();\n    }\n    if (this._parsing) {\n      move(meta._parsed);\n    }\n    this.parse(start, count);\n    if (resetNewElements) {\n      this.updateElements(data, start, count, 'reset');\n    }\n  }\n  updateElements(element, start, count, mode) {}\n  _removeElements(start, count) {\n    const meta = this._cachedMeta;\n    if (this._parsing) {\n      const removed = meta._parsed.splice(start, count);\n      if (meta._stacked) {\n        clearStacks(meta, removed);\n      }\n    }\n    meta.data.splice(start, count);\n  }\n  _sync(args) {\n    if (this._parsing) {\n      this._syncList.push(args);\n    } else {\n      const [method, arg1, arg2] = args;\n      this[method](arg1, arg2);\n    }\n    this.chart._dataChanges.push([this.index, ...args]);\n  }\n  _onDataPush() {\n    const count = arguments.length;\n    this._sync(['_insertElements', this.getDataset().data.length - count, count]);\n  }\n  _onDataPop() {\n    this._sync(['_removeElements', this._cachedMeta.data.length - 1, 1]);\n  }\n  _onDataShift() {\n    this._sync(['_removeElements', 0, 1]);\n  }\n  _onDataSplice(start, count) {\n    if (count) {\n      this._sync(['_removeElements', start, count]);\n    }\n    const newCount = arguments.length - 2;\n    if (newCount) {\n      this._sync(['_insertElements', start, newCount]);\n    }\n  }\n  _onDataUnshift() {\n    this._sync(['_insertElements', 0, arguments.length]);\n  }\n}\nDatasetController.defaults = {};\nDatasetController.prototype.datasetElementType = null;\nDatasetController.prototype.dataElementType = null;\n\nfunction getAllScaleValues(scale, type) {\n  if (!scale._cache.$bar) {\n    const visibleMetas = scale.getMatchingVisibleMetas(type);\n    let values = [];\n    for (let i = 0, ilen = visibleMetas.length; i < ilen; i++) {\n      values = values.concat(visibleMetas[i].controller.getAllParsedValues(scale));\n    }\n    scale._cache.$bar = _arrayUnique(values.sort((a, b) => a - b));\n  }\n  return scale._cache.$bar;\n}\nfunction computeMinSampleSize(meta) {\n  const scale = meta.iScale;\n  const values = getAllScaleValues(scale, meta.type);\n  let min = scale._length;\n  let i, ilen, curr, prev;\n  const updateMinAndPrev = () => {\n    if (curr === 32767 || curr === -32768) {\n      return;\n    }\n    if (defined(prev)) {\n      min = Math.min(min, Math.abs(curr - prev) || min);\n    }\n    prev = curr;\n  };\n  for (i = 0, ilen = values.length; i < ilen; ++i) {\n    curr = scale.getPixelForValue(values[i]);\n    updateMinAndPrev();\n  }\n  prev = undefined;\n  for (i = 0, ilen = scale.ticks.length; i < ilen; ++i) {\n    curr = scale.getPixelForTick(i);\n    updateMinAndPrev();\n  }\n  return min;\n}\nfunction computeFitCategoryTraits(index, ruler, options, stackCount) {\n  const thickness = options.barThickness;\n  let size, ratio;\n  if (isNullOrUndef(thickness)) {\n    size = ruler.min * options.categoryPercentage;\n    ratio = options.barPercentage;\n  } else {\n    size = thickness * stackCount;\n    ratio = 1;\n  }\n  return {\n    chunk: size / stackCount,\n    ratio,\n    start: ruler.pixels[index] - (size / 2)\n  };\n}\nfunction computeFlexCategoryTraits(index, ruler, options, stackCount) {\n  const pixels = ruler.pixels;\n  const curr = pixels[index];\n  let prev = index > 0 ? pixels[index - 1] : null;\n  let next = index < pixels.length - 1 ? pixels[index + 1] : null;\n  const percent = options.categoryPercentage;\n  if (prev === null) {\n    prev = curr - (next === null ? ruler.end - ruler.start : next - curr);\n  }\n  if (next === null) {\n    next = curr + curr - prev;\n  }\n  const start = curr - (curr - Math.min(prev, next)) / 2 * percent;\n  const size = Math.abs(next - prev) / 2 * percent;\n  return {\n    chunk: size / stackCount,\n    ratio: options.barPercentage,\n    start\n  };\n}\nfunction parseFloatBar(entry, item, vScale, i) {\n  const startValue = vScale.parse(entry[0], i);\n  const endValue = vScale.parse(entry[1], i);\n  const min = Math.min(startValue, endValue);\n  const max = Math.max(startValue, endValue);\n  let barStart = min;\n  let barEnd = max;\n  if (Math.abs(min) > Math.abs(max)) {\n    barStart = max;\n    barEnd = min;\n  }\n  item[vScale.axis] = barEnd;\n  item._custom = {\n    barStart,\n    barEnd,\n    start: startValue,\n    end: endValue,\n    min,\n    max\n  };\n}\nfunction parseValue(entry, item, vScale, i) {\n  if (isArray(entry)) {\n    parseFloatBar(entry, item, vScale, i);\n  } else {\n    item[vScale.axis] = vScale.parse(entry, i);\n  }\n  return item;\n}\nfunction parseArrayOrPrimitive(meta, data, start, count) {\n  const iScale = meta.iScale;\n  const vScale = meta.vScale;\n  const labels = iScale.getLabels();\n  const singleScale = iScale === vScale;\n  const parsed = [];\n  let i, ilen, item, entry;\n  for (i = start, ilen = start + count; i < ilen; ++i) {\n    entry = data[i];\n    item = {};\n    item[iScale.axis] = singleScale || iScale.parse(labels[i], i);\n    parsed.push(parseValue(entry, item, vScale, i));\n  }\n  return parsed;\n}\nfunction isFloatBar(custom) {\n  return custom && custom.barStart !== undefined && custom.barEnd !== undefined;\n}\nfunction barSign(size, vScale, actualBase) {\n  if (size !== 0) {\n    return sign(size);\n  }\n  return (vScale.isHorizontal() ? 1 : -1) * (vScale.min >= actualBase ? 1 : -1);\n}\nfunction borderProps(properties) {\n  let reverse, start, end, top, bottom;\n  if (properties.horizontal) {\n    reverse = properties.base > properties.x;\n    start = 'left';\n    end = 'right';\n  } else {\n    reverse = properties.base < properties.y;\n    start = 'bottom';\n    end = 'top';\n  }\n  if (reverse) {\n    top = 'end';\n    bottom = 'start';\n  } else {\n    top = 'start';\n    bottom = 'end';\n  }\n  return {start, end, reverse, top, bottom};\n}\nfunction setBorderSkipped(properties, options, stack, index) {\n  let edge = options.borderSkipped;\n  const res = {};\n  if (!edge) {\n    properties.borderSkipped = res;\n    return;\n  }\n  const {start, end, reverse, top, bottom} = borderProps(properties);\n  if (edge === 'middle' && stack) {\n    properties.enableBorderRadius = true;\n    if ((stack._top || 0) === index) {\n      edge = top;\n    } else if ((stack._bottom || 0) === index) {\n      edge = bottom;\n    } else {\n      res[parseEdge(bottom, start, end, reverse)] = true;\n      edge = top;\n    }\n  }\n  res[parseEdge(edge, start, end, reverse)] = true;\n  properties.borderSkipped = res;\n}\nfunction parseEdge(edge, a, b, reverse) {\n  if (reverse) {\n    edge = swap(edge, a, b);\n    edge = startEnd(edge, b, a);\n  } else {\n    edge = startEnd(edge, a, b);\n  }\n  return edge;\n}\nfunction swap(orig, v1, v2) {\n  return orig === v1 ? v2 : orig === v2 ? v1 : orig;\n}\nfunction startEnd(v, start, end) {\n  return v === 'start' ? start : v === 'end' ? end : v;\n}\nfunction setInflateAmount(properties, {inflateAmount}, ratio) {\n  properties.inflateAmount = inflateAmount === 'auto'\n    ? ratio === 1 ? 0.33 : 0\n    : inflateAmount;\n}\nclass BarController extends DatasetController {\n  parsePrimitiveData(meta, data, start, count) {\n    return parseArrayOrPrimitive(meta, data, start, count);\n  }\n  parseArrayData(meta, data, start, count) {\n    return parseArrayOrPrimitive(meta, data, start, count);\n  }\n  parseObjectData(meta, data, start, count) {\n    const {iScale, vScale} = meta;\n    const {xAxisKey = 'x', yAxisKey = 'y'} = this._parsing;\n    const iAxisKey = iScale.axis === 'x' ? xAxisKey : yAxisKey;\n    const vAxisKey = vScale.axis === 'x' ? xAxisKey : yAxisKey;\n    const parsed = [];\n    let i, ilen, item, obj;\n    for (i = start, ilen = start + count; i < ilen; ++i) {\n      obj = data[i];\n      item = {};\n      item[iScale.axis] = iScale.parse(resolveObjectKey(obj, iAxisKey), i);\n      parsed.push(parseValue(resolveObjectKey(obj, vAxisKey), item, vScale, i));\n    }\n    return parsed;\n  }\n  updateRangeFromParsed(range, scale, parsed, stack) {\n    super.updateRangeFromParsed(range, scale, parsed, stack);\n    const custom = parsed._custom;\n    if (custom && scale === this._cachedMeta.vScale) {\n      range.min = Math.min(range.min, custom.min);\n      range.max = Math.max(range.max, custom.max);\n    }\n  }\n  getMaxOverflow() {\n    return 0;\n  }\n  getLabelAndValue(index) {\n    const meta = this._cachedMeta;\n    const {iScale, vScale} = meta;\n    const parsed = this.getParsed(index);\n    const custom = parsed._custom;\n    const value = isFloatBar(custom)\n      ? '[' + custom.start + ', ' + custom.end + ']'\n      : '' + vScale.getLabelForValue(parsed[vScale.axis]);\n    return {\n      label: '' + iScale.getLabelForValue(parsed[iScale.axis]),\n      value\n    };\n  }\n  initialize() {\n    this.enableOptionSharing = true;\n    super.initialize();\n    const meta = this._cachedMeta;\n    meta.stack = this.getDataset().stack;\n  }\n  update(mode) {\n    const meta = this._cachedMeta;\n    this.updateElements(meta.data, 0, meta.data.length, mode);\n  }\n  updateElements(bars, start, count, mode) {\n    const reset = mode === 'reset';\n    const {index, _cachedMeta: {vScale}} = this;\n    const base = vScale.getBasePixel();\n    const horizontal = vScale.isHorizontal();\n    const ruler = this._getRuler();\n    const firstOpts = this.resolveDataElementOptions(start, mode);\n    const sharedOptions = this.getSharedOptions(firstOpts);\n    const includeOptions = this.includeOptions(mode, sharedOptions);\n    this.updateSharedOptions(sharedOptions, mode, firstOpts);\n    for (let i = start; i < start + count; i++) {\n      const parsed = this.getParsed(i);\n      const vpixels = reset || isNullOrUndef(parsed[vScale.axis]) ? {base, head: base} : this._calculateBarValuePixels(i);\n      const ipixels = this._calculateBarIndexPixels(i, ruler);\n      const stack = (parsed._stacks || {})[vScale.axis];\n      const properties = {\n        horizontal,\n        base: vpixels.base,\n        enableBorderRadius: !stack || isFloatBar(parsed._custom) || (index === stack._top || index === stack._bottom),\n        x: horizontal ? vpixels.head : ipixels.center,\n        y: horizontal ? ipixels.center : vpixels.head,\n        height: horizontal ? ipixels.size : Math.abs(vpixels.size),\n        width: horizontal ? Math.abs(vpixels.size) : ipixels.size\n      };\n      if (includeOptions) {\n        properties.options = sharedOptions || this.resolveDataElementOptions(i, bars[i].active ? 'active' : mode);\n      }\n      const options = properties.options || bars[i].options;\n      setBorderSkipped(properties, options, stack, index);\n      setInflateAmount(properties, options, ruler.ratio);\n      this.updateElement(bars[i], i, properties, mode);\n    }\n  }\n  _getStacks(last, dataIndex) {\n    const meta = this._cachedMeta;\n    const iScale = meta.iScale;\n    const metasets = iScale.getMatchingVisibleMetas(this._type);\n    const stacked = iScale.options.stacked;\n    const ilen = metasets.length;\n    const stacks = [];\n    let i, item;\n    for (i = 0; i < ilen; ++i) {\n      item = metasets[i];\n      if (!item.controller.options.grouped) {\n        continue;\n      }\n      if (typeof dataIndex !== 'undefined') {\n        const val = item.controller.getParsed(dataIndex)[\n          item.controller._cachedMeta.vScale.axis\n        ];\n        if (isNullOrUndef(val) || isNaN(val)) {\n          continue;\n        }\n      }\n      if (stacked === false || stacks.indexOf(item.stack) === -1 ||\n\t\t\t\t(stacked === undefined && item.stack === undefined)) {\n        stacks.push(item.stack);\n      }\n      if (item.index === last) {\n        break;\n      }\n    }\n    if (!stacks.length) {\n      stacks.push(undefined);\n    }\n    return stacks;\n  }\n  _getStackCount(index) {\n    return this._getStacks(undefined, index).length;\n  }\n  _getStackIndex(datasetIndex, name, dataIndex) {\n    const stacks = this._getStacks(datasetIndex, dataIndex);\n    const index = (name !== undefined)\n      ? stacks.indexOf(name)\n      : -1;\n    return (index === -1)\n      ? stacks.length - 1\n      : index;\n  }\n  _getRuler() {\n    const opts = this.options;\n    const meta = this._cachedMeta;\n    const iScale = meta.iScale;\n    const pixels = [];\n    let i, ilen;\n    for (i = 0, ilen = meta.data.length; i < ilen; ++i) {\n      pixels.push(iScale.getPixelForValue(this.getParsed(i)[iScale.axis], i));\n    }\n    const barThickness = opts.barThickness;\n    const min = barThickness || computeMinSampleSize(meta);\n    return {\n      min,\n      pixels,\n      start: iScale._startPixel,\n      end: iScale._endPixel,\n      stackCount: this._getStackCount(),\n      scale: iScale,\n      grouped: opts.grouped,\n      ratio: barThickness ? 1 : opts.categoryPercentage * opts.barPercentage\n    };\n  }\n  _calculateBarValuePixels(index) {\n    const {_cachedMeta: {vScale, _stacked}, options: {base: baseValue, minBarLength}} = this;\n    const actualBase = baseValue || 0;\n    const parsed = this.getParsed(index);\n    const custom = parsed._custom;\n    const floating = isFloatBar(custom);\n    let value = parsed[vScale.axis];\n    let start = 0;\n    let length = _stacked ? this.applyStack(vScale, parsed, _stacked) : value;\n    let head, size;\n    if (length !== value) {\n      start = length - value;\n      length = value;\n    }\n    if (floating) {\n      value = custom.barStart;\n      length = custom.barEnd - custom.barStart;\n      if (value !== 0 && sign(value) !== sign(custom.barEnd)) {\n        start = 0;\n      }\n      start += value;\n    }\n    const startValue = !isNullOrUndef(baseValue) && !floating ? baseValue : start;\n    let base = vScale.getPixelForValue(startValue);\n    if (this.chart.getDataVisibility(index)) {\n      head = vScale.getPixelForValue(start + length);\n    } else {\n      head = base;\n    }\n    size = head - base;\n    if (Math.abs(size) < minBarLength) {\n      size = barSign(size, vScale, actualBase) * minBarLength;\n      if (value === actualBase) {\n        base -= size / 2;\n      }\n      const startPixel = vScale.getPixelForDecimal(0);\n      const endPixel = vScale.getPixelForDecimal(1);\n      const min = Math.min(startPixel, endPixel);\n      const max = Math.max(startPixel, endPixel);\n      base = Math.max(Math.min(base, max), min);\n      head = base + size;\n    }\n    if (base === vScale.getPixelForValue(actualBase)) {\n      const halfGrid = sign(size) * vScale.getLineWidthForValue(actualBase) / 2;\n      base += halfGrid;\n      size -= halfGrid;\n    }\n    return {\n      size,\n      base,\n      head,\n      center: head + size / 2\n    };\n  }\n  _calculateBarIndexPixels(index, ruler) {\n    const scale = ruler.scale;\n    const options = this.options;\n    const skipNull = options.skipNull;\n    const maxBarThickness = valueOrDefault(options.maxBarThickness, Infinity);\n    let center, size;\n    if (ruler.grouped) {\n      const stackCount = skipNull ? this._getStackCount(index) : ruler.stackCount;\n      const range = options.barThickness === 'flex'\n        ? computeFlexCategoryTraits(index, ruler, options, stackCount)\n        : computeFitCategoryTraits(index, ruler, options, stackCount);\n      const stackIndex = this._getStackIndex(this.index, this._cachedMeta.stack, skipNull ? index : undefined);\n      center = range.start + (range.chunk * stackIndex) + (range.chunk / 2);\n      size = Math.min(maxBarThickness, range.chunk * range.ratio);\n    } else {\n      center = scale.getPixelForValue(this.getParsed(index)[scale.axis], index);\n      size = Math.min(maxBarThickness, ruler.min * ruler.ratio);\n    }\n    return {\n      base: center - size / 2,\n      head: center + size / 2,\n      center,\n      size\n    };\n  }\n  draw() {\n    const meta = this._cachedMeta;\n    const vScale = meta.vScale;\n    const rects = meta.data;\n    const ilen = rects.length;\n    let i = 0;\n    for (; i < ilen; ++i) {\n      if (this.getParsed(i)[vScale.axis] !== null) {\n        rects[i].draw(this._ctx);\n      }\n    }\n  }\n}\nBarController.id = 'bar';\nBarController.defaults = {\n  datasetElementType: false,\n  dataElementType: 'bar',\n  categoryPercentage: 0.8,\n  barPercentage: 0.9,\n  grouped: true,\n  animations: {\n    numbers: {\n      type: 'number',\n      properties: ['x', 'y', 'base', 'width', 'height']\n    }\n  }\n};\nBarController.overrides = {\n  scales: {\n    _index_: {\n      type: 'category',\n      offset: true,\n      grid: {\n        offset: true\n      }\n    },\n    _value_: {\n      type: 'linear',\n      beginAtZero: true,\n    }\n  }\n};\n\nclass BubbleController extends DatasetController {\n  initialize() {\n    this.enableOptionSharing = true;\n    super.initialize();\n  }\n  parsePrimitiveData(meta, data, start, count) {\n    const parsed = super.parsePrimitiveData(meta, data, start, count);\n    for (let i = 0; i < parsed.length; i++) {\n      parsed[i]._custom = this.resolveDataElementOptions(i + start).radius;\n    }\n    return parsed;\n  }\n  parseArrayData(meta, data, start, count) {\n    const parsed = super.parseArrayData(meta, data, start, count);\n    for (let i = 0; i < parsed.length; i++) {\n      const item = data[start + i];\n      parsed[i]._custom = valueOrDefault(item[2], this.resolveDataElementOptions(i + start).radius);\n    }\n    return parsed;\n  }\n  parseObjectData(meta, data, start, count) {\n    const parsed = super.parseObjectData(meta, data, start, count);\n    for (let i = 0; i < parsed.length; i++) {\n      const item = data[start + i];\n      parsed[i]._custom = valueOrDefault(item && item.r && +item.r, this.resolveDataElementOptions(i + start).radius);\n    }\n    return parsed;\n  }\n  getMaxOverflow() {\n    const data = this._cachedMeta.data;\n    let max = 0;\n    for (let i = data.length - 1; i >= 0; --i) {\n      max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n    }\n    return max > 0 && max;\n  }\n  getLabelAndValue(index) {\n    const meta = this._cachedMeta;\n    const {xScale, yScale} = meta;\n    const parsed = this.getParsed(index);\n    const x = xScale.getLabelForValue(parsed.x);\n    const y = yScale.getLabelForValue(parsed.y);\n    const r = parsed._custom;\n    return {\n      label: meta.label,\n      value: '(' + x + ', ' + y + (r ? ', ' + r : '') + ')'\n    };\n  }\n  update(mode) {\n    const points = this._cachedMeta.data;\n    this.updateElements(points, 0, points.length, mode);\n  }\n  updateElements(points, start, count, mode) {\n    const reset = mode === 'reset';\n    const {iScale, vScale} = this._cachedMeta;\n    const firstOpts = this.resolveDataElementOptions(start, mode);\n    const sharedOptions = this.getSharedOptions(firstOpts);\n    const includeOptions = this.includeOptions(mode, sharedOptions);\n    const iAxis = iScale.axis;\n    const vAxis = vScale.axis;\n    for (let i = start; i < start + count; i++) {\n      const point = points[i];\n      const parsed = !reset && this.getParsed(i);\n      const properties = {};\n      const iPixel = properties[iAxis] = reset ? iScale.getPixelForDecimal(0.5) : iScale.getPixelForValue(parsed[iAxis]);\n      const vPixel = properties[vAxis] = reset ? vScale.getBasePixel() : vScale.getPixelForValue(parsed[vAxis]);\n      properties.skip = isNaN(iPixel) || isNaN(vPixel);\n      if (includeOptions) {\n        properties.options = this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n        if (reset) {\n          properties.options.radius = 0;\n        }\n      }\n      this.updateElement(point, i, properties, mode);\n    }\n    this.updateSharedOptions(sharedOptions, mode, firstOpts);\n  }\n  resolveDataElementOptions(index, mode) {\n    const parsed = this.getParsed(index);\n    let values = super.resolveDataElementOptions(index, mode);\n    if (values.$shared) {\n      values = Object.assign({}, values, {$shared: false});\n    }\n    const radius = values.radius;\n    if (mode !== 'active') {\n      values.radius = 0;\n    }\n    values.radius += valueOrDefault(parsed && parsed._custom, radius);\n    return values;\n  }\n}\nBubbleController.id = 'bubble';\nBubbleController.defaults = {\n  datasetElementType: false,\n  dataElementType: 'point',\n  animations: {\n    numbers: {\n      type: 'number',\n      properties: ['x', 'y', 'borderWidth', 'radius']\n    }\n  }\n};\nBubbleController.overrides = {\n  scales: {\n    x: {\n      type: 'linear'\n    },\n    y: {\n      type: 'linear'\n    }\n  },\n  plugins: {\n    tooltip: {\n      callbacks: {\n        title() {\n          return '';\n        }\n      }\n    }\n  }\n};\n\nfunction getRatioAndOffset(rotation, circumference, cutout) {\n  let ratioX = 1;\n  let ratioY = 1;\n  let offsetX = 0;\n  let offsetY = 0;\n  if (circumference < TAU) {\n    const startAngle = rotation;\n    const endAngle = startAngle + circumference;\n    const startX = Math.cos(startAngle);\n    const startY = Math.sin(startAngle);\n    const endX = Math.cos(endAngle);\n    const endY = Math.sin(endAngle);\n    const calcMax = (angle, a, b) => _angleBetween(angle, startAngle, endAngle, true) ? 1 : Math.max(a, a * cutout, b, b * cutout);\n    const calcMin = (angle, a, b) => _angleBetween(angle, startAngle, endAngle, true) ? -1 : Math.min(a, a * cutout, b, b * cutout);\n    const maxX = calcMax(0, startX, endX);\n    const maxY = calcMax(HALF_PI, startY, endY);\n    const minX = calcMin(PI, startX, endX);\n    const minY = calcMin(PI + HALF_PI, startY, endY);\n    ratioX = (maxX - minX) / 2;\n    ratioY = (maxY - minY) / 2;\n    offsetX = -(maxX + minX) / 2;\n    offsetY = -(maxY + minY) / 2;\n  }\n  return {ratioX, ratioY, offsetX, offsetY};\n}\nclass DoughnutController extends DatasetController {\n  constructor(chart, datasetIndex) {\n    super(chart, datasetIndex);\n    this.enableOptionSharing = true;\n    this.innerRadius = undefined;\n    this.outerRadius = undefined;\n    this.offsetX = undefined;\n    this.offsetY = undefined;\n  }\n  linkScales() {}\n  parse(start, count) {\n    const data = this.getDataset().data;\n    const meta = this._cachedMeta;\n    if (this._parsing === false) {\n      meta._parsed = data;\n    } else {\n      let getter = (i) => +data[i];\n      if (isObject(data[start])) {\n        const {key = 'value'} = this._parsing;\n        getter = (i) => +resolveObjectKey(data[i], key);\n      }\n      let i, ilen;\n      for (i = start, ilen = start + count; i < ilen; ++i) {\n        meta._parsed[i] = getter(i);\n      }\n    }\n  }\n  _getRotation() {\n    return toRadians(this.options.rotation - 90);\n  }\n  _getCircumference() {\n    return toRadians(this.options.circumference);\n  }\n  _getRotationExtents() {\n    let min = TAU;\n    let max = -TAU;\n    for (let i = 0; i < this.chart.data.datasets.length; ++i) {\n      if (this.chart.isDatasetVisible(i)) {\n        const controller = this.chart.getDatasetMeta(i).controller;\n        const rotation = controller._getRotation();\n        const circumference = controller._getCircumference();\n        min = Math.min(min, rotation);\n        max = Math.max(max, rotation + circumference);\n      }\n    }\n    return {\n      rotation: min,\n      circumference: max - min,\n    };\n  }\n  update(mode) {\n    const chart = this.chart;\n    const {chartArea} = chart;\n    const meta = this._cachedMeta;\n    const arcs = meta.data;\n    const spacing = this.getMaxBorderWidth() + this.getMaxOffset(arcs) + this.options.spacing;\n    const maxSize = Math.max((Math.min(chartArea.width, chartArea.height) - spacing) / 2, 0);\n    const cutout = Math.min(toPercentage(this.options.cutout, maxSize), 1);\n    const chartWeight = this._getRingWeight(this.index);\n    const {circumference, rotation} = this._getRotationExtents();\n    const {ratioX, ratioY, offsetX, offsetY} = getRatioAndOffset(rotation, circumference, cutout);\n    const maxWidth = (chartArea.width - spacing) / ratioX;\n    const maxHeight = (chartArea.height - spacing) / ratioY;\n    const maxRadius = Math.max(Math.min(maxWidth, maxHeight) / 2, 0);\n    const outerRadius = toDimension(this.options.radius, maxRadius);\n    const innerRadius = Math.max(outerRadius * cutout, 0);\n    const radiusLength = (outerRadius - innerRadius) / this._getVisibleDatasetWeightTotal();\n    this.offsetX = offsetX * outerRadius;\n    this.offsetY = offsetY * outerRadius;\n    meta.total = this.calculateTotal();\n    this.outerRadius = outerRadius - radiusLength * this._getRingWeightOffset(this.index);\n    this.innerRadius = Math.max(this.outerRadius - radiusLength * chartWeight, 0);\n    this.updateElements(arcs, 0, arcs.length, mode);\n  }\n  _circumference(i, reset) {\n    const opts = this.options;\n    const meta = this._cachedMeta;\n    const circumference = this._getCircumference();\n    if ((reset && opts.animation.animateRotate) || !this.chart.getDataVisibility(i) || meta._parsed[i] === null || meta.data[i].hidden) {\n      return 0;\n    }\n    return this.calculateCircumference(meta._parsed[i] * circumference / TAU);\n  }\n  updateElements(arcs, start, count, mode) {\n    const reset = mode === 'reset';\n    const chart = this.chart;\n    const chartArea = chart.chartArea;\n    const opts = chart.options;\n    const animationOpts = opts.animation;\n    const centerX = (chartArea.left + chartArea.right) / 2;\n    const centerY = (chartArea.top + chartArea.bottom) / 2;\n    const animateScale = reset && animationOpts.animateScale;\n    const innerRadius = animateScale ? 0 : this.innerRadius;\n    const outerRadius = animateScale ? 0 : this.outerRadius;\n    const firstOpts = this.resolveDataElementOptions(start, mode);\n    const sharedOptions = this.getSharedOptions(firstOpts);\n    const includeOptions = this.includeOptions(mode, sharedOptions);\n    let startAngle = this._getRotation();\n    let i;\n    for (i = 0; i < start; ++i) {\n      startAngle += this._circumference(i, reset);\n    }\n    for (i = start; i < start + count; ++i) {\n      const circumference = this._circumference(i, reset);\n      const arc = arcs[i];\n      const properties = {\n        x: centerX + this.offsetX,\n        y: centerY + this.offsetY,\n        startAngle,\n        endAngle: startAngle + circumference,\n        circumference,\n        outerRadius,\n        innerRadius\n      };\n      if (includeOptions) {\n        properties.options = sharedOptions || this.resolveDataElementOptions(i, arc.active ? 'active' : mode);\n      }\n      startAngle += circumference;\n      this.updateElement(arc, i, properties, mode);\n    }\n    this.updateSharedOptions(sharedOptions, mode, firstOpts);\n  }\n  calculateTotal() {\n    const meta = this._cachedMeta;\n    const metaData = meta.data;\n    let total = 0;\n    let i;\n    for (i = 0; i < metaData.length; i++) {\n      const value = meta._parsed[i];\n      if (value !== null && !isNaN(value) && this.chart.getDataVisibility(i) && !metaData[i].hidden) {\n        total += Math.abs(value);\n      }\n    }\n    return total;\n  }\n  calculateCircumference(value) {\n    const total = this._cachedMeta.total;\n    if (total > 0 && !isNaN(value)) {\n      return TAU * (Math.abs(value) / total);\n    }\n    return 0;\n  }\n  getLabelAndValue(index) {\n    const meta = this._cachedMeta;\n    const chart = this.chart;\n    const labels = chart.data.labels || [];\n    const value = formatNumber(meta._parsed[index], chart.options.locale);\n    return {\n      label: labels[index] || '',\n      value,\n    };\n  }\n  getMaxBorderWidth(arcs) {\n    let max = 0;\n    const chart = this.chart;\n    let i, ilen, meta, controller, options;\n    if (!arcs) {\n      for (i = 0, ilen = chart.data.datasets.length; i < ilen; ++i) {\n        if (chart.isDatasetVisible(i)) {\n          meta = chart.getDatasetMeta(i);\n          arcs = meta.data;\n          controller = meta.controller;\n          break;\n        }\n      }\n    }\n    if (!arcs) {\n      return 0;\n    }\n    for (i = 0, ilen = arcs.length; i < ilen; ++i) {\n      options = controller.resolveDataElementOptions(i);\n      if (options.borderAlign !== 'inner') {\n        max = Math.max(max, options.borderWidth || 0, options.hoverBorderWidth || 0);\n      }\n    }\n    return max;\n  }\n  getMaxOffset(arcs) {\n    let max = 0;\n    for (let i = 0, ilen = arcs.length; i < ilen; ++i) {\n      const options = this.resolveDataElementOptions(i);\n      max = Math.max(max, options.offset || 0, options.hoverOffset || 0);\n    }\n    return max;\n  }\n  _getRingWeightOffset(datasetIndex) {\n    let ringWeightOffset = 0;\n    for (let i = 0; i < datasetIndex; ++i) {\n      if (this.chart.isDatasetVisible(i)) {\n        ringWeightOffset += this._getRingWeight(i);\n      }\n    }\n    return ringWeightOffset;\n  }\n  _getRingWeight(datasetIndex) {\n    return Math.max(valueOrDefault(this.chart.data.datasets[datasetIndex].weight, 1), 0);\n  }\n  _getVisibleDatasetWeightTotal() {\n    return this._getRingWeightOffset(this.chart.data.datasets.length) || 1;\n  }\n}\nDoughnutController.id = 'doughnut';\nDoughnutController.defaults = {\n  datasetElementType: false,\n  dataElementType: 'arc',\n  animation: {\n    animateRotate: true,\n    animateScale: false\n  },\n  animations: {\n    numbers: {\n      type: 'number',\n      properties: ['circumference', 'endAngle', 'innerRadius', 'outerRadius', 'startAngle', 'x', 'y', 'offset', 'borderWidth', 'spacing']\n    },\n  },\n  cutout: '50%',\n  rotation: 0,\n  circumference: 360,\n  radius: '100%',\n  spacing: 0,\n  indexAxis: 'r',\n};\nDoughnutController.descriptors = {\n  _scriptable: (name) => name !== 'spacing',\n  _indexable: (name) => name !== 'spacing',\n};\nDoughnutController.overrides = {\n  aspectRatio: 1,\n  plugins: {\n    legend: {\n      labels: {\n        generateLabels(chart) {\n          const data = chart.data;\n          if (data.labels.length && data.datasets.length) {\n            const {labels: {pointStyle}} = chart.legend.options;\n            return data.labels.map((label, i) => {\n              const meta = chart.getDatasetMeta(0);\n              const style = meta.controller.getStyle(i);\n              return {\n                text: label,\n                fillStyle: style.backgroundColor,\n                strokeStyle: style.borderColor,\n                lineWidth: style.borderWidth,\n                pointStyle: pointStyle,\n                hidden: !chart.getDataVisibility(i),\n                index: i\n              };\n            });\n          }\n          return [];\n        }\n      },\n      onClick(e, legendItem, legend) {\n        legend.chart.toggleDataVisibility(legendItem.index);\n        legend.chart.update();\n      }\n    },\n    tooltip: {\n      callbacks: {\n        title() {\n          return '';\n        },\n        label(tooltipItem) {\n          let dataLabel = tooltipItem.label;\n          const value = ': ' + tooltipItem.formattedValue;\n          if (isArray(dataLabel)) {\n            dataLabel = dataLabel.slice();\n            dataLabel[0] += value;\n          } else {\n            dataLabel += value;\n          }\n          return dataLabel;\n        }\n      }\n    }\n  }\n};\n\nclass LineController extends DatasetController {\n  initialize() {\n    this.enableOptionSharing = true;\n    this.supportsDecimation = true;\n    super.initialize();\n  }\n  update(mode) {\n    const meta = this._cachedMeta;\n    const {dataset: line, data: points = [], _dataset} = meta;\n    const animationsDisabled = this.chart._animationsDisabled;\n    let {start, count} = getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n    this._drawStart = start;\n    this._drawCount = count;\n    if (scaleRangesChanged(meta)) {\n      start = 0;\n      count = points.length;\n    }\n    line._chart = this.chart;\n    line._datasetIndex = this.index;\n    line._decimated = !!_dataset._decimated;\n    line.points = points;\n    const options = this.resolveDatasetElementOptions(mode);\n    if (!this.options.showLine) {\n      options.borderWidth = 0;\n    }\n    options.segment = this.options.segment;\n    this.updateElement(line, undefined, {\n      animated: !animationsDisabled,\n      options\n    }, mode);\n    this.updateElements(points, start, count, mode);\n  }\n  updateElements(points, start, count, mode) {\n    const reset = mode === 'reset';\n    const {iScale, vScale, _stacked, _dataset} = this._cachedMeta;\n    const firstOpts = this.resolveDataElementOptions(start, mode);\n    const sharedOptions = this.getSharedOptions(firstOpts);\n    const includeOptions = this.includeOptions(mode, sharedOptions);\n    const iAxis = iScale.axis;\n    const vAxis = vScale.axis;\n    const {spanGaps, segment} = this.options;\n    const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n    const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n    let prevParsed = start > 0 && this.getParsed(start - 1);\n    for (let i = start; i < start + count; ++i) {\n      const point = points[i];\n      const parsed = this.getParsed(i);\n      const properties = directUpdate ? point : {};\n      const nullData = isNullOrUndef(parsed[vAxis]);\n      const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n      const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n      properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n      properties.stop = i > 0 && (Math.abs(parsed[iAxis] - prevParsed[iAxis])) > maxGapLength;\n      if (segment) {\n        properties.parsed = parsed;\n        properties.raw = _dataset.data[i];\n      }\n      if (includeOptions) {\n        properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n      }\n      if (!directUpdate) {\n        this.updateElement(point, i, properties, mode);\n      }\n      prevParsed = parsed;\n    }\n    this.updateSharedOptions(sharedOptions, mode, firstOpts);\n  }\n  getMaxOverflow() {\n    const meta = this._cachedMeta;\n    const dataset = meta.dataset;\n    const border = dataset.options && dataset.options.borderWidth || 0;\n    const data = meta.data || [];\n    if (!data.length) {\n      return border;\n    }\n    const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n    const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n    return Math.max(border, firstPoint, lastPoint) / 2;\n  }\n  draw() {\n    const meta = this._cachedMeta;\n    meta.dataset.updateControlPoints(this.chart.chartArea, meta.iScale.axis);\n    super.draw();\n  }\n}\nLineController.id = 'line';\nLineController.defaults = {\n  datasetElementType: 'line',\n  dataElementType: 'point',\n  showLine: true,\n  spanGaps: false,\n};\nLineController.overrides = {\n  scales: {\n    _index_: {\n      type: 'category',\n    },\n    _value_: {\n      type: 'linear',\n    },\n  }\n};\nfunction getStartAndCountOfVisiblePoints(meta, points, animationsDisabled) {\n  const pointCount = points.length;\n  let start = 0;\n  let count = pointCount;\n  if (meta._sorted) {\n    const {iScale, _parsed} = meta;\n    const axis = iScale.axis;\n    const {min, max, minDefined, maxDefined} = iScale.getUserBounds();\n    if (minDefined) {\n      start = _limitValue(Math.min(\n        _lookupByKey(_parsed, iScale.axis, min).lo,\n        animationsDisabled ? pointCount : _lookupByKey(points, axis, iScale.getPixelForValue(min)).lo),\n      0, pointCount - 1);\n    }\n    if (maxDefined) {\n      count = _limitValue(Math.max(\n        _lookupByKey(_parsed, iScale.axis, max).hi + 1,\n        animationsDisabled ? 0 : _lookupByKey(points, axis, iScale.getPixelForValue(max)).hi + 1),\n      start, pointCount) - start;\n    } else {\n      count = pointCount - start;\n    }\n  }\n  return {start, count};\n}\nfunction scaleRangesChanged(meta) {\n  const {xScale, yScale, _scaleRanges} = meta;\n  const newRanges = {\n    xmin: xScale.min,\n    xmax: xScale.max,\n    ymin: yScale.min,\n    ymax: yScale.max\n  };\n  if (!_scaleRanges) {\n    meta._scaleRanges = newRanges;\n    return true;\n  }\n  const changed = _scaleRanges.xmin !== xScale.min\n\t\t|| _scaleRanges.xmax !== xScale.max\n\t\t|| _scaleRanges.ymin !== yScale.min\n\t\t|| _scaleRanges.ymax !== yScale.max;\n  Object.assign(_scaleRanges, newRanges);\n  return changed;\n}\n\nclass PolarAreaController extends DatasetController {\n  constructor(chart, datasetIndex) {\n    super(chart, datasetIndex);\n    this.innerRadius = undefined;\n    this.outerRadius = undefined;\n  }\n  getLabelAndValue(index) {\n    const meta = this._cachedMeta;\n    const chart = this.chart;\n    const labels = chart.data.labels || [];\n    const value = formatNumber(meta._parsed[index].r, chart.options.locale);\n    return {\n      label: labels[index] || '',\n      value,\n    };\n  }\n  parseObjectData(meta, data, start, count) {\n    return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n  }\n  update(mode) {\n    const arcs = this._cachedMeta.data;\n    this._updateRadius();\n    this.updateElements(arcs, 0, arcs.length, mode);\n  }\n  getMinMax() {\n    const meta = this._cachedMeta;\n    const range = {min: Number.POSITIVE_INFINITY, max: Number.NEGATIVE_INFINITY};\n    meta.data.forEach((element, index) => {\n      const parsed = this.getParsed(index).r;\n      if (!isNaN(parsed) && this.chart.getDataVisibility(index)) {\n        if (parsed < range.min) {\n          range.min = parsed;\n        }\n        if (parsed > range.max) {\n          range.max = parsed;\n        }\n      }\n    });\n    return range;\n  }\n  _updateRadius() {\n    const chart = this.chart;\n    const chartArea = chart.chartArea;\n    const opts = chart.options;\n    const minSize = Math.min(chartArea.right - chartArea.left, chartArea.bottom - chartArea.top);\n    const outerRadius = Math.max(minSize / 2, 0);\n    const innerRadius = Math.max(opts.cutoutPercentage ? (outerRadius / 100) * (opts.cutoutPercentage) : 1, 0);\n    const radiusLength = (outerRadius - innerRadius) / chart.getVisibleDatasetCount();\n    this.outerRadius = outerRadius - (radiusLength * this.index);\n    this.innerRadius = this.outerRadius - radiusLength;\n  }\n  updateElements(arcs, start, count, mode) {\n    const reset = mode === 'reset';\n    const chart = this.chart;\n    const opts = chart.options;\n    const animationOpts = opts.animation;\n    const scale = this._cachedMeta.rScale;\n    const centerX = scale.xCenter;\n    const centerY = scale.yCenter;\n    const datasetStartAngle = scale.getIndexAngle(0) - 0.5 * PI;\n    let angle = datasetStartAngle;\n    let i;\n    const defaultAngle = 360 / this.countVisibleElements();\n    for (i = 0; i < start; ++i) {\n      angle += this._computeAngle(i, mode, defaultAngle);\n    }\n    for (i = start; i < start + count; i++) {\n      const arc = arcs[i];\n      let startAngle = angle;\n      let endAngle = angle + this._computeAngle(i, mode, defaultAngle);\n      let outerRadius = chart.getDataVisibility(i) ? scale.getDistanceFromCenterForValue(this.getParsed(i).r) : 0;\n      angle = endAngle;\n      if (reset) {\n        if (animationOpts.animateScale) {\n          outerRadius = 0;\n        }\n        if (animationOpts.animateRotate) {\n          startAngle = endAngle = datasetStartAngle;\n        }\n      }\n      const properties = {\n        x: centerX,\n        y: centerY,\n        innerRadius: 0,\n        outerRadius,\n        startAngle,\n        endAngle,\n        options: this.resolveDataElementOptions(i, arc.active ? 'active' : mode)\n      };\n      this.updateElement(arc, i, properties, mode);\n    }\n  }\n  countVisibleElements() {\n    const meta = this._cachedMeta;\n    let count = 0;\n    meta.data.forEach((element, index) => {\n      if (!isNaN(this.getParsed(index).r) && this.chart.getDataVisibility(index)) {\n        count++;\n      }\n    });\n    return count;\n  }\n  _computeAngle(index, mode, defaultAngle) {\n    return this.chart.getDataVisibility(index)\n      ? toRadians(this.resolveDataElementOptions(index, mode).angle || defaultAngle)\n      : 0;\n  }\n}\nPolarAreaController.id = 'polarArea';\nPolarAreaController.defaults = {\n  dataElementType: 'arc',\n  animation: {\n    animateRotate: true,\n    animateScale: true\n  },\n  animations: {\n    numbers: {\n      type: 'number',\n      properties: ['x', 'y', 'startAngle', 'endAngle', 'innerRadius', 'outerRadius']\n    },\n  },\n  indexAxis: 'r',\n  startAngle: 0,\n};\nPolarAreaController.overrides = {\n  aspectRatio: 1,\n  plugins: {\n    legend: {\n      labels: {\n        generateLabels(chart) {\n          const data = chart.data;\n          if (data.labels.length && data.datasets.length) {\n            const {labels: {pointStyle}} = chart.legend.options;\n            return data.labels.map((label, i) => {\n              const meta = chart.getDatasetMeta(0);\n              const style = meta.controller.getStyle(i);\n              return {\n                text: label,\n                fillStyle: style.backgroundColor,\n                strokeStyle: style.borderColor,\n                lineWidth: style.borderWidth,\n                pointStyle: pointStyle,\n                hidden: !chart.getDataVisibility(i),\n                index: i\n              };\n            });\n          }\n          return [];\n        }\n      },\n      onClick(e, legendItem, legend) {\n        legend.chart.toggleDataVisibility(legendItem.index);\n        legend.chart.update();\n      }\n    },\n    tooltip: {\n      callbacks: {\n        title() {\n          return '';\n        },\n        label(context) {\n          return context.chart.data.labels[context.dataIndex] + ': ' + context.formattedValue;\n        }\n      }\n    }\n  },\n  scales: {\n    r: {\n      type: 'radialLinear',\n      angleLines: {\n        display: false\n      },\n      beginAtZero: true,\n      grid: {\n        circular: true\n      },\n      pointLabels: {\n        display: false\n      },\n      startAngle: 0\n    }\n  }\n};\n\nclass PieController extends DoughnutController {\n}\nPieController.id = 'pie';\nPieController.defaults = {\n  cutout: 0,\n  rotation: 0,\n  circumference: 360,\n  radius: '100%'\n};\n\nclass RadarController extends DatasetController {\n  getLabelAndValue(index) {\n    const vScale = this._cachedMeta.vScale;\n    const parsed = this.getParsed(index);\n    return {\n      label: vScale.getLabels()[index],\n      value: '' + vScale.getLabelForValue(parsed[vScale.axis])\n    };\n  }\n  parseObjectData(meta, data, start, count) {\n    return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n  }\n  update(mode) {\n    const meta = this._cachedMeta;\n    const line = meta.dataset;\n    const points = meta.data || [];\n    const labels = meta.iScale.getLabels();\n    line.points = points;\n    if (mode !== 'resize') {\n      const options = this.resolveDatasetElementOptions(mode);\n      if (!this.options.showLine) {\n        options.borderWidth = 0;\n      }\n      const properties = {\n        _loop: true,\n        _fullLoop: labels.length === points.length,\n        options\n      };\n      this.updateElement(line, undefined, properties, mode);\n    }\n    this.updateElements(points, 0, points.length, mode);\n  }\n  updateElements(points, start, count, mode) {\n    const scale = this._cachedMeta.rScale;\n    const reset = mode === 'reset';\n    for (let i = start; i < start + count; i++) {\n      const point = points[i];\n      const options = this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n      const pointPosition = scale.getPointPositionForValue(i, this.getParsed(i).r);\n      const x = reset ? scale.xCenter : pointPosition.x;\n      const y = reset ? scale.yCenter : pointPosition.y;\n      const properties = {\n        x,\n        y,\n        angle: pointPosition.angle,\n        skip: isNaN(x) || isNaN(y),\n        options\n      };\n      this.updateElement(point, i, properties, mode);\n    }\n  }\n}\nRadarController.id = 'radar';\nRadarController.defaults = {\n  datasetElementType: 'line',\n  dataElementType: 'point',\n  indexAxis: 'r',\n  showLine: true,\n  elements: {\n    line: {\n      fill: 'start'\n    }\n  },\n};\nRadarController.overrides = {\n  aspectRatio: 1,\n  scales: {\n    r: {\n      type: 'radialLinear',\n    }\n  }\n};\n\nclass ScatterController extends LineController {\n}\nScatterController.id = 'scatter';\nScatterController.defaults = {\n  showLine: false,\n  fill: false\n};\nScatterController.overrides = {\n  interaction: {\n    mode: 'point'\n  },\n  plugins: {\n    tooltip: {\n      callbacks: {\n        title() {\n          return '';\n        },\n        label(item) {\n          return '(' + item.label + ', ' + item.formattedValue + ')';\n        }\n      }\n    }\n  },\n  scales: {\n    x: {\n      type: 'linear'\n    },\n    y: {\n      type: 'linear'\n    }\n  }\n};\n\nvar controllers = /*#__PURE__*/Object.freeze({\n__proto__: null,\nBarController: BarController,\nBubbleController: BubbleController,\nDoughnutController: DoughnutController,\nLineController: LineController,\nPolarAreaController: PolarAreaController,\nPieController: PieController,\nRadarController: RadarController,\nScatterController: ScatterController\n});\n\nfunction abstract() {\n  throw new Error('This method is not implemented: Check that a complete date adapter is provided.');\n}\nclass DateAdapter {\n  constructor(options) {\n    this.options = options || {};\n  }\n  formats() {\n    return abstract();\n  }\n  parse(value, format) {\n    return abstract();\n  }\n  format(timestamp, format) {\n    return abstract();\n  }\n  add(timestamp, amount, unit) {\n    return abstract();\n  }\n  diff(a, b, unit) {\n    return abstract();\n  }\n  startOf(timestamp, unit, weekday) {\n    return abstract();\n  }\n  endOf(timestamp, unit) {\n    return abstract();\n  }\n}\nDateAdapter.override = function(members) {\n  Object.assign(DateAdapter.prototype, members);\n};\nvar adapters = {\n  _date: DateAdapter\n};\n\nfunction binarySearch(metaset, axis, value, intersect) {\n  const {controller, data, _sorted} = metaset;\n  const iScale = controller._cachedMeta.iScale;\n  if (iScale && axis === iScale.axis && axis !== 'r' && _sorted && data.length) {\n    const lookupMethod = iScale._reversePixels ? _rlookupByKey : _lookupByKey;\n    if (!intersect) {\n      return lookupMethod(data, axis, value);\n    } else if (controller._sharedOptions) {\n      const el = data[0];\n      const range = typeof el.getRange === 'function' && el.getRange(axis);\n      if (range) {\n        const start = lookupMethod(data, axis, value - range);\n        const end = lookupMethod(data, axis, value + range);\n        return {lo: start.lo, hi: end.hi};\n      }\n    }\n  }\n  return {lo: 0, hi: data.length - 1};\n}\nfunction evaluateInteractionItems(chart, axis, position, handler, intersect) {\n  const metasets = chart.getSortedVisibleDatasetMetas();\n  const value = position[axis];\n  for (let i = 0, ilen = metasets.length; i < ilen; ++i) {\n    const {index, data} = metasets[i];\n    const {lo, hi} = binarySearch(metasets[i], axis, value, intersect);\n    for (let j = lo; j <= hi; ++j) {\n      const element = data[j];\n      if (!element.skip) {\n        handler(element, index, j);\n      }\n    }\n  }\n}\nfunction getDistanceMetricForAxis(axis) {\n  const useX = axis.indexOf('x') !== -1;\n  const useY = axis.indexOf('y') !== -1;\n  return function(pt1, pt2) {\n    const deltaX = useX ? Math.abs(pt1.x - pt2.x) : 0;\n    const deltaY = useY ? Math.abs(pt1.y - pt2.y) : 0;\n    return Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));\n  };\n}\nfunction getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) {\n  const items = [];\n  if (!includeInvisible && !chart.isPointInArea(position)) {\n    return items;\n  }\n  const evaluationFunc = function(element, datasetIndex, index) {\n    if (!includeInvisible && !_isPointInArea(element, chart.chartArea, 0)) {\n      return;\n    }\n    if (element.inRange(position.x, position.y, useFinalPosition)) {\n      items.push({element, datasetIndex, index});\n    }\n  };\n  evaluateInteractionItems(chart, axis, position, evaluationFunc, true);\n  return items;\n}\nfunction getNearestRadialItems(chart, position, axis, useFinalPosition) {\n  let items = [];\n  function evaluationFunc(element, datasetIndex, index) {\n    const {startAngle, endAngle} = element.getProps(['startAngle', 'endAngle'], useFinalPosition);\n    const {angle} = getAngleFromPoint(element, {x: position.x, y: position.y});\n    if (_angleBetween(angle, startAngle, endAngle)) {\n      items.push({element, datasetIndex, index});\n    }\n  }\n  evaluateInteractionItems(chart, axis, position, evaluationFunc);\n  return items;\n}\nfunction getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n  let items = [];\n  const distanceMetric = getDistanceMetricForAxis(axis);\n  let minDistance = Number.POSITIVE_INFINITY;\n  function evaluationFunc(element, datasetIndex, index) {\n    const inRange = element.inRange(position.x, position.y, useFinalPosition);\n    if (intersect && !inRange) {\n      return;\n    }\n    const center = element.getCenterPoint(useFinalPosition);\n    const pointInArea = !!includeInvisible || chart.isPointInArea(center);\n    if (!pointInArea && !inRange) {\n      return;\n    }\n    const distance = distanceMetric(position, center);\n    if (distance < minDistance) {\n      items = [{element, datasetIndex, index}];\n      minDistance = distance;\n    } else if (distance === minDistance) {\n      items.push({element, datasetIndex, index});\n    }\n  }\n  evaluateInteractionItems(chart, axis, position, evaluationFunc);\n  return items;\n}\nfunction getNearestItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n  if (!includeInvisible && !chart.isPointInArea(position)) {\n    return [];\n  }\n  return axis === 'r' && !intersect\n    ? getNearestRadialItems(chart, position, axis, useFinalPosition)\n    : getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible);\n}\nfunction getAxisItems(chart, position, axis, intersect, useFinalPosition) {\n  const items = [];\n  const rangeMethod = axis === 'x' ? 'inXRange' : 'inYRange';\n  let intersectsItem = false;\n  evaluateInteractionItems(chart, axis, position, (element, datasetIndex, index) => {\n    if (element[rangeMethod](position[axis], useFinalPosition)) {\n      items.push({element, datasetIndex, index});\n      intersectsItem = intersectsItem || element.inRange(position.x, position.y, useFinalPosition);\n    }\n  });\n  if (intersect && !intersectsItem) {\n    return [];\n  }\n  return items;\n}\nvar Interaction = {\n  evaluateInteractionItems,\n  modes: {\n    index(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      const axis = options.axis || 'x';\n      const includeInvisible = options.includeInvisible || false;\n      const items = options.intersect\n        ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible)\n        : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n      const elements = [];\n      if (!items.length) {\n        return [];\n      }\n      chart.getSortedVisibleDatasetMetas().forEach((meta) => {\n        const index = items[0].index;\n        const element = meta.data[index];\n        if (element && !element.skip) {\n          elements.push({element, datasetIndex: meta.index, index});\n        }\n      });\n      return elements;\n    },\n    dataset(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      const axis = options.axis || 'xy';\n      const includeInvisible = options.includeInvisible || false;\n      let items = options.intersect\n        ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) :\n        getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n      if (items.length > 0) {\n        const datasetIndex = items[0].datasetIndex;\n        const data = chart.getDatasetMeta(datasetIndex).data;\n        items = [];\n        for (let i = 0; i < data.length; ++i) {\n          items.push({element: data[i], datasetIndex, index: i});\n        }\n      }\n      return items;\n    },\n    point(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      const axis = options.axis || 'xy';\n      const includeInvisible = options.includeInvisible || false;\n      return getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible);\n    },\n    nearest(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      const axis = options.axis || 'xy';\n      const includeInvisible = options.includeInvisible || false;\n      return getNearestItems(chart, position, axis, options.intersect, useFinalPosition, includeInvisible);\n    },\n    x(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      return getAxisItems(chart, position, 'x', options.intersect, useFinalPosition);\n    },\n    y(chart, e, options, useFinalPosition) {\n      const position = getRelativePosition(e, chart);\n      return getAxisItems(chart, position, 'y', options.intersect, useFinalPosition);\n    }\n  }\n};\n\nconst STATIC_POSITIONS = ['left', 'top', 'right', 'bottom'];\nfunction filterByPosition(array, position) {\n  return array.filter(v => v.pos === position);\n}\nfunction filterDynamicPositionByAxis(array, axis) {\n  return array.filter(v => STATIC_POSITIONS.indexOf(v.pos) === -1 && v.box.axis === axis);\n}\nfunction sortByWeight(array, reverse) {\n  return array.sort((a, b) => {\n    const v0 = reverse ? b : a;\n    const v1 = reverse ? a : b;\n    return v0.weight === v1.weight ?\n      v0.index - v1.index :\n      v0.weight - v1.weight;\n  });\n}\nfunction wrapBoxes(boxes) {\n  const layoutBoxes = [];\n  let i, ilen, box, pos, stack, stackWeight;\n  for (i = 0, ilen = (boxes || []).length; i < ilen; ++i) {\n    box = boxes[i];\n    ({position: pos, options: {stack, stackWeight = 1}} = box);\n    layoutBoxes.push({\n      index: i,\n      box,\n      pos,\n      horizontal: box.isHorizontal(),\n      weight: box.weight,\n      stack: stack && (pos + stack),\n      stackWeight\n    });\n  }\n  return layoutBoxes;\n}\nfunction buildStacks(layouts) {\n  const stacks = {};\n  for (const wrap of layouts) {\n    const {stack, pos, stackWeight} = wrap;\n    if (!stack || !STATIC_POSITIONS.includes(pos)) {\n      continue;\n    }\n    const _stack = stacks[stack] || (stacks[stack] = {count: 0, placed: 0, weight: 0, size: 0});\n    _stack.count++;\n    _stack.weight += stackWeight;\n  }\n  return stacks;\n}\nfunction setLayoutDims(layouts, params) {\n  const stacks = buildStacks(layouts);\n  const {vBoxMaxWidth, hBoxMaxHeight} = params;\n  let i, ilen, layout;\n  for (i = 0, ilen = layouts.length; i < ilen; ++i) {\n    layout = layouts[i];\n    const {fullSize} = layout.box;\n    const stack = stacks[layout.stack];\n    const factor = stack && layout.stackWeight / stack.weight;\n    if (layout.horizontal) {\n      layout.width = factor ? factor * vBoxMaxWidth : fullSize && params.availableWidth;\n      layout.height = hBoxMaxHeight;\n    } else {\n      layout.width = vBoxMaxWidth;\n      layout.height = factor ? factor * hBoxMaxHeight : fullSize && params.availableHeight;\n    }\n  }\n  return stacks;\n}\nfunction buildLayoutBoxes(boxes) {\n  const layoutBoxes = wrapBoxes(boxes);\n  const fullSize = sortByWeight(layoutBoxes.filter(wrap => wrap.box.fullSize), true);\n  const left = sortByWeight(filterByPosition(layoutBoxes, 'left'), true);\n  const right = sortByWeight(filterByPosition(layoutBoxes, 'right'));\n  const top = sortByWeight(filterByPosition(layoutBoxes, 'top'), true);\n  const bottom = sortByWeight(filterByPosition(layoutBoxes, 'bottom'));\n  const centerHorizontal = filterDynamicPositionByAxis(layoutBoxes, 'x');\n  const centerVertical = filterDynamicPositionByAxis(layoutBoxes, 'y');\n  return {\n    fullSize,\n    leftAndTop: left.concat(top),\n    rightAndBottom: right.concat(centerVertical).concat(bottom).concat(centerHorizontal),\n    chartArea: filterByPosition(layoutBoxes, 'chartArea'),\n    vertical: left.concat(right).concat(centerVertical),\n    horizontal: top.concat(bottom).concat(centerHorizontal)\n  };\n}\nfunction getCombinedMax(maxPadding, chartArea, a, b) {\n  return Math.max(maxPadding[a], chartArea[a]) + Math.max(maxPadding[b], chartArea[b]);\n}\nfunction updateMaxPadding(maxPadding, boxPadding) {\n  maxPadding.top = Math.max(maxPadding.top, boxPadding.top);\n  maxPadding.left = Math.max(maxPadding.left, boxPadding.left);\n  maxPadding.bottom = Math.max(maxPadding.bottom, boxPadding.bottom);\n  maxPadding.right = Math.max(maxPadding.right, boxPadding.right);\n}\nfunction updateDims(chartArea, params, layout, stacks) {\n  const {pos, box} = layout;\n  const maxPadding = chartArea.maxPadding;\n  if (!isObject(pos)) {\n    if (layout.size) {\n      chartArea[pos] -= layout.size;\n    }\n    const stack = stacks[layout.stack] || {size: 0, count: 1};\n    stack.size = Math.max(stack.size, layout.horizontal ? box.height : box.width);\n    layout.size = stack.size / stack.count;\n    chartArea[pos] += layout.size;\n  }\n  if (box.getPadding) {\n    updateMaxPadding(maxPadding, box.getPadding());\n  }\n  const newWidth = Math.max(0, params.outerWidth - getCombinedMax(maxPadding, chartArea, 'left', 'right'));\n  const newHeight = Math.max(0, params.outerHeight - getCombinedMax(maxPadding, chartArea, 'top', 'bottom'));\n  const widthChanged = newWidth !== chartArea.w;\n  const heightChanged = newHeight !== chartArea.h;\n  chartArea.w = newWidth;\n  chartArea.h = newHeight;\n  return layout.horizontal\n    ? {same: widthChanged, other: heightChanged}\n    : {same: heightChanged, other: widthChanged};\n}\nfunction handleMaxPadding(chartArea) {\n  const maxPadding = chartArea.maxPadding;\n  function updatePos(pos) {\n    const change = Math.max(maxPadding[pos] - chartArea[pos], 0);\n    chartArea[pos] += change;\n    return change;\n  }\n  chartArea.y += updatePos('top');\n  chartArea.x += updatePos('left');\n  updatePos('right');\n  updatePos('bottom');\n}\nfunction getMargins(horizontal, chartArea) {\n  const maxPadding = chartArea.maxPadding;\n  function marginForPositions(positions) {\n    const margin = {left: 0, top: 0, right: 0, bottom: 0};\n    positions.forEach((pos) => {\n      margin[pos] = Math.max(chartArea[pos], maxPadding[pos]);\n    });\n    return margin;\n  }\n  return horizontal\n    ? marginForPositions(['left', 'right'])\n    : marginForPositions(['top', 'bottom']);\n}\nfunction fitBoxes(boxes, chartArea, params, stacks) {\n  const refitBoxes = [];\n  let i, ilen, layout, box, refit, changed;\n  for (i = 0, ilen = boxes.length, refit = 0; i < ilen; ++i) {\n    layout = boxes[i];\n    box = layout.box;\n    box.update(\n      layout.width || chartArea.w,\n      layout.height || chartArea.h,\n      getMargins(layout.horizontal, chartArea)\n    );\n    const {same, other} = updateDims(chartArea, params, layout, stacks);\n    refit |= same && refitBoxes.length;\n    changed = changed || other;\n    if (!box.fullSize) {\n      refitBoxes.push(layout);\n    }\n  }\n  return refit && fitBoxes(refitBoxes, chartArea, params, stacks) || changed;\n}\nfunction setBoxDims(box, left, top, width, height) {\n  box.top = top;\n  box.left = left;\n  box.right = left + width;\n  box.bottom = top + height;\n  box.width = width;\n  box.height = height;\n}\nfunction placeBoxes(boxes, chartArea, params, stacks) {\n  const userPadding = params.padding;\n  let {x, y} = chartArea;\n  for (const layout of boxes) {\n    const box = layout.box;\n    const stack = stacks[layout.stack] || {count: 1, placed: 0, weight: 1};\n    const weight = (layout.stackWeight / stack.weight) || 1;\n    if (layout.horizontal) {\n      const width = chartArea.w * weight;\n      const height = stack.size || box.height;\n      if (defined(stack.start)) {\n        y = stack.start;\n      }\n      if (box.fullSize) {\n        setBoxDims(box, userPadding.left, y, params.outerWidth - userPadding.right - userPadding.left, height);\n      } else {\n        setBoxDims(box, chartArea.left + stack.placed, y, width, height);\n      }\n      stack.start = y;\n      stack.placed += width;\n      y = box.bottom;\n    } else {\n      const height = chartArea.h * weight;\n      const width = stack.size || box.width;\n      if (defined(stack.start)) {\n        x = stack.start;\n      }\n      if (box.fullSize) {\n        setBoxDims(box, x, userPadding.top, width, params.outerHeight - userPadding.bottom - userPadding.top);\n      } else {\n        setBoxDims(box, x, chartArea.top + stack.placed, width, height);\n      }\n      stack.start = x;\n      stack.placed += height;\n      x = box.right;\n    }\n  }\n  chartArea.x = x;\n  chartArea.y = y;\n}\ndefaults.set('layout', {\n  autoPadding: true,\n  padding: {\n    top: 0,\n    right: 0,\n    bottom: 0,\n    left: 0\n  }\n});\nvar layouts = {\n  addBox(chart, item) {\n    if (!chart.boxes) {\n      chart.boxes = [];\n    }\n    item.fullSize = item.fullSize || false;\n    item.position = item.position || 'top';\n    item.weight = item.weight || 0;\n    item._layers = item._layers || function() {\n      return [{\n        z: 0,\n        draw(chartArea) {\n          item.draw(chartArea);\n        }\n      }];\n    };\n    chart.boxes.push(item);\n  },\n  removeBox(chart, layoutItem) {\n    const index = chart.boxes ? chart.boxes.indexOf(layoutItem) : -1;\n    if (index !== -1) {\n      chart.boxes.splice(index, 1);\n    }\n  },\n  configure(chart, item, options) {\n    item.fullSize = options.fullSize;\n    item.position = options.position;\n    item.weight = options.weight;\n  },\n  update(chart, width, height, minPadding) {\n    if (!chart) {\n      return;\n    }\n    const padding = toPadding(chart.options.layout.padding);\n    const availableWidth = Math.max(width - padding.width, 0);\n    const availableHeight = Math.max(height - padding.height, 0);\n    const boxes = buildLayoutBoxes(chart.boxes);\n    const verticalBoxes = boxes.vertical;\n    const horizontalBoxes = boxes.horizontal;\n    each(chart.boxes, box => {\n      if (typeof box.beforeLayout === 'function') {\n        box.beforeLayout();\n      }\n    });\n    const visibleVerticalBoxCount = verticalBoxes.reduce((total, wrap) =>\n      wrap.box.options && wrap.box.options.display === false ? total : total + 1, 0) || 1;\n    const params = Object.freeze({\n      outerWidth: width,\n      outerHeight: height,\n      padding,\n      availableWidth,\n      availableHeight,\n      vBoxMaxWidth: availableWidth / 2 / visibleVerticalBoxCount,\n      hBoxMaxHeight: availableHeight / 2\n    });\n    const maxPadding = Object.assign({}, padding);\n    updateMaxPadding(maxPadding, toPadding(minPadding));\n    const chartArea = Object.assign({\n      maxPadding,\n      w: availableWidth,\n      h: availableHeight,\n      x: padding.left,\n      y: padding.top\n    }, padding);\n    const stacks = setLayoutDims(verticalBoxes.concat(horizontalBoxes), params);\n    fitBoxes(boxes.fullSize, chartArea, params, stacks);\n    fitBoxes(verticalBoxes, chartArea, params, stacks);\n    if (fitBoxes(horizontalBoxes, chartArea, params, stacks)) {\n      fitBoxes(verticalBoxes, chartArea, params, stacks);\n    }\n    handleMaxPadding(chartArea);\n    placeBoxes(boxes.leftAndTop, chartArea, params, stacks);\n    chartArea.x += chartArea.w;\n    chartArea.y += chartArea.h;\n    placeBoxes(boxes.rightAndBottom, chartArea, params, stacks);\n    chart.chartArea = {\n      left: chartArea.left,\n      top: chartArea.top,\n      right: chartArea.left + chartArea.w,\n      bottom: chartArea.top + chartArea.h,\n      height: chartArea.h,\n      width: chartArea.w,\n    };\n    each(boxes.chartArea, (layout) => {\n      const box = layout.box;\n      Object.assign(box, chart.chartArea);\n      box.update(chartArea.w, chartArea.h, {left: 0, top: 0, right: 0, bottom: 0});\n    });\n  }\n};\n\nclass BasePlatform {\n  acquireContext(canvas, aspectRatio) {}\n  releaseContext(context) {\n    return false;\n  }\n  addEventListener(chart, type, listener) {}\n  removeEventListener(chart, type, listener) {}\n  getDevicePixelRatio() {\n    return 1;\n  }\n  getMaximumSize(element, width, height, aspectRatio) {\n    width = Math.max(0, width || element.width);\n    height = height || element.height;\n    return {\n      width,\n      height: Math.max(0, aspectRatio ? Math.floor(width / aspectRatio) : height)\n    };\n  }\n  isAttached(canvas) {\n    return true;\n  }\n  updateConfig(config) {\n  }\n}\n\nclass BasicPlatform extends BasePlatform {\n  acquireContext(item) {\n    return item && item.getContext && item.getContext('2d') || null;\n  }\n  updateConfig(config) {\n    config.options.animation = false;\n  }\n}\n\nconst EXPANDO_KEY = '$chartjs';\nconst EVENT_TYPES = {\n  touchstart: 'mousedown',\n  touchmove: 'mousemove',\n  touchend: 'mouseup',\n  pointerenter: 'mouseenter',\n  pointerdown: 'mousedown',\n  pointermove: 'mousemove',\n  pointerup: 'mouseup',\n  pointerleave: 'mouseout',\n  pointerout: 'mouseout'\n};\nconst isNullOrEmpty = value => value === null || value === '';\nfunction initCanvas(canvas, aspectRatio) {\n  const style = canvas.style;\n  const renderHeight = canvas.getAttribute('height');\n  const renderWidth = canvas.getAttribute('width');\n  canvas[EXPANDO_KEY] = {\n    initial: {\n      height: renderHeight,\n      width: renderWidth,\n      style: {\n        display: style.display,\n        height: style.height,\n        width: style.width\n      }\n    }\n  };\n  style.display = style.display || 'block';\n  style.boxSizing = style.boxSizing || 'border-box';\n  if (isNullOrEmpty(renderWidth)) {\n    const displayWidth = readUsedSize(canvas, 'width');\n    if (displayWidth !== undefined) {\n      canvas.width = displayWidth;\n    }\n  }\n  if (isNullOrEmpty(renderHeight)) {\n    if (canvas.style.height === '') {\n      canvas.height = canvas.width / (aspectRatio || 2);\n    } else {\n      const displayHeight = readUsedSize(canvas, 'height');\n      if (displayHeight !== undefined) {\n        canvas.height = displayHeight;\n      }\n    }\n  }\n  return canvas;\n}\nconst eventListenerOptions = supportsEventListenerOptions ? {passive: true} : false;\nfunction addListener(node, type, listener) {\n  node.addEventListener(type, listener, eventListenerOptions);\n}\nfunction removeListener(chart, type, listener) {\n  chart.canvas.removeEventListener(type, listener, eventListenerOptions);\n}\nfunction fromNativeEvent(event, chart) {\n  const type = EVENT_TYPES[event.type] || event.type;\n  const {x, y} = getRelativePosition(event, chart);\n  return {\n    type,\n    chart,\n    native: event,\n    x: x !== undefined ? x : null,\n    y: y !== undefined ? y : null,\n  };\n}\nfunction nodeListContains(nodeList, canvas) {\n  for (const node of nodeList) {\n    if (node === canvas || node.contains(canvas)) {\n      return true;\n    }\n  }\n}\nfunction createAttachObserver(chart, type, listener) {\n  const canvas = chart.canvas;\n  const observer = new MutationObserver(entries => {\n    let trigger = false;\n    for (const entry of entries) {\n      trigger = trigger || nodeListContains(entry.addedNodes, canvas);\n      trigger = trigger && !nodeListContains(entry.removedNodes, canvas);\n    }\n    if (trigger) {\n      listener();\n    }\n  });\n  observer.observe(document, {childList: true, subtree: true});\n  return observer;\n}\nfunction createDetachObserver(chart, type, listener) {\n  const canvas = chart.canvas;\n  const observer = new MutationObserver(entries => {\n    let trigger = false;\n    for (const entry of entries) {\n      trigger = trigger || nodeListContains(entry.removedNodes, canvas);\n      trigger = trigger && !nodeListContains(entry.addedNodes, canvas);\n    }\n    if (trigger) {\n      listener();\n    }\n  });\n  observer.observe(document, {childList: true, subtree: true});\n  return observer;\n}\nconst drpListeningCharts = new Map();\nlet oldDevicePixelRatio = 0;\nfunction onWindowResize() {\n  const dpr = window.devicePixelRatio;\n  if (dpr === oldDevicePixelRatio) {\n    return;\n  }\n  oldDevicePixelRatio = dpr;\n  drpListeningCharts.forEach((resize, chart) => {\n    if (chart.currentDevicePixelRatio !== dpr) {\n      resize();\n    }\n  });\n}\nfunction listenDevicePixelRatioChanges(chart, resize) {\n  if (!drpListeningCharts.size) {\n    window.addEventListener('resize', onWindowResize);\n  }\n  drpListeningCharts.set(chart, resize);\n}\nfunction unlistenDevicePixelRatioChanges(chart) {\n  drpListeningCharts.delete(chart);\n  if (!drpListeningCharts.size) {\n    window.removeEventListener('resize', onWindowResize);\n  }\n}\nfunction createResizeObserver(chart, type, listener) {\n  const canvas = chart.canvas;\n  const container = canvas && _getParentNode(canvas);\n  if (!container) {\n    return;\n  }\n  const resize = throttled((width, height) => {\n    const w = container.clientWidth;\n    listener(width, height);\n    if (w < container.clientWidth) {\n      listener();\n    }\n  }, window);\n  const observer = new ResizeObserver(entries => {\n    const entry = entries[0];\n    const width = entry.contentRect.width;\n    const height = entry.contentRect.height;\n    if (width === 0 && height === 0) {\n      return;\n    }\n    resize(width, height);\n  });\n  observer.observe(container);\n  listenDevicePixelRatioChanges(chart, resize);\n  return observer;\n}\nfunction releaseObserver(chart, type, observer) {\n  if (observer) {\n    observer.disconnect();\n  }\n  if (type === 'resize') {\n    unlistenDevicePixelRatioChanges(chart);\n  }\n}\nfunction createProxyAndListen(chart, type, listener) {\n  const canvas = chart.canvas;\n  const proxy = throttled((event) => {\n    if (chart.ctx !== null) {\n      listener(fromNativeEvent(event, chart));\n    }\n  }, chart, (args) => {\n    const event = args[0];\n    return [event, event.offsetX, event.offsetY];\n  });\n  addListener(canvas, type, proxy);\n  return proxy;\n}\nclass DomPlatform extends BasePlatform {\n  acquireContext(canvas, aspectRatio) {\n    const context = canvas && canvas.getContext && canvas.getContext('2d');\n    if (context && context.canvas === canvas) {\n      initCanvas(canvas, aspectRatio);\n      return context;\n    }\n    return null;\n  }\n  releaseContext(context) {\n    const canvas = context.canvas;\n    if (!canvas[EXPANDO_KEY]) {\n      return false;\n    }\n    const initial = canvas[EXPANDO_KEY].initial;\n    ['height', 'width'].forEach((prop) => {\n      const value = initial[prop];\n      if (isNullOrUndef(value)) {\n        canvas.removeAttribute(prop);\n      } else {\n        canvas.setAttribute(prop, value);\n      }\n    });\n    const style = initial.style || {};\n    Object.keys(style).forEach((key) => {\n      canvas.style[key] = style[key];\n    });\n    canvas.width = canvas.width;\n    delete canvas[EXPANDO_KEY];\n    return true;\n  }\n  addEventListener(chart, type, listener) {\n    this.removeEventListener(chart, type);\n    const proxies = chart.$proxies || (chart.$proxies = {});\n    const handlers = {\n      attach: createAttachObserver,\n      detach: createDetachObserver,\n      resize: createResizeObserver\n    };\n    const handler = handlers[type] || createProxyAndListen;\n    proxies[type] = handler(chart, type, listener);\n  }\n  removeEventListener(chart, type) {\n    const proxies = chart.$proxies || (chart.$proxies = {});\n    const proxy = proxies[type];\n    if (!proxy) {\n      return;\n    }\n    const handlers = {\n      attach: releaseObserver,\n      detach: releaseObserver,\n      resize: releaseObserver\n    };\n    const handler = handlers[type] || removeListener;\n    handler(chart, type, proxy);\n    proxies[type] = undefined;\n  }\n  getDevicePixelRatio() {\n    return window.devicePixelRatio;\n  }\n  getMaximumSize(canvas, width, height, aspectRatio) {\n    return getMaximumSize(canvas, width, height, aspectRatio);\n  }\n  isAttached(canvas) {\n    const container = _getParentNode(canvas);\n    return !!(container && container.isConnected);\n  }\n}\n\nfunction _detectPlatform(canvas) {\n  if (!_isDomSupported() || (typeof OffscreenCanvas !== 'undefined' && canvas instanceof OffscreenCanvas)) {\n    return BasicPlatform;\n  }\n  return DomPlatform;\n}\n\nclass Element {\n  constructor() {\n    this.x = undefined;\n    this.y = undefined;\n    this.active = false;\n    this.options = undefined;\n    this.$animations = undefined;\n  }\n  tooltipPosition(useFinalPosition) {\n    const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n    return {x, y};\n  }\n  hasValue() {\n    return isNumber(this.x) && isNumber(this.y);\n  }\n  getProps(props, final) {\n    const anims = this.$animations;\n    if (!final || !anims) {\n      return this;\n    }\n    const ret = {};\n    props.forEach(prop => {\n      ret[prop] = anims[prop] && anims[prop].active() ? anims[prop]._to : this[prop];\n    });\n    return ret;\n  }\n}\nElement.defaults = {};\nElement.defaultRoutes = undefined;\n\nconst formatters = {\n  values(value) {\n    return isArray(value) ? value : '' + value;\n  },\n  numeric(tickValue, index, ticks) {\n    if (tickValue === 0) {\n      return '0';\n    }\n    const locale = this.chart.options.locale;\n    let notation;\n    let delta = tickValue;\n    if (ticks.length > 1) {\n      const maxTick = Math.max(Math.abs(ticks[0].value), Math.abs(ticks[ticks.length - 1].value));\n      if (maxTick < 1e-4 || maxTick > 1e+15) {\n        notation = 'scientific';\n      }\n      delta = calculateDelta(tickValue, ticks);\n    }\n    const logDelta = log10(Math.abs(delta));\n    const numDecimal = Math.max(Math.min(-1 * Math.floor(logDelta), 20), 0);\n    const options = {notation, minimumFractionDigits: numDecimal, maximumFractionDigits: numDecimal};\n    Object.assign(options, this.options.ticks.format);\n    return formatNumber(tickValue, locale, options);\n  },\n  logarithmic(tickValue, index, ticks) {\n    if (tickValue === 0) {\n      return '0';\n    }\n    const remain = tickValue / (Math.pow(10, Math.floor(log10(tickValue))));\n    if (remain === 1 || remain === 2 || remain === 5) {\n      return formatters.numeric.call(this, tickValue, index, ticks);\n    }\n    return '';\n  }\n};\nfunction calculateDelta(tickValue, ticks) {\n  let delta = ticks.length > 3 ? ticks[2].value - ticks[1].value : ticks[1].value - ticks[0].value;\n  if (Math.abs(delta) >= 1 && tickValue !== Math.floor(tickValue)) {\n    delta = tickValue - Math.floor(tickValue);\n  }\n  return delta;\n}\nvar Ticks = {formatters};\n\ndefaults.set('scale', {\n  display: true,\n  offset: false,\n  reverse: false,\n  beginAtZero: false,\n  bounds: 'ticks',\n  grace: 0,\n  grid: {\n    display: true,\n    lineWidth: 1,\n    drawBorder: true,\n    drawOnChartArea: true,\n    drawTicks: true,\n    tickLength: 8,\n    tickWidth: (_ctx, options) => options.lineWidth,\n    tickColor: (_ctx, options) => options.color,\n    offset: false,\n    borderDash: [],\n    borderDashOffset: 0.0,\n    borderWidth: 1\n  },\n  title: {\n    display: false,\n    text: '',\n    padding: {\n      top: 4,\n      bottom: 4\n    }\n  },\n  ticks: {\n    minRotation: 0,\n    maxRotation: 50,\n    mirror: false,\n    textStrokeWidth: 0,\n    textStrokeColor: '',\n    padding: 3,\n    display: true,\n    autoSkip: true,\n    autoSkipPadding: 3,\n    labelOffset: 0,\n    callback: Ticks.formatters.values,\n    minor: {},\n    major: {},\n    align: 'center',\n    crossAlign: 'near',\n    showLabelBackdrop: false,\n    backdropColor: 'rgba(255, 255, 255, 0.75)',\n    backdropPadding: 2,\n  }\n});\ndefaults.route('scale.ticks', 'color', '', 'color');\ndefaults.route('scale.grid', 'color', '', 'borderColor');\ndefaults.route('scale.grid', 'borderColor', '', 'borderColor');\ndefaults.route('scale.title', 'color', '', 'color');\ndefaults.describe('scale', {\n  _fallback: false,\n  _scriptable: (name) => !name.startsWith('before') && !name.startsWith('after') && name !== 'callback' && name !== 'parser',\n  _indexable: (name) => name !== 'borderDash' && name !== 'tickBorderDash',\n});\ndefaults.describe('scales', {\n  _fallback: 'scale',\n});\ndefaults.describe('scale.ticks', {\n  _scriptable: (name) => name !== 'backdropPadding' && name !== 'callback',\n  _indexable: (name) => name !== 'backdropPadding',\n});\n\nfunction autoSkip(scale, ticks) {\n  const tickOpts = scale.options.ticks;\n  const ticksLimit = tickOpts.maxTicksLimit || determineMaxTicks(scale);\n  const majorIndices = tickOpts.major.enabled ? getMajorIndices(ticks) : [];\n  const numMajorIndices = majorIndices.length;\n  const first = majorIndices[0];\n  const last = majorIndices[numMajorIndices - 1];\n  const newTicks = [];\n  if (numMajorIndices > ticksLimit) {\n    skipMajors(ticks, newTicks, majorIndices, numMajorIndices / ticksLimit);\n    return newTicks;\n  }\n  const spacing = calculateSpacing(majorIndices, ticks, ticksLimit);\n  if (numMajorIndices > 0) {\n    let i, ilen;\n    const avgMajorSpacing = numMajorIndices > 1 ? Math.round((last - first) / (numMajorIndices - 1)) : null;\n    skip(ticks, newTicks, spacing, isNullOrUndef(avgMajorSpacing) ? 0 : first - avgMajorSpacing, first);\n    for (i = 0, ilen = numMajorIndices - 1; i < ilen; i++) {\n      skip(ticks, newTicks, spacing, majorIndices[i], majorIndices[i + 1]);\n    }\n    skip(ticks, newTicks, spacing, last, isNullOrUndef(avgMajorSpacing) ? ticks.length : last + avgMajorSpacing);\n    return newTicks;\n  }\n  skip(ticks, newTicks, spacing);\n  return newTicks;\n}\nfunction determineMaxTicks(scale) {\n  const offset = scale.options.offset;\n  const tickLength = scale._tickSize();\n  const maxScale = scale._length / tickLength + (offset ? 0 : 1);\n  const maxChart = scale._maxLength / tickLength;\n  return Math.floor(Math.min(maxScale, maxChart));\n}\nfunction calculateSpacing(majorIndices, ticks, ticksLimit) {\n  const evenMajorSpacing = getEvenSpacing(majorIndices);\n  const spacing = ticks.length / ticksLimit;\n  if (!evenMajorSpacing) {\n    return Math.max(spacing, 1);\n  }\n  const factors = _factorize(evenMajorSpacing);\n  for (let i = 0, ilen = factors.length - 1; i < ilen; i++) {\n    const factor = factors[i];\n    if (factor > spacing) {\n      return factor;\n    }\n  }\n  return Math.max(spacing, 1);\n}\nfunction getMajorIndices(ticks) {\n  const result = [];\n  let i, ilen;\n  for (i = 0, ilen = ticks.length; i < ilen; i++) {\n    if (ticks[i].major) {\n      result.push(i);\n    }\n  }\n  return result;\n}\nfunction skipMajors(ticks, newTicks, majorIndices, spacing) {\n  let count = 0;\n  let next = majorIndices[0];\n  let i;\n  spacing = Math.ceil(spacing);\n  for (i = 0; i < ticks.length; i++) {\n    if (i === next) {\n      newTicks.push(ticks[i]);\n      count++;\n      next = majorIndices[count * spacing];\n    }\n  }\n}\nfunction skip(ticks, newTicks, spacing, majorStart, majorEnd) {\n  const start = valueOrDefault(majorStart, 0);\n  const end = Math.min(valueOrDefault(majorEnd, ticks.length), ticks.length);\n  let count = 0;\n  let length, i, next;\n  spacing = Math.ceil(spacing);\n  if (majorEnd) {\n    length = majorEnd - majorStart;\n    spacing = length / Math.floor(length / spacing);\n  }\n  next = start;\n  while (next < 0) {\n    count++;\n    next = Math.round(start + count * spacing);\n  }\n  for (i = Math.max(start, 0); i < end; i++) {\n    if (i === next) {\n      newTicks.push(ticks[i]);\n      count++;\n      next = Math.round(start + count * spacing);\n    }\n  }\n}\nfunction getEvenSpacing(arr) {\n  const len = arr.length;\n  let i, diff;\n  if (len < 2) {\n    return false;\n  }\n  for (diff = arr[0], i = 1; i < len; ++i) {\n    if (arr[i] - arr[i - 1] !== diff) {\n      return false;\n    }\n  }\n  return diff;\n}\n\nconst reverseAlign = (align) => align === 'left' ? 'right' : align === 'right' ? 'left' : align;\nconst offsetFromEdge = (scale, edge, offset) => edge === 'top' || edge === 'left' ? scale[edge] + offset : scale[edge] - offset;\nfunction sample(arr, numItems) {\n  const result = [];\n  const increment = arr.length / numItems;\n  const len = arr.length;\n  let i = 0;\n  for (; i < len; i += increment) {\n    result.push(arr[Math.floor(i)]);\n  }\n  return result;\n}\nfunction getPixelForGridLine(scale, index, offsetGridLines) {\n  const length = scale.ticks.length;\n  const validIndex = Math.min(index, length - 1);\n  const start = scale._startPixel;\n  const end = scale._endPixel;\n  const epsilon = 1e-6;\n  let lineValue = scale.getPixelForTick(validIndex);\n  let offset;\n  if (offsetGridLines) {\n    if (length === 1) {\n      offset = Math.max(lineValue - start, end - lineValue);\n    } else if (index === 0) {\n      offset = (scale.getPixelForTick(1) - lineValue) / 2;\n    } else {\n      offset = (lineValue - scale.getPixelForTick(validIndex - 1)) / 2;\n    }\n    lineValue += validIndex < index ? offset : -offset;\n    if (lineValue < start - epsilon || lineValue > end + epsilon) {\n      return;\n    }\n  }\n  return lineValue;\n}\nfunction garbageCollect(caches, length) {\n  each(caches, (cache) => {\n    const gc = cache.gc;\n    const gcLen = gc.length / 2;\n    let i;\n    if (gcLen > length) {\n      for (i = 0; i < gcLen; ++i) {\n        delete cache.data[gc[i]];\n      }\n      gc.splice(0, gcLen);\n    }\n  });\n}\nfunction getTickMarkLength(options) {\n  return options.drawTicks ? options.tickLength : 0;\n}\nfunction getTitleHeight(options, fallback) {\n  if (!options.display) {\n    return 0;\n  }\n  const font = toFont(options.font, fallback);\n  const padding = toPadding(options.padding);\n  const lines = isArray(options.text) ? options.text.length : 1;\n  return (lines * font.lineHeight) + padding.height;\n}\nfunction createScaleContext(parent, scale) {\n  return createContext(parent, {\n    scale,\n    type: 'scale'\n  });\n}\nfunction createTickContext(parent, index, tick) {\n  return createContext(parent, {\n    tick,\n    index,\n    type: 'tick'\n  });\n}\nfunction titleAlign(align, position, reverse) {\n  let ret = _toLeftRightCenter(align);\n  if ((reverse && position !== 'right') || (!reverse && position === 'right')) {\n    ret = reverseAlign(ret);\n  }\n  return ret;\n}\nfunction titleArgs(scale, offset, position, align) {\n  const {top, left, bottom, right, chart} = scale;\n  const {chartArea, scales} = chart;\n  let rotation = 0;\n  let maxWidth, titleX, titleY;\n  const height = bottom - top;\n  const width = right - left;\n  if (scale.isHorizontal()) {\n    titleX = _alignStartEnd(align, left, right);\n    if (isObject(position)) {\n      const positionAxisID = Object.keys(position)[0];\n      const value = position[positionAxisID];\n      titleY = scales[positionAxisID].getPixelForValue(value) + height - offset;\n    } else if (position === 'center') {\n      titleY = (chartArea.bottom + chartArea.top) / 2 + height - offset;\n    } else {\n      titleY = offsetFromEdge(scale, position, offset);\n    }\n    maxWidth = right - left;\n  } else {\n    if (isObject(position)) {\n      const positionAxisID = Object.keys(position)[0];\n      const value = position[positionAxisID];\n      titleX = scales[positionAxisID].getPixelForValue(value) - width + offset;\n    } else if (position === 'center') {\n      titleX = (chartArea.left + chartArea.right) / 2 - width + offset;\n    } else {\n      titleX = offsetFromEdge(scale, position, offset);\n    }\n    titleY = _alignStartEnd(align, bottom, top);\n    rotation = position === 'left' ? -HALF_PI : HALF_PI;\n  }\n  return {titleX, titleY, maxWidth, rotation};\n}\nclass Scale extends Element {\n  constructor(cfg) {\n    super();\n    this.id = cfg.id;\n    this.type = cfg.type;\n    this.options = undefined;\n    this.ctx = cfg.ctx;\n    this.chart = cfg.chart;\n    this.top = undefined;\n    this.bottom = undefined;\n    this.left = undefined;\n    this.right = undefined;\n    this.width = undefined;\n    this.height = undefined;\n    this._margins = {\n      left: 0,\n      right: 0,\n      top: 0,\n      bottom: 0\n    };\n    this.maxWidth = undefined;\n    this.maxHeight = undefined;\n    this.paddingTop = undefined;\n    this.paddingBottom = undefined;\n    this.paddingLeft = undefined;\n    this.paddingRight = undefined;\n    this.axis = undefined;\n    this.labelRotation = undefined;\n    this.min = undefined;\n    this.max = undefined;\n    this._range = undefined;\n    this.ticks = [];\n    this._gridLineItems = null;\n    this._labelItems = null;\n    this._labelSizes = null;\n    this._length = 0;\n    this._maxLength = 0;\n    this._longestTextCache = {};\n    this._startPixel = undefined;\n    this._endPixel = undefined;\n    this._reversePixels = false;\n    this._userMax = undefined;\n    this._userMin = undefined;\n    this._suggestedMax = undefined;\n    this._suggestedMin = undefined;\n    this._ticksLength = 0;\n    this._borderValue = 0;\n    this._cache = {};\n    this._dataLimitsCached = false;\n    this.$context = undefined;\n  }\n  init(options) {\n    this.options = options.setContext(this.getContext());\n    this.axis = options.axis;\n    this._userMin = this.parse(options.min);\n    this._userMax = this.parse(options.max);\n    this._suggestedMin = this.parse(options.suggestedMin);\n    this._suggestedMax = this.parse(options.suggestedMax);\n  }\n  parse(raw, index) {\n    return raw;\n  }\n  getUserBounds() {\n    let {_userMin, _userMax, _suggestedMin, _suggestedMax} = this;\n    _userMin = finiteOrDefault(_userMin, Number.POSITIVE_INFINITY);\n    _userMax = finiteOrDefault(_userMax, Number.NEGATIVE_INFINITY);\n    _suggestedMin = finiteOrDefault(_suggestedMin, Number.POSITIVE_INFINITY);\n    _suggestedMax = finiteOrDefault(_suggestedMax, Number.NEGATIVE_INFINITY);\n    return {\n      min: finiteOrDefault(_userMin, _suggestedMin),\n      max: finiteOrDefault(_userMax, _suggestedMax),\n      minDefined: isNumberFinite(_userMin),\n      maxDefined: isNumberFinite(_userMax)\n    };\n  }\n  getMinMax(canStack) {\n    let {min, max, minDefined, maxDefined} = this.getUserBounds();\n    let range;\n    if (minDefined && maxDefined) {\n      return {min, max};\n    }\n    const metas = this.getMatchingVisibleMetas();\n    for (let i = 0, ilen = metas.length; i < ilen; ++i) {\n      range = metas[i].controller.getMinMax(this, canStack);\n      if (!minDefined) {\n        min = Math.min(min, range.min);\n      }\n      if (!maxDefined) {\n        max = Math.max(max, range.max);\n      }\n    }\n    min = maxDefined && min > max ? max : min;\n    max = minDefined && min > max ? min : max;\n    return {\n      min: finiteOrDefault(min, finiteOrDefault(max, min)),\n      max: finiteOrDefault(max, finiteOrDefault(min, max))\n    };\n  }\n  getPadding() {\n    return {\n      left: this.paddingLeft || 0,\n      top: this.paddingTop || 0,\n      right: this.paddingRight || 0,\n      bottom: this.paddingBottom || 0\n    };\n  }\n  getTicks() {\n    return this.ticks;\n  }\n  getLabels() {\n    const data = this.chart.data;\n    return this.options.labels || (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels || [];\n  }\n  beforeLayout() {\n    this._cache = {};\n    this._dataLimitsCached = false;\n  }\n  beforeUpdate() {\n    callback(this.options.beforeUpdate, [this]);\n  }\n  update(maxWidth, maxHeight, margins) {\n    const {beginAtZero, grace, ticks: tickOpts} = this.options;\n    const sampleSize = tickOpts.sampleSize;\n    this.beforeUpdate();\n    this.maxWidth = maxWidth;\n    this.maxHeight = maxHeight;\n    this._margins = margins = Object.assign({\n      left: 0,\n      right: 0,\n      top: 0,\n      bottom: 0\n    }, margins);\n    this.ticks = null;\n    this._labelSizes = null;\n    this._gridLineItems = null;\n    this._labelItems = null;\n    this.beforeSetDimensions();\n    this.setDimensions();\n    this.afterSetDimensions();\n    this._maxLength = this.isHorizontal()\n      ? this.width + margins.left + margins.right\n      : this.height + margins.top + margins.bottom;\n    if (!this._dataLimitsCached) {\n      this.beforeDataLimits();\n      this.determineDataLimits();\n      this.afterDataLimits();\n      this._range = _addGrace(this, grace, beginAtZero);\n      this._dataLimitsCached = true;\n    }\n    this.beforeBuildTicks();\n    this.ticks = this.buildTicks() || [];\n    this.afterBuildTicks();\n    const samplingEnabled = sampleSize < this.ticks.length;\n    this._convertTicksToLabels(samplingEnabled ? sample(this.ticks, sampleSize) : this.ticks);\n    this.configure();\n    this.beforeCalculateLabelRotation();\n    this.calculateLabelRotation();\n    this.afterCalculateLabelRotation();\n    if (tickOpts.display && (tickOpts.autoSkip || tickOpts.source === 'auto')) {\n      this.ticks = autoSkip(this, this.ticks);\n      this._labelSizes = null;\n      this.afterAutoSkip();\n    }\n    if (samplingEnabled) {\n      this._convertTicksToLabels(this.ticks);\n    }\n    this.beforeFit();\n    this.fit();\n    this.afterFit();\n    this.afterUpdate();\n  }\n  configure() {\n    let reversePixels = this.options.reverse;\n    let startPixel, endPixel;\n    if (this.isHorizontal()) {\n      startPixel = this.left;\n      endPixel = this.right;\n    } else {\n      startPixel = this.top;\n      endPixel = this.bottom;\n      reversePixels = !reversePixels;\n    }\n    this._startPixel = startPixel;\n    this._endPixel = endPixel;\n    this._reversePixels = reversePixels;\n    this._length = endPixel - startPixel;\n    this._alignToPixels = this.options.alignToPixels;\n  }\n  afterUpdate() {\n    callback(this.options.afterUpdate, [this]);\n  }\n  beforeSetDimensions() {\n    callback(this.options.beforeSetDimensions, [this]);\n  }\n  setDimensions() {\n    if (this.isHorizontal()) {\n      this.width = this.maxWidth;\n      this.left = 0;\n      this.right = this.width;\n    } else {\n      this.height = this.maxHeight;\n      this.top = 0;\n      this.bottom = this.height;\n    }\n    this.paddingLeft = 0;\n    this.paddingTop = 0;\n    this.paddingRight = 0;\n    this.paddingBottom = 0;\n  }\n  afterSetDimensions() {\n    callback(this.options.afterSetDimensions, [this]);\n  }\n  _callHooks(name) {\n    this.chart.notifyPlugins(name, this.getContext());\n    callback(this.options[name], [this]);\n  }\n  beforeDataLimits() {\n    this._callHooks('beforeDataLimits');\n  }\n  determineDataLimits() {}\n  afterDataLimits() {\n    this._callHooks('afterDataLimits');\n  }\n  beforeBuildTicks() {\n    this._callHooks('beforeBuildTicks');\n  }\n  buildTicks() {\n    return [];\n  }\n  afterBuildTicks() {\n    this._callHooks('afterBuildTicks');\n  }\n  beforeTickToLabelConversion() {\n    callback(this.options.beforeTickToLabelConversion, [this]);\n  }\n  generateTickLabels(ticks) {\n    const tickOpts = this.options.ticks;\n    let i, ilen, tick;\n    for (i = 0, ilen = ticks.length; i < ilen; i++) {\n      tick = ticks[i];\n      tick.label = callback(tickOpts.callback, [tick.value, i, ticks], this);\n    }\n  }\n  afterTickToLabelConversion() {\n    callback(this.options.afterTickToLabelConversion, [this]);\n  }\n  beforeCalculateLabelRotation() {\n    callback(this.options.beforeCalculateLabelRotation, [this]);\n  }\n  calculateLabelRotation() {\n    const options = this.options;\n    const tickOpts = options.ticks;\n    const numTicks = this.ticks.length;\n    const minRotation = tickOpts.minRotation || 0;\n    const maxRotation = tickOpts.maxRotation;\n    let labelRotation = minRotation;\n    let tickWidth, maxHeight, maxLabelDiagonal;\n    if (!this._isVisible() || !tickOpts.display || minRotation >= maxRotation || numTicks <= 1 || !this.isHorizontal()) {\n      this.labelRotation = minRotation;\n      return;\n    }\n    const labelSizes = this._getLabelSizes();\n    const maxLabelWidth = labelSizes.widest.width;\n    const maxLabelHeight = labelSizes.highest.height;\n    const maxWidth = _limitValue(this.chart.width - maxLabelWidth, 0, this.maxWidth);\n    tickWidth = options.offset ? this.maxWidth / numTicks : maxWidth / (numTicks - 1);\n    if (maxLabelWidth + 6 > tickWidth) {\n      tickWidth = maxWidth / (numTicks - (options.offset ? 0.5 : 1));\n      maxHeight = this.maxHeight - getTickMarkLength(options.grid)\n\t\t\t\t- tickOpts.padding - getTitleHeight(options.title, this.chart.options.font);\n      maxLabelDiagonal = Math.sqrt(maxLabelWidth * maxLabelWidth + maxLabelHeight * maxLabelHeight);\n      labelRotation = toDegrees(Math.min(\n        Math.asin(_limitValue((labelSizes.highest.height + 6) / tickWidth, -1, 1)),\n        Math.asin(_limitValue(maxHeight / maxLabelDiagonal, -1, 1)) - Math.asin(_limitValue(maxLabelHeight / maxLabelDiagonal, -1, 1))\n      ));\n      labelRotation = Math.max(minRotation, Math.min(maxRotation, labelRotation));\n    }\n    this.labelRotation = labelRotation;\n  }\n  afterCalculateLabelRotation() {\n    callback(this.options.afterCalculateLabelRotation, [this]);\n  }\n  afterAutoSkip() {}\n  beforeFit() {\n    callback(this.options.beforeFit, [this]);\n  }\n  fit() {\n    const minSize = {\n      width: 0,\n      height: 0\n    };\n    const {chart, options: {ticks: tickOpts, title: titleOpts, grid: gridOpts}} = this;\n    const display = this._isVisible();\n    const isHorizontal = this.isHorizontal();\n    if (display) {\n      const titleHeight = getTitleHeight(titleOpts, chart.options.font);\n      if (isHorizontal) {\n        minSize.width = this.maxWidth;\n        minSize.height = getTickMarkLength(gridOpts) + titleHeight;\n      } else {\n        minSize.height = this.maxHeight;\n        minSize.width = getTickMarkLength(gridOpts) + titleHeight;\n      }\n      if (tickOpts.display && this.ticks.length) {\n        const {first, last, widest, highest} = this._getLabelSizes();\n        const tickPadding = tickOpts.padding * 2;\n        const angleRadians = toRadians(this.labelRotation);\n        const cos = Math.cos(angleRadians);\n        const sin = Math.sin(angleRadians);\n        if (isHorizontal) {\n          const labelHeight = tickOpts.mirror ? 0 : sin * widest.width + cos * highest.height;\n          minSize.height = Math.min(this.maxHeight, minSize.height + labelHeight + tickPadding);\n        } else {\n          const labelWidth = tickOpts.mirror ? 0 : cos * widest.width + sin * highest.height;\n          minSize.width = Math.min(this.maxWidth, minSize.width + labelWidth + tickPadding);\n        }\n        this._calculatePadding(first, last, sin, cos);\n      }\n    }\n    this._handleMargins();\n    if (isHorizontal) {\n      this.width = this._length = chart.width - this._margins.left - this._margins.right;\n      this.height = minSize.height;\n    } else {\n      this.width = minSize.width;\n      this.height = this._length = chart.height - this._margins.top - this._margins.bottom;\n    }\n  }\n  _calculatePadding(first, last, sin, cos) {\n    const {ticks: {align, padding}, position} = this.options;\n    const isRotated = this.labelRotation !== 0;\n    const labelsBelowTicks = position !== 'top' && this.axis === 'x';\n    if (this.isHorizontal()) {\n      const offsetLeft = this.getPixelForTick(0) - this.left;\n      const offsetRight = this.right - this.getPixelForTick(this.ticks.length - 1);\n      let paddingLeft = 0;\n      let paddingRight = 0;\n      if (isRotated) {\n        if (labelsBelowTicks) {\n          paddingLeft = cos * first.width;\n          paddingRight = sin * last.height;\n        } else {\n          paddingLeft = sin * first.height;\n          paddingRight = cos * last.width;\n        }\n      } else if (align === 'start') {\n        paddingRight = last.width;\n      } else if (align === 'end') {\n        paddingLeft = first.width;\n      } else if (align !== 'inner') {\n        paddingLeft = first.width / 2;\n        paddingRight = last.width / 2;\n      }\n      this.paddingLeft = Math.max((paddingLeft - offsetLeft + padding) * this.width / (this.width - offsetLeft), 0);\n      this.paddingRight = Math.max((paddingRight - offsetRight + padding) * this.width / (this.width - offsetRight), 0);\n    } else {\n      let paddingTop = last.height / 2;\n      let paddingBottom = first.height / 2;\n      if (align === 'start') {\n        paddingTop = 0;\n        paddingBottom = first.height;\n      } else if (align === 'end') {\n        paddingTop = last.height;\n        paddingBottom = 0;\n      }\n      this.paddingTop = paddingTop + padding;\n      this.paddingBottom = paddingBottom + padding;\n    }\n  }\n  _handleMargins() {\n    if (this._margins) {\n      this._margins.left = Math.max(this.paddingLeft, this._margins.left);\n      this._margins.top = Math.max(this.paddingTop, this._margins.top);\n      this._margins.right = Math.max(this.paddingRight, this._margins.right);\n      this._margins.bottom = Math.max(this.paddingBottom, this._margins.bottom);\n    }\n  }\n  afterFit() {\n    callback(this.options.afterFit, [this]);\n  }\n  isHorizontal() {\n    const {axis, position} = this.options;\n    return position === 'top' || position === 'bottom' || axis === 'x';\n  }\n  isFullSize() {\n    return this.options.fullSize;\n  }\n  _convertTicksToLabels(ticks) {\n    this.beforeTickToLabelConversion();\n    this.generateTickLabels(ticks);\n    let i, ilen;\n    for (i = 0, ilen = ticks.length; i < ilen; i++) {\n      if (isNullOrUndef(ticks[i].label)) {\n        ticks.splice(i, 1);\n        ilen--;\n        i--;\n      }\n    }\n    this.afterTickToLabelConversion();\n  }\n  _getLabelSizes() {\n    let labelSizes = this._labelSizes;\n    if (!labelSizes) {\n      const sampleSize = this.options.ticks.sampleSize;\n      let ticks = this.ticks;\n      if (sampleSize < ticks.length) {\n        ticks = sample(ticks, sampleSize);\n      }\n      this._labelSizes = labelSizes = this._computeLabelSizes(ticks, ticks.length);\n    }\n    return labelSizes;\n  }\n  _computeLabelSizes(ticks, length) {\n    const {ctx, _longestTextCache: caches} = this;\n    const widths = [];\n    const heights = [];\n    let widestLabelSize = 0;\n    let highestLabelSize = 0;\n    let i, j, jlen, label, tickFont, fontString, cache, lineHeight, width, height, nestedLabel;\n    for (i = 0; i < length; ++i) {\n      label = ticks[i].label;\n      tickFont = this._resolveTickFontOptions(i);\n      ctx.font = fontString = tickFont.string;\n      cache = caches[fontString] = caches[fontString] || {data: {}, gc: []};\n      lineHeight = tickFont.lineHeight;\n      width = height = 0;\n      if (!isNullOrUndef(label) && !isArray(label)) {\n        width = _measureText(ctx, cache.data, cache.gc, width, label);\n        height = lineHeight;\n      } else if (isArray(label)) {\n        for (j = 0, jlen = label.length; j < jlen; ++j) {\n          nestedLabel = label[j];\n          if (!isNullOrUndef(nestedLabel) && !isArray(nestedLabel)) {\n            width = _measureText(ctx, cache.data, cache.gc, width, nestedLabel);\n            height += lineHeight;\n          }\n        }\n      }\n      widths.push(width);\n      heights.push(height);\n      widestLabelSize = Math.max(width, widestLabelSize);\n      highestLabelSize = Math.max(height, highestLabelSize);\n    }\n    garbageCollect(caches, length);\n    const widest = widths.indexOf(widestLabelSize);\n    const highest = heights.indexOf(highestLabelSize);\n    const valueAt = (idx) => ({width: widths[idx] || 0, height: heights[idx] || 0});\n    return {\n      first: valueAt(0),\n      last: valueAt(length - 1),\n      widest: valueAt(widest),\n      highest: valueAt(highest),\n      widths,\n      heights,\n    };\n  }\n  getLabelForValue(value) {\n    return value;\n  }\n  getPixelForValue(value, index) {\n    return NaN;\n  }\n  getValueForPixel(pixel) {}\n  getPixelForTick(index) {\n    const ticks = this.ticks;\n    if (index < 0 || index > ticks.length - 1) {\n      return null;\n    }\n    return this.getPixelForValue(ticks[index].value);\n  }\n  getPixelForDecimal(decimal) {\n    if (this._reversePixels) {\n      decimal = 1 - decimal;\n    }\n    const pixel = this._startPixel + decimal * this._length;\n    return _int16Range(this._alignToPixels ? _alignPixel(this.chart, pixel, 0) : pixel);\n  }\n  getDecimalForPixel(pixel) {\n    const decimal = (pixel - this._startPixel) / this._length;\n    return this._reversePixels ? 1 - decimal : decimal;\n  }\n  getBasePixel() {\n    return this.getPixelForValue(this.getBaseValue());\n  }\n  getBaseValue() {\n    const {min, max} = this;\n    return min < 0 && max < 0 ? max :\n      min > 0 && max > 0 ? min :\n      0;\n  }\n  getContext(index) {\n    const ticks = this.ticks || [];\n    if (index >= 0 && index < ticks.length) {\n      const tick = ticks[index];\n      return tick.$context ||\n\t\t\t\t(tick.$context = createTickContext(this.getContext(), index, tick));\n    }\n    return this.$context ||\n\t\t\t(this.$context = createScaleContext(this.chart.getContext(), this));\n  }\n  _tickSize() {\n    const optionTicks = this.options.ticks;\n    const rot = toRadians(this.labelRotation);\n    const cos = Math.abs(Math.cos(rot));\n    const sin = Math.abs(Math.sin(rot));\n    const labelSizes = this._getLabelSizes();\n    const padding = optionTicks.autoSkipPadding || 0;\n    const w = labelSizes ? labelSizes.widest.width + padding : 0;\n    const h = labelSizes ? labelSizes.highest.height + padding : 0;\n    return this.isHorizontal()\n      ? h * cos > w * sin ? w / cos : h / sin\n      : h * sin < w * cos ? h / cos : w / sin;\n  }\n  _isVisible() {\n    const display = this.options.display;\n    if (display !== 'auto') {\n      return !!display;\n    }\n    return this.getMatchingVisibleMetas().length > 0;\n  }\n  _computeGridLineItems(chartArea) {\n    const axis = this.axis;\n    const chart = this.chart;\n    const options = this.options;\n    const {grid, position} = options;\n    const offset = grid.offset;\n    const isHorizontal = this.isHorizontal();\n    const ticks = this.ticks;\n    const ticksLength = ticks.length + (offset ? 1 : 0);\n    const tl = getTickMarkLength(grid);\n    const items = [];\n    const borderOpts = grid.setContext(this.getContext());\n    const axisWidth = borderOpts.drawBorder ? borderOpts.borderWidth : 0;\n    const axisHalfWidth = axisWidth / 2;\n    const alignBorderValue = function(pixel) {\n      return _alignPixel(chart, pixel, axisWidth);\n    };\n    let borderValue, i, lineValue, alignedLineValue;\n    let tx1, ty1, tx2, ty2, x1, y1, x2, y2;\n    if (position === 'top') {\n      borderValue = alignBorderValue(this.bottom);\n      ty1 = this.bottom - tl;\n      ty2 = borderValue - axisHalfWidth;\n      y1 = alignBorderValue(chartArea.top) + axisHalfWidth;\n      y2 = chartArea.bottom;\n    } else if (position === 'bottom') {\n      borderValue = alignBorderValue(this.top);\n      y1 = chartArea.top;\n      y2 = alignBorderValue(chartArea.bottom) - axisHalfWidth;\n      ty1 = borderValue + axisHalfWidth;\n      ty2 = this.top + tl;\n    } else if (position === 'left') {\n      borderValue = alignBorderValue(this.right);\n      tx1 = this.right - tl;\n      tx2 = borderValue - axisHalfWidth;\n      x1 = alignBorderValue(chartArea.left) + axisHalfWidth;\n      x2 = chartArea.right;\n    } else if (position === 'right') {\n      borderValue = alignBorderValue(this.left);\n      x1 = chartArea.left;\n      x2 = alignBorderValue(chartArea.right) - axisHalfWidth;\n      tx1 = borderValue + axisHalfWidth;\n      tx2 = this.left + tl;\n    } else if (axis === 'x') {\n      if (position === 'center') {\n        borderValue = alignBorderValue((chartArea.top + chartArea.bottom) / 2 + 0.5);\n      } else if (isObject(position)) {\n        const positionAxisID = Object.keys(position)[0];\n        const value = position[positionAxisID];\n        borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n      }\n      y1 = chartArea.top;\n      y2 = chartArea.bottom;\n      ty1 = borderValue + axisHalfWidth;\n      ty2 = ty1 + tl;\n    } else if (axis === 'y') {\n      if (position === 'center') {\n        borderValue = alignBorderValue((chartArea.left + chartArea.right) / 2);\n      } else if (isObject(position)) {\n        const positionAxisID = Object.keys(position)[0];\n        const value = position[positionAxisID];\n        borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n      }\n      tx1 = borderValue - axisHalfWidth;\n      tx2 = tx1 - tl;\n      x1 = chartArea.left;\n      x2 = chartArea.right;\n    }\n    const limit = valueOrDefault(options.ticks.maxTicksLimit, ticksLength);\n    const step = Math.max(1, Math.ceil(ticksLength / limit));\n    for (i = 0; i < ticksLength; i += step) {\n      const optsAtIndex = grid.setContext(this.getContext(i));\n      const lineWidth = optsAtIndex.lineWidth;\n      const lineColor = optsAtIndex.color;\n      const borderDash = grid.borderDash || [];\n      const borderDashOffset = optsAtIndex.borderDashOffset;\n      const tickWidth = optsAtIndex.tickWidth;\n      const tickColor = optsAtIndex.tickColor;\n      const tickBorderDash = optsAtIndex.tickBorderDash || [];\n      const tickBorderDashOffset = optsAtIndex.tickBorderDashOffset;\n      lineValue = getPixelForGridLine(this, i, offset);\n      if (lineValue === undefined) {\n        continue;\n      }\n      alignedLineValue = _alignPixel(chart, lineValue, lineWidth);\n      if (isHorizontal) {\n        tx1 = tx2 = x1 = x2 = alignedLineValue;\n      } else {\n        ty1 = ty2 = y1 = y2 = alignedLineValue;\n      }\n      items.push({\n        tx1,\n        ty1,\n        tx2,\n        ty2,\n        x1,\n        y1,\n        x2,\n        y2,\n        width: lineWidth,\n        color: lineColor,\n        borderDash,\n        borderDashOffset,\n        tickWidth,\n        tickColor,\n        tickBorderDash,\n        tickBorderDashOffset,\n      });\n    }\n    this._ticksLength = ticksLength;\n    this._borderValue = borderValue;\n    return items;\n  }\n  _computeLabelItems(chartArea) {\n    const axis = this.axis;\n    const options = this.options;\n    const {position, ticks: optionTicks} = options;\n    const isHorizontal = this.isHorizontal();\n    const ticks = this.ticks;\n    const {align, crossAlign, padding, mirror} = optionTicks;\n    const tl = getTickMarkLength(options.grid);\n    const tickAndPadding = tl + padding;\n    const hTickAndPadding = mirror ? -padding : tickAndPadding;\n    const rotation = -toRadians(this.labelRotation);\n    const items = [];\n    let i, ilen, tick, label, x, y, textAlign, pixel, font, lineHeight, lineCount, textOffset;\n    let textBaseline = 'middle';\n    if (position === 'top') {\n      y = this.bottom - hTickAndPadding;\n      textAlign = this._getXAxisLabelAlignment();\n    } else if (position === 'bottom') {\n      y = this.top + hTickAndPadding;\n      textAlign = this._getXAxisLabelAlignment();\n    } else if (position === 'left') {\n      const ret = this._getYAxisLabelAlignment(tl);\n      textAlign = ret.textAlign;\n      x = ret.x;\n    } else if (position === 'right') {\n      const ret = this._getYAxisLabelAlignment(tl);\n      textAlign = ret.textAlign;\n      x = ret.x;\n    } else if (axis === 'x') {\n      if (position === 'center') {\n        y = ((chartArea.top + chartArea.bottom) / 2) + tickAndPadding;\n      } else if (isObject(position)) {\n        const positionAxisID = Object.keys(position)[0];\n        const value = position[positionAxisID];\n        y = this.chart.scales[positionAxisID].getPixelForValue(value) + tickAndPadding;\n      }\n      textAlign = this._getXAxisLabelAlignment();\n    } else if (axis === 'y') {\n      if (position === 'center') {\n        x = ((chartArea.left + chartArea.right) / 2) - tickAndPadding;\n      } else if (isObject(position)) {\n        const positionAxisID = Object.keys(position)[0];\n        const value = position[positionAxisID];\n        x = this.chart.scales[positionAxisID].getPixelForValue(value);\n      }\n      textAlign = this._getYAxisLabelAlignment(tl).textAlign;\n    }\n    if (axis === 'y') {\n      if (align === 'start') {\n        textBaseline = 'top';\n      } else if (align === 'end') {\n        textBaseline = 'bottom';\n      }\n    }\n    const labelSizes = this._getLabelSizes();\n    for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n      tick = ticks[i];\n      label = tick.label;\n      const optsAtIndex = optionTicks.setContext(this.getContext(i));\n      pixel = this.getPixelForTick(i) + optionTicks.labelOffset;\n      font = this._resolveTickFontOptions(i);\n      lineHeight = font.lineHeight;\n      lineCount = isArray(label) ? label.length : 1;\n      const halfCount = lineCount / 2;\n      const color = optsAtIndex.color;\n      const strokeColor = optsAtIndex.textStrokeColor;\n      const strokeWidth = optsAtIndex.textStrokeWidth;\n      let tickTextAlign = textAlign;\n      if (isHorizontal) {\n        x = pixel;\n        if (textAlign === 'inner') {\n          if (i === ilen - 1) {\n            tickTextAlign = !this.options.reverse ? 'right' : 'left';\n          } else if (i === 0) {\n            tickTextAlign = !this.options.reverse ? 'left' : 'right';\n          } else {\n            tickTextAlign = 'center';\n          }\n        }\n        if (position === 'top') {\n          if (crossAlign === 'near' || rotation !== 0) {\n            textOffset = -lineCount * lineHeight + lineHeight / 2;\n          } else if (crossAlign === 'center') {\n            textOffset = -labelSizes.highest.height / 2 - halfCount * lineHeight + lineHeight;\n          } else {\n            textOffset = -labelSizes.highest.height + lineHeight / 2;\n          }\n        } else {\n          if (crossAlign === 'near' || rotation !== 0) {\n            textOffset = lineHeight / 2;\n          } else if (crossAlign === 'center') {\n            textOffset = labelSizes.highest.height / 2 - halfCount * lineHeight;\n          } else {\n            textOffset = labelSizes.highest.height - lineCount * lineHeight;\n          }\n        }\n        if (mirror) {\n          textOffset *= -1;\n        }\n      } else {\n        y = pixel;\n        textOffset = (1 - lineCount) * lineHeight / 2;\n      }\n      let backdrop;\n      if (optsAtIndex.showLabelBackdrop) {\n        const labelPadding = toPadding(optsAtIndex.backdropPadding);\n        const height = labelSizes.heights[i];\n        const width = labelSizes.widths[i];\n        let top = y + textOffset - labelPadding.top;\n        let left = x - labelPadding.left;\n        switch (textBaseline) {\n        case 'middle':\n          top -= height / 2;\n          break;\n        case 'bottom':\n          top -= height;\n          break;\n        }\n        switch (textAlign) {\n        case 'center':\n          left -= width / 2;\n          break;\n        case 'right':\n          left -= width;\n          break;\n        }\n        backdrop = {\n          left,\n          top,\n          width: width + labelPadding.width,\n          height: height + labelPadding.height,\n          color: optsAtIndex.backdropColor,\n        };\n      }\n      items.push({\n        rotation,\n        label,\n        font,\n        color,\n        strokeColor,\n        strokeWidth,\n        textOffset,\n        textAlign: tickTextAlign,\n        textBaseline,\n        translation: [x, y],\n        backdrop,\n      });\n    }\n    return items;\n  }\n  _getXAxisLabelAlignment() {\n    const {position, ticks} = this.options;\n    const rotation = -toRadians(this.labelRotation);\n    if (rotation) {\n      return position === 'top' ? 'left' : 'right';\n    }\n    let align = 'center';\n    if (ticks.align === 'start') {\n      align = 'left';\n    } else if (ticks.align === 'end') {\n      align = 'right';\n    } else if (ticks.align === 'inner') {\n      align = 'inner';\n    }\n    return align;\n  }\n  _getYAxisLabelAlignment(tl) {\n    const {position, ticks: {crossAlign, mirror, padding}} = this.options;\n    const labelSizes = this._getLabelSizes();\n    const tickAndPadding = tl + padding;\n    const widest = labelSizes.widest.width;\n    let textAlign;\n    let x;\n    if (position === 'left') {\n      if (mirror) {\n        x = this.right + padding;\n        if (crossAlign === 'near') {\n          textAlign = 'left';\n        } else if (crossAlign === 'center') {\n          textAlign = 'center';\n          x += (widest / 2);\n        } else {\n          textAlign = 'right';\n          x += widest;\n        }\n      } else {\n        x = this.right - tickAndPadding;\n        if (crossAlign === 'near') {\n          textAlign = 'right';\n        } else if (crossAlign === 'center') {\n          textAlign = 'center';\n          x -= (widest / 2);\n        } else {\n          textAlign = 'left';\n          x = this.left;\n        }\n      }\n    } else if (position === 'right') {\n      if (mirror) {\n        x = this.left + padding;\n        if (crossAlign === 'near') {\n          textAlign = 'right';\n        } else if (crossAlign === 'center') {\n          textAlign = 'center';\n          x -= (widest / 2);\n        } else {\n          textAlign = 'left';\n          x -= widest;\n        }\n      } else {\n        x = this.left + tickAndPadding;\n        if (crossAlign === 'near') {\n          textAlign = 'left';\n        } else if (crossAlign === 'center') {\n          textAlign = 'center';\n          x += widest / 2;\n        } else {\n          textAlign = 'right';\n          x = this.right;\n        }\n      }\n    } else {\n      textAlign = 'right';\n    }\n    return {textAlign, x};\n  }\n  _computeLabelArea() {\n    if (this.options.ticks.mirror) {\n      return;\n    }\n    const chart = this.chart;\n    const position = this.options.position;\n    if (position === 'left' || position === 'right') {\n      return {top: 0, left: this.left, bottom: chart.height, right: this.right};\n    } if (position === 'top' || position === 'bottom') {\n      return {top: this.top, left: 0, bottom: this.bottom, right: chart.width};\n    }\n  }\n  drawBackground() {\n    const {ctx, options: {backgroundColor}, left, top, width, height} = this;\n    if (backgroundColor) {\n      ctx.save();\n      ctx.fillStyle = backgroundColor;\n      ctx.fillRect(left, top, width, height);\n      ctx.restore();\n    }\n  }\n  getLineWidthForValue(value) {\n    const grid = this.options.grid;\n    if (!this._isVisible() || !grid.display) {\n      return 0;\n    }\n    const ticks = this.ticks;\n    const index = ticks.findIndex(t => t.value === value);\n    if (index >= 0) {\n      const opts = grid.setContext(this.getContext(index));\n      return opts.lineWidth;\n    }\n    return 0;\n  }\n  drawGrid(chartArea) {\n    const grid = this.options.grid;\n    const ctx = this.ctx;\n    const items = this._gridLineItems || (this._gridLineItems = this._computeGridLineItems(chartArea));\n    let i, ilen;\n    const drawLine = (p1, p2, style) => {\n      if (!style.width || !style.color) {\n        return;\n      }\n      ctx.save();\n      ctx.lineWidth = style.width;\n      ctx.strokeStyle = style.color;\n      ctx.setLineDash(style.borderDash || []);\n      ctx.lineDashOffset = style.borderDashOffset;\n      ctx.beginPath();\n      ctx.moveTo(p1.x, p1.y);\n      ctx.lineTo(p2.x, p2.y);\n      ctx.stroke();\n      ctx.restore();\n    };\n    if (grid.display) {\n      for (i = 0, ilen = items.length; i < ilen; ++i) {\n        const item = items[i];\n        if (grid.drawOnChartArea) {\n          drawLine(\n            {x: item.x1, y: item.y1},\n            {x: item.x2, y: item.y2},\n            item\n          );\n        }\n        if (grid.drawTicks) {\n          drawLine(\n            {x: item.tx1, y: item.ty1},\n            {x: item.tx2, y: item.ty2},\n            {\n              color: item.tickColor,\n              width: item.tickWidth,\n              borderDash: item.tickBorderDash,\n              borderDashOffset: item.tickBorderDashOffset\n            }\n          );\n        }\n      }\n    }\n  }\n  drawBorder() {\n    const {chart, ctx, options: {grid}} = this;\n    const borderOpts = grid.setContext(this.getContext());\n    const axisWidth = grid.drawBorder ? borderOpts.borderWidth : 0;\n    if (!axisWidth) {\n      return;\n    }\n    const lastLineWidth = grid.setContext(this.getContext(0)).lineWidth;\n    const borderValue = this._borderValue;\n    let x1, x2, y1, y2;\n    if (this.isHorizontal()) {\n      x1 = _alignPixel(chart, this.left, axisWidth) - axisWidth / 2;\n      x2 = _alignPixel(chart, this.right, lastLineWidth) + lastLineWidth / 2;\n      y1 = y2 = borderValue;\n    } else {\n      y1 = _alignPixel(chart, this.top, axisWidth) - axisWidth / 2;\n      y2 = _alignPixel(chart, this.bottom, lastLineWidth) + lastLineWidth / 2;\n      x1 = x2 = borderValue;\n    }\n    ctx.save();\n    ctx.lineWidth = borderOpts.borderWidth;\n    ctx.strokeStyle = borderOpts.borderColor;\n    ctx.beginPath();\n    ctx.moveTo(x1, y1);\n    ctx.lineTo(x2, y2);\n    ctx.stroke();\n    ctx.restore();\n  }\n  drawLabels(chartArea) {\n    const optionTicks = this.options.ticks;\n    if (!optionTicks.display) {\n      return;\n    }\n    const ctx = this.ctx;\n    const area = this._computeLabelArea();\n    if (area) {\n      clipArea(ctx, area);\n    }\n    const items = this._labelItems || (this._labelItems = this._computeLabelItems(chartArea));\n    let i, ilen;\n    for (i = 0, ilen = items.length; i < ilen; ++i) {\n      const item = items[i];\n      const tickFont = item.font;\n      const label = item.label;\n      if (item.backdrop) {\n        ctx.fillStyle = item.backdrop.color;\n        ctx.fillRect(item.backdrop.left, item.backdrop.top, item.backdrop.width, item.backdrop.height);\n      }\n      let y = item.textOffset;\n      renderText(ctx, label, 0, y, tickFont, item);\n    }\n    if (area) {\n      unclipArea(ctx);\n    }\n  }\n  drawTitle() {\n    const {ctx, options: {position, title, reverse}} = this;\n    if (!title.display) {\n      return;\n    }\n    const font = toFont(title.font);\n    const padding = toPadding(title.padding);\n    const align = title.align;\n    let offset = font.lineHeight / 2;\n    if (position === 'bottom' || position === 'center' || isObject(position)) {\n      offset += padding.bottom;\n      if (isArray(title.text)) {\n        offset += font.lineHeight * (title.text.length - 1);\n      }\n    } else {\n      offset += padding.top;\n    }\n    const {titleX, titleY, maxWidth, rotation} = titleArgs(this, offset, position, align);\n    renderText(ctx, title.text, 0, 0, font, {\n      color: title.color,\n      maxWidth,\n      rotation,\n      textAlign: titleAlign(align, position, reverse),\n      textBaseline: 'middle',\n      translation: [titleX, titleY],\n    });\n  }\n  draw(chartArea) {\n    if (!this._isVisible()) {\n      return;\n    }\n    this.drawBackground();\n    this.drawGrid(chartArea);\n    this.drawBorder();\n    this.drawTitle();\n    this.drawLabels(chartArea);\n  }\n  _layers() {\n    const opts = this.options;\n    const tz = opts.ticks && opts.ticks.z || 0;\n    const gz = valueOrDefault(opts.grid && opts.grid.z, -1);\n    if (!this._isVisible() || this.draw !== Scale.prototype.draw) {\n      return [{\n        z: tz,\n        draw: (chartArea) => {\n          this.draw(chartArea);\n        }\n      }];\n    }\n    return [{\n      z: gz,\n      draw: (chartArea) => {\n        this.drawBackground();\n        this.drawGrid(chartArea);\n        this.drawTitle();\n      }\n    }, {\n      z: gz + 1,\n      draw: () => {\n        this.drawBorder();\n      }\n    }, {\n      z: tz,\n      draw: (chartArea) => {\n        this.drawLabels(chartArea);\n      }\n    }];\n  }\n  getMatchingVisibleMetas(type) {\n    const metas = this.chart.getSortedVisibleDatasetMetas();\n    const axisID = this.axis + 'AxisID';\n    const result = [];\n    let i, ilen;\n    for (i = 0, ilen = metas.length; i < ilen; ++i) {\n      const meta = metas[i];\n      if (meta[axisID] === this.id && (!type || meta.type === type)) {\n        result.push(meta);\n      }\n    }\n    return result;\n  }\n  _resolveTickFontOptions(index) {\n    const opts = this.options.ticks.setContext(this.getContext(index));\n    return toFont(opts.font);\n  }\n  _maxDigits() {\n    const fontSize = this._resolveTickFontOptions(0).lineHeight;\n    return (this.isHorizontal() ? this.width : this.height) / fontSize;\n  }\n}\n\nclass TypedRegistry {\n  constructor(type, scope, override) {\n    this.type = type;\n    this.scope = scope;\n    this.override = override;\n    this.items = Object.create(null);\n  }\n  isForType(type) {\n    return Object.prototype.isPrototypeOf.call(this.type.prototype, type.prototype);\n  }\n  register(item) {\n    const proto = Object.getPrototypeOf(item);\n    let parentScope;\n    if (isIChartComponent(proto)) {\n      parentScope = this.register(proto);\n    }\n    const items = this.items;\n    const id = item.id;\n    const scope = this.scope + '.' + id;\n    if (!id) {\n      throw new Error('class does not have id: ' + item);\n    }\n    if (id in items) {\n      return scope;\n    }\n    items[id] = item;\n    registerDefaults(item, scope, parentScope);\n    if (this.override) {\n      defaults.override(item.id, item.overrides);\n    }\n    return scope;\n  }\n  get(id) {\n    return this.items[id];\n  }\n  unregister(item) {\n    const items = this.items;\n    const id = item.id;\n    const scope = this.scope;\n    if (id in items) {\n      delete items[id];\n    }\n    if (scope && id in defaults[scope]) {\n      delete defaults[scope][id];\n      if (this.override) {\n        delete overrides[id];\n      }\n    }\n  }\n}\nfunction registerDefaults(item, scope, parentScope) {\n  const itemDefaults = merge(Object.create(null), [\n    parentScope ? defaults.get(parentScope) : {},\n    defaults.get(scope),\n    item.defaults\n  ]);\n  defaults.set(scope, itemDefaults);\n  if (item.defaultRoutes) {\n    routeDefaults(scope, item.defaultRoutes);\n  }\n  if (item.descriptors) {\n    defaults.describe(scope, item.descriptors);\n  }\n}\nfunction routeDefaults(scope, routes) {\n  Object.keys(routes).forEach(property => {\n    const propertyParts = property.split('.');\n    const sourceName = propertyParts.pop();\n    const sourceScope = [scope].concat(propertyParts).join('.');\n    const parts = routes[property].split('.');\n    const targetName = parts.pop();\n    const targetScope = parts.join('.');\n    defaults.route(sourceScope, sourceName, targetScope, targetName);\n  });\n}\nfunction isIChartComponent(proto) {\n  return 'id' in proto && 'defaults' in proto;\n}\n\nclass Registry {\n  constructor() {\n    this.controllers = new TypedRegistry(DatasetController, 'datasets', true);\n    this.elements = new TypedRegistry(Element, 'elements');\n    this.plugins = new TypedRegistry(Object, 'plugins');\n    this.scales = new TypedRegistry(Scale, 'scales');\n    this._typedRegistries = [this.controllers, this.scales, this.elements];\n  }\n  add(...args) {\n    this._each('register', args);\n  }\n  remove(...args) {\n    this._each('unregister', args);\n  }\n  addControllers(...args) {\n    this._each('register', args, this.controllers);\n  }\n  addElements(...args) {\n    this._each('register', args, this.elements);\n  }\n  addPlugins(...args) {\n    this._each('register', args, this.plugins);\n  }\n  addScales(...args) {\n    this._each('register', args, this.scales);\n  }\n  getController(id) {\n    return this._get(id, this.controllers, 'controller');\n  }\n  getElement(id) {\n    return this._get(id, this.elements, 'element');\n  }\n  getPlugin(id) {\n    return this._get(id, this.plugins, 'plugin');\n  }\n  getScale(id) {\n    return this._get(id, this.scales, 'scale');\n  }\n  removeControllers(...args) {\n    this._each('unregister', args, this.controllers);\n  }\n  removeElements(...args) {\n    this._each('unregister', args, this.elements);\n  }\n  removePlugins(...args) {\n    this._each('unregister', args, this.plugins);\n  }\n  removeScales(...args) {\n    this._each('unregister', args, this.scales);\n  }\n  _each(method, args, typedRegistry) {\n    [...args].forEach(arg => {\n      const reg = typedRegistry || this._getRegistryForType(arg);\n      if (typedRegistry || reg.isForType(arg) || (reg === this.plugins && arg.id)) {\n        this._exec(method, reg, arg);\n      } else {\n        each(arg, item => {\n          const itemReg = typedRegistry || this._getRegistryForType(item);\n          this._exec(method, itemReg, item);\n        });\n      }\n    });\n  }\n  _exec(method, registry, component) {\n    const camelMethod = _capitalize(method);\n    callback(component['before' + camelMethod], [], component);\n    registry[method](component);\n    callback(component['after' + camelMethod], [], component);\n  }\n  _getRegistryForType(type) {\n    for (let i = 0; i < this._typedRegistries.length; i++) {\n      const reg = this._typedRegistries[i];\n      if (reg.isForType(type)) {\n        return reg;\n      }\n    }\n    return this.plugins;\n  }\n  _get(id, typedRegistry, type) {\n    const item = typedRegistry.get(id);\n    if (item === undefined) {\n      throw new Error('\"' + id + '\" is not a registered ' + type + '.');\n    }\n    return item;\n  }\n}\nvar registry = new Registry();\n\nclass PluginService {\n  constructor() {\n    this._init = [];\n  }\n  notify(chart, hook, args, filter) {\n    if (hook === 'beforeInit') {\n      this._init = this._createDescriptors(chart, true);\n      this._notify(this._init, chart, 'install');\n    }\n    const descriptors = filter ? this._descriptors(chart).filter(filter) : this._descriptors(chart);\n    const result = this._notify(descriptors, chart, hook, args);\n    if (hook === 'afterDestroy') {\n      this._notify(descriptors, chart, 'stop');\n      this._notify(this._init, chart, 'uninstall');\n    }\n    return result;\n  }\n  _notify(descriptors, chart, hook, args) {\n    args = args || {};\n    for (const descriptor of descriptors) {\n      const plugin = descriptor.plugin;\n      const method = plugin[hook];\n      const params = [chart, args, descriptor.options];\n      if (callback(method, params, plugin) === false && args.cancelable) {\n        return false;\n      }\n    }\n    return true;\n  }\n  invalidate() {\n    if (!isNullOrUndef(this._cache)) {\n      this._oldCache = this._cache;\n      this._cache = undefined;\n    }\n  }\n  _descriptors(chart) {\n    if (this._cache) {\n      return this._cache;\n    }\n    const descriptors = this._cache = this._createDescriptors(chart);\n    this._notifyStateChanges(chart);\n    return descriptors;\n  }\n  _createDescriptors(chart, all) {\n    const config = chart && chart.config;\n    const options = valueOrDefault(config.options && config.options.plugins, {});\n    const plugins = allPlugins(config);\n    return options === false && !all ? [] : createDescriptors(chart, plugins, options, all);\n  }\n  _notifyStateChanges(chart) {\n    const previousDescriptors = this._oldCache || [];\n    const descriptors = this._cache;\n    const diff = (a, b) => a.filter(x => !b.some(y => x.plugin.id === y.plugin.id));\n    this._notify(diff(previousDescriptors, descriptors), chart, 'stop');\n    this._notify(diff(descriptors, previousDescriptors), chart, 'start');\n  }\n}\nfunction allPlugins(config) {\n  const plugins = [];\n  const keys = Object.keys(registry.plugins.items);\n  for (let i = 0; i < keys.length; i++) {\n    plugins.push(registry.getPlugin(keys[i]));\n  }\n  const local = config.plugins || [];\n  for (let i = 0; i < local.length; i++) {\n    const plugin = local[i];\n    if (plugins.indexOf(plugin) === -1) {\n      plugins.push(plugin);\n    }\n  }\n  return plugins;\n}\nfunction getOpts(options, all) {\n  if (!all && options === false) {\n    return null;\n  }\n  if (options === true) {\n    return {};\n  }\n  return options;\n}\nfunction createDescriptors(chart, plugins, options, all) {\n  const result = [];\n  const context = chart.getContext();\n  for (let i = 0; i < plugins.length; i++) {\n    const plugin = plugins[i];\n    const id = plugin.id;\n    const opts = getOpts(options[id], all);\n    if (opts === null) {\n      continue;\n    }\n    result.push({\n      plugin,\n      options: pluginOpts(chart.config, plugin, opts, context)\n    });\n  }\n  return result;\n}\nfunction pluginOpts(config, plugin, opts, context) {\n  const keys = config.pluginScopeKeys(plugin);\n  const scopes = config.getOptionScopes(opts, keys);\n  return config.createResolver(scopes, context, [''], {scriptable: false, indexable: false, allKeys: true});\n}\n\nfunction getIndexAxis(type, options) {\n  const datasetDefaults = defaults.datasets[type] || {};\n  const datasetOptions = (options.datasets || {})[type] || {};\n  return datasetOptions.indexAxis || options.indexAxis || datasetDefaults.indexAxis || 'x';\n}\nfunction getAxisFromDefaultScaleID(id, indexAxis) {\n  let axis = id;\n  if (id === '_index_') {\n    axis = indexAxis;\n  } else if (id === '_value_') {\n    axis = indexAxis === 'x' ? 'y' : 'x';\n  }\n  return axis;\n}\nfunction getDefaultScaleIDFromAxis(axis, indexAxis) {\n  return axis === indexAxis ? '_index_' : '_value_';\n}\nfunction axisFromPosition(position) {\n  if (position === 'top' || position === 'bottom') {\n    return 'x';\n  }\n  if (position === 'left' || position === 'right') {\n    return 'y';\n  }\n}\nfunction determineAxis(id, scaleOptions) {\n  if (id === 'x' || id === 'y') {\n    return id;\n  }\n  return scaleOptions.axis || axisFromPosition(scaleOptions.position) || id.charAt(0).toLowerCase();\n}\nfunction mergeScaleConfig(config, options) {\n  const chartDefaults = overrides[config.type] || {scales: {}};\n  const configScales = options.scales || {};\n  const chartIndexAxis = getIndexAxis(config.type, options);\n  const firstIDs = Object.create(null);\n  const scales = Object.create(null);\n  Object.keys(configScales).forEach(id => {\n    const scaleConf = configScales[id];\n    if (!isObject(scaleConf)) {\n      return console.error(`Invalid scale configuration for scale: ${id}`);\n    }\n    if (scaleConf._proxy) {\n      return console.warn(`Ignoring resolver passed as options for scale: ${id}`);\n    }\n    const axis = determineAxis(id, scaleConf);\n    const defaultId = getDefaultScaleIDFromAxis(axis, chartIndexAxis);\n    const defaultScaleOptions = chartDefaults.scales || {};\n    firstIDs[axis] = firstIDs[axis] || id;\n    scales[id] = mergeIf(Object.create(null), [{axis}, scaleConf, defaultScaleOptions[axis], defaultScaleOptions[defaultId]]);\n  });\n  config.data.datasets.forEach(dataset => {\n    const type = dataset.type || config.type;\n    const indexAxis = dataset.indexAxis || getIndexAxis(type, options);\n    const datasetDefaults = overrides[type] || {};\n    const defaultScaleOptions = datasetDefaults.scales || {};\n    Object.keys(defaultScaleOptions).forEach(defaultID => {\n      const axis = getAxisFromDefaultScaleID(defaultID, indexAxis);\n      const id = dataset[axis + 'AxisID'] || firstIDs[axis] || axis;\n      scales[id] = scales[id] || Object.create(null);\n      mergeIf(scales[id], [{axis}, configScales[id], defaultScaleOptions[defaultID]]);\n    });\n  });\n  Object.keys(scales).forEach(key => {\n    const scale = scales[key];\n    mergeIf(scale, [defaults.scales[scale.type], defaults.scale]);\n  });\n  return scales;\n}\nfunction initOptions(config) {\n  const options = config.options || (config.options = {});\n  options.plugins = valueOrDefault(options.plugins, {});\n  options.scales = mergeScaleConfig(config, options);\n}\nfunction initData(data) {\n  data = data || {};\n  data.datasets = data.datasets || [];\n  data.labels = data.labels || [];\n  return data;\n}\nfunction initConfig(config) {\n  config = config || {};\n  config.data = initData(config.data);\n  initOptions(config);\n  return config;\n}\nconst keyCache = new Map();\nconst keysCached = new Set();\nfunction cachedKeys(cacheKey, generate) {\n  let keys = keyCache.get(cacheKey);\n  if (!keys) {\n    keys = generate();\n    keyCache.set(cacheKey, keys);\n    keysCached.add(keys);\n  }\n  return keys;\n}\nconst addIfFound = (set, obj, key) => {\n  const opts = resolveObjectKey(obj, key);\n  if (opts !== undefined) {\n    set.add(opts);\n  }\n};\nclass Config {\n  constructor(config) {\n    this._config = initConfig(config);\n    this._scopeCache = new Map();\n    this._resolverCache = new Map();\n  }\n  get platform() {\n    return this._config.platform;\n  }\n  get type() {\n    return this._config.type;\n  }\n  set type(type) {\n    this._config.type = type;\n  }\n  get data() {\n    return this._config.data;\n  }\n  set data(data) {\n    this._config.data = initData(data);\n  }\n  get options() {\n    return this._config.options;\n  }\n  set options(options) {\n    this._config.options = options;\n  }\n  get plugins() {\n    return this._config.plugins;\n  }\n  update() {\n    const config = this._config;\n    this.clearCache();\n    initOptions(config);\n  }\n  clearCache() {\n    this._scopeCache.clear();\n    this._resolverCache.clear();\n  }\n  datasetScopeKeys(datasetType) {\n    return cachedKeys(datasetType,\n      () => [[\n        `datasets.${datasetType}`,\n        ''\n      ]]);\n  }\n  datasetAnimationScopeKeys(datasetType, transition) {\n    return cachedKeys(`${datasetType}.transition.${transition}`,\n      () => [\n        [\n          `datasets.${datasetType}.transitions.${transition}`,\n          `transitions.${transition}`,\n        ],\n        [\n          `datasets.${datasetType}`,\n          ''\n        ]\n      ]);\n  }\n  datasetElementScopeKeys(datasetType, elementType) {\n    return cachedKeys(`${datasetType}-${elementType}`,\n      () => [[\n        `datasets.${datasetType}.elements.${elementType}`,\n        `datasets.${datasetType}`,\n        `elements.${elementType}`,\n        ''\n      ]]);\n  }\n  pluginScopeKeys(plugin) {\n    const id = plugin.id;\n    const type = this.type;\n    return cachedKeys(`${type}-plugin-${id}`,\n      () => [[\n        `plugins.${id}`,\n        ...plugin.additionalOptionScopes || [],\n      ]]);\n  }\n  _cachedScopes(mainScope, resetCache) {\n    const _scopeCache = this._scopeCache;\n    let cache = _scopeCache.get(mainScope);\n    if (!cache || resetCache) {\n      cache = new Map();\n      _scopeCache.set(mainScope, cache);\n    }\n    return cache;\n  }\n  getOptionScopes(mainScope, keyLists, resetCache) {\n    const {options, type} = this;\n    const cache = this._cachedScopes(mainScope, resetCache);\n    const cached = cache.get(keyLists);\n    if (cached) {\n      return cached;\n    }\n    const scopes = new Set();\n    keyLists.forEach(keys => {\n      if (mainScope) {\n        scopes.add(mainScope);\n        keys.forEach(key => addIfFound(scopes, mainScope, key));\n      }\n      keys.forEach(key => addIfFound(scopes, options, key));\n      keys.forEach(key => addIfFound(scopes, overrides[type] || {}, key));\n      keys.forEach(key => addIfFound(scopes, defaults, key));\n      keys.forEach(key => addIfFound(scopes, descriptors, key));\n    });\n    const array = Array.from(scopes);\n    if (array.length === 0) {\n      array.push(Object.create(null));\n    }\n    if (keysCached.has(keyLists)) {\n      cache.set(keyLists, array);\n    }\n    return array;\n  }\n  chartOptionScopes() {\n    const {options, type} = this;\n    return [\n      options,\n      overrides[type] || {},\n      defaults.datasets[type] || {},\n      {type},\n      defaults,\n      descriptors\n    ];\n  }\n  resolveNamedOptions(scopes, names, context, prefixes = ['']) {\n    const result = {$shared: true};\n    const {resolver, subPrefixes} = getResolver(this._resolverCache, scopes, prefixes);\n    let options = resolver;\n    if (needContext(resolver, names)) {\n      result.$shared = false;\n      context = isFunction(context) ? context() : context;\n      const subResolver = this.createResolver(scopes, context, subPrefixes);\n      options = _attachContext(resolver, context, subResolver);\n    }\n    for (const prop of names) {\n      result[prop] = options[prop];\n    }\n    return result;\n  }\n  createResolver(scopes, context, prefixes = [''], descriptorDefaults) {\n    const {resolver} = getResolver(this._resolverCache, scopes, prefixes);\n    return isObject(context)\n      ? _attachContext(resolver, context, undefined, descriptorDefaults)\n      : resolver;\n  }\n}\nfunction getResolver(resolverCache, scopes, prefixes) {\n  let cache = resolverCache.get(scopes);\n  if (!cache) {\n    cache = new Map();\n    resolverCache.set(scopes, cache);\n  }\n  const cacheKey = prefixes.join();\n  let cached = cache.get(cacheKey);\n  if (!cached) {\n    const resolver = _createResolver(scopes, prefixes);\n    cached = {\n      resolver,\n      subPrefixes: prefixes.filter(p => !p.toLowerCase().includes('hover'))\n    };\n    cache.set(cacheKey, cached);\n  }\n  return cached;\n}\nconst hasFunction = value => isObject(value)\n  && Object.getOwnPropertyNames(value).reduce((acc, key) => acc || isFunction(value[key]), false);\nfunction needContext(proxy, names) {\n  const {isScriptable, isIndexable} = _descriptors(proxy);\n  for (const prop of names) {\n    const scriptable = isScriptable(prop);\n    const indexable = isIndexable(prop);\n    const value = (indexable || scriptable) && proxy[prop];\n    if ((scriptable && (isFunction(value) || hasFunction(value)))\n      || (indexable && isArray(value))) {\n      return true;\n    }\n  }\n  return false;\n}\n\nvar version = \"3.8.0\";\n\nconst KNOWN_POSITIONS = ['top', 'bottom', 'left', 'right', 'chartArea'];\nfunction positionIsHorizontal(position, axis) {\n  return position === 'top' || position === 'bottom' || (KNOWN_POSITIONS.indexOf(position) === -1 && axis === 'x');\n}\nfunction compare2Level(l1, l2) {\n  return function(a, b) {\n    return a[l1] === b[l1]\n      ? a[l2] - b[l2]\n      : a[l1] - b[l1];\n  };\n}\nfunction onAnimationsComplete(context) {\n  const chart = context.chart;\n  const animationOptions = chart.options.animation;\n  chart.notifyPlugins('afterRender');\n  callback(animationOptions && animationOptions.onComplete, [context], chart);\n}\nfunction onAnimationProgress(context) {\n  const chart = context.chart;\n  const animationOptions = chart.options.animation;\n  callback(animationOptions && animationOptions.onProgress, [context], chart);\n}\nfunction getCanvas(item) {\n  if (_isDomSupported() && typeof item === 'string') {\n    item = document.getElementById(item);\n  } else if (item && item.length) {\n    item = item[0];\n  }\n  if (item && item.canvas) {\n    item = item.canvas;\n  }\n  return item;\n}\nconst instances = {};\nconst getChart = (key) => {\n  const canvas = getCanvas(key);\n  return Object.values(instances).filter((c) => c.canvas === canvas).pop();\n};\nfunction moveNumericKeys(obj, start, move) {\n  const keys = Object.keys(obj);\n  for (const key of keys) {\n    const intKey = +key;\n    if (intKey >= start) {\n      const value = obj[key];\n      delete obj[key];\n      if (move > 0 || intKey > start) {\n        obj[intKey + move] = value;\n      }\n    }\n  }\n}\nfunction determineLastEvent(e, lastEvent, inChartArea, isClick) {\n  if (!inChartArea || e.type === 'mouseout') {\n    return null;\n  }\n  if (isClick) {\n    return lastEvent;\n  }\n  return e;\n}\nclass Chart {\n  constructor(item, userConfig) {\n    const config = this.config = new Config(userConfig);\n    const initialCanvas = getCanvas(item);\n    const existingChart = getChart(initialCanvas);\n    if (existingChart) {\n      throw new Error(\n        'Canvas is already in use. Chart with ID \\'' + existingChart.id + '\\'' +\n\t\t\t\t' must be destroyed before the canvas can be reused.'\n      );\n    }\n    const options = config.createResolver(config.chartOptionScopes(), this.getContext());\n    this.platform = new (config.platform || _detectPlatform(initialCanvas))();\n    this.platform.updateConfig(config);\n    const context = this.platform.acquireContext(initialCanvas, options.aspectRatio);\n    const canvas = context && context.canvas;\n    const height = canvas && canvas.height;\n    const width = canvas && canvas.width;\n    this.id = uid();\n    this.ctx = context;\n    this.canvas = canvas;\n    this.width = width;\n    this.height = height;\n    this._options = options;\n    this._aspectRatio = this.aspectRatio;\n    this._layers = [];\n    this._metasets = [];\n    this._stacks = undefined;\n    this.boxes = [];\n    this.currentDevicePixelRatio = undefined;\n    this.chartArea = undefined;\n    this._active = [];\n    this._lastEvent = undefined;\n    this._listeners = {};\n    this._responsiveListeners = undefined;\n    this._sortedMetasets = [];\n    this.scales = {};\n    this._plugins = new PluginService();\n    this.$proxies = {};\n    this._hiddenIndices = {};\n    this.attached = false;\n    this._animationsDisabled = undefined;\n    this.$context = undefined;\n    this._doResize = debounce(mode => this.update(mode), options.resizeDelay || 0);\n    this._dataChanges = [];\n    instances[this.id] = this;\n    if (!context || !canvas) {\n      console.error(\"Failed to create chart: can't acquire context from the given item\");\n      return;\n    }\n    animator.listen(this, 'complete', onAnimationsComplete);\n    animator.listen(this, 'progress', onAnimationProgress);\n    this._initialize();\n    if (this.attached) {\n      this.update();\n    }\n  }\n  get aspectRatio() {\n    const {options: {aspectRatio, maintainAspectRatio}, width, height, _aspectRatio} = this;\n    if (!isNullOrUndef(aspectRatio)) {\n      return aspectRatio;\n    }\n    if (maintainAspectRatio && _aspectRatio) {\n      return _aspectRatio;\n    }\n    return height ? width / height : null;\n  }\n  get data() {\n    return this.config.data;\n  }\n  set data(data) {\n    this.config.data = data;\n  }\n  get options() {\n    return this._options;\n  }\n  set options(options) {\n    this.config.options = options;\n  }\n  _initialize() {\n    this.notifyPlugins('beforeInit');\n    if (this.options.responsive) {\n      this.resize();\n    } else {\n      retinaScale(this, this.options.devicePixelRatio);\n    }\n    this.bindEvents();\n    this.notifyPlugins('afterInit');\n    return this;\n  }\n  clear() {\n    clearCanvas(this.canvas, this.ctx);\n    return this;\n  }\n  stop() {\n    animator.stop(this);\n    return this;\n  }\n  resize(width, height) {\n    if (!animator.running(this)) {\n      this._resize(width, height);\n    } else {\n      this._resizeBeforeDraw = {width, height};\n    }\n  }\n  _resize(width, height) {\n    const options = this.options;\n    const canvas = this.canvas;\n    const aspectRatio = options.maintainAspectRatio && this.aspectRatio;\n    const newSize = this.platform.getMaximumSize(canvas, width, height, aspectRatio);\n    const newRatio = options.devicePixelRatio || this.platform.getDevicePixelRatio();\n    const mode = this.width ? 'resize' : 'attach';\n    this.width = newSize.width;\n    this.height = newSize.height;\n    this._aspectRatio = this.aspectRatio;\n    if (!retinaScale(this, newRatio, true)) {\n      return;\n    }\n    this.notifyPlugins('resize', {size: newSize});\n    callback(options.onResize, [this, newSize], this);\n    if (this.attached) {\n      if (this._doResize(mode)) {\n        this.render();\n      }\n    }\n  }\n  ensureScalesHaveIDs() {\n    const options = this.options;\n    const scalesOptions = options.scales || {};\n    each(scalesOptions, (axisOptions, axisID) => {\n      axisOptions.id = axisID;\n    });\n  }\n  buildOrUpdateScales() {\n    const options = this.options;\n    const scaleOpts = options.scales;\n    const scales = this.scales;\n    const updated = Object.keys(scales).reduce((obj, id) => {\n      obj[id] = false;\n      return obj;\n    }, {});\n    let items = [];\n    if (scaleOpts) {\n      items = items.concat(\n        Object.keys(scaleOpts).map((id) => {\n          const scaleOptions = scaleOpts[id];\n          const axis = determineAxis(id, scaleOptions);\n          const isRadial = axis === 'r';\n          const isHorizontal = axis === 'x';\n          return {\n            options: scaleOptions,\n            dposition: isRadial ? 'chartArea' : isHorizontal ? 'bottom' : 'left',\n            dtype: isRadial ? 'radialLinear' : isHorizontal ? 'category' : 'linear'\n          };\n        })\n      );\n    }\n    each(items, (item) => {\n      const scaleOptions = item.options;\n      const id = scaleOptions.id;\n      const axis = determineAxis(id, scaleOptions);\n      const scaleType = valueOrDefault(scaleOptions.type, item.dtype);\n      if (scaleOptions.position === undefined || positionIsHorizontal(scaleOptions.position, axis) !== positionIsHorizontal(item.dposition)) {\n        scaleOptions.position = item.dposition;\n      }\n      updated[id] = true;\n      let scale = null;\n      if (id in scales && scales[id].type === scaleType) {\n        scale = scales[id];\n      } else {\n        const scaleClass = registry.getScale(scaleType);\n        scale = new scaleClass({\n          id,\n          type: scaleType,\n          ctx: this.ctx,\n          chart: this\n        });\n        scales[scale.id] = scale;\n      }\n      scale.init(scaleOptions, options);\n    });\n    each(updated, (hasUpdated, id) => {\n      if (!hasUpdated) {\n        delete scales[id];\n      }\n    });\n    each(scales, (scale) => {\n      layouts.configure(this, scale, scale.options);\n      layouts.addBox(this, scale);\n    });\n  }\n  _updateMetasets() {\n    const metasets = this._metasets;\n    const numData = this.data.datasets.length;\n    const numMeta = metasets.length;\n    metasets.sort((a, b) => a.index - b.index);\n    if (numMeta > numData) {\n      for (let i = numData; i < numMeta; ++i) {\n        this._destroyDatasetMeta(i);\n      }\n      metasets.splice(numData, numMeta - numData);\n    }\n    this._sortedMetasets = metasets.slice(0).sort(compare2Level('order', 'index'));\n  }\n  _removeUnreferencedMetasets() {\n    const {_metasets: metasets, data: {datasets}} = this;\n    if (metasets.length > datasets.length) {\n      delete this._stacks;\n    }\n    metasets.forEach((meta, index) => {\n      if (datasets.filter(x => x === meta._dataset).length === 0) {\n        this._destroyDatasetMeta(index);\n      }\n    });\n  }\n  buildOrUpdateControllers() {\n    const newControllers = [];\n    const datasets = this.data.datasets;\n    let i, ilen;\n    this._removeUnreferencedMetasets();\n    for (i = 0, ilen = datasets.length; i < ilen; i++) {\n      const dataset = datasets[i];\n      let meta = this.getDatasetMeta(i);\n      const type = dataset.type || this.config.type;\n      if (meta.type && meta.type !== type) {\n        this._destroyDatasetMeta(i);\n        meta = this.getDatasetMeta(i);\n      }\n      meta.type = type;\n      meta.indexAxis = dataset.indexAxis || getIndexAxis(type, this.options);\n      meta.order = dataset.order || 0;\n      meta.index = i;\n      meta.label = '' + dataset.label;\n      meta.visible = this.isDatasetVisible(i);\n      if (meta.controller) {\n        meta.controller.updateIndex(i);\n        meta.controller.linkScales();\n      } else {\n        const ControllerClass = registry.getController(type);\n        const {datasetElementType, dataElementType} = defaults.datasets[type];\n        Object.assign(ControllerClass.prototype, {\n          dataElementType: registry.getElement(dataElementType),\n          datasetElementType: datasetElementType && registry.getElement(datasetElementType)\n        });\n        meta.controller = new ControllerClass(this, i);\n        newControllers.push(meta.controller);\n      }\n    }\n    this._updateMetasets();\n    return newControllers;\n  }\n  _resetElements() {\n    each(this.data.datasets, (dataset, datasetIndex) => {\n      this.getDatasetMeta(datasetIndex).controller.reset();\n    }, this);\n  }\n  reset() {\n    this._resetElements();\n    this.notifyPlugins('reset');\n  }\n  update(mode) {\n    const config = this.config;\n    config.update();\n    const options = this._options = config.createResolver(config.chartOptionScopes(), this.getContext());\n    const animsDisabled = this._animationsDisabled = !options.animation;\n    this._updateScales();\n    this._checkEventBindings();\n    this._updateHiddenIndices();\n    this._plugins.invalidate();\n    if (this.notifyPlugins('beforeUpdate', {mode, cancelable: true}) === false) {\n      return;\n    }\n    const newControllers = this.buildOrUpdateControllers();\n    this.notifyPlugins('beforeElementsUpdate');\n    let minPadding = 0;\n    for (let i = 0, ilen = this.data.datasets.length; i < ilen; i++) {\n      const {controller} = this.getDatasetMeta(i);\n      const reset = !animsDisabled && newControllers.indexOf(controller) === -1;\n      controller.buildOrUpdateElements(reset);\n      minPadding = Math.max(+controller.getMaxOverflow(), minPadding);\n    }\n    minPadding = this._minPadding = options.layout.autoPadding ? minPadding : 0;\n    this._updateLayout(minPadding);\n    if (!animsDisabled) {\n      each(newControllers, (controller) => {\n        controller.reset();\n      });\n    }\n    this._updateDatasets(mode);\n    this.notifyPlugins('afterUpdate', {mode});\n    this._layers.sort(compare2Level('z', '_idx'));\n    const {_active, _lastEvent} = this;\n    if (_lastEvent) {\n      this._eventHandler(_lastEvent, true);\n    } else if (_active.length) {\n      this._updateHoverStyles(_active, _active, true);\n    }\n    this.render();\n  }\n  _updateScales() {\n    each(this.scales, (scale) => {\n      layouts.removeBox(this, scale);\n    });\n    this.ensureScalesHaveIDs();\n    this.buildOrUpdateScales();\n  }\n  _checkEventBindings() {\n    const options = this.options;\n    const existingEvents = new Set(Object.keys(this._listeners));\n    const newEvents = new Set(options.events);\n    if (!setsEqual(existingEvents, newEvents) || !!this._responsiveListeners !== options.responsive) {\n      this.unbindEvents();\n      this.bindEvents();\n    }\n  }\n  _updateHiddenIndices() {\n    const {_hiddenIndices} = this;\n    const changes = this._getUniformDataChanges() || [];\n    for (const {method, start, count} of changes) {\n      const move = method === '_removeElements' ? -count : count;\n      moveNumericKeys(_hiddenIndices, start, move);\n    }\n  }\n  _getUniformDataChanges() {\n    const _dataChanges = this._dataChanges;\n    if (!_dataChanges || !_dataChanges.length) {\n      return;\n    }\n    this._dataChanges = [];\n    const datasetCount = this.data.datasets.length;\n    const makeSet = (idx) => new Set(\n      _dataChanges\n        .filter(c => c[0] === idx)\n        .map((c, i) => i + ',' + c.splice(1).join(','))\n    );\n    const changeSet = makeSet(0);\n    for (let i = 1; i < datasetCount; i++) {\n      if (!setsEqual(changeSet, makeSet(i))) {\n        return;\n      }\n    }\n    return Array.from(changeSet)\n      .map(c => c.split(','))\n      .map(a => ({method: a[1], start: +a[2], count: +a[3]}));\n  }\n  _updateLayout(minPadding) {\n    if (this.notifyPlugins('beforeLayout', {cancelable: true}) === false) {\n      return;\n    }\n    layouts.update(this, this.width, this.height, minPadding);\n    const area = this.chartArea;\n    const noArea = area.width <= 0 || area.height <= 0;\n    this._layers = [];\n    each(this.boxes, (box) => {\n      if (noArea && box.position === 'chartArea') {\n        return;\n      }\n      if (box.configure) {\n        box.configure();\n      }\n      this._layers.push(...box._layers());\n    }, this);\n    this._layers.forEach((item, index) => {\n      item._idx = index;\n    });\n    this.notifyPlugins('afterLayout');\n  }\n  _updateDatasets(mode) {\n    if (this.notifyPlugins('beforeDatasetsUpdate', {mode, cancelable: true}) === false) {\n      return;\n    }\n    for (let i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n      this.getDatasetMeta(i).controller.configure();\n    }\n    for (let i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n      this._updateDataset(i, isFunction(mode) ? mode({datasetIndex: i}) : mode);\n    }\n    this.notifyPlugins('afterDatasetsUpdate', {mode});\n  }\n  _updateDataset(index, mode) {\n    const meta = this.getDatasetMeta(index);\n    const args = {meta, index, mode, cancelable: true};\n    if (this.notifyPlugins('beforeDatasetUpdate', args) === false) {\n      return;\n    }\n    meta.controller._update(mode);\n    args.cancelable = false;\n    this.notifyPlugins('afterDatasetUpdate', args);\n  }\n  render() {\n    if (this.notifyPlugins('beforeRender', {cancelable: true}) === false) {\n      return;\n    }\n    if (animator.has(this)) {\n      if (this.attached && !animator.running(this)) {\n        animator.start(this);\n      }\n    } else {\n      this.draw();\n      onAnimationsComplete({chart: this});\n    }\n  }\n  draw() {\n    let i;\n    if (this._resizeBeforeDraw) {\n      const {width, height} = this._resizeBeforeDraw;\n      this._resize(width, height);\n      this._resizeBeforeDraw = null;\n    }\n    this.clear();\n    if (this.width <= 0 || this.height <= 0) {\n      return;\n    }\n    if (this.notifyPlugins('beforeDraw', {cancelable: true}) === false) {\n      return;\n    }\n    const layers = this._layers;\n    for (i = 0; i < layers.length && layers[i].z <= 0; ++i) {\n      layers[i].draw(this.chartArea);\n    }\n    this._drawDatasets();\n    for (; i < layers.length; ++i) {\n      layers[i].draw(this.chartArea);\n    }\n    this.notifyPlugins('afterDraw');\n  }\n  _getSortedDatasetMetas(filterVisible) {\n    const metasets = this._sortedMetasets;\n    const result = [];\n    let i, ilen;\n    for (i = 0, ilen = metasets.length; i < ilen; ++i) {\n      const meta = metasets[i];\n      if (!filterVisible || meta.visible) {\n        result.push(meta);\n      }\n    }\n    return result;\n  }\n  getSortedVisibleDatasetMetas() {\n    return this._getSortedDatasetMetas(true);\n  }\n  _drawDatasets() {\n    if (this.notifyPlugins('beforeDatasetsDraw', {cancelable: true}) === false) {\n      return;\n    }\n    const metasets = this.getSortedVisibleDatasetMetas();\n    for (let i = metasets.length - 1; i >= 0; --i) {\n      this._drawDataset(metasets[i]);\n    }\n    this.notifyPlugins('afterDatasetsDraw');\n  }\n  _drawDataset(meta) {\n    const ctx = this.ctx;\n    const clip = meta._clip;\n    const useClip = !clip.disabled;\n    const area = this.chartArea;\n    const args = {\n      meta,\n      index: meta.index,\n      cancelable: true\n    };\n    if (this.notifyPlugins('beforeDatasetDraw', args) === false) {\n      return;\n    }\n    if (useClip) {\n      clipArea(ctx, {\n        left: clip.left === false ? 0 : area.left - clip.left,\n        right: clip.right === false ? this.width : area.right + clip.right,\n        top: clip.top === false ? 0 : area.top - clip.top,\n        bottom: clip.bottom === false ? this.height : area.bottom + clip.bottom\n      });\n    }\n    meta.controller.draw();\n    if (useClip) {\n      unclipArea(ctx);\n    }\n    args.cancelable = false;\n    this.notifyPlugins('afterDatasetDraw', args);\n  }\n  isPointInArea(point) {\n    return _isPointInArea(point, this.chartArea, this._minPadding);\n  }\n  getElementsAtEventForMode(e, mode, options, useFinalPosition) {\n    const method = Interaction.modes[mode];\n    if (typeof method === 'function') {\n      return method(this, e, options, useFinalPosition);\n    }\n    return [];\n  }\n  getDatasetMeta(datasetIndex) {\n    const dataset = this.data.datasets[datasetIndex];\n    const metasets = this._metasets;\n    let meta = metasets.filter(x => x && x._dataset === dataset).pop();\n    if (!meta) {\n      meta = {\n        type: null,\n        data: [],\n        dataset: null,\n        controller: null,\n        hidden: null,\n        xAxisID: null,\n        yAxisID: null,\n        order: dataset && dataset.order || 0,\n        index: datasetIndex,\n        _dataset: dataset,\n        _parsed: [],\n        _sorted: false\n      };\n      metasets.push(meta);\n    }\n    return meta;\n  }\n  getContext() {\n    return this.$context || (this.$context = createContext(null, {chart: this, type: 'chart'}));\n  }\n  getVisibleDatasetCount() {\n    return this.getSortedVisibleDatasetMetas().length;\n  }\n  isDatasetVisible(datasetIndex) {\n    const dataset = this.data.datasets[datasetIndex];\n    if (!dataset) {\n      return false;\n    }\n    const meta = this.getDatasetMeta(datasetIndex);\n    return typeof meta.hidden === 'boolean' ? !meta.hidden : !dataset.hidden;\n  }\n  setDatasetVisibility(datasetIndex, visible) {\n    const meta = this.getDatasetMeta(datasetIndex);\n    meta.hidden = !visible;\n  }\n  toggleDataVisibility(index) {\n    this._hiddenIndices[index] = !this._hiddenIndices[index];\n  }\n  getDataVisibility(index) {\n    return !this._hiddenIndices[index];\n  }\n  _updateVisibility(datasetIndex, dataIndex, visible) {\n    const mode = visible ? 'show' : 'hide';\n    const meta = this.getDatasetMeta(datasetIndex);\n    const anims = meta.controller._resolveAnimations(undefined, mode);\n    if (defined(dataIndex)) {\n      meta.data[dataIndex].hidden = !visible;\n      this.update();\n    } else {\n      this.setDatasetVisibility(datasetIndex, visible);\n      anims.update(meta, {visible});\n      this.update((ctx) => ctx.datasetIndex === datasetIndex ? mode : undefined);\n    }\n  }\n  hide(datasetIndex, dataIndex) {\n    this._updateVisibility(datasetIndex, dataIndex, false);\n  }\n  show(datasetIndex, dataIndex) {\n    this._updateVisibility(datasetIndex, dataIndex, true);\n  }\n  _destroyDatasetMeta(datasetIndex) {\n    const meta = this._metasets[datasetIndex];\n    if (meta && meta.controller) {\n      meta.controller._destroy();\n    }\n    delete this._metasets[datasetIndex];\n  }\n  _stop() {\n    let i, ilen;\n    this.stop();\n    animator.remove(this);\n    for (i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n      this._destroyDatasetMeta(i);\n    }\n  }\n  destroy() {\n    this.notifyPlugins('beforeDestroy');\n    const {canvas, ctx} = this;\n    this._stop();\n    this.config.clearCache();\n    if (canvas) {\n      this.unbindEvents();\n      clearCanvas(canvas, ctx);\n      this.platform.releaseContext(ctx);\n      this.canvas = null;\n      this.ctx = null;\n    }\n    this.notifyPlugins('destroy');\n    delete instances[this.id];\n    this.notifyPlugins('afterDestroy');\n  }\n  toBase64Image(...args) {\n    return this.canvas.toDataURL(...args);\n  }\n  bindEvents() {\n    this.bindUserEvents();\n    if (this.options.responsive) {\n      this.bindResponsiveEvents();\n    } else {\n      this.attached = true;\n    }\n  }\n  bindUserEvents() {\n    const listeners = this._listeners;\n    const platform = this.platform;\n    const _add = (type, listener) => {\n      platform.addEventListener(this, type, listener);\n      listeners[type] = listener;\n    };\n    const listener = (e, x, y) => {\n      e.offsetX = x;\n      e.offsetY = y;\n      this._eventHandler(e);\n    };\n    each(this.options.events, (type) => _add(type, listener));\n  }\n  bindResponsiveEvents() {\n    if (!this._responsiveListeners) {\n      this._responsiveListeners = {};\n    }\n    const listeners = this._responsiveListeners;\n    const platform = this.platform;\n    const _add = (type, listener) => {\n      platform.addEventListener(this, type, listener);\n      listeners[type] = listener;\n    };\n    const _remove = (type, listener) => {\n      if (listeners[type]) {\n        platform.removeEventListener(this, type, listener);\n        delete listeners[type];\n      }\n    };\n    const listener = (width, height) => {\n      if (this.canvas) {\n        this.resize(width, height);\n      }\n    };\n    let detached;\n    const attached = () => {\n      _remove('attach', attached);\n      this.attached = true;\n      this.resize();\n      _add('resize', listener);\n      _add('detach', detached);\n    };\n    detached = () => {\n      this.attached = false;\n      _remove('resize', listener);\n      this._stop();\n      this._resize(0, 0);\n      _add('attach', attached);\n    };\n    if (platform.isAttached(this.canvas)) {\n      attached();\n    } else {\n      detached();\n    }\n  }\n  unbindEvents() {\n    each(this._listeners, (listener, type) => {\n      this.platform.removeEventListener(this, type, listener);\n    });\n    this._listeners = {};\n    each(this._responsiveListeners, (listener, type) => {\n      this.platform.removeEventListener(this, type, listener);\n    });\n    this._responsiveListeners = undefined;\n  }\n  updateHoverStyle(items, mode, enabled) {\n    const prefix = enabled ? 'set' : 'remove';\n    let meta, item, i, ilen;\n    if (mode === 'dataset') {\n      meta = this.getDatasetMeta(items[0].datasetIndex);\n      meta.controller['_' + prefix + 'DatasetHoverStyle']();\n    }\n    for (i = 0, ilen = items.length; i < ilen; ++i) {\n      item = items[i];\n      const controller = item && this.getDatasetMeta(item.datasetIndex).controller;\n      if (controller) {\n        controller[prefix + 'HoverStyle'](item.element, item.datasetIndex, item.index);\n      }\n    }\n  }\n  getActiveElements() {\n    return this._active || [];\n  }\n  setActiveElements(activeElements) {\n    const lastActive = this._active || [];\n    const active = activeElements.map(({datasetIndex, index}) => {\n      const meta = this.getDatasetMeta(datasetIndex);\n      if (!meta) {\n        throw new Error('No dataset found at index ' + datasetIndex);\n      }\n      return {\n        datasetIndex,\n        element: meta.data[index],\n        index,\n      };\n    });\n    const changed = !_elementsEqual(active, lastActive);\n    if (changed) {\n      this._active = active;\n      this._lastEvent = null;\n      this._updateHoverStyles(active, lastActive);\n    }\n  }\n  notifyPlugins(hook, args, filter) {\n    return this._plugins.notify(this, hook, args, filter);\n  }\n  _updateHoverStyles(active, lastActive, replay) {\n    const hoverOptions = this.options.hover;\n    const diff = (a, b) => a.filter(x => !b.some(y => x.datasetIndex === y.datasetIndex && x.index === y.index));\n    const deactivated = diff(lastActive, active);\n    const activated = replay ? active : diff(active, lastActive);\n    if (deactivated.length) {\n      this.updateHoverStyle(deactivated, hoverOptions.mode, false);\n    }\n    if (activated.length && hoverOptions.mode) {\n      this.updateHoverStyle(activated, hoverOptions.mode, true);\n    }\n  }\n  _eventHandler(e, replay) {\n    const args = {\n      event: e,\n      replay,\n      cancelable: true,\n      inChartArea: this.isPointInArea(e)\n    };\n    const eventFilter = (plugin) => (plugin.options.events || this.options.events).includes(e.native.type);\n    if (this.notifyPlugins('beforeEvent', args, eventFilter) === false) {\n      return;\n    }\n    const changed = this._handleEvent(e, replay, args.inChartArea);\n    args.cancelable = false;\n    this.notifyPlugins('afterEvent', args, eventFilter);\n    if (changed || args.changed) {\n      this.render();\n    }\n    return this;\n  }\n  _handleEvent(e, replay, inChartArea) {\n    const {_active: lastActive = [], options} = this;\n    const useFinalPosition = replay;\n    const active = this._getActiveElements(e, lastActive, inChartArea, useFinalPosition);\n    const isClick = _isClickEvent(e);\n    const lastEvent = determineLastEvent(e, this._lastEvent, inChartArea, isClick);\n    if (inChartArea) {\n      this._lastEvent = null;\n      callback(options.onHover, [e, active, this], this);\n      if (isClick) {\n        callback(options.onClick, [e, active, this], this);\n      }\n    }\n    const changed = !_elementsEqual(active, lastActive);\n    if (changed || replay) {\n      this._active = active;\n      this._updateHoverStyles(active, lastActive, replay);\n    }\n    this._lastEvent = lastEvent;\n    return changed;\n  }\n  _getActiveElements(e, lastActive, inChartArea, useFinalPosition) {\n    if (e.type === 'mouseout') {\n      return [];\n    }\n    if (!inChartArea) {\n      return lastActive;\n    }\n    const hoverOptions = this.options.hover;\n    return this.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions, useFinalPosition);\n  }\n}\nconst invalidatePlugins = () => each(Chart.instances, (chart) => chart._plugins.invalidate());\nconst enumerable = true;\nObject.defineProperties(Chart, {\n  defaults: {\n    enumerable,\n    value: defaults\n  },\n  instances: {\n    enumerable,\n    value: instances\n  },\n  overrides: {\n    enumerable,\n    value: overrides\n  },\n  registry: {\n    enumerable,\n    value: registry\n  },\n  version: {\n    enumerable,\n    value: version\n  },\n  getChart: {\n    enumerable,\n    value: getChart\n  },\n  register: {\n    enumerable,\n    value: (...items) => {\n      registry.add(...items);\n      invalidatePlugins();\n    }\n  },\n  unregister: {\n    enumerable,\n    value: (...items) => {\n      registry.remove(...items);\n      invalidatePlugins();\n    }\n  }\n});\n\nfunction clipArc(ctx, element, endAngle) {\n  const {startAngle, pixelMargin, x, y, outerRadius, innerRadius} = element;\n  let angleMargin = pixelMargin / outerRadius;\n  ctx.beginPath();\n  ctx.arc(x, y, outerRadius, startAngle - angleMargin, endAngle + angleMargin);\n  if (innerRadius > pixelMargin) {\n    angleMargin = pixelMargin / innerRadius;\n    ctx.arc(x, y, innerRadius, endAngle + angleMargin, startAngle - angleMargin, true);\n  } else {\n    ctx.arc(x, y, pixelMargin, endAngle + HALF_PI, startAngle - HALF_PI);\n  }\n  ctx.closePath();\n  ctx.clip();\n}\nfunction toRadiusCorners(value) {\n  return _readValueToProps(value, ['outerStart', 'outerEnd', 'innerStart', 'innerEnd']);\n}\nfunction parseBorderRadius$1(arc, innerRadius, outerRadius, angleDelta) {\n  const o = toRadiusCorners(arc.options.borderRadius);\n  const halfThickness = (outerRadius - innerRadius) / 2;\n  const innerLimit = Math.min(halfThickness, angleDelta * innerRadius / 2);\n  const computeOuterLimit = (val) => {\n    const outerArcLimit = (outerRadius - Math.min(halfThickness, val)) * angleDelta / 2;\n    return _limitValue(val, 0, Math.min(halfThickness, outerArcLimit));\n  };\n  return {\n    outerStart: computeOuterLimit(o.outerStart),\n    outerEnd: computeOuterLimit(o.outerEnd),\n    innerStart: _limitValue(o.innerStart, 0, innerLimit),\n    innerEnd: _limitValue(o.innerEnd, 0, innerLimit),\n  };\n}\nfunction rThetaToXY(r, theta, x, y) {\n  return {\n    x: x + r * Math.cos(theta),\n    y: y + r * Math.sin(theta),\n  };\n}\nfunction pathArc(ctx, element, offset, spacing, end) {\n  const {x, y, startAngle: start, pixelMargin, innerRadius: innerR} = element;\n  const outerRadius = Math.max(element.outerRadius + spacing + offset - pixelMargin, 0);\n  const innerRadius = innerR > 0 ? innerR + spacing + offset + pixelMargin : 0;\n  let spacingOffset = 0;\n  const alpha = end - start;\n  if (spacing) {\n    const noSpacingInnerRadius = innerR > 0 ? innerR - spacing : 0;\n    const noSpacingOuterRadius = outerRadius > 0 ? outerRadius - spacing : 0;\n    const avNogSpacingRadius = (noSpacingInnerRadius + noSpacingOuterRadius) / 2;\n    const adjustedAngle = avNogSpacingRadius !== 0 ? (alpha * avNogSpacingRadius) / (avNogSpacingRadius + spacing) : alpha;\n    spacingOffset = (alpha - adjustedAngle) / 2;\n  }\n  const beta = Math.max(0.001, alpha * outerRadius - offset / PI) / outerRadius;\n  const angleOffset = (alpha - beta) / 2;\n  const startAngle = start + angleOffset + spacingOffset;\n  const endAngle = end - angleOffset - spacingOffset;\n  const {outerStart, outerEnd, innerStart, innerEnd} = parseBorderRadius$1(element, innerRadius, outerRadius, endAngle - startAngle);\n  const outerStartAdjustedRadius = outerRadius - outerStart;\n  const outerEndAdjustedRadius = outerRadius - outerEnd;\n  const outerStartAdjustedAngle = startAngle + outerStart / outerStartAdjustedRadius;\n  const outerEndAdjustedAngle = endAngle - outerEnd / outerEndAdjustedRadius;\n  const innerStartAdjustedRadius = innerRadius + innerStart;\n  const innerEndAdjustedRadius = innerRadius + innerEnd;\n  const innerStartAdjustedAngle = startAngle + innerStart / innerStartAdjustedRadius;\n  const innerEndAdjustedAngle = endAngle - innerEnd / innerEndAdjustedRadius;\n  ctx.beginPath();\n  ctx.arc(x, y, outerRadius, outerStartAdjustedAngle, outerEndAdjustedAngle);\n  if (outerEnd > 0) {\n    const pCenter = rThetaToXY(outerEndAdjustedRadius, outerEndAdjustedAngle, x, y);\n    ctx.arc(pCenter.x, pCenter.y, outerEnd, outerEndAdjustedAngle, endAngle + HALF_PI);\n  }\n  const p4 = rThetaToXY(innerEndAdjustedRadius, endAngle, x, y);\n  ctx.lineTo(p4.x, p4.y);\n  if (innerEnd > 0) {\n    const pCenter = rThetaToXY(innerEndAdjustedRadius, innerEndAdjustedAngle, x, y);\n    ctx.arc(pCenter.x, pCenter.y, innerEnd, endAngle + HALF_PI, innerEndAdjustedAngle + Math.PI);\n  }\n  ctx.arc(x, y, innerRadius, endAngle - (innerEnd / innerRadius), startAngle + (innerStart / innerRadius), true);\n  if (innerStart > 0) {\n    const pCenter = rThetaToXY(innerStartAdjustedRadius, innerStartAdjustedAngle, x, y);\n    ctx.arc(pCenter.x, pCenter.y, innerStart, innerStartAdjustedAngle + Math.PI, startAngle - HALF_PI);\n  }\n  const p8 = rThetaToXY(outerStartAdjustedRadius, startAngle, x, y);\n  ctx.lineTo(p8.x, p8.y);\n  if (outerStart > 0) {\n    const pCenter = rThetaToXY(outerStartAdjustedRadius, outerStartAdjustedAngle, x, y);\n    ctx.arc(pCenter.x, pCenter.y, outerStart, startAngle - HALF_PI, outerStartAdjustedAngle);\n  }\n  ctx.closePath();\n}\nfunction drawArc(ctx, element, offset, spacing) {\n  const {fullCircles, startAngle, circumference} = element;\n  let endAngle = element.endAngle;\n  if (fullCircles) {\n    pathArc(ctx, element, offset, spacing, startAngle + TAU);\n    for (let i = 0; i < fullCircles; ++i) {\n      ctx.fill();\n    }\n    if (!isNaN(circumference)) {\n      endAngle = startAngle + circumference % TAU;\n      if (circumference % TAU === 0) {\n        endAngle += TAU;\n      }\n    }\n  }\n  pathArc(ctx, element, offset, spacing, endAngle);\n  ctx.fill();\n  return endAngle;\n}\nfunction drawFullCircleBorders(ctx, element, inner) {\n  const {x, y, startAngle, pixelMargin, fullCircles} = element;\n  const outerRadius = Math.max(element.outerRadius - pixelMargin, 0);\n  const innerRadius = element.innerRadius + pixelMargin;\n  let i;\n  if (inner) {\n    clipArc(ctx, element, startAngle + TAU);\n  }\n  ctx.beginPath();\n  ctx.arc(x, y, innerRadius, startAngle + TAU, startAngle, true);\n  for (i = 0; i < fullCircles; ++i) {\n    ctx.stroke();\n  }\n  ctx.beginPath();\n  ctx.arc(x, y, outerRadius, startAngle, startAngle + TAU);\n  for (i = 0; i < fullCircles; ++i) {\n    ctx.stroke();\n  }\n}\nfunction drawBorder(ctx, element, offset, spacing, endAngle) {\n  const {options} = element;\n  const {borderWidth, borderJoinStyle} = options;\n  const inner = options.borderAlign === 'inner';\n  if (!borderWidth) {\n    return;\n  }\n  if (inner) {\n    ctx.lineWidth = borderWidth * 2;\n    ctx.lineJoin = borderJoinStyle || 'round';\n  } else {\n    ctx.lineWidth = borderWidth;\n    ctx.lineJoin = borderJoinStyle || 'bevel';\n  }\n  if (element.fullCircles) {\n    drawFullCircleBorders(ctx, element, inner);\n  }\n  if (inner) {\n    clipArc(ctx, element, endAngle);\n  }\n  pathArc(ctx, element, offset, spacing, endAngle);\n  ctx.stroke();\n}\nclass ArcElement extends Element {\n  constructor(cfg) {\n    super();\n    this.options = undefined;\n    this.circumference = undefined;\n    this.startAngle = undefined;\n    this.endAngle = undefined;\n    this.innerRadius = undefined;\n    this.outerRadius = undefined;\n    this.pixelMargin = 0;\n    this.fullCircles = 0;\n    if (cfg) {\n      Object.assign(this, cfg);\n    }\n  }\n  inRange(chartX, chartY, useFinalPosition) {\n    const point = this.getProps(['x', 'y'], useFinalPosition);\n    const {angle, distance} = getAngleFromPoint(point, {x: chartX, y: chartY});\n    const {startAngle, endAngle, innerRadius, outerRadius, circumference} = this.getProps([\n      'startAngle',\n      'endAngle',\n      'innerRadius',\n      'outerRadius',\n      'circumference'\n    ], useFinalPosition);\n    const rAdjust = this.options.spacing / 2;\n    const _circumference = valueOrDefault(circumference, endAngle - startAngle);\n    const betweenAngles = _circumference >= TAU || _angleBetween(angle, startAngle, endAngle);\n    const withinRadius = _isBetween(distance, innerRadius + rAdjust, outerRadius + rAdjust);\n    return (betweenAngles && withinRadius);\n  }\n  getCenterPoint(useFinalPosition) {\n    const {x, y, startAngle, endAngle, innerRadius, outerRadius} = this.getProps([\n      'x',\n      'y',\n      'startAngle',\n      'endAngle',\n      'innerRadius',\n      'outerRadius',\n      'circumference',\n    ], useFinalPosition);\n    const {offset, spacing} = this.options;\n    const halfAngle = (startAngle + endAngle) / 2;\n    const halfRadius = (innerRadius + outerRadius + spacing + offset) / 2;\n    return {\n      x: x + Math.cos(halfAngle) * halfRadius,\n      y: y + Math.sin(halfAngle) * halfRadius\n    };\n  }\n  tooltipPosition(useFinalPosition) {\n    return this.getCenterPoint(useFinalPosition);\n  }\n  draw(ctx) {\n    const {options, circumference} = this;\n    const offset = (options.offset || 0) / 2;\n    const spacing = (options.spacing || 0) / 2;\n    this.pixelMargin = (options.borderAlign === 'inner') ? 0.33 : 0;\n    this.fullCircles = circumference > TAU ? Math.floor(circumference / TAU) : 0;\n    if (circumference === 0 || this.innerRadius < 0 || this.outerRadius < 0) {\n      return;\n    }\n    ctx.save();\n    let radiusOffset = 0;\n    if (offset) {\n      radiusOffset = offset / 2;\n      const halfAngle = (this.startAngle + this.endAngle) / 2;\n      ctx.translate(Math.cos(halfAngle) * radiusOffset, Math.sin(halfAngle) * radiusOffset);\n      if (this.circumference >= PI) {\n        radiusOffset = offset;\n      }\n    }\n    ctx.fillStyle = options.backgroundColor;\n    ctx.strokeStyle = options.borderColor;\n    const endAngle = drawArc(ctx, this, radiusOffset, spacing);\n    drawBorder(ctx, this, radiusOffset, spacing, endAngle);\n    ctx.restore();\n  }\n}\nArcElement.id = 'arc';\nArcElement.defaults = {\n  borderAlign: 'center',\n  borderColor: '#fff',\n  borderJoinStyle: undefined,\n  borderRadius: 0,\n  borderWidth: 2,\n  offset: 0,\n  spacing: 0,\n  angle: undefined,\n};\nArcElement.defaultRoutes = {\n  backgroundColor: 'backgroundColor'\n};\n\nfunction setStyle(ctx, options, style = options) {\n  ctx.lineCap = valueOrDefault(style.borderCapStyle, options.borderCapStyle);\n  ctx.setLineDash(valueOrDefault(style.borderDash, options.borderDash));\n  ctx.lineDashOffset = valueOrDefault(style.borderDashOffset, options.borderDashOffset);\n  ctx.lineJoin = valueOrDefault(style.borderJoinStyle, options.borderJoinStyle);\n  ctx.lineWidth = valueOrDefault(style.borderWidth, options.borderWidth);\n  ctx.strokeStyle = valueOrDefault(style.borderColor, options.borderColor);\n}\nfunction lineTo(ctx, previous, target) {\n  ctx.lineTo(target.x, target.y);\n}\nfunction getLineMethod(options) {\n  if (options.stepped) {\n    return _steppedLineTo;\n  }\n  if (options.tension || options.cubicInterpolationMode === 'monotone') {\n    return _bezierCurveTo;\n  }\n  return lineTo;\n}\nfunction pathVars(points, segment, params = {}) {\n  const count = points.length;\n  const {start: paramsStart = 0, end: paramsEnd = count - 1} = params;\n  const {start: segmentStart, end: segmentEnd} = segment;\n  const start = Math.max(paramsStart, segmentStart);\n  const end = Math.min(paramsEnd, segmentEnd);\n  const outside = paramsStart < segmentStart && paramsEnd < segmentStart || paramsStart > segmentEnd && paramsEnd > segmentEnd;\n  return {\n    count,\n    start,\n    loop: segment.loop,\n    ilen: end < start && !outside ? count + end - start : end - start\n  };\n}\nfunction pathSegment(ctx, line, segment, params) {\n  const {points, options} = line;\n  const {count, start, loop, ilen} = pathVars(points, segment, params);\n  const lineMethod = getLineMethod(options);\n  let {move = true, reverse} = params || {};\n  let i, point, prev;\n  for (i = 0; i <= ilen; ++i) {\n    point = points[(start + (reverse ? ilen - i : i)) % count];\n    if (point.skip) {\n      continue;\n    } else if (move) {\n      ctx.moveTo(point.x, point.y);\n      move = false;\n    } else {\n      lineMethod(ctx, prev, point, reverse, options.stepped);\n    }\n    prev = point;\n  }\n  if (loop) {\n    point = points[(start + (reverse ? ilen : 0)) % count];\n    lineMethod(ctx, prev, point, reverse, options.stepped);\n  }\n  return !!loop;\n}\nfunction fastPathSegment(ctx, line, segment, params) {\n  const points = line.points;\n  const {count, start, ilen} = pathVars(points, segment, params);\n  const {move = true, reverse} = params || {};\n  let avgX = 0;\n  let countX = 0;\n  let i, point, prevX, minY, maxY, lastY;\n  const pointIndex = (index) => (start + (reverse ? ilen - index : index)) % count;\n  const drawX = () => {\n    if (minY !== maxY) {\n      ctx.lineTo(avgX, maxY);\n      ctx.lineTo(avgX, minY);\n      ctx.lineTo(avgX, lastY);\n    }\n  };\n  if (move) {\n    point = points[pointIndex(0)];\n    ctx.moveTo(point.x, point.y);\n  }\n  for (i = 0; i <= ilen; ++i) {\n    point = points[pointIndex(i)];\n    if (point.skip) {\n      continue;\n    }\n    const x = point.x;\n    const y = point.y;\n    const truncX = x | 0;\n    if (truncX === prevX) {\n      if (y < minY) {\n        minY = y;\n      } else if (y > maxY) {\n        maxY = y;\n      }\n      avgX = (countX * avgX + x) / ++countX;\n    } else {\n      drawX();\n      ctx.lineTo(x, y);\n      prevX = truncX;\n      countX = 0;\n      minY = maxY = y;\n    }\n    lastY = y;\n  }\n  drawX();\n}\nfunction _getSegmentMethod(line) {\n  const opts = line.options;\n  const borderDash = opts.borderDash && opts.borderDash.length;\n  const useFastPath = !line._decimated && !line._loop && !opts.tension && opts.cubicInterpolationMode !== 'monotone' && !opts.stepped && !borderDash;\n  return useFastPath ? fastPathSegment : pathSegment;\n}\nfunction _getInterpolationMethod(options) {\n  if (options.stepped) {\n    return _steppedInterpolation;\n  }\n  if (options.tension || options.cubicInterpolationMode === 'monotone') {\n    return _bezierInterpolation;\n  }\n  return _pointInLine;\n}\nfunction strokePathWithCache(ctx, line, start, count) {\n  let path = line._path;\n  if (!path) {\n    path = line._path = new Path2D();\n    if (line.path(path, start, count)) {\n      path.closePath();\n    }\n  }\n  setStyle(ctx, line.options);\n  ctx.stroke(path);\n}\nfunction strokePathDirect(ctx, line, start, count) {\n  const {segments, options} = line;\n  const segmentMethod = _getSegmentMethod(line);\n  for (const segment of segments) {\n    setStyle(ctx, options, segment.style);\n    ctx.beginPath();\n    if (segmentMethod(ctx, line, segment, {start, end: start + count - 1})) {\n      ctx.closePath();\n    }\n    ctx.stroke();\n  }\n}\nconst usePath2D = typeof Path2D === 'function';\nfunction draw(ctx, line, start, count) {\n  if (usePath2D && !line.options.segment) {\n    strokePathWithCache(ctx, line, start, count);\n  } else {\n    strokePathDirect(ctx, line, start, count);\n  }\n}\nclass LineElement extends Element {\n  constructor(cfg) {\n    super();\n    this.animated = true;\n    this.options = undefined;\n    this._chart = undefined;\n    this._loop = undefined;\n    this._fullLoop = undefined;\n    this._path = undefined;\n    this._points = undefined;\n    this._segments = undefined;\n    this._decimated = false;\n    this._pointsUpdated = false;\n    this._datasetIndex = undefined;\n    if (cfg) {\n      Object.assign(this, cfg);\n    }\n  }\n  updateControlPoints(chartArea, indexAxis) {\n    const options = this.options;\n    if ((options.tension || options.cubicInterpolationMode === 'monotone') && !options.stepped && !this._pointsUpdated) {\n      const loop = options.spanGaps ? this._loop : this._fullLoop;\n      _updateBezierControlPoints(this._points, options, chartArea, loop, indexAxis);\n      this._pointsUpdated = true;\n    }\n  }\n  set points(points) {\n    this._points = points;\n    delete this._segments;\n    delete this._path;\n    this._pointsUpdated = false;\n  }\n  get points() {\n    return this._points;\n  }\n  get segments() {\n    return this._segments || (this._segments = _computeSegments(this, this.options.segment));\n  }\n  first() {\n    const segments = this.segments;\n    const points = this.points;\n    return segments.length && points[segments[0].start];\n  }\n  last() {\n    const segments = this.segments;\n    const points = this.points;\n    const count = segments.length;\n    return count && points[segments[count - 1].end];\n  }\n  interpolate(point, property) {\n    const options = this.options;\n    const value = point[property];\n    const points = this.points;\n    const segments = _boundSegments(this, {property, start: value, end: value});\n    if (!segments.length) {\n      return;\n    }\n    const result = [];\n    const _interpolate = _getInterpolationMethod(options);\n    let i, ilen;\n    for (i = 0, ilen = segments.length; i < ilen; ++i) {\n      const {start, end} = segments[i];\n      const p1 = points[start];\n      const p2 = points[end];\n      if (p1 === p2) {\n        result.push(p1);\n        continue;\n      }\n      const t = Math.abs((value - p1[property]) / (p2[property] - p1[property]));\n      const interpolated = _interpolate(p1, p2, t, options.stepped);\n      interpolated[property] = point[property];\n      result.push(interpolated);\n    }\n    return result.length === 1 ? result[0] : result;\n  }\n  pathSegment(ctx, segment, params) {\n    const segmentMethod = _getSegmentMethod(this);\n    return segmentMethod(ctx, this, segment, params);\n  }\n  path(ctx, start, count) {\n    const segments = this.segments;\n    const segmentMethod = _getSegmentMethod(this);\n    let loop = this._loop;\n    start = start || 0;\n    count = count || (this.points.length - start);\n    for (const segment of segments) {\n      loop &= segmentMethod(ctx, this, segment, {start, end: start + count - 1});\n    }\n    return !!loop;\n  }\n  draw(ctx, chartArea, start, count) {\n    const options = this.options || {};\n    const points = this.points || [];\n    if (points.length && options.borderWidth) {\n      ctx.save();\n      draw(ctx, this, start, count);\n      ctx.restore();\n    }\n    if (this.animated) {\n      this._pointsUpdated = false;\n      this._path = undefined;\n    }\n  }\n}\nLineElement.id = 'line';\nLineElement.defaults = {\n  borderCapStyle: 'butt',\n  borderDash: [],\n  borderDashOffset: 0,\n  borderJoinStyle: 'miter',\n  borderWidth: 3,\n  capBezierPoints: true,\n  cubicInterpolationMode: 'default',\n  fill: false,\n  spanGaps: false,\n  stepped: false,\n  tension: 0,\n};\nLineElement.defaultRoutes = {\n  backgroundColor: 'backgroundColor',\n  borderColor: 'borderColor'\n};\nLineElement.descriptors = {\n  _scriptable: true,\n  _indexable: (name) => name !== 'borderDash' && name !== 'fill',\n};\n\nfunction inRange$1(el, pos, axis, useFinalPosition) {\n  const options = el.options;\n  const {[axis]: value} = el.getProps([axis], useFinalPosition);\n  return (Math.abs(pos - value) < options.radius + options.hitRadius);\n}\nclass PointElement extends Element {\n  constructor(cfg) {\n    super();\n    this.options = undefined;\n    this.parsed = undefined;\n    this.skip = undefined;\n    this.stop = undefined;\n    if (cfg) {\n      Object.assign(this, cfg);\n    }\n  }\n  inRange(mouseX, mouseY, useFinalPosition) {\n    const options = this.options;\n    const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n    return ((Math.pow(mouseX - x, 2) + Math.pow(mouseY - y, 2)) < Math.pow(options.hitRadius + options.radius, 2));\n  }\n  inXRange(mouseX, useFinalPosition) {\n    return inRange$1(this, mouseX, 'x', useFinalPosition);\n  }\n  inYRange(mouseY, useFinalPosition) {\n    return inRange$1(this, mouseY, 'y', useFinalPosition);\n  }\n  getCenterPoint(useFinalPosition) {\n    const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n    return {x, y};\n  }\n  size(options) {\n    options = options || this.options || {};\n    let radius = options.radius || 0;\n    radius = Math.max(radius, radius && options.hoverRadius || 0);\n    const borderWidth = radius && options.borderWidth || 0;\n    return (radius + borderWidth) * 2;\n  }\n  draw(ctx, area) {\n    const options = this.options;\n    if (this.skip || options.radius < 0.1 || !_isPointInArea(this, area, this.size(options) / 2)) {\n      return;\n    }\n    ctx.strokeStyle = options.borderColor;\n    ctx.lineWidth = options.borderWidth;\n    ctx.fillStyle = options.backgroundColor;\n    drawPoint(ctx, options, this.x, this.y);\n  }\n  getRange() {\n    const options = this.options || {};\n    return options.radius + options.hitRadius;\n  }\n}\nPointElement.id = 'point';\nPointElement.defaults = {\n  borderWidth: 1,\n  hitRadius: 1,\n  hoverBorderWidth: 1,\n  hoverRadius: 4,\n  pointStyle: 'circle',\n  radius: 3,\n  rotation: 0\n};\nPointElement.defaultRoutes = {\n  backgroundColor: 'backgroundColor',\n  borderColor: 'borderColor'\n};\n\nfunction getBarBounds(bar, useFinalPosition) {\n  const {x, y, base, width, height} = bar.getProps(['x', 'y', 'base', 'width', 'height'], useFinalPosition);\n  let left, right, top, bottom, half;\n  if (bar.horizontal) {\n    half = height / 2;\n    left = Math.min(x, base);\n    right = Math.max(x, base);\n    top = y - half;\n    bottom = y + half;\n  } else {\n    half = width / 2;\n    left = x - half;\n    right = x + half;\n    top = Math.min(y, base);\n    bottom = Math.max(y, base);\n  }\n  return {left, top, right, bottom};\n}\nfunction skipOrLimit(skip, value, min, max) {\n  return skip ? 0 : _limitValue(value, min, max);\n}\nfunction parseBorderWidth(bar, maxW, maxH) {\n  const value = bar.options.borderWidth;\n  const skip = bar.borderSkipped;\n  const o = toTRBL(value);\n  return {\n    t: skipOrLimit(skip.top, o.top, 0, maxH),\n    r: skipOrLimit(skip.right, o.right, 0, maxW),\n    b: skipOrLimit(skip.bottom, o.bottom, 0, maxH),\n    l: skipOrLimit(skip.left, o.left, 0, maxW)\n  };\n}\nfunction parseBorderRadius(bar, maxW, maxH) {\n  const {enableBorderRadius} = bar.getProps(['enableBorderRadius']);\n  const value = bar.options.borderRadius;\n  const o = toTRBLCorners(value);\n  const maxR = Math.min(maxW, maxH);\n  const skip = bar.borderSkipped;\n  const enableBorder = enableBorderRadius || isObject(value);\n  return {\n    topLeft: skipOrLimit(!enableBorder || skip.top || skip.left, o.topLeft, 0, maxR),\n    topRight: skipOrLimit(!enableBorder || skip.top || skip.right, o.topRight, 0, maxR),\n    bottomLeft: skipOrLimit(!enableBorder || skip.bottom || skip.left, o.bottomLeft, 0, maxR),\n    bottomRight: skipOrLimit(!enableBorder || skip.bottom || skip.right, o.bottomRight, 0, maxR)\n  };\n}\nfunction boundingRects(bar) {\n  const bounds = getBarBounds(bar);\n  const width = bounds.right - bounds.left;\n  const height = bounds.bottom - bounds.top;\n  const border = parseBorderWidth(bar, width / 2, height / 2);\n  const radius = parseBorderRadius(bar, width / 2, height / 2);\n  return {\n    outer: {\n      x: bounds.left,\n      y: bounds.top,\n      w: width,\n      h: height,\n      radius\n    },\n    inner: {\n      x: bounds.left + border.l,\n      y: bounds.top + border.t,\n      w: width - border.l - border.r,\n      h: height - border.t - border.b,\n      radius: {\n        topLeft: Math.max(0, radius.topLeft - Math.max(border.t, border.l)),\n        topRight: Math.max(0, radius.topRight - Math.max(border.t, border.r)),\n        bottomLeft: Math.max(0, radius.bottomLeft - Math.max(border.b, border.l)),\n        bottomRight: Math.max(0, radius.bottomRight - Math.max(border.b, border.r)),\n      }\n    }\n  };\n}\nfunction inRange(bar, x, y, useFinalPosition) {\n  const skipX = x === null;\n  const skipY = y === null;\n  const skipBoth = skipX && skipY;\n  const bounds = bar && !skipBoth && getBarBounds(bar, useFinalPosition);\n  return bounds\n\t\t&& (skipX || _isBetween(x, bounds.left, bounds.right))\n\t\t&& (skipY || _isBetween(y, bounds.top, bounds.bottom));\n}\nfunction hasRadius(radius) {\n  return radius.topLeft || radius.topRight || radius.bottomLeft || radius.bottomRight;\n}\nfunction addNormalRectPath(ctx, rect) {\n  ctx.rect(rect.x, rect.y, rect.w, rect.h);\n}\nfunction inflateRect(rect, amount, refRect = {}) {\n  const x = rect.x !== refRect.x ? -amount : 0;\n  const y = rect.y !== refRect.y ? -amount : 0;\n  const w = (rect.x + rect.w !== refRect.x + refRect.w ? amount : 0) - x;\n  const h = (rect.y + rect.h !== refRect.y + refRect.h ? amount : 0) - y;\n  return {\n    x: rect.x + x,\n    y: rect.y + y,\n    w: rect.w + w,\n    h: rect.h + h,\n    radius: rect.radius\n  };\n}\nclass BarElement extends Element {\n  constructor(cfg) {\n    super();\n    this.options = undefined;\n    this.horizontal = undefined;\n    this.base = undefined;\n    this.width = undefined;\n    this.height = undefined;\n    this.inflateAmount = undefined;\n    if (cfg) {\n      Object.assign(this, cfg);\n    }\n  }\n  draw(ctx) {\n    const {inflateAmount, options: {borderColor, backgroundColor}} = this;\n    const {inner, outer} = boundingRects(this);\n    const addRectPath = hasRadius(outer.radius) ? addRoundedRectPath : addNormalRectPath;\n    ctx.save();\n    if (outer.w !== inner.w || outer.h !== inner.h) {\n      ctx.beginPath();\n      addRectPath(ctx, inflateRect(outer, inflateAmount, inner));\n      ctx.clip();\n      addRectPath(ctx, inflateRect(inner, -inflateAmount, outer));\n      ctx.fillStyle = borderColor;\n      ctx.fill('evenodd');\n    }\n    ctx.beginPath();\n    addRectPath(ctx, inflateRect(inner, inflateAmount));\n    ctx.fillStyle = backgroundColor;\n    ctx.fill();\n    ctx.restore();\n  }\n  inRange(mouseX, mouseY, useFinalPosition) {\n    return inRange(this, mouseX, mouseY, useFinalPosition);\n  }\n  inXRange(mouseX, useFinalPosition) {\n    return inRange(this, mouseX, null, useFinalPosition);\n  }\n  inYRange(mouseY, useFinalPosition) {\n    return inRange(this, null, mouseY, useFinalPosition);\n  }\n  getCenterPoint(useFinalPosition) {\n    const {x, y, base, horizontal} = this.getProps(['x', 'y', 'base', 'horizontal'], useFinalPosition);\n    return {\n      x: horizontal ? (x + base) / 2 : x,\n      y: horizontal ? y : (y + base) / 2\n    };\n  }\n  getRange(axis) {\n    return axis === 'x' ? this.width / 2 : this.height / 2;\n  }\n}\nBarElement.id = 'bar';\nBarElement.defaults = {\n  borderSkipped: 'start',\n  borderWidth: 0,\n  borderRadius: 0,\n  inflateAmount: 'auto',\n  pointStyle: undefined\n};\nBarElement.defaultRoutes = {\n  backgroundColor: 'backgroundColor',\n  borderColor: 'borderColor'\n};\n\nvar elements = /*#__PURE__*/Object.freeze({\n__proto__: null,\nArcElement: ArcElement,\nLineElement: LineElement,\nPointElement: PointElement,\nBarElement: BarElement\n});\n\nfunction lttbDecimation(data, start, count, availableWidth, options) {\n  const samples = options.samples || availableWidth;\n  if (samples >= count) {\n    return data.slice(start, start + count);\n  }\n  const decimated = [];\n  const bucketWidth = (count - 2) / (samples - 2);\n  let sampledIndex = 0;\n  const endIndex = start + count - 1;\n  let a = start;\n  let i, maxAreaPoint, maxArea, area, nextA;\n  decimated[sampledIndex++] = data[a];\n  for (i = 0; i < samples - 2; i++) {\n    let avgX = 0;\n    let avgY = 0;\n    let j;\n    const avgRangeStart = Math.floor((i + 1) * bucketWidth) + 1 + start;\n    const avgRangeEnd = Math.min(Math.floor((i + 2) * bucketWidth) + 1, count) + start;\n    const avgRangeLength = avgRangeEnd - avgRangeStart;\n    for (j = avgRangeStart; j < avgRangeEnd; j++) {\n      avgX += data[j].x;\n      avgY += data[j].y;\n    }\n    avgX /= avgRangeLength;\n    avgY /= avgRangeLength;\n    const rangeOffs = Math.floor(i * bucketWidth) + 1 + start;\n    const rangeTo = Math.min(Math.floor((i + 1) * bucketWidth) + 1, count) + start;\n    const {x: pointAx, y: pointAy} = data[a];\n    maxArea = area = -1;\n    for (j = rangeOffs; j < rangeTo; j++) {\n      area = 0.5 * Math.abs(\n        (pointAx - avgX) * (data[j].y - pointAy) -\n        (pointAx - data[j].x) * (avgY - pointAy)\n      );\n      if (area > maxArea) {\n        maxArea = area;\n        maxAreaPoint = data[j];\n        nextA = j;\n      }\n    }\n    decimated[sampledIndex++] = maxAreaPoint;\n    a = nextA;\n  }\n  decimated[sampledIndex++] = data[endIndex];\n  return decimated;\n}\nfunction minMaxDecimation(data, start, count, availableWidth) {\n  let avgX = 0;\n  let countX = 0;\n  let i, point, x, y, prevX, minIndex, maxIndex, startIndex, minY, maxY;\n  const decimated = [];\n  const endIndex = start + count - 1;\n  const xMin = data[start].x;\n  const xMax = data[endIndex].x;\n  const dx = xMax - xMin;\n  for (i = start; i < start + count; ++i) {\n    point = data[i];\n    x = (point.x - xMin) / dx * availableWidth;\n    y = point.y;\n    const truncX = x | 0;\n    if (truncX === prevX) {\n      if (y < minY) {\n        minY = y;\n        minIndex = i;\n      } else if (y > maxY) {\n        maxY = y;\n        maxIndex = i;\n      }\n      avgX = (countX * avgX + point.x) / ++countX;\n    } else {\n      const lastIndex = i - 1;\n      if (!isNullOrUndef(minIndex) && !isNullOrUndef(maxIndex)) {\n        const intermediateIndex1 = Math.min(minIndex, maxIndex);\n        const intermediateIndex2 = Math.max(minIndex, maxIndex);\n        if (intermediateIndex1 !== startIndex && intermediateIndex1 !== lastIndex) {\n          decimated.push({\n            ...data[intermediateIndex1],\n            x: avgX,\n          });\n        }\n        if (intermediateIndex2 !== startIndex && intermediateIndex2 !== lastIndex) {\n          decimated.push({\n            ...data[intermediateIndex2],\n            x: avgX\n          });\n        }\n      }\n      if (i > 0 && lastIndex !== startIndex) {\n        decimated.push(data[lastIndex]);\n      }\n      decimated.push(point);\n      prevX = truncX;\n      countX = 0;\n      minY = maxY = y;\n      minIndex = maxIndex = startIndex = i;\n    }\n  }\n  return decimated;\n}\nfunction cleanDecimatedDataset(dataset) {\n  if (dataset._decimated) {\n    const data = dataset._data;\n    delete dataset._decimated;\n    delete dataset._data;\n    Object.defineProperty(dataset, 'data', {value: data});\n  }\n}\nfunction cleanDecimatedData(chart) {\n  chart.data.datasets.forEach((dataset) => {\n    cleanDecimatedDataset(dataset);\n  });\n}\nfunction getStartAndCountOfVisiblePointsSimplified(meta, points) {\n  const pointCount = points.length;\n  let start = 0;\n  let count;\n  const {iScale} = meta;\n  const {min, max, minDefined, maxDefined} = iScale.getUserBounds();\n  if (minDefined) {\n    start = _limitValue(_lookupByKey(points, iScale.axis, min).lo, 0, pointCount - 1);\n  }\n  if (maxDefined) {\n    count = _limitValue(_lookupByKey(points, iScale.axis, max).hi + 1, start, pointCount) - start;\n  } else {\n    count = pointCount - start;\n  }\n  return {start, count};\n}\nvar plugin_decimation = {\n  id: 'decimation',\n  defaults: {\n    algorithm: 'min-max',\n    enabled: false,\n  },\n  beforeElementsUpdate: (chart, args, options) => {\n    if (!options.enabled) {\n      cleanDecimatedData(chart);\n      return;\n    }\n    const availableWidth = chart.width;\n    chart.data.datasets.forEach((dataset, datasetIndex) => {\n      const {_data, indexAxis} = dataset;\n      const meta = chart.getDatasetMeta(datasetIndex);\n      const data = _data || dataset.data;\n      if (resolve([indexAxis, chart.options.indexAxis]) === 'y') {\n        return;\n      }\n      if (!meta.controller.supportsDecimation) {\n        return;\n      }\n      const xAxis = chart.scales[meta.xAxisID];\n      if (xAxis.type !== 'linear' && xAxis.type !== 'time') {\n        return;\n      }\n      if (chart.options.parsing) {\n        return;\n      }\n      let {start, count} = getStartAndCountOfVisiblePointsSimplified(meta, data);\n      const threshold = options.threshold || 4 * availableWidth;\n      if (count <= threshold) {\n        cleanDecimatedDataset(dataset);\n        return;\n      }\n      if (isNullOrUndef(_data)) {\n        dataset._data = data;\n        delete dataset.data;\n        Object.defineProperty(dataset, 'data', {\n          configurable: true,\n          enumerable: true,\n          get: function() {\n            return this._decimated;\n          },\n          set: function(d) {\n            this._data = d;\n          }\n        });\n      }\n      let decimated;\n      switch (options.algorithm) {\n      case 'lttb':\n        decimated = lttbDecimation(data, start, count, availableWidth, options);\n        break;\n      case 'min-max':\n        decimated = minMaxDecimation(data, start, count, availableWidth);\n        break;\n      default:\n        throw new Error(`Unsupported decimation algorithm '${options.algorithm}'`);\n      }\n      dataset._decimated = decimated;\n    });\n  },\n  destroy(chart) {\n    cleanDecimatedData(chart);\n  }\n};\n\nfunction _segments(line, target, property) {\n  const segments = line.segments;\n  const points = line.points;\n  const tpoints = target.points;\n  const parts = [];\n  for (const segment of segments) {\n    let {start, end} = segment;\n    end = _findSegmentEnd(start, end, points);\n    const bounds = _getBounds(property, points[start], points[end], segment.loop);\n    if (!target.segments) {\n      parts.push({\n        source: segment,\n        target: bounds,\n        start: points[start],\n        end: points[end]\n      });\n      continue;\n    }\n    const targetSegments = _boundSegments(target, bounds);\n    for (const tgt of targetSegments) {\n      const subBounds = _getBounds(property, tpoints[tgt.start], tpoints[tgt.end], tgt.loop);\n      const fillSources = _boundSegment(segment, points, subBounds);\n      for (const fillSource of fillSources) {\n        parts.push({\n          source: fillSource,\n          target: tgt,\n          start: {\n            [property]: _getEdge(bounds, subBounds, 'start', Math.max)\n          },\n          end: {\n            [property]: _getEdge(bounds, subBounds, 'end', Math.min)\n          }\n        });\n      }\n    }\n  }\n  return parts;\n}\nfunction _getBounds(property, first, last, loop) {\n  if (loop) {\n    return;\n  }\n  let start = first[property];\n  let end = last[property];\n  if (property === 'angle') {\n    start = _normalizeAngle(start);\n    end = _normalizeAngle(end);\n  }\n  return {property, start, end};\n}\nfunction _pointsFromSegments(boundary, line) {\n  const {x = null, y = null} = boundary || {};\n  const linePoints = line.points;\n  const points = [];\n  line.segments.forEach(({start, end}) => {\n    end = _findSegmentEnd(start, end, linePoints);\n    const first = linePoints[start];\n    const last = linePoints[end];\n    if (y !== null) {\n      points.push({x: first.x, y});\n      points.push({x: last.x, y});\n    } else if (x !== null) {\n      points.push({x, y: first.y});\n      points.push({x, y: last.y});\n    }\n  });\n  return points;\n}\nfunction _findSegmentEnd(start, end, points) {\n  for (;end > start; end--) {\n    const point = points[end];\n    if (!isNaN(point.x) && !isNaN(point.y)) {\n      break;\n    }\n  }\n  return end;\n}\nfunction _getEdge(a, b, prop, fn) {\n  if (a && b) {\n    return fn(a[prop], b[prop]);\n  }\n  return a ? a[prop] : b ? b[prop] : 0;\n}\n\nfunction _createBoundaryLine(boundary, line) {\n  let points = [];\n  let _loop = false;\n  if (isArray(boundary)) {\n    _loop = true;\n    points = boundary;\n  } else {\n    points = _pointsFromSegments(boundary, line);\n  }\n  return points.length ? new LineElement({\n    points,\n    options: {tension: 0},\n    _loop,\n    _fullLoop: _loop\n  }) : null;\n}\n\nfunction _resolveTarget(sources, index, propagate) {\n  const source = sources[index];\n  let fill = source.fill;\n  const visited = [index];\n  let target;\n  if (!propagate) {\n    return fill;\n  }\n  while (fill !== false && visited.indexOf(fill) === -1) {\n    if (!isNumberFinite(fill)) {\n      return fill;\n    }\n    target = sources[fill];\n    if (!target) {\n      return false;\n    }\n    if (target.visible) {\n      return fill;\n    }\n    visited.push(fill);\n    fill = target.fill;\n  }\n  return false;\n}\nfunction _decodeFill(line, index, count) {\n  const fill = parseFillOption(line);\n  if (isObject(fill)) {\n    return isNaN(fill.value) ? false : fill;\n  }\n  let target = parseFloat(fill);\n  if (isNumberFinite(target) && Math.floor(target) === target) {\n    return decodeTargetIndex(fill[0], index, target, count);\n  }\n  return ['origin', 'start', 'end', 'stack', 'shape'].indexOf(fill) >= 0 && fill;\n}\nfunction decodeTargetIndex(firstCh, index, target, count) {\n  if (firstCh === '-' || firstCh === '+') {\n    target = index + target;\n  }\n  if (target === index || target < 0 || target >= count) {\n    return false;\n  }\n  return target;\n}\nfunction _getTargetPixel(fill, scale) {\n  let pixel = null;\n  if (fill === 'start') {\n    pixel = scale.bottom;\n  } else if (fill === 'end') {\n    pixel = scale.top;\n  } else if (isObject(fill)) {\n    pixel = scale.getPixelForValue(fill.value);\n  } else if (scale.getBasePixel) {\n    pixel = scale.getBasePixel();\n  }\n  return pixel;\n}\nfunction _getTargetValue(fill, scale, startValue) {\n  let value;\n  if (fill === 'start') {\n    value = startValue;\n  } else if (fill === 'end') {\n    value = scale.options.reverse ? scale.min : scale.max;\n  } else if (isObject(fill)) {\n    value = fill.value;\n  } else {\n    value = scale.getBaseValue();\n  }\n  return value;\n}\nfunction parseFillOption(line) {\n  const options = line.options;\n  const fillOption = options.fill;\n  let fill = valueOrDefault(fillOption && fillOption.target, fillOption);\n  if (fill === undefined) {\n    fill = !!options.backgroundColor;\n  }\n  if (fill === false || fill === null) {\n    return false;\n  }\n  if (fill === true) {\n    return 'origin';\n  }\n  return fill;\n}\n\nfunction _buildStackLine(source) {\n  const {scale, index, line} = source;\n  const points = [];\n  const segments = line.segments;\n  const sourcePoints = line.points;\n  const linesBelow = getLinesBelow(scale, index);\n  linesBelow.push(_createBoundaryLine({x: null, y: scale.bottom}, line));\n  for (let i = 0; i < segments.length; i++) {\n    const segment = segments[i];\n    for (let j = segment.start; j <= segment.end; j++) {\n      addPointsBelow(points, sourcePoints[j], linesBelow);\n    }\n  }\n  return new LineElement({points, options: {}});\n}\nfunction getLinesBelow(scale, index) {\n  const below = [];\n  const metas = scale.getMatchingVisibleMetas('line');\n  for (let i = 0; i < metas.length; i++) {\n    const meta = metas[i];\n    if (meta.index === index) {\n      break;\n    }\n    if (!meta.hidden) {\n      below.unshift(meta.dataset);\n    }\n  }\n  return below;\n}\nfunction addPointsBelow(points, sourcePoint, linesBelow) {\n  const postponed = [];\n  for (let j = 0; j < linesBelow.length; j++) {\n    const line = linesBelow[j];\n    const {first, last, point} = findPoint(line, sourcePoint, 'x');\n    if (!point || (first && last)) {\n      continue;\n    }\n    if (first) {\n      postponed.unshift(point);\n    } else {\n      points.push(point);\n      if (!last) {\n        break;\n      }\n    }\n  }\n  points.push(...postponed);\n}\nfunction findPoint(line, sourcePoint, property) {\n  const point = line.interpolate(sourcePoint, property);\n  if (!point) {\n    return {};\n  }\n  const pointValue = point[property];\n  const segments = line.segments;\n  const linePoints = line.points;\n  let first = false;\n  let last = false;\n  for (let i = 0; i < segments.length; i++) {\n    const segment = segments[i];\n    const firstValue = linePoints[segment.start][property];\n    const lastValue = linePoints[segment.end][property];\n    if (_isBetween(pointValue, firstValue, lastValue)) {\n      first = pointValue === firstValue;\n      last = pointValue === lastValue;\n      break;\n    }\n  }\n  return {first, last, point};\n}\n\nclass simpleArc {\n  constructor(opts) {\n    this.x = opts.x;\n    this.y = opts.y;\n    this.radius = opts.radius;\n  }\n  pathSegment(ctx, bounds, opts) {\n    const {x, y, radius} = this;\n    bounds = bounds || {start: 0, end: TAU};\n    ctx.arc(x, y, radius, bounds.end, bounds.start, true);\n    return !opts.bounds;\n  }\n  interpolate(point) {\n    const {x, y, radius} = this;\n    const angle = point.angle;\n    return {\n      x: x + Math.cos(angle) * radius,\n      y: y + Math.sin(angle) * radius,\n      angle\n    };\n  }\n}\n\nfunction _getTarget(source) {\n  const {chart, fill, line} = source;\n  if (isNumberFinite(fill)) {\n    return getLineByIndex(chart, fill);\n  }\n  if (fill === 'stack') {\n    return _buildStackLine(source);\n  }\n  if (fill === 'shape') {\n    return true;\n  }\n  const boundary = computeBoundary(source);\n  if (boundary instanceof simpleArc) {\n    return boundary;\n  }\n  return _createBoundaryLine(boundary, line);\n}\nfunction getLineByIndex(chart, index) {\n  const meta = chart.getDatasetMeta(index);\n  const visible = meta && chart.isDatasetVisible(index);\n  return visible ? meta.dataset : null;\n}\nfunction computeBoundary(source) {\n  const scale = source.scale || {};\n  if (scale.getPointPositionForValue) {\n    return computeCircularBoundary(source);\n  }\n  return computeLinearBoundary(source);\n}\nfunction computeLinearBoundary(source) {\n  const {scale = {}, fill} = source;\n  const pixel = _getTargetPixel(fill, scale);\n  if (isNumberFinite(pixel)) {\n    const horizontal = scale.isHorizontal();\n    return {\n      x: horizontal ? pixel : null,\n      y: horizontal ? null : pixel\n    };\n  }\n  return null;\n}\nfunction computeCircularBoundary(source) {\n  const {scale, fill} = source;\n  const options = scale.options;\n  const length = scale.getLabels().length;\n  const start = options.reverse ? scale.max : scale.min;\n  const value = _getTargetValue(fill, scale, start);\n  const target = [];\n  if (options.grid.circular) {\n    const center = scale.getPointPositionForValue(0, start);\n    return new simpleArc({\n      x: center.x,\n      y: center.y,\n      radius: scale.getDistanceFromCenterForValue(value)\n    });\n  }\n  for (let i = 0; i < length; ++i) {\n    target.push(scale.getPointPositionForValue(i, value));\n  }\n  return target;\n}\n\nfunction _drawfill(ctx, source, area) {\n  const target = _getTarget(source);\n  const {line, scale, axis} = source;\n  const lineOpts = line.options;\n  const fillOption = lineOpts.fill;\n  const color = lineOpts.backgroundColor;\n  const {above = color, below = color} = fillOption || {};\n  if (target && line.points.length) {\n    clipArea(ctx, area);\n    doFill(ctx, {line, target, above, below, area, scale, axis});\n    unclipArea(ctx);\n  }\n}\nfunction doFill(ctx, cfg) {\n  const {line, target, above, below, area, scale} = cfg;\n  const property = line._loop ? 'angle' : cfg.axis;\n  ctx.save();\n  if (property === 'x' && below !== above) {\n    clipVertical(ctx, target, area.top);\n    fill(ctx, {line, target, color: above, scale, property});\n    ctx.restore();\n    ctx.save();\n    clipVertical(ctx, target, area.bottom);\n  }\n  fill(ctx, {line, target, color: below, scale, property});\n  ctx.restore();\n}\nfunction clipVertical(ctx, target, clipY) {\n  const {segments, points} = target;\n  let first = true;\n  let lineLoop = false;\n  ctx.beginPath();\n  for (const segment of segments) {\n    const {start, end} = segment;\n    const firstPoint = points[start];\n    const lastPoint = points[_findSegmentEnd(start, end, points)];\n    if (first) {\n      ctx.moveTo(firstPoint.x, firstPoint.y);\n      first = false;\n    } else {\n      ctx.lineTo(firstPoint.x, clipY);\n      ctx.lineTo(firstPoint.x, firstPoint.y);\n    }\n    lineLoop = !!target.pathSegment(ctx, segment, {move: lineLoop});\n    if (lineLoop) {\n      ctx.closePath();\n    } else {\n      ctx.lineTo(lastPoint.x, clipY);\n    }\n  }\n  ctx.lineTo(target.first().x, clipY);\n  ctx.closePath();\n  ctx.clip();\n}\nfunction fill(ctx, cfg) {\n  const {line, target, property, color, scale} = cfg;\n  const segments = _segments(line, target, property);\n  for (const {source: src, target: tgt, start, end} of segments) {\n    const {style: {backgroundColor = color} = {}} = src;\n    const notShape = target !== true;\n    ctx.save();\n    ctx.fillStyle = backgroundColor;\n    clipBounds(ctx, scale, notShape && _getBounds(property, start, end));\n    ctx.beginPath();\n    const lineLoop = !!line.pathSegment(ctx, src);\n    let loop;\n    if (notShape) {\n      if (lineLoop) {\n        ctx.closePath();\n      } else {\n        interpolatedLineTo(ctx, target, end, property);\n      }\n      const targetLoop = !!target.pathSegment(ctx, tgt, {move: lineLoop, reverse: true});\n      loop = lineLoop && targetLoop;\n      if (!loop) {\n        interpolatedLineTo(ctx, target, start, property);\n      }\n    }\n    ctx.closePath();\n    ctx.fill(loop ? 'evenodd' : 'nonzero');\n    ctx.restore();\n  }\n}\nfunction clipBounds(ctx, scale, bounds) {\n  const {top, bottom} = scale.chart.chartArea;\n  const {property, start, end} = bounds || {};\n  if (property === 'x') {\n    ctx.beginPath();\n    ctx.rect(start, top, end - start, bottom - top);\n    ctx.clip();\n  }\n}\nfunction interpolatedLineTo(ctx, target, point, property) {\n  const interpolatedPoint = target.interpolate(point, property);\n  if (interpolatedPoint) {\n    ctx.lineTo(interpolatedPoint.x, interpolatedPoint.y);\n  }\n}\n\nvar index = {\n  id: 'filler',\n  afterDatasetsUpdate(chart, _args, options) {\n    const count = (chart.data.datasets || []).length;\n    const sources = [];\n    let meta, i, line, source;\n    for (i = 0; i < count; ++i) {\n      meta = chart.getDatasetMeta(i);\n      line = meta.dataset;\n      source = null;\n      if (line && line.options && line instanceof LineElement) {\n        source = {\n          visible: chart.isDatasetVisible(i),\n          index: i,\n          fill: _decodeFill(line, i, count),\n          chart,\n          axis: meta.controller.options.indexAxis,\n          scale: meta.vScale,\n          line,\n        };\n      }\n      meta.$filler = source;\n      sources.push(source);\n    }\n    for (i = 0; i < count; ++i) {\n      source = sources[i];\n      if (!source || source.fill === false) {\n        continue;\n      }\n      source.fill = _resolveTarget(sources, i, options.propagate);\n    }\n  },\n  beforeDraw(chart, _args, options) {\n    const draw = options.drawTime === 'beforeDraw';\n    const metasets = chart.getSortedVisibleDatasetMetas();\n    const area = chart.chartArea;\n    for (let i = metasets.length - 1; i >= 0; --i) {\n      const source = metasets[i].$filler;\n      if (!source) {\n        continue;\n      }\n      source.line.updateControlPoints(area, source.axis);\n      if (draw) {\n        _drawfill(chart.ctx, source, area);\n      }\n    }\n  },\n  beforeDatasetsDraw(chart, _args, options) {\n    if (options.drawTime !== 'beforeDatasetsDraw') {\n      return;\n    }\n    const metasets = chart.getSortedVisibleDatasetMetas();\n    for (let i = metasets.length - 1; i >= 0; --i) {\n      const source = metasets[i].$filler;\n      if (source) {\n        _drawfill(chart.ctx, source, chart.chartArea);\n      }\n    }\n  },\n  beforeDatasetDraw(chart, args, options) {\n    const source = args.meta.$filler;\n    if (!source || source.fill === false || options.drawTime !== 'beforeDatasetDraw') {\n      return;\n    }\n    _drawfill(chart.ctx, source, chart.chartArea);\n  },\n  defaults: {\n    propagate: true,\n    drawTime: 'beforeDatasetDraw'\n  }\n};\n\nconst getBoxSize = (labelOpts, fontSize) => {\n  let {boxHeight = fontSize, boxWidth = fontSize} = labelOpts;\n  if (labelOpts.usePointStyle) {\n    boxHeight = Math.min(boxHeight, fontSize);\n    boxWidth = Math.min(boxWidth, fontSize);\n  }\n  return {\n    boxWidth,\n    boxHeight,\n    itemHeight: Math.max(fontSize, boxHeight)\n  };\n};\nconst itemsEqual = (a, b) => a !== null && b !== null && a.datasetIndex === b.datasetIndex && a.index === b.index;\nclass Legend extends Element {\n  constructor(config) {\n    super();\n    this._added = false;\n    this.legendHitBoxes = [];\n    this._hoveredItem = null;\n    this.doughnutMode = false;\n    this.chart = config.chart;\n    this.options = config.options;\n    this.ctx = config.ctx;\n    this.legendItems = undefined;\n    this.columnSizes = undefined;\n    this.lineWidths = undefined;\n    this.maxHeight = undefined;\n    this.maxWidth = undefined;\n    this.top = undefined;\n    this.bottom = undefined;\n    this.left = undefined;\n    this.right = undefined;\n    this.height = undefined;\n    this.width = undefined;\n    this._margins = undefined;\n    this.position = undefined;\n    this.weight = undefined;\n    this.fullSize = undefined;\n  }\n  update(maxWidth, maxHeight, margins) {\n    this.maxWidth = maxWidth;\n    this.maxHeight = maxHeight;\n    this._margins = margins;\n    this.setDimensions();\n    this.buildLabels();\n    this.fit();\n  }\n  setDimensions() {\n    if (this.isHorizontal()) {\n      this.width = this.maxWidth;\n      this.left = this._margins.left;\n      this.right = this.width;\n    } else {\n      this.height = this.maxHeight;\n      this.top = this._margins.top;\n      this.bottom = this.height;\n    }\n  }\n  buildLabels() {\n    const labelOpts = this.options.labels || {};\n    let legendItems = callback(labelOpts.generateLabels, [this.chart], this) || [];\n    if (labelOpts.filter) {\n      legendItems = legendItems.filter((item) => labelOpts.filter(item, this.chart.data));\n    }\n    if (labelOpts.sort) {\n      legendItems = legendItems.sort((a, b) => labelOpts.sort(a, b, this.chart.data));\n    }\n    if (this.options.reverse) {\n      legendItems.reverse();\n    }\n    this.legendItems = legendItems;\n  }\n  fit() {\n    const {options, ctx} = this;\n    if (!options.display) {\n      this.width = this.height = 0;\n      return;\n    }\n    const labelOpts = options.labels;\n    const labelFont = toFont(labelOpts.font);\n    const fontSize = labelFont.size;\n    const titleHeight = this._computeTitleHeight();\n    const {boxWidth, itemHeight} = getBoxSize(labelOpts, fontSize);\n    let width, height;\n    ctx.font = labelFont.string;\n    if (this.isHorizontal()) {\n      width = this.maxWidth;\n      height = this._fitRows(titleHeight, fontSize, boxWidth, itemHeight) + 10;\n    } else {\n      height = this.maxHeight;\n      width = this._fitCols(titleHeight, fontSize, boxWidth, itemHeight) + 10;\n    }\n    this.width = Math.min(width, options.maxWidth || this.maxWidth);\n    this.height = Math.min(height, options.maxHeight || this.maxHeight);\n  }\n  _fitRows(titleHeight, fontSize, boxWidth, itemHeight) {\n    const {ctx, maxWidth, options: {labels: {padding}}} = this;\n    const hitboxes = this.legendHitBoxes = [];\n    const lineWidths = this.lineWidths = [0];\n    const lineHeight = itemHeight + padding;\n    let totalHeight = titleHeight;\n    ctx.textAlign = 'left';\n    ctx.textBaseline = 'middle';\n    let row = -1;\n    let top = -lineHeight;\n    this.legendItems.forEach((legendItem, i) => {\n      const itemWidth = boxWidth + (fontSize / 2) + ctx.measureText(legendItem.text).width;\n      if (i === 0 || lineWidths[lineWidths.length - 1] + itemWidth + 2 * padding > maxWidth) {\n        totalHeight += lineHeight;\n        lineWidths[lineWidths.length - (i > 0 ? 0 : 1)] = 0;\n        top += lineHeight;\n        row++;\n      }\n      hitboxes[i] = {left: 0, top, row, width: itemWidth, height: itemHeight};\n      lineWidths[lineWidths.length - 1] += itemWidth + padding;\n    });\n    return totalHeight;\n  }\n  _fitCols(titleHeight, fontSize, boxWidth, itemHeight) {\n    const {ctx, maxHeight, options: {labels: {padding}}} = this;\n    const hitboxes = this.legendHitBoxes = [];\n    const columnSizes = this.columnSizes = [];\n    const heightLimit = maxHeight - titleHeight;\n    let totalWidth = padding;\n    let currentColWidth = 0;\n    let currentColHeight = 0;\n    let left = 0;\n    let col = 0;\n    this.legendItems.forEach((legendItem, i) => {\n      const itemWidth = boxWidth + (fontSize / 2) + ctx.measureText(legendItem.text).width;\n      if (i > 0 && currentColHeight + itemHeight + 2 * padding > heightLimit) {\n        totalWidth += currentColWidth + padding;\n        columnSizes.push({width: currentColWidth, height: currentColHeight});\n        left += currentColWidth + padding;\n        col++;\n        currentColWidth = currentColHeight = 0;\n      }\n      hitboxes[i] = {left, top: currentColHeight, col, width: itemWidth, height: itemHeight};\n      currentColWidth = Math.max(currentColWidth, itemWidth);\n      currentColHeight += itemHeight + padding;\n    });\n    totalWidth += currentColWidth;\n    columnSizes.push({width: currentColWidth, height: currentColHeight});\n    return totalWidth;\n  }\n  adjustHitBoxes() {\n    if (!this.options.display) {\n      return;\n    }\n    const titleHeight = this._computeTitleHeight();\n    const {legendHitBoxes: hitboxes, options: {align, labels: {padding}, rtl}} = this;\n    const rtlHelper = getRtlAdapter(rtl, this.left, this.width);\n    if (this.isHorizontal()) {\n      let row = 0;\n      let left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n      for (const hitbox of hitboxes) {\n        if (row !== hitbox.row) {\n          row = hitbox.row;\n          left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n        }\n        hitbox.top += this.top + titleHeight + padding;\n        hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(left), hitbox.width);\n        left += hitbox.width + padding;\n      }\n    } else {\n      let col = 0;\n      let top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n      for (const hitbox of hitboxes) {\n        if (hitbox.col !== col) {\n          col = hitbox.col;\n          top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n        }\n        hitbox.top = top;\n        hitbox.left += this.left + padding;\n        hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(hitbox.left), hitbox.width);\n        top += hitbox.height + padding;\n      }\n    }\n  }\n  isHorizontal() {\n    return this.options.position === 'top' || this.options.position === 'bottom';\n  }\n  draw() {\n    if (this.options.display) {\n      const ctx = this.ctx;\n      clipArea(ctx, this);\n      this._draw();\n      unclipArea(ctx);\n    }\n  }\n  _draw() {\n    const {options: opts, columnSizes, lineWidths, ctx} = this;\n    const {align, labels: labelOpts} = opts;\n    const defaultColor = defaults.color;\n    const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n    const labelFont = toFont(labelOpts.font);\n    const {color: fontColor, padding} = labelOpts;\n    const fontSize = labelFont.size;\n    const halfFontSize = fontSize / 2;\n    let cursor;\n    this.drawTitle();\n    ctx.textAlign = rtlHelper.textAlign('left');\n    ctx.textBaseline = 'middle';\n    ctx.lineWidth = 0.5;\n    ctx.font = labelFont.string;\n    const {boxWidth, boxHeight, itemHeight} = getBoxSize(labelOpts, fontSize);\n    const drawLegendBox = function(x, y, legendItem) {\n      if (isNaN(boxWidth) || boxWidth <= 0 || isNaN(boxHeight) || boxHeight < 0) {\n        return;\n      }\n      ctx.save();\n      const lineWidth = valueOrDefault(legendItem.lineWidth, 1);\n      ctx.fillStyle = valueOrDefault(legendItem.fillStyle, defaultColor);\n      ctx.lineCap = valueOrDefault(legendItem.lineCap, 'butt');\n      ctx.lineDashOffset = valueOrDefault(legendItem.lineDashOffset, 0);\n      ctx.lineJoin = valueOrDefault(legendItem.lineJoin, 'miter');\n      ctx.lineWidth = lineWidth;\n      ctx.strokeStyle = valueOrDefault(legendItem.strokeStyle, defaultColor);\n      ctx.setLineDash(valueOrDefault(legendItem.lineDash, []));\n      if (labelOpts.usePointStyle) {\n        const drawOptions = {\n          radius: boxWidth * Math.SQRT2 / 2,\n          pointStyle: legendItem.pointStyle,\n          rotation: legendItem.rotation,\n          borderWidth: lineWidth\n        };\n        const centerX = rtlHelper.xPlus(x, boxWidth / 2);\n        const centerY = y + halfFontSize;\n        drawPoint(ctx, drawOptions, centerX, centerY);\n      } else {\n        const yBoxTop = y + Math.max((fontSize - boxHeight) / 2, 0);\n        const xBoxLeft = rtlHelper.leftForLtr(x, boxWidth);\n        const borderRadius = toTRBLCorners(legendItem.borderRadius);\n        ctx.beginPath();\n        if (Object.values(borderRadius).some(v => v !== 0)) {\n          addRoundedRectPath(ctx, {\n            x: xBoxLeft,\n            y: yBoxTop,\n            w: boxWidth,\n            h: boxHeight,\n            radius: borderRadius,\n          });\n        } else {\n          ctx.rect(xBoxLeft, yBoxTop, boxWidth, boxHeight);\n        }\n        ctx.fill();\n        if (lineWidth !== 0) {\n          ctx.stroke();\n        }\n      }\n      ctx.restore();\n    };\n    const fillText = function(x, y, legendItem) {\n      renderText(ctx, legendItem.text, x, y + (itemHeight / 2), labelFont, {\n        strikethrough: legendItem.hidden,\n        textAlign: rtlHelper.textAlign(legendItem.textAlign)\n      });\n    };\n    const isHorizontal = this.isHorizontal();\n    const titleHeight = this._computeTitleHeight();\n    if (isHorizontal) {\n      cursor = {\n        x: _alignStartEnd(align, this.left + padding, this.right - lineWidths[0]),\n        y: this.top + padding + titleHeight,\n        line: 0\n      };\n    } else {\n      cursor = {\n        x: this.left + padding,\n        y: _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[0].height),\n        line: 0\n      };\n    }\n    overrideTextDirection(this.ctx, opts.textDirection);\n    const lineHeight = itemHeight + padding;\n    this.legendItems.forEach((legendItem, i) => {\n      ctx.strokeStyle = legendItem.fontColor || fontColor;\n      ctx.fillStyle = legendItem.fontColor || fontColor;\n      const textWidth = ctx.measureText(legendItem.text).width;\n      const textAlign = rtlHelper.textAlign(legendItem.textAlign || (legendItem.textAlign = labelOpts.textAlign));\n      const width = boxWidth + halfFontSize + textWidth;\n      let x = cursor.x;\n      let y = cursor.y;\n      rtlHelper.setWidth(this.width);\n      if (isHorizontal) {\n        if (i > 0 && x + width + padding > this.right) {\n          y = cursor.y += lineHeight;\n          cursor.line++;\n          x = cursor.x = _alignStartEnd(align, this.left + padding, this.right - lineWidths[cursor.line]);\n        }\n      } else if (i > 0 && y + lineHeight > this.bottom) {\n        x = cursor.x = x + columnSizes[cursor.line].width + padding;\n        cursor.line++;\n        y = cursor.y = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[cursor.line].height);\n      }\n      const realX = rtlHelper.x(x);\n      drawLegendBox(realX, y, legendItem);\n      x = _textX(textAlign, x + boxWidth + halfFontSize, isHorizontal ? x + width : this.right, opts.rtl);\n      fillText(rtlHelper.x(x), y, legendItem);\n      if (isHorizontal) {\n        cursor.x += width + padding;\n      } else {\n        cursor.y += lineHeight;\n      }\n    });\n    restoreTextDirection(this.ctx, opts.textDirection);\n  }\n  drawTitle() {\n    const opts = this.options;\n    const titleOpts = opts.title;\n    const titleFont = toFont(titleOpts.font);\n    const titlePadding = toPadding(titleOpts.padding);\n    if (!titleOpts.display) {\n      return;\n    }\n    const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n    const ctx = this.ctx;\n    const position = titleOpts.position;\n    const halfFontSize = titleFont.size / 2;\n    const topPaddingPlusHalfFontSize = titlePadding.top + halfFontSize;\n    let y;\n    let left = this.left;\n    let maxWidth = this.width;\n    if (this.isHorizontal()) {\n      maxWidth = Math.max(...this.lineWidths);\n      y = this.top + topPaddingPlusHalfFontSize;\n      left = _alignStartEnd(opts.align, left, this.right - maxWidth);\n    } else {\n      const maxHeight = this.columnSizes.reduce((acc, size) => Math.max(acc, size.height), 0);\n      y = topPaddingPlusHalfFontSize + _alignStartEnd(opts.align, this.top, this.bottom - maxHeight - opts.labels.padding - this._computeTitleHeight());\n    }\n    const x = _alignStartEnd(position, left, left + maxWidth);\n    ctx.textAlign = rtlHelper.textAlign(_toLeftRightCenter(position));\n    ctx.textBaseline = 'middle';\n    ctx.strokeStyle = titleOpts.color;\n    ctx.fillStyle = titleOpts.color;\n    ctx.font = titleFont.string;\n    renderText(ctx, titleOpts.text, x, y, titleFont);\n  }\n  _computeTitleHeight() {\n    const titleOpts = this.options.title;\n    const titleFont = toFont(titleOpts.font);\n    const titlePadding = toPadding(titleOpts.padding);\n    return titleOpts.display ? titleFont.lineHeight + titlePadding.height : 0;\n  }\n  _getLegendItemAt(x, y) {\n    let i, hitBox, lh;\n    if (_isBetween(x, this.left, this.right)\n      && _isBetween(y, this.top, this.bottom)) {\n      lh = this.legendHitBoxes;\n      for (i = 0; i < lh.length; ++i) {\n        hitBox = lh[i];\n        if (_isBetween(x, hitBox.left, hitBox.left + hitBox.width)\n          && _isBetween(y, hitBox.top, hitBox.top + hitBox.height)) {\n          return this.legendItems[i];\n        }\n      }\n    }\n    return null;\n  }\n  handleEvent(e) {\n    const opts = this.options;\n    if (!isListened(e.type, opts)) {\n      return;\n    }\n    const hoveredItem = this._getLegendItemAt(e.x, e.y);\n    if (e.type === 'mousemove' || e.type === 'mouseout') {\n      const previous = this._hoveredItem;\n      const sameItem = itemsEqual(previous, hoveredItem);\n      if (previous && !sameItem) {\n        callback(opts.onLeave, [e, previous, this], this);\n      }\n      this._hoveredItem = hoveredItem;\n      if (hoveredItem && !sameItem) {\n        callback(opts.onHover, [e, hoveredItem, this], this);\n      }\n    } else if (hoveredItem) {\n      callback(opts.onClick, [e, hoveredItem, this], this);\n    }\n  }\n}\nfunction isListened(type, opts) {\n  if ((type === 'mousemove' || type === 'mouseout') && (opts.onHover || opts.onLeave)) {\n    return true;\n  }\n  if (opts.onClick && (type === 'click' || type === 'mouseup')) {\n    return true;\n  }\n  return false;\n}\nvar plugin_legend = {\n  id: 'legend',\n  _element: Legend,\n  start(chart, _args, options) {\n    const legend = chart.legend = new Legend({ctx: chart.ctx, options, chart});\n    layouts.configure(chart, legend, options);\n    layouts.addBox(chart, legend);\n  },\n  stop(chart) {\n    layouts.removeBox(chart, chart.legend);\n    delete chart.legend;\n  },\n  beforeUpdate(chart, _args, options) {\n    const legend = chart.legend;\n    layouts.configure(chart, legend, options);\n    legend.options = options;\n  },\n  afterUpdate(chart) {\n    const legend = chart.legend;\n    legend.buildLabels();\n    legend.adjustHitBoxes();\n  },\n  afterEvent(chart, args) {\n    if (!args.replay) {\n      chart.legend.handleEvent(args.event);\n    }\n  },\n  defaults: {\n    display: true,\n    position: 'top',\n    align: 'center',\n    fullSize: true,\n    reverse: false,\n    weight: 1000,\n    onClick(e, legendItem, legend) {\n      const index = legendItem.datasetIndex;\n      const ci = legend.chart;\n      if (ci.isDatasetVisible(index)) {\n        ci.hide(index);\n        legendItem.hidden = true;\n      } else {\n        ci.show(index);\n        legendItem.hidden = false;\n      }\n    },\n    onHover: null,\n    onLeave: null,\n    labels: {\n      color: (ctx) => ctx.chart.options.color,\n      boxWidth: 40,\n      padding: 10,\n      generateLabels(chart) {\n        const datasets = chart.data.datasets;\n        const {labels: {usePointStyle, pointStyle, textAlign, color}} = chart.legend.options;\n        return chart._getSortedDatasetMetas().map((meta) => {\n          const style = meta.controller.getStyle(usePointStyle ? 0 : undefined);\n          const borderWidth = toPadding(style.borderWidth);\n          return {\n            text: datasets[meta.index].label,\n            fillStyle: style.backgroundColor,\n            fontColor: color,\n            hidden: !meta.visible,\n            lineCap: style.borderCapStyle,\n            lineDash: style.borderDash,\n            lineDashOffset: style.borderDashOffset,\n            lineJoin: style.borderJoinStyle,\n            lineWidth: (borderWidth.width + borderWidth.height) / 4,\n            strokeStyle: style.borderColor,\n            pointStyle: pointStyle || style.pointStyle,\n            rotation: style.rotation,\n            textAlign: textAlign || style.textAlign,\n            borderRadius: 0,\n            datasetIndex: meta.index\n          };\n        }, this);\n      }\n    },\n    title: {\n      color: (ctx) => ctx.chart.options.color,\n      display: false,\n      position: 'center',\n      text: '',\n    }\n  },\n  descriptors: {\n    _scriptable: (name) => !name.startsWith('on'),\n    labels: {\n      _scriptable: (name) => !['generateLabels', 'filter', 'sort'].includes(name),\n    }\n  },\n};\n\nclass Title extends Element {\n  constructor(config) {\n    super();\n    this.chart = config.chart;\n    this.options = config.options;\n    this.ctx = config.ctx;\n    this._padding = undefined;\n    this.top = undefined;\n    this.bottom = undefined;\n    this.left = undefined;\n    this.right = undefined;\n    this.width = undefined;\n    this.height = undefined;\n    this.position = undefined;\n    this.weight = undefined;\n    this.fullSize = undefined;\n  }\n  update(maxWidth, maxHeight) {\n    const opts = this.options;\n    this.left = 0;\n    this.top = 0;\n    if (!opts.display) {\n      this.width = this.height = this.right = this.bottom = 0;\n      return;\n    }\n    this.width = this.right = maxWidth;\n    this.height = this.bottom = maxHeight;\n    const lineCount = isArray(opts.text) ? opts.text.length : 1;\n    this._padding = toPadding(opts.padding);\n    const textSize = lineCount * toFont(opts.font).lineHeight + this._padding.height;\n    if (this.isHorizontal()) {\n      this.height = textSize;\n    } else {\n      this.width = textSize;\n    }\n  }\n  isHorizontal() {\n    const pos = this.options.position;\n    return pos === 'top' || pos === 'bottom';\n  }\n  _drawArgs(offset) {\n    const {top, left, bottom, right, options} = this;\n    const align = options.align;\n    let rotation = 0;\n    let maxWidth, titleX, titleY;\n    if (this.isHorizontal()) {\n      titleX = _alignStartEnd(align, left, right);\n      titleY = top + offset;\n      maxWidth = right - left;\n    } else {\n      if (options.position === 'left') {\n        titleX = left + offset;\n        titleY = _alignStartEnd(align, bottom, top);\n        rotation = PI * -0.5;\n      } else {\n        titleX = right - offset;\n        titleY = _alignStartEnd(align, top, bottom);\n        rotation = PI * 0.5;\n      }\n      maxWidth = bottom - top;\n    }\n    return {titleX, titleY, maxWidth, rotation};\n  }\n  draw() {\n    const ctx = this.ctx;\n    const opts = this.options;\n    if (!opts.display) {\n      return;\n    }\n    const fontOpts = toFont(opts.font);\n    const lineHeight = fontOpts.lineHeight;\n    const offset = lineHeight / 2 + this._padding.top;\n    const {titleX, titleY, maxWidth, rotation} = this._drawArgs(offset);\n    renderText(ctx, opts.text, 0, 0, fontOpts, {\n      color: opts.color,\n      maxWidth,\n      rotation,\n      textAlign: _toLeftRightCenter(opts.align),\n      textBaseline: 'middle',\n      translation: [titleX, titleY],\n    });\n  }\n}\nfunction createTitle(chart, titleOpts) {\n  const title = new Title({\n    ctx: chart.ctx,\n    options: titleOpts,\n    chart\n  });\n  layouts.configure(chart, title, titleOpts);\n  layouts.addBox(chart, title);\n  chart.titleBlock = title;\n}\nvar plugin_title = {\n  id: 'title',\n  _element: Title,\n  start(chart, _args, options) {\n    createTitle(chart, options);\n  },\n  stop(chart) {\n    const titleBlock = chart.titleBlock;\n    layouts.removeBox(chart, titleBlock);\n    delete chart.titleBlock;\n  },\n  beforeUpdate(chart, _args, options) {\n    const title = chart.titleBlock;\n    layouts.configure(chart, title, options);\n    title.options = options;\n  },\n  defaults: {\n    align: 'center',\n    display: false,\n    font: {\n      weight: 'bold',\n    },\n    fullSize: true,\n    padding: 10,\n    position: 'top',\n    text: '',\n    weight: 2000\n  },\n  defaultRoutes: {\n    color: 'color'\n  },\n  descriptors: {\n    _scriptable: true,\n    _indexable: false,\n  },\n};\n\nconst map = new WeakMap();\nvar plugin_subtitle = {\n  id: 'subtitle',\n  start(chart, _args, options) {\n    const title = new Title({\n      ctx: chart.ctx,\n      options,\n      chart\n    });\n    layouts.configure(chart, title, options);\n    layouts.addBox(chart, title);\n    map.set(chart, title);\n  },\n  stop(chart) {\n    layouts.removeBox(chart, map.get(chart));\n    map.delete(chart);\n  },\n  beforeUpdate(chart, _args, options) {\n    const title = map.get(chart);\n    layouts.configure(chart, title, options);\n    title.options = options;\n  },\n  defaults: {\n    align: 'center',\n    display: false,\n    font: {\n      weight: 'normal',\n    },\n    fullSize: true,\n    padding: 0,\n    position: 'top',\n    text: '',\n    weight: 1500\n  },\n  defaultRoutes: {\n    color: 'color'\n  },\n  descriptors: {\n    _scriptable: true,\n    _indexable: false,\n  },\n};\n\nconst positioners = {\n  average(items) {\n    if (!items.length) {\n      return false;\n    }\n    let i, len;\n    let x = 0;\n    let y = 0;\n    let count = 0;\n    for (i = 0, len = items.length; i < len; ++i) {\n      const el = items[i].element;\n      if (el && el.hasValue()) {\n        const pos = el.tooltipPosition();\n        x += pos.x;\n        y += pos.y;\n        ++count;\n      }\n    }\n    return {\n      x: x / count,\n      y: y / count\n    };\n  },\n  nearest(items, eventPosition) {\n    if (!items.length) {\n      return false;\n    }\n    let x = eventPosition.x;\n    let y = eventPosition.y;\n    let minDistance = Number.POSITIVE_INFINITY;\n    let i, len, nearestElement;\n    for (i = 0, len = items.length; i < len; ++i) {\n      const el = items[i].element;\n      if (el && el.hasValue()) {\n        const center = el.getCenterPoint();\n        const d = distanceBetweenPoints(eventPosition, center);\n        if (d < minDistance) {\n          minDistance = d;\n          nearestElement = el;\n        }\n      }\n    }\n    if (nearestElement) {\n      const tp = nearestElement.tooltipPosition();\n      x = tp.x;\n      y = tp.y;\n    }\n    return {\n      x,\n      y\n    };\n  }\n};\nfunction pushOrConcat(base, toPush) {\n  if (toPush) {\n    if (isArray(toPush)) {\n      Array.prototype.push.apply(base, toPush);\n    } else {\n      base.push(toPush);\n    }\n  }\n  return base;\n}\nfunction splitNewlines(str) {\n  if ((typeof str === 'string' || str instanceof String) && str.indexOf('\\n') > -1) {\n    return str.split('\\n');\n  }\n  return str;\n}\nfunction createTooltipItem(chart, item) {\n  const {element, datasetIndex, index} = item;\n  const controller = chart.getDatasetMeta(datasetIndex).controller;\n  const {label, value} = controller.getLabelAndValue(index);\n  return {\n    chart,\n    label,\n    parsed: controller.getParsed(index),\n    raw: chart.data.datasets[datasetIndex].data[index],\n    formattedValue: value,\n    dataset: controller.getDataset(),\n    dataIndex: index,\n    datasetIndex,\n    element\n  };\n}\nfunction getTooltipSize(tooltip, options) {\n  const ctx = tooltip.chart.ctx;\n  const {body, footer, title} = tooltip;\n  const {boxWidth, boxHeight} = options;\n  const bodyFont = toFont(options.bodyFont);\n  const titleFont = toFont(options.titleFont);\n  const footerFont = toFont(options.footerFont);\n  const titleLineCount = title.length;\n  const footerLineCount = footer.length;\n  const bodyLineItemCount = body.length;\n  const padding = toPadding(options.padding);\n  let height = padding.height;\n  let width = 0;\n  let combinedBodyLength = body.reduce((count, bodyItem) => count + bodyItem.before.length + bodyItem.lines.length + bodyItem.after.length, 0);\n  combinedBodyLength += tooltip.beforeBody.length + tooltip.afterBody.length;\n  if (titleLineCount) {\n    height += titleLineCount * titleFont.lineHeight\n\t\t\t+ (titleLineCount - 1) * options.titleSpacing\n\t\t\t+ options.titleMarginBottom;\n  }\n  if (combinedBodyLength) {\n    const bodyLineHeight = options.displayColors ? Math.max(boxHeight, bodyFont.lineHeight) : bodyFont.lineHeight;\n    height += bodyLineItemCount * bodyLineHeight\n\t\t\t+ (combinedBodyLength - bodyLineItemCount) * bodyFont.lineHeight\n\t\t\t+ (combinedBodyLength - 1) * options.bodySpacing;\n  }\n  if (footerLineCount) {\n    height += options.footerMarginTop\n\t\t\t+ footerLineCount * footerFont.lineHeight\n\t\t\t+ (footerLineCount - 1) * options.footerSpacing;\n  }\n  let widthPadding = 0;\n  const maxLineWidth = function(line) {\n    width = Math.max(width, ctx.measureText(line).width + widthPadding);\n  };\n  ctx.save();\n  ctx.font = titleFont.string;\n  each(tooltip.title, maxLineWidth);\n  ctx.font = bodyFont.string;\n  each(tooltip.beforeBody.concat(tooltip.afterBody), maxLineWidth);\n  widthPadding = options.displayColors ? (boxWidth + 2 + options.boxPadding) : 0;\n  each(body, (bodyItem) => {\n    each(bodyItem.before, maxLineWidth);\n    each(bodyItem.lines, maxLineWidth);\n    each(bodyItem.after, maxLineWidth);\n  });\n  widthPadding = 0;\n  ctx.font = footerFont.string;\n  each(tooltip.footer, maxLineWidth);\n  ctx.restore();\n  width += padding.width;\n  return {width, height};\n}\nfunction determineYAlign(chart, size) {\n  const {y, height} = size;\n  if (y < height / 2) {\n    return 'top';\n  } else if (y > (chart.height - height / 2)) {\n    return 'bottom';\n  }\n  return 'center';\n}\nfunction doesNotFitWithAlign(xAlign, chart, options, size) {\n  const {x, width} = size;\n  const caret = options.caretSize + options.caretPadding;\n  if (xAlign === 'left' && x + width + caret > chart.width) {\n    return true;\n  }\n  if (xAlign === 'right' && x - width - caret < 0) {\n    return true;\n  }\n}\nfunction determineXAlign(chart, options, size, yAlign) {\n  const {x, width} = size;\n  const {width: chartWidth, chartArea: {left, right}} = chart;\n  let xAlign = 'center';\n  if (yAlign === 'center') {\n    xAlign = x <= (left + right) / 2 ? 'left' : 'right';\n  } else if (x <= width / 2) {\n    xAlign = 'left';\n  } else if (x >= chartWidth - width / 2) {\n    xAlign = 'right';\n  }\n  if (doesNotFitWithAlign(xAlign, chart, options, size)) {\n    xAlign = 'center';\n  }\n  return xAlign;\n}\nfunction determineAlignment(chart, options, size) {\n  const yAlign = size.yAlign || options.yAlign || determineYAlign(chart, size);\n  return {\n    xAlign: size.xAlign || options.xAlign || determineXAlign(chart, options, size, yAlign),\n    yAlign\n  };\n}\nfunction alignX(size, xAlign) {\n  let {x, width} = size;\n  if (xAlign === 'right') {\n    x -= width;\n  } else if (xAlign === 'center') {\n    x -= (width / 2);\n  }\n  return x;\n}\nfunction alignY(size, yAlign, paddingAndSize) {\n  let {y, height} = size;\n  if (yAlign === 'top') {\n    y += paddingAndSize;\n  } else if (yAlign === 'bottom') {\n    y -= height + paddingAndSize;\n  } else {\n    y -= (height / 2);\n  }\n  return y;\n}\nfunction getBackgroundPoint(options, size, alignment, chart) {\n  const {caretSize, caretPadding, cornerRadius} = options;\n  const {xAlign, yAlign} = alignment;\n  const paddingAndSize = caretSize + caretPadding;\n  const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(cornerRadius);\n  let x = alignX(size, xAlign);\n  const y = alignY(size, yAlign, paddingAndSize);\n  if (yAlign === 'center') {\n    if (xAlign === 'left') {\n      x += paddingAndSize;\n    } else if (xAlign === 'right') {\n      x -= paddingAndSize;\n    }\n  } else if (xAlign === 'left') {\n    x -= Math.max(topLeft, bottomLeft) + caretSize;\n  } else if (xAlign === 'right') {\n    x += Math.max(topRight, bottomRight) + caretSize;\n  }\n  return {\n    x: _limitValue(x, 0, chart.width - size.width),\n    y: _limitValue(y, 0, chart.height - size.height)\n  };\n}\nfunction getAlignedX(tooltip, align, options) {\n  const padding = toPadding(options.padding);\n  return align === 'center'\n    ? tooltip.x + tooltip.width / 2\n    : align === 'right'\n      ? tooltip.x + tooltip.width - padding.right\n      : tooltip.x + padding.left;\n}\nfunction getBeforeAfterBodyLines(callback) {\n  return pushOrConcat([], splitNewlines(callback));\n}\nfunction createTooltipContext(parent, tooltip, tooltipItems) {\n  return createContext(parent, {\n    tooltip,\n    tooltipItems,\n    type: 'tooltip'\n  });\n}\nfunction overrideCallbacks(callbacks, context) {\n  const override = context && context.dataset && context.dataset.tooltip && context.dataset.tooltip.callbacks;\n  return override ? callbacks.override(override) : callbacks;\n}\nclass Tooltip extends Element {\n  constructor(config) {\n    super();\n    this.opacity = 0;\n    this._active = [];\n    this._eventPosition = undefined;\n    this._size = undefined;\n    this._cachedAnimations = undefined;\n    this._tooltipItems = [];\n    this.$animations = undefined;\n    this.$context = undefined;\n    this.chart = config.chart || config._chart;\n    this._chart = this.chart;\n    this.options = config.options;\n    this.dataPoints = undefined;\n    this.title = undefined;\n    this.beforeBody = undefined;\n    this.body = undefined;\n    this.afterBody = undefined;\n    this.footer = undefined;\n    this.xAlign = undefined;\n    this.yAlign = undefined;\n    this.x = undefined;\n    this.y = undefined;\n    this.height = undefined;\n    this.width = undefined;\n    this.caretX = undefined;\n    this.caretY = undefined;\n    this.labelColors = undefined;\n    this.labelPointStyles = undefined;\n    this.labelTextColors = undefined;\n  }\n  initialize(options) {\n    this.options = options;\n    this._cachedAnimations = undefined;\n    this.$context = undefined;\n  }\n  _resolveAnimations() {\n    const cached = this._cachedAnimations;\n    if (cached) {\n      return cached;\n    }\n    const chart = this.chart;\n    const options = this.options.setContext(this.getContext());\n    const opts = options.enabled && chart.options.animation && options.animations;\n    const animations = new Animations(this.chart, opts);\n    if (opts._cacheable) {\n      this._cachedAnimations = Object.freeze(animations);\n    }\n    return animations;\n  }\n  getContext() {\n    return this.$context ||\n\t\t\t(this.$context = createTooltipContext(this.chart.getContext(), this, this._tooltipItems));\n  }\n  getTitle(context, options) {\n    const {callbacks} = options;\n    const beforeTitle = callbacks.beforeTitle.apply(this, [context]);\n    const title = callbacks.title.apply(this, [context]);\n    const afterTitle = callbacks.afterTitle.apply(this, [context]);\n    let lines = [];\n    lines = pushOrConcat(lines, splitNewlines(beforeTitle));\n    lines = pushOrConcat(lines, splitNewlines(title));\n    lines = pushOrConcat(lines, splitNewlines(afterTitle));\n    return lines;\n  }\n  getBeforeBody(tooltipItems, options) {\n    return getBeforeAfterBodyLines(options.callbacks.beforeBody.apply(this, [tooltipItems]));\n  }\n  getBody(tooltipItems, options) {\n    const {callbacks} = options;\n    const bodyItems = [];\n    each(tooltipItems, (context) => {\n      const bodyItem = {\n        before: [],\n        lines: [],\n        after: []\n      };\n      const scoped = overrideCallbacks(callbacks, context);\n      pushOrConcat(bodyItem.before, splitNewlines(scoped.beforeLabel.call(this, context)));\n      pushOrConcat(bodyItem.lines, scoped.label.call(this, context));\n      pushOrConcat(bodyItem.after, splitNewlines(scoped.afterLabel.call(this, context)));\n      bodyItems.push(bodyItem);\n    });\n    return bodyItems;\n  }\n  getAfterBody(tooltipItems, options) {\n    return getBeforeAfterBodyLines(options.callbacks.afterBody.apply(this, [tooltipItems]));\n  }\n  getFooter(tooltipItems, options) {\n    const {callbacks} = options;\n    const beforeFooter = callbacks.beforeFooter.apply(this, [tooltipItems]);\n    const footer = callbacks.footer.apply(this, [tooltipItems]);\n    const afterFooter = callbacks.afterFooter.apply(this, [tooltipItems]);\n    let lines = [];\n    lines = pushOrConcat(lines, splitNewlines(beforeFooter));\n    lines = pushOrConcat(lines, splitNewlines(footer));\n    lines = pushOrConcat(lines, splitNewlines(afterFooter));\n    return lines;\n  }\n  _createItems(options) {\n    const active = this._active;\n    const data = this.chart.data;\n    const labelColors = [];\n    const labelPointStyles = [];\n    const labelTextColors = [];\n    let tooltipItems = [];\n    let i, len;\n    for (i = 0, len = active.length; i < len; ++i) {\n      tooltipItems.push(createTooltipItem(this.chart, active[i]));\n    }\n    if (options.filter) {\n      tooltipItems = tooltipItems.filter((element, index, array) => options.filter(element, index, array, data));\n    }\n    if (options.itemSort) {\n      tooltipItems = tooltipItems.sort((a, b) => options.itemSort(a, b, data));\n    }\n    each(tooltipItems, (context) => {\n      const scoped = overrideCallbacks(options.callbacks, context);\n      labelColors.push(scoped.labelColor.call(this, context));\n      labelPointStyles.push(scoped.labelPointStyle.call(this, context));\n      labelTextColors.push(scoped.labelTextColor.call(this, context));\n    });\n    this.labelColors = labelColors;\n    this.labelPointStyles = labelPointStyles;\n    this.labelTextColors = labelTextColors;\n    this.dataPoints = tooltipItems;\n    return tooltipItems;\n  }\n  update(changed, replay) {\n    const options = this.options.setContext(this.getContext());\n    const active = this._active;\n    let properties;\n    let tooltipItems = [];\n    if (!active.length) {\n      if (this.opacity !== 0) {\n        properties = {\n          opacity: 0\n        };\n      }\n    } else {\n      const position = positioners[options.position].call(this, active, this._eventPosition);\n      tooltipItems = this._createItems(options);\n      this.title = this.getTitle(tooltipItems, options);\n      this.beforeBody = this.getBeforeBody(tooltipItems, options);\n      this.body = this.getBody(tooltipItems, options);\n      this.afterBody = this.getAfterBody(tooltipItems, options);\n      this.footer = this.getFooter(tooltipItems, options);\n      const size = this._size = getTooltipSize(this, options);\n      const positionAndSize = Object.assign({}, position, size);\n      const alignment = determineAlignment(this.chart, options, positionAndSize);\n      const backgroundPoint = getBackgroundPoint(options, positionAndSize, alignment, this.chart);\n      this.xAlign = alignment.xAlign;\n      this.yAlign = alignment.yAlign;\n      properties = {\n        opacity: 1,\n        x: backgroundPoint.x,\n        y: backgroundPoint.y,\n        width: size.width,\n        height: size.height,\n        caretX: position.x,\n        caretY: position.y\n      };\n    }\n    this._tooltipItems = tooltipItems;\n    this.$context = undefined;\n    if (properties) {\n      this._resolveAnimations().update(this, properties);\n    }\n    if (changed && options.external) {\n      options.external.call(this, {chart: this.chart, tooltip: this, replay});\n    }\n  }\n  drawCaret(tooltipPoint, ctx, size, options) {\n    const caretPosition = this.getCaretPosition(tooltipPoint, size, options);\n    ctx.lineTo(caretPosition.x1, caretPosition.y1);\n    ctx.lineTo(caretPosition.x2, caretPosition.y2);\n    ctx.lineTo(caretPosition.x3, caretPosition.y3);\n  }\n  getCaretPosition(tooltipPoint, size, options) {\n    const {xAlign, yAlign} = this;\n    const {caretSize, cornerRadius} = options;\n    const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(cornerRadius);\n    const {x: ptX, y: ptY} = tooltipPoint;\n    const {width, height} = size;\n    let x1, x2, x3, y1, y2, y3;\n    if (yAlign === 'center') {\n      y2 = ptY + (height / 2);\n      if (xAlign === 'left') {\n        x1 = ptX;\n        x2 = x1 - caretSize;\n        y1 = y2 + caretSize;\n        y3 = y2 - caretSize;\n      } else {\n        x1 = ptX + width;\n        x2 = x1 + caretSize;\n        y1 = y2 - caretSize;\n        y3 = y2 + caretSize;\n      }\n      x3 = x1;\n    } else {\n      if (xAlign === 'left') {\n        x2 = ptX + Math.max(topLeft, bottomLeft) + (caretSize);\n      } else if (xAlign === 'right') {\n        x2 = ptX + width - Math.max(topRight, bottomRight) - caretSize;\n      } else {\n        x2 = this.caretX;\n      }\n      if (yAlign === 'top') {\n        y1 = ptY;\n        y2 = y1 - caretSize;\n        x1 = x2 - caretSize;\n        x3 = x2 + caretSize;\n      } else {\n        y1 = ptY + height;\n        y2 = y1 + caretSize;\n        x1 = x2 + caretSize;\n        x3 = x2 - caretSize;\n      }\n      y3 = y1;\n    }\n    return {x1, x2, x3, y1, y2, y3};\n  }\n  drawTitle(pt, ctx, options) {\n    const title = this.title;\n    const length = title.length;\n    let titleFont, titleSpacing, i;\n    if (length) {\n      const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n      pt.x = getAlignedX(this, options.titleAlign, options);\n      ctx.textAlign = rtlHelper.textAlign(options.titleAlign);\n      ctx.textBaseline = 'middle';\n      titleFont = toFont(options.titleFont);\n      titleSpacing = options.titleSpacing;\n      ctx.fillStyle = options.titleColor;\n      ctx.font = titleFont.string;\n      for (i = 0; i < length; ++i) {\n        ctx.fillText(title[i], rtlHelper.x(pt.x), pt.y + titleFont.lineHeight / 2);\n        pt.y += titleFont.lineHeight + titleSpacing;\n        if (i + 1 === length) {\n          pt.y += options.titleMarginBottom - titleSpacing;\n        }\n      }\n    }\n  }\n  _drawColorBox(ctx, pt, i, rtlHelper, options) {\n    const labelColors = this.labelColors[i];\n    const labelPointStyle = this.labelPointStyles[i];\n    const {boxHeight, boxWidth, boxPadding} = options;\n    const bodyFont = toFont(options.bodyFont);\n    const colorX = getAlignedX(this, 'left', options);\n    const rtlColorX = rtlHelper.x(colorX);\n    const yOffSet = boxHeight < bodyFont.lineHeight ? (bodyFont.lineHeight - boxHeight) / 2 : 0;\n    const colorY = pt.y + yOffSet;\n    if (options.usePointStyle) {\n      const drawOptions = {\n        radius: Math.min(boxWidth, boxHeight) / 2,\n        pointStyle: labelPointStyle.pointStyle,\n        rotation: labelPointStyle.rotation,\n        borderWidth: 1\n      };\n      const centerX = rtlHelper.leftForLtr(rtlColorX, boxWidth) + boxWidth / 2;\n      const centerY = colorY + boxHeight / 2;\n      ctx.strokeStyle = options.multiKeyBackground;\n      ctx.fillStyle = options.multiKeyBackground;\n      drawPoint(ctx, drawOptions, centerX, centerY);\n      ctx.strokeStyle = labelColors.borderColor;\n      ctx.fillStyle = labelColors.backgroundColor;\n      drawPoint(ctx, drawOptions, centerX, centerY);\n    } else {\n      ctx.lineWidth = labelColors.borderWidth || 1;\n      ctx.strokeStyle = labelColors.borderColor;\n      ctx.setLineDash(labelColors.borderDash || []);\n      ctx.lineDashOffset = labelColors.borderDashOffset || 0;\n      const outerX = rtlHelper.leftForLtr(rtlColorX, boxWidth - boxPadding);\n      const innerX = rtlHelper.leftForLtr(rtlHelper.xPlus(rtlColorX, 1), boxWidth - boxPadding - 2);\n      const borderRadius = toTRBLCorners(labelColors.borderRadius);\n      if (Object.values(borderRadius).some(v => v !== 0)) {\n        ctx.beginPath();\n        ctx.fillStyle = options.multiKeyBackground;\n        addRoundedRectPath(ctx, {\n          x: outerX,\n          y: colorY,\n          w: boxWidth,\n          h: boxHeight,\n          radius: borderRadius,\n        });\n        ctx.fill();\n        ctx.stroke();\n        ctx.fillStyle = labelColors.backgroundColor;\n        ctx.beginPath();\n        addRoundedRectPath(ctx, {\n          x: innerX,\n          y: colorY + 1,\n          w: boxWidth - 2,\n          h: boxHeight - 2,\n          radius: borderRadius,\n        });\n        ctx.fill();\n      } else {\n        ctx.fillStyle = options.multiKeyBackground;\n        ctx.fillRect(outerX, colorY, boxWidth, boxHeight);\n        ctx.strokeRect(outerX, colorY, boxWidth, boxHeight);\n        ctx.fillStyle = labelColors.backgroundColor;\n        ctx.fillRect(innerX, colorY + 1, boxWidth - 2, boxHeight - 2);\n      }\n    }\n    ctx.fillStyle = this.labelTextColors[i];\n  }\n  drawBody(pt, ctx, options) {\n    const {body} = this;\n    const {bodySpacing, bodyAlign, displayColors, boxHeight, boxWidth, boxPadding} = options;\n    const bodyFont = toFont(options.bodyFont);\n    let bodyLineHeight = bodyFont.lineHeight;\n    let xLinePadding = 0;\n    const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n    const fillLineOfText = function(line) {\n      ctx.fillText(line, rtlHelper.x(pt.x + xLinePadding), pt.y + bodyLineHeight / 2);\n      pt.y += bodyLineHeight + bodySpacing;\n    };\n    const bodyAlignForCalculation = rtlHelper.textAlign(bodyAlign);\n    let bodyItem, textColor, lines, i, j, ilen, jlen;\n    ctx.textAlign = bodyAlign;\n    ctx.textBaseline = 'middle';\n    ctx.font = bodyFont.string;\n    pt.x = getAlignedX(this, bodyAlignForCalculation, options);\n    ctx.fillStyle = options.bodyColor;\n    each(this.beforeBody, fillLineOfText);\n    xLinePadding = displayColors && bodyAlignForCalculation !== 'right'\n      ? bodyAlign === 'center' ? (boxWidth / 2 + boxPadding) : (boxWidth + 2 + boxPadding)\n      : 0;\n    for (i = 0, ilen = body.length; i < ilen; ++i) {\n      bodyItem = body[i];\n      textColor = this.labelTextColors[i];\n      ctx.fillStyle = textColor;\n      each(bodyItem.before, fillLineOfText);\n      lines = bodyItem.lines;\n      if (displayColors && lines.length) {\n        this._drawColorBox(ctx, pt, i, rtlHelper, options);\n        bodyLineHeight = Math.max(bodyFont.lineHeight, boxHeight);\n      }\n      for (j = 0, jlen = lines.length; j < jlen; ++j) {\n        fillLineOfText(lines[j]);\n        bodyLineHeight = bodyFont.lineHeight;\n      }\n      each(bodyItem.after, fillLineOfText);\n    }\n    xLinePadding = 0;\n    bodyLineHeight = bodyFont.lineHeight;\n    each(this.afterBody, fillLineOfText);\n    pt.y -= bodySpacing;\n  }\n  drawFooter(pt, ctx, options) {\n    const footer = this.footer;\n    const length = footer.length;\n    let footerFont, i;\n    if (length) {\n      const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n      pt.x = getAlignedX(this, options.footerAlign, options);\n      pt.y += options.footerMarginTop;\n      ctx.textAlign = rtlHelper.textAlign(options.footerAlign);\n      ctx.textBaseline = 'middle';\n      footerFont = toFont(options.footerFont);\n      ctx.fillStyle = options.footerColor;\n      ctx.font = footerFont.string;\n      for (i = 0; i < length; ++i) {\n        ctx.fillText(footer[i], rtlHelper.x(pt.x), pt.y + footerFont.lineHeight / 2);\n        pt.y += footerFont.lineHeight + options.footerSpacing;\n      }\n    }\n  }\n  drawBackground(pt, ctx, tooltipSize, options) {\n    const {xAlign, yAlign} = this;\n    const {x, y} = pt;\n    const {width, height} = tooltipSize;\n    const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(options.cornerRadius);\n    ctx.fillStyle = options.backgroundColor;\n    ctx.strokeStyle = options.borderColor;\n    ctx.lineWidth = options.borderWidth;\n    ctx.beginPath();\n    ctx.moveTo(x + topLeft, y);\n    if (yAlign === 'top') {\n      this.drawCaret(pt, ctx, tooltipSize, options);\n    }\n    ctx.lineTo(x + width - topRight, y);\n    ctx.quadraticCurveTo(x + width, y, x + width, y + topRight);\n    if (yAlign === 'center' && xAlign === 'right') {\n      this.drawCaret(pt, ctx, tooltipSize, options);\n    }\n    ctx.lineTo(x + width, y + height - bottomRight);\n    ctx.quadraticCurveTo(x + width, y + height, x + width - bottomRight, y + height);\n    if (yAlign === 'bottom') {\n      this.drawCaret(pt, ctx, tooltipSize, options);\n    }\n    ctx.lineTo(x + bottomLeft, y + height);\n    ctx.quadraticCurveTo(x, y + height, x, y + height - bottomLeft);\n    if (yAlign === 'center' && xAlign === 'left') {\n      this.drawCaret(pt, ctx, tooltipSize, options);\n    }\n    ctx.lineTo(x, y + topLeft);\n    ctx.quadraticCurveTo(x, y, x + topLeft, y);\n    ctx.closePath();\n    ctx.fill();\n    if (options.borderWidth > 0) {\n      ctx.stroke();\n    }\n  }\n  _updateAnimationTarget(options) {\n    const chart = this.chart;\n    const anims = this.$animations;\n    const animX = anims && anims.x;\n    const animY = anims && anims.y;\n    if (animX || animY) {\n      const position = positioners[options.position].call(this, this._active, this._eventPosition);\n      if (!position) {\n        return;\n      }\n      const size = this._size = getTooltipSize(this, options);\n      const positionAndSize = Object.assign({}, position, this._size);\n      const alignment = determineAlignment(chart, options, positionAndSize);\n      const point = getBackgroundPoint(options, positionAndSize, alignment, chart);\n      if (animX._to !== point.x || animY._to !== point.y) {\n        this.xAlign = alignment.xAlign;\n        this.yAlign = alignment.yAlign;\n        this.width = size.width;\n        this.height = size.height;\n        this.caretX = position.x;\n        this.caretY = position.y;\n        this._resolveAnimations().update(this, point);\n      }\n    }\n  }\n  _willRender() {\n    return !!this.opacity;\n  }\n  draw(ctx) {\n    const options = this.options.setContext(this.getContext());\n    let opacity = this.opacity;\n    if (!opacity) {\n      return;\n    }\n    this._updateAnimationTarget(options);\n    const tooltipSize = {\n      width: this.width,\n      height: this.height\n    };\n    const pt = {\n      x: this.x,\n      y: this.y\n    };\n    opacity = Math.abs(opacity) < 1e-3 ? 0 : opacity;\n    const padding = toPadding(options.padding);\n    const hasTooltipContent = this.title.length || this.beforeBody.length || this.body.length || this.afterBody.length || this.footer.length;\n    if (options.enabled && hasTooltipContent) {\n      ctx.save();\n      ctx.globalAlpha = opacity;\n      this.drawBackground(pt, ctx, tooltipSize, options);\n      overrideTextDirection(ctx, options.textDirection);\n      pt.y += padding.top;\n      this.drawTitle(pt, ctx, options);\n      this.drawBody(pt, ctx, options);\n      this.drawFooter(pt, ctx, options);\n      restoreTextDirection(ctx, options.textDirection);\n      ctx.restore();\n    }\n  }\n  getActiveElements() {\n    return this._active || [];\n  }\n  setActiveElements(activeElements, eventPosition) {\n    const lastActive = this._active;\n    const active = activeElements.map(({datasetIndex, index}) => {\n      const meta = this.chart.getDatasetMeta(datasetIndex);\n      if (!meta) {\n        throw new Error('Cannot find a dataset at index ' + datasetIndex);\n      }\n      return {\n        datasetIndex,\n        element: meta.data[index],\n        index,\n      };\n    });\n    const changed = !_elementsEqual(lastActive, active);\n    const positionChanged = this._positionChanged(active, eventPosition);\n    if (changed || positionChanged) {\n      this._active = active;\n      this._eventPosition = eventPosition;\n      this._ignoreReplayEvents = true;\n      this.update(true);\n    }\n  }\n  handleEvent(e, replay, inChartArea = true) {\n    if (replay && this._ignoreReplayEvents) {\n      return false;\n    }\n    this._ignoreReplayEvents = false;\n    const options = this.options;\n    const lastActive = this._active || [];\n    const active = this._getActiveElements(e, lastActive, replay, inChartArea);\n    const positionChanged = this._positionChanged(active, e);\n    const changed = replay || !_elementsEqual(active, lastActive) || positionChanged;\n    if (changed) {\n      this._active = active;\n      if (options.enabled || options.external) {\n        this._eventPosition = {\n          x: e.x,\n          y: e.y\n        };\n        this.update(true, replay);\n      }\n    }\n    return changed;\n  }\n  _getActiveElements(e, lastActive, replay, inChartArea) {\n    const options = this.options;\n    if (e.type === 'mouseout') {\n      return [];\n    }\n    if (!inChartArea) {\n      return lastActive;\n    }\n    const active = this.chart.getElementsAtEventForMode(e, options.mode, options, replay);\n    if (options.reverse) {\n      active.reverse();\n    }\n    return active;\n  }\n  _positionChanged(active, e) {\n    const {caretX, caretY, options} = this;\n    const position = positioners[options.position].call(this, active, e);\n    return position !== false && (caretX !== position.x || caretY !== position.y);\n  }\n}\nTooltip.positioners = positioners;\nvar plugin_tooltip = {\n  id: 'tooltip',\n  _element: Tooltip,\n  positioners,\n  afterInit(chart, _args, options) {\n    if (options) {\n      chart.tooltip = new Tooltip({chart, options});\n    }\n  },\n  beforeUpdate(chart, _args, options) {\n    if (chart.tooltip) {\n      chart.tooltip.initialize(options);\n    }\n  },\n  reset(chart, _args, options) {\n    if (chart.tooltip) {\n      chart.tooltip.initialize(options);\n    }\n  },\n  afterDraw(chart) {\n    const tooltip = chart.tooltip;\n    if (tooltip && tooltip._willRender()) {\n      const args = {\n        tooltip\n      };\n      if (chart.notifyPlugins('beforeTooltipDraw', args) === false) {\n        return;\n      }\n      tooltip.draw(chart.ctx);\n      chart.notifyPlugins('afterTooltipDraw', args);\n    }\n  },\n  afterEvent(chart, args) {\n    if (chart.tooltip) {\n      const useFinalPosition = args.replay;\n      if (chart.tooltip.handleEvent(args.event, useFinalPosition, args.inChartArea)) {\n        args.changed = true;\n      }\n    }\n  },\n  defaults: {\n    enabled: true,\n    external: null,\n    position: 'average',\n    backgroundColor: 'rgba(0,0,0,0.8)',\n    titleColor: '#fff',\n    titleFont: {\n      weight: 'bold',\n    },\n    titleSpacing: 2,\n    titleMarginBottom: 6,\n    titleAlign: 'left',\n    bodyColor: '#fff',\n    bodySpacing: 2,\n    bodyFont: {\n    },\n    bodyAlign: 'left',\n    footerColor: '#fff',\n    footerSpacing: 2,\n    footerMarginTop: 6,\n    footerFont: {\n      weight: 'bold',\n    },\n    footerAlign: 'left',\n    padding: 6,\n    caretPadding: 2,\n    caretSize: 5,\n    cornerRadius: 6,\n    boxHeight: (ctx, opts) => opts.bodyFont.size,\n    boxWidth: (ctx, opts) => opts.bodyFont.size,\n    multiKeyBackground: '#fff',\n    displayColors: true,\n    boxPadding: 0,\n    borderColor: 'rgba(0,0,0,0)',\n    borderWidth: 0,\n    animation: {\n      duration: 400,\n      easing: 'easeOutQuart',\n    },\n    animations: {\n      numbers: {\n        type: 'number',\n        properties: ['x', 'y', 'width', 'height', 'caretX', 'caretY'],\n      },\n      opacity: {\n        easing: 'linear',\n        duration: 200\n      }\n    },\n    callbacks: {\n      beforeTitle: noop,\n      title(tooltipItems) {\n        if (tooltipItems.length > 0) {\n          const item = tooltipItems[0];\n          const labels = item.chart.data.labels;\n          const labelCount = labels ? labels.length : 0;\n          if (this && this.options && this.options.mode === 'dataset') {\n            return item.dataset.label || '';\n          } else if (item.label) {\n            return item.label;\n          } else if (labelCount > 0 && item.dataIndex < labelCount) {\n            return labels[item.dataIndex];\n          }\n        }\n        return '';\n      },\n      afterTitle: noop,\n      beforeBody: noop,\n      beforeLabel: noop,\n      label(tooltipItem) {\n        if (this && this.options && this.options.mode === 'dataset') {\n          return tooltipItem.label + ': ' + tooltipItem.formattedValue || tooltipItem.formattedValue;\n        }\n        let label = tooltipItem.dataset.label || '';\n        if (label) {\n          label += ': ';\n        }\n        const value = tooltipItem.formattedValue;\n        if (!isNullOrUndef(value)) {\n          label += value;\n        }\n        return label;\n      },\n      labelColor(tooltipItem) {\n        const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n        const options = meta.controller.getStyle(tooltipItem.dataIndex);\n        return {\n          borderColor: options.borderColor,\n          backgroundColor: options.backgroundColor,\n          borderWidth: options.borderWidth,\n          borderDash: options.borderDash,\n          borderDashOffset: options.borderDashOffset,\n          borderRadius: 0,\n        };\n      },\n      labelTextColor() {\n        return this.options.bodyColor;\n      },\n      labelPointStyle(tooltipItem) {\n        const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n        const options = meta.controller.getStyle(tooltipItem.dataIndex);\n        return {\n          pointStyle: options.pointStyle,\n          rotation: options.rotation,\n        };\n      },\n      afterLabel: noop,\n      afterBody: noop,\n      beforeFooter: noop,\n      footer: noop,\n      afterFooter: noop\n    }\n  },\n  defaultRoutes: {\n    bodyFont: 'font',\n    footerFont: 'font',\n    titleFont: 'font'\n  },\n  descriptors: {\n    _scriptable: (name) => name !== 'filter' && name !== 'itemSort' && name !== 'external',\n    _indexable: false,\n    callbacks: {\n      _scriptable: false,\n      _indexable: false,\n    },\n    animation: {\n      _fallback: false\n    },\n    animations: {\n      _fallback: 'animation'\n    }\n  },\n  additionalOptionScopes: ['interaction']\n};\n\nvar plugins = /*#__PURE__*/Object.freeze({\n__proto__: null,\nDecimation: plugin_decimation,\nFiller: index,\nLegend: plugin_legend,\nSubTitle: plugin_subtitle,\nTitle: plugin_title,\nTooltip: plugin_tooltip\n});\n\nconst addIfString = (labels, raw, index, addedLabels) => {\n  if (typeof raw === 'string') {\n    index = labels.push(raw) - 1;\n    addedLabels.unshift({index, label: raw});\n  } else if (isNaN(raw)) {\n    index = null;\n  }\n  return index;\n};\nfunction findOrAddLabel(labels, raw, index, addedLabels) {\n  const first = labels.indexOf(raw);\n  if (first === -1) {\n    return addIfString(labels, raw, index, addedLabels);\n  }\n  const last = labels.lastIndexOf(raw);\n  return first !== last ? index : first;\n}\nconst validIndex = (index, max) => index === null ? null : _limitValue(Math.round(index), 0, max);\nclass CategoryScale extends Scale {\n  constructor(cfg) {\n    super(cfg);\n    this._startValue = undefined;\n    this._valueRange = 0;\n    this._addedLabels = [];\n  }\n  init(scaleOptions) {\n    const added = this._addedLabels;\n    if (added.length) {\n      const labels = this.getLabels();\n      for (const {index, label} of added) {\n        if (labels[index] === label) {\n          labels.splice(index, 1);\n        }\n      }\n      this._addedLabels = [];\n    }\n    super.init(scaleOptions);\n  }\n  parse(raw, index) {\n    if (isNullOrUndef(raw)) {\n      return null;\n    }\n    const labels = this.getLabels();\n    index = isFinite(index) && labels[index] === raw ? index\n      : findOrAddLabel(labels, raw, valueOrDefault(index, raw), this._addedLabels);\n    return validIndex(index, labels.length - 1);\n  }\n  determineDataLimits() {\n    const {minDefined, maxDefined} = this.getUserBounds();\n    let {min, max} = this.getMinMax(true);\n    if (this.options.bounds === 'ticks') {\n      if (!minDefined) {\n        min = 0;\n      }\n      if (!maxDefined) {\n        max = this.getLabels().length - 1;\n      }\n    }\n    this.min = min;\n    this.max = max;\n  }\n  buildTicks() {\n    const min = this.min;\n    const max = this.max;\n    const offset = this.options.offset;\n    const ticks = [];\n    let labels = this.getLabels();\n    labels = (min === 0 && max === labels.length - 1) ? labels : labels.slice(min, max + 1);\n    this._valueRange = Math.max(labels.length - (offset ? 0 : 1), 1);\n    this._startValue = this.min - (offset ? 0.5 : 0);\n    for (let value = min; value <= max; value++) {\n      ticks.push({value});\n    }\n    return ticks;\n  }\n  getLabelForValue(value) {\n    const labels = this.getLabels();\n    if (value >= 0 && value < labels.length) {\n      return labels[value];\n    }\n    return value;\n  }\n  configure() {\n    super.configure();\n    if (!this.isHorizontal()) {\n      this._reversePixels = !this._reversePixels;\n    }\n  }\n  getPixelForValue(value) {\n    if (typeof value !== 'number') {\n      value = this.parse(value);\n    }\n    return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n  }\n  getPixelForTick(index) {\n    const ticks = this.ticks;\n    if (index < 0 || index > ticks.length - 1) {\n      return null;\n    }\n    return this.getPixelForValue(ticks[index].value);\n  }\n  getValueForPixel(pixel) {\n    return Math.round(this._startValue + this.getDecimalForPixel(pixel) * this._valueRange);\n  }\n  getBasePixel() {\n    return this.bottom;\n  }\n}\nCategoryScale.id = 'category';\nCategoryScale.defaults = {\n  ticks: {\n    callback: CategoryScale.prototype.getLabelForValue\n  }\n};\n\nfunction generateTicks$1(generationOptions, dataRange) {\n  const ticks = [];\n  const MIN_SPACING = 1e-14;\n  const {bounds, step, min, max, precision, count, maxTicks, maxDigits, includeBounds} = generationOptions;\n  const unit = step || 1;\n  const maxSpaces = maxTicks - 1;\n  const {min: rmin, max: rmax} = dataRange;\n  const minDefined = !isNullOrUndef(min);\n  const maxDefined = !isNullOrUndef(max);\n  const countDefined = !isNullOrUndef(count);\n  const minSpacing = (rmax - rmin) / (maxDigits + 1);\n  let spacing = niceNum((rmax - rmin) / maxSpaces / unit) * unit;\n  let factor, niceMin, niceMax, numSpaces;\n  if (spacing < MIN_SPACING && !minDefined && !maxDefined) {\n    return [{value: rmin}, {value: rmax}];\n  }\n  numSpaces = Math.ceil(rmax / spacing) - Math.floor(rmin / spacing);\n  if (numSpaces > maxSpaces) {\n    spacing = niceNum(numSpaces * spacing / maxSpaces / unit) * unit;\n  }\n  if (!isNullOrUndef(precision)) {\n    factor = Math.pow(10, precision);\n    spacing = Math.ceil(spacing * factor) / factor;\n  }\n  if (bounds === 'ticks') {\n    niceMin = Math.floor(rmin / spacing) * spacing;\n    niceMax = Math.ceil(rmax / spacing) * spacing;\n  } else {\n    niceMin = rmin;\n    niceMax = rmax;\n  }\n  if (minDefined && maxDefined && step && almostWhole((max - min) / step, spacing / 1000)) {\n    numSpaces = Math.round(Math.min((max - min) / spacing, maxTicks));\n    spacing = (max - min) / numSpaces;\n    niceMin = min;\n    niceMax = max;\n  } else if (countDefined) {\n    niceMin = minDefined ? min : niceMin;\n    niceMax = maxDefined ? max : niceMax;\n    numSpaces = count - 1;\n    spacing = (niceMax - niceMin) / numSpaces;\n  } else {\n    numSpaces = (niceMax - niceMin) / spacing;\n    if (almostEquals(numSpaces, Math.round(numSpaces), spacing / 1000)) {\n      numSpaces = Math.round(numSpaces);\n    } else {\n      numSpaces = Math.ceil(numSpaces);\n    }\n  }\n  const decimalPlaces = Math.max(\n    _decimalPlaces(spacing),\n    _decimalPlaces(niceMin)\n  );\n  factor = Math.pow(10, isNullOrUndef(precision) ? decimalPlaces : precision);\n  niceMin = Math.round(niceMin * factor) / factor;\n  niceMax = Math.round(niceMax * factor) / factor;\n  let j = 0;\n  if (minDefined) {\n    if (includeBounds && niceMin !== min) {\n      ticks.push({value: min});\n      if (niceMin < min) {\n        j++;\n      }\n      if (almostEquals(Math.round((niceMin + j * spacing) * factor) / factor, min, relativeLabelSize(min, minSpacing, generationOptions))) {\n        j++;\n      }\n    } else if (niceMin < min) {\n      j++;\n    }\n  }\n  for (; j < numSpaces; ++j) {\n    ticks.push({value: Math.round((niceMin + j * spacing) * factor) / factor});\n  }\n  if (maxDefined && includeBounds && niceMax !== max) {\n    if (ticks.length && almostEquals(ticks[ticks.length - 1].value, max, relativeLabelSize(max, minSpacing, generationOptions))) {\n      ticks[ticks.length - 1].value = max;\n    } else {\n      ticks.push({value: max});\n    }\n  } else if (!maxDefined || niceMax === max) {\n    ticks.push({value: niceMax});\n  }\n  return ticks;\n}\nfunction relativeLabelSize(value, minSpacing, {horizontal, minRotation}) {\n  const rad = toRadians(minRotation);\n  const ratio = (horizontal ? Math.sin(rad) : Math.cos(rad)) || 0.001;\n  const length = 0.75 * minSpacing * ('' + value).length;\n  return Math.min(minSpacing / ratio, length);\n}\nclass LinearScaleBase extends Scale {\n  constructor(cfg) {\n    super(cfg);\n    this.start = undefined;\n    this.end = undefined;\n    this._startValue = undefined;\n    this._endValue = undefined;\n    this._valueRange = 0;\n  }\n  parse(raw, index) {\n    if (isNullOrUndef(raw)) {\n      return null;\n    }\n    if ((typeof raw === 'number' || raw instanceof Number) && !isFinite(+raw)) {\n      return null;\n    }\n    return +raw;\n  }\n  handleTickRangeOptions() {\n    const {beginAtZero} = this.options;\n    const {minDefined, maxDefined} = this.getUserBounds();\n    let {min, max} = this;\n    const setMin = v => (min = minDefined ? min : v);\n    const setMax = v => (max = maxDefined ? max : v);\n    if (beginAtZero) {\n      const minSign = sign(min);\n      const maxSign = sign(max);\n      if (minSign < 0 && maxSign < 0) {\n        setMax(0);\n      } else if (minSign > 0 && maxSign > 0) {\n        setMin(0);\n      }\n    }\n    if (min === max) {\n      let offset = 1;\n      if (max >= Number.MAX_SAFE_INTEGER || min <= Number.MIN_SAFE_INTEGER) {\n        offset = Math.abs(max * 0.05);\n      }\n      setMax(max + offset);\n      if (!beginAtZero) {\n        setMin(min - offset);\n      }\n    }\n    this.min = min;\n    this.max = max;\n  }\n  getTickLimit() {\n    const tickOpts = this.options.ticks;\n    let {maxTicksLimit, stepSize} = tickOpts;\n    let maxTicks;\n    if (stepSize) {\n      maxTicks = Math.ceil(this.max / stepSize) - Math.floor(this.min / stepSize) + 1;\n      if (maxTicks > 1000) {\n        console.warn(`scales.${this.id}.ticks.stepSize: ${stepSize} would result generating up to ${maxTicks} ticks. Limiting to 1000.`);\n        maxTicks = 1000;\n      }\n    } else {\n      maxTicks = this.computeTickLimit();\n      maxTicksLimit = maxTicksLimit || 11;\n    }\n    if (maxTicksLimit) {\n      maxTicks = Math.min(maxTicksLimit, maxTicks);\n    }\n    return maxTicks;\n  }\n  computeTickLimit() {\n    return Number.POSITIVE_INFINITY;\n  }\n  buildTicks() {\n    const opts = this.options;\n    const tickOpts = opts.ticks;\n    let maxTicks = this.getTickLimit();\n    maxTicks = Math.max(2, maxTicks);\n    const numericGeneratorOptions = {\n      maxTicks,\n      bounds: opts.bounds,\n      min: opts.min,\n      max: opts.max,\n      precision: tickOpts.precision,\n      step: tickOpts.stepSize,\n      count: tickOpts.count,\n      maxDigits: this._maxDigits(),\n      horizontal: this.isHorizontal(),\n      minRotation: tickOpts.minRotation || 0,\n      includeBounds: tickOpts.includeBounds !== false\n    };\n    const dataRange = this._range || this;\n    const ticks = generateTicks$1(numericGeneratorOptions, dataRange);\n    if (opts.bounds === 'ticks') {\n      _setMinAndMaxByKey(ticks, this, 'value');\n    }\n    if (opts.reverse) {\n      ticks.reverse();\n      this.start = this.max;\n      this.end = this.min;\n    } else {\n      this.start = this.min;\n      this.end = this.max;\n    }\n    return ticks;\n  }\n  configure() {\n    const ticks = this.ticks;\n    let start = this.min;\n    let end = this.max;\n    super.configure();\n    if (this.options.offset && ticks.length) {\n      const offset = (end - start) / Math.max(ticks.length - 1, 1) / 2;\n      start -= offset;\n      end += offset;\n    }\n    this._startValue = start;\n    this._endValue = end;\n    this._valueRange = end - start;\n  }\n  getLabelForValue(value) {\n    return formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n  }\n}\n\nclass LinearScale extends LinearScaleBase {\n  determineDataLimits() {\n    const {min, max} = this.getMinMax(true);\n    this.min = isNumberFinite(min) ? min : 0;\n    this.max = isNumberFinite(max) ? max : 1;\n    this.handleTickRangeOptions();\n  }\n  computeTickLimit() {\n    const horizontal = this.isHorizontal();\n    const length = horizontal ? this.width : this.height;\n    const minRotation = toRadians(this.options.ticks.minRotation);\n    const ratio = (horizontal ? Math.sin(minRotation) : Math.cos(minRotation)) || 0.001;\n    const tickFont = this._resolveTickFontOptions(0);\n    return Math.ceil(length / Math.min(40, tickFont.lineHeight / ratio));\n  }\n  getPixelForValue(value) {\n    return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n  }\n  getValueForPixel(pixel) {\n    return this._startValue + this.getDecimalForPixel(pixel) * this._valueRange;\n  }\n}\nLinearScale.id = 'linear';\nLinearScale.defaults = {\n  ticks: {\n    callback: Ticks.formatters.numeric\n  }\n};\n\nfunction isMajor(tickVal) {\n  const remain = tickVal / (Math.pow(10, Math.floor(log10(tickVal))));\n  return remain === 1;\n}\nfunction generateTicks(generationOptions, dataRange) {\n  const endExp = Math.floor(log10(dataRange.max));\n  const endSignificand = Math.ceil(dataRange.max / Math.pow(10, endExp));\n  const ticks = [];\n  let tickVal = finiteOrDefault(generationOptions.min, Math.pow(10, Math.floor(log10(dataRange.min))));\n  let exp = Math.floor(log10(tickVal));\n  let significand = Math.floor(tickVal / Math.pow(10, exp));\n  let precision = exp < 0 ? Math.pow(10, Math.abs(exp)) : 1;\n  do {\n    ticks.push({value: tickVal, major: isMajor(tickVal)});\n    ++significand;\n    if (significand === 10) {\n      significand = 1;\n      ++exp;\n      precision = exp >= 0 ? 1 : precision;\n    }\n    tickVal = Math.round(significand * Math.pow(10, exp) * precision) / precision;\n  } while (exp < endExp || (exp === endExp && significand < endSignificand));\n  const lastTick = finiteOrDefault(generationOptions.max, tickVal);\n  ticks.push({value: lastTick, major: isMajor(tickVal)});\n  return ticks;\n}\nclass LogarithmicScale extends Scale {\n  constructor(cfg) {\n    super(cfg);\n    this.start = undefined;\n    this.end = undefined;\n    this._startValue = undefined;\n    this._valueRange = 0;\n  }\n  parse(raw, index) {\n    const value = LinearScaleBase.prototype.parse.apply(this, [raw, index]);\n    if (value === 0) {\n      this._zero = true;\n      return undefined;\n    }\n    return isNumberFinite(value) && value > 0 ? value : null;\n  }\n  determineDataLimits() {\n    const {min, max} = this.getMinMax(true);\n    this.min = isNumberFinite(min) ? Math.max(0, min) : null;\n    this.max = isNumberFinite(max) ? Math.max(0, max) : null;\n    if (this.options.beginAtZero) {\n      this._zero = true;\n    }\n    this.handleTickRangeOptions();\n  }\n  handleTickRangeOptions() {\n    const {minDefined, maxDefined} = this.getUserBounds();\n    let min = this.min;\n    let max = this.max;\n    const setMin = v => (min = minDefined ? min : v);\n    const setMax = v => (max = maxDefined ? max : v);\n    const exp = (v, m) => Math.pow(10, Math.floor(log10(v)) + m);\n    if (min === max) {\n      if (min <= 0) {\n        setMin(1);\n        setMax(10);\n      } else {\n        setMin(exp(min, -1));\n        setMax(exp(max, +1));\n      }\n    }\n    if (min <= 0) {\n      setMin(exp(max, -1));\n    }\n    if (max <= 0) {\n      setMax(exp(min, +1));\n    }\n    if (this._zero && this.min !== this._suggestedMin && min === exp(this.min, 0)) {\n      setMin(exp(min, -1));\n    }\n    this.min = min;\n    this.max = max;\n  }\n  buildTicks() {\n    const opts = this.options;\n    const generationOptions = {\n      min: this._userMin,\n      max: this._userMax\n    };\n    const ticks = generateTicks(generationOptions, this);\n    if (opts.bounds === 'ticks') {\n      _setMinAndMaxByKey(ticks, this, 'value');\n    }\n    if (opts.reverse) {\n      ticks.reverse();\n      this.start = this.max;\n      this.end = this.min;\n    } else {\n      this.start = this.min;\n      this.end = this.max;\n    }\n    return ticks;\n  }\n  getLabelForValue(value) {\n    return value === undefined\n      ? '0'\n      : formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n  }\n  configure() {\n    const start = this.min;\n    super.configure();\n    this._startValue = log10(start);\n    this._valueRange = log10(this.max) - log10(start);\n  }\n  getPixelForValue(value) {\n    if (value === undefined || value === 0) {\n      value = this.min;\n    }\n    if (value === null || isNaN(value)) {\n      return NaN;\n    }\n    return this.getPixelForDecimal(value === this.min\n      ? 0\n      : (log10(value) - this._startValue) / this._valueRange);\n  }\n  getValueForPixel(pixel) {\n    const decimal = this.getDecimalForPixel(pixel);\n    return Math.pow(10, this._startValue + decimal * this._valueRange);\n  }\n}\nLogarithmicScale.id = 'logarithmic';\nLogarithmicScale.defaults = {\n  ticks: {\n    callback: Ticks.formatters.logarithmic,\n    major: {\n      enabled: true\n    }\n  }\n};\n\nfunction getTickBackdropHeight(opts) {\n  const tickOpts = opts.ticks;\n  if (tickOpts.display && opts.display) {\n    const padding = toPadding(tickOpts.backdropPadding);\n    return valueOrDefault(tickOpts.font && tickOpts.font.size, defaults.font.size) + padding.height;\n  }\n  return 0;\n}\nfunction measureLabelSize(ctx, font, label) {\n  label = isArray(label) ? label : [label];\n  return {\n    w: _longestText(ctx, font.string, label),\n    h: label.length * font.lineHeight\n  };\n}\nfunction determineLimits(angle, pos, size, min, max) {\n  if (angle === min || angle === max) {\n    return {\n      start: pos - (size / 2),\n      end: pos + (size / 2)\n    };\n  } else if (angle < min || angle > max) {\n    return {\n      start: pos - size,\n      end: pos\n    };\n  }\n  return {\n    start: pos,\n    end: pos + size\n  };\n}\nfunction fitWithPointLabels(scale) {\n  const orig = {\n    l: scale.left + scale._padding.left,\n    r: scale.right - scale._padding.right,\n    t: scale.top + scale._padding.top,\n    b: scale.bottom - scale._padding.bottom\n  };\n  const limits = Object.assign({}, orig);\n  const labelSizes = [];\n  const padding = [];\n  const valueCount = scale._pointLabels.length;\n  const pointLabelOpts = scale.options.pointLabels;\n  const additionalAngle = pointLabelOpts.centerPointLabels ? PI / valueCount : 0;\n  for (let i = 0; i < valueCount; i++) {\n    const opts = pointLabelOpts.setContext(scale.getPointLabelContext(i));\n    padding[i] = opts.padding;\n    const pointPosition = scale.getPointPosition(i, scale.drawingArea + padding[i], additionalAngle);\n    const plFont = toFont(opts.font);\n    const textSize = measureLabelSize(scale.ctx, plFont, scale._pointLabels[i]);\n    labelSizes[i] = textSize;\n    const angleRadians = _normalizeAngle(scale.getIndexAngle(i) + additionalAngle);\n    const angle = Math.round(toDegrees(angleRadians));\n    const hLimits = determineLimits(angle, pointPosition.x, textSize.w, 0, 180);\n    const vLimits = determineLimits(angle, pointPosition.y, textSize.h, 90, 270);\n    updateLimits(limits, orig, angleRadians, hLimits, vLimits);\n  }\n  scale.setCenterPoint(\n    orig.l - limits.l,\n    limits.r - orig.r,\n    orig.t - limits.t,\n    limits.b - orig.b\n  );\n  scale._pointLabelItems = buildPointLabelItems(scale, labelSizes, padding);\n}\nfunction updateLimits(limits, orig, angle, hLimits, vLimits) {\n  const sin = Math.abs(Math.sin(angle));\n  const cos = Math.abs(Math.cos(angle));\n  let x = 0;\n  let y = 0;\n  if (hLimits.start < orig.l) {\n    x = (orig.l - hLimits.start) / sin;\n    limits.l = Math.min(limits.l, orig.l - x);\n  } else if (hLimits.end > orig.r) {\n    x = (hLimits.end - orig.r) / sin;\n    limits.r = Math.max(limits.r, orig.r + x);\n  }\n  if (vLimits.start < orig.t) {\n    y = (orig.t - vLimits.start) / cos;\n    limits.t = Math.min(limits.t, orig.t - y);\n  } else if (vLimits.end > orig.b) {\n    y = (vLimits.end - orig.b) / cos;\n    limits.b = Math.max(limits.b, orig.b + y);\n  }\n}\nfunction buildPointLabelItems(scale, labelSizes, padding) {\n  const items = [];\n  const valueCount = scale._pointLabels.length;\n  const opts = scale.options;\n  const extra = getTickBackdropHeight(opts) / 2;\n  const outerDistance = scale.drawingArea;\n  const additionalAngle = opts.pointLabels.centerPointLabels ? PI / valueCount : 0;\n  for (let i = 0; i < valueCount; i++) {\n    const pointLabelPosition = scale.getPointPosition(i, outerDistance + extra + padding[i], additionalAngle);\n    const angle = Math.round(toDegrees(_normalizeAngle(pointLabelPosition.angle + HALF_PI)));\n    const size = labelSizes[i];\n    const y = yForAngle(pointLabelPosition.y, size.h, angle);\n    const textAlign = getTextAlignForAngle(angle);\n    const left = leftForTextAlign(pointLabelPosition.x, size.w, textAlign);\n    items.push({\n      x: pointLabelPosition.x,\n      y,\n      textAlign,\n      left,\n      top: y,\n      right: left + size.w,\n      bottom: y + size.h\n    });\n  }\n  return items;\n}\nfunction getTextAlignForAngle(angle) {\n  if (angle === 0 || angle === 180) {\n    return 'center';\n  } else if (angle < 180) {\n    return 'left';\n  }\n  return 'right';\n}\nfunction leftForTextAlign(x, w, align) {\n  if (align === 'right') {\n    x -= w;\n  } else if (align === 'center') {\n    x -= (w / 2);\n  }\n  return x;\n}\nfunction yForAngle(y, h, angle) {\n  if (angle === 90 || angle === 270) {\n    y -= (h / 2);\n  } else if (angle > 270 || angle < 90) {\n    y -= h;\n  }\n  return y;\n}\nfunction drawPointLabels(scale, labelCount) {\n  const {ctx, options: {pointLabels}} = scale;\n  for (let i = labelCount - 1; i >= 0; i--) {\n    const optsAtIndex = pointLabels.setContext(scale.getPointLabelContext(i));\n    const plFont = toFont(optsAtIndex.font);\n    const {x, y, textAlign, left, top, right, bottom} = scale._pointLabelItems[i];\n    const {backdropColor} = optsAtIndex;\n    if (!isNullOrUndef(backdropColor)) {\n      const borderRadius = toTRBLCorners(optsAtIndex.borderRadius);\n      const padding = toPadding(optsAtIndex.backdropPadding);\n      ctx.fillStyle = backdropColor;\n      const backdropLeft = left - padding.left;\n      const backdropTop = top - padding.top;\n      const backdropWidth = right - left + padding.width;\n      const backdropHeight = bottom - top + padding.height;\n      if (Object.values(borderRadius).some(v => v !== 0)) {\n        ctx.beginPath();\n        addRoundedRectPath(ctx, {\n          x: backdropLeft,\n          y: backdropTop,\n          w: backdropWidth,\n          h: backdropHeight,\n          radius: borderRadius,\n        });\n        ctx.fill();\n      } else {\n        ctx.fillRect(backdropLeft, backdropTop, backdropWidth, backdropHeight);\n      }\n    }\n    renderText(\n      ctx,\n      scale._pointLabels[i],\n      x,\n      y + (plFont.lineHeight / 2),\n      plFont,\n      {\n        color: optsAtIndex.color,\n        textAlign: textAlign,\n        textBaseline: 'middle'\n      }\n    );\n  }\n}\nfunction pathRadiusLine(scale, radius, circular, labelCount) {\n  const {ctx} = scale;\n  if (circular) {\n    ctx.arc(scale.xCenter, scale.yCenter, radius, 0, TAU);\n  } else {\n    let pointPosition = scale.getPointPosition(0, radius);\n    ctx.moveTo(pointPosition.x, pointPosition.y);\n    for (let i = 1; i < labelCount; i++) {\n      pointPosition = scale.getPointPosition(i, radius);\n      ctx.lineTo(pointPosition.x, pointPosition.y);\n    }\n  }\n}\nfunction drawRadiusLine(scale, gridLineOpts, radius, labelCount) {\n  const ctx = scale.ctx;\n  const circular = gridLineOpts.circular;\n  const {color, lineWidth} = gridLineOpts;\n  if ((!circular && !labelCount) || !color || !lineWidth || radius < 0) {\n    return;\n  }\n  ctx.save();\n  ctx.strokeStyle = color;\n  ctx.lineWidth = lineWidth;\n  ctx.setLineDash(gridLineOpts.borderDash);\n  ctx.lineDashOffset = gridLineOpts.borderDashOffset;\n  ctx.beginPath();\n  pathRadiusLine(scale, radius, circular, labelCount);\n  ctx.closePath();\n  ctx.stroke();\n  ctx.restore();\n}\nfunction createPointLabelContext(parent, index, label) {\n  return createContext(parent, {\n    label,\n    index,\n    type: 'pointLabel'\n  });\n}\nclass RadialLinearScale extends LinearScaleBase {\n  constructor(cfg) {\n    super(cfg);\n    this.xCenter = undefined;\n    this.yCenter = undefined;\n    this.drawingArea = undefined;\n    this._pointLabels = [];\n    this._pointLabelItems = [];\n  }\n  setDimensions() {\n    const padding = this._padding = toPadding(getTickBackdropHeight(this.options) / 2);\n    const w = this.width = this.maxWidth - padding.width;\n    const h = this.height = this.maxHeight - padding.height;\n    this.xCenter = Math.floor(this.left + w / 2 + padding.left);\n    this.yCenter = Math.floor(this.top + h / 2 + padding.top);\n    this.drawingArea = Math.floor(Math.min(w, h) / 2);\n  }\n  determineDataLimits() {\n    const {min, max} = this.getMinMax(false);\n    this.min = isNumberFinite(min) && !isNaN(min) ? min : 0;\n    this.max = isNumberFinite(max) && !isNaN(max) ? max : 0;\n    this.handleTickRangeOptions();\n  }\n  computeTickLimit() {\n    return Math.ceil(this.drawingArea / getTickBackdropHeight(this.options));\n  }\n  generateTickLabels(ticks) {\n    LinearScaleBase.prototype.generateTickLabels.call(this, ticks);\n    this._pointLabels = this.getLabels()\n      .map((value, index) => {\n        const label = callback(this.options.pointLabels.callback, [value, index], this);\n        return label || label === 0 ? label : '';\n      })\n      .filter((v, i) => this.chart.getDataVisibility(i));\n  }\n  fit() {\n    const opts = this.options;\n    if (opts.display && opts.pointLabels.display) {\n      fitWithPointLabels(this);\n    } else {\n      this.setCenterPoint(0, 0, 0, 0);\n    }\n  }\n  setCenterPoint(leftMovement, rightMovement, topMovement, bottomMovement) {\n    this.xCenter += Math.floor((leftMovement - rightMovement) / 2);\n    this.yCenter += Math.floor((topMovement - bottomMovement) / 2);\n    this.drawingArea -= Math.min(this.drawingArea / 2, Math.max(leftMovement, rightMovement, topMovement, bottomMovement));\n  }\n  getIndexAngle(index) {\n    const angleMultiplier = TAU / (this._pointLabels.length || 1);\n    const startAngle = this.options.startAngle || 0;\n    return _normalizeAngle(index * angleMultiplier + toRadians(startAngle));\n  }\n  getDistanceFromCenterForValue(value) {\n    if (isNullOrUndef(value)) {\n      return NaN;\n    }\n    const scalingFactor = this.drawingArea / (this.max - this.min);\n    if (this.options.reverse) {\n      return (this.max - value) * scalingFactor;\n    }\n    return (value - this.min) * scalingFactor;\n  }\n  getValueForDistanceFromCenter(distance) {\n    if (isNullOrUndef(distance)) {\n      return NaN;\n    }\n    const scaledDistance = distance / (this.drawingArea / (this.max - this.min));\n    return this.options.reverse ? this.max - scaledDistance : this.min + scaledDistance;\n  }\n  getPointLabelContext(index) {\n    const pointLabels = this._pointLabels || [];\n    if (index >= 0 && index < pointLabels.length) {\n      const pointLabel = pointLabels[index];\n      return createPointLabelContext(this.getContext(), index, pointLabel);\n    }\n  }\n  getPointPosition(index, distanceFromCenter, additionalAngle = 0) {\n    const angle = this.getIndexAngle(index) - HALF_PI + additionalAngle;\n    return {\n      x: Math.cos(angle) * distanceFromCenter + this.xCenter,\n      y: Math.sin(angle) * distanceFromCenter + this.yCenter,\n      angle\n    };\n  }\n  getPointPositionForValue(index, value) {\n    return this.getPointPosition(index, this.getDistanceFromCenterForValue(value));\n  }\n  getBasePosition(index) {\n    return this.getPointPositionForValue(index || 0, this.getBaseValue());\n  }\n  getPointLabelPosition(index) {\n    const {left, top, right, bottom} = this._pointLabelItems[index];\n    return {\n      left,\n      top,\n      right,\n      bottom,\n    };\n  }\n  drawBackground() {\n    const {backgroundColor, grid: {circular}} = this.options;\n    if (backgroundColor) {\n      const ctx = this.ctx;\n      ctx.save();\n      ctx.beginPath();\n      pathRadiusLine(this, this.getDistanceFromCenterForValue(this._endValue), circular, this._pointLabels.length);\n      ctx.closePath();\n      ctx.fillStyle = backgroundColor;\n      ctx.fill();\n      ctx.restore();\n    }\n  }\n  drawGrid() {\n    const ctx = this.ctx;\n    const opts = this.options;\n    const {angleLines, grid} = opts;\n    const labelCount = this._pointLabels.length;\n    let i, offset, position;\n    if (opts.pointLabels.display) {\n      drawPointLabels(this, labelCount);\n    }\n    if (grid.display) {\n      this.ticks.forEach((tick, index) => {\n        if (index !== 0) {\n          offset = this.getDistanceFromCenterForValue(tick.value);\n          const optsAtIndex = grid.setContext(this.getContext(index - 1));\n          drawRadiusLine(this, optsAtIndex, offset, labelCount);\n        }\n      });\n    }\n    if (angleLines.display) {\n      ctx.save();\n      for (i = labelCount - 1; i >= 0; i--) {\n        const optsAtIndex = angleLines.setContext(this.getPointLabelContext(i));\n        const {color, lineWidth} = optsAtIndex;\n        if (!lineWidth || !color) {\n          continue;\n        }\n        ctx.lineWidth = lineWidth;\n        ctx.strokeStyle = color;\n        ctx.setLineDash(optsAtIndex.borderDash);\n        ctx.lineDashOffset = optsAtIndex.borderDashOffset;\n        offset = this.getDistanceFromCenterForValue(opts.ticks.reverse ? this.min : this.max);\n        position = this.getPointPosition(i, offset);\n        ctx.beginPath();\n        ctx.moveTo(this.xCenter, this.yCenter);\n        ctx.lineTo(position.x, position.y);\n        ctx.stroke();\n      }\n      ctx.restore();\n    }\n  }\n  drawBorder() {}\n  drawLabels() {\n    const ctx = this.ctx;\n    const opts = this.options;\n    const tickOpts = opts.ticks;\n    if (!tickOpts.display) {\n      return;\n    }\n    const startAngle = this.getIndexAngle(0);\n    let offset, width;\n    ctx.save();\n    ctx.translate(this.xCenter, this.yCenter);\n    ctx.rotate(startAngle);\n    ctx.textAlign = 'center';\n    ctx.textBaseline = 'middle';\n    this.ticks.forEach((tick, index) => {\n      if (index === 0 && !opts.reverse) {\n        return;\n      }\n      const optsAtIndex = tickOpts.setContext(this.getContext(index));\n      const tickFont = toFont(optsAtIndex.font);\n      offset = this.getDistanceFromCenterForValue(this.ticks[index].value);\n      if (optsAtIndex.showLabelBackdrop) {\n        ctx.font = tickFont.string;\n        width = ctx.measureText(tick.label).width;\n        ctx.fillStyle = optsAtIndex.backdropColor;\n        const padding = toPadding(optsAtIndex.backdropPadding);\n        ctx.fillRect(\n          -width / 2 - padding.left,\n          -offset - tickFont.size / 2 - padding.top,\n          width + padding.width,\n          tickFont.size + padding.height\n        );\n      }\n      renderText(ctx, tick.label, 0, -offset, tickFont, {\n        color: optsAtIndex.color,\n      });\n    });\n    ctx.restore();\n  }\n  drawTitle() {}\n}\nRadialLinearScale.id = 'radialLinear';\nRadialLinearScale.defaults = {\n  display: true,\n  animate: true,\n  position: 'chartArea',\n  angleLines: {\n    display: true,\n    lineWidth: 1,\n    borderDash: [],\n    borderDashOffset: 0.0\n  },\n  grid: {\n    circular: false\n  },\n  startAngle: 0,\n  ticks: {\n    showLabelBackdrop: true,\n    callback: Ticks.formatters.numeric\n  },\n  pointLabels: {\n    backdropColor: undefined,\n    backdropPadding: 2,\n    display: true,\n    font: {\n      size: 10\n    },\n    callback(label) {\n      return label;\n    },\n    padding: 5,\n    centerPointLabels: false\n  }\n};\nRadialLinearScale.defaultRoutes = {\n  'angleLines.color': 'borderColor',\n  'pointLabels.color': 'color',\n  'ticks.color': 'color'\n};\nRadialLinearScale.descriptors = {\n  angleLines: {\n    _fallback: 'grid'\n  }\n};\n\nconst INTERVALS = {\n  millisecond: {common: true, size: 1, steps: 1000},\n  second: {common: true, size: 1000, steps: 60},\n  minute: {common: true, size: 60000, steps: 60},\n  hour: {common: true, size: 3600000, steps: 24},\n  day: {common: true, size: 86400000, steps: 30},\n  week: {common: false, size: 604800000, steps: 4},\n  month: {common: true, size: 2.628e9, steps: 12},\n  quarter: {common: false, size: 7.884e9, steps: 4},\n  year: {common: true, size: 3.154e10}\n};\nconst UNITS = (Object.keys(INTERVALS));\nfunction sorter(a, b) {\n  return a - b;\n}\nfunction parse(scale, input) {\n  if (isNullOrUndef(input)) {\n    return null;\n  }\n  const adapter = scale._adapter;\n  const {parser, round, isoWeekday} = scale._parseOpts;\n  let value = input;\n  if (typeof parser === 'function') {\n    value = parser(value);\n  }\n  if (!isNumberFinite(value)) {\n    value = typeof parser === 'string'\n      ? adapter.parse(value, parser)\n      : adapter.parse(value);\n  }\n  if (value === null) {\n    return null;\n  }\n  if (round) {\n    value = round === 'week' && (isNumber(isoWeekday) || isoWeekday === true)\n      ? adapter.startOf(value, 'isoWeek', isoWeekday)\n      : adapter.startOf(value, round);\n  }\n  return +value;\n}\nfunction determineUnitForAutoTicks(minUnit, min, max, capacity) {\n  const ilen = UNITS.length;\n  for (let i = UNITS.indexOf(minUnit); i < ilen - 1; ++i) {\n    const interval = INTERVALS[UNITS[i]];\n    const factor = interval.steps ? interval.steps : Number.MAX_SAFE_INTEGER;\n    if (interval.common && Math.ceil((max - min) / (factor * interval.size)) <= capacity) {\n      return UNITS[i];\n    }\n  }\n  return UNITS[ilen - 1];\n}\nfunction determineUnitForFormatting(scale, numTicks, minUnit, min, max) {\n  for (let i = UNITS.length - 1; i >= UNITS.indexOf(minUnit); i--) {\n    const unit = UNITS[i];\n    if (INTERVALS[unit].common && scale._adapter.diff(max, min, unit) >= numTicks - 1) {\n      return unit;\n    }\n  }\n  return UNITS[minUnit ? UNITS.indexOf(minUnit) : 0];\n}\nfunction determineMajorUnit(unit) {\n  for (let i = UNITS.indexOf(unit) + 1, ilen = UNITS.length; i < ilen; ++i) {\n    if (INTERVALS[UNITS[i]].common) {\n      return UNITS[i];\n    }\n  }\n}\nfunction addTick(ticks, time, timestamps) {\n  if (!timestamps) {\n    ticks[time] = true;\n  } else if (timestamps.length) {\n    const {lo, hi} = _lookup(timestamps, time);\n    const timestamp = timestamps[lo] >= time ? timestamps[lo] : timestamps[hi];\n    ticks[timestamp] = true;\n  }\n}\nfunction setMajorTicks(scale, ticks, map, majorUnit) {\n  const adapter = scale._adapter;\n  const first = +adapter.startOf(ticks[0].value, majorUnit);\n  const last = ticks[ticks.length - 1].value;\n  let major, index;\n  for (major = first; major <= last; major = +adapter.add(major, 1, majorUnit)) {\n    index = map[major];\n    if (index >= 0) {\n      ticks[index].major = true;\n    }\n  }\n  return ticks;\n}\nfunction ticksFromTimestamps(scale, values, majorUnit) {\n  const ticks = [];\n  const map = {};\n  const ilen = values.length;\n  let i, value;\n  for (i = 0; i < ilen; ++i) {\n    value = values[i];\n    map[value] = i;\n    ticks.push({\n      value,\n      major: false\n    });\n  }\n  return (ilen === 0 || !majorUnit) ? ticks : setMajorTicks(scale, ticks, map, majorUnit);\n}\nclass TimeScale extends Scale {\n  constructor(props) {\n    super(props);\n    this._cache = {\n      data: [],\n      labels: [],\n      all: []\n    };\n    this._unit = 'day';\n    this._majorUnit = undefined;\n    this._offsets = {};\n    this._normalized = false;\n    this._parseOpts = undefined;\n  }\n  init(scaleOpts, opts) {\n    const time = scaleOpts.time || (scaleOpts.time = {});\n    const adapter = this._adapter = new adapters._date(scaleOpts.adapters.date);\n    mergeIf(time.displayFormats, adapter.formats());\n    this._parseOpts = {\n      parser: time.parser,\n      round: time.round,\n      isoWeekday: time.isoWeekday\n    };\n    super.init(scaleOpts);\n    this._normalized = opts.normalized;\n  }\n  parse(raw, index) {\n    if (raw === undefined) {\n      return null;\n    }\n    return parse(this, raw);\n  }\n  beforeLayout() {\n    super.beforeLayout();\n    this._cache = {\n      data: [],\n      labels: [],\n      all: []\n    };\n  }\n  determineDataLimits() {\n    const options = this.options;\n    const adapter = this._adapter;\n    const unit = options.time.unit || 'day';\n    let {min, max, minDefined, maxDefined} = this.getUserBounds();\n    function _applyBounds(bounds) {\n      if (!minDefined && !isNaN(bounds.min)) {\n        min = Math.min(min, bounds.min);\n      }\n      if (!maxDefined && !isNaN(bounds.max)) {\n        max = Math.max(max, bounds.max);\n      }\n    }\n    if (!minDefined || !maxDefined) {\n      _applyBounds(this._getLabelBounds());\n      if (options.bounds !== 'ticks' || options.ticks.source !== 'labels') {\n        _applyBounds(this.getMinMax(false));\n      }\n    }\n    min = isNumberFinite(min) && !isNaN(min) ? min : +adapter.startOf(Date.now(), unit);\n    max = isNumberFinite(max) && !isNaN(max) ? max : +adapter.endOf(Date.now(), unit) + 1;\n    this.min = Math.min(min, max - 1);\n    this.max = Math.max(min + 1, max);\n  }\n  _getLabelBounds() {\n    const arr = this.getLabelTimestamps();\n    let min = Number.POSITIVE_INFINITY;\n    let max = Number.NEGATIVE_INFINITY;\n    if (arr.length) {\n      min = arr[0];\n      max = arr[arr.length - 1];\n    }\n    return {min, max};\n  }\n  buildTicks() {\n    const options = this.options;\n    const timeOpts = options.time;\n    const tickOpts = options.ticks;\n    const timestamps = tickOpts.source === 'labels' ? this.getLabelTimestamps() : this._generate();\n    if (options.bounds === 'ticks' && timestamps.length) {\n      this.min = this._userMin || timestamps[0];\n      this.max = this._userMax || timestamps[timestamps.length - 1];\n    }\n    const min = this.min;\n    const max = this.max;\n    const ticks = _filterBetween(timestamps, min, max);\n    this._unit = timeOpts.unit || (tickOpts.autoSkip\n      ? determineUnitForAutoTicks(timeOpts.minUnit, this.min, this.max, this._getLabelCapacity(min))\n      : determineUnitForFormatting(this, ticks.length, timeOpts.minUnit, this.min, this.max));\n    this._majorUnit = !tickOpts.major.enabled || this._unit === 'year' ? undefined\n      : determineMajorUnit(this._unit);\n    this.initOffsets(timestamps);\n    if (options.reverse) {\n      ticks.reverse();\n    }\n    return ticksFromTimestamps(this, ticks, this._majorUnit);\n  }\n  afterAutoSkip() {\n    if (this.options.offsetAfterAutoskip) {\n      this.initOffsets(this.ticks.map(tick => +tick.value));\n    }\n  }\n  initOffsets(timestamps) {\n    let start = 0;\n    let end = 0;\n    let first, last;\n    if (this.options.offset && timestamps.length) {\n      first = this.getDecimalForValue(timestamps[0]);\n      if (timestamps.length === 1) {\n        start = 1 - first;\n      } else {\n        start = (this.getDecimalForValue(timestamps[1]) - first) / 2;\n      }\n      last = this.getDecimalForValue(timestamps[timestamps.length - 1]);\n      if (timestamps.length === 1) {\n        end = last;\n      } else {\n        end = (last - this.getDecimalForValue(timestamps[timestamps.length - 2])) / 2;\n      }\n    }\n    const limit = timestamps.length < 3 ? 0.5 : 0.25;\n    start = _limitValue(start, 0, limit);\n    end = _limitValue(end, 0, limit);\n    this._offsets = {start, end, factor: 1 / (start + 1 + end)};\n  }\n  _generate() {\n    const adapter = this._adapter;\n    const min = this.min;\n    const max = this.max;\n    const options = this.options;\n    const timeOpts = options.time;\n    const minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, this._getLabelCapacity(min));\n    const stepSize = valueOrDefault(timeOpts.stepSize, 1);\n    const weekday = minor === 'week' ? timeOpts.isoWeekday : false;\n    const hasWeekday = isNumber(weekday) || weekday === true;\n    const ticks = {};\n    let first = min;\n    let time, count;\n    if (hasWeekday) {\n      first = +adapter.startOf(first, 'isoWeek', weekday);\n    }\n    first = +adapter.startOf(first, hasWeekday ? 'day' : minor);\n    if (adapter.diff(max, min, minor) > 100000 * stepSize) {\n      throw new Error(min + ' and ' + max + ' are too far apart with stepSize of ' + stepSize + ' ' + minor);\n    }\n    const timestamps = options.ticks.source === 'data' && this.getDataTimestamps();\n    for (time = first, count = 0; time < max; time = +adapter.add(time, stepSize, minor), count++) {\n      addTick(ticks, time, timestamps);\n    }\n    if (time === max || options.bounds === 'ticks' || count === 1) {\n      addTick(ticks, time, timestamps);\n    }\n    return Object.keys(ticks).sort((a, b) => a - b).map(x => +x);\n  }\n  getLabelForValue(value) {\n    const adapter = this._adapter;\n    const timeOpts = this.options.time;\n    if (timeOpts.tooltipFormat) {\n      return adapter.format(value, timeOpts.tooltipFormat);\n    }\n    return adapter.format(value, timeOpts.displayFormats.datetime);\n  }\n  _tickFormatFunction(time, index, ticks, format) {\n    const options = this.options;\n    const formats = options.time.displayFormats;\n    const unit = this._unit;\n    const majorUnit = this._majorUnit;\n    const minorFormat = unit && formats[unit];\n    const majorFormat = majorUnit && formats[majorUnit];\n    const tick = ticks[index];\n    const major = majorUnit && majorFormat && tick && tick.major;\n    const label = this._adapter.format(time, format || (major ? majorFormat : minorFormat));\n    const formatter = options.ticks.callback;\n    return formatter ? callback(formatter, [label, index, ticks], this) : label;\n  }\n  generateTickLabels(ticks) {\n    let i, ilen, tick;\n    for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n      tick = ticks[i];\n      tick.label = this._tickFormatFunction(tick.value, i, ticks);\n    }\n  }\n  getDecimalForValue(value) {\n    return value === null ? NaN : (value - this.min) / (this.max - this.min);\n  }\n  getPixelForValue(value) {\n    const offsets = this._offsets;\n    const pos = this.getDecimalForValue(value);\n    return this.getPixelForDecimal((offsets.start + pos) * offsets.factor);\n  }\n  getValueForPixel(pixel) {\n    const offsets = this._offsets;\n    const pos = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n    return this.min + pos * (this.max - this.min);\n  }\n  _getLabelSize(label) {\n    const ticksOpts = this.options.ticks;\n    const tickLabelWidth = this.ctx.measureText(label).width;\n    const angle = toRadians(this.isHorizontal() ? ticksOpts.maxRotation : ticksOpts.minRotation);\n    const cosRotation = Math.cos(angle);\n    const sinRotation = Math.sin(angle);\n    const tickFontSize = this._resolveTickFontOptions(0).size;\n    return {\n      w: (tickLabelWidth * cosRotation) + (tickFontSize * sinRotation),\n      h: (tickLabelWidth * sinRotation) + (tickFontSize * cosRotation)\n    };\n  }\n  _getLabelCapacity(exampleTime) {\n    const timeOpts = this.options.time;\n    const displayFormats = timeOpts.displayFormats;\n    const format = displayFormats[timeOpts.unit] || displayFormats.millisecond;\n    const exampleLabel = this._tickFormatFunction(exampleTime, 0, ticksFromTimestamps(this, [exampleTime], this._majorUnit), format);\n    const size = this._getLabelSize(exampleLabel);\n    const capacity = Math.floor(this.isHorizontal() ? this.width / size.w : this.height / size.h) - 1;\n    return capacity > 0 ? capacity : 1;\n  }\n  getDataTimestamps() {\n    let timestamps = this._cache.data || [];\n    let i, ilen;\n    if (timestamps.length) {\n      return timestamps;\n    }\n    const metas = this.getMatchingVisibleMetas();\n    if (this._normalized && metas.length) {\n      return (this._cache.data = metas[0].controller.getAllParsedValues(this));\n    }\n    for (i = 0, ilen = metas.length; i < ilen; ++i) {\n      timestamps = timestamps.concat(metas[i].controller.getAllParsedValues(this));\n    }\n    return (this._cache.data = this.normalize(timestamps));\n  }\n  getLabelTimestamps() {\n    const timestamps = this._cache.labels || [];\n    let i, ilen;\n    if (timestamps.length) {\n      return timestamps;\n    }\n    const labels = this.getLabels();\n    for (i = 0, ilen = labels.length; i < ilen; ++i) {\n      timestamps.push(parse(this, labels[i]));\n    }\n    return (this._cache.labels = this._normalized ? timestamps : this.normalize(timestamps));\n  }\n  normalize(values) {\n    return _arrayUnique(values.sort(sorter));\n  }\n}\nTimeScale.id = 'time';\nTimeScale.defaults = {\n  bounds: 'data',\n  adapters: {},\n  time: {\n    parser: false,\n    unit: false,\n    round: false,\n    isoWeekday: false,\n    minUnit: 'millisecond',\n    displayFormats: {}\n  },\n  ticks: {\n    source: 'auto',\n    major: {\n      enabled: false\n    }\n  }\n};\n\nfunction interpolate(table, val, reverse) {\n  let lo = 0;\n  let hi = table.length - 1;\n  let prevSource, nextSource, prevTarget, nextTarget;\n  if (reverse) {\n    if (val >= table[lo].pos && val <= table[hi].pos) {\n      ({lo, hi} = _lookupByKey(table, 'pos', val));\n    }\n    ({pos: prevSource, time: prevTarget} = table[lo]);\n    ({pos: nextSource, time: nextTarget} = table[hi]);\n  } else {\n    if (val >= table[lo].time && val <= table[hi].time) {\n      ({lo, hi} = _lookupByKey(table, 'time', val));\n    }\n    ({time: prevSource, pos: prevTarget} = table[lo]);\n    ({time: nextSource, pos: nextTarget} = table[hi]);\n  }\n  const span = nextSource - prevSource;\n  return span ? prevTarget + (nextTarget - prevTarget) * (val - prevSource) / span : prevTarget;\n}\nclass TimeSeriesScale extends TimeScale {\n  constructor(props) {\n    super(props);\n    this._table = [];\n    this._minPos = undefined;\n    this._tableRange = undefined;\n  }\n  initOffsets() {\n    const timestamps = this._getTimestampsForTable();\n    const table = this._table = this.buildLookupTable(timestamps);\n    this._minPos = interpolate(table, this.min);\n    this._tableRange = interpolate(table, this.max) - this._minPos;\n    super.initOffsets(timestamps);\n  }\n  buildLookupTable(timestamps) {\n    const {min, max} = this;\n    const items = [];\n    const table = [];\n    let i, ilen, prev, curr, next;\n    for (i = 0, ilen = timestamps.length; i < ilen; ++i) {\n      curr = timestamps[i];\n      if (curr >= min && curr <= max) {\n        items.push(curr);\n      }\n    }\n    if (items.length < 2) {\n      return [\n        {time: min, pos: 0},\n        {time: max, pos: 1}\n      ];\n    }\n    for (i = 0, ilen = items.length; i < ilen; ++i) {\n      next = items[i + 1];\n      prev = items[i - 1];\n      curr = items[i];\n      if (Math.round((next + prev) / 2) !== curr) {\n        table.push({time: curr, pos: i / (ilen - 1)});\n      }\n    }\n    return table;\n  }\n  _getTimestampsForTable() {\n    let timestamps = this._cache.all || [];\n    if (timestamps.length) {\n      return timestamps;\n    }\n    const data = this.getDataTimestamps();\n    const label = this.getLabelTimestamps();\n    if (data.length && label.length) {\n      timestamps = this.normalize(data.concat(label));\n    } else {\n      timestamps = data.length ? data : label;\n    }\n    timestamps = this._cache.all = timestamps;\n    return timestamps;\n  }\n  getDecimalForValue(value) {\n    return (interpolate(this._table, value) - this._minPos) / this._tableRange;\n  }\n  getValueForPixel(pixel) {\n    const offsets = this._offsets;\n    const decimal = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n    return interpolate(this._table, decimal * this._tableRange + this._minPos, true);\n  }\n}\nTimeSeriesScale.id = 'timeseries';\nTimeSeriesScale.defaults = TimeScale.defaults;\n\nvar scales = /*#__PURE__*/Object.freeze({\n__proto__: null,\nCategoryScale: CategoryScale,\nLinearScale: LinearScale,\nLogarithmicScale: LogarithmicScale,\nRadialLinearScale: RadialLinearScale,\nTimeScale: TimeScale,\nTimeSeriesScale: TimeSeriesScale\n});\n\nconst registerables = [\n  controllers,\n  elements,\n  plugins,\n  scales,\n];\n\nexport { Animation, Animations, ArcElement, BarController, BarElement, BasePlatform, BasicPlatform, BubbleController, CategoryScale, Chart, DatasetController, plugin_decimation as Decimation, DomPlatform, DoughnutController, Element, index as Filler, Interaction, plugin_legend as Legend, LineController, LineElement, LinearScale, LogarithmicScale, PieController, PointElement, PolarAreaController, RadarController, RadialLinearScale, Scale, ScatterController, plugin_subtitle as SubTitle, Ticks, TimeScale, TimeSeriesScale, plugin_title as Title, plugin_tooltip as Tooltip, adapters as _adapters, _detectPlatform, animator, controllers, elements, layouts, plugins, registerables, registry, scales };\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nexports.default = _get;\nvar _superPropBase = _interopRequireDefault(require(\"./_super_prop_base\"));\nfunction _get(target, property, receiver) {\n    return get(target, property, receiver);\n}\nfunction _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {\n        default: obj\n    };\n}\nfunction get(target1, property1, receiver1) {\n    if (typeof Reflect !== \"undefined\" && Reflect.get) {\n        get = Reflect.get;\n    } else {\n        get = function get(target, property, receiver) {\n            var base = (0, _superPropBase).default(target, property);\n            if (!base) return;\n            var desc = Object.getOwnPropertyDescriptor(base, property);\n            if (desc.get) {\n                return desc.get.call(receiver || target);\n            }\n            return desc.value;\n        };\n    }\n    return get(target1, property1, receiver1);\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nexports.default = _wrapNativeSuper;\nvar _construct = _interopRequireDefault(require(\"./_construct\"));\nvar _isNativeFunction = _interopRequireDefault(require(\"./_is_native_function\"));\nvar _getPrototypeOf = _interopRequireDefault(require(\"./_get_prototype_of\"));\nvar _setPrototypeOf = _interopRequireDefault(require(\"./_set_prototype_of\"));\nfunction _wrapNativeSuper(Class) {\n    return wrapNativeSuper(Class);\n}\nfunction _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {\n        default: obj\n    };\n}\nfunction wrapNativeSuper(Class1) {\n    var _cache = typeof Map === \"function\" ? new Map() : undefined;\n    wrapNativeSuper = function wrapNativeSuper(Class) {\n        if (Class === null || !(0, _isNativeFunction).default(Class)) return Class;\n        if (typeof Class !== \"function\") {\n            throw new TypeError(\"Super expression must either be null or a function\");\n        }\n        if (typeof _cache !== \"undefined\") {\n            if (_cache.has(Class)) return _cache.get(Class);\n            _cache.set(Class, Wrapper);\n        }\n        function Wrapper() {\n            return (0, _construct).default(Class, arguments, (0, _getPrototypeOf).default(this).constructor);\n        }\n        Wrapper.prototype = Object.create(Class.prototype, {\n            constructor: {\n                value: Wrapper,\n                enumerable: false,\n                writable: true,\n                configurable: true\n            }\n        });\n        return (0, _setPrototypeOf).default(Wrapper, Class);\n    };\n    return wrapNativeSuper(Class1);\n}\n","/*!\n * Chart.js v3.8.0\n * https://www.chartjs.org\n * (c) 2022 Chart.js Contributors\n * Released under the MIT License\n */\nfunction fontString(pixelSize, fontStyle, fontFamily) {\n  return fontStyle + ' ' + pixelSize + 'px ' + fontFamily;\n}\nconst requestAnimFrame = (function() {\n  if (typeof window === 'undefined') {\n    return function(callback) {\n      return callback();\n    };\n  }\n  return window.requestAnimationFrame;\n}());\nfunction throttled(fn, thisArg, updateFn) {\n  const updateArgs = updateFn || ((args) => Array.prototype.slice.call(args));\n  let ticking = false;\n  let args = [];\n  return function(...rest) {\n    args = updateArgs(rest);\n    if (!ticking) {\n      ticking = true;\n      requestAnimFrame.call(window, () => {\n        ticking = false;\n        fn.apply(thisArg, args);\n      });\n    }\n  };\n}\nfunction debounce(fn, delay) {\n  let timeout;\n  return function(...args) {\n    if (delay) {\n      clearTimeout(timeout);\n      timeout = setTimeout(fn, delay, args);\n    } else {\n      fn.apply(this, args);\n    }\n    return delay;\n  };\n}\nconst _toLeftRightCenter = (align) => align === 'start' ? 'left' : align === 'end' ? 'right' : 'center';\nconst _alignStartEnd = (align, start, end) => align === 'start' ? start : align === 'end' ? end : (start + end) / 2;\nconst _textX = (align, left, right, rtl) => {\n  const check = rtl ? 'left' : 'right';\n  return align === check ? right : align === 'center' ? (left + right) / 2 : left;\n};\n\nfunction noop() {}\nconst uid = (function() {\n  let id = 0;\n  return function() {\n    return id++;\n  };\n}());\nfunction isNullOrUndef(value) {\n  return value === null || typeof value === 'undefined';\n}\nfunction isArray(value) {\n  if (Array.isArray && Array.isArray(value)) {\n    return true;\n  }\n  const type = Object.prototype.toString.call(value);\n  if (type.slice(0, 7) === '[object' && type.slice(-6) === 'Array]') {\n    return true;\n  }\n  return false;\n}\nfunction isObject(value) {\n  return value !== null && Object.prototype.toString.call(value) === '[object Object]';\n}\nconst isNumberFinite = (value) => (typeof value === 'number' || value instanceof Number) && isFinite(+value);\nfunction finiteOrDefault(value, defaultValue) {\n  return isNumberFinite(value) ? value : defaultValue;\n}\nfunction valueOrDefault(value, defaultValue) {\n  return typeof value === 'undefined' ? defaultValue : value;\n}\nconst toPercentage = (value, dimension) =>\n  typeof value === 'string' && value.endsWith('%') ?\n    parseFloat(value) / 100\n    : value / dimension;\nconst toDimension = (value, dimension) =>\n  typeof value === 'string' && value.endsWith('%') ?\n    parseFloat(value) / 100 * dimension\n    : +value;\nfunction callback(fn, args, thisArg) {\n  if (fn && typeof fn.call === 'function') {\n    return fn.apply(thisArg, args);\n  }\n}\nfunction each(loopable, fn, thisArg, reverse) {\n  let i, len, keys;\n  if (isArray(loopable)) {\n    len = loopable.length;\n    if (reverse) {\n      for (i = len - 1; i >= 0; i--) {\n        fn.call(thisArg, loopable[i], i);\n      }\n    } else {\n      for (i = 0; i < len; i++) {\n        fn.call(thisArg, loopable[i], i);\n      }\n    }\n  } else if (isObject(loopable)) {\n    keys = Object.keys(loopable);\n    len = keys.length;\n    for (i = 0; i < len; i++) {\n      fn.call(thisArg, loopable[keys[i]], keys[i]);\n    }\n  }\n}\nfunction _elementsEqual(a0, a1) {\n  let i, ilen, v0, v1;\n  if (!a0 || !a1 || a0.length !== a1.length) {\n    return false;\n  }\n  for (i = 0, ilen = a0.length; i < ilen; ++i) {\n    v0 = a0[i];\n    v1 = a1[i];\n    if (v0.datasetIndex !== v1.datasetIndex || v0.index !== v1.index) {\n      return false;\n    }\n  }\n  return true;\n}\nfunction clone$1(source) {\n  if (isArray(source)) {\n    return source.map(clone$1);\n  }\n  if (isObject(source)) {\n    const target = Object.create(null);\n    const keys = Object.keys(source);\n    const klen = keys.length;\n    let k = 0;\n    for (; k < klen; ++k) {\n      target[keys[k]] = clone$1(source[keys[k]]);\n    }\n    return target;\n  }\n  return source;\n}\nfunction isValidKey(key) {\n  return ['__proto__', 'prototype', 'constructor'].indexOf(key) === -1;\n}\nfunction _merger(key, target, source, options) {\n  if (!isValidKey(key)) {\n    return;\n  }\n  const tval = target[key];\n  const sval = source[key];\n  if (isObject(tval) && isObject(sval)) {\n    merge(tval, sval, options);\n  } else {\n    target[key] = clone$1(sval);\n  }\n}\nfunction merge(target, source, options) {\n  const sources = isArray(source) ? source : [source];\n  const ilen = sources.length;\n  if (!isObject(target)) {\n    return target;\n  }\n  options = options || {};\n  const merger = options.merger || _merger;\n  for (let i = 0; i < ilen; ++i) {\n    source = sources[i];\n    if (!isObject(source)) {\n      continue;\n    }\n    const keys = Object.keys(source);\n    for (let k = 0, klen = keys.length; k < klen; ++k) {\n      merger(keys[k], target, source, options);\n    }\n  }\n  return target;\n}\nfunction mergeIf(target, source) {\n  return merge(target, source, {merger: _mergerIf});\n}\nfunction _mergerIf(key, target, source) {\n  if (!isValidKey(key)) {\n    return;\n  }\n  const tval = target[key];\n  const sval = source[key];\n  if (isObject(tval) && isObject(sval)) {\n    mergeIf(tval, sval);\n  } else if (!Object.prototype.hasOwnProperty.call(target, key)) {\n    target[key] = clone$1(sval);\n  }\n}\nfunction _deprecated(scope, value, previous, current) {\n  if (value !== undefined) {\n    console.warn(scope + ': \"' + previous +\n\t\t\t'\" is deprecated. Please use \"' + current + '\" instead');\n  }\n}\nconst emptyString = '';\nconst dot = '.';\nfunction indexOfDotOrLength(key, start) {\n  const idx = key.indexOf(dot, start);\n  return idx === -1 ? key.length : idx;\n}\nfunction resolveObjectKey(obj, key) {\n  if (key === emptyString) {\n    return obj;\n  }\n  let pos = 0;\n  let idx = indexOfDotOrLength(key, pos);\n  while (obj && idx > pos) {\n    obj = obj[key.slice(pos, idx)];\n    pos = idx + 1;\n    idx = indexOfDotOrLength(key, pos);\n  }\n  return obj;\n}\nfunction _capitalize(str) {\n  return str.charAt(0).toUpperCase() + str.slice(1);\n}\nconst defined = (value) => typeof value !== 'undefined';\nconst isFunction = (value) => typeof value === 'function';\nconst setsEqual = (a, b) => {\n  if (a.size !== b.size) {\n    return false;\n  }\n  for (const item of a) {\n    if (!b.has(item)) {\n      return false;\n    }\n  }\n  return true;\n};\nfunction _isClickEvent(e) {\n  return e.type === 'mouseup' || e.type === 'click' || e.type === 'contextmenu';\n}\n\nconst PI = Math.PI;\nconst TAU = 2 * PI;\nconst PITAU = TAU + PI;\nconst INFINITY = Number.POSITIVE_INFINITY;\nconst RAD_PER_DEG = PI / 180;\nconst HALF_PI = PI / 2;\nconst QUARTER_PI = PI / 4;\nconst TWO_THIRDS_PI = PI * 2 / 3;\nconst log10 = Math.log10;\nconst sign = Math.sign;\nfunction niceNum(range) {\n  const roundedRange = Math.round(range);\n  range = almostEquals(range, roundedRange, range / 1000) ? roundedRange : range;\n  const niceRange = Math.pow(10, Math.floor(log10(range)));\n  const fraction = range / niceRange;\n  const niceFraction = fraction <= 1 ? 1 : fraction <= 2 ? 2 : fraction <= 5 ? 5 : 10;\n  return niceFraction * niceRange;\n}\nfunction _factorize(value) {\n  const result = [];\n  const sqrt = Math.sqrt(value);\n  let i;\n  for (i = 1; i < sqrt; i++) {\n    if (value % i === 0) {\n      result.push(i);\n      result.push(value / i);\n    }\n  }\n  if (sqrt === (sqrt | 0)) {\n    result.push(sqrt);\n  }\n  result.sort((a, b) => a - b).pop();\n  return result;\n}\nfunction isNumber(n) {\n  return !isNaN(parseFloat(n)) && isFinite(n);\n}\nfunction almostEquals(x, y, epsilon) {\n  return Math.abs(x - y) < epsilon;\n}\nfunction almostWhole(x, epsilon) {\n  const rounded = Math.round(x);\n  return ((rounded - epsilon) <= x) && ((rounded + epsilon) >= x);\n}\nfunction _setMinAndMaxByKey(array, target, property) {\n  let i, ilen, value;\n  for (i = 0, ilen = array.length; i < ilen; i++) {\n    value = array[i][property];\n    if (!isNaN(value)) {\n      target.min = Math.min(target.min, value);\n      target.max = Math.max(target.max, value);\n    }\n  }\n}\nfunction toRadians(degrees) {\n  return degrees * (PI / 180);\n}\nfunction toDegrees(radians) {\n  return radians * (180 / PI);\n}\nfunction _decimalPlaces(x) {\n  if (!isNumberFinite(x)) {\n    return;\n  }\n  let e = 1;\n  let p = 0;\n  while (Math.round(x * e) / e !== x) {\n    e *= 10;\n    p++;\n  }\n  return p;\n}\nfunction getAngleFromPoint(centrePoint, anglePoint) {\n  const distanceFromXCenter = anglePoint.x - centrePoint.x;\n  const distanceFromYCenter = anglePoint.y - centrePoint.y;\n  const radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter);\n  let angle = Math.atan2(distanceFromYCenter, distanceFromXCenter);\n  if (angle < (-0.5 * PI)) {\n    angle += TAU;\n  }\n  return {\n    angle,\n    distance: radialDistanceFromCenter\n  };\n}\nfunction distanceBetweenPoints(pt1, pt2) {\n  return Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2));\n}\nfunction _angleDiff(a, b) {\n  return (a - b + PITAU) % TAU - PI;\n}\nfunction _normalizeAngle(a) {\n  return (a % TAU + TAU) % TAU;\n}\nfunction _angleBetween(angle, start, end, sameAngleIsFullCircle) {\n  const a = _normalizeAngle(angle);\n  const s = _normalizeAngle(start);\n  const e = _normalizeAngle(end);\n  const angleToStart = _normalizeAngle(s - a);\n  const angleToEnd = _normalizeAngle(e - a);\n  const startToAngle = _normalizeAngle(a - s);\n  const endToAngle = _normalizeAngle(a - e);\n  return a === s || a === e || (sameAngleIsFullCircle && s === e)\n    || (angleToStart > angleToEnd && startToAngle < endToAngle);\n}\nfunction _limitValue(value, min, max) {\n  return Math.max(min, Math.min(max, value));\n}\nfunction _int16Range(value) {\n  return _limitValue(value, -32768, 32767);\n}\nfunction _isBetween(value, start, end, epsilon = 1e-6) {\n  return value >= Math.min(start, end) - epsilon && value <= Math.max(start, end) + epsilon;\n}\n\nconst atEdge = (t) => t === 0 || t === 1;\nconst elasticIn = (t, s, p) => -(Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * TAU / p));\nconst elasticOut = (t, s, p) => Math.pow(2, -10 * t) * Math.sin((t - s) * TAU / p) + 1;\nconst effects = {\n  linear: t => t,\n  easeInQuad: t => t * t,\n  easeOutQuad: t => -t * (t - 2),\n  easeInOutQuad: t => ((t /= 0.5) < 1)\n    ? 0.5 * t * t\n    : -0.5 * ((--t) * (t - 2) - 1),\n  easeInCubic: t => t * t * t,\n  easeOutCubic: t => (t -= 1) * t * t + 1,\n  easeInOutCubic: t => ((t /= 0.5) < 1)\n    ? 0.5 * t * t * t\n    : 0.5 * ((t -= 2) * t * t + 2),\n  easeInQuart: t => t * t * t * t,\n  easeOutQuart: t => -((t -= 1) * t * t * t - 1),\n  easeInOutQuart: t => ((t /= 0.5) < 1)\n    ? 0.5 * t * t * t * t\n    : -0.5 * ((t -= 2) * t * t * t - 2),\n  easeInQuint: t => t * t * t * t * t,\n  easeOutQuint: t => (t -= 1) * t * t * t * t + 1,\n  easeInOutQuint: t => ((t /= 0.5) < 1)\n    ? 0.5 * t * t * t * t * t\n    : 0.5 * ((t -= 2) * t * t * t * t + 2),\n  easeInSine: t => -Math.cos(t * HALF_PI) + 1,\n  easeOutSine: t => Math.sin(t * HALF_PI),\n  easeInOutSine: t => -0.5 * (Math.cos(PI * t) - 1),\n  easeInExpo: t => (t === 0) ? 0 : Math.pow(2, 10 * (t - 1)),\n  easeOutExpo: t => (t === 1) ? 1 : -Math.pow(2, -10 * t) + 1,\n  easeInOutExpo: t => atEdge(t) ? t : t < 0.5\n    ? 0.5 * Math.pow(2, 10 * (t * 2 - 1))\n    : 0.5 * (-Math.pow(2, -10 * (t * 2 - 1)) + 2),\n  easeInCirc: t => (t >= 1) ? t : -(Math.sqrt(1 - t * t) - 1),\n  easeOutCirc: t => Math.sqrt(1 - (t -= 1) * t),\n  easeInOutCirc: t => ((t /= 0.5) < 1)\n    ? -0.5 * (Math.sqrt(1 - t * t) - 1)\n    : 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1),\n  easeInElastic: t => atEdge(t) ? t : elasticIn(t, 0.075, 0.3),\n  easeOutElastic: t => atEdge(t) ? t : elasticOut(t, 0.075, 0.3),\n  easeInOutElastic(t) {\n    const s = 0.1125;\n    const p = 0.45;\n    return atEdge(t) ? t :\n      t < 0.5\n        ? 0.5 * elasticIn(t * 2, s, p)\n        : 0.5 + 0.5 * elasticOut(t * 2 - 1, s, p);\n  },\n  easeInBack(t) {\n    const s = 1.70158;\n    return t * t * ((s + 1) * t - s);\n  },\n  easeOutBack(t) {\n    const s = 1.70158;\n    return (t -= 1) * t * ((s + 1) * t + s) + 1;\n  },\n  easeInOutBack(t) {\n    let s = 1.70158;\n    if ((t /= 0.5) < 1) {\n      return 0.5 * (t * t * (((s *= (1.525)) + 1) * t - s));\n    }\n    return 0.5 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2);\n  },\n  easeInBounce: t => 1 - effects.easeOutBounce(1 - t),\n  easeOutBounce(t) {\n    const m = 7.5625;\n    const d = 2.75;\n    if (t < (1 / d)) {\n      return m * t * t;\n    }\n    if (t < (2 / d)) {\n      return m * (t -= (1.5 / d)) * t + 0.75;\n    }\n    if (t < (2.5 / d)) {\n      return m * (t -= (2.25 / d)) * t + 0.9375;\n    }\n    return m * (t -= (2.625 / d)) * t + 0.984375;\n  },\n  easeInOutBounce: t => (t < 0.5)\n    ? effects.easeInBounce(t * 2) * 0.5\n    : effects.easeOutBounce(t * 2 - 1) * 0.5 + 0.5,\n};\n\n/*!\n * @kurkle/color v0.2.1\n * https://github.com/kurkle/color#readme\n * (c) 2022 Jukka Kurkela\n * Released under the MIT License\n */\nfunction round(v) {\n  return v + 0.5 | 0;\n}\nconst lim = (v, l, h) => Math.max(Math.min(v, h), l);\nfunction p2b(v) {\n  return lim(round(v * 2.55), 0, 255);\n}\nfunction n2b(v) {\n  return lim(round(v * 255), 0, 255);\n}\nfunction b2n(v) {\n  return lim(round(v / 2.55) / 100, 0, 1);\n}\nfunction n2p(v) {\n  return lim(round(v * 100), 0, 100);\n}\nconst map$1 = {0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, A: 10, B: 11, C: 12, D: 13, E: 14, F: 15, a: 10, b: 11, c: 12, d: 13, e: 14, f: 15};\nconst hex = [...'0123456789ABCDEF'];\nconst h1 = b => hex[b & 0xF];\nconst h2 = b => hex[(b & 0xF0) >> 4] + hex[b & 0xF];\nconst eq = b => ((b & 0xF0) >> 4) === (b & 0xF);\nconst isShort = v => eq(v.r) && eq(v.g) && eq(v.b) && eq(v.a);\nfunction hexParse(str) {\n  var len = str.length;\n  var ret;\n  if (str[0] === '#') {\n    if (len === 4 || len === 5) {\n      ret = {\n        r: 255 & map$1[str[1]] * 17,\n        g: 255 & map$1[str[2]] * 17,\n        b: 255 & map$1[str[3]] * 17,\n        a: len === 5 ? map$1[str[4]] * 17 : 255\n      };\n    } else if (len === 7 || len === 9) {\n      ret = {\n        r: map$1[str[1]] << 4 | map$1[str[2]],\n        g: map$1[str[3]] << 4 | map$1[str[4]],\n        b: map$1[str[5]] << 4 | map$1[str[6]],\n        a: len === 9 ? (map$1[str[7]] << 4 | map$1[str[8]]) : 255\n      };\n    }\n  }\n  return ret;\n}\nconst alpha = (a, f) => a < 255 ? f(a) : '';\nfunction hexString(v) {\n  var f = isShort(v) ? h1 : h2;\n  return v\n    ? '#' + f(v.r) + f(v.g) + f(v.b) + alpha(v.a, f)\n    : undefined;\n}\nconst HUE_RE = /^(hsla?|hwb|hsv)\\(\\s*([-+.e\\d]+)(?:deg)?[\\s,]+([-+.e\\d]+)%[\\s,]+([-+.e\\d]+)%(?:[\\s,]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction hsl2rgbn(h, s, l) {\n  const a = s * Math.min(l, 1 - l);\n  const f = (n, k = (n + h / 30) % 12) => l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);\n  return [f(0), f(8), f(4)];\n}\nfunction hsv2rgbn(h, s, v) {\n  const f = (n, k = (n + h / 60) % 6) => v - v * s * Math.max(Math.min(k, 4 - k, 1), 0);\n  return [f(5), f(3), f(1)];\n}\nfunction hwb2rgbn(h, w, b) {\n  const rgb = hsl2rgbn(h, 1, 0.5);\n  let i;\n  if (w + b > 1) {\n    i = 1 / (w + b);\n    w *= i;\n    b *= i;\n  }\n  for (i = 0; i < 3; i++) {\n    rgb[i] *= 1 - w - b;\n    rgb[i] += w;\n  }\n  return rgb;\n}\nfunction hueValue(r, g, b, d, max) {\n  if (r === max) {\n    return ((g - b) / d) + (g < b ? 6 : 0);\n  }\n  if (g === max) {\n    return (b - r) / d + 2;\n  }\n  return (r - g) / d + 4;\n}\nfunction rgb2hsl(v) {\n  const range = 255;\n  const r = v.r / range;\n  const g = v.g / range;\n  const b = v.b / range;\n  const max = Math.max(r, g, b);\n  const min = Math.min(r, g, b);\n  const l = (max + min) / 2;\n  let h, s, d;\n  if (max !== min) {\n    d = max - min;\n    s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n    h = hueValue(r, g, b, d, max);\n    h = h * 60 + 0.5;\n  }\n  return [h | 0, s || 0, l];\n}\nfunction calln(f, a, b, c) {\n  return (\n    Array.isArray(a)\n      ? f(a[0], a[1], a[2])\n      : f(a, b, c)\n  ).map(n2b);\n}\nfunction hsl2rgb(h, s, l) {\n  return calln(hsl2rgbn, h, s, l);\n}\nfunction hwb2rgb(h, w, b) {\n  return calln(hwb2rgbn, h, w, b);\n}\nfunction hsv2rgb(h, s, v) {\n  return calln(hsv2rgbn, h, s, v);\n}\nfunction hue(h) {\n  return (h % 360 + 360) % 360;\n}\nfunction hueParse(str) {\n  const m = HUE_RE.exec(str);\n  let a = 255;\n  let v;\n  if (!m) {\n    return;\n  }\n  if (m[5] !== v) {\n    a = m[6] ? p2b(+m[5]) : n2b(+m[5]);\n  }\n  const h = hue(+m[2]);\n  const p1 = +m[3] / 100;\n  const p2 = +m[4] / 100;\n  if (m[1] === 'hwb') {\n    v = hwb2rgb(h, p1, p2);\n  } else if (m[1] === 'hsv') {\n    v = hsv2rgb(h, p1, p2);\n  } else {\n    v = hsl2rgb(h, p1, p2);\n  }\n  return {\n    r: v[0],\n    g: v[1],\n    b: v[2],\n    a: a\n  };\n}\nfunction rotate(v, deg) {\n  var h = rgb2hsl(v);\n  h[0] = hue(h[0] + deg);\n  h = hsl2rgb(h);\n  v.r = h[0];\n  v.g = h[1];\n  v.b = h[2];\n}\nfunction hslString(v) {\n  if (!v) {\n    return;\n  }\n  const a = rgb2hsl(v);\n  const h = a[0];\n  const s = n2p(a[1]);\n  const l = n2p(a[2]);\n  return v.a < 255\n    ? `hsla(${h}, ${s}%, ${l}%, ${b2n(v.a)})`\n    : `hsl(${h}, ${s}%, ${l}%)`;\n}\nconst map = {\n  x: 'dark',\n  Z: 'light',\n  Y: 're',\n  X: 'blu',\n  W: 'gr',\n  V: 'medium',\n  U: 'slate',\n  A: 'ee',\n  T: 'ol',\n  S: 'or',\n  B: 'ra',\n  C: 'lateg',\n  D: 'ights',\n  R: 'in',\n  Q: 'turquois',\n  E: 'hi',\n  P: 'ro',\n  O: 'al',\n  N: 'le',\n  M: 'de',\n  L: 'yello',\n  F: 'en',\n  K: 'ch',\n  G: 'arks',\n  H: 'ea',\n  I: 'ightg',\n  J: 'wh'\n};\nconst names$1 = {\n  OiceXe: 'f0f8ff',\n  antiquewEte: 'faebd7',\n  aqua: 'ffff',\n  aquamarRe: '7fffd4',\n  azuY: 'f0ffff',\n  beige: 'f5f5dc',\n  bisque: 'ffe4c4',\n  black: '0',\n  blanKedOmond: 'ffebcd',\n  Xe: 'ff',\n  XeviTet: '8a2be2',\n  bPwn: 'a52a2a',\n  burlywood: 'deb887',\n  caMtXe: '5f9ea0',\n  KartYuse: '7fff00',\n  KocTate: 'd2691e',\n  cSO: 'ff7f50',\n  cSnflowerXe: '6495ed',\n  cSnsilk: 'fff8dc',\n  crimson: 'dc143c',\n  cyan: 'ffff',\n  xXe: '8b',\n  xcyan: '8b8b',\n  xgTMnPd: 'b8860b',\n  xWay: 'a9a9a9',\n  xgYF: '6400',\n  xgYy: 'a9a9a9',\n  xkhaki: 'bdb76b',\n  xmagFta: '8b008b',\n  xTivegYF: '556b2f',\n  xSange: 'ff8c00',\n  xScEd: '9932cc',\n  xYd: '8b0000',\n  xsOmon: 'e9967a',\n  xsHgYF: '8fbc8f',\n  xUXe: '483d8b',\n  xUWay: '2f4f4f',\n  xUgYy: '2f4f4f',\n  xQe: 'ced1',\n  xviTet: '9400d3',\n  dAppRk: 'ff1493',\n  dApskyXe: 'bfff',\n  dimWay: '696969',\n  dimgYy: '696969',\n  dodgerXe: '1e90ff',\n  fiYbrick: 'b22222',\n  flSOwEte: 'fffaf0',\n  foYstWAn: '228b22',\n  fuKsia: 'ff00ff',\n  gaRsbSo: 'dcdcdc',\n  ghostwEte: 'f8f8ff',\n  gTd: 'ffd700',\n  gTMnPd: 'daa520',\n  Way: '808080',\n  gYF: '8000',\n  gYFLw: 'adff2f',\n  gYy: '808080',\n  honeyMw: 'f0fff0',\n  hotpRk: 'ff69b4',\n  RdianYd: 'cd5c5c',\n  Rdigo: '4b0082',\n  ivSy: 'fffff0',\n  khaki: 'f0e68c',\n  lavFMr: 'e6e6fa',\n  lavFMrXsh: 'fff0f5',\n  lawngYF: '7cfc00',\n  NmoncEffon: 'fffacd',\n  ZXe: 'add8e6',\n  ZcSO: 'f08080',\n  Zcyan: 'e0ffff',\n  ZgTMnPdLw: 'fafad2',\n  ZWay: 'd3d3d3',\n  ZgYF: '90ee90',\n  ZgYy: 'd3d3d3',\n  ZpRk: 'ffb6c1',\n  ZsOmon: 'ffa07a',\n  ZsHgYF: '20b2aa',\n  ZskyXe: '87cefa',\n  ZUWay: '778899',\n  ZUgYy: '778899',\n  ZstAlXe: 'b0c4de',\n  ZLw: 'ffffe0',\n  lime: 'ff00',\n  limegYF: '32cd32',\n  lRF: 'faf0e6',\n  magFta: 'ff00ff',\n  maPon: '800000',\n  VaquamarRe: '66cdaa',\n  VXe: 'cd',\n  VScEd: 'ba55d3',\n  VpurpN: '9370db',\n  VsHgYF: '3cb371',\n  VUXe: '7b68ee',\n  VsprRggYF: 'fa9a',\n  VQe: '48d1cc',\n  VviTetYd: 'c71585',\n  midnightXe: '191970',\n  mRtcYam: 'f5fffa',\n  mistyPse: 'ffe4e1',\n  moccasR: 'ffe4b5',\n  navajowEte: 'ffdead',\n  navy: '80',\n  Tdlace: 'fdf5e6',\n  Tive: '808000',\n  TivedBb: '6b8e23',\n  Sange: 'ffa500',\n  SangeYd: 'ff4500',\n  ScEd: 'da70d6',\n  pOegTMnPd: 'eee8aa',\n  pOegYF: '98fb98',\n  pOeQe: 'afeeee',\n  pOeviTetYd: 'db7093',\n  papayawEp: 'ffefd5',\n  pHKpuff: 'ffdab9',\n  peru: 'cd853f',\n  pRk: 'ffc0cb',\n  plum: 'dda0dd',\n  powMrXe: 'b0e0e6',\n  purpN: '800080',\n  YbeccapurpN: '663399',\n  Yd: 'ff0000',\n  Psybrown: 'bc8f8f',\n  PyOXe: '4169e1',\n  saddNbPwn: '8b4513',\n  sOmon: 'fa8072',\n  sandybPwn: 'f4a460',\n  sHgYF: '2e8b57',\n  sHshell: 'fff5ee',\n  siFna: 'a0522d',\n  silver: 'c0c0c0',\n  skyXe: '87ceeb',\n  UXe: '6a5acd',\n  UWay: '708090',\n  UgYy: '708090',\n  snow: 'fffafa',\n  sprRggYF: 'ff7f',\n  stAlXe: '4682b4',\n  tan: 'd2b48c',\n  teO: '8080',\n  tEstN: 'd8bfd8',\n  tomato: 'ff6347',\n  Qe: '40e0d0',\n  viTet: 'ee82ee',\n  JHt: 'f5deb3',\n  wEte: 'ffffff',\n  wEtesmoke: 'f5f5f5',\n  Lw: 'ffff00',\n  LwgYF: '9acd32'\n};\nfunction unpack() {\n  const unpacked = {};\n  const keys = Object.keys(names$1);\n  const tkeys = Object.keys(map);\n  let i, j, k, ok, nk;\n  for (i = 0; i < keys.length; i++) {\n    ok = nk = keys[i];\n    for (j = 0; j < tkeys.length; j++) {\n      k = tkeys[j];\n      nk = nk.replace(k, map[k]);\n    }\n    k = parseInt(names$1[ok], 16);\n    unpacked[nk] = [k >> 16 & 0xFF, k >> 8 & 0xFF, k & 0xFF];\n  }\n  return unpacked;\n}\nlet names;\nfunction nameParse(str) {\n  if (!names) {\n    names = unpack();\n    names.transparent = [0, 0, 0, 0];\n  }\n  const a = names[str.toLowerCase()];\n  return a && {\n    r: a[0],\n    g: a[1],\n    b: a[2],\n    a: a.length === 4 ? a[3] : 255\n  };\n}\nconst RGB_RE = /^rgba?\\(\\s*([-+.\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?(?:[\\s,/]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction rgbParse(str) {\n  const m = RGB_RE.exec(str);\n  let a = 255;\n  let r, g, b;\n  if (!m) {\n    return;\n  }\n  if (m[7] !== r) {\n    const v = +m[7];\n    a = m[8] ? p2b(v) : lim(v * 255, 0, 255);\n  }\n  r = +m[1];\n  g = +m[3];\n  b = +m[5];\n  r = 255 & (m[2] ? p2b(r) : lim(r, 0, 255));\n  g = 255 & (m[4] ? p2b(g) : lim(g, 0, 255));\n  b = 255 & (m[6] ? p2b(b) : lim(b, 0, 255));\n  return {\n    r: r,\n    g: g,\n    b: b,\n    a: a\n  };\n}\nfunction rgbString(v) {\n  return v && (\n    v.a < 255\n      ? `rgba(${v.r}, ${v.g}, ${v.b}, ${b2n(v.a)})`\n      : `rgb(${v.r}, ${v.g}, ${v.b})`\n  );\n}\nconst to = v => v <= 0.0031308 ? v * 12.92 : Math.pow(v, 1.0 / 2.4) * 1.055 - 0.055;\nconst from = v => v <= 0.04045 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4);\nfunction interpolate(rgb1, rgb2, t) {\n  const r = from(b2n(rgb1.r));\n  const g = from(b2n(rgb1.g));\n  const b = from(b2n(rgb1.b));\n  return {\n    r: n2b(to(r + t * (from(b2n(rgb2.r)) - r))),\n    g: n2b(to(g + t * (from(b2n(rgb2.g)) - g))),\n    b: n2b(to(b + t * (from(b2n(rgb2.b)) - b))),\n    a: rgb1.a + t * (rgb2.a - rgb1.a)\n  };\n}\nfunction modHSL(v, i, ratio) {\n  if (v) {\n    let tmp = rgb2hsl(v);\n    tmp[i] = Math.max(0, Math.min(tmp[i] + tmp[i] * ratio, i === 0 ? 360 : 1));\n    tmp = hsl2rgb(tmp);\n    v.r = tmp[0];\n    v.g = tmp[1];\n    v.b = tmp[2];\n  }\n}\nfunction clone(v, proto) {\n  return v ? Object.assign(proto || {}, v) : v;\n}\nfunction fromObject(input) {\n  var v = {r: 0, g: 0, b: 0, a: 255};\n  if (Array.isArray(input)) {\n    if (input.length >= 3) {\n      v = {r: input[0], g: input[1], b: input[2], a: 255};\n      if (input.length > 3) {\n        v.a = n2b(input[3]);\n      }\n    }\n  } else {\n    v = clone(input, {r: 0, g: 0, b: 0, a: 1});\n    v.a = n2b(v.a);\n  }\n  return v;\n}\nfunction functionParse(str) {\n  if (str.charAt(0) === 'r') {\n    return rgbParse(str);\n  }\n  return hueParse(str);\n}\nclass Color {\n  constructor(input) {\n    if (input instanceof Color) {\n      return input;\n    }\n    const type = typeof input;\n    let v;\n    if (type === 'object') {\n      v = fromObject(input);\n    } else if (type === 'string') {\n      v = hexParse(input) || nameParse(input) || functionParse(input);\n    }\n    this._rgb = v;\n    this._valid = !!v;\n  }\n  get valid() {\n    return this._valid;\n  }\n  get rgb() {\n    var v = clone(this._rgb);\n    if (v) {\n      v.a = b2n(v.a);\n    }\n    return v;\n  }\n  set rgb(obj) {\n    this._rgb = fromObject(obj);\n  }\n  rgbString() {\n    return this._valid ? rgbString(this._rgb) : undefined;\n  }\n  hexString() {\n    return this._valid ? hexString(this._rgb) : undefined;\n  }\n  hslString() {\n    return this._valid ? hslString(this._rgb) : undefined;\n  }\n  mix(color, weight) {\n    if (color) {\n      const c1 = this.rgb;\n      const c2 = color.rgb;\n      let w2;\n      const p = weight === w2 ? 0.5 : weight;\n      const w = 2 * p - 1;\n      const a = c1.a - c2.a;\n      const w1 = ((w * a === -1 ? w : (w + a) / (1 + w * a)) + 1) / 2.0;\n      w2 = 1 - w1;\n      c1.r = 0xFF & w1 * c1.r + w2 * c2.r + 0.5;\n      c1.g = 0xFF & w1 * c1.g + w2 * c2.g + 0.5;\n      c1.b = 0xFF & w1 * c1.b + w2 * c2.b + 0.5;\n      c1.a = p * c1.a + (1 - p) * c2.a;\n      this.rgb = c1;\n    }\n    return this;\n  }\n  interpolate(color, t) {\n    if (color) {\n      this._rgb = interpolate(this._rgb, color._rgb, t);\n    }\n    return this;\n  }\n  clone() {\n    return new Color(this.rgb);\n  }\n  alpha(a) {\n    this._rgb.a = n2b(a);\n    return this;\n  }\n  clearer(ratio) {\n    const rgb = this._rgb;\n    rgb.a *= 1 - ratio;\n    return this;\n  }\n  greyscale() {\n    const rgb = this._rgb;\n    const val = round(rgb.r * 0.3 + rgb.g * 0.59 + rgb.b * 0.11);\n    rgb.r = rgb.g = rgb.b = val;\n    return this;\n  }\n  opaquer(ratio) {\n    const rgb = this._rgb;\n    rgb.a *= 1 + ratio;\n    return this;\n  }\n  negate() {\n    const v = this._rgb;\n    v.r = 255 - v.r;\n    v.g = 255 - v.g;\n    v.b = 255 - v.b;\n    return this;\n  }\n  lighten(ratio) {\n    modHSL(this._rgb, 2, ratio);\n    return this;\n  }\n  darken(ratio) {\n    modHSL(this._rgb, 2, -ratio);\n    return this;\n  }\n  saturate(ratio) {\n    modHSL(this._rgb, 1, ratio);\n    return this;\n  }\n  desaturate(ratio) {\n    modHSL(this._rgb, 1, -ratio);\n    return this;\n  }\n  rotate(deg) {\n    rotate(this._rgb, deg);\n    return this;\n  }\n}\nfunction index_esm(input) {\n  return new Color(input);\n}\n\nfunction isPatternOrGradient(value) {\n  if (value && typeof value === 'object') {\n    const type = value.toString();\n    return type === '[object CanvasPattern]' || type === '[object CanvasGradient]';\n  }\n  return false;\n}\nfunction color(value) {\n  return isPatternOrGradient(value) ? value : index_esm(value);\n}\nfunction getHoverColor(value) {\n  return isPatternOrGradient(value)\n    ? value\n    : index_esm(value).saturate(0.5).darken(0.1).hexString();\n}\n\nconst overrides = Object.create(null);\nconst descriptors = Object.create(null);\nfunction getScope$1(node, key) {\n  if (!key) {\n    return node;\n  }\n  const keys = key.split('.');\n  for (let i = 0, n = keys.length; i < n; ++i) {\n    const k = keys[i];\n    node = node[k] || (node[k] = Object.create(null));\n  }\n  return node;\n}\nfunction set(root, scope, values) {\n  if (typeof scope === 'string') {\n    return merge(getScope$1(root, scope), values);\n  }\n  return merge(getScope$1(root, ''), scope);\n}\nclass Defaults {\n  constructor(_descriptors) {\n    this.animation = undefined;\n    this.backgroundColor = 'rgba(0,0,0,0.1)';\n    this.borderColor = 'rgba(0,0,0,0.1)';\n    this.color = '#666';\n    this.datasets = {};\n    this.devicePixelRatio = (context) => context.chart.platform.getDevicePixelRatio();\n    this.elements = {};\n    this.events = [\n      'mousemove',\n      'mouseout',\n      'click',\n      'touchstart',\n      'touchmove'\n    ];\n    this.font = {\n      family: \"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif\",\n      size: 12,\n      style: 'normal',\n      lineHeight: 1.2,\n      weight: null\n    };\n    this.hover = {};\n    this.hoverBackgroundColor = (ctx, options) => getHoverColor(options.backgroundColor);\n    this.hoverBorderColor = (ctx, options) => getHoverColor(options.borderColor);\n    this.hoverColor = (ctx, options) => getHoverColor(options.color);\n    this.indexAxis = 'x';\n    this.interaction = {\n      mode: 'nearest',\n      intersect: true,\n      includeInvisible: false\n    };\n    this.maintainAspectRatio = true;\n    this.onHover = null;\n    this.onClick = null;\n    this.parsing = true;\n    this.plugins = {};\n    this.responsive = true;\n    this.scale = undefined;\n    this.scales = {};\n    this.showLine = true;\n    this.drawActiveElementsOnTop = true;\n    this.describe(_descriptors);\n  }\n  set(scope, values) {\n    return set(this, scope, values);\n  }\n  get(scope) {\n    return getScope$1(this, scope);\n  }\n  describe(scope, values) {\n    return set(descriptors, scope, values);\n  }\n  override(scope, values) {\n    return set(overrides, scope, values);\n  }\n  route(scope, name, targetScope, targetName) {\n    const scopeObject = getScope$1(this, scope);\n    const targetScopeObject = getScope$1(this, targetScope);\n    const privateName = '_' + name;\n    Object.defineProperties(scopeObject, {\n      [privateName]: {\n        value: scopeObject[name],\n        writable: true\n      },\n      [name]: {\n        enumerable: true,\n        get() {\n          const local = this[privateName];\n          const target = targetScopeObject[targetName];\n          if (isObject(local)) {\n            return Object.assign({}, target, local);\n          }\n          return valueOrDefault(local, target);\n        },\n        set(value) {\n          this[privateName] = value;\n        }\n      }\n    });\n  }\n}\nvar defaults = new Defaults({\n  _scriptable: (name) => !name.startsWith('on'),\n  _indexable: (name) => name !== 'events',\n  hover: {\n    _fallback: 'interaction'\n  },\n  interaction: {\n    _scriptable: false,\n    _indexable: false,\n  }\n});\n\nfunction toFontString(font) {\n  if (!font || isNullOrUndef(font.size) || isNullOrUndef(font.family)) {\n    return null;\n  }\n  return (font.style ? font.style + ' ' : '')\n\t\t+ (font.weight ? font.weight + ' ' : '')\n\t\t+ font.size + 'px '\n\t\t+ font.family;\n}\nfunction _measureText(ctx, data, gc, longest, string) {\n  let textWidth = data[string];\n  if (!textWidth) {\n    textWidth = data[string] = ctx.measureText(string).width;\n    gc.push(string);\n  }\n  if (textWidth > longest) {\n    longest = textWidth;\n  }\n  return longest;\n}\nfunction _longestText(ctx, font, arrayOfThings, cache) {\n  cache = cache || {};\n  let data = cache.data = cache.data || {};\n  let gc = cache.garbageCollect = cache.garbageCollect || [];\n  if (cache.font !== font) {\n    data = cache.data = {};\n    gc = cache.garbageCollect = [];\n    cache.font = font;\n  }\n  ctx.save();\n  ctx.font = font;\n  let longest = 0;\n  const ilen = arrayOfThings.length;\n  let i, j, jlen, thing, nestedThing;\n  for (i = 0; i < ilen; i++) {\n    thing = arrayOfThings[i];\n    if (thing !== undefined && thing !== null && isArray(thing) !== true) {\n      longest = _measureText(ctx, data, gc, longest, thing);\n    } else if (isArray(thing)) {\n      for (j = 0, jlen = thing.length; j < jlen; j++) {\n        nestedThing = thing[j];\n        if (nestedThing !== undefined && nestedThing !== null && !isArray(nestedThing)) {\n          longest = _measureText(ctx, data, gc, longest, nestedThing);\n        }\n      }\n    }\n  }\n  ctx.restore();\n  const gcLen = gc.length / 2;\n  if (gcLen > arrayOfThings.length) {\n    for (i = 0; i < gcLen; i++) {\n      delete data[gc[i]];\n    }\n    gc.splice(0, gcLen);\n  }\n  return longest;\n}\nfunction _alignPixel(chart, pixel, width) {\n  const devicePixelRatio = chart.currentDevicePixelRatio;\n  const halfWidth = width !== 0 ? Math.max(width / 2, 0.5) : 0;\n  return Math.round((pixel - halfWidth) * devicePixelRatio) / devicePixelRatio + halfWidth;\n}\nfunction clearCanvas(canvas, ctx) {\n  ctx = ctx || canvas.getContext('2d');\n  ctx.save();\n  ctx.resetTransform();\n  ctx.clearRect(0, 0, canvas.width, canvas.height);\n  ctx.restore();\n}\nfunction drawPoint(ctx, options, x, y) {\n  let type, xOffset, yOffset, size, cornerRadius;\n  const style = options.pointStyle;\n  const rotation = options.rotation;\n  const radius = options.radius;\n  let rad = (rotation || 0) * RAD_PER_DEG;\n  if (style && typeof style === 'object') {\n    type = style.toString();\n    if (type === '[object HTMLImageElement]' || type === '[object HTMLCanvasElement]') {\n      ctx.save();\n      ctx.translate(x, y);\n      ctx.rotate(rad);\n      ctx.drawImage(style, -style.width / 2, -style.height / 2, style.width, style.height);\n      ctx.restore();\n      return;\n    }\n  }\n  if (isNaN(radius) || radius <= 0) {\n    return;\n  }\n  ctx.beginPath();\n  switch (style) {\n  default:\n    ctx.arc(x, y, radius, 0, TAU);\n    ctx.closePath();\n    break;\n  case 'triangle':\n    ctx.moveTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n    rad += TWO_THIRDS_PI;\n    ctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n    rad += TWO_THIRDS_PI;\n    ctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n    ctx.closePath();\n    break;\n  case 'rectRounded':\n    cornerRadius = radius * 0.516;\n    size = radius - cornerRadius;\n    xOffset = Math.cos(rad + QUARTER_PI) * size;\n    yOffset = Math.sin(rad + QUARTER_PI) * size;\n    ctx.arc(x - xOffset, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI);\n    ctx.arc(x + yOffset, y - xOffset, cornerRadius, rad - HALF_PI, rad);\n    ctx.arc(x + xOffset, y + yOffset, cornerRadius, rad, rad + HALF_PI);\n    ctx.arc(x - yOffset, y + xOffset, cornerRadius, rad + HALF_PI, rad + PI);\n    ctx.closePath();\n    break;\n  case 'rect':\n    if (!rotation) {\n      size = Math.SQRT1_2 * radius;\n      ctx.rect(x - size, y - size, 2 * size, 2 * size);\n      break;\n    }\n    rad += QUARTER_PI;\n  case 'rectRot':\n    xOffset = Math.cos(rad) * radius;\n    yOffset = Math.sin(rad) * radius;\n    ctx.moveTo(x - xOffset, y - yOffset);\n    ctx.lineTo(x + yOffset, y - xOffset);\n    ctx.lineTo(x + xOffset, y + yOffset);\n    ctx.lineTo(x - yOffset, y + xOffset);\n    ctx.closePath();\n    break;\n  case 'crossRot':\n    rad += QUARTER_PI;\n  case 'cross':\n    xOffset = Math.cos(rad) * radius;\n    yOffset = Math.sin(rad) * radius;\n    ctx.moveTo(x - xOffset, y - yOffset);\n    ctx.lineTo(x + xOffset, y + yOffset);\n    ctx.moveTo(x + yOffset, y - xOffset);\n    ctx.lineTo(x - yOffset, y + xOffset);\n    break;\n  case 'star':\n    xOffset = Math.cos(rad) * radius;\n    yOffset = Math.sin(rad) * radius;\n    ctx.moveTo(x - xOffset, y - yOffset);\n    ctx.lineTo(x + xOffset, y + yOffset);\n    ctx.moveTo(x + yOffset, y - xOffset);\n    ctx.lineTo(x - yOffset, y + xOffset);\n    rad += QUARTER_PI;\n    xOffset = Math.cos(rad) * radius;\n    yOffset = Math.sin(rad) * radius;\n    ctx.moveTo(x - xOffset, y - yOffset);\n    ctx.lineTo(x + xOffset, y + yOffset);\n    ctx.moveTo(x + yOffset, y - xOffset);\n    ctx.lineTo(x - yOffset, y + xOffset);\n    break;\n  case 'line':\n    xOffset = Math.cos(rad) * radius;\n    yOffset = Math.sin(rad) * radius;\n    ctx.moveTo(x - xOffset, y - yOffset);\n    ctx.lineTo(x + xOffset, y + yOffset);\n    break;\n  case 'dash':\n    ctx.moveTo(x, y);\n    ctx.lineTo(x + Math.cos(rad) * radius, y + Math.sin(rad) * radius);\n    break;\n  }\n  ctx.fill();\n  if (options.borderWidth > 0) {\n    ctx.stroke();\n  }\n}\nfunction _isPointInArea(point, area, margin) {\n  margin = margin || 0.5;\n  return !area || (point && point.x > area.left - margin && point.x < area.right + margin &&\n\t\tpoint.y > area.top - margin && point.y < area.bottom + margin);\n}\nfunction clipArea(ctx, area) {\n  ctx.save();\n  ctx.beginPath();\n  ctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top);\n  ctx.clip();\n}\nfunction unclipArea(ctx) {\n  ctx.restore();\n}\nfunction _steppedLineTo(ctx, previous, target, flip, mode) {\n  if (!previous) {\n    return ctx.lineTo(target.x, target.y);\n  }\n  if (mode === 'middle') {\n    const midpoint = (previous.x + target.x) / 2.0;\n    ctx.lineTo(midpoint, previous.y);\n    ctx.lineTo(midpoint, target.y);\n  } else if (mode === 'after' !== !!flip) {\n    ctx.lineTo(previous.x, target.y);\n  } else {\n    ctx.lineTo(target.x, previous.y);\n  }\n  ctx.lineTo(target.x, target.y);\n}\nfunction _bezierCurveTo(ctx, previous, target, flip) {\n  if (!previous) {\n    return ctx.lineTo(target.x, target.y);\n  }\n  ctx.bezierCurveTo(\n    flip ? previous.cp1x : previous.cp2x,\n    flip ? previous.cp1y : previous.cp2y,\n    flip ? target.cp2x : target.cp1x,\n    flip ? target.cp2y : target.cp1y,\n    target.x,\n    target.y);\n}\nfunction renderText(ctx, text, x, y, font, opts = {}) {\n  const lines = isArray(text) ? text : [text];\n  const stroke = opts.strokeWidth > 0 && opts.strokeColor !== '';\n  let i, line;\n  ctx.save();\n  ctx.font = font.string;\n  setRenderOpts(ctx, opts);\n  for (i = 0; i < lines.length; ++i) {\n    line = lines[i];\n    if (stroke) {\n      if (opts.strokeColor) {\n        ctx.strokeStyle = opts.strokeColor;\n      }\n      if (!isNullOrUndef(opts.strokeWidth)) {\n        ctx.lineWidth = opts.strokeWidth;\n      }\n      ctx.strokeText(line, x, y, opts.maxWidth);\n    }\n    ctx.fillText(line, x, y, opts.maxWidth);\n    decorateText(ctx, x, y, line, opts);\n    y += font.lineHeight;\n  }\n  ctx.restore();\n}\nfunction setRenderOpts(ctx, opts) {\n  if (opts.translation) {\n    ctx.translate(opts.translation[0], opts.translation[1]);\n  }\n  if (!isNullOrUndef(opts.rotation)) {\n    ctx.rotate(opts.rotation);\n  }\n  if (opts.color) {\n    ctx.fillStyle = opts.color;\n  }\n  if (opts.textAlign) {\n    ctx.textAlign = opts.textAlign;\n  }\n  if (opts.textBaseline) {\n    ctx.textBaseline = opts.textBaseline;\n  }\n}\nfunction decorateText(ctx, x, y, line, opts) {\n  if (opts.strikethrough || opts.underline) {\n    const metrics = ctx.measureText(line);\n    const left = x - metrics.actualBoundingBoxLeft;\n    const right = x + metrics.actualBoundingBoxRight;\n    const top = y - metrics.actualBoundingBoxAscent;\n    const bottom = y + metrics.actualBoundingBoxDescent;\n    const yDecoration = opts.strikethrough ? (top + bottom) / 2 : bottom;\n    ctx.strokeStyle = ctx.fillStyle;\n    ctx.beginPath();\n    ctx.lineWidth = opts.decorationWidth || 2;\n    ctx.moveTo(left, yDecoration);\n    ctx.lineTo(right, yDecoration);\n    ctx.stroke();\n  }\n}\nfunction addRoundedRectPath(ctx, rect) {\n  const {x, y, w, h, radius} = rect;\n  ctx.arc(x + radius.topLeft, y + radius.topLeft, radius.topLeft, -HALF_PI, PI, true);\n  ctx.lineTo(x, y + h - radius.bottomLeft);\n  ctx.arc(x + radius.bottomLeft, y + h - radius.bottomLeft, radius.bottomLeft, PI, HALF_PI, true);\n  ctx.lineTo(x + w - radius.bottomRight, y + h);\n  ctx.arc(x + w - radius.bottomRight, y + h - radius.bottomRight, radius.bottomRight, HALF_PI, 0, true);\n  ctx.lineTo(x + w, y + radius.topRight);\n  ctx.arc(x + w - radius.topRight, y + radius.topRight, radius.topRight, 0, -HALF_PI, true);\n  ctx.lineTo(x + radius.topLeft, y);\n}\n\nconst LINE_HEIGHT = new RegExp(/^(normal|(\\d+(?:\\.\\d+)?)(px|em|%)?)$/);\nconst FONT_STYLE = new RegExp(/^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/);\nfunction toLineHeight(value, size) {\n  const matches = ('' + value).match(LINE_HEIGHT);\n  if (!matches || matches[1] === 'normal') {\n    return size * 1.2;\n  }\n  value = +matches[2];\n  switch (matches[3]) {\n  case 'px':\n    return value;\n  case '%':\n    value /= 100;\n    break;\n  }\n  return size * value;\n}\nconst numberOrZero = v => +v || 0;\nfunction _readValueToProps(value, props) {\n  const ret = {};\n  const objProps = isObject(props);\n  const keys = objProps ? Object.keys(props) : props;\n  const read = isObject(value)\n    ? objProps\n      ? prop => valueOrDefault(value[prop], value[props[prop]])\n      : prop => value[prop]\n    : () => value;\n  for (const prop of keys) {\n    ret[prop] = numberOrZero(read(prop));\n  }\n  return ret;\n}\nfunction toTRBL(value) {\n  return _readValueToProps(value, {top: 'y', right: 'x', bottom: 'y', left: 'x'});\n}\nfunction toTRBLCorners(value) {\n  return _readValueToProps(value, ['topLeft', 'topRight', 'bottomLeft', 'bottomRight']);\n}\nfunction toPadding(value) {\n  const obj = toTRBL(value);\n  obj.width = obj.left + obj.right;\n  obj.height = obj.top + obj.bottom;\n  return obj;\n}\nfunction toFont(options, fallback) {\n  options = options || {};\n  fallback = fallback || defaults.font;\n  let size = valueOrDefault(options.size, fallback.size);\n  if (typeof size === 'string') {\n    size = parseInt(size, 10);\n  }\n  let style = valueOrDefault(options.style, fallback.style);\n  if (style && !('' + style).match(FONT_STYLE)) {\n    console.warn('Invalid font style specified: \"' + style + '\"');\n    style = '';\n  }\n  const font = {\n    family: valueOrDefault(options.family, fallback.family),\n    lineHeight: toLineHeight(valueOrDefault(options.lineHeight, fallback.lineHeight), size),\n    size,\n    style,\n    weight: valueOrDefault(options.weight, fallback.weight),\n    string: ''\n  };\n  font.string = toFontString(font);\n  return font;\n}\nfunction resolve(inputs, context, index, info) {\n  let cacheable = true;\n  let i, ilen, value;\n  for (i = 0, ilen = inputs.length; i < ilen; ++i) {\n    value = inputs[i];\n    if (value === undefined) {\n      continue;\n    }\n    if (context !== undefined && typeof value === 'function') {\n      value = value(context);\n      cacheable = false;\n    }\n    if (index !== undefined && isArray(value)) {\n      value = value[index % value.length];\n      cacheable = false;\n    }\n    if (value !== undefined) {\n      if (info && !cacheable) {\n        info.cacheable = false;\n      }\n      return value;\n    }\n  }\n}\nfunction _addGrace(minmax, grace, beginAtZero) {\n  const {min, max} = minmax;\n  const change = toDimension(grace, (max - min) / 2);\n  const keepZero = (value, add) => beginAtZero && value === 0 ? 0 : value + add;\n  return {\n    min: keepZero(min, -Math.abs(change)),\n    max: keepZero(max, change)\n  };\n}\nfunction createContext(parentContext, context) {\n  return Object.assign(Object.create(parentContext), context);\n}\n\nfunction _lookup(table, value, cmp) {\n  cmp = cmp || ((index) => table[index] < value);\n  let hi = table.length - 1;\n  let lo = 0;\n  let mid;\n  while (hi - lo > 1) {\n    mid = (lo + hi) >> 1;\n    if (cmp(mid)) {\n      lo = mid;\n    } else {\n      hi = mid;\n    }\n  }\n  return {lo, hi};\n}\nconst _lookupByKey = (table, key, value) =>\n  _lookup(table, value, index => table[index][key] < value);\nconst _rlookupByKey = (table, key, value) =>\n  _lookup(table, value, index => table[index][key] >= value);\nfunction _filterBetween(values, min, max) {\n  let start = 0;\n  let end = values.length;\n  while (start < end && values[start] < min) {\n    start++;\n  }\n  while (end > start && values[end - 1] > max) {\n    end--;\n  }\n  return start > 0 || end < values.length\n    ? values.slice(start, end)\n    : values;\n}\nconst arrayEvents = ['push', 'pop', 'shift', 'splice', 'unshift'];\nfunction listenArrayEvents(array, listener) {\n  if (array._chartjs) {\n    array._chartjs.listeners.push(listener);\n    return;\n  }\n  Object.defineProperty(array, '_chartjs', {\n    configurable: true,\n    enumerable: false,\n    value: {\n      listeners: [listener]\n    }\n  });\n  arrayEvents.forEach((key) => {\n    const method = '_onData' + _capitalize(key);\n    const base = array[key];\n    Object.defineProperty(array, key, {\n      configurable: true,\n      enumerable: false,\n      value(...args) {\n        const res = base.apply(this, args);\n        array._chartjs.listeners.forEach((object) => {\n          if (typeof object[method] === 'function') {\n            object[method](...args);\n          }\n        });\n        return res;\n      }\n    });\n  });\n}\nfunction unlistenArrayEvents(array, listener) {\n  const stub = array._chartjs;\n  if (!stub) {\n    return;\n  }\n  const listeners = stub.listeners;\n  const index = listeners.indexOf(listener);\n  if (index !== -1) {\n    listeners.splice(index, 1);\n  }\n  if (listeners.length > 0) {\n    return;\n  }\n  arrayEvents.forEach((key) => {\n    delete array[key];\n  });\n  delete array._chartjs;\n}\nfunction _arrayUnique(items) {\n  const set = new Set();\n  let i, ilen;\n  for (i = 0, ilen = items.length; i < ilen; ++i) {\n    set.add(items[i]);\n  }\n  if (set.size === ilen) {\n    return items;\n  }\n  return Array.from(set);\n}\n\nfunction _createResolver(scopes, prefixes = [''], rootScopes = scopes, fallback, getTarget = () => scopes[0]) {\n  if (!defined(fallback)) {\n    fallback = _resolve('_fallback', scopes);\n  }\n  const cache = {\n    [Symbol.toStringTag]: 'Object',\n    _cacheable: true,\n    _scopes: scopes,\n    _rootScopes: rootScopes,\n    _fallback: fallback,\n    _getTarget: getTarget,\n    override: (scope) => _createResolver([scope, ...scopes], prefixes, rootScopes, fallback),\n  };\n  return new Proxy(cache, {\n    deleteProperty(target, prop) {\n      delete target[prop];\n      delete target._keys;\n      delete scopes[0][prop];\n      return true;\n    },\n    get(target, prop) {\n      return _cached(target, prop,\n        () => _resolveWithPrefixes(prop, prefixes, scopes, target));\n    },\n    getOwnPropertyDescriptor(target, prop) {\n      return Reflect.getOwnPropertyDescriptor(target._scopes[0], prop);\n    },\n    getPrototypeOf() {\n      return Reflect.getPrototypeOf(scopes[0]);\n    },\n    has(target, prop) {\n      return getKeysFromAllScopes(target).includes(prop);\n    },\n    ownKeys(target) {\n      return getKeysFromAllScopes(target);\n    },\n    set(target, prop, value) {\n      const storage = target._storage || (target._storage = getTarget());\n      target[prop] = storage[prop] = value;\n      delete target._keys;\n      return true;\n    }\n  });\n}\nfunction _attachContext(proxy, context, subProxy, descriptorDefaults) {\n  const cache = {\n    _cacheable: false,\n    _proxy: proxy,\n    _context: context,\n    _subProxy: subProxy,\n    _stack: new Set(),\n    _descriptors: _descriptors(proxy, descriptorDefaults),\n    setContext: (ctx) => _attachContext(proxy, ctx, subProxy, descriptorDefaults),\n    override: (scope) => _attachContext(proxy.override(scope), context, subProxy, descriptorDefaults)\n  };\n  return new Proxy(cache, {\n    deleteProperty(target, prop) {\n      delete target[prop];\n      delete proxy[prop];\n      return true;\n    },\n    get(target, prop, receiver) {\n      return _cached(target, prop,\n        () => _resolveWithContext(target, prop, receiver));\n    },\n    getOwnPropertyDescriptor(target, prop) {\n      return target._descriptors.allKeys\n        ? Reflect.has(proxy, prop) ? {enumerable: true, configurable: true} : undefined\n        : Reflect.getOwnPropertyDescriptor(proxy, prop);\n    },\n    getPrototypeOf() {\n      return Reflect.getPrototypeOf(proxy);\n    },\n    has(target, prop) {\n      return Reflect.has(proxy, prop);\n    },\n    ownKeys() {\n      return Reflect.ownKeys(proxy);\n    },\n    set(target, prop, value) {\n      proxy[prop] = value;\n      delete target[prop];\n      return true;\n    }\n  });\n}\nfunction _descriptors(proxy, defaults = {scriptable: true, indexable: true}) {\n  const {_scriptable = defaults.scriptable, _indexable = defaults.indexable, _allKeys = defaults.allKeys} = proxy;\n  return {\n    allKeys: _allKeys,\n    scriptable: _scriptable,\n    indexable: _indexable,\n    isScriptable: isFunction(_scriptable) ? _scriptable : () => _scriptable,\n    isIndexable: isFunction(_indexable) ? _indexable : () => _indexable\n  };\n}\nconst readKey = (prefix, name) => prefix ? prefix + _capitalize(name) : name;\nconst needsSubResolver = (prop, value) => isObject(value) && prop !== 'adapters' &&\n  (Object.getPrototypeOf(value) === null || value.constructor === Object);\nfunction _cached(target, prop, resolve) {\n  if (Object.prototype.hasOwnProperty.call(target, prop)) {\n    return target[prop];\n  }\n  const value = resolve();\n  target[prop] = value;\n  return value;\n}\nfunction _resolveWithContext(target, prop, receiver) {\n  const {_proxy, _context, _subProxy, _descriptors: descriptors} = target;\n  let value = _proxy[prop];\n  if (isFunction(value) && descriptors.isScriptable(prop)) {\n    value = _resolveScriptable(prop, value, target, receiver);\n  }\n  if (isArray(value) && value.length) {\n    value = _resolveArray(prop, value, target, descriptors.isIndexable);\n  }\n  if (needsSubResolver(prop, value)) {\n    value = _attachContext(value, _context, _subProxy && _subProxy[prop], descriptors);\n  }\n  return value;\n}\nfunction _resolveScriptable(prop, value, target, receiver) {\n  const {_proxy, _context, _subProxy, _stack} = target;\n  if (_stack.has(prop)) {\n    throw new Error('Recursion detected: ' + Array.from(_stack).join('->') + '->' + prop);\n  }\n  _stack.add(prop);\n  value = value(_context, _subProxy || receiver);\n  _stack.delete(prop);\n  if (needsSubResolver(prop, value)) {\n    value = createSubResolver(_proxy._scopes, _proxy, prop, value);\n  }\n  return value;\n}\nfunction _resolveArray(prop, value, target, isIndexable) {\n  const {_proxy, _context, _subProxy, _descriptors: descriptors} = target;\n  if (defined(_context.index) && isIndexable(prop)) {\n    value = value[_context.index % value.length];\n  } else if (isObject(value[0])) {\n    const arr = value;\n    const scopes = _proxy._scopes.filter(s => s !== arr);\n    value = [];\n    for (const item of arr) {\n      const resolver = createSubResolver(scopes, _proxy, prop, item);\n      value.push(_attachContext(resolver, _context, _subProxy && _subProxy[prop], descriptors));\n    }\n  }\n  return value;\n}\nfunction resolveFallback(fallback, prop, value) {\n  return isFunction(fallback) ? fallback(prop, value) : fallback;\n}\nconst getScope = (key, parent) => key === true ? parent\n  : typeof key === 'string' ? resolveObjectKey(parent, key) : undefined;\nfunction addScopes(set, parentScopes, key, parentFallback, value) {\n  for (const parent of parentScopes) {\n    const scope = getScope(key, parent);\n    if (scope) {\n      set.add(scope);\n      const fallback = resolveFallback(scope._fallback, key, value);\n      if (defined(fallback) && fallback !== key && fallback !== parentFallback) {\n        return fallback;\n      }\n    } else if (scope === false && defined(parentFallback) && key !== parentFallback) {\n      return null;\n    }\n  }\n  return false;\n}\nfunction createSubResolver(parentScopes, resolver, prop, value) {\n  const rootScopes = resolver._rootScopes;\n  const fallback = resolveFallback(resolver._fallback, prop, value);\n  const allScopes = [...parentScopes, ...rootScopes];\n  const set = new Set();\n  set.add(value);\n  let key = addScopesFromKey(set, allScopes, prop, fallback || prop, value);\n  if (key === null) {\n    return false;\n  }\n  if (defined(fallback) && fallback !== prop) {\n    key = addScopesFromKey(set, allScopes, fallback, key, value);\n    if (key === null) {\n      return false;\n    }\n  }\n  return _createResolver(Array.from(set), [''], rootScopes, fallback,\n    () => subGetTarget(resolver, prop, value));\n}\nfunction addScopesFromKey(set, allScopes, key, fallback, item) {\n  while (key) {\n    key = addScopes(set, allScopes, key, fallback, item);\n  }\n  return key;\n}\nfunction subGetTarget(resolver, prop, value) {\n  const parent = resolver._getTarget();\n  if (!(prop in parent)) {\n    parent[prop] = {};\n  }\n  const target = parent[prop];\n  if (isArray(target) && isObject(value)) {\n    return value;\n  }\n  return target;\n}\nfunction _resolveWithPrefixes(prop, prefixes, scopes, proxy) {\n  let value;\n  for (const prefix of prefixes) {\n    value = _resolve(readKey(prefix, prop), scopes);\n    if (defined(value)) {\n      return needsSubResolver(prop, value)\n        ? createSubResolver(scopes, proxy, prop, value)\n        : value;\n    }\n  }\n}\nfunction _resolve(key, scopes) {\n  for (const scope of scopes) {\n    if (!scope) {\n      continue;\n    }\n    const value = scope[key];\n    if (defined(value)) {\n      return value;\n    }\n  }\n}\nfunction getKeysFromAllScopes(target) {\n  let keys = target._keys;\n  if (!keys) {\n    keys = target._keys = resolveKeysFromAllScopes(target._scopes);\n  }\n  return keys;\n}\nfunction resolveKeysFromAllScopes(scopes) {\n  const set = new Set();\n  for (const scope of scopes) {\n    for (const key of Object.keys(scope).filter(k => !k.startsWith('_'))) {\n      set.add(key);\n    }\n  }\n  return Array.from(set);\n}\nfunction _parseObjectDataRadialScale(meta, data, start, count) {\n  const {iScale} = meta;\n  const {key = 'r'} = this._parsing;\n  const parsed = new Array(count);\n  let i, ilen, index, item;\n  for (i = 0, ilen = count; i < ilen; ++i) {\n    index = i + start;\n    item = data[index];\n    parsed[i] = {\n      r: iScale.parse(resolveObjectKey(item, key), index)\n    };\n  }\n  return parsed;\n}\n\nconst EPSILON = Number.EPSILON || 1e-14;\nconst getPoint = (points, i) => i < points.length && !points[i].skip && points[i];\nconst getValueAxis = (indexAxis) => indexAxis === 'x' ? 'y' : 'x';\nfunction splineCurve(firstPoint, middlePoint, afterPoint, t) {\n  const previous = firstPoint.skip ? middlePoint : firstPoint;\n  const current = middlePoint;\n  const next = afterPoint.skip ? middlePoint : afterPoint;\n  const d01 = distanceBetweenPoints(current, previous);\n  const d12 = distanceBetweenPoints(next, current);\n  let s01 = d01 / (d01 + d12);\n  let s12 = d12 / (d01 + d12);\n  s01 = isNaN(s01) ? 0 : s01;\n  s12 = isNaN(s12) ? 0 : s12;\n  const fa = t * s01;\n  const fb = t * s12;\n  return {\n    previous: {\n      x: current.x - fa * (next.x - previous.x),\n      y: current.y - fa * (next.y - previous.y)\n    },\n    next: {\n      x: current.x + fb * (next.x - previous.x),\n      y: current.y + fb * (next.y - previous.y)\n    }\n  };\n}\nfunction monotoneAdjust(points, deltaK, mK) {\n  const pointsLen = points.length;\n  let alphaK, betaK, tauK, squaredMagnitude, pointCurrent;\n  let pointAfter = getPoint(points, 0);\n  for (let i = 0; i < pointsLen - 1; ++i) {\n    pointCurrent = pointAfter;\n    pointAfter = getPoint(points, i + 1);\n    if (!pointCurrent || !pointAfter) {\n      continue;\n    }\n    if (almostEquals(deltaK[i], 0, EPSILON)) {\n      mK[i] = mK[i + 1] = 0;\n      continue;\n    }\n    alphaK = mK[i] / deltaK[i];\n    betaK = mK[i + 1] / deltaK[i];\n    squaredMagnitude = Math.pow(alphaK, 2) + Math.pow(betaK, 2);\n    if (squaredMagnitude <= 9) {\n      continue;\n    }\n    tauK = 3 / Math.sqrt(squaredMagnitude);\n    mK[i] = alphaK * tauK * deltaK[i];\n    mK[i + 1] = betaK * tauK * deltaK[i];\n  }\n}\nfunction monotoneCompute(points, mK, indexAxis = 'x') {\n  const valueAxis = getValueAxis(indexAxis);\n  const pointsLen = points.length;\n  let delta, pointBefore, pointCurrent;\n  let pointAfter = getPoint(points, 0);\n  for (let i = 0; i < pointsLen; ++i) {\n    pointBefore = pointCurrent;\n    pointCurrent = pointAfter;\n    pointAfter = getPoint(points, i + 1);\n    if (!pointCurrent) {\n      continue;\n    }\n    const iPixel = pointCurrent[indexAxis];\n    const vPixel = pointCurrent[valueAxis];\n    if (pointBefore) {\n      delta = (iPixel - pointBefore[indexAxis]) / 3;\n      pointCurrent[`cp1${indexAxis}`] = iPixel - delta;\n      pointCurrent[`cp1${valueAxis}`] = vPixel - delta * mK[i];\n    }\n    if (pointAfter) {\n      delta = (pointAfter[indexAxis] - iPixel) / 3;\n      pointCurrent[`cp2${indexAxis}`] = iPixel + delta;\n      pointCurrent[`cp2${valueAxis}`] = vPixel + delta * mK[i];\n    }\n  }\n}\nfunction splineCurveMonotone(points, indexAxis = 'x') {\n  const valueAxis = getValueAxis(indexAxis);\n  const pointsLen = points.length;\n  const deltaK = Array(pointsLen).fill(0);\n  const mK = Array(pointsLen);\n  let i, pointBefore, pointCurrent;\n  let pointAfter = getPoint(points, 0);\n  for (i = 0; i < pointsLen; ++i) {\n    pointBefore = pointCurrent;\n    pointCurrent = pointAfter;\n    pointAfter = getPoint(points, i + 1);\n    if (!pointCurrent) {\n      continue;\n    }\n    if (pointAfter) {\n      const slopeDelta = pointAfter[indexAxis] - pointCurrent[indexAxis];\n      deltaK[i] = slopeDelta !== 0 ? (pointAfter[valueAxis] - pointCurrent[valueAxis]) / slopeDelta : 0;\n    }\n    mK[i] = !pointBefore ? deltaK[i]\n      : !pointAfter ? deltaK[i - 1]\n      : (sign(deltaK[i - 1]) !== sign(deltaK[i])) ? 0\n      : (deltaK[i - 1] + deltaK[i]) / 2;\n  }\n  monotoneAdjust(points, deltaK, mK);\n  monotoneCompute(points, mK, indexAxis);\n}\nfunction capControlPoint(pt, min, max) {\n  return Math.max(Math.min(pt, max), min);\n}\nfunction capBezierPoints(points, area) {\n  let i, ilen, point, inArea, inAreaPrev;\n  let inAreaNext = _isPointInArea(points[0], area);\n  for (i = 0, ilen = points.length; i < ilen; ++i) {\n    inAreaPrev = inArea;\n    inArea = inAreaNext;\n    inAreaNext = i < ilen - 1 && _isPointInArea(points[i + 1], area);\n    if (!inArea) {\n      continue;\n    }\n    point = points[i];\n    if (inAreaPrev) {\n      point.cp1x = capControlPoint(point.cp1x, area.left, area.right);\n      point.cp1y = capControlPoint(point.cp1y, area.top, area.bottom);\n    }\n    if (inAreaNext) {\n      point.cp2x = capControlPoint(point.cp2x, area.left, area.right);\n      point.cp2y = capControlPoint(point.cp2y, area.top, area.bottom);\n    }\n  }\n}\nfunction _updateBezierControlPoints(points, options, area, loop, indexAxis) {\n  let i, ilen, point, controlPoints;\n  if (options.spanGaps) {\n    points = points.filter((pt) => !pt.skip);\n  }\n  if (options.cubicInterpolationMode === 'monotone') {\n    splineCurveMonotone(points, indexAxis);\n  } else {\n    let prev = loop ? points[points.length - 1] : points[0];\n    for (i = 0, ilen = points.length; i < ilen; ++i) {\n      point = points[i];\n      controlPoints = splineCurve(\n        prev,\n        point,\n        points[Math.min(i + 1, ilen - (loop ? 0 : 1)) % ilen],\n        options.tension\n      );\n      point.cp1x = controlPoints.previous.x;\n      point.cp1y = controlPoints.previous.y;\n      point.cp2x = controlPoints.next.x;\n      point.cp2y = controlPoints.next.y;\n      prev = point;\n    }\n  }\n  if (options.capBezierPoints) {\n    capBezierPoints(points, area);\n  }\n}\n\nfunction _isDomSupported() {\n  return typeof window !== 'undefined' && typeof document !== 'undefined';\n}\nfunction _getParentNode(domNode) {\n  let parent = domNode.parentNode;\n  if (parent && parent.toString() === '[object ShadowRoot]') {\n    parent = parent.host;\n  }\n  return parent;\n}\nfunction parseMaxStyle(styleValue, node, parentProperty) {\n  let valueInPixels;\n  if (typeof styleValue === 'string') {\n    valueInPixels = parseInt(styleValue, 10);\n    if (styleValue.indexOf('%') !== -1) {\n      valueInPixels = valueInPixels / 100 * node.parentNode[parentProperty];\n    }\n  } else {\n    valueInPixels = styleValue;\n  }\n  return valueInPixels;\n}\nconst getComputedStyle = (element) => window.getComputedStyle(element, null);\nfunction getStyle(el, property) {\n  return getComputedStyle(el).getPropertyValue(property);\n}\nconst positions = ['top', 'right', 'bottom', 'left'];\nfunction getPositionedStyle(styles, style, suffix) {\n  const result = {};\n  suffix = suffix ? '-' + suffix : '';\n  for (let i = 0; i < 4; i++) {\n    const pos = positions[i];\n    result[pos] = parseFloat(styles[style + '-' + pos + suffix]) || 0;\n  }\n  result.width = result.left + result.right;\n  result.height = result.top + result.bottom;\n  return result;\n}\nconst useOffsetPos = (x, y, target) => (x > 0 || y > 0) && (!target || !target.shadowRoot);\nfunction getCanvasPosition(e, canvas) {\n  const touches = e.touches;\n  const source = touches && touches.length ? touches[0] : e;\n  const {offsetX, offsetY} = source;\n  let box = false;\n  let x, y;\n  if (useOffsetPos(offsetX, offsetY, e.target)) {\n    x = offsetX;\n    y = offsetY;\n  } else {\n    const rect = canvas.getBoundingClientRect();\n    x = source.clientX - rect.left;\n    y = source.clientY - rect.top;\n    box = true;\n  }\n  return {x, y, box};\n}\nfunction getRelativePosition(evt, chart) {\n  if ('native' in evt) {\n    return evt;\n  }\n  const {canvas, currentDevicePixelRatio} = chart;\n  const style = getComputedStyle(canvas);\n  const borderBox = style.boxSizing === 'border-box';\n  const paddings = getPositionedStyle(style, 'padding');\n  const borders = getPositionedStyle(style, 'border', 'width');\n  const {x, y, box} = getCanvasPosition(evt, canvas);\n  const xOffset = paddings.left + (box && borders.left);\n  const yOffset = paddings.top + (box && borders.top);\n  let {width, height} = chart;\n  if (borderBox) {\n    width -= paddings.width + borders.width;\n    height -= paddings.height + borders.height;\n  }\n  return {\n    x: Math.round((x - xOffset) / width * canvas.width / currentDevicePixelRatio),\n    y: Math.round((y - yOffset) / height * canvas.height / currentDevicePixelRatio)\n  };\n}\nfunction getContainerSize(canvas, width, height) {\n  let maxWidth, maxHeight;\n  if (width === undefined || height === undefined) {\n    const container = _getParentNode(canvas);\n    if (!container) {\n      width = canvas.clientWidth;\n      height = canvas.clientHeight;\n    } else {\n      const rect = container.getBoundingClientRect();\n      const containerStyle = getComputedStyle(container);\n      const containerBorder = getPositionedStyle(containerStyle, 'border', 'width');\n      const containerPadding = getPositionedStyle(containerStyle, 'padding');\n      width = rect.width - containerPadding.width - containerBorder.width;\n      height = rect.height - containerPadding.height - containerBorder.height;\n      maxWidth = parseMaxStyle(containerStyle.maxWidth, container, 'clientWidth');\n      maxHeight = parseMaxStyle(containerStyle.maxHeight, container, 'clientHeight');\n    }\n  }\n  return {\n    width,\n    height,\n    maxWidth: maxWidth || INFINITY,\n    maxHeight: maxHeight || INFINITY\n  };\n}\nconst round1 = v => Math.round(v * 10) / 10;\nfunction getMaximumSize(canvas, bbWidth, bbHeight, aspectRatio) {\n  const style = getComputedStyle(canvas);\n  const margins = getPositionedStyle(style, 'margin');\n  const maxWidth = parseMaxStyle(style.maxWidth, canvas, 'clientWidth') || INFINITY;\n  const maxHeight = parseMaxStyle(style.maxHeight, canvas, 'clientHeight') || INFINITY;\n  const containerSize = getContainerSize(canvas, bbWidth, bbHeight);\n  let {width, height} = containerSize;\n  if (style.boxSizing === 'content-box') {\n    const borders = getPositionedStyle(style, 'border', 'width');\n    const paddings = getPositionedStyle(style, 'padding');\n    width -= paddings.width + borders.width;\n    height -= paddings.height + borders.height;\n  }\n  width = Math.max(0, width - margins.width);\n  height = Math.max(0, aspectRatio ? Math.floor(width / aspectRatio) : height - margins.height);\n  width = round1(Math.min(width, maxWidth, containerSize.maxWidth));\n  height = round1(Math.min(height, maxHeight, containerSize.maxHeight));\n  if (width && !height) {\n    height = round1(width / 2);\n  }\n  return {\n    width,\n    height\n  };\n}\nfunction retinaScale(chart, forceRatio, forceStyle) {\n  const pixelRatio = forceRatio || 1;\n  const deviceHeight = Math.floor(chart.height * pixelRatio);\n  const deviceWidth = Math.floor(chart.width * pixelRatio);\n  chart.height = deviceHeight / pixelRatio;\n  chart.width = deviceWidth / pixelRatio;\n  const canvas = chart.canvas;\n  if (canvas.style && (forceStyle || (!canvas.style.height && !canvas.style.width))) {\n    canvas.style.height = `${chart.height}px`;\n    canvas.style.width = `${chart.width}px`;\n  }\n  if (chart.currentDevicePixelRatio !== pixelRatio\n      || canvas.height !== deviceHeight\n      || canvas.width !== deviceWidth) {\n    chart.currentDevicePixelRatio = pixelRatio;\n    canvas.height = deviceHeight;\n    canvas.width = deviceWidth;\n    chart.ctx.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);\n    return true;\n  }\n  return false;\n}\nconst supportsEventListenerOptions = (function() {\n  let passiveSupported = false;\n  try {\n    const options = {\n      get passive() {\n        passiveSupported = true;\n        return false;\n      }\n    };\n    window.addEventListener('test', null, options);\n    window.removeEventListener('test', null, options);\n  } catch (e) {\n  }\n  return passiveSupported;\n}());\nfunction readUsedSize(element, property) {\n  const value = getStyle(element, property);\n  const matches = value && value.match(/^(\\d+)(\\.\\d+)?px$/);\n  return matches ? +matches[1] : undefined;\n}\n\nfunction _pointInLine(p1, p2, t, mode) {\n  return {\n    x: p1.x + t * (p2.x - p1.x),\n    y: p1.y + t * (p2.y - p1.y)\n  };\n}\nfunction _steppedInterpolation(p1, p2, t, mode) {\n  return {\n    x: p1.x + t * (p2.x - p1.x),\n    y: mode === 'middle' ? t < 0.5 ? p1.y : p2.y\n    : mode === 'after' ? t < 1 ? p1.y : p2.y\n    : t > 0 ? p2.y : p1.y\n  };\n}\nfunction _bezierInterpolation(p1, p2, t, mode) {\n  const cp1 = {x: p1.cp2x, y: p1.cp2y};\n  const cp2 = {x: p2.cp1x, y: p2.cp1y};\n  const a = _pointInLine(p1, cp1, t);\n  const b = _pointInLine(cp1, cp2, t);\n  const c = _pointInLine(cp2, p2, t);\n  const d = _pointInLine(a, b, t);\n  const e = _pointInLine(b, c, t);\n  return _pointInLine(d, e, t);\n}\n\nconst intlCache = new Map();\nfunction getNumberFormat(locale, options) {\n  options = options || {};\n  const cacheKey = locale + JSON.stringify(options);\n  let formatter = intlCache.get(cacheKey);\n  if (!formatter) {\n    formatter = new Intl.NumberFormat(locale, options);\n    intlCache.set(cacheKey, formatter);\n  }\n  return formatter;\n}\nfunction formatNumber(num, locale, options) {\n  return getNumberFormat(locale, options).format(num);\n}\n\nconst getRightToLeftAdapter = function(rectX, width) {\n  return {\n    x(x) {\n      return rectX + rectX + width - x;\n    },\n    setWidth(w) {\n      width = w;\n    },\n    textAlign(align) {\n      if (align === 'center') {\n        return align;\n      }\n      return align === 'right' ? 'left' : 'right';\n    },\n    xPlus(x, value) {\n      return x - value;\n    },\n    leftForLtr(x, itemWidth) {\n      return x - itemWidth;\n    },\n  };\n};\nconst getLeftToRightAdapter = function() {\n  return {\n    x(x) {\n      return x;\n    },\n    setWidth(w) {\n    },\n    textAlign(align) {\n      return align;\n    },\n    xPlus(x, value) {\n      return x + value;\n    },\n    leftForLtr(x, _itemWidth) {\n      return x;\n    },\n  };\n};\nfunction getRtlAdapter(rtl, rectX, width) {\n  return rtl ? getRightToLeftAdapter(rectX, width) : getLeftToRightAdapter();\n}\nfunction overrideTextDirection(ctx, direction) {\n  let style, original;\n  if (direction === 'ltr' || direction === 'rtl') {\n    style = ctx.canvas.style;\n    original = [\n      style.getPropertyValue('direction'),\n      style.getPropertyPriority('direction'),\n    ];\n    style.setProperty('direction', direction, 'important');\n    ctx.prevTextDirection = original;\n  }\n}\nfunction restoreTextDirection(ctx, original) {\n  if (original !== undefined) {\n    delete ctx.prevTextDirection;\n    ctx.canvas.style.setProperty('direction', original[0], original[1]);\n  }\n}\n\nfunction propertyFn(property) {\n  if (property === 'angle') {\n    return {\n      between: _angleBetween,\n      compare: _angleDiff,\n      normalize: _normalizeAngle,\n    };\n  }\n  return {\n    between: _isBetween,\n    compare: (a, b) => a - b,\n    normalize: x => x\n  };\n}\nfunction normalizeSegment({start, end, count, loop, style}) {\n  return {\n    start: start % count,\n    end: end % count,\n    loop: loop && (end - start + 1) % count === 0,\n    style\n  };\n}\nfunction getSegment(segment, points, bounds) {\n  const {property, start: startBound, end: endBound} = bounds;\n  const {between, normalize} = propertyFn(property);\n  const count = points.length;\n  let {start, end, loop} = segment;\n  let i, ilen;\n  if (loop) {\n    start += count;\n    end += count;\n    for (i = 0, ilen = count; i < ilen; ++i) {\n      if (!between(normalize(points[start % count][property]), startBound, endBound)) {\n        break;\n      }\n      start--;\n      end--;\n    }\n    start %= count;\n    end %= count;\n  }\n  if (end < start) {\n    end += count;\n  }\n  return {start, end, loop, style: segment.style};\n}\nfunction _boundSegment(segment, points, bounds) {\n  if (!bounds) {\n    return [segment];\n  }\n  const {property, start: startBound, end: endBound} = bounds;\n  const count = points.length;\n  const {compare, between, normalize} = propertyFn(property);\n  const {start, end, loop, style} = getSegment(segment, points, bounds);\n  const result = [];\n  let inside = false;\n  let subStart = null;\n  let value, point, prevValue;\n  const startIsBefore = () => between(startBound, prevValue, value) && compare(startBound, prevValue) !== 0;\n  const endIsBefore = () => compare(endBound, value) === 0 || between(endBound, prevValue, value);\n  const shouldStart = () => inside || startIsBefore();\n  const shouldStop = () => !inside || endIsBefore();\n  for (let i = start, prev = start; i <= end; ++i) {\n    point = points[i % count];\n    if (point.skip) {\n      continue;\n    }\n    value = normalize(point[property]);\n    if (value === prevValue) {\n      continue;\n    }\n    inside = between(value, startBound, endBound);\n    if (subStart === null && shouldStart()) {\n      subStart = compare(value, startBound) === 0 ? i : prev;\n    }\n    if (subStart !== null && shouldStop()) {\n      result.push(normalizeSegment({start: subStart, end: i, loop, count, style}));\n      subStart = null;\n    }\n    prev = i;\n    prevValue = value;\n  }\n  if (subStart !== null) {\n    result.push(normalizeSegment({start: subStart, end, loop, count, style}));\n  }\n  return result;\n}\nfunction _boundSegments(line, bounds) {\n  const result = [];\n  const segments = line.segments;\n  for (let i = 0; i < segments.length; i++) {\n    const sub = _boundSegment(segments[i], line.points, bounds);\n    if (sub.length) {\n      result.push(...sub);\n    }\n  }\n  return result;\n}\nfunction findStartAndEnd(points, count, loop, spanGaps) {\n  let start = 0;\n  let end = count - 1;\n  if (loop && !spanGaps) {\n    while (start < count && !points[start].skip) {\n      start++;\n    }\n  }\n  while (start < count && points[start].skip) {\n    start++;\n  }\n  start %= count;\n  if (loop) {\n    end += start;\n  }\n  while (end > start && points[end % count].skip) {\n    end--;\n  }\n  end %= count;\n  return {start, end};\n}\nfunction solidSegments(points, start, max, loop) {\n  const count = points.length;\n  const result = [];\n  let last = start;\n  let prev = points[start];\n  let end;\n  for (end = start + 1; end <= max; ++end) {\n    const cur = points[end % count];\n    if (cur.skip || cur.stop) {\n      if (!prev.skip) {\n        loop = false;\n        result.push({start: start % count, end: (end - 1) % count, loop});\n        start = last = cur.stop ? end : null;\n      }\n    } else {\n      last = end;\n      if (prev.skip) {\n        start = end;\n      }\n    }\n    prev = cur;\n  }\n  if (last !== null) {\n    result.push({start: start % count, end: last % count, loop});\n  }\n  return result;\n}\nfunction _computeSegments(line, segmentOptions) {\n  const points = line.points;\n  const spanGaps = line.options.spanGaps;\n  const count = points.length;\n  if (!count) {\n    return [];\n  }\n  const loop = !!line._loop;\n  const {start, end} = findStartAndEnd(points, count, loop, spanGaps);\n  if (spanGaps === true) {\n    return splitByStyles(line, [{start, end, loop}], points, segmentOptions);\n  }\n  const max = end < start ? end + count : end;\n  const completeLoop = !!line._fullLoop && start === 0 && end === count - 1;\n  return splitByStyles(line, solidSegments(points, start, max, completeLoop), points, segmentOptions);\n}\nfunction splitByStyles(line, segments, points, segmentOptions) {\n  if (!segmentOptions || !segmentOptions.setContext || !points) {\n    return segments;\n  }\n  return doSplitByStyles(line, segments, points, segmentOptions);\n}\nfunction doSplitByStyles(line, segments, points, segmentOptions) {\n  const chartContext = line._chart.getContext();\n  const baseStyle = readStyle(line.options);\n  const {_datasetIndex: datasetIndex, options: {spanGaps}} = line;\n  const count = points.length;\n  const result = [];\n  let prevStyle = baseStyle;\n  let start = segments[0].start;\n  let i = start;\n  function addStyle(s, e, l, st) {\n    const dir = spanGaps ? -1 : 1;\n    if (s === e) {\n      return;\n    }\n    s += count;\n    while (points[s % count].skip) {\n      s -= dir;\n    }\n    while (points[e % count].skip) {\n      e += dir;\n    }\n    if (s % count !== e % count) {\n      result.push({start: s % count, end: e % count, loop: l, style: st});\n      prevStyle = st;\n      start = e % count;\n    }\n  }\n  for (const segment of segments) {\n    start = spanGaps ? start : segment.start;\n    let prev = points[start % count];\n    let style;\n    for (i = start + 1; i <= segment.end; i++) {\n      const pt = points[i % count];\n      style = readStyle(segmentOptions.setContext(createContext(chartContext, {\n        type: 'segment',\n        p0: prev,\n        p1: pt,\n        p0DataIndex: (i - 1) % count,\n        p1DataIndex: i % count,\n        datasetIndex\n      })));\n      if (styleChanged(style, prevStyle)) {\n        addStyle(start, i - 1, segment.loop, prevStyle);\n      }\n      prev = pt;\n      prevStyle = style;\n    }\n    if (start < i - 1) {\n      addStyle(start, i - 1, segment.loop, prevStyle);\n    }\n  }\n  return result;\n}\nfunction readStyle(options) {\n  return {\n    backgroundColor: options.backgroundColor,\n    borderCapStyle: options.borderCapStyle,\n    borderDash: options.borderDash,\n    borderDashOffset: options.borderDashOffset,\n    borderJoinStyle: options.borderJoinStyle,\n    borderWidth: options.borderWidth,\n    borderColor: options.borderColor\n  };\n}\nfunction styleChanged(style, prevStyle) {\n  return prevStyle && JSON.stringify(style) !== JSON.stringify(prevStyle);\n}\n\nexport { toFont as $, _rlookupByKey as A, _isPointInArea as B, getAngleFromPoint as C, toPadding as D, each as E, getMaximumSize as F, _getParentNode as G, HALF_PI as H, readUsedSize as I, throttled as J, supportsEventListenerOptions as K, _isDomSupported as L, log10 as M, _factorize as N, finiteOrDefault as O, PI as P, callback as Q, _addGrace as R, toDegrees as S, TAU as T, _measureText as U, _int16Range as V, _alignPixel as W, clipArea as X, renderText as Y, unclipArea as Z, _arrayUnique as _, resolve as a, QUARTER_PI as a$, _toLeftRightCenter as a0, _alignStartEnd as a1, overrides as a2, merge as a3, _capitalize as a4, descriptors as a5, isFunction as a6, _attachContext as a7, _createResolver as a8, _descriptors as a9, _textX as aA, restoreTextDirection as aB, noop as aC, distanceBetweenPoints as aD, _setMinAndMaxByKey as aE, niceNum as aF, almostWhole as aG, almostEquals as aH, _decimalPlaces as aI, _longestText as aJ, _filterBetween as aK, _lookup as aL, isPatternOrGradient as aM, getHoverColor as aN, clone$1 as aO, _merger as aP, _mergerIf as aQ, _deprecated as aR, toFontString as aS, splineCurve as aT, splineCurveMonotone as aU, getStyle as aV, fontString as aW, toLineHeight as aX, PITAU as aY, INFINITY as aZ, RAD_PER_DEG as a_, mergeIf as aa, uid as ab, debounce as ac, retinaScale as ad, clearCanvas as ae, setsEqual as af, _elementsEqual as ag, _isClickEvent as ah, _isBetween as ai, _readValueToProps as aj, _updateBezierControlPoints as ak, _computeSegments as al, _boundSegments as am, _steppedInterpolation as an, _bezierInterpolation as ao, _pointInLine as ap, _steppedLineTo as aq, _bezierCurveTo as ar, drawPoint as as, addRoundedRectPath as at, toTRBL as au, toTRBLCorners as av, _boundSegment as aw, _normalizeAngle as ax, getRtlAdapter as ay, overrideTextDirection as az, isArray as b, TWO_THIRDS_PI as b0, _angleDiff as b1, color as c, defaults as d, effects as e, resolveObjectKey as f, isNumberFinite as g, createContext as h, isObject as i, defined as j, isNullOrUndef as k, listenArrayEvents as l, toPercentage as m, toDimension as n, formatNumber as o, _angleBetween as p, isNumber as q, requestAnimFrame as r, sign as s, toRadians as t, unlistenArrayEvents as u, valueOrDefault as v, _limitValue as w, _lookupByKey as x, _parseObjectDataRadialScale as y, getRelativePosition as z };\n","import {Chart, ArcElement, DoughnutController, Tooltip } from 'chart.js';\nChart.register(\n  ArcElement,\n  DoughnutController,\n  Tooltip,\n);\n// VIEW\n\n// mortgage amount - сумма ипотеки\nconst renderMortgageAmount = (elements, watchedState) => {\n  const { resultMortgageAmount } = elements;\n  const { result } = watchedState;\n  if (resultMortgageAmount) {\n    resultMortgageAmount.innerHTML = result['mortgage-amount'].toLocaleString('en-US', { minimumFractionDigits: 2 });\n  }\n};\n\n// monthly payment - ежемесячный платеж\nconst renderMonthlyPayment = (elements, watchedState) => {\n  const { resultMonthlyPayment } = elements;\n  const { result } = watchedState;\n\n  if (resultMonthlyPayment) {\n    resultMonthlyPayment.innerHTML = result['monthly-payment'].toLocaleString('en-US', { minimumFractionDigits: 2 });\n  }\n};\n\n// total cost - общая ипотека\nconst renderTotalCost = (elements, watchedState) => {\n  const { resultTotalCost } = elements;\n  const { result } = watchedState;\n\n  if (resultTotalCost) {\n    resultTotalCost.innerHTML = result['mortgage-total-cost'].toLocaleString('en-US', { minimumFractionDigits: 2 });\n  }\n};\n\n// render donut\nconst renderDonutChart = (elements, watchedState) => {\n  const { donutBox } = elements;\n  const { donutData } = watchedState;\n\n  const allDataForChart = donutData.filter((item) => {\n    const { data } = item;\n    if (data) {\n      return item;\n    }\n    return 0;\n  });\n  const chartLabels = allDataForChart.map(({ name }) => name);\n  const chartData = allDataForChart.map(({ data }) => data);\n  const chartColors = allDataForChart.map(({ color }) => color);\n\n  const donutConfigData = {\n    labels: chartLabels,\n    datasets: [{\n      data: chartData,\n      backgroundColor: chartColors,\n      borderRadius: 5,\n      spacing: 5,\n      hoverOffset: 3,\n    }],\n  };\n\n  const config = {\n    type: 'doughnut',\n    data: donutConfigData,\n    options: [],\n  };\n\n  const chartStatus = Chart.getChart(donutBox);\n\n  if (chartStatus !== undefined) {\n    chartStatus.destroy();\n  }\n  new Chart(donutBox, config);\n};\n\nexport const render = (elements, watchedState) => {\n  // renderMortgageAmount\n  renderMortgageAmount(elements, watchedState);\n  // renderTotalCost\n  renderTotalCost(elements, watchedState);\n  // renderMonthlyPayment\n  renderMonthlyPayment(elements, watchedState);\n  // renderDonutChart\n  renderDonutChart(elements, watchedState);\n};\n\nexport const renderSwitchPmi = (elements, value) => {\n  const { switchPmiBlock } = elements;\n  if (value) {\n    switchPmiBlock.forEach((item) => item.style.display = 'none');\n  } else {\n    switchPmiBlock.forEach((item) => item.style.display = 'block');\n  }\n};\nexport const renderSwitchTax = (elements, value) => {\n  const { switchTaxesBlock } = elements;\n  if (value) {\n    switchTaxesBlock.forEach((item) => {\n      const itemResult = item;\n      itemResult.style.display = 'none'\n    });\n  } else {\n    switchTaxesBlock.forEach((item) =>  {\n      const itemResult = item;\n      itemResult.style.display = 'block'\n    });\n  }\n};\n// set colors in legend\nexport const legendSetColors = (elements, watchedState) => {\n  const { donutLegendItems } = elements;\n  const { donutData } = watchedState;\n\n  donutLegendItems.forEach((item) => {\n    donutData.forEach(({ name, color }, index) => {\n      if (item.getAttribute('data-calc-legend-name') === donutData[index].name) {\n        item.style.backgroundColor = donutData[index].color;\n      }\n    });\n  });\n};\n","const htmlTemplateForm = () => {\r\n    const calculatorWrp = document.getElementById('calculator-mortgage-payment');\r\n\r\n    if (!calculatorWrp) {\r\n        return false;\r\n    }\r\n\r\n    const html = `<div class=\"calc-wrp\">\r\n    <section class=\"calc-wrp__container\">\r\n        <div class=\"calc-wrp__form-block-wrapper\">\r\n            <div class=\"container\">\r\n                <div class=\"calculator\">\r\n                    <div class=\"calculator__fields\">\r\n                        <div class=\"form\">\r\n                            <form id=\"calculator\" name=\"calc\" class=\"form__wrapper\" aria-label=\"Calculator\">\r\n\r\n                                <div class=\"form__layout\">\r\n        <!--                            Home price, $-->\r\n                                    <div class=\"form__item\">\r\n                                        <label for=\"home-price\" class=\"label\">Home price, $</label>\r\n                                        <input type=\"number\"\r\n                                               class=\"input w-input\"\r\n                                               maxlength=\"256\"\r\n                                               name=\"home-price\"\r\n                                               placeholder=\"250000\"\r\n                                               value=\"500000\"\r\n                                               id=\"home-price\">\r\n                                    </div>\r\n        <!--                            Loan term, year-->\r\n                                    <div class=\"form__item\">\r\n                                        <label class=\"label\">Loan term, year</label>\r\n                                        <div class=\"form__radiobuttons\">\r\n                                            <label class=\"radio\" for=\"10\">\r\n                                                <input type=\"radio\"\r\n                                                       name=\"term\"\r\n                                                       id=\"10\"\r\n                                                       value=\"10\">\r\n                                                <div class=\"radio__icon\"></div>\r\n                                                <span class=\"radio__label w-form-label\">10</span>\r\n                                            </label>\r\n\r\n                                            <label class=\"radio\" for=\"15\">\r\n                                                <input type=\"radio\"\r\n                                                       name=\"term\"\r\n                                                       id=\"15\"\r\n                                                       value=\"15\">\r\n                                                <div class=\"radio__icon\"></div>\r\n                                                <span class=\"radio__label w-form-label\">15</span>\r\n                                            </label>\r\n\r\n                                            <label class=\"radio\" for=\"20\">\r\n                                                <input type=\"radio\"\r\n                                                       name=\"term\"\r\n                                                       id=\"20\"\r\n                                                       value=\"20\">\r\n                                                <div class=\"radio__icon\"></div>\r\n                                                <span class=\"radio__label w-form-label\">20</span>\r\n                                            </label>\r\n\r\n                                            <label class=\"radio\" for=\"30\">\r\n                                                <input type=\"radio\"\r\n                                                       name=\"term\"\r\n                                                       id=\"30\"\r\n                                                       value=\"30\"\r\n                                                       checked>\r\n                                                <div class=\"radio__icon\"></div>\r\n                                                <span class=\"radio__label w-form-label\">30</span>\r\n                                            </label>\r\n                                        </div>\r\n                                    </div>\r\n        <!--                            Down payment, $-->\r\n                                    <div class=\"form__item condition-item\">\r\n                                        <label for=\"down-payment\" class=\"label\">Down payment, $</label>\r\n                                        <input type=\"number\"\r\n                                               class=\"input w-input\"\r\n                                               maxlength=\"256\"\r\n                                               name=\"down-payment\"\r\n                                               placeholder=\"100000\"\r\n                                               value=\"100000\"\r\n                                               id=\"down-payment\">\r\n                                    </div>\r\n        <!--                            Interest Rate, %-->\r\n                                    <div class=\"form__item condition-item\">\r\n                                        <label for=\"interest-rate\" class=\"label\">Interest Rate, %</label>\r\n                                        <input type=\"number\"\r\n                                               class=\"input w-input\"\r\n                                               name=\"interest-rate\"\r\n                                               id=\"interest-rate\"\r\n                                               step=\"0.1\"\r\n                                               min=\"0.5\"\r\n                                               value=\"3.50\">\r\n                                    </div>\r\n        <!--                        Checkbox Include -->\r\n                                    <div class=\"form__item\">\r\n                                        <label class=\"w-checkbox checkbox checkbox-inline\" for=\"tax-switch\">\r\n                                            <input type=\"checkbox\"\r\n                                                   name=\"tax-switch\"\r\n                                                   id=\"tax-switch\"\r\n                                                   data-name=\"tax-switch\"\r\n                                                   data-calc-exclude=\"property-tax\"\r\n                                                   checked=\"checked\">\r\n                                            <div class=\"checkbox__icon\"></div>\r\n                                            <span class=\"checkbox__label\">Include Taxes/Insurance</span>\r\n                                        </label>\r\n                                    </div>\r\n        <!--                        Checkbox empty-->\r\n                                    <div class=\"form__item\"></div>\r\n        <!--                        Home insurance (yearly), $-->\r\n                                    <div class=\"form__item condition-item\" data-property-tax>\r\n                                        <label for=\"home-insurance\" class=\"label\">Home insurance (yearly), $</label>\r\n                                        <input type=\"number\"\r\n                                               class=\"input w-input\"\r\n                                               name=\"home-insurance\"\r\n                                               id=\"home-insurance\"\r\n                                               value=\"1200\">\r\n                                    </div>\r\n        <!--                        Property tax (yearly), $-->\r\n                                    <div class=\"form__item condition-item\" data-property-tax>\r\n                                        <label for=\"property-tax\" class=\"label\">Property tax (yearly), $</label>\r\n                                        <input type=\"number\"\r\n                                               class=\"input w-input\"\r\n                                               name=\"property-tax\"\r\n                                               placeholder=\"0\"\r\n                                               value=\"0\"\r\n                                               id=\"property-tax\">\r\n                                    </div>\r\n        <!--                        Checkbox Include -->\r\n                                    <div class=\"form__item\">\r\n                                        <label class=\"w-checkbox checkbox checkbox-inline\" for=\"pmi-switch\">\r\n                                            <input type=\"checkbox\"\r\n                                                   name=\"pmi-switch\"\r\n                                                   class=\"swticher\"\r\n                                                   id=\"pmi-switch\"\r\n                                                   checked=\"checked\"\r\n                                                   data-calc-exclude=\"pmi-rate\">\r\n                                            <div class=\"checkbox__icon\"></div>\r\n                                            <span class=\"checkbox__label\">Include PMI</span>\r\n                                        </label>\r\n                                    </div>\r\n<!--                        Checkbox empty-->\r\n                                    <div class=\"form__item\"></div>\r\n<!--                        PMI rate-->\r\n                                    <div class=\"form__item\" data-pmi-rate>\r\n                                        <label for=\"pmi-rate\" class=\"label\">PMI rate</label>\r\n                                        <input type=\"number\"\r\n                                               class=\"input w-input\"\r\n                                               name=\"pmi-rate\"\r\n                                               placeholder=\"0.001\"\r\n                                               step=\"0.001\"\r\n                                               value=\"0.005\"\r\n                                               id=\"pmi-rate\">\r\n                                    </div>\r\n<!--                        HOA dues, $-->\r\n                                    <div class=\"form__item\">\r\n                                        <label for=\"hoa-dues\" class=\"label\">HOA dues, $</label>\r\n                                        <input type=\"number\"\r\n                                               class=\"input w-input\"\r\n                                               name=\"hoa-dues\"\r\n                                               placeholder=\"0\"\r\n                                               value=\"0\"\r\n                                               id=\"hoa-dues\">\r\n                                    </div>\r\n                                </div>\r\n\r\n                                <input type=\"submit\" value=\"Calculate now\" data-wait=\"Please wait...\" class=\"btn calc-wrp__btn-calc\">\r\n                            </form>\r\n                        </div>\r\n                    </div>\r\n\r\n                    <div class=\"calculator__graphics\">\r\n                        <div class=\"calculator__prices\">\r\n                            <div class=\"calculator__price\">\r\n                                <div class=\"calculator__price-label\">Mortgage Amount, $</div>\r\n                                <div class=\"calculator__price-number\" data-calc-result=\"amount\"> </div>\r\n                            </div>\r\n                            <div class=\"calculator__price\">\r\n                                <div class=\"calculator__price-label\">Total Cost Of Mortgage, $</div>\r\n                                <div class=\"calculator__price-number\" data-calc-result=\"total\"> </div>\r\n                            </div>\r\n                        </div>\r\n                        <div class=\"chart__donut\">\r\n\r\n                            <div class=\"chart__text\">\r\n                                <div class=\"chart__description\">Monthly payment:</div>\r\n                                <div class=\"chart__price\">\r\n                                    <span data-calc-result=\"monthly\"></span>\r\n                                </div>\r\n                            </div>\r\n\r\n                            <div class=\"chart__donut-wrp\">\r\n                                <canvas id=\"donutBox\" data-calc=\"donut\" width=\"400\" height=\"400\"></canvas>\r\n                            </div>\r\n\r\n                            <div class=\"legend\">\r\n                                <div class=\"legend__item\">\r\n                                    <div class=\"legend__color\" data-calc-legend-name=\"P&amp;I\"></div>\r\n                                    <div class=\"legend__text\">P&amp;I</div>\r\n                                </div>\r\n                                <div class=\"legend__item\">\r\n                                    <div class=\"legend__color\" data-calc-legend-name=\"Insurance\"></div>\r\n                                    <div class=\"legend__text\">Insurance</div>\r\n                                </div>\r\n                                <div class=\"legend__item\">\r\n                                    <div class=\"legend__color\" data-calc-legend-name=\"Taxes\"></div>\r\n                                    <div class=\"legend__text\">Taxes</div>\r\n                                </div>\r\n                                <div class=\"legend__item\">\r\n                                    <div class=\"legend__color\" data-calc-legend-name=\"PMI\"></div>\r\n                                    <div class=\"legend__text\">PMI</div>\r\n                                </div>\r\n                                <div class=\"legend__item\">\r\n                                    <div class=\"legend__color\" data-calc-legend-name=\"HOA\"></div>\r\n                                    <div class=\"legend__text\">HOA</div>\r\n                                </div>\r\n                            </div>\r\n\r\n                        </div>\r\n                    </div>\r\n                </div>\r\n            </div>\r\n        </div>\r\n    </section>\r\n</div>`;\r\n\r\n    calculatorWrp.insertAdjacentHTML(\"afterbegin\", html);\r\n\r\n    return true;\r\n};\r\n\r\nexport default htmlTemplateForm;","import \"../scss/styles.scss\";\n\nimport onChange from 'on-change';\n\nimport calc from './calc';\nimport { render, renderSwitchPmi, renderSwitchTax, legendSetColors } from './render';\nimport htmlTemplateForm from \"./htmlTemplateForm\";\n\n// controller\n\n// watch exclude changes\nconst updateExclude = (form, watchedState) => {\n  const excludesElements = form.querySelectorAll('[data-calc-exclude]');\n  const { exclude } = watchedState.form;\n\n  [...excludesElements].forEach((excludeItem) => {\n    const { checked } = excludeItem;\n    const { calcExclude } = excludeItem.dataset;\n    const calcExcludeCollection = calcExclude.split(',');\n\n    calcExcludeCollection.forEach((name) => {\n      exclude[name] = !checked;\n    });\n  });\n};\n\nconst updateValues = (elements, watchedState) => {\n  const { values } = watchedState.form;\n  const { form } = elements;\n  const formData = new FormData(form);\n\n  // update values\n  [...formData.entries()].forEach(([key, value]) => {\n    if (key in values) {\n      values[key] = value === '' ? 0 : +value;\n    }\n  });\n\n  // update exclude list\n  updateExclude(form, watchedState);\n};\n\nconst init = () => {\n\n  const isTemplate = htmlTemplateForm();\n\n  if(!isTemplate) {\n    return false;\n  }\n\n  // MODEL\n  const elements = {\n    form: document.forms.calc,\n    resultMortgageAmount: document.querySelector('[data-calc-result=\"amount\"]'),\n    resultTotalCost: document.querySelector('[data-calc-result=\"total\"]'),\n    resultMonthlyPayment: document.querySelector('[data-calc-result=\"monthly\"]'),\n    switchPmiBlock: document.querySelectorAll('[data-pmi-rate]'),\n    switchTaxesBlock: document.querySelectorAll('[data-property-tax]'),\n    // for donut\n    donutBox: document.querySelector('[data-calc=\"donut\"]'),\n    donutLegendItems: document.querySelectorAll('[data-calc-legend-name]'),\n  };\n\n  // MODEL\n  const state = {\n    form: {\n      values: {\n        'home-price': null,\n        'down-payment': null,\n        'interest-rate': null,\n        'home-insurance': null,\n        'property-tax': null,\n        'pmi-rate': null,\n        'hoa-dues': null,\n        term: null,\n      },\n      exclude: {\n        'home-insurance': null,\n        'pmi-rate': null,\n        'property-tax': null,\n      },\n    },\n    result: {\n      'mortgage-amount': null,\n      'monthly-payment': null,\n      'mortgage-insurance': null,\n      'mortgage-total-cost': null,\n    },\n    donutData: [\n      {\n        key: 'pi',\n        name: 'P&I',\n        color: '#0D93FF',\n        data: null,\n      },\n      {\n        key: 'insurance',\n        name: 'Insurance',\n        color: '#07BECB',\n        data: null,\n      },\n      {\n        key: 'taxes',\n        name: 'Taxes',\n        color: '#333333',\n        data: null,\n      },\n      {\n        key: 'pmi',\n        name: 'PMI',\n        color: '#D3E2EE',\n        data: null,\n      },\n      {\n        key: 'hoa',\n        name: 'HOA',\n        color: '#F2F2F2',\n        data: null,\n      },\n    ],\n  };\n\n  // MODEL\n  const watchedState = onChange(state, (path, value) => {\n    switch (path) {\n      case 'form.exclude.pmi-rate':\n        renderSwitchPmi(elements, value);\n        break;\n      case 'form.exclude.property-tax':\n        renderSwitchTax(elements, value);\n        break;\n\n      default:\n        break;\n    }\n\n    calc(elements, watchedState);\n  });\n\n  // CONTROLLER\n  const { form } = elements;\n\n  form.addEventListener('submit', (e) => {\n    e.preventDefault();\n    render(elements, watchedState);\n  });\n\n  form.addEventListener('change', () => {\n    updateValues(elements, watchedState);\n    render(elements, watchedState);\n  });\n  // FIRST START\n  updateValues(elements, watchedState);\n  render(elements, watchedState);\n  legendSetColors(elements, watchedState);\n};\n\ninit();\n"],"names":["Object","defineProperty","module","exports","value","default","arr","Array","isArray","iter","Symbol","iterator","from","TypeError","o","minLen","$754f2230d28b4006$var$_arrayLikeToArray","n","prototype","toString","call","slice","constructor","name","test","obj","parcelRequire","__esModule","len","length","i","arr2","$be78ef404241288e$var$_arrayLikeToArray","key","enumerable","configurable","writable","$177e4dc8bbdb19dd$var$setPrototypeOf","o1","p1","setPrototypeOf","p","__proto__","Reflect","construct","sham","Proxy","Boolean","valueOf","e","$787d03f89f83f4c9$var$getPrototypeOf","getPrototypeOf","self","$58a9b42ecfcc7f21$var$_typeOf","$58a9b42ecfcc7f21$var$_assertThisInitialized","$58a9b42ecfcc7f21$var$_interopRequireDefault","ReferenceError","object","property","hasOwnProperty","$4326f7ac14a75c5e$var$_getPrototypeOf","Parent","args","Class","$7016d9b66661457f$var$construct","apply","arguments","$7016d9b66661457f$var$_setPrototypeOf","$7016d9b66661457f$var$isNativeReflectConstruct","Date","Parent1","args1","Class1","a","push","instance","Function","bind","fn","indexOf","$851d4092af184b9f$exports","$851d4092af184b9f$var$_arrayWithHoles","$851d4092af184b9f$var$_iterableToArray","$851d4092af184b9f$var$_unsupportedIterableToArray","$851d4092af184b9f$var$_nonIterableRest","$851d4092af184b9f$var$_interopRequireDefault","$99f5f7b1214d60cd$exports","$99f5f7b1214d60cd$var$_arrayWithoutHoles","$99f5f7b1214d60cd$var$_iterableToArray","$99f5f7b1214d60cd$var$_unsupportedIterableToArray","$99f5f7b1214d60cd$var$_nonIterableSpread","$99f5f7b1214d60cd$var$_interopRequireDefault","$684674c28eecb48c$exports","target","source","ownKeys","keys","getOwnPropertySymbols","concat","filter","sym","getOwnPropertyDescriptor","forEach","$684674c28eecb48c$var$_defineProperty","$76236c32ec326845$export$f8bb2f9f4607ed91","$76236c32ec326845$export$9cb8e7b38dc3cece","$76236c32ec326845$export$881b71df7abed909","$30337f733f6769f4$export$2191e61a810db5fc","Set","Map","WeakSet","WeakMap","ArrayBuffer","isView","$30337f733f6769f4$export$281bb0ec97352a76","RegExp","$430ff92a865a5ead$export$2e2bcd8739ae039","$eluPL","$5d34d28d7af8b0cd$export$2e2bcd8739ae039","$parcel$interopDefault","$a2b5270b3c1ce444$export$2e2bcd8739ae039","after","path1","subPath","path2","undefined","initial","path3","index","lastIndexOf","last","path4","walk","path5","callback","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_step","_iterator","next","done","err","position","get","path6","this","$145334581f366e83$export$2e2bcd8739ae039","$c49733f6fbffc854$export$2e2bcd8739ae039","thisArg","applyPath","prepareValue","originalNext","result","keyIterator","$d3c2bfddaa066e16$export$2e2bcd8739ae039","cache","options","isUnsubscribed","ignoreSymbols","ignoreUnderscores","charAt","ignoreKeys","includes","$62087b7f8659a59a$exports","Constructor","$c7600624071be2a9$var$_defineProperties","props","descriptor","$c7600624071be2a9$exports","protoProps","staticProps","$11607cf28142052c$export$2e2bcd8739ae039","Cache","equals","_equals","_proxyCache","_pathCache","_descriptorCache","descriptorCache","_getDescriptorCache","properties","set","_getProperties","handler","proxyTarget","reflectTarget","proxy","is","getPath","receiver","previous","_getOwnPropertyDescriptor","deleteProperty","b","$295f9147c6c3d56b$export$2e2bcd8739ae039","$d5e2750444cfaf49$export$2e2bcd8739ae039","$f32c9b6f5d805994$export$2e2bcd8739ae039","clone","some","item","$9e7cfb33e70ec3ea$export$87ab45442debb687","$6c508472989d2e8d$var$IMMUTABLE_ARRAY_METHODS","$6c508472989d2e8d$export$4e33e1ac2be38fa3","pop","shift","unshift","copyWithin","reverse","sort","splice","flat","fill","$6c508472989d2e8d$export$157c4abf6d17869e","$6f6d709f5bb88b9b$export$2e2bcd8739ae039","size","element","has","$015f47dbfbfdde23$export$fc33389dd13370bf","$015f47dbfbfdde23$export$917446fc33e7cb53","$015f47dbfbfdde23$export$1b750ad9668ebc59","add","clear","delete","$015f47dbfbfdde23$export$31c36d107390313f","$94a012df4e2cb335$export$2e2bcd8739ae039","bValue","_value","aValue","$a88782aad97efb97$var$IMMUTABLE_MAP_METHODS","$a88782aad97efb97$export$5e358a2f59cad3d0","$a88782aad97efb97$export$424149ce245f02b7","$c179fcbfeb962b56$export$2e2bcd8739ae039","CloneObject","argumentsList","hasOnValidate","_path","_isChanged","_clonedCache","_hasOnValidate","_changes","_shallowClone","map","_this","entries","item1","isHandledMethod","thisProxyTarget","_onIsChanged","fullPath","changePath","path","change","$09c1cc611300955b$exports","subClass","superClass","create","$09c1cc611300955b$var$_setPrototypeOf","$09c1cc611300955b$var$_interopRequireDefault","$fd3033705dcaf8a0$exports","Derived","hasNativeReflectConstruct","$fd3033705dcaf8a0$var$_isNativeReflectConstruct","Super","$fd3033705dcaf8a0$var$_getPrototypeOf","NewTarget","$fd3033705dcaf8a0$var$_possibleConstructorReturn","$fd3033705dcaf8a0$var$_interopRequireDefault","$af9010834eef8e38$export$2e2bcd8739ae039","CloneObject1","CloneArray","$8832af47da85f055$export$2e2bcd8739ae039","CloneDate","setTime","getTime","$b6a26d5570d43414$export$2e2bcd8739ae039","CloneSet","_iteratorNormalCompletion1","_didIteratorError1","_iteratorError1","_step1","_iterator1","value1","err1","$da4278a64784ffed$export$2e2bcd8739ae039","CloneMap","key1","$b4c5188130e5399f$export$2e2bcd8739ae039","CloneWeakSet","_arg1","_weakValue","$48ae83f2d37d63bf$export$2e2bcd8739ae039","CloneWeakMap","_weakKey","_weakHas","weakHas","$fe3e3ce80c41e1b5$export$2e2bcd8739ae039","SmartClone","_stack","CloneClass","update","preferredThisArg","isMutable","isChanged","_previousClone","undo","$8eb906781cb3291b$var$defaultOptions","isShallow","pathAsArray","ignoreDetached","details","$8eb906781cb3291b$var$onChange","onChange1","onValidate","smartClone","validate","applyData","isCloning","handleChangeOnTarget","isDetached","handleChange","getProxyTarget","basePath","isGetInvariant","getProxy","unsubscribe","isValid","setProperty","isSameDescriptor","isHandledType","start","argument","stop","$8eb906781cb3291b$export$2e2bcd8739ae039","$3ca67fadebb3004e$var$setFormatNumber","dataFormat","Math","round","$3ca67fadebb3004e$export$2e2bcd8739ae039","elements","watchedState","form","donutData","values","exclude","homePrice","downPayment","interestRate","homeInsurance","propertyTax","pmiRate","hoaAmount","term","mortgageAmount","paymentsMonths","interestRateResult","pmiResult","excludeValue","$3ca67fadebb3004e$var$getPmiResult","homeInsuranceResult","$3ca67fadebb3004e$var$homeInsuranceCalc","propertyTaxResult","$3ca67fadebb3004e$var$propertyTaxCalc","monthlyPaymentResult","pow","$3ca67fadebb3004e$var$monthlyPaymentCalc","monthlyPIResult","$3ca67fadebb3004e$var$monthlyPICalc","totalCostAmountResult","$3ca67fadebb3004e$var$totalCostAmountCalc","param","data","$cvAJU","$136ec44dd81a66ec$exports","$136ec44dd81a66ec$var$get","$136ec44dd81a66ec$var$_superPropBase","$136ec44dd81a66ec$var$_interopRequireDefault","target1","property1","receiver1","base","desc","$db4e3c64f6250489$exports","$db4e3c64f6250489$var$wrapNativeSuper","$db4e3c64f6250489$var$_construct","$db4e3c64f6250489$var$_interopRequireDefault","$db4e3c64f6250489$var$_isNativeFunction","$db4e3c64f6250489$var$_getPrototypeOf","$db4e3c64f6250489$var$_setPrototypeOf","_cache","Wrapper","$0045e36c722c20ac$export$43caf9889c228507","window","callback1","requestAnimationFrame","$0045e36c722c20ac$export$b4171a6734a65d42","updateFn","updateArgs","ticking","_len","rest","_key","$0045e36c722c20ac$export$34aec0b863436764","align","$0045e36c722c20ac$export$3c2fa207a37baaea","end","$0045e36c722c20ac$export$91c6e00c14e7e6fd","left","right","rtl","$0045e36c722c20ac$export$890c4ad488842ce7","id","$0045e36c722c20ac$export$555508cbc6add439","$0045e36c722c20ac$export$342063e11d6c3cad","$0045e36c722c20ac$export$8b22cf2602fb60ce","type","$0045e36c722c20ac$export$23f2a1d2818174ef","$0045e36c722c20ac$export$39b482c5e57630a8","Number","isFinite","$0045e36c722c20ac$export$c4ce752e73470fba","defaultValue","$0045e36c722c20ac$export$90a7f3efeed30595","$0045e36c722c20ac$export$7ccc53e8f1e7dfc5","dimension","endsWith","parseFloat","$0045e36c722c20ac$export$3722cfe417b6ed86","$0045e36c722c20ac$export$a9c23c6ac3fc3eca","loopable","$0045e36c722c20ac$export$ee7c8ad385a60b7b","a0","a1","ilen","v0","v1","datasetIndex","$0045e36c722c20ac$export$c03999cb2f36933f","klen","k","$0045e36c722c20ac$var$isValidKey","$0045e36c722c20ac$export$2ed0fc6709e59212","tval","sval","$0045e36c722c20ac$export$6559d589eb85fbb6","sources","merger","$0045e36c722c20ac$export$7910e0436ed8d1de","$0045e36c722c20ac$export$f96d196f7728bb5","$0045e36c722c20ac$var$indexOfDotOrLength","idx","$0045e36c722c20ac$export$2d1720544b23b823","pos","$0045e36c722c20ac$export$efca4cbe5dd06740","str","toUpperCase","$0045e36c722c20ac$export$35e795649ee09318","$0045e36c722c20ac$export$2e2af4578d910ddf","$0045e36c722c20ac$export$c9170ad7d4cd7e57","$0045e36c722c20ac$export$995eb9fca571757","$0045e36c722c20ac$export$56c0d5a1e737357d","PI","$0045e36c722c20ac$export$971d5caa766a69d7","$0045e36c722c20ac$export$e171bab687b50e0","$0045e36c722c20ac$export$527e9aa3390079e9","POSITIVE_INFINITY","$0045e36c722c20ac$export$a17c37559e1db147","$0045e36c722c20ac$export$7f8ddf7c7c20b3cd","$0045e36c722c20ac$export$fef3dfd9bad05307","$0045e36c722c20ac$export$8c78c7c36408ea29","$0045e36c722c20ac$export$3a1a48c8f6ef640e","log10","$0045e36c722c20ac$export$2408f22a0fab9ae5","sign","$0045e36c722c20ac$export$cf2f7c5792f80b46","range","roundedRange","$0045e36c722c20ac$export$a33b77bbdbb8366c","niceRange","floor","fraction","$0045e36c722c20ac$export$a07804094c3ecf2d","sqrt","$0045e36c722c20ac$export$9e5f44173e64f162","isNaN","x","y","epsilon","abs","$0045e36c722c20ac$export$158acd800e1ef08b","array","min","max","$0045e36c722c20ac$export$625550452a3fa3ec","degrees","$0045e36c722c20ac$export$25ce5a424b770e84","radians","$0045e36c722c20ac$export$b9a6b53f9be3734","$0045e36c722c20ac$export$e7094788287c5e9b","centrePoint","anglePoint","distanceFromXCenter","distanceFromYCenter","radialDistanceFromCenter","angle","atan2","distance","$0045e36c722c20ac$export$24baa2b76016ce0e","pt1","pt2","$0045e36c722c20ac$export$d29e374196577086","$0045e36c722c20ac$export$9fa96a7d116ea3ce","$0045e36c722c20ac$export$ffb5f4729a158638","sameAngleIsFullCircle","s","angleToStart","angleToEnd","startToAngle","endToAngle","$0045e36c722c20ac$export$efccba1c4a2ef57b","$0045e36c722c20ac$export$f38c853ae54ed474","$0045e36c722c20ac$var$atEdge","t","$0045e36c722c20ac$var$elasticIn","sin","$0045e36c722c20ac$var$elasticOut","$0045e36c722c20ac$export$f1e1789686576879","linear","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","easeInSine","cos","easeOutSine","easeInOutSine","easeInExpo","easeOutExpo","easeInOutExpo","easeInCirc","easeOutCirc","easeInOutCirc","easeInElastic","easeOutElastic","easeInOutElastic","easeInBack","easeOutBack","easeInOutBack","easeInBounce","easeOutBounce","m","d","easeInOutBounce","$0045e36c722c20ac$var$round","v","$0045e36c722c20ac$var$lim","l","h","$0045e36c722c20ac$var$p2b","$0045e36c722c20ac$var$n2b","$0045e36c722c20ac$var$b2n","$0045e36c722c20ac$var$n2p","$0045e36c722c20ac$var$map$1","A","B","C","D","E","F","c","f","$0045e36c722c20ac$var$hex","$0045e36c722c20ac$var$h1","$0045e36c722c20ac$var$h2","$0045e36c722c20ac$var$eq","$0045e36c722c20ac$var$hexString","r","g","$0045e36c722c20ac$var$isShort","$0045e36c722c20ac$var$alpha","$0045e36c722c20ac$var$HUE_RE","$0045e36c722c20ac$var$hsl2rgbn","$0045e36c722c20ac$var$hsv2rgbn","$0045e36c722c20ac$var$hwb2rgbn","w","rgb","$0045e36c722c20ac$var$rgb2hsl","$0045e36c722c20ac$var$hueValue","$0045e36c722c20ac$var$calln","$0045e36c722c20ac$var$hsl2rgb","$0045e36c722c20ac$var$hue","$0045e36c722c20ac$var$hueParse","exec","p2","$0045e36c722c20ac$var$hwb2rgb","$0045e36c722c20ac$var$hsv2rgb","$0045e36c722c20ac$var$names","$0045e36c722c20ac$var$map","Z","Y","X","W","V","U","T","S","R","Q","P","O","N","M","L","K","G","H","I","J","$0045e36c722c20ac$var$names$1","OiceXe","antiquewEte","aqua","aquamarRe","azuY","beige","bisque","black","blanKedOmond","Xe","XeviTet","bPwn","burlywood","caMtXe","KartYuse","KocTate","cSO","cSnflowerXe","cSnsilk","crimson","cyan","xXe","xcyan","xgTMnPd","xWay","xgYF","xgYy","xkhaki","xmagFta","xTivegYF","xSange","xScEd","xYd","xsOmon","xsHgYF","xUXe","xUWay","xUgYy","xQe","xviTet","dAppRk","dApskyXe","dimWay","dimgYy","dodgerXe","fiYbrick","flSOwEte","foYstWAn","fuKsia","gaRsbSo","ghostwEte","gTd","gTMnPd","Way","gYF","gYFLw","gYy","honeyMw","hotpRk","RdianYd","Rdigo","ivSy","khaki","lavFMr","lavFMrXsh","lawngYF","NmoncEffon","ZXe","ZcSO","Zcyan","ZgTMnPdLw","ZWay","ZgYF","ZgYy","ZpRk","ZsOmon","ZsHgYF","ZskyXe","ZUWay","ZUgYy","ZstAlXe","ZLw","lime","limegYF","lRF","magFta","maPon","VaquamarRe","VXe","VScEd","VpurpN","VsHgYF","VUXe","VsprRggYF","VQe","VviTetYd","midnightXe","mRtcYam","mistyPse","moccasR","navajowEte","navy","Tdlace","Tive","TivedBb","Sange","SangeYd","ScEd","pOegTMnPd","pOegYF","pOeQe","pOeviTetYd","papayawEp","pHKpuff","peru","pRk","plum","powMrXe","purpN","YbeccapurpN","Yd","Psybrown","PyOXe","saddNbPwn","sOmon","sandybPwn","sHgYF","sHshell","siFna","silver","skyXe","UXe","UWay","UgYy","snow","sprRggYF","stAlXe","tan","teO","tEstN","tomato","Qe","viTet","JHt","wEte","wEtesmoke","Lw","LwgYF","$0045e36c722c20ac$var$nameParse","j","ok","nk","unpacked","tkeys","replace","parseInt","$0045e36c722c20ac$var$unpack","transparent","toLowerCase","$0045e36c722c20ac$var$RGB_RE","$0045e36c722c20ac$var$to","$0045e36c722c20ac$var$from","$0045e36c722c20ac$var$modHSL","ratio","tmp","$0045e36c722c20ac$var$clone","proto","assign","$0045e36c722c20ac$var$fromObject","input","$0045e36c722c20ac$var$functionParse","$0045e36c722c20ac$var$rgbParse","$0045e36c722c20ac$var$Color","Color","ret","_rgb","_valid","$0045e36c722c20ac$var$hslString","color1","weight","w2","c1","c2","w1","color2","rgb1","rgb2","$0045e36c722c20ac$var$interpolate","val","deg","$0045e36c722c20ac$var$rotate","$0045e36c722c20ac$var$index_esm","$0045e36c722c20ac$export$9f4f30ee63539e24","$0045e36c722c20ac$export$db3b6bfb95261072","$0045e36c722c20ac$export$faec65b429be379","saturate","darken","hexString","$0045e36c722c20ac$export$ce26c07117d59d6a","$0045e36c722c20ac$export$a8550f7dbe79f93a","$0045e36c722c20ac$var$getScope$1","node","split","$0045e36c722c20ac$var$set","root","scope","$0045e36c722c20ac$export$4368d992c4eafac0","Defaults","_descriptors1","animation","backgroundColor","borderColor","color","datasets","devicePixelRatio","context","chart","platform","getDevicePixelRatio","events","font","family","style","lineHeight","hover","hoverBackgroundColor","ctx","hoverBorderColor","hoverColor","indexAxis","interaction","mode","intersect","includeInvisible","maintainAspectRatio","onHover","onClick","parsing","plugins","responsive","scale","scales","showLine","drawActiveElementsOnTop","describe","targetScope","targetName","_obj","scopeObject","targetScopeObject","privateName","defineProperties","$1wSe3","local","_scriptable","startsWith","_indexable","_fallback","$0045e36c722c20ac$export$3a6d5c9ae78a2c08","gc","longest","string","textWidth","measureText","width","$0045e36c722c20ac$export$a05254e7c3aeba6e","arrayOfThings","garbageCollect","save","jlen","thing","nestedThing","restore","gcLen","$0045e36c722c20ac$export$71cec2538cb2c617","pixel","currentDevicePixelRatio","halfWidth","$0045e36c722c20ac$export$f787f51d84a910ad","canvas","getContext","resetTransform","clearRect","height","$0045e36c722c20ac$export$6554612db691658e","xOffset","yOffset","cornerRadius","pointStyle","rotation","radius","rad","translate","rotate","drawImage","beginPath","arc","closePath","moveTo","lineTo","SQRT1_2","rect","borderWidth","stroke","$0045e36c722c20ac$export$ef35774e6d314e91","point","area","margin","top","bottom","$0045e36c722c20ac$export$78acf4525d8a74c4","clip","$0045e36c722c20ac$export$dc98b0b04f4c7758","$0045e36c722c20ac$export$8a5498727ef6be21","flip","midpoint","$0045e36c722c20ac$export$d24c54395ce0c509","bezierCurveTo","cp1x","cp2x","cp1y","cp2y","$0045e36c722c20ac$export$8743009a87fcb00f","text","line","opts","lines","strokeWidth","strokeColor","$0045e36c722c20ac$var$setRenderOpts","strokeStyle","lineWidth","strokeText","maxWidth","fillText","$0045e36c722c20ac$var$decorateText","translation","fillStyle","textAlign","textBaseline","strikethrough","underline","metrics","actualBoundingBoxLeft","actualBoundingBoxRight","actualBoundingBoxAscent","actualBoundingBoxDescent","yDecoration","decorationWidth","$0045e36c722c20ac$export$493d36ec626b6698","topLeft","bottomLeft","bottomRight","topRight","$0045e36c722c20ac$var$LINE_HEIGHT","$0045e36c722c20ac$var$FONT_STYLE","$0045e36c722c20ac$export$1a8f5705751d8277","matches","match","$0045e36c722c20ac$export$3b513254972cfc9c","objProps","read","prop","prop1","$0045e36c722c20ac$export$1fbe638ecf81657e","$0045e36c722c20ac$export$d66dc83d8cfc8dd","$0045e36c722c20ac$export$96f57966bedc81b4","$0045e36c722c20ac$export$3d8c2f653ac9d0b9","fallback","console","warn","$0045e36c722c20ac$export$d377dcb2b61d6c4e","$0045e36c722c20ac$export$407448d2b89b1813","inputs","info","cacheable","$0045e36c722c20ac$export$db202ddc8be9136","minmax","grace","beginAtZero","keepZero","$0045e36c722c20ac$export$dda1d9f60106f0e9","parentContext","$0045e36c722c20ac$export$91477dc880baac21","table","cmp","mid","hi","lo","$0045e36c722c20ac$export$d141bba7fdc215a3","$0045e36c722c20ac$export$ebd11618f299a286","$0045e36c722c20ac$export$23ebac1979863676","$0045e36c722c20ac$var$arrayEvents","$0045e36c722c20ac$export$3b14a55fb2447963","listener","stub","_chartjs","listeners","$0045e36c722c20ac$export$71511d61b312f219","items","set2","$0045e36c722c20ac$export$c3950d9923825c02","scopes","prefixes","rootScopes","getTarget","$0045e36c722c20ac$var$_resolve","toStringTag","_keys","$0045e36c722c20ac$var$_cached","$0045e36c722c20ac$var$_resolveWithPrefixes","_scopes","$0045e36c722c20ac$var$getKeysFromAllScopes","storage","_storage","$0045e36c722c20ac$export$a93c5207d687da10","subProxy","descriptorDefaults","_cacheable","_proxy","_context","_subProxy","_descriptors","$0045e36c722c20ac$export$a9c996f45e5784d0","setContext","override","descriptors1","isScriptable","Error","join","$0045e36c722c20ac$var$needsSubResolver","$0045e36c722c20ac$var$createSubResolver","$0045e36c722c20ac$var$_resolveScriptable","isIndexable","descriptors2","resolver","$0045e36c722c20ac$var$_resolveArray","$0045e36c722c20ac$var$_resolveWithContext","allKeys","defaults1","scriptable","indexable","__scriptable","__indexable","__allKeys","_allKeys","$0045e36c722c20ac$var$readKey","prefix","resolve1","$0045e36c722c20ac$var$resolveFallback","$0045e36c722c20ac$var$getScope","parent","$0045e36c722c20ac$var$addScopes","set3","parentScopes","parentFallback","_rootScopes","allScopes","set4","$0045e36c722c20ac$var$addScopesFromKey","_getTarget","$0045e36c722c20ac$var$subGetTarget","set5","set6","$0045e36c722c20ac$var$resolveKeysFromAllScopes","$0045e36c722c20ac$export$4a5767248b18ef41","meta","count","iScale","_parsing","parsed","parse","$0045e36c722c20ac$var$EPSILON","EPSILON","$0045e36c722c20ac$var$getPoint","points","skip","$0045e36c722c20ac$var$getValueAxis","$0045e36c722c20ac$var$monotoneAdjust","deltaK","mK","alphaK","betaK","tauK","squaredMagnitude","pointCurrent","pointsLen","pointAfter","$0045e36c722c20ac$var$monotoneCompute","delta","pointBefore","valueAxis","iPixel","vPixel","$0045e36c722c20ac$var$capControlPoint","pt","$0045e36c722c20ac$export$21579262ef46735b","loop","controlPoints","firstPoint","middlePoint","afterPoint","current","d01","d12","s01","s12","fa","fb","spanGaps","cubicInterpolationMode","slopeDelta","$0045e36c722c20ac$export$317a3d46287192d8","prev","tension","capBezierPoints","inArea","inAreaPrev","inAreaNext","$0045e36c722c20ac$var$capBezierPoints","$0045e36c722c20ac$export$61196ced6d74a310","document","$0045e36c722c20ac$export$2329c99376c9d0a4","domNode","parentNode","host","$0045e36c722c20ac$var$parseMaxStyle","styleValue","parentProperty","valueInPixels","$0045e36c722c20ac$var$getComputedStyle","getComputedStyle","$0045e36c722c20ac$var$positions","$0045e36c722c20ac$var$getPositionedStyle","styles","suffix","$0045e36c722c20ac$export$df995fae86a55f06","evt","borderBox","boxSizing","paddings","borders","ref","touches","offsetX","offsetY","box","shadowRoot","$0045e36c722c20ac$var$useOffsetPos","getBoundingClientRect","clientX","clientY","$0045e36c722c20ac$var$getCanvasPosition","$0045e36c722c20ac$var$round1","$0045e36c722c20ac$export$d66501df72047452","bbWidth","bbHeight","aspectRatio","margins","maxHeight","containerSize","container","containerStyle","containerBorder","containerPadding","clientWidth","clientHeight","$0045e36c722c20ac$var$getContainerSize","$0045e36c722c20ac$export$4c3d22f3d993c33f","forceRatio","forceStyle","pixelRatio","deviceHeight","deviceWidth","setTransform","$0045e36c722c20ac$export$3466f893ebf79586","passiveSupported","passive","addEventListener","removeEventListener","$0045e36c722c20ac$export$9bb611d729802a56","el","getPropertyValue","$0045e36c722c20ac$export$1ee57be6f6687d2c","$0045e36c722c20ac$export$2f6ca3d3b1f80bf5","$0045e36c722c20ac$export$306ddfe3a8403e2","$0045e36c722c20ac$export$7a38258bbe170828","cp1","cp2","$0045e36c722c20ac$var$intlCache","$0045e36c722c20ac$export$ae1af26003f05816","num","locale","cacheKey","JSON","stringify","formatter","Intl","NumberFormat","$0045e36c722c20ac$var$getNumberFormat","format","$0045e36c722c20ac$export$28f7fcd39efa255","rectX","setWidth","xPlus","leftForLtr","itemWidth","$0045e36c722c20ac$var$getRightToLeftAdapter","_itemWidth","$0045e36c722c20ac$export$3d12bd131bb975d1","direction","original","getPropertyPriority","prevTextDirection","$0045e36c722c20ac$export$9d398bebfec1c039","$0045e36c722c20ac$var$propertyFn","between","compare","normalize","$0045e36c722c20ac$var$normalizeSegment","$0045e36c722c20ac$export$92108d983e8ee699","segment","bounds","prevValue","startBound","endBound","ref1","$0045e36c722c20ac$var$getSegment","inside","subStart","shouldStart","shouldStop","$0045e36c722c20ac$export$1a82df3d29112e01","segments","_result","sub","$0045e36c722c20ac$export$ab83b03e4111b1d0","segmentOptions","_loop","$0045e36c722c20ac$var$findStartAndEnd","$0045e36c722c20ac$var$splitByStyles","cur","$0045e36c722c20ac$var$solidSegments","_fullLoop","addStyle","st","dir","prevStyle","chartContext","_chart","baseStyle","$0045e36c722c20ac$var$readStyle","_datasetIndex","$0045e36c722c20ac$var$styleChanged","p0","p0DataIndex","p1DataIndex","$0045e36c722c20ac$var$doSplitByStyles","borderCapStyle","borderDash","borderDashOffset","borderJoinStyle","$335b73b1931a0f00$var$Animator","Animator","_request","_charts","_running","_lastDate","anims","date","callbacks","numSteps","duration","currentStep","_update","_refresh","now","remaining","running","draw1","_active","_total","tick","draw","_notify","charts","complete","progress","event","cb","_getAnims","_items","reduce","acc","_duration","cancel","$335b73b1931a0f00$export$a424a0aa8f687495","$335b73b1931a0f00$var$transparent","$335b73b1931a0f00$var$interpolators","boolean","to","factor","c0","valid","mix","number","$335b73b1931a0f00$export$c35d437ae5945fcd","Animation","cfg","currentValue","_fn","_easing","easing","_start","delay","_target","_prop","_from","_to","_promises","elapsed","remain","promises","Promise","res","rej","resolved","method","$335b73b1931a0f00$var$animationOptions","colors","numbers","active","resize","show","animations","visible","hide","$335b73b1931a0f00$export$8ab227dac26677d","Animations","config","_properties","configure","animatedProps","getOwnPropertyNames","option","newOptions","$shared","$animations","$335b73b1931a0f00$var$resolveTargetOptions","_createAnimations","anim","wait","all","$335b73b1931a0f00$var$awaitAll","then","_animations","_animateOptions","$335b73b1931a0f00$var$scaleClip","allowedOverflow","$335b73b1931a0f00$var$getSortedDatasetIndices","filterVisible","metasets","_getSortedDatasetMetas","$335b73b1931a0f00$var$applyStack","stack","dsIndex","otherValue","singleMode","$335b73b1931a0f00$var$isStacked","stacked","$335b73b1931a0f00$var$getOrCreateStack","stacks","stackKey","indexValue","subStack","$335b73b1931a0f00$var$getLastIndexInStack","vScale","positive","getMatchingVisibleMetas","$335b73b1931a0f00$var$updateStacks","controller","_cachedMeta","_stacks","iAxis","axis","vAxis","indexScale","valueScale","$335b73b1931a0f00$var$getStackKey","index1","_top","_bottom","$335b73b1931a0f00$var$getFirstScaleId","scales1","$335b73b1931a0f00$var$clearStacks","_parsed","$335b73b1931a0f00$var$isDirectUpdateMode","$335b73b1931a0f00$var$cloneIfNotShared","cached","shared","$335b73b1931a0f00$export$75572ec5c55b4048","DatasetController","_ctx","_cachedDataOpts","getMeta","_type","_data","_objectData","_sharedOptions","_drawStart","_drawCount","enableOptionSharing","supportsDecimation","$context","_syncList","initialize","linkScales","_stacked","addElements","dataset","getDataset","chooseId","xid","xAxisID","yid","yAxisID","rid","rAxisID","iid","iAxisID","vid","vAxisID","xScale","getScaleForId","yScale","rScale","getDatasetMeta","scaleID","adata","$335b73b1931a0f00$var$convertObjectDataToArray","isExtensible","_object","_dataCheck","datasetElementType","resetNewElements","stackChanged","oldStacked","_resyncElements","scopeKeys","datasetScopeKeys","getOptionScopes","createResolver","sorted","_sorted","parseArrayData","parseObjectData","parsePrimitiveData","index4","labels","getLabels","singleScale","index5","index6","__parsing","_xAxisKey","xAxisKey","_yAxisKey","yAxisKey","index7","index8","parsedValue","NaN","canStack","_skip","otherScale","otherMin","otherMax","_getOtherScale","hidden","$335b73b1931a0f00$var$createStack","NEGATIVE_INFINITY","getUserBounds","minDefined","maxDefined","$335b73b1931a0f00$var$getUserBounds","updateRangeFromParsed","index9","getParsed","label","getLabelForValue","_clip","$335b73b1931a0f00$var$defaultClip","getMaxOverflow","disabled","elements1","chartArea","index10","resolveDatasetElementOptions","resolveDataElementOptions","index11","index2","index3","dataIndex","raw","$335b73b1931a0f00$var$createDataContext","_resolveElementOptions","index12","dataElementType","elementType","index13","sharing","datasetElementScopeKeys","names","resolveNamedOptions","freeze","index14","transition","datasetAnimationScopeKeys","sharedOptions","_animationsDisabled","index15","_resolveAnimations","index16","getStyle","getSharedOptions","index17","_setStyle","index18","elements2","arg1","arg2","numMeta","numData","_insertElements","_removeElements","move","updateElements","removed","_args","_dataChanges","_sync","newCount","$335b73b1931a0f00$var$computeMinSampleSize","curr","$bar","visibleMetas","getAllParsedValues","$335b73b1931a0f00$var$getAllScaleValues","_length","updateMinAndPrev","getPixelForValue","ticks","getPixelForTick","$335b73b1931a0f00$var$parseValue","entry","startValue","endValue","barStart","barEnd","_custom","$335b73b1931a0f00$var$parseFloatBar","$335b73b1931a0f00$var$parseArrayOrPrimitive","$335b73b1931a0f00$var$isFloatBar","custom","$335b73b1931a0f00$var$setBorderSkipped","index21","edge","borderSkipped","horizontal","$335b73b1931a0f00$var$borderProps","enableBorderRadius","$335b73b1931a0f00$var$parseEdge","orig","v2","$335b73b1931a0f00$var$startEnd","$335b73b1931a0f00$var$setInflateAmount","inflateAmount","defaults","$335b73b1931a0f00$export$e97d5dc64e999004","BarController","iAxisKey","vAxisKey","$alm6P","index22","bars","reset","index23","getBasePixel","isHorizontal","ruler","_getRuler","firstOpts","includeOptions","updateSharedOptions","vpixels","head","_calculateBarValuePixels","ipixels","_calculateBarIndexPixels","center","updateElement","grouped","index24","_getStacks","index25","pixels","barThickness","_startPixel","_endPixel","stackCount","_getStackCount","categoryPercentage","barPercentage","index26","__cachedMeta","_options","baseValue","minBarLength","actualBase","floating","applyStack","getDataVisibility","$335b73b1931a0f00$var$barSign","startPixel","getPixelForDecimal","endPixel","halfGrid","getLineWidthForValue","index27","skipNull","maxBarThickness","Infinity","index20","percent","chunk","$335b73b1931a0f00$var$computeFlexCategoryTraits","index19","thickness","$335b73b1931a0f00$var$computeFitCategoryTraits","stackIndex","_getStackIndex","rects","overrides","_index_","offset","grid","_value_","$335b73b1931a0f00$export$19b5c4773f17abe","BubbleController","index28","index29","tooltip","title","$335b73b1931a0f00$export$e04603e7d8b77172","DoughnutController","innerRadius","outerRadius","i1","getter","circumference","isDatasetVisible","_getRotation","_getCircumference","arcs","spacing","getMaxBorderWidth","getMaxOffset","maxSize","cutout","chartWeight","_getRingWeight","_getRotationExtents","ratioX","ratioY","startAngle","endAngle","startX","startY","endX","endY","calcMax","calcMin","maxX","maxY","minX","minY","$335b73b1931a0f00$var$getRatioAndOffset","maxRadius","radiusLength","_getVisibleDatasetWeightTotal","total","calculateTotal","_getRingWeightOffset","animateRotate","calculateCircumference","animationOpts","centerX","centerY","animateScale","_circumference","metaData","index30","borderAlign","hoverBorderWidth","hoverOffset","ringWeightOffset","descriptors","legend","generateLabels","legendItem","toggleDataVisibility","tooltipItem","dataLabel","formattedValue","$335b73b1931a0f00$export$3c9b5d28c11cbfd0","LineController","_dataset","animationsDisabled","pointCount","$335b73b1931a0f00$var$getStartAndCountOfVisiblePoints","_scaleRanges","newRanges","xmin","xmax","ymin","ymax","changed","$335b73b1931a0f00$var$scaleRangesChanged","_decimated","animated","maxGapLength","directUpdate","prevParsed","nullData","border","lastPoint","updateControlPoints","$335b73b1931a0f00$export$2a270b3a0d973c85","PolarAreaController","index31","_updateRadius","index32","minSize","cutoutPercentage","getVisibleDatasetCount","xCenter","yCenter","datasetStartAngle","getIndexAngle","defaultAngle","countVisibleElements","_computeAngle","getDistanceFromCenterForValue","index33","index34","angleLines","display","circular","pointLabels","$335b73b1931a0f00$export$b21a3f1286706191","PieController","$335b73b1931a0f00$export$48dbc6ac651bf8be","RadarController","index35","pointPosition","getPointPositionForValue","$335b73b1931a0f00$export$b2f2bae6713db87","ScatterController","$335b73b1931a0f00$var$_abstract","$335b73b1931a0f00$var$DateAdapter","DateAdapter","timestamp","amount","unit","weekday","members","$335b73b1931a0f00$export$f32766ea09ec8bc4","_date","$335b73b1931a0f00$var$binarySearch","metaset","lookupMethod","_reversePixels","getRange","$335b73b1931a0f00$var$evaluateInteractionItems","getSortedVisibleDatasetMetas","_i","index36","$335b73b1931a0f00$var$getIntersectItems","useFinalPosition","isPointInArea","index37","inRange","$335b73b1931a0f00$var$getNearestCartesianItems","distanceMetric","useX","useY","deltaX","deltaY","$335b73b1931a0f00$var$getDistanceMetricForAxis","minDistance","index39","inRange1","getCenterPoint","$335b73b1931a0f00$var$getNearestItems","index38","getProps","$335b73b1931a0f00$var$getNearestRadialItems","$335b73b1931a0f00$var$getAxisItems","rangeMethod","intersectsItem","index40","$335b73b1931a0f00$export$a13296960cae0384","evaluateInteractionItems","modes","elements3","index41","nearest","$335b73b1931a0f00$var$STATIC_POSITIONS","$335b73b1931a0f00$var$filterByPosition","$335b73b1931a0f00$var$filterDynamicPositionByAxis","$335b73b1931a0f00$var$sortByWeight","$335b73b1931a0f00$var$setLayoutDims","layouts2","params","layout","layouts1","wrap","stackWeight","placed","$335b73b1931a0f00$var$buildStacks","vBoxMaxWidth","hBoxMaxHeight","fullSize","availableWidth","availableHeight","$335b73b1931a0f00$var$getCombinedMax","maxPadding","$335b73b1931a0f00$var$updateMaxPadding","boxPadding","$335b73b1931a0f00$var$updateDims","getPadding","newWidth","outerWidth","newHeight","outerHeight","widthChanged","heightChanged","same","other","$335b73b1931a0f00$var$getMargins","marginForPositions","positions","$335b73b1931a0f00$var$fitBoxes","boxes","refit","refitBoxes","$335b73b1931a0f00$var$setBoxDims","$335b73b1931a0f00$var$placeBoxes","userPadding","padding","height1","width1","autoPadding","$335b73b1931a0f00$export$1ecca0613f5e56d2","_layers","z","layoutItem","index42","minPadding","layoutBoxes","ref2","ref3","$335b73b1931a0f00$var$wrapBoxes","centerHorizontal","centerVertical","leftAndTop","rightAndBottom","vertical","$335b73b1931a0f00$var$buildLayoutBoxes","verticalBoxes","horizontalBoxes","beforeLayout","visibleVerticalBoxCount","updatePos","$335b73b1931a0f00$var$handleMaxPadding","$335b73b1931a0f00$export$7b1aeb87f31f7da8","BasePlatform","$335b73b1931a0f00$export$a40a96b24b46cf35","BasicPlatform","$335b73b1931a0f00$var$EVENT_TYPES","touchstart","touchmove","touchend","pointerenter","pointerdown","pointermove","pointerup","pointerleave","pointerout","$335b73b1931a0f00$var$isNullOrEmpty","$335b73b1931a0f00$var$eventListenerOptions","$335b73b1931a0f00$var$removeListener","$335b73b1931a0f00$var$nodeListContains","nodeList","contains","$335b73b1931a0f00$var$createAttachObserver","observer","MutationObserver","trigger","addedNodes","removedNodes","observe","childList","subtree","$335b73b1931a0f00$var$createDetachObserver","$335b73b1931a0f00$var$drpListeningCharts","$335b73b1931a0f00$var$oldDevicePixelRatio","$335b73b1931a0f00$var$onWindowResize","dpr","$335b73b1931a0f00$var$createResizeObserver","ResizeObserver","contentRect","$335b73b1931a0f00$var$listenDevicePixelRatioChanges","$335b73b1931a0f00$var$releaseObserver","disconnect","$335b73b1931a0f00$var$unlistenDevicePixelRatioChanges","$335b73b1931a0f00$var$createProxyAndListen","native","$335b73b1931a0f00$var$fromNativeEvent","$335b73b1931a0f00$var$addListener","$335b73b1931a0f00$export$f02da7f882cf6b2e","DomPlatform","renderHeight","getAttribute","renderWidth","displayWidth","displayHeight","$335b73b1931a0f00$var$initCanvas","removeAttribute","setAttribute","proxies","$proxies","attach","detach","isConnected","$335b73b1931a0f00$export$db77ccec0bb4ccac","Element","_final","defaultRoutes","$335b73b1931a0f00$var$formatters","numeric","tickValue","notation","maxTick","$335b73b1931a0f00$var$calculateDelta","logDelta","numDecimal","minimumFractionDigits","maximumFractionDigits","logarithmic","index43","$335b73b1931a0f00$export$27c7467594ef87bd","formatters","$335b73b1931a0f00$var$autoSkip","tickOpts","ticksLimit","maxTicksLimit","tickLength","_tickSize","maxScale","maxChart","_maxLength","$335b73b1931a0f00$var$determineMaxTicks","majorIndices","major","enabled","$335b73b1931a0f00$var$getMajorIndices","numMajorIndices","first","newTicks","ceil","$335b73b1931a0f00$var$skipMajors","evenMajorSpacing","diff","$335b73b1931a0f00$var$getEvenSpacing","factors","$335b73b1931a0f00$var$calculateSpacing","avgMajorSpacing","$335b73b1931a0f00$var$skip","majorStart","majorEnd","drawBorder","drawOnChartArea","drawTicks","tickWidth","tickColor","minRotation","maxRotation","mirror","textStrokeWidth","textStrokeColor","autoSkip","autoSkipPadding","labelOffset","minor","crossAlign","showLabelBackdrop","backdropColor","backdropPadding","route","$335b73b1931a0f00$var$offsetFromEdge","$335b73b1931a0f00$var$sample","numItems","increment","$335b73b1931a0f00$var$getPixelForGridLine","index44","offsetGridLines","validIndex1","lineValue","$335b73b1931a0f00$var$getTickMarkLength","$335b73b1931a0f00$var$getTitleHeight","$335b73b1931a0f00$var$titleAlign","$335b73b1931a0f00$var$reverseAlign","$335b73b1931a0f00$export$d60cfc58d3c358b6","Scale","_margins","paddingTop","paddingBottom","paddingLeft","paddingRight","labelRotation","_range","_gridLineItems","_labelItems","_labelSizes","_longestTextCache","_userMax","_userMin","_suggestedMax","_suggestedMin","_ticksLength","_borderValue","_dataLimitsCached","suggestedMin","suggestedMax","metas","getMinMax","xLabels","yLabels","beforeUpdate","sampleSize","beforeSetDimensions","setDimensions","afterSetDimensions","beforeDataLimits","determineDataLimits","afterDataLimits","beforeBuildTicks","buildTicks","afterBuildTicks","samplingEnabled","_convertTicksToLabels","beforeCalculateLabelRotation","calculateLabelRotation","afterCalculateLabelRotation","afterAutoSkip","beforeFit","fit","afterFit","afterUpdate","reversePixels","_alignToPixels","alignToPixels","notifyPlugins","_callHooks","beforeTickToLabelConversion","afterTickToLabelConversion","maxLabelDiagonal","numTicks","_isVisible","labelSizes","_getLabelSizes","maxLabelWidth","widest","maxLabelHeight","highest","asin","titleOpts","gridOpts","titleHeight","ref4","tickPadding","angleRadians","labelHeight","labelWidth","_calculatePadding","_handleMargins","_ticks","isRotated","labelsBelowTicks","offsetLeft","offsetRight","generateTickLabels","_computeLabelSizes","tickFont","fontString","nestedLabel","caches","widths","heights","widestLabelSize","highestLabelSize","_resolveTickFontOptions","$335b73b1931a0f00$var$garbageCollect","valueAt","index46","decimal","getBaseValue","index47","index45","$335b73b1931a0f00$var$createTickContext","optionTicks","rot","borderValue","alignedLineValue","tx1","ty1","tx2","ty2","x1","y1","x2","y2","ticksLength","tl","borderOpts","axisWidth","axisHalfWidth","alignBorderValue","positionAxisID","positionAxisID2","value2","limit","step","optsAtIndex","lineColor","tickBorderDash","tickBorderDashOffset","lineCount","textOffset","tickAndPadding","hTickAndPadding","_getXAxisLabelAlignment","_getYAxisLabelAlignment","ret1","positionAxisID3","value3","halfCount","tickTextAlign","backdrop","labelPadding","fillRect","index48","findIndex","_computeGridLineItems","drawLine","setLineDash","lineDashOffset","lastLineWidth","_computeLabelArea","_computeLabelItems","ref5","titleX","titleY","scales2","positionAxisID1","$335b73b1931a0f00$var$titleArgs","drawBackground","drawGrid","drawTitle","drawLabels","tz","gz","axisID","index49","fontSize","$335b73b1931a0f00$var$TypedRegistry","TypedRegistry","isPrototypeOf","parentScope","$335b73b1931a0f00$var$isIChartComponent","register","itemDefaults","routes","propertyParts","sourceName","sourceScope","parts","$335b73b1931a0f00$var$routeDefaults","$335b73b1931a0f00$var$registerDefaults","$335b73b1931a0f00$var$Registry","Registry","controllers","_typedRegistries","_each","_get","typedRegistry","arg","reg","_getRegistryForType","isForType","_exec","itemReg","_this1","registry1","component","camelMethod","$335b73b1931a0f00$export$4bb7493d241fd8a5","$335b73b1931a0f00$var$PluginService","PluginService","_init","hook","_createDescriptors","plugin","cancelable","_oldCache","descriptors3","_notifyStateChanges","plugins1","plugins2","getPlugin","i3","$335b73b1931a0f00$var$allPlugins","plugins3","$335b73b1931a0f00$var$getOpts","$335b73b1931a0f00$var$pluginOpts","$335b73b1931a0f00$var$createDescriptors","previousDescriptors","descriptors4","pluginScopeKeys","$335b73b1931a0f00$var$getIndexAxis","datasetDefaults","$335b73b1931a0f00$var$determineAxis","scaleOptions","$335b73b1931a0f00$var$initOptions","chartDefaults","configScales","chartIndexAxis","firstIDs","scales3","scaleConf","error","defaultId","$335b73b1931a0f00$var$getDefaultScaleIDFromAxis","defaultScaleOptions","defaultID","$335b73b1931a0f00$var$getAxisFromDefaultScaleID","$335b73b1931a0f00$var$mergeScaleConfig","$335b73b1931a0f00$var$initData","$335b73b1931a0f00$var$keyCache","$335b73b1931a0f00$var$keysCached","$335b73b1931a0f00$var$cachedKeys","generate","$335b73b1931a0f00$var$addIfFound","$335b73b1931a0f00$var$Config","Config","_config","$335b73b1931a0f00$var$initConfig","_scopeCache","_resolverCache","clearCache","datasetType","additionalOptionScopes","mainScope","resetCache","keyLists","_cachedScopes","$335b73b1931a0f00$var$getResolver","subPrefixes","$335b73b1931a0f00$var$needContext","subResolver","resolverCache","$335b73b1931a0f00$var$hasFunction","$335b73b1931a0f00$var$KNOWN_POSITIONS","$335b73b1931a0f00$var$positionIsHorizontal","$335b73b1931a0f00$var$compare2Level","l1","l2","$335b73b1931a0f00$var$onAnimationsComplete","animationOptions1","onComplete","$335b73b1931a0f00$var$onAnimationProgress","animationOptions2","onProgress","$335b73b1931a0f00$var$getCanvas","getElementById","$335b73b1931a0f00$var$instances","$335b73b1931a0f00$var$getChart","$335b73b1931a0f00$var$moveNumericKeys","intKey","$335b73b1931a0f00$export$acaa6426d77a227e","Chart","userConfig","initialCanvas","existingChart","chartOptionScopes","OffscreenCanvas","$335b73b1931a0f00$export$72cd9e67b1b784f9","updateConfig","timeout","acquireContext","_aspectRatio","_metasets","_lastEvent","_listeners","_responsiveListeners","_sortedMetasets","_plugins","_hiddenIndices","attached","_doResize","resizeDelay","clearTimeout","setTimeout","listen","_initialize","bindEvents","_resizeBeforeDraw","_resize","newSize","getMaximumSize","newRatio","onResize","render","axisOptions","scaleOpts","scales4","updated","isRadial","dposition","dtype","scaleType","getScale","init","hasUpdated","_destroyDatasetMeta","index50","newControllers","_removeUnreferencedMetasets","order","updateIndex","ControllerClass","getController","getElement","_updateMetasets","_resetElements","animsDisabled","_updateScales","_checkEventBindings","_updateHiddenIndices","invalidate","buildOrUpdateControllers","buildOrUpdateElements","_minPadding","_updateLayout","_updateDatasets","_eventHandler","_updateHoverStyles","ensureScalesHaveIDs","buildOrUpdateScales","existingEvents","newEvents","unbindEvents","changes","_getUniformDataChanges","datasetCount","makeSet","changeSet","i4","noArea","__layers","index51","_idx","i5","ilen1","_updateDataset","index52","__resizeBeforeDraw","layers","_drawDatasets","_drawDataset","useClip","index53","index54","setDatasetVisibility","_updateVisibility","_destroy","remove","_stop","releaseContext","_canvas","toDataURL","bindUserEvents","bindResponsiveEvents","listener1","_add","detached","_remove","listener2","isAttached","activeElements","lastActive","index55","notify","replay","hoverOptions","deactivated","activated","updateHoverStyle","inChartArea","eventFilter","_handleEvent","_getActiveElements","isClick","lastEvent","$335b73b1931a0f00$var$determineLastEvent","getElementsAtEventForMode","$335b73b1931a0f00$var$invalidatePlugins","instances","$335b73b1931a0f00$var$enumerable","$335b73b1931a0f00$var$clipArc","pixelMargin","angleMargin","$335b73b1931a0f00$var$parseBorderRadius$1","angleDelta","borderRadius","halfThickness","innerLimit","computeOuterLimit","outerArcLimit","outerStart","outerEnd","innerStart","innerEnd","$335b73b1931a0f00$var$rThetaToXY","theta","$335b73b1931a0f00$var$pathArc","innerR","spacingOffset","alpha","avNogSpacingRadius","angleOffset","outerStartAdjustedRadius","outerEndAdjustedRadius","outerStartAdjustedAngle","outerEndAdjustedAngle","innerStartAdjustedRadius","innerEndAdjustedRadius","innerStartAdjustedAngle","innerEndAdjustedAngle","pCenter","p4","pCenter1","pCenter2","p8","pCenter3","$335b73b1931a0f00$var$drawBorder","inner","lineJoin","fullCircles","$335b73b1931a0f00$var$drawFullCircleBorders","registry","version","getChart","_registry","unregister","$335b73b1931a0f00$export$d48203c759d6a1fc","ArcElement","chartX","chartY","ref6","rAdjust","betweenAngles","withinRadius","halfAngle","halfRadius","radiusOffset","$335b73b1931a0f00$var$drawArc","$335b73b1931a0f00$var$setStyle","lineCap","$335b73b1931a0f00$var$lineTo","$335b73b1931a0f00$var$pathVars","paramsStart","tmp1","paramsEnd","segmentStart","segmentEnd","outside","$335b73b1931a0f00$var$pathSegment","lineMethod","stepped","$335b73b1931a0f00$var$getLineMethod","ref7","_move","$335b73b1931a0f00$var$fastPathSegment","prevX","lastY","ref8","avgX","countX","pointIndex","index56","drawX","truncX","$335b73b1931a0f00$var$_getSegmentMethod","$335b73b1931a0f00$var$usePath2D","Path2D","$335b73b1931a0f00$var$draw","$335b73b1931a0f00$var$strokePathWithCache","segmentMethod","$335b73b1931a0f00$var$strokePathDirect","$335b73b1931a0f00$export$55e463fa7bcd3469","LineElement","_points","_segments","_pointsUpdated","_interpolate","$335b73b1931a0f00$var$_getInterpolationMethod","interpolated","$335b73b1931a0f00$var$inRange$1","hitRadius","$335b73b1931a0f00$export$bd159b522b230b7a","PointElement","mouseX","mouseY","hoverRadius","$335b73b1931a0f00$var$getBarBounds","bar","half","$335b73b1931a0f00$var$skipOrLimit","skip1","$335b73b1931a0f00$var$boundingRects","maxW","maxH","skip2","$335b73b1931a0f00$var$parseBorderWidth","maxR","skip3","enableBorder","$335b73b1931a0f00$var$parseBorderRadius","outer","$335b73b1931a0f00$var$inRange","skipX","skipY","$335b73b1931a0f00$var$addNormalRectPath","$335b73b1931a0f00$var$inflateRect","refRect","$335b73b1931a0f00$export$a16ed71bf4b07672","BarElement","ref9","addRectPath","$335b73b1931a0f00$var$getBoxSize","labelOpts","_boxHeight","boxHeight","_boxWidth","boxWidth","usePointStyle","itemHeight","$335b73b1931a0f00$var$positioners","average","hasValue","tooltipPosition","eventPosition","nearestElement","tp","$335b73b1931a0f00$var$pushOrConcat","toPush","$335b73b1931a0f00$var$splitNewlines","String","$335b73b1931a0f00$var$getTooltipSize","body","footer","bodyFont","titleFont","footerFont","titleLineCount","footerLineCount","bodyLineItemCount","combinedBodyLength","bodyItem","before","beforeBody","afterBody","titleSpacing","titleMarginBottom","displayColors","bodySpacing","footerMarginTop","footerSpacing","widthPadding","maxLineWidth","$335b73b1931a0f00$var$determineXAlign","yAlign","chartWidth","_chartArea","xAlign","caret","caretSize","caretPadding","$335b73b1931a0f00$var$doesNotFitWithAlign","$335b73b1931a0f00$var$determineAlignment","$335b73b1931a0f00$var$determineYAlign","$335b73b1931a0f00$var$getBackgroundPoint","alignment","paddingAndSize","$335b73b1931a0f00$var$alignX","$335b73b1931a0f00$var$alignY","$335b73b1931a0f00$var$getAlignedX","$335b73b1931a0f00$var$getBeforeAfterBodyLines","$335b73b1931a0f00$var$overrideCallbacks","$335b73b1931a0f00$var$Tooltip","Tooltip","opacity","_eventPosition","_size","_cachedAnimations","_tooltipItems","dataPoints","caretX","caretY","labelColors","labelPointStyles","labelTextColors","tooltipItems","beforeTitle","afterTitle","bodyItems","scoped","beforeLabel","afterLabel","beforeFooter","afterFooter","index64","getLabelAndValue","index65","itemSort","labelColor","labelPointStyle","labelTextColor","_createItems","getTitle","getBeforeBody","getBody","getAfterBody","getFooter","positionAndSize","backgroundPoint","external","tooltipPoint","caretPosition","getCaretPosition","x3","y3","ref12","ptX","ptY","rtlHelper","titleAlign","titleColor","colorX","rtlColorX","yOffSet","colorY","drawOptions","multiKeyBackground","outerX","innerX","strokeRect","textColor","bodyAlign","bodyLineHeight","xLinePadding","fillLineOfText","bodyAlignForCalculation","bodyColor","_drawColorBox","footerAlign","footerColor","tooltipSize","ref13","drawCaret","quadraticCurveTo","animX","animY","_updateAnimationTarget","hasTooltipContent","globalAlpha","textDirection","drawBody","drawFooter","index66","positionChanged","_positionChanged","_ignoreReplayEvents","positioners","$335b73b1931a0f00$export$28c660c63b792dea","_element","afterInit","afterDraw","_willRender","afterEvent","handleEvent","labelCount","$335b73b1931a0f00$var$findOrAddLabel","index68","addedLabels","index67","$335b73b1931a0f00$var$addIfString","$335b73b1931a0f00$export$29e663ba4d09fe7","CategoryScale","_startValue","_valueRange","_addedLabels","added","index70","index71","index69","ref14","index72","getDecimalForPixel","$335b73b1931a0f00$var$generateTicks$1","generationOptions","dataRange","niceMin","niceMax","numSpaces","rounded","precision","maxTicks","maxDigits","includeBounds","maxSpaces","rmin","rmax","countDefined","minSpacing","decimalPlaces","$335b73b1931a0f00$var$relativeLabelSize","$335b73b1931a0f00$var$LinearScaleBase","LinearScaleBase","_endValue","setMin","setMax","minSign","maxSign","MAX_SAFE_INTEGER","MIN_SAFE_INTEGER","stepSize","computeTickLimit","getTickLimit","_maxDigits","$335b73b1931a0f00$export$e7f4e5e8656f0b93","LinearScale","handleTickRangeOptions","$335b73b1931a0f00$var$isMajor","tickVal","$335b73b1931a0f00$export$85295eaf7cb3ac3e","LogarithmicScale","index73","_zero","exp","endExp","endSignificand","significand","lastTick","$335b73b1931a0f00$var$generateTicks","$335b73b1931a0f00$var$getTickBackdropHeight","$335b73b1931a0f00$var$determineLimits","$335b73b1931a0f00$var$fitWithPointLabels","_padding","limits","valueCount","_pointLabels","pointLabelOpts","additionalAngle","centerPointLabels","getPointLabelContext","getPointPosition","drawingArea","plFont","textSize","$335b73b1931a0f00$var$updateLimits","setCenterPoint","_pointLabelItems","extra","outerDistance","pointLabelPosition","$335b73b1931a0f00$var$yForAngle","$335b73b1931a0f00$var$getTextAlignForAngle","$335b73b1931a0f00$var$leftForTextAlign","$335b73b1931a0f00$var$buildPointLabelItems","hLimits","vLimits","$335b73b1931a0f00$var$pathRadiusLine","$335b73b1931a0f00$export$cfafc36d95386d38","LinearScaleBase1","RadialLinearScale","index75","leftMovement","rightMovement","topMovement","bottomMovement","index76","scalingFactor","scaledDistance","index77","pointLabel","index78","distanceFromCenter","index79","index80","index81","_index","backdropLeft","backdropTop","backdropWidth","backdropHeight","$335b73b1931a0f00$var$drawPointLabels","index82","gridLineOpts","color5","$335b73b1931a0f00$var$drawRadiusLine","optsAtIndex1","color6","index83","animate","$335b73b1931a0f00$var$INTERVALS","millisecond","common","steps","second","minute","hour","day","week","month","quarter","year","$335b73b1931a0f00$var$UNITS","$335b73b1931a0f00$var$sorter","$335b73b1931a0f00$var$parse","adapter","_adapter","__parseOpts","_parseOpts","parser","isoWeekday","startOf","$335b73b1931a0f00$var$determineUnitForAutoTicks","minUnit","capacity","interval","$335b73b1931a0f00$var$addTick","time","timestamps","$335b73b1931a0f00$var$ticksFromTimestamps","majorUnit","map2","map1","index84","$335b73b1931a0f00$var$setMajorTicks","$335b73b1931a0f00$export$a894c72689ff3ec","TimeScale","_unit","_majorUnit","_offsets","_normalized","adapters","displayFormats","formats","normalized","_applyBounds","_getLabelBounds","endOf","getLabelTimestamps","timeOpts","_generate","_getLabelCapacity","$335b73b1931a0f00$var$determineUnitForFormatting","$335b73b1931a0f00$var$determineMajorUnit","initOffsets","offsetAfterAutoskip","getDecimalForValue","hasWeekday","getDataTimestamps","tooltipFormat","datetime","index85","minorFormat","majorFormat","_tickFormatFunction","offsets","ticksOpts","tickLabelWidth","cosRotation","sinRotation","tickFontSize","exampleTime","exampleLabel","_getLabelSize","$335b73b1931a0f00$var$interpolate","prevSource","nextSource","prevTarget","nextTarget","ref16","ref17","ref18","ref19","ref20","span","$335b73b1931a0f00$export$85df64a8eb6dc986","TimeSeriesScale","_table","_minPos","_tableRange","_getTimestampsForTable","buildLookupTable","$cdc363b37fc49b45$export$b3890eb0ae9dca99","resultMortgageAmount","innerHTML","toLocaleString","$cdc363b37fc49b45$var$renderMortgageAmount","resultTotalCost","$cdc363b37fc49b45$var$renderTotalCost","resultMonthlyPayment","$cdc363b37fc49b45$var$renderMonthlyPayment","donutBox","allDataForChart","chartStatus","destroy","$cdc363b37fc49b45$var$renderDonutChart","$cdc363b37fc49b45$export$659466fae8e0b94d","switchPmiBlock","$cdc363b37fc49b45$export$9c7c917e2ae392f5","switchTaxesBlock","$cdc363b37fc49b45$export$2837078cde969e9f","donutLegendItems","$6c47dd4005de79e7$export$2e2bcd8739ae039","calculatorWrp","insertAdjacentHTML","$bd4ef45733f685eb$var$updateValues","formData","FormData","_param","excludesElements","querySelectorAll","excludeItem","checked","calcExclude","$bd4ef45733f685eb$var$updateExclude","forms","calc","querySelector","preventDefault","$bd4ef45733f685eb$var$init"],"version":3,"file":"index.js.map"}