text: /*!
   * Chart.js
   * http://chartjs.org/
   * Version: 2.2.2
   *
   * Copyright 2016 Nick Downie
   * Released under the MIT license
   * https://github.com/chartjs/Chart.js/blob/master/LICENSE.md
   */
  ! function(t) {
      if ("object" == typeof exports && "undefined" != typeof module) module.exports = t();
      else if ("function" == typeof define && define.amd) define([], t);
      else {
          var e;
          e = "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof self ? self : this, e.Chart = t()
      }
  }(function() {
      return function t(e, a, i) {
          function n(r, l) {
              if (!a[r]) {
                  if (!e[r]) {
                      var s = "function" == typeof require && require;
                      if (!l && s) return s(r, !0);
                      if (o) return o(r, !0);
                      var d = new Error("Cannot find module '" + r + "'");
                      throw d.code = "MODULE_NOT_FOUND", d
                  }
                  var u = a[r] = {
                      exports: {}
                  };
                  e[r][0].call(u.exports, function(t) {
                      var a = e[r][1][t];
                      return n(a ? a : t)
                  }, u, u.exports, t, e, a, i)
              }
              return a[r].exports
          }
          for (var o = "function" == typeof require && require, r = 0; r < i.length; r++) n(i[r]);
          return n
      }({
          1: [function(t, e, a) {}, {}],
          2: [function(t, e, a) {
              function i(t) {
                  if (t) {
                      var e = /^#([a-fA-F0-9]{3})$/,
                          a = /^#([a-fA-F0-9]{6})$/,
                          i = /^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/,
                          n = /^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/,
                          o = /(\w+)/,
                          r = [0, 0, 0],
                          l = 1,
                          s = t.match(e);
                      if (s) {
                          s = s[1];
                          for (var d = 0; d < r.length; d++) r[d] = parseInt(s[d] + s[d], 16)
                      } else if (s = t.match(a)) {
                          s = s[1];
                          for (var d = 0; d < r.length; d++) r[d] = parseInt(s.slice(2 * d, 2 * d + 2), 16)
                      } else if (s = t.match(i)) {
                          for (var d = 0; d < r.length; d++) r[d] = parseInt(s[d + 1]);
                          l = parseFloat(s[4])
                      } else if (s = t.match(n)) {
                          for (var d = 0; d < r.length; d++) r[d] = Math.round(2.55 * parseFloat(s[d + 1]));
                          l = parseFloat(s[4])
                      } else if (s = t.match(o)) {
                          if ("transparent" == s[1]) return [0, 0, 0, 0];
                          if (r = y[s[1]], !r) return
                      }
                      for (var d = 0; d < r.length; d++) r[d] = v(r[d], 0, 255);
                      return l = l || 0 == l ? v(l, 0, 1) : 1, r[3] = l, r
                  }
              }
  
              function n(t) {
                  if (t) {
                      var e = /^hsla?\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)/,
                          a = t.match(e);
                      if (a) {
                          var i = parseFloat(a[4]),
                              n = v(parseInt(a[1]), 0, 360),
                              o = v(parseFloat(a[2]), 0, 100),
                              r = v(parseFloat(a[3]), 0, 100),
                              l = v(isNaN(i) ? 1 : i, 0, 1);
                          return [n, o, r, l]
                      }
                  }
              }
  
              function o(t) {
                  if (t) {
                      var e = /^hwb\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)/,
                          a = t.match(e);
                      if (a) {
                          var i = parseFloat(a[4]),
                              n = v(parseInt(a[1]), 0, 360),
                              o = v(parseFloat(a[2]), 0, 100),
                              r = v(parseFloat(a[3]), 0, 100),
                              l = v(isNaN(i) ? 1 : i, 0, 1);
                          return [n, o, r, l]
                      }
                  }
              }
  
              function r(t) {
                  var e = i(t);
                  return e && e.slice(0, 3)
              }
  
              function l(t) {
                  var e = n(t);
                  return e && e.slice(0, 3)
              }
  
              function s(t) {
                  var e = i(t);
                  return e ? e[3] : (e = n(t)) ? e[3] : (e = o(t)) ? e[3] : void 0
              }
  
              function d(t) {
                  return "#" + x(t[0]) + x(t[1]) + x(t[2])
              }
  
              function u(t, e) {
                  return 1 > e || t[3] && t[3] < 1 ? c(t, e) : "rgb(" + t[0] + ", " + t[1] + ", " + t[2] + ")"
              }
  
              function c(t, e) {
                  return void 0 === e && (e = void 0 !== t[3] ? t[3] : 1), "rgba(" + t[0] + ", " + t[1] + ", " + t[2] + ", " + e + ")"
              }
  
              function h(t, e) {
                  if (1 > e || t[3] && t[3] < 1) return f(t, e);
                  var a = Math.round(t[0] / 255 * 100),
                      i = Math.round(t[1] / 255 * 100),
                      n = Math.round(t[2] / 255 * 100);
                  return "rgb(" + a + "%, " + i + "%, " + n + "%)"
              }
  
              function f(t, e) {
                  var a = Math.round(t[0] / 255 * 100),
                      i = Math.round(t[1] / 255 * 100),
                      n = Math.round(t[2] / 255 * 100);
                  return "rgba(" + a + "%, " + i + "%, " + n + "%, " + (e || t[3] || 1) + ")"
              }
  
              function g(t, e) {
                  return 1 > e || t[3] && t[3] < 1 ? p(t, e) : "hsl(" + t[0] + ", " + t[1] + "%, " + t[2] + "%)"
              }
  
              function p(t, e) {
                  return void 0 === e && (e = void 0 !== t[3] ? t[3] : 1), "hsla(" + t[0] + ", " + t[1] + "%, " + t[2] + "%, " + e + ")"
              }
  
              function m(t, e) {
                  return void 0 === e && (e = void 0 !== t[3] ? t[3] : 1), "hwb(" + t[0] + ", " + t[1] + "%, " + t[2] + "%" + (void 0 !== e && 1 !== e ? ", " + e : "") + ")"
              }
  
              function b(t) {
                  return k[t.slice(0, 3)]
              }
  
              function v(t, e, a) {
                  return Math.min(Math.max(e, t), a)
              }
  
              function x(t) {
                  var e = t.toString(16).toUpperCase();
                  return e.length < 2 ? "0" + e : e
              }
              var y = t(6);
              e.exports = {
                  getRgba: i,
                  getHsla: n,
                  getRgb: r,
                  getHsl: l,
                  getHwb: o,
                  getAlpha: s,
                  hexString: d,
                  rgbString: u,
                  rgbaString: c,
                  percentString: h,
                  percentaString: f,
                  hslString: g,
                  hslaString: p,
                  hwbString: m,
                  keyword: b
              };
              var k = {};
              for (var S in y) k[y[S]] = S
          }, {
              6: 6
          }],
          3: [function(t, e, a) {
              var i = t(5),
                  n = t(2),
                  o = function(t) {
                      if (t instanceof o) return t;
                      if (!(this instanceof o)) return new o(t);
                      this.values = {
                          rgb: [0, 0, 0],
                          hsl: [0, 0, 0],
                          hsv: [0, 0, 0],
                          hwb: [0, 0, 0],
                          cmyk: [0, 0, 0, 0],
                          alpha: 1
                      };
                      var e;
                      if ("string" == typeof t)
                          if (e = n.getRgba(t)) this.setValues("rgb", e);
                          else if (e = n.getHsla(t)) this.setValues("hsl", e);
                      else {
                          if (!(e = n.getHwb(t))) throw new Error('Unable to parse color from string "' + t + '"');
                          this.setValues("hwb", e)
                      } else if ("object" == typeof t)
                          if (e = t, void 0 !== e.r || void 0 !== e.red) this.setValues("rgb", e);
                          else if (void 0 !== e.l || void 0 !== e.lightness) this.setValues("hsl", e);
                      else if (void 0 !== e.v || void 0 !== e.value) this.setValues("hsv", e);
                      else if (void 0 !== e.w || void 0 !== e.whiteness) this.setValues("hwb", e);
                      else {
                          if (void 0 === e.c && void 0 === e.cyan) throw new Error("Unable to parse color from object " + JSON.stringify(t));
                          this.setValues("cmyk", e)
                      }
                  };
              o.prototype = {
                  rgb: function() {
                      return this.setSpace("rgb", arguments)
                  },
                  hsl: function() {
                      return this.setSpace("hsl", arguments)
                  },
                  hsv: function() {
                      return this.setSpace("hsv", arguments)
                  },
                  hwb: function() {
                      return this.setSpace("hwb", arguments)
                  },
                  cmyk: function() {
                      return this.setSpace("cmyk", arguments)
                  },
                  rgbArray: function() {
                      return this.values.rgb
                  },
                  hslArray: function() {
                      return this.values.hsl
                  },
                  hsvArray: function() {
                      return this.values.hsv
                  },
                  hwbArray: function() {
                      var t = this.values;
                      return 1 !== t.alpha ? t.hwb.concat([t.alpha]) : t.hwb
                  },
                  cmykArray: function() {
                      return this.values.cmyk
                  },
                  rgbaArray: function() {
                      var t = this.values;
                      return t.rgb.concat([t.alpha])
                  },
                  hslaArray: function() {
                      var t = this.values;
                      return t.hsl.concat([t.alpha])
                  },
                  alpha: function(t) {
                      return void 0 === t ? this.values.alpha : (this.setValues("alpha", t), this)
                  },
                  red: function(t) {
                      return this.setChannel("rgb", 0, t)
                  },
                  green: function(t) {
                      return this.setChannel("rgb", 1, t)
                  },
                  blue: function(t) {
                      return this.setChannel("rgb", 2, t)
                  },
                  hue: function(t) {
                      return t && (t %= 360, t = 0 > t ? 360 + t : t), this.setChannel("hsl", 0, t)
                  },
                  saturation: function(t) {
                      return this.setChannel("hsl", 1, t)
                  },
                  lightness: function(t) {
                      return this.setChannel("hsl", 2, t)
                  },
                  saturationv: function(t) {
                      return this.setChannel("hsv", 1, t)
                  },
                  whiteness: function(t) {
                      return this.setChannel("hwb", 1, t)
                  },
                  blackness: function(t) {
                      return this.setChannel("hwb", 2, t)
                  },
                  value: function(t) {
                      return this.setChannel("hsv", 2, t)
                  },
                  cyan: function(t) {
                      return this.setChannel("cmyk", 0, t)
                  },
                  magenta: function(t) {
                      return this.setChannel("cmyk", 1, t)
                  },
                  yellow: function(t) {
                      return this.setChannel("cmyk", 2, t)
                  },
                  black: function(t) {
                      return this.setChannel("cmyk", 3, t)
                  },
                  hexString: function() {
                      return n.hexString(this.values.rgb)
                  },
                  rgbString: function() {
                      return n.rgbString(this.values.rgb, this.values.alpha)
                  },
                  rgbaString: function() {
                      return n.rgbaString(this.values.rgb, this.values.alpha)
                  },
                  percentString: function() {
                      return n.percentString(this.values.rgb, this.values.alpha)
                  },
                  hslString: function() {
                      return n.hslString(this.values.hsl, this.values.alpha)
                  },
                  hslaString: function() {
                      return n.hslaString(this.values.hsl, this.values.alpha)
                  },
                  hwbString: function() {
                      return n.hwbString(this.values.hwb, this.values.alpha)
                  },
                  keyword: function() {
                      return n.keyword(this.values.rgb, this.values.alpha)
                  },
                  rgbNumber: function() {
                      var t = this.values.rgb;
                      return t[0] << 16 | t[1] << 8 | t[2]
                  },
                  luminosity: function() {
                      for (var t = this.values.rgb, e = [], a = 0; a < t.length; a++) {
                          var i = t[a] / 255;
                          e[a] = .03928 >= i ? i / 12.92 : Math.pow((i + .055) / 1.055, 2.4)
                      }
                      return .2126 * e[0] + .7152 * e[1] + .0722 * e[2]
                  },
                  contrast: function(t) {
                      var e = this.luminosity(),
                          a = t.luminosity();
                      return e > a ? (e + .05) / (a + .05) : (a + .05) / (e + .05)
                  },
                  level: function(t) {
                      var e = this.contrast(t);
                      return e >= 7.1 ? "AAA" : e >= 4.5 ? "AA" : ""
                  },
                  dark: function() {
                      var t = this.values.rgb,
                          e = (299 * t[0] + 587 * t[1] + 114 * t[2]) / 1e3;
                      return 128 > e
                  },
                  light: function() {
                      return !this.dark()
                  },
                  negate: function() {
                      for (var t = [], e = 0; 3 > e; e++) t[e] = 255 - this.values.rgb[e];
                      return this.setValues("rgb", t), this
                  },
                  lighten: function(t) {
                      var e = this.values.hsl;
                      return e[2] += e[2] * t, this.setValues("hsl", e), this
                  },
                  darken: function(t) {
                      var e = this.values.hsl;
                      return e[2] -= e[2] * t, this.setValues("hsl", e), this
                  },
                  saturate: function(t) {
                      var e = this.values.hsl;
                      return e[1] += e[1] * t, this.setValues("hsl", e), this
                  },
                  desaturate: function(t) {
                      var e = this.values.hsl;
                      return e[1] -= e[1] * t, this.setValues("hsl", e), this
                  },
                  whiten: function(t) {
                      var e = this.values.hwb;
                      return e[1] += e[1] * t, this.setValues("hwb", e), this
                  },
                  blacken: function(t) {
                      var e = this.values.hwb;
                      return e[2] += e[2] * t, this.setValues("hwb", e), this
                  },
                  greyscale: function() {
                      var t = this.values.rgb,
                          e = .3 * t[0] + .59 * t[1] + .11 * t[2];
                      return this.setValues("rgb", [e, e, e]), this
                  },
                  clearer: function(t) {
                      var e = this.values.alpha;
                      return this.setValues("alpha", e - e * t), this
                  },
                  opaquer: function(t) {
                      var e = this.values.alpha;
                      return this.setValues("alpha", e + e * t), this
                  },
                  rotate: function(t) {
                      var e = this.values.hsl,
                          a = (e[0] + t) % 360;
                      return e[0] = 0 > a ? 360 + a : a, this.setValues("hsl", e), this
                  },
                  mix: function(t, e) {
                      var a = this,
                          i = t,
                          n = void 0 === e ? .5 : e,
                          o = 2 * n - 1,
                          r = a.alpha() - i.alpha(),
                          l = ((o * r === -1 ? o : (o + r) / (1 + o * r)) + 1) / 2,
                          s = 1 - l;
                      return this.rgb(l * a.red() + s * i.red(), l * a.green() + s * i.green(), l * a.blue() + s * i.blue()).alpha(a.alpha() * n + i.alpha() * (1 - n))
                  },
                  toJSON: function() {
                      return this.rgb()
                  },
                  clone: function() {
                      var t, e, a = new o,
                          i = this.values,
                          n = a.values;
                      for (var r in i) i.hasOwnProperty(r) && (t = i[r], e = {}.toString.call(t), "[object Array]" === e ? n[r] = t.slice(0) : "[object Number]" === e ? n[r] = t : console.error("unexpected color value:", t));
                      return a
                  }
              }, o.prototype.spaces = {
                  rgb: ["red", "green", "blue"],
                  hsl: ["hue", "saturation", "lightness"],
                  hsv: ["hue", "saturation", "value"],
                  hwb: ["hue", "whiteness", "blackness"],
                  cmyk: ["cyan", "magenta", "yellow", "black"]
              }, o.prototype.maxes = {
                  rgb: [255, 255, 255],
                  hsl: [360, 100, 100],
                  hsv: [360, 100, 100],
                  hwb: [360, 100, 100],
                  cmyk: [100, 100, 100, 100]
              }, o.prototype.getValues = function(t) {
                  for (var e = this.values, a = {}, i = 0; i < t.length; i++) a[t.charAt(i)] = e[t][i];
                  return 1 !== e.alpha && (a.a = e.alpha), a
              }, o.prototype.setValues = function(t, e) {
                  var a, n = this.values,
                      o = this.spaces,
                      r = this.maxes,
                      l = 1;
                  if ("alpha" === t) l = e;
                  else if (e.length) n[t] = e.slice(0, t.length), l = e[t.length];
                  else if (void 0 !== e[t.charAt(0)]) {
                      for (a = 0; a < t.length; a++) n[t][a] = e[t.charAt(a)];
                      l = e.a
                  } else if (void 0 !== e[o[t][0]]) {
                      var s = o[t];
                      for (a = 0; a < t.length; a++) n[t][a] = e[s[a]];
                      l = e.alpha
                  }
                  if (n.alpha = Math.max(0, Math.min(1, void 0 === l ? n.alpha : l)), "alpha" === t) return !1;
                  var d;
                  for (a = 0; a < t.length; a++) d = Math.max(0, Math.min(r[t][a], n[t][a])), n[t][a] = Math.round(d);
                  for (var u in o) u !== t && (n[u] = i[t][u](n[t]));
                  return !0
              }, o.prototype.setSpace = function(t, e) {
                  var a = e[0];
                  return void 0 === a ? this.getValues(t) : ("number" == typeof a && (a = Array.prototype.slice.call(e)), this.setValues(t, a), this)
              }, o.prototype.setChannel = function(t, e, a) {
                  var i = this.values[t];
                  return void 0 === a ? i[e] : a === i[e] ? this : (i[e] = a, this.setValues(t, i), this)
              }, "undefined" != typeof window && (window.Color = o), e.exports = o
          }, {
              2: 2,
              5: 5
          }],
          4: [function(t, e, a) {
              function i(t) {
                  var e, a, i, n = t[0] / 255,
                      o = t[1] / 255,
                      r = t[2] / 255,
                      l = Math.min(n, o, r),
                      s = Math.max(n, o, r),
                      d = s - l;
                  return s == l ? e = 0 : n == s ? e = (o - r) / d : o == s ? e = 2 + (r - n) / d : r == s && (e = 4 + (n - o) / d), e = Math.min(60 * e, 360), 0 > e && (e += 360), i = (l + s) / 2, a = s == l ? 0 : .5 >= i ? d / (s + l) : d / (2 - s - l), [e, 100 * a, 100 * i]
              }
  
              function n(t) {
                  var e, a, i, n = t[0],
                      o = t[1],
                      r = t[2],
                      l = Math.min(n, o, r),
                      s = Math.max(n, o, r),
                      d = s - l;
                  return a = 0 == s ? 0 : d / s * 1e3 / 10, s == l ? e = 0 : n == s ? e = (o - r) / d : o == s ? e = 2 + (r - n) / d : r == s && (e = 4 + (n - o) / d), e = Math.min(60 * e, 360), 0 > e && (e += 360), i = s / 255 * 1e3 / 10, [e, a, i]
              }
  
              function o(t) {
                  var e = t[0],
                      a = t[1],
                      n = t[2],
                      o = i(t)[0],
                      r = 1 / 255 * Math.min(e, Math.min(a, n)),
                      n = 1 - 1 / 255 * Math.max(e, Math.max(a, n));
                  return [o, 100 * r, 100 * n]
              }
  
              function l(t) {
                  var e, a, i, n, o = t[0] / 255,
                      r = t[1] / 255,
                      l = t[2] / 255;
                  return n = Math.min(1 - o, 1 - r, 1 - l), e = (1 - o - n) / (1 - n) || 0, a = (1 - r - n) / (1 - n) || 0, i = (1 - l - n) / (1 - n) || 0, [100 * e, 100 * a, 100 * i, 100 * n]
              }
  
              function s(t) {
                  return G[JSON.stringify(t)]
              }
  
              function d(t) {
                  var e = t[0] / 255,
                      a = t[1] / 255,
                      i = t[2] / 255;
                  e = e > .04045 ? Math.pow((e + .055) / 1.055, 2.4) : e / 12.92, a = a > .04045 ? Math.pow((a + .055) / 1.055, 2.4) : a / 12.92, i = i > .04045 ? Math.pow((i + .055) / 1.055, 2.4) : i / 12.92;
                  var n = .4124 * e + .3576 * a + .1805 * i,
                      o = .2126 * e + .7152 * a + .0722 * i,
                      r = .0193 * e + .1192 * a + .9505 * i;
                  return [100 * n, 100 * o, 100 * r]
              }
  
              function u(t) {
                  var e, a, i, n = d(t),
                      o = n[0],
                      r = n[1],
                      l = n[2];
                  return o /= 95.047, r /= 100, l /= 108.883, o = o > .008856 ? Math.pow(o, 1 / 3) : 7.787 * o + 16 / 116, r = r > .008856 ? Math.pow(r, 1 / 3) : 7.787 * r + 16 / 116, l = l > .008856 ? Math.pow(l, 1 / 3) : 7.787 * l + 16 / 116, e = 116 * r - 16, a = 500 * (o - r), i = 200 * (r - l), [e, a, i]
              }
  
              function c(t) {
                  return W(u(t))
              }
  
              function h(t) {
                  var e, a, i, n, o, r = t[0] / 360,
                      l = t[1] / 100,
                      s = t[2] / 100;
                  if (0 == l) return o = 255 * s, [o, o, o];
                  a = .5 > s ? s * (1 + l) : s + l - s * l, e = 2 * s - a, n = [0, 0, 0];
                  for (var d = 0; 3 > d; d++) i = r + 1 / 3 * -(d - 1), 0 > i && i++, i > 1 && i--, o = 1 > 6 * i ? e + 6 * (a - e) * i : 1 > 2 * i ? a : 2 > 3 * i ? e + (a - e) * (2 / 3 - i) * 6 : e, n[d] = 255 * o;
                  return n
              }
  
              function f(t) {
                  var e, a, i = t[0],
                      n = t[1] / 100,
                      o = t[2] / 100;
                  return 0 === o ? [0, 0, 0] : (o *= 2, n *= 1 >= o ? o : 2 - o, a = (o + n) / 2, e = 2 * n / (o + n), [i, 100 * e, 100 * a])
              }
  
              function p(t) {
                  return o(h(t))
              }
  
              function m(t) {
                  return l(h(t))
              }
  
              function v(t) {
                  return s(h(t))
              }
  
              function x(t) {
                  var e = t[0] / 60,
                      a = t[1] / 100,
                      i = t[2] / 100,
                      n = Math.floor(e) % 6,
                      o = e - Math.floor(e),
                      r = 255 * i * (1 - a),
                      l = 255 * i * (1 - a * o),
                      s = 255 * i * (1 - a * (1 - o)),
                      i = 255 * i;
                  switch (n) {
                      case 0:
                          return [i, s, r];
                      case 1:
                          return [l, i, r];
                      case 2:
                          return [r, i, s];
                      case 3:
                          return [r, l, i];
                      case 4:
                          return [s, r, i];
                      case 5:
                          return [i, r, l]
                  }
              }
  
              function y(t) {
                  var e, a, i = t[0],
                      n = t[1] / 100,
                      o = t[2] / 100;
                  return a = (2 - n) * o, e = n * o, e /= 1 >= a ? a : 2 - a, e = e || 0, a /= 2, [i, 100 * e, 100 * a]
              }
  
              function k(t) {
                  return o(x(t))
              }
  
              function S(t) {
                  return l(x(t))
              }
  
              function w(t) {
                  return s(x(t))
              }
  
              function C(t) {
                  var e, a, i, n, o = t[0] / 360,
                      l = t[1] / 100,
                      s = t[2] / 100,
                      d = l + s;
                  switch (d > 1 && (l /= d, s /= d), e = Math.floor(6 * o), a = 1 - s, i = 6 * o - e, 0 != (1 & e) && (i = 1 - i), n = l + i * (a - l), e) {
                      default:
                          case 6:
                          case 0:
                          r = a,
                      g = n,
                      b = l;
                      break;
                      case 1:
                              r = n,
                          g = a,
                          b = l;
                          break;
                      case 2:
                              r = l,
                          g = a,
                          b = n;
                          break;
                      case 3:
                              r = l,
                          g = n,
                          b = a;
                          break;
                      case 4:
                              r = n,
                          g = l,
                          b = a;
                          break;
                      case 5:
                              r = a,
                          g = l,
                          b = n
                  }
                  return [255 * r, 255 * g, 255 * b]
              }
  
              function M(t) {
                  return i(C(t))
              }
  
              function D(t) {
                  return n(C(t))
              }
  
              function I(t) {
                  return l(C(t))
              }
  
              function A(t) {
                  return s(C(t))
              }
  
              function P(t) {
                  var e, a, i, n = t[0] / 100,
                      o = t[1] / 100,
                      r = t[2] / 100,
                      l = t[3] / 100;
                  return e = 1 - Math.min(1, n * (1 - l) + l), a = 1 - Math.min(1, o * (1 - l) + l), i = 1 - Math.min(1, r * (1 - l) + l), [255 * e, 255 * a, 255 * i]
              }
  
              function T(t) {
                  return i(P(t))
              }
  
              function F(t) {
                  return n(P(t))
              }
  
              function R(t) {
                  return o(P(t))
              }
  
              function _(t) {
                  return s(P(t))
              }
  
              function V(t) {
                  var e, a, i, n = t[0] / 100,
                      o = t[1] / 100,
                      r = t[2] / 100;
                  return e = 3.2406 * n + -1.5372 * o + r * -.4986, a = n * -.9689 + 1.8758 * o + .0415 * r, i = .0557 * n + o * -.204 + 1.057 * r, e = e > .0031308 ? 1.055 * Math.pow(e, 1 / 2.4) - .055 : e = 12.92 * e, a = a > .0031308 ? 1.055 * Math.pow(a, 1 / 2.4) - .055 : a = 12.92 * a, i = i > .0031308 ? 1.055 * Math.pow(i, 1 / 2.4) - .055 : i = 12.92 * i, e = Math.min(Math.max(0, e), 1), a = Math.min(Math.max(0, a), 1), i = Math.min(Math.max(0, i), 1), [255 * e, 255 * a, 255 * i]
              }
  
              function L(t) {
                  var e, a, i, n = t[0],
                      o = t[1],
                      r = t[2];
                  return n /= 95.047, o /= 100, r /= 108.883, n = n > .008856 ? Math.pow(n, 1 / 3) : 7.787 * n + 16 / 116, o = o > .008856 ? Math.pow(o, 1 / 3) : 7.787 * o + 16 / 116, r = r > .008856 ? Math.pow(r, 1 / 3) : 7.787 * r + 16 / 116, e = 116 * o - 16, a = 500 * (n - o), i = 200 * (o - r), [e, a, i]
              }
  
              function O(t) {
                  return W(L(t))
              }
  
              function B(t) {
                  var e, a, i, n, o = t[0],
                      r = t[1],
                      l = t[2];
                  return 8 >= o ? (a = 100 * o / 903.3, n = 7.787 * (a / 100) + 16 / 116) : (a = 100 * Math.pow((o + 16) / 116, 3), n = Math.pow(a / 100, 1 / 3)), e = .008856 >= e / 95.047 ? e = 95.047 * (r / 500 + n - 16 / 116) / 7.787 : 95.047 * Math.pow(r / 500 + n, 3), i = .008859 >= i / 108.883 ? i = 108.883 * (n - l / 200 - 16 / 116) / 7.787 : 108.883 * Math.pow(n - l / 200, 3), [e, a, i]
              }
  
              function W(t) {
                  var e, a, i, n = t[0],
                      o = t[1],
                      r = t[2];
                  return e = Math.atan2(r, o), a = 360 * e / 2 / Math.PI, 0 > a && (a += 360), i = Math.sqrt(o * o + r * r), [n, i, a]
              }
  
              function z(t) {
                  return V(B(t))
              }
  
              function N(t) {
                  var e, a, i, n = t[0],
                      o = t[1],
                      r = t[2];
                  return i = r / 360 * 2 * Math.PI, e = o * Math.cos(i), a = o * Math.sin(i), [n, e, a]
              }
  
              function H(t) {
                  return B(N(t))
              }
  
              function E(t) {
                  return z(N(t))
              }
  
              function U(t) {
                  return Z[t]
              }
  
              function q(t) {
                  return i(U(t))
              }
  
              function j(t) {
                  return n(U(t))
              }
  
              function Y(t) {
                  return o(U(t))
              }
  
              function K(t) {
                  return l(U(t))
              }
  
              function X(t) {
                  return u(U(t))
              }
  
              function J(t) {
                  return d(U(t))
              }
              e.exports = {
                  rgb2hsl: i,
                  rgb2hsv: n,
                  rgb2hwb: o,
                  rgb2cmyk: l,
                  rgb2keyword: s,
                  rgb2xyz: d,
                  rgb2lab: u,
                  rgb2lch: c,
                  hsl2rgb: h,
                  hsl2hsv: f,
                  hsl2hwb: p,
                  hsl2cmyk: m,
                  hsl2keyword: v,
                  hsv2rgb: x,
                  hsv2hsl: y,
                  hsv2hwb: k,
                  hsv2cmyk: S,
                  hsv2keyword: w,
                  hwb2rgb: C,
                  hwb2hsl: M,
                  hwb2hsv: D,
                  hwb2cmyk: I,
                  hwb2keyword: A,
                  cmyk2rgb: P,
                  cmyk2hsl: T,
                  cmyk2hsv: F,
                  cmyk2hwb: R,
                  cmyk2keyword: _,
                  keyword2rgb: U,
                  keyword2hsl: q,
                  keyword2hsv: j,
                  keyword2hwb: Y,
                  keyword2cmyk: K,
                  keyword2lab: X,
                  keyword2xyz: J,
                  xyz2rgb: V,
                  xyz2lab: L,
                  xyz2lch: O,
                  lab2xyz: B,
                  lab2rgb: z,
                  lab2lch: W,
                  lch2lab: N,
                  lch2xyz: H,
                  lch2rgb: E
              };
              var Z = {
                      aliceblue: [240, 248, 255],
                      antiquewhite: [250, 235, 215],
                      aqua: [0, 255, 255],
                      aquamarine: [127, 255, 212],
                      azure: [240, 255, 255],
                      beige: [245, 245, 220],
                      bisque: [255, 228, 196],
                      black: [0, 0, 0],
                      blanchedalmond: [255, 235, 205],
                      blue: [0, 0, 255],
                      blueviolet: [138, 43, 226],
                      brown: [165, 42, 42],
                      burlywood: [222, 184, 135],
                      cadetblue: [95, 158, 160],
                      chartreuse: [127, 255, 0],
                      chocolate: [210, 105, 30],
                      coral: [255, 127, 80],
                      cornflowerblue: [100, 149, 237],
                      cornsilk: [255, 248, 220],
                      crimson: [220, 20, 60],
                      cyan: [0, 255, 255],
                      darkblue: [0, 0, 139],
                      darkcyan: [0, 139, 139],
                      darkgoldenrod: [184, 134, 11],
                      darkgray: [169, 169, 169],
                      darkgreen: [0, 100, 0],
                      darkgrey: [169, 169, 169],
                      darkkhaki: [189, 183, 107],
                      darkmagenta: [139, 0, 139],
                      darkolivegreen: [85, 107, 47],
                      darkorange: [255, 140, 0],
                      darkorchid: [153, 50, 204],
                      darkred: [139, 0, 0],
                      darksalmon: [233, 150, 122],
                      darkseagreen: [143, 188, 143],
                      darkslateblue: [72, 61, 139],
                      darkslategray: [47, 79, 79],
                      darkslategrey: [47, 79, 79],
                      darkturquoise: [0, 206, 209],
                      darkviolet: [148, 0, 211],
                      deeppink: [255, 20, 147],
                      deepskyblue: [0, 191, 255],
                      dimgray: [105, 105, 105],
                      dimgrey: [105, 105, 105],
                      dodgerblue: [30, 144, 255],
                      firebrick: [178, 34, 34],
                      floralwhite: [255, 250, 240],
                      forestgreen: [34, 139, 34],
                      fuchsia: [255, 0, 255],
                      gainsboro: [220, 220, 220],
                      ghostwhite: [248, 248, 255],
                      gold: [255, 215, 0],
                      goldenrod: [218, 165, 32],
                      gray: [128, 128, 128],
                      green: [0, 128, 0],
                      greenyellow: [173, 255, 47],
                      grey: [128, 128, 128],
                      honeydew: [240, 255, 240],
                      hotpink: [255, 105, 180],
                      indianred: [205, 92, 92],
                      indigo: [75, 0, 130],
                      ivory: [255, 255, 240],
                      khaki: [240, 230, 140],
                      lavender: [230, 230, 250],
                      lavenderblush: [255, 240, 245],
                      lawngreen: [124, 252, 0],
                      lemonchiffon: [255, 250, 205],
                      lightblue: [173, 216, 230],
                      lightcoral: [240, 128, 128],
                      lightcyan: [224, 255, 255],
                      lightgoldenrodyellow: [250, 250, 210],
                      lightgray: [211, 211, 211],
                      lightgreen: [144, 238, 144],
                      lightgrey: [211, 211, 211],
                      lightpink: [255, 182, 193],
                      lightsalmon: [255, 160, 122],
                      lightseagreen: [32, 178, 170],
                      lightskyblue: [135, 206, 250],
                      lightslategray: [119, 136, 153],
                      lightslategrey: [119, 136, 153],
                      lightsteelblue: [176, 196, 222],
                      lightyellow: [255, 255, 224],
                      lime: [0, 255, 0],
                      limegreen: [50, 205, 50],
                      linen: [250, 240, 230],
                      magenta: [255, 0, 255],
                      maroon: [128, 0, 0],
                      mediumaquamarine: [102, 205, 170],
                      mediumblue: [0, 0, 205],
                      mediumorchid: [186, 85, 211],
                      mediumpurple: [147, 112, 219],
                      mediumseagreen: [60, 179, 113],
                      mediumslateblue: [123, 104, 238],
                      mediumspringgreen: [0, 250, 154],
                      mediumturquoise: [72, 209, 204],
                      mediumvioletred: [199, 21, 133],
                      midnightblue: [25, 25, 112],
                      mintcream: [245, 255, 250],
                      mistyrose: [255, 228, 225],
                      moccasin: [255, 228, 181],
                      navajowhite: [255, 222, 173],
                      navy: [0, 0, 128],
                      oldlace: [253, 245, 230],
                      olive: [128, 128, 0],
                      olivedrab: [107, 142, 35],
                      orange: [255, 165, 0],
                      orangered: [255, 69, 0],
                      orchid: [218, 112, 214],
                      palegoldenrod: [238, 232, 170],
                      palegreen: [152, 251, 152],
                      paleturquoise: [175, 238, 238],
                      palevioletred: [219, 112, 147],
                      papayawhip: [255, 239, 213],
                      peachpuff: [255, 218, 185],
                      peru: [205, 133, 63],
                      pink: [255, 192, 203],
                      plum: [221, 160, 221],
                      powderblue: [176, 224, 230],
                      purple: [128, 0, 128],
                      rebeccapurple: [102, 51, 153],
                      red: [255, 0, 0],
                      rosybrown: [188, 143, 143],
                      royalblue: [65, 105, 225],
                      saddlebrown: [139, 69, 19],
                      salmon: [250, 128, 114],
                      sandybrown: [244, 164, 96],
                      seagreen: [46, 139, 87],
                      seashell: [255, 245, 238],
                      sienna: [160, 82, 45],
                      silver: [192, 192, 192],
                      skyblue: [135, 206, 235],
                      slateblue: [106, 90, 205],
                      slategray: [112, 128, 144],
                      slategrey: [112, 128, 144],
                      snow: [255, 250, 250],
                      springgreen: [0, 255, 127],
                      steelblue: [70, 130, 180],
                      tan: [210, 180, 140],
                      teal: [0, 128, 128],
                      thistle: [216, 191, 216],
                      tomato: [255, 99, 71],
                      turquoise: [64, 224, 208],
                      violet: [238, 130, 238],
                      wheat: [245, 222, 179],
                      white: [255, 255, 255],
                      whitesmoke: [245, 245, 245],
                      yellow: [255, 255, 0],
                      yellowgreen: [154, 205, 50]
                  },
                  G = {};
              for (var Q in Z) G[JSON.stringify(Z[Q])] = Q
          }, {}],
          5: [function(t, e, a) {
              var i = t(4),
                  n = function() {
                      return new d
                  };
              for (var o in i) {
                  n[o + "Raw"] = function(t) {
                      return function(e) {
                          return "number" == typeof e && (e = Array.prototype.slice.call(arguments)), i[t](e)
                      }
                  }(o);
                  var r = /(\w+)2(\w+)/.exec(o),
                      l = r[1],
                      s = r[2];
                  n[l] = n[l] || {}, n[l][s] = n[o] = function(t) {
                      return function(e) {
                          "number" == typeof e && (e = Array.prototype.slice.call(arguments));
                          var a = i[t](e);
                          if ("string" == typeof a || void 0 === a) return a;
                          for (var n = 0; n < a.length; n++) a[n] = Math.round(a[n]);
                          return a
                      }
                  }(o)
              }
              var d = function() {
                  this.convs = {}
              };
              d.prototype.routeSpace = function(t, e) {
                  var a = e[0];
                  return void 0 === a ? this.getValues(t) : ("number" == typeof a && (a = Array.prototype.slice.call(e)), this.setValues(t, a))
              }, d.prototype.setValues = function(t, e) {
                  return this.space = t, this.convs = {}, this.convs[t] = e, this
              }, d.prototype.getValues = function(t) {
                  var e = this.convs[t];
                  if (!e) {
                      var a = this.space,
                          i = this.convs[a];
                      e = n[a][t](i), this.convs[t] = e
                  }
                  return e
              }, ["rgb", "hsl", "hsv", "cmyk", "keyword"].forEach(function(t) {
                  d.prototype[t] = function(e) {
                      return this.routeSpace(t, arguments)
                  }
              }), e.exports = n
          }, {
              4: 4
          }],
          6: [function(t, e, a) {
              e.exports = {
                  aliceblue: [240, 248, 255],
                  antiquewhite: [250, 235, 215],
                  aqua: [0, 255, 255],
                  aquamarine: [127, 255, 212],
                  azure: [240, 255, 255],
                  beige: [245, 245, 220],
                  bisque: [255, 228, 196],
                  black: [0, 0, 0],
                  blanchedalmond: [255, 235, 205],
                  blue: [0, 0, 255],
                  blueviolet: [138, 43, 226],
                  brown: [165, 42, 42],
                  burlywood: [222, 184, 135],
                  cadetblue: [95, 158, 160],
                  chartreuse: [127, 255, 0],
                  chocolate: [210, 105, 30],
                  coral: [255, 127, 80],
                  cornflowerblue: [100, 149, 237],
                  cornsilk: [255, 248, 220],
                  crimson: [220, 20, 60],
                  cyan: [0, 255, 255],
                  darkblue: [0, 0, 139],
                  darkcyan: [0, 139, 139],
                  darkgoldenrod: [184, 134, 11],
                  darkgray: [169, 169, 169],
                  darkgreen: [0, 100, 0],
                  darkgrey: [169, 169, 169],
                  darkkhaki: [189, 183, 107],
                  darkmagenta: [139, 0, 139],
                  darkolivegreen: [85, 107, 47],
                  darkorange: [255, 140, 0],
                  darkorchid: [153, 50, 204],
                  darkred: [139, 0, 0],
                  darksalmon: [233, 150, 122],
                  darkseagreen: [143, 188, 143],
                  darkslateblue: [72, 61, 139],
                  darkslategray: [47, 79, 79],
                  darkslategrey: [47, 79, 79],
                  darkturquoise: [0, 206, 209],
                  darkviolet: [148, 0, 211],
                  deeppink: [255, 20, 147],
                  deepskyblue: [0, 191, 255],
                  dimgray: [105, 105, 105],
                  dimgrey: [105, 105, 105],
                  dodgerblue: [30, 144, 255],
                  firebrick: [178, 34, 34],
                  floralwhite: [255, 250, 240],
                  forestgreen: [34, 139, 34],
                  fuchsia: [255, 0, 255],
                  gainsboro: [220, 220, 220],
                  ghostwhite: [248, 248, 255],
                  gold: [255, 215, 0],
                  goldenrod: [218, 165, 32],
                  gray: [128, 128, 128],
                  green: [0, 128, 0],
                  greenyellow: [173, 255, 47],
                  grey: [128, 128, 128],
                  honeydew: [240, 255, 240],
                  hotpink: [255, 105, 180],
                  indianred: [205, 92, 92],
                  indigo: [75, 0, 130],
                  ivory: [255, 255, 240],
                  khaki: [240, 230, 140],
                  lavender: [230, 230, 250],
                  lavenderblush: [255, 240, 245],
                  lawngreen: [124, 252, 0],
                  lemonchiffon: [255, 250, 205],
                  lightblue: [173, 216, 230],
                  lightcoral: [240, 128, 128],
                  lightcyan: [224, 255, 255],
                  lightgoldenrodyellow: [250, 250, 210],
                  lightgray: [211, 211, 211],
                  lightgreen: [144, 238, 144],
                  lightgrey: [211, 211, 211],
                  lightpink: [255, 182, 193],
                  lightsalmon: [255, 160, 122],
                  lightseagreen: [32, 178, 170],
                  lightskyblue: [135, 206, 250],
                  lightslategray: [119, 136, 153],
                  lightslategrey: [119, 136, 153],
                  lightsteelblue: [176, 196, 222],
                  lightyellow: [255, 255, 224],
                  lime: [0, 255, 0],
                  limegreen: [50, 205, 50],
                  linen: [250, 240, 230],
                  magenta: [255, 0, 255],
                  maroon: [128, 0, 0],
                  mediumaquamarine: [102, 205, 170],
                  mediumblue: [0, 0, 205],
                  mediumorchid: [186, 85, 211],
                  mediumpurple: [147, 112, 219],
                  mediumseagreen: [60, 179, 113],
                  mediumslateblue: [123, 104, 238],
                  mediumspringgreen: [0, 250, 154],
                  mediumturquoise: [72, 209, 204],
                  mediumvioletred: [199, 21, 133],
                  midnightblue: [25, 25, 112],
                  mintcream: [245, 255, 250],
                  mistyrose: [255, 228, 225],
                  moccasin: [255, 228, 181],
                  navajowhite: [255, 222, 173],
                  navy: [0, 0, 128],
                  oldlace: [253, 245, 230],
                  olive: [128, 128, 0],
                  olivedrab: [107, 142, 35],
                  orange: [255, 165, 0],
                  orangered: [255, 69, 0],
                  orchid: [218, 112, 214],
                  palegoldenrod: [238, 232, 170],
                  palegreen: [152, 251, 152],
                  paleturquoise: [175, 238, 238],
                  palevioletred: [219, 112, 147],
                  papayawhip: [255, 239, 213],
                  peachpuff: [255, 218, 185],
                  peru: [205, 133, 63],
                  pink: [255, 192, 203],
                  plum: [221, 160, 221],
                  powderblue: [176, 224, 230],
                  purple: [128, 0, 128],
                  rebeccapurple: [102, 51, 153],
                  red: [255, 0, 0],
                  rosybrown: [188, 143, 143],
                  royalblue: [65, 105, 225],
                  saddlebrown: [139, 69, 19],
                  salmon: [250, 128, 114],
                  sandybrown: [244, 164, 96],
                  seagreen: [46, 139, 87],
                  seashell: [255, 245, 238],
                  sienna: [160, 82, 45],
                  silver: [192, 192, 192],
                  skyblue: [135, 206, 235],
                  slateblue: [106, 90, 205],
                  slategray: [112, 128, 144],
                  slategrey: [112, 128, 144],
                  snow: [255, 250, 250],
                  springgreen: [0, 255, 127],
                  steelblue: [70, 130, 180],
                  tan: [210, 180, 140],
                  teal: [0, 128, 128],
                  thistle: [216, 191, 216],
                  tomato: [255, 99, 71],
                  turquoise: [64, 224, 208],
                  violet: [238, 130, 238],
                  wheat: [245, 222, 179],
                  white: [255, 255, 255],
                  whitesmoke: [245, 245, 245],
                  yellow: [255, 255, 0],
                  yellowgreen: [154, 205, 50]
              }
          }, {}],
          7: [function(t, e, a) {
              var i = t(27)();
              t(26)(i), t(22)(i), t(25)(i), t(21)(i), t(23)(i), t(24)(i), t(28)(i), t(32)(i), t(30)(i), t(31)(i), t(33)(i), t(29)(i), t(34)(i), t(35)(i), t(36)(i), t(37)(i), t(38)(i), t(41)(i), t(39)(i), t(40)(i), t(42)(i), t(43)(i), t(44)(i), t(15)(i), t(16)(i), t(17)(i), t(18)(i), t(19)(i), t(20)(i), t(8)(i), t(9)(i), t(10)(i), t(11)(i), t(12)(i), t(13)(i), t(14)(i), window.Chart = e.exports = i
          }, {
              10: 10,
              11: 11,
              12: 12,
              13: 13,
              14: 14,
              15: 15,
              16: 16,
              17: 17,
              18: 18,
              19: 19,
              20: 20,
              21: 21,
              22: 22,
              23: 23,
              24: 24,
              25: 25,
              26: 26,
              27: 27,
              28: 28,
              29: 29,
              30: 30,
              31: 31,
              32: 32,
              33: 33,
              34: 34,
              35: 35,
              36: 36,
              37: 37,
              38: 38,
              39: 39,
              40: 40,
              41: 41,
              42: 42,
              43: 43,
              44: 44,
              8: 8,
              9: 9
          }],
          8: [function(t, e, a) {
              "use strict";
              e.exports = function(t) {
                  t.Bar = function(e, a) {
                      return a.type = "bar", new t(e, a)
                  }
              }
          }, {}],
          9: [function(t, e, a) {
              "use strict";
              e.exports = function(t) {
                  t.Bubble = function(e, a) {
                      return a.type = "bubble", new t(e, a)
                  }
              }
          }, {}],
          10: [function(t, e, a) {
              "use strict";
              e.exports = function(t) {
                  t.Doughnut = function(e, a) {
                      return a.type = "doughnut", new t(e, a)
                  }
              }
          }, {}],
          11: [function(t, e, a) {
              "use strict";
              e.exports = function(t) {
                  t.Line = function(e, a) {
                      return a.type = "line", new t(e, a)
                  }
              }
          }, {}],
          12: [function(t, e, a) {
              "use strict";
              e.exports = function(t) {
                  t.PolarArea = function(e, a) {
                      return a.type = "polarArea", new t(e, a)
                  }
              }
          }, {}],
          13: [function(t, e, a) {
              "use strict";
              e.exports = function(t) {
                  t.Radar = function(e, a) {
                      return a.options = t.helpers.configMerge({
                          aspectRatio: 1
                      }, a.options), a.type = "radar", new t(e, a)
                  }
              }
          }, {}],
          14: [function(t, e, a) {
              "use strict";
              e.exports = function(t) {
                  var e = {
                      hover: {
                          mode: "single"
                      },
                      scales: {
                          xAxes: [{
                              type: "linear",
                              position: "bottom",
                              id: "x-axis-1"
                          }],
                          yAxes: [{
                              type: "linear",
                              position: "left",
                              id: "y-axis-1"
                          }]
                      },
                      tooltips: {
                          callbacks: {
                              title: function() {
                                  return ""
                              },
                              label: function(t) {
                                  return "(" + t.xLabel + ", " + t.yLabel + ")"
                              }
                          }
                      }
                  };
                  t.defaults.scatter = e, t.controllers.scatter = t.controllers.line, t.Scatter = function(e, a) {
                      return a.type = "scatter", new t(e, a)
                  }
              }
          }, {}],
          15: [function(t, e, a) {
              "use strict";
              e.exports = function(t) {
                  var e = t.helpers;
                  t.defaults.bar = {
                      hover: {
                          mode: "label"
                      },
                      scales: {
                          xAxes: [{
                              type: "category",
                              categoryPercentage: .8,
                              barPercentage: .9,
                              gridLines: {
                                  offsetGridLines: !0
                              }
                          }],
                          yAxes: [{
                              type: "linear"
                          }]
                      }
                  }, t.controllers.bar = t.DatasetController.extend({
                      dataElementType: t.elements.Rectangle,
                      initialize: function(e, a) {
                          t.DatasetController.prototype.initialize.call(this, e, a), this.getMeta().bar = !0
                      },
                      getBarCount: function() {
                          var t = this,
                              a = 0;
                          return e.each(t.chart.data.datasets, function(e, i) {
                              var n = t.chart.getDatasetMeta(i);
                              n.bar && t.chart.isDatasetVisible(i) && ++a
                          }, t), a
                      },
                      update: function(t) {
                          var a = this;
                          e.each(a.getMeta().data, function(e, i) {
                              a.updateElement(e, i, t)
                          }, a)
                      },
                      updateElement: function(t, a, i) {
                          var n = this,
                              o = n.getMeta(),
                              r = n.getScaleForId(o.xAxisID),
                              l = n.getScaleForId(o.yAxisID),
                              s = l.getBasePixel(),
                              d = n.chart.options.elements.rectangle,
                              u = t.custom || {},
                              c = n.getDataset();
                          e.extend(t, {
                              _xScale: r,
                              _yScale: l,
                              _datasetIndex: n.index,
                              _index: a,
                              _model: {
                                  x: n.calculateBarX(a, n.index),
                                  y: i ? s : n.calculateBarY(a, n.index),
                                  label: n.chart.data.labels[a],
                                  datasetLabel: c.label,
                                  base: i ? s : n.calculateBarBase(n.index, a),
                                  width: n.calculateBarWidth(a),
                                  backgroundColor: u.backgroundColor ? u.backgroundColor : e.getValueAtIndexOrDefault(c.backgroundColor, a, d.backgroundColor),
                                  borderSkipped: u.borderSkipped ? u.borderSkipped : d.borderSkipped,
                                  borderColor: u.borderColor ? u.borderColor : e.getValueAtIndexOrDefault(c.borderColor, a, d.borderColor),
                                  borderWidth: u.borderWidth ? u.borderWidth : e.getValueAtIndexOrDefault(c.borderWidth, a, d.borderWidth)
                              }
                          }), t.pivot()
                      },
                      calculateBarBase: function(t, e) {
                          var a = this,
                              i = a.getMeta(),
                              n = a.getScaleForId(i.yAxisID),
                              o = 0;
                          if (n.options.stacked) {
                              for (var r = a.chart, l = r.data.datasets, s = Number(l[t].data[e]), d = 0; t > d; d++) {
                                  var u = l[d],
                                      c = r.getDatasetMeta(d);
                                  if (c.bar && c.yAxisID === n.id && r.isDatasetVisible(d)) {
                                      var h = Number(u.data[e]);
                                      o += 0 > s ? Math.min(h, 0) : Math.max(h, 0)
                                  }
                              }
                              return n.getPixelForValue(o)
                          }
                          return n.getBasePixel()
                      },
                      getRuler: function(t) {
                          var e, a = this,
                              i = a.getMeta(),
                              n = a.getScaleForId(i.xAxisID),
                              o = a.getBarCount();
                          e = "category" === n.options.type ? n.getPixelForTick(t + 1) - n.getPixelForTick(t) : n.width / n.ticks.length;
                          var r = e * n.options.categoryPercentage,
                              l = (e - e * n.options.categoryPercentage) / 2,
                              s = r / o;
                          if (n.ticks.length !== a.chart.data.labels.length) {
                              var d = n.ticks.length / a.chart.data.labels.length;
                              s *= d
                          }
                          var u = s * n.options.barPercentage,
                              c = s - s * n.options.barPercentage;
                          return {
                              datasetCount: o,
                              tickWidth: e,
                              categoryWidth: r,
                              categorySpacing: l,
                              fullBarWidth: s,
                              barWidth: u,
                              barSpacing: c
                          }
                      },
                      calculateBarWidth: function(t) {
                          var e = this.getScaleForId(this.getMeta().xAxisID);
                          if (e.options.barThickness) return e.options.barThickness;
                          var a = this.getRuler(t);
                          return e.options.stacked ? a.categoryWidth : a.barWidth
                      },
                      getBarIndex: function(t) {
                          var e, a, i = 0;
                          for (a = 0; t > a; ++a) e = this.chart.getDatasetMeta(a), e.bar && this.chart.isDatasetVisible(a) && ++i;
                          return i
                      },
                      calculateBarX: function(t, e) {
                          var a = this,
                              i = a.getMeta(),
                              n = a.getScaleForId(i.xAxisID),
                              o = a.getBarIndex(e),
                              r = a.getRuler(t),
                              l = n.getPixelForValue(null, t, e, a.chart.isCombo);
                          return l -= a.chart.isCombo ? r.tickWidth / 2 : 0, n.options.stacked ? l + r.categoryWidth / 2 + r.categorySpacing : l + r.barWidth / 2 + r.categorySpacing + r.barWidth * o + r.barSpacing / 2 + r.barSpacing * o
                      },
                      calculateBarY: function(t, e) {
                          var a = this,
                              i = a.getMeta(),
                              n = a.getScaleForId(i.yAxisID),
                              o = Number(a.getDataset().data[t]);
                          if (n.options.stacked) {
                              for (var r = 0, l = 0, s = 0; e > s; s++) {
                                  var d = a.chart.data.datasets[s],
                                      u = a.chart.getDatasetMeta(s);
                                  if (u.bar && u.yAxisID === n.id && a.chart.isDatasetVisible(s)) {
                                      var c = Number(d.data[t]);
                                      0 > c ? l += c || 0 : r += c || 0
                                  }
                              }
                              return 0 > o ? n.getPixelForValue(l + o) : n.getPixelForValue(r + o)
                          }
                          return n.getPixelForValue(o)
                      },
                      draw: function(t) {
                          var a = this,
                              i = t || 1;
                          e.each(a.getMeta().data, function(t, e) {
                              var n = a.getDataset().data[e];
                              null === n || void 0 === n || isNaN(n) || t.transition(i).draw()
                          }, a)
                      },
                      setHoverStyle: function(t) {
                          var a = this.chart.data.datasets[t._datasetIndex],
                              i = t._index,
                              n = t.custom || {},
                              o = t._model;
                          o.backgroundColor = n.hoverBackgroundColor ? n.hoverBackgroundColor : e.getValueAtIndexOrDefault(a.hoverBackgroundColor, i, e.getHoverColor(o.backgroundColor)), o.borderColor = n.hoverBorderColor ? n.hoverBorderColor : e.getValueAtIndexOrDefault(a.hoverBorderColor, i, e.getHoverColor(o.borderColor)), o.borderWidth = n.hoverBorderWidth ? n.hoverBorderWidth : e.getValueAtIndexOrDefault(a.hoverBorderWidth, i, o.borderWidth)
                      },
                      removeHoverStyle: function(t) {
                          var a = this.chart.data.datasets[t._datasetIndex],
                              i = t._index,
                              n = t.custom || {},
                              o = t._model,
                              r = this.chart.options.elements.rectangle;
                          o.backgroundColor = n.backgroundColor ? n.backgroundColor : e.getValueAtIndexOrDefault(a.backgroundColor, i, r.backgroundColor), o.borderColor = n.borderColor ? n.borderColor : e.getValueAtIndexOrDefault(a.borderColor, i, r.borderColor), o.borderWidth = n.borderWidth ? n.borderWidth : e.getValueAtIndexOrDefault(a.borderWidth, i, r.borderWidth)
                      }
                  }), t.defaults.horizontalBar = {
                      hover: {
                          mode: "label"
                      },
                      scales: {
                          xAxes: [{
                              type: "linear",
                              position: "bottom"
                          }],
                          yAxes: [{
                              position: "left",
                              type: "category",
                              categoryPercentage: .8,
                              barPercentage: .9,
                              gridLines: {
                                  offsetGridLines: !0
                              }
                          }]
                      },
                      elements: {
                          rectangle: {
                              borderSkipped: "left"
                          }
                      },
                      tooltips: {
                          callbacks: {
                              title: function(t, e) {
                                  var a = "";
                                  return t.length > 0 && (t[0].yLabel ? a = t[0].yLabel : e.labels.length > 0 && t[0].index < e.labels.length && (a = e.labels[t[0].index])), a
                              },
                              label: function(t, e) {
                                  var a = e.datasets[t.datasetIndex].label || "";
                                  return a + ": " + t.xLabel
                              }
                          }
                      }
                  }, t.controllers.horizontalBar = t.controllers.bar.extend({
                      updateElement: function(t, a, i) {
                          var n = this,
                              o = n.getMeta(),
                              r = n.getScaleForId(o.xAxisID),
                              l = n.getScaleForId(o.yAxisID),
                              s = r.getBasePixel(),
                              d = t.custom || {},
                              u = n.getDataset(),
                              c = n.chart.options.elements.rectangle;
                          e.extend(t, {
                              _xScale: r,
                              _yScale: l,
                              _datasetIndex: n.index,
                              _index: a,
                              _model: {
                                  x: i ? s : n.calculateBarX(a, n.index),
                                  y: n.calculateBarY(a, n.index),
                                  label: n.chart.data.labels[a],
                                  datasetLabel: u.label,
                                  base: i ? s : n.calculateBarBase(n.index, a),
                                  height: n.calculateBarHeight(a),
                                  backgroundColor: d.backgroundColor ? d.backgroundColor : e.getValueAtIndexOrDefault(u.backgroundColor, a, c.backgroundColor),
                                  borderSkipped: d.borderSkipped ? d.borderSkipped : c.borderSkipped,
                                  borderColor: d.borderColor ? d.borderColor : e.getValueAtIndexOrDefault(u.borderColor, a, c.borderColor),
                                  borderWidth: d.borderWidth ? d.borderWidth : e.getValueAtIndexOrDefault(u.borderWidth, a, c.borderWidth)
                              },
                              draw: function() {
                                  function t(t) {
                                      return s[(u + t) % 4]
                                  }
                                  var e = this._chart.ctx,
                                      a = this._view,
                                      i = a.height / 2,
                                      n = a.y - i,
                                      o = a.y + i,
                                      r = a.base - (a.base - a.x),
                                      l = a.borderWidth / 2;
                                  a.borderWidth && (n += l, o -= l, r += l), e.beginPath(), e.fillStyle = a.backgroundColor, e.strokeStyle = a.borderColor, e.lineWidth = a.borderWidth;
                                  var s = [
                                          [a.base, o],
                                          [a.base, n],
                                          [r, n],
                                          [r, o]
                                      ],
                                      d = ["bottom", "left", "top", "right"],
                                      u = d.indexOf(a.borderSkipped, 0); - 1 === u && (u = 0), e.moveTo.apply(e, t(0));
                                  for (var c = 1; 4 > c; c++) e.lineTo.apply(e, t(c));
                                  e.fill(), a.borderWidth && e.stroke()
                              },
                              inRange: function(t, e) {
                                  var a = this._view,
                                      i = !1;
                                  return a && (i = a.x < a.base ? e >= a.y - a.height / 2 && e <= a.y + a.height / 2 && t >= a.x && t <= a.base : e >= a.y - a.height / 2 && e <= a.y + a.height / 2 && t >= a.base && t <= a.x), i
                              }
                          }), t.pivot()
                      },
                      calculateBarBase: function(t, e) {
                          var a = this,
                              i = a.getMeta(),
                              n = a.getScaleForId(i.xAxisID),
                              o = 0;
                          if (n.options.stacked) {
                              for (var r = a.chart, l = r.data.datasets, s = Number(l[t].data[e]), d = 0; t > d; d++) {
                                  var u = l[d],
                                      c = r.getDatasetMeta(d);
                                  if (c.bar && c.xAxisID === n.id && r.isDatasetVisible(d)) {
                                      var h = Number(u.data[e]);
                                      o += 0 > s ? Math.min(h, 0) : Math.max(h, 0)
                                  }
                              }
                              return n.getPixelForValue(o)
                          }
                          return n.getBasePixel()
                      },
                      getRuler: function(t) {
                          var e, a = this,
                              i = a.getMeta(),
                              n = a.getScaleForId(i.yAxisID),
                              o = a.getBarCount();
                          e = "category" === n.options.type ? n.getPixelForTick(t + 1) - n.getPixelForTick(t) : n.width / n.ticks.length;
                          var r = e * n.options.categoryPercentage,
                              l = (e - e * n.options.categoryPercentage) / 2,
                              s = r / o;
                          if (n.ticks.length !== a.chart.data.labels.length) {
                              var d = n.ticks.length / a.chart.data.labels.length;
                              s *= d
                          }
                          var u = s * n.options.barPercentage,
                              c = s - s * n.options.barPercentage;
                          return {
                              datasetCount: o,
                              tickHeight: e,
                              categoryHeight: r,
                              categorySpacing: l,
                              fullBarHeight: s,
                              barHeight: u,
                              barSpacing: c
                          }
                      },
                      calculateBarHeight: function(t) {
                          var e = this,
                              a = e.getScaleForId(e.getMeta().yAxisID);
                          if (a.options.barThickness) return a.options.barThickness;
                          var i = e.getRuler(t);
                          return a.options.stacked ? i.categoryHeight : i.barHeight
                      },
                      calculateBarX: function(t, e) {
                          var a = this,
                              i = a.getMeta(),
                              n = a.getScaleForId(i.xAxisID),
                              o = Number(a.getDataset().data[t]);
                          if (n.options.stacked) {
                              for (var r = 0, l = 0, s = 0; e > s; s++) {
                                  var d = a.chart.data.datasets[s],
                                      u = a.chart.getDatasetMeta(s);
                                  if (u.bar && u.xAxisID === n.id && a.chart.isDatasetVisible(s)) {
                                      var c = Number(d.data[t]);
                                      0 > c ? l += c || 0 : r += c || 0
                                  }
                              }
                              return 0 > o ? n.getPixelForValue(l + o) : n.getPixelForValue(r + o)
                          }
                          return n.getPixelForValue(o)
                      },
                      calculateBarY: function(t, e) {
                          var a = this,
                              i = a.getMeta(),
                              n = a.getScaleForId(i.yAxisID),
                              o = a.getBarIndex(e),
                              r = a.getRuler(t),
                              l = n.getPixelForValue(null, t, e, a.chart.isCombo);
                          return l -= a.chart.isCombo ? r.tickHeight / 2 : 0, n.options.stacked ? l + r.categoryHeight / 2 + r.categorySpacing : l + r.barHeight / 2 + r.categorySpacing + r.barHeight * o + r.barSpacing / 2 + r.barSpacing * o
                      }
                  })
              }
          }, {}],
          16: [function(t, e, a) {
              "use strict";
              e.exports = function(t) {
                  var e = t.helpers;
                  t.defaults.bubble = {
                      hover: {
                          mode: "single"
                      },
                      scales: {
                          xAxes: [{
                              type: "linear",
                              position: "bottom",
                              id: "x-axis-0"
                          }],
                          yAxes: [{
                              type: "linear",
                              position: "left",
                              id: "y-axis-0"
                          }]
                      },
                      tooltips: {
                          callbacks: {
                              title: function() {
                                  return ""
                              },
                              label: function(t, e) {
                                  var a = e.datasets[t.datasetIndex].label || "",
                                      i = e.datasets[t.datasetIndex].data[t.index];
                                  return a + ": (" + i.x + ", " + i.y + ", " + i.r + ")"
                              }
                          }
                      }
                  }, t.controllers.bubble = t.DatasetController.extend({
                      dataElementType: t.elements.Point,
                      update: function(t) {
                          var a = this,
                              i = a.getMeta(),
                              n = i.data;
                          e.each(n, function(e, i) {
                              a.updateElement(e, i, t)
                          })
                      },
                      updateElement: function(a, i, n) {
                          var o = this,
                              r = o.getMeta(),
                              l = o.getScaleForId(r.xAxisID),
                              s = o.getScaleForId(r.yAxisID),
                              d = a.custom || {},
                              u = o.getDataset(),
                              c = u.data[i],
                              h = o.chart.options.elements.point,
                              f = o.index;
                          e.extend(a, {
                              _xScale: l,
                              _yScale: s,
                              _datasetIndex: f,
                              _index: i,
                              _model: {
                                  x: n ? l.getPixelForDecimal(.5) : l.getPixelForValue("object" == typeof c ? c : NaN, i, f, o.chart.isCombo),
                                  y: n ? s.getBasePixel() : s.getPixelForValue(c, i, f),
                                  radius: n ? 0 : d.radius ? d.radius : o.getRadius(c),
                                  hitRadius: d.hitRadius ? d.hitRadius : e.getValueAtIndexOrDefault(u.hitRadius, i, h.hitRadius)
                              }
                          }), t.DatasetController.prototype.removeHoverStyle.call(o, a, h);
                          var g = a._model;
                          g.skip = d.skip ? d.skip : isNaN(g.x) || isNaN(g.y), a.pivot()
                      },
                      getRadius: function(t) {
                          return t.r || this.chart.options.elements.point.radius
                      },
                      setHoverStyle: function(a) {
                          var i = this;
                          t.DatasetController.prototype.setHoverStyle.call(i, a);
                          var n = i.chart.data.datasets[a._datasetIndex],
                              o = a._index,
                              r = a.custom || {},
                              l = a._model;
                          l.radius = r.hoverRadius ? r.hoverRadius : e.getValueAtIndexOrDefault(n.hoverRadius, o, i.chart.options.elements.point.hoverRadius) + i.getRadius(n.data[o])
                      },
                      removeHoverStyle: function(e) {
                          var a = this;
                          t.DatasetController.prototype.removeHoverStyle.call(a, e, a.chart.options.elements.point);
                          var i = a.chart.data.datasets[e._datasetIndex].data[e._index],
                              n = e.custom || {},
                              o = e._model;
                          o.radius = n.radius ? n.radius : a.getRadius(i)
                      }
                  })
              }
          }, {}],
          17: [function(t, e, a) {
              "use strict";
              e.exports = function(t) {
                  var e = t.helpers,
                      a = t.defaults;
                  a.doughnut = {
                      animation: {
                          animateRotate: !0,
                          animateScale: !1
                      },
                      aspectRatio: 1,
                      hover: {
                          mode: "single"
                      },
                      legendCallback: function(t) {
                          var e = [];
                          e.push('<ul class="' + t.id + '-legend">');
                          var a = t.data,
                              i = a.datasets,
                              n = a.labels;
                          if (i.length)
                              for (var o = 0; o < i[0].data.length; ++o) e.push('<li><span style="background-color:' + i[0].backgroundColor[o] + '"></span>'), n[o] && e.push(n[o]), e.push("</li>");
                          return e.push("</ul>"), e.join("")
                      },
                      legend: {
                          labels: {
                              generateLabels: function(t) {
                                  var a = t.data;
                                  return a.labels.length && a.datasets.length ? a.labels.map(function(i, n) {
                                      var o = t.getDatasetMeta(0),
                                          r = a.datasets[0],
                                          l = o.data[n],
                                          s = l && l.custom || {},
                                          d = e.getValueAtIndexOrDefault,
                                          u = t.options.elements.arc,
                                          c = s.backgroundColor ? s.backgroundColor : d(r.backgroundColor, n, u.backgroundColor),
                                          h = s.borderColor ? s.borderColor : d(r.borderColor, n, u.borderColor),
                                          f = s.borderWidth ? s.borderWidth : d(r.borderWidth, n, u.borderWidth);
                                      return {
                                          text: i,
                                          fillStyle: c,
                                          strokeStyle: h,
                                          lineWidth: f,
                                          hidden: isNaN(r.data[n]) || o.data[n].hidden,
                                          index: n
                                      }
                                  }) : []
                              }
                          },
                          onClick: function(t, e) {
                              var a, i, n, o = e.index,
                                  r = this.chart;
                              for (a = 0, i = (r.data.datasets || []).length; i > a; ++a) n = r.getDatasetMeta(a), n.data[o].hidden = !n.data[o].hidden;
                              r.update()
                          }
                      },
                      cutoutPercentage: 50,
                      rotation: Math.PI * -.5,
                      circumference: 2 * Math.PI,
                      tooltips: {
                          callbacks: {
                              title: function() {
                                  return ""
                              },
                              label: function(t, e) {
                                  return e.labels[t.index] + ": " + e.datasets[t.datasetIndex].data[t.index]
                              }
                          }
                      }
                  }, a.pie = e.clone(a.doughnut), e.extend(a.pie, {
                      cutoutPercentage: 0
                  }), t.controllers.doughnut = t.controllers.pie = t.DatasetController.extend({
                      dataElementType: t.elements.Arc,
                      linkScales: e.noop,
                      getRingIndex: function(t) {
                          for (var e = 0, a = 0; t > a; ++a) this.chart.isDatasetVisible(a) && ++e;
                          return e
                      },
                      update: function(t) {
                          var a = this,
                              i = a.chart,
                              n = i.chartArea,
                              o = i.options,
                              r = o.elements.arc,
                              l = n.right - n.left - r.borderWidth,
                              s = n.bottom - n.top - r.borderWidth,
                              d = Math.min(l, s),
                              u = {
                                  x: 0,
                                  y: 0
                              },
                              c = a.getMeta(),
                              h = o.cutoutPercentage,
                              f = o.circumference;
                          if (f < 2 * Math.PI) {
                              var g = o.rotation % (2 * Math.PI);
                              g += 2 * Math.PI * (g >= Math.PI ? -1 : g < -Math.PI ? 1 : 0);
                              var p = g + f,
                                  m = {
                                      x: Math.cos(g),
                                      y: Math.sin(g)
                                  },
                                  b = {
                                      x: Math.cos(p),
                                      y: Math.sin(p)
                                  },
                                  v = 0 >= g && p >= 0 || g <= 2 * Math.PI && 2 * Math.PI <= p,
                                  x = g <= .5 * Math.PI && .5 * Math.PI <= p || g <= 2.5 * Math.PI && 2.5 * Math.PI <= p,
                                  y = g <= -Math.PI && -Math.PI <= p || g <= Math.PI && Math.PI <= p,
                                  k = g <= .5 * -Math.PI && .5 * -Math.PI <= p || g <= 1.5 * Math.PI && 1.5 * Math.PI <= p,
                                  S = h / 100,
                                  w = {
                                      x: y ? -1 : Math.min(m.x * (m.x < 0 ? 1 : S), b.x * (b.x < 0 ? 1 : S)),
                                      y: k ? -1 : Math.min(m.y * (m.y < 0 ? 1 : S), b.y * (b.y < 0 ? 1 : S))
                                  },
                                  C = {
                                      x: v ? 1 : Math.max(m.x * (m.x > 0 ? 1 : S), b.x * (b.x > 0 ? 1 : S)),
                                      y: x ? 1 : Math.max(m.y * (m.y > 0 ? 1 : S), b.y * (b.y > 0 ? 1 : S))
                                  },
                                  M = {
                                      width: .5 * (C.x - w.x),
                                      height: .5 * (C.y - w.y)
                                  };
                              d = Math.min(l / M.width, s / M.height), u = {
                                  x: (C.x + w.x) * -.5,
                                  y: (C.y + w.y) * -.5
                              }
                          }
                          i.borderWidth = a.getMaxBorderWidth(c.data), i.outerRadius = Math.max((d - i.borderWidth) / 2, 0), i.innerRadius = Math.max(h ? i.outerRadius / 100 * h : 1, 0), i.radiusLength = (i.outerRadius - i.innerRadius) / i.getVisibleDatasetCount(), i.offsetX = u.x * i.outerRadius, i.offsetY = u.y * i.outerRadius, c.total = a.calculateTotal(), a.outerRadius = i.outerRadius - i.radiusLength * a.getRingIndex(a.index), a.innerRadius = a.outerRadius - i.radiusLength, e.each(c.data, function(e, i) {
                              a.updateElement(e, i, t)
                          })
                      },
                      updateElement: function(t, a, i) {
                          var n = this,
                              o = n.chart,
                              r = o.chartArea,
                              l = o.options,
                              s = l.animation,
                              d = (r.left + r.right) / 2,
                              u = (r.top + r.bottom) / 2,
                              c = l.rotation,
                              h = l.rotation,
                              f = n.getDataset(),
                              g = i && s.animateRotate ? 0 : t.hidden ? 0 : n.calculateCircumference(f.data[a]) * (l.circumference / (2 * Math.PI)),
                              p = i && s.animateScale ? 0 : n.innerRadius,
                              m = i && s.animateScale ? 0 : n.outerRadius,
                              b = e.getValueAtIndexOrDefault;
                          e.extend(t, {
                              _datasetIndex: n.index,
                              _index: a,
                              _model: {
                                  x: d + o.offsetX,
                                  y: u + o.offsetY,
                                  startAngle: c,
                                  endAngle: h,
                                  circumference: g,
                                  outerRadius: m,
                                  innerRadius: p,
                                  label: b(f.label, a, o.data.labels[a])
                              }
                          });
                          var v = t._model;
                          this.removeHoverStyle(t), i && s.animateRotate || (0 === a ? v.startAngle = l.rotation : v.startAngle = n.getMeta().data[a - 1]._model.endAngle, v.endAngle = v.startAngle + v.circumference), t.pivot()
                      },
                      removeHoverStyle: function(e) {
                          t.DatasetController.prototype.removeHoverStyle.call(this, e, this.chart.options.elements.arc)
                      },
                      calculateTotal: function() {
                          var t, a = this.getDataset(),
                              i = this.getMeta(),
                              n = 0;
                          return e.each(i.data, function(e, i) {
                              t = a.data[i], isNaN(t) || e.hidden || (n += Math.abs(t))
                          }), n
                      },
                      calculateCircumference: function(t) {
                          var e = this.getMeta().total;
                          return e > 0 && !isNaN(t) ? 2 * Math.PI * (t / e) : 0
                      },
                      getMaxBorderWidth: function(t) {
                          for (var e, a, i = 0, n = this.index, o = t.length, r = 0; o > r; r++) e = t[r]._model ? t[r]._model.borderWidth : 0, a = t[r]._chart ? t[r]._chart.config.data.datasets[n].hoverBorderWidth : 0, i = e > i ? e : i, i = a > i ? a : i;
                          return i
                      }
                  })
              }
          }, {}],
          18: [function(t, e, a) {
              "use strict";
              e.exports = function(t) {
                  function e(t, e) {
                      return a.getValueOrDefault(t.showLine, e.showLines)
                  }
                  var a = t.helpers;
                  t.defaults.line = {
                      showLines: !0,
                      spanGaps: !1,
                      hover: {
                          mode: "label"
                      },
                      scales: {
                          xAxes: [{
                              type: "category",
                              id: "x-axis-0"
                          }],
                          yAxes: [{
                              type: "linear",
                              id: "y-axis-0"
                          }]
                      }
                  }, t.controllers.line = t.DatasetController.extend({
                      datasetElementType: t.elements.Line,
                      dataElementType: t.elements.Point,
                      addElementAndReset: function(a) {
                          var i = this,
                              n = i.chart.options,
                              o = i.getMeta();
                          t.DatasetController.prototype.addElementAndReset.call(i, a), e(i.getDataset(), n) && 0 !== o.dataset._model.tension && i.updateBezierControlPoints()
                      },
                      update: function(t) {
                          var i, n, o, r = this,
                              l = r.getMeta(),
                              s = l.dataset,
                              d = l.data || [],
                              u = r.chart.options,
                              c = u.elements.line,
                              h = r.getScaleForId(l.yAxisID),
                              f = r.getDataset(),
                              g = e(f, u);
                          for (g && (o = s.custom || {}, void 0 !== f.tension && void 0 === f.lineTension && (f.lineTension = f.tension), s._scale = h, s._datasetIndex = r.index, s._children = d, s._model = {
                                  spanGaps: f.spanGaps ? f.spanGaps : u.spanGaps,
                                  tension: o.tension ? o.tension : a.getValueOrDefault(f.lineTension, c.tension),
                                  backgroundColor: o.backgroundColor ? o.backgroundColor : f.backgroundColor || c.backgroundColor,
                                  borderWidth: o.borderWidth ? o.borderWidth : f.borderWidth || c.borderWidth,
                                  borderColor: o.borderColor ? o.borderColor : f.borderColor || c.borderColor,
                                  borderCapStyle: o.borderCapStyle ? o.borderCapStyle : f.borderCapStyle || c.borderCapStyle,
                                  borderDash: o.borderDash ? o.borderDash : f.borderDash || c.borderDash,
                                  borderDashOffset: o.borderDashOffset ? o.borderDashOffset : f.borderDashOffset || c.borderDashOffset,
                                  borderJoinStyle: o.borderJoinStyle ? o.borderJoinStyle : f.borderJoinStyle || c.borderJoinStyle,
                                  fill: o.fill ? o.fill : void 0 !== f.fill ? f.fill : c.fill,
                                  steppedLine: o.steppedLine ? o.steppedLine : a.getValueOrDefault(f.steppedLine, c.stepped),
                                  cubicInterpolationMode: o.cubicInterpolationMode ? o.cubicInterpolationMode : a.getValueOrDefault(f.cubicInterpolationMode, c.cubicInterpolationMode),
                                  scaleTop: h.top,
                                  scaleBottom: h.bottom,
                                  scaleZero: h.getBasePixel()
                              }, s.pivot()), i = 0, n = d.length; n > i; ++i) r.updateElement(d[i], i, t);
                          for (g && 0 !== s._model.tension && r.updateBezierControlPoints(), i = 0, n = d.length; n > i; ++i) d[i].pivot()
                      },
                      getPointBackgroundColor: function(t, e) {
                          var i = this.chart.options.elements.point.backgroundColor,
                              n = this.getDataset(),
                              o = t.custom || {};
                          return o.backgroundColor ? i = o.backgroundColor : n.pointBackgroundColor ? i = a.getValueAtIndexOrDefault(n.pointBackgroundColor, e, i) : n.backgroundColor && (i = n.backgroundColor), i
                      },
                      getPointBorderColor: function(t, e) {
                          var i = this.chart.options.elements.point.borderColor,
                              n = this.getDataset(),
                              o = t.custom || {};
                          return o.borderColor ? i = o.borderColor : n.pointBorderColor ? i = a.getValueAtIndexOrDefault(n.pointBorderColor, e, i) : n.borderColor && (i = n.borderColor), i
                      },
                      getPointBorderWidth: function(t, e) {
                          var i = this.chart.options.elements.point.borderWidth,
                              n = this.getDataset(),
                              o = t.custom || {};
                          return o.borderWidth ? i = o.borderWidth : n.pointBorderWidth ? i = a.getValueAtIndexOrDefault(n.pointBorderWidth, e, i) : n.borderWidth && (i = n.borderWidth), i
                      },
                      updateElement: function(t, e, i) {
                          var n, o, r = this,
                              l = r.getMeta(),
                              s = t.custom || {},
                              d = r.getDataset(),
                              u = r.index,
                              c = d.data[e],
                              h = r.getScaleForId(l.yAxisID),
                              f = r.getScaleForId(l.xAxisID),
                              g = r.chart.options.elements.point,
                              p = r.chart.data.labels || [],
                              m = 1 === p.length || 1 === d.data.length || r.chart.isCombo;
                          void 0 !== d.radius && void 0 === d.pointRadius && (d.pointRadius = d.radius), void 0 !== d.hitRadius && void 0 === d.pointHitRadius && (d.pointHitRadius = d.hitRadius), n = f.getPixelForValue("object" == typeof c ? c : NaN, e, u, m), o = i ? h.getBasePixel() : r.calculatePointY(c, e, u), t._xScale = f, t._yScale = h, t._datasetIndex = u, t._index = e, t._model = {
                              x: n,
                              y: o,
                              skip: s.skip || isNaN(n) || isNaN(o),
                              radius: s.radius || a.getValueAtIndexOrDefault(d.pointRadius, e, g.radius),
                              pointStyle: s.pointStyle || a.getValueAtIndexOrDefault(d.pointStyle, e, g.pointStyle),
                              backgroundColor: r.getPointBackgroundColor(t, e),
                              borderColor: r.getPointBorderColor(t, e),
                              borderWidth: r.getPointBorderWidth(t, e),
                              tension: l.dataset._model ? l.dataset._model.tension : 0,
                              steppedLine: l.dataset._model ? l.dataset._model.steppedLine : !1,
                              hitRadius: s.hitRadius || a.getValueAtIndexOrDefault(d.pointHitRadius, e, g.hitRadius)
                          }
                      },
                      calculatePointY: function(t, e, a) {
                          var i, n, o, r = this,
                              l = r.chart,
                              s = r.getMeta(),
                              d = r.getScaleForId(s.yAxisID),
                              u = 0,
                              c = 0;
                          if (d.options.stacked) {
                              for (i = 0; a > i; i++)
                                  if (n = l.data.datasets[i], o = l.getDatasetMeta(i), "line" === o.type && o.yAxisID === d.id && l.isDatasetVisible(i)) {
                                      var h = Number(d.getRightValue(n.data[e]));
                                      0 > h ? c += h || 0 : u += h || 0
                                  }
                              var f = Number(d.getRightValue(t));
                              return 0 > f ? d.getPixelForValue(c + f) : d.getPixelForValue(u + f)
                          }
                          return d.getPixelForValue(t)
                      },
                      updateBezierControlPoints: function() {
                          function t(t, e, a) {
                              return Math.max(Math.min(t, a), e)
                          }
                          var e = this,
                              i = e.getMeta(),
                              n = e.chart.chartArea,
                              o = i.data || [];
                          i.dataset._model.spanGaps && (o = o.filter(function(t) {
                              return !t._model.skip
                          }));
                          var r, l, s, d, u;
                          if ("monotone" == i.dataset._model.cubicInterpolationMode) a.splineCurveMonotone(o);
                          else
                              for (r = 0, l = o.length; l > r; ++r) s = o[r], d = s._model, u = a.splineCurve(a.previousItem(o, r)._model, d, a.nextItem(o, r)._model, i.dataset._model.tension), d.controlPointPreviousX = u.previous.x, d.controlPointPreviousY = u.previous.y, d.controlPointNextX = u.next.x, d.controlPointNextY = u.next.y;
                          if (e.chart.options.elements.line.capBezierPoints)
                              for (r = 0, l = o.length; l > r; ++r) d = o[r]._model, d.controlPointPreviousX = t(d.controlPointPreviousX, n.left, n.right), d.controlPointPreviousY = t(d.controlPointPreviousY, n.top, n.bottom), d.controlPointNextX = t(d.controlPointNextX, n.left, n.right), d.controlPointNextY = t(d.controlPointNextY, n.top, n.bottom)
                      },
                      draw: function(t) {
                          var a, i, n = this,
                              o = n.getMeta(),
                              r = o.data || [],
                              l = t || 1;
                          for (a = 0, i = r.length; i > a; ++a) r[a].transition(l);
                          for (e(n.getDataset(), n.chart.options) && o.dataset.transition(l).draw(), a = 0, i = r.length; i > a; ++a) r[a].draw()
                      },
                      setHoverStyle: function(t) {
                          var e = this.chart.data.datasets[t._datasetIndex],
                              i = t._index,
                              n = t.custom || {},
                              o = t._model;
                          o.radius = n.hoverRadius || a.getValueAtIndexOrDefault(e.pointHoverRadius, i, this.chart.options.elements.point.hoverRadius), o.backgroundColor = n.hoverBackgroundColor || a.getValueAtIndexOrDefault(e.pointHoverBackgroundColor, i, a.getHoverColor(o.backgroundColor)), o.borderColor = n.hoverBorderColor || a.getValueAtIndexOrDefault(e.pointHoverBorderColor, i, a.getHoverColor(o.borderColor)), o.borderWidth = n.hoverBorderWidth || a.getValueAtIndexOrDefault(e.pointHoverBorderWidth, i, o.borderWidth)
                      },
                      removeHoverStyle: function(t) {
                          var e = this,
                              i = e.chart.data.datasets[t._datasetIndex],
                              n = t._index,
                              o = t.custom || {},
                              r = t._model;
                          void 0 !== i.radius && void 0 === i.pointRadius && (i.pointRadius = i.radius), r.radius = o.radius || a.getValueAtIndexOrDefault(i.pointRadius, n, e.chart.options.elements.point.radius), r.backgroundColor = e.getPointBackgroundColor(t, n), r.borderColor = e.getPointBorderColor(t, n), r.borderWidth = e.getPointBorderWidth(t, n)
                      }
                  })
              }
          }, {}],
          19: [function(t, e, a) {
              "use strict";
              e.exports = function(t) {
                  var e = t.helpers;
                  t.defaults.polarArea = {
                      scale: {
                          type: "radialLinear",
                          lineArc: !0,
                          ticks: {
                              beginAtZero: !0
                          }
                      },
                      animation: {
                          animateRotate: !0,
                          animateScale: !0
                      },
                      startAngle: -.5 * Math.PI,
                      aspectRatio: 1,
                      legendCallback: function(t) {
                          var e = [];
                          e.push('<ul class="' + t.id + '-legend">');
                          var a = t.data,
                              i = a.datasets,
                              n = a.labels;
                          if (i.length)
                              for (var o = 0; o < i[0].data.length; ++o) e.push('<li><span style="background-color:' + i[0].backgroundColor[o] + '">'), n[o] && e.push(n[o]), e.push("</span></li>");
                          return e.push("</ul>"), e.join("")
                      },
                      legend: {
                          labels: {
                              generateLabels: function(t) {
                                  var a = t.data;
                                  return a.labels.length && a.datasets.length ? a.labels.map(function(i, n) {
                                      var o = t.getDatasetMeta(0),
                                          r = a.datasets[0],
                                          l = o.data[n],
                                          s = l.custom || {},
                                          d = e.getValueAtIndexOrDefault,
                                          u = t.options.elements.arc,
                                          c = s.backgroundColor ? s.backgroundColor : d(r.backgroundColor, n, u.backgroundColor),
                                          h = s.borderColor ? s.borderColor : d(r.borderColor, n, u.borderColor),
                                          f = s.borderWidth ? s.borderWidth : d(r.borderWidth, n, u.borderWidth);
                                      return {
                                          text: i,
                                          fillStyle: c,
                                          strokeStyle: h,
                                          lineWidth: f,
                                          hidden: isNaN(r.data[n]) || o.data[n].hidden,
                                          index: n
                                      }
                                  }) : []
                              }
                          },
                          onClick: function(t, e) {
                              var a, i, n, o = e.index,
                                  r = this.chart;
                              for (a = 0, i = (r.data.datasets || []).length; i > a; ++a) n = r.getDatasetMeta(a), n.data[o].hidden = !n.data[o].hidden;
                              r.update()
                          }
                      },
                      tooltips: {
                          callbacks: {
                              title: function() {
                                  return ""
                              },
                              label: function(t, e) {
                                  return e.labels[t.index] + ": " + t.yLabel
                              }
                          }
                      }
                  }, t.controllers.polarArea = t.DatasetController.extend({
                      dataElementType: t.elements.Arc,
                      linkScales: e.noop,
                      update: function(t) {
                          var a = this,
                              i = a.chart,
                              n = i.chartArea,
                              o = a.getMeta(),
                              r = i.options,
                              l = r.elements.arc,
                              s = Math.min(n.right - n.left, n.bottom - n.top);
                          i.outerRadius = Math.max((s - l.borderWidth / 2) / 2, 0), i.innerRadius = Math.max(r.cutoutPercentage ? i.outerRadius / 100 * r.cutoutPercentage : 1, 0), i.radiusLength = (i.outerRadius - i.innerRadius) / i.getVisibleDatasetCount(), a.outerRadius = i.outerRadius - i.radiusLength * a.index, a.innerRadius = a.outerRadius - i.radiusLength, o.count = a.countVisibleElements(), e.each(o.data, function(e, i) {
                              a.updateElement(e, i, t)
                          })
                      },
                      updateElement: function(t, a, i) {
                          for (var n = this, o = n.chart, r = n.getDataset(), l = o.options, s = l.animation, d = o.scale, u = e.getValueAtIndexOrDefault, c = o.data.labels, h = n.calculateCircumference(r.data[a]), f = d.xCenter, g = d.yCenter, p = 0, m = n.getMeta(), b = 0; a > b; ++b) isNaN(r.data[b]) || m.data[b].hidden || ++p;
                          var v = l.startAngle,
                              x = t.hidden ? 0 : d.getDistanceFromCenterForValue(r.data[a]),
                              y = v + h * p,
                              k = y + (t.hidden ? 0 : h),
                              S = s.animateScale ? 0 : d.getDistanceFromCenterForValue(r.data[a]);
                          e.extend(t, {
                              _datasetIndex: n.index,
                              _index: a,
                              _scale: d,
                              _model: {
                                  x: f,
                                  y: g,
                                  innerRadius: 0,
                                  outerRadius: i ? S : x,
                                  startAngle: i && s.animateRotate ? v : y,
                                  endAngle: i && s.animateRotate ? v : k,
                                  label: u(c, a, c[a])
                              }
                          }), n.removeHoverStyle(t), t.pivot()
                      },
                      removeHoverStyle: function(e) {
                          t.DatasetController.prototype.removeHoverStyle.call(this, e, this.chart.options.elements.arc)
                      },
                      countVisibleElements: function() {
                          var t = this.getDataset(),
                              a = this.getMeta(),
                              i = 0;
                          return e.each(a.data, function(e, a) {
                              isNaN(t.data[a]) || e.hidden || i++
                          }), i
                      },
                      calculateCircumference: function(t) {
                          var e = this.getMeta().count;
                          return e > 0 && !isNaN(t) ? 2 * Math.PI / e : 0
                      }
                  })
              }
          }, {}],
          20: [function(t, e, a) {
              "use strict";
              e.exports = function(t) {
                  var e = t.helpers;
                  t.defaults.radar = {
                      scale: {
                          type: "radialLinear"
                      },
                      elements: {
                          line: {
                              tension: 0
                          }
                      }
                  }, t.controllers.radar = t.DatasetController.extend({
                      datasetElementType: t.elements.Line,
                      dataElementType: t.elements.Point,
                      linkScales: e.noop,
                      addElementAndReset: function(e) {
                          t.DatasetController.prototype.addElementAndReset.call(this, e), this.updateBezierControlPoints()
                      },
                      update: function(t) {
                          var a = this,
                              i = a.getMeta(),
                              n = i.dataset,
                              o = i.data,
                              r = n.custom || {},
                              l = a.getDataset(),
                              s = a.chart.options.elements.line,
                              d = a.chart.scale;
                          void 0 !== l.tension && void 0 === l.lineTension && (l.lineTension = l.tension), e.extend(i.dataset, {
                              _datasetIndex: a.index,
                              _children: o,
                              _loop: !0,
                              _model: {
                                  tension: r.tension ? r.tension : e.getValueOrDefault(l.lineTension, s.tension),
                                  backgroundColor: r.backgroundColor ? r.backgroundColor : l.backgroundColor || s.backgroundColor,
                                  borderWidth: r.borderWidth ? r.borderWidth : l.borderWidth || s.borderWidth,
                                  borderColor: r.borderColor ? r.borderColor : l.borderColor || s.borderColor,
                                  fill: r.fill ? r.fill : void 0 !== l.fill ? l.fill : s.fill,
                                  borderCapStyle: r.borderCapStyle ? r.borderCapStyle : l.borderCapStyle || s.borderCapStyle,
                                  borderDash: r.borderDash ? r.borderDash : l.borderDash || s.borderDash,
                                  borderDashOffset: r.borderDashOffset ? r.borderDashOffset : l.borderDashOffset || s.borderDashOffset,
                                  borderJoinStyle: r.borderJoinStyle ? r.borderJoinStyle : l.borderJoinStyle || s.borderJoinStyle,
                                  scaleTop: d.top,
                                  scaleBottom: d.bottom,
                                  scaleZero: d.getBasePosition()
                              }
                          }), i.dataset.pivot(), e.each(o, function(e, i) {
                              a.updateElement(e, i, t)
                          }, a), a.updateBezierControlPoints()
                      },
                      updateElement: function(t, a, i) {
                          var n = this,
                              o = t.custom || {},
                              r = n.getDataset(),
                              l = n.chart.scale,
                              s = n.chart.options.elements.point,
                              d = l.getPointPositionForValue(a, r.data[a]);
                          e.extend(t, {
                              _datasetIndex: n.index,
                              _index: a,
                              _scale: l,
                              _model: {
                                  x: i ? l.xCenter : d.x,
                                  y: i ? l.yCenter : d.y,
                                  tension: o.tension ? o.tension : e.getValueOrDefault(r.tension, n.chart.options.elements.line.tension),
                                  radius: o.radius ? o.radius : e.getValueAtIndexOrDefault(r.pointRadius, a, s.radius),
                                  backgroundColor: o.backgroundColor ? o.backgroundColor : e.getValueAtIndexOrDefault(r.pointBackgroundColor, a, s.backgroundColor),
                                  borderColor: o.borderColor ? o.borderColor : e.getValueAtIndexOrDefault(r.pointBorderColor, a, s.borderColor),
                                  borderWidth: o.borderWidth ? o.borderWidth : e.getValueAtIndexOrDefault(r.pointBorderWidth, a, s.borderWidth),
                                  pointStyle: o.pointStyle ? o.pointStyle : e.getValueAtIndexOrDefault(r.pointStyle, a, s.pointStyle),
                                  hitRadius: o.hitRadius ? o.hitRadius : e.getValueAtIndexOrDefault(r.hitRadius, a, s.hitRadius)
                              }
                          }), t._model.skip = o.skip ? o.skip : isNaN(t._model.x) || isNaN(t._model.y)
                      },
                      updateBezierControlPoints: function() {
                          var t = this.chart.chartArea,
                              a = this.getMeta();
                          e.each(a.data, function(i, n) {
                              var o = i._model,
                                  r = e.splineCurve(e.previousItem(a.data, n, !0)._model, o, e.nextItem(a.data, n, !0)._model, o.tension);
                              o.controlPointPreviousX = Math.max(Math.min(r.previous.x, t.right), t.left), o.controlPointPreviousY = Math.max(Math.min(r.previous.y, t.bottom), t.top), o.controlPointNextX = Math.max(Math.min(r.next.x, t.right), t.left), o.controlPointNextY = Math.max(Math.min(r.next.y, t.bottom), t.top), i.pivot()
                          })
                      },
                      draw: function(t) {
                          var a = this.getMeta(),
                              i = t || 1;
                          e.each(a.data, function(t) {
                              t.transition(i)
                          }), a.dataset.transition(i).draw(), e.each(a.data, function(t) {
                              t.draw()
                          })
                      },
                      setHoverStyle: function(t) {
                          var a = this.chart.data.datasets[t._datasetIndex],
                              i = t.custom || {},
                              n = t._index,
                              o = t._model;
                          o.radius = i.hoverRadius ? i.hoverRadius : e.getValueAtIndexOrDefault(a.pointHoverRadius, n, this.chart.options.elements.point.hoverRadius), o.backgroundColor = i.hoverBackgroundColor ? i.hoverBackgroundColor : e.getValueAtIndexOrDefault(a.pointHoverBackgroundColor, n, e.getHoverColor(o.backgroundColor)), o.borderColor = i.hoverBorderColor ? i.hoverBorderColor : e.getValueAtIndexOrDefault(a.pointHoverBorderColor, n, e.getHoverColor(o.borderColor)), o.borderWidth = i.hoverBorderWidth ? i.hoverBorderWidth : e.getValueAtIndexOrDefault(a.pointHoverBorderWidth, n, o.borderWidth)
                      },
                      removeHoverStyle: function(t) {
                          var a = this.chart.data.datasets[t._datasetIndex],
                              i = t.custom || {},
                              n = t._index,
                              o = t._model,
                              r = this.chart.options.elements.point;
                          o.radius = i.radius ? i.radius : e.getValueAtIndexOrDefault(a.radius, n, r.radius), o.backgroundColor = i.backgroundColor ? i.backgroundColor : e.getValueAtIndexOrDefault(a.pointBackgroundColor, n, r.backgroundColor), o.borderColor = i.borderColor ? i.borderColor : e.getValueAtIndexOrDefault(a.pointBorderColor, n, r.borderColor), o.borderWidth = i.borderWidth ? i.borderWidth : e.getValueAtIndexOrDefault(a.pointBorderWidth, n, r.borderWidth)
                      }
                  })
              }
          }, {}],
          21: [function(t, e, a) {
              "use strict";
              e.exports = function(t) {
                  var e = t.helpers;
                  t.defaults.global.animation = {
                      duration: 1e3,
                      easing: "easeOutQuart",
                      onProgress: e.noop,
                      onComplete: e.noop
                  }, t.Animation = t.Element.extend({
                      currentStep: null,
                      numSteps: 60,
                      easing: "",
                      render: null,
                      onAnimationProgress: null,
                      onAnimationComplete: null
                  }), t.animationService = {
                      frameDuration: 17,
                      animations: [],
                      dropFrames: 0,
                      request: null,
                      addAnimation: function(t, e, a, i) {
                          var n = this;
                          i || (t.animating = !0);
                          for (var o = 0; o < n.animations.length; ++o)
                              if (n.animations[o].chartInstance === t) return void(n.animations[o].animationObject = e);
                          n.animations.push({
                              chartInstance: t,
                              animationObject: e
                          }), 1 === n.animations.length && n.requestAnimationFrame()
                      },
                      cancelAnimation: function(t) {
                          var a = e.findIndex(this.animations, function(e) {
                              return e.chartInstance === t
                          }); - 1 !== a && (this.animations.splice(a, 1), t.animating = !1)
                      },
                      requestAnimationFrame: function() {
                          var t = this;
                          null === t.request && (t.request = e.requestAnimFrame.call(window, function() {
                              t.request = null, t.startDigest()
                          }))
                      },
                      startDigest: function() {
                          var t = this,
                              e = Date.now(),
                              a = 0;
                          t.dropFrames > 1 && (a = Math.floor(t.dropFrames), t.dropFrames = t.dropFrames % 1);
                          for (var i = 0; i < t.animations.length;) null === t.animations[i].animationObject.currentStep && (t.animations[i].animationObject.currentStep = 0), t.animations[i].animationObject.currentStep += 1 + a, t.animations[i].animationObject.currentStep > t.animations[i].animationObject.numSteps && (t.animations[i].animationObject.currentStep = t.animations[i].animationObject.numSteps), t.animations[i].animationObject.render(t.animations[i].chartInstance, t.animations[i].animationObject), t.animations[i].animationObject.onAnimationProgress && t.animations[i].animationObject.onAnimationProgress.call && t.animations[i].animationObject.onAnimationProgress.call(t.animations[i].chartInstance, t.animations[i]), t.animations[i].animationObject.currentStep === t.animations[i].animationObject.numSteps ? (t.animations[i].animationObject.onAnimationComplete && t.animations[i].animationObject.onAnimationComplete.call && t.animations[i].animationObject.onAnimationComplete.call(t.animations[i].chartInstance, t.animations[i]), t.animations[i].chartInstance.animating = !1, t.animations.splice(i, 1)) : ++i;
                          var n = Date.now(),
                              o = (n - e) / t.frameDuration;
                          t.dropFrames += o, t.animations.length > 0 && t.requestAnimationFrame()
                      }
                  }
              }
          }, {}],
          22: [function(t, e, a) {
              "use strict";
              e.exports = function(t) {
                  var e = t.canvasHelpers = {};
                  e.drawPoint = function(t, e, a, i, n) {
                      var o, r, l, s, d, u;
                      if ("object" == typeof e && (o = e.toString(), "[object HTMLImageElement]" === o || "[object HTMLCanvasElement]" === o)) return void t.drawImage(e, i - e.width / 2, n - e.height / 2);
                      if (!(isNaN(a) || 0 >= a)) {
                          switch (e) {
                              default: t.beginPath(),
                              t.arc(i, n, a, 0, 2 * Math.PI),
                              t.closePath(),
                              t.fill();
                              break;
                              case "triangle":
                                      t.beginPath(),
                                  r = 3 * a / Math.sqrt(3),
                                  d = r * Math.sqrt(3) / 2,
                                  t.moveTo(i - r / 2, n + d / 3),
                                  t.lineTo(i + r / 2, n + d / 3),
                                  t.lineTo(i, n - 2 * d / 3),
                                  t.closePath(),
                                  t.fill();
                                  break;
                              case "rect":
                                      u = 1 / Math.SQRT2 * a,
                                  t.beginPath(),
                                  t.fillRect(i - u, n - u, 2 * u, 2 * u),
                                  t.strokeRect(i - u, n - u, 2 * u, 2 * u);
                                  break;
                              case "rectRot":
                                      u = 1 / Math.SQRT2 * a,
                                  t.beginPath(),
                                  t.moveTo(i - u, n),
                                  t.lineTo(i, n + u),
                                  t.lineTo(i + u, n),
                                  t.lineTo(i, n - u),
                                  t.closePath(),
                                  t.fill();
                                  break;
                              case "cross":
                                      t.beginPath(),
                                  t.moveTo(i, n + a),
                                  t.lineTo(i, n - a),
                                  t.moveTo(i - a, n),
                                  t.lineTo(i + a, n),
                                  t.closePath();
                                  break;
                              case "crossRot":
                                      t.beginPath(),
                                  l = Math.cos(Math.PI / 4) * a,
                                  s = Math.sin(Math.PI / 4) * a,
                                  t.moveTo(i - l, n - s),
                                  t.lineTo(i + l, n + s),
                                  t.moveTo(i - l, n + s),
                                  t.lineTo(i + l, n - s),
                                  t.closePath();
                                  break;
                              case "star":
                                      t.beginPath(),
                                  t.moveTo(i, n + a),
                                  t.lineTo(i, n - a),
                                  t.moveTo(i - a, n),
                                  t.lineTo(i + a, n),
                                  l = Math.cos(Math.PI / 4) * a,
                                  s = Math.sin(Math.PI / 4) * a,
                                  t.moveTo(i - l, n - s),
                                  t.lineTo(i + l, n + s),
                                  t.moveTo(i - l, n + s),
                                  t.lineTo(i + l, n - s),
                                  t.closePath();
                                  break;
                              case "line":
                                      t.beginPath(),
                                  t.moveTo(i - a, n),
                                  t.lineTo(i + a, n),
                                  t.closePath();
                                  break;
                              case "dash":
                                      t.beginPath(),
                                  t.moveTo(i, n),
                                  t.lineTo(i + a, n),
                                  t.closePath()
                          }
                          t.stroke()
                      }
                  }
              }
          }, {}],
          23: [function(t, e, a) {
              "use strict";
              e.exports = function(t) {
                  var e = t.helpers;
                  t.types = {}, t.instances = {}, t.controllers = {}, t.Controller = function(a) {
                      return this.chart = a, this.config = a.config, this.options = this.config.options = e.configMerge(t.defaults.global, t.defaults[this.config.type], this.config.options || {}), this.id = e.uid(), Object.defineProperty(this, "data", {
                          get: function() {
                              return this.config.data
                          }
                      }), t.instances[this.id] = this, this.options.responsive && this.resize(!0), this.initialize(), this
                  }, e.extend(t.Controller.prototype, {
                      initialize: function() {
                          var e = this;
                          return t.plugins.notify("beforeInit", [e]), e.bindEvents(), e.ensureScalesHaveIDs(), e.buildOrUpdateControllers(), e.buildScales(), e.updateLayout(), e.resetElements(), e.initToolTip(), e.update(), t.plugins.notify("afterInit", [e]), e
                      },
                      clear: function() {
                          return e.clear(this.chart), this
                      },
                      stop: function() {
                          return t.animationService.cancelAnimation(this), this
                      },
                      resize: function(a) {
                          var i = this,
                              n = i.chart,
                              o = n.canvas,
                              r = e.getMaximumWidth(o),
                              l = n.aspectRatio,
                              s = i.options.maintainAspectRatio && isNaN(l) === !1 && isFinite(l) && 0 !== l ? r / l : e.getMaximumHeight(o),
                              d = n.width !== r || n.height !== s;
                          if (!d) return i;
                          o.width = n.width = r, o.height = n.height = s, e.retinaScale(n);
                          var u = {
                              width: r,
                              height: s
                          };
                          return t.plugins.notify("resize", [i, u]), i.options.onResize && i.options.onResize(i, u), a || (i.stop(), i.update(i.options.responsiveAnimationDuration)), i
                      },
                      ensureScalesHaveIDs: function() {
                          var t = this.options,
                              a = t.scales || {},
                              i = t.scale;
                          e.each(a.xAxes, function(t, e) {
                              t.id = t.id || "x-axis-" + e
                          }), e.each(a.yAxes, function(t, e) {
                              t.id = t.id || "y-axis-" + e
                          }), i && (i.id = i.id || "scale")
                      },
                      buildScales: function() {
                          var a = this,
                              i = a.options,
                              n = a.scales = {},
                              o = [];
                          i.scales && (o = o.concat((i.scales.xAxes || []).map(function(t) {
                              return {
                                  options: t,
                                  dtype: "category"
                              }
                          }), (i.scales.yAxes || []).map(function(t) {
                              return {
                                  options: t,
                                  dtype: "linear"
                              }
                          }))), i.scale && o.push({
                              options: i.scale,
                              dtype: "radialLinear",
                              isDefault: !0
                          }), e.each(o, function(i) {
                              var o = i.options,
                                  r = e.getValueOrDefault(o.type, i.dtype),
                                  l = t.scaleService.getScaleConstructor(r);
                              if (l) {
                                  var s = new l({
                                      id: o.id,
                                      options: o,
                                      ctx: a.chart.ctx,
                                      chart: a
                                  });
                                  n[s.id] = s, i.isDefault && (a.scale = s)
                              }
                          }), t.scaleService.addScalesToLayout(this)
                      },
                      updateLayout: function() {
                          t.layoutService.update(this, this.chart.width, this.chart.height)
                      },
                      buildOrUpdateControllers: function() {
                          var a = this,
                              i = [],
                              n = [];
                          if (e.each(a.data.datasets, function(e, o) {
                                  var r = a.getDatasetMeta(o);
                                  r.type || (r.type = e.type || a.config.type), i.push(r.type), r.controller ? r.controller.updateIndex(o) : (r.controller = new t.controllers[r.type](a, o), n.push(r.controller))
                              }, a), i.length > 1)
                              for (var o = 1; o < i.length; o++)
                                  if (i[o] !== i[o - 1]) {
                                      a.isCombo = !0;
                                      break
                                  }
                          return n
                      },
                      resetElements: function() {
                          var t = this;
                          e.each(t.data.datasets, function(e, a) {
                              t.getDatasetMeta(a).controller.reset()
                          }, t)
                      },
                      update: function(a, i) {
                          var n = this;
                          t.plugins.notify("beforeUpdate", [n]), n.tooltip._data = n.data;
                          var o = n.buildOrUpdateControllers();
                          e.each(n.data.datasets, function(t, e) {
                              n.getDatasetMeta(e).controller.buildOrUpdateElements()
                          }, n), t.layoutService.update(n, n.chart.width, n.chart.height), t.plugins.notify("afterScaleUpdate", [n]), e.each(o, function(t) {
                              t.reset()
                          }), n.updateDatasets(), t.plugins.notify("afterUpdate", [n]), n.render(a, i)
                      },
                      updateDatasets: function() {
                          var e, a, i = this;
                          if (t.plugins.notify("beforeDatasetsUpdate", [i])) {
                              for (e = 0, a = i.data.datasets.length; a > e; ++e) i.getDatasetMeta(e).controller.update();
                              t.plugins.notify("afterDatasetsUpdate", [i])
                          }
                      },
                      render: function(a, i) {
                          var n = this;
                          t.plugins.notify("beforeRender", [n]);
                          var o = n.options.animation;
                          if (o && ("undefined" != typeof a && 0 !== a || "undefined" == typeof a && 0 !== o.duration)) {
                              var r = new t.Animation;
                              r.numSteps = (a || o.duration) / 16.66, r.easing = o.easing, r.render = function(t, a) {
                                  var i = e.easingEffects[a.easing],
                                      n = a.currentStep / a.numSteps,
                                      o = i(n);
                                  t.draw(o, n, a.currentStep)
                              }, r.onAnimationProgress = o.onProgress, r.onAnimationComplete = o.onComplete, t.animationService.addAnimation(n, r, a, i)
                          } else n.draw(), o && o.onComplete && o.onComplete.call && o.onComplete.call(n);
                          return n
                      },
                      draw: function(a) {
                          var i = this,
                              n = a || 1;
                          i.clear(), t.plugins.notify("beforeDraw", [i, n]), e.each(i.boxes, function(t) {
                              t.draw(i.chartArea)
                          }, i), i.scale && i.scale.draw(), t.plugins.notify("beforeDatasetsDraw", [i, n]), e.each(i.data.datasets, function(t, e) {
                              i.isDatasetVisible(e) && i.getDatasetMeta(e).controller.draw(a)
                          }, i, !0), t.plugins.notify("afterDatasetsDraw", [i, n]), i.tooltip.transition(n).draw(), t.plugins.notify("afterDraw", [i, n])
                      },
                      getElementAtEvent: function(t) {
                          var a = this,
                              i = e.getRelativePosition(t, a.chart),
                              n = [];
                          return e.each(a.data.datasets, function(t, o) {
                              if (a.isDatasetVisible(o)) {
                                  var r = a.getDatasetMeta(o);
                                  e.each(r.data, function(t) {
                                      return t.inRange(i.x, i.y) ? (n.push(t), n) : void 0
                                  })
                              }
                          }), n.slice(0, 1)
                      },
                      getElementsAtEvent: function(t) {
                          var a = this,
                              i = e.getRelativePosition(t, a.chart),
                              n = [],
                              o = function() {
                                  if (a.data.datasets)
                                      for (var t = 0; t < a.data.datasets.length; t++) {
                                          var e = a.getDatasetMeta(t);
                                          if (a.isDatasetVisible(t))
                                              for (var n = 0; n < e.data.length; n++)
                                                  if (e.data[n].inRange(i.x, i.y)) return e.data[n]
                                      }
                              }.call(a);
                          return o ? (e.each(a.data.datasets, function(t, e) {
                              if (a.isDatasetVisible(e)) {
                                  var i = a.getDatasetMeta(e),
                                      r = i.data[o._index];
                                  r && !r._view.skip && n.push(r)
                              }
                          }, a), n) : n
                      },
                      getElementsAtXAxis: function(t) {
                          var a = this,
                              i = e.getRelativePosition(t, a.chart),
                              n = [],
                              o = function() {
                                  if (a.data.datasets)
                                      for (var t = 0; t < a.data.datasets.length; t++) {
                                          var e = a.getDatasetMeta(t);
                                          if (a.isDatasetVisible(t))
                                              for (var n = 0; n < e.data.length; n++)
                                                  if (e.data[n].inLabelRange(i.x, i.y)) return e.data[n]
                                      }
                              }.call(a);
                          return o ? (e.each(a.data.datasets, function(t, i) {
                              if (a.isDatasetVisible(i)) {
                                  var r = a.getDatasetMeta(i),
                                      l = e.findIndex(r.data, function(t) {
                                          return o._model.x === t._model.x
                                      }); - 1 === l || r.data[l]._view.skip || n.push(r.data[l])
                              }
                          }, a), n) : n
                      },
                      getElementsAtEventForMode: function(t, e) {
                          var a = this;
                          switch (e) {
                              case "single":
                                  return a.getElementAtEvent(t);
                              case "label":
                                  return a.getElementsAtEvent(t);
                              case "dataset":
                                  return a.getDatasetAtEvent(t);
                              case "x-axis":
                                  return a.getElementsAtXAxis(t);
                              default:
                                  return t
                          }
                      },
                      getDatasetAtEvent: function(t) {
                          var e = this.getElementAtEvent(t);
                          return e.length > 0 && (e = this.getDatasetMeta(e[0]._datasetIndex).data),
                              e
                      },
                      getDatasetMeta: function(t) {
                          var e = this,
                              a = e.data.datasets[t];
                          a._meta || (a._meta = {});
                          var i = a._meta[e.id];
                          return i || (i = a._meta[e.id] = {
                              type: null,
                              data: [],
                              dataset: null,
                              controller: null,
                              hidden: null,
                              xAxisID: null,
                              yAxisID: null
                          }), i
                      },
                      getVisibleDatasetCount: function() {
                          for (var t = 0, e = 0, a = this.data.datasets.length; a > e; ++e) this.isDatasetVisible(e) && t++;
                          return t
                      },
                      isDatasetVisible: function(t) {
                          var e = this.getDatasetMeta(t);
                          return "boolean" == typeof e.hidden ? !e.hidden : !this.data.datasets[t].hidden
                      },
                      generateLegend: function() {
                          return this.options.legendCallback(this)
                      },
                      destroy: function() {
                          var a = this;
                          a.stop(), a.clear(), e.unbindEvents(a, a.events), e.removeResizeListener(a.chart.canvas.parentNode);
                          var i = a.chart.canvas;
                          i.width = a.chart.width, i.height = a.chart.height, void 0 !== a.chart.originalDevicePixelRatio && a.chart.ctx.scale(1 / a.chart.originalDevicePixelRatio, 1 / a.chart.originalDevicePixelRatio), i.style.width = a.chart.originalCanvasStyleWidth, i.style.height = a.chart.originalCanvasStyleHeight, t.plugins.notify("destroy", [a]), delete t.instances[a.id]
                      },
                      toBase64Image: function() {
                          return this.chart.canvas.toDataURL.apply(this.chart.canvas, arguments)
                      },
                      initToolTip: function() {
                          var e = this;
                          e.tooltip = new t.Tooltip({
                              _chart: e.chart,
                              _chartInstance: e,
                              _data: e.data,
                              _options: e.options.tooltips
                          }, e)
                      },
                      bindEvents: function() {
                          var t = this;
                          e.bindEvents(t, t.options.events, function(e) {
                              t.eventHandler(e)
                          })
                      },
                      updateHoverStyle: function(t, e, a) {
                          var i, n, o, r = a ? "setHoverStyle" : "removeHoverStyle";
                          switch (e) {
                              case "single":
                                  t = [t[0]];
                                  break;
                              case "label":
                              case "dataset":
                              case "x-axis":
                                  break;
                              default:
                                  return
                          }
                          for (n = 0, o = t.length; o > n; ++n) i = t[n], i && this.getDatasetMeta(i._datasetIndex).controller[r](i)
                      },
                      eventHandler: function(t) {
                          var a = this,
                              i = a.tooltip,
                              n = a.options || {},
                              o = n.hover,
                              r = n.tooltips;
                          return a.lastActive = a.lastActive || [], a.lastTooltipActive = a.lastTooltipActive || [], "mouseout" === t.type ? (a.active = [], a.tooltipActive = []) : (a.active = a.getElementsAtEventForMode(t, o.mode), a.tooltipActive = a.getElementsAtEventForMode(t, r.mode)), o.onHover && o.onHover.call(a, a.active), ("mouseup" === t.type || "click" === t.type) && (n.onClick && n.onClick.call(a, t, a.active), a.legend && a.legend.handleEvent && a.legend.handleEvent(t)), a.lastActive.length && a.updateHoverStyle(a.lastActive, o.mode, !1), a.active.length && o.mode && a.updateHoverStyle(a.active, o.mode, !0), (r.enabled || r.custom) && (i.initialize(), i._active = a.tooltipActive, i.update(!0)), i.pivot(), a.animating || e.arrayEquals(a.active, a.lastActive) && e.arrayEquals(a.tooltipActive, a.lastTooltipActive) || (a.stop(), (r.enabled || r.custom) && i.update(!0), a.render(o.animationDuration, !0)), a.lastActive = a.active, a.lastTooltipActive = a.tooltipActive, a
                      }
                  })
              }
          }, {}],
          24: [function(t, e, a) {
              "use strict";
              e.exports = function(t) {
                  var e = t.helpers,
                      a = e.noop;
                  t.DatasetController = function(t, e) {
                      this.initialize.call(this, t, e)
                  }, e.extend(t.DatasetController.prototype, {
                      datasetElementType: null,
                      dataElementType: null,
                      initialize: function(t, e) {
                          var a = this;
                          a.chart = t, a.index = e, a.linkScales(), a.addElements()
                      },
                      updateIndex: function(t) {
                          this.index = t
                      },
                      linkScales: function() {
                          var t = this,
                              e = t.getMeta(),
                              a = t.getDataset();
                          null === e.xAxisID && (e.xAxisID = a.xAxisID || t.chart.options.scales.xAxes[0].id), null === e.yAxisID && (e.yAxisID = a.yAxisID || t.chart.options.scales.yAxes[0].id)
                      },
                      getDataset: function() {
                          return this.chart.data.datasets[this.index]
                      },
                      getMeta: function() {
                          return this.chart.getDatasetMeta(this.index)
                      },
                      getScaleForId: function(t) {
                          return this.chart.scales[t]
                      },
                      reset: function() {
                          this.update(!0)
                      },
                      createMetaDataset: function() {
                          var t = this,
                              e = t.datasetElementType;
                          return e && new e({
                              _chart: t.chart.chart,
                              _datasetIndex: t.index
                          })
                      },
                      createMetaData: function(t) {
                          var e = this,
                              a = e.dataElementType;
                          return a && new a({
                              _chart: e.chart.chart,
                              _datasetIndex: e.index,
                              _index: t
                          })
                      },
                      addElements: function() {
                          var t, e, a = this,
                              i = a.getMeta(),
                              n = a.getDataset().data || [],
                              o = i.data;
                          for (t = 0, e = n.length; e > t; ++t) o[t] = o[t] || a.createMetaData(i, t);
                          i.dataset = i.dataset || a.createMetaDataset()
                      },
                      addElementAndReset: function(t) {
                          var e = this,
                              a = e.createMetaData(t);
                          e.getMeta().data.splice(t, 0, a), e.updateElement(a, t, !0)
                      },
                      buildOrUpdateElements: function() {
                          var t = this.getMeta(),
                              e = t.data,
                              a = this.getDataset().data.length,
                              i = e.length;
                          if (i > a) e.splice(a, i - a);
                          else if (a > i)
                              for (var n = i; a > n; ++n) this.addElementAndReset(n)
                      },
                      update: a,
                      draw: function(t) {
                          var a = t || 1;
                          e.each(this.getMeta().data, function(t) {
                              t.transition(a).draw()
                          })
                      },
                      removeHoverStyle: function(t, a) {
                          var i = this.chart.data.datasets[t._datasetIndex],
                              n = t._index,
                              o = t.custom || {},
                              r = e.getValueAtIndexOrDefault,
                              l = t._model;
                          l.backgroundColor = o.backgroundColor ? o.backgroundColor : r(i.backgroundColor, n, a.backgroundColor), l.borderColor = o.borderColor ? o.borderColor : r(i.borderColor, n, a.borderColor), l.borderWidth = o.borderWidth ? o.borderWidth : r(i.borderWidth, n, a.borderWidth)
                      },
                      setHoverStyle: function(t) {
                          var a = this.chart.data.datasets[t._datasetIndex],
                              i = t._index,
                              n = t.custom || {},
                              o = e.getValueAtIndexOrDefault,
                              r = e.getHoverColor,
                              l = t._model;
                          l.backgroundColor = n.hoverBackgroundColor ? n.hoverBackgroundColor : o(a.hoverBackgroundColor, i, r(l.backgroundColor)), l.borderColor = n.hoverBorderColor ? n.hoverBorderColor : o(a.hoverBorderColor, i, r(l.borderColor)), l.borderWidth = n.hoverBorderWidth ? n.hoverBorderWidth : o(a.hoverBorderWidth, i, l.borderWidth)
                      }
                  }), t.DatasetController.extend = e.inherits
              }
          }, {}],
          25: [function(t, e, a) {
              "use strict";
              e.exports = function(t) {
                  var e = t.helpers;
                  t.elements = {}, t.Element = function(t) {
                      e.extend(this, t), this.initialize.apply(this, arguments)
                  }, e.extend(t.Element.prototype, {
                      initialize: function() {
                          this.hidden = !1
                      },
                      pivot: function() {
                          var t = this;
                          return t._view || (t._view = e.clone(t._model)), t._start = e.clone(t._view), t
                      },
                      transition: function(t) {
                          var a = this;
                          return a._view || (a._view = e.clone(a._model)), 1 === t ? (a._view = a._model, a._start = null, a) : (a._start || a.pivot(), e.each(a._model, function(i, n) {
                              if ("_" === n[0]);
                              else if (a._view.hasOwnProperty(n))
                                  if (i === a._view[n]);
                                  else if ("string" == typeof i) try {
                                  var o = e.color(a._model[n]).mix(e.color(a._start[n]), t);
                                  a._view[n] = o.rgbString()
                              } catch (r) {
                                  a._view[n] = i
                              } else if ("number" == typeof i) {
                                  var l = void 0 !== a._start[n] && isNaN(a._start[n]) === !1 ? a._start[n] : 0;
                                  a._view[n] = (a._model[n] - l) * t + l
                              } else a._view[n] = i;
                              else "number" != typeof i || isNaN(a._view[n]) ? a._view[n] = i : a._view[n] = i * t
                          }, a), a)
                      },
                      tooltipPosition: function() {
                          return {
                              x: this._model.x,
                              y: this._model.y
                          }
                      },
                      hasValue: function() {
                          return e.isNumber(this._model.x) && e.isNumber(this._model.y)
                      }
                  }), t.Element.extend = e.inherits
              }
          }, {}],
          26: [function(t, e, a) {
              "use strict";
              var i = t(3);
              e.exports = function(t) {
                  function e(t, e, a) {
                      var i;
                      return "string" == typeof t ? (i = parseInt(t, 10), -1 != t.indexOf("%") && (i = i / 100 * e.parentNode[a])) : i = t, i
                  }
  
                  function a(t) {
                      return void 0 !== t && null !== t && "none" !== t
                  }
  
                  function n(t, i, n) {
                      var o = document.defaultView,
                          r = t.parentNode,
                          l = o.getComputedStyle(t)[i],
                          s = o.getComputedStyle(r)[i],
                          d = a(l),
                          u = a(s),
                          c = Number.POSITIVE_INFINITY;
                      return d || u ? Math.min(d ? e(l, t, n) : c, u ? e(s, r, n) : c) : "none"
                  }
                  var o = t.helpers = {};
                  o.each = function(t, e, a, i) {
                      var n, r;
                      if (o.isArray(t))
                          if (r = t.length, i)
                              for (n = r - 1; n >= 0; n--) e.call(a, t[n], n);
                          else
                              for (n = 0; r > n; n++) e.call(a, t[n], n);
                      else if ("object" == typeof t) {
                          var l = Object.keys(t);
                          for (r = l.length, n = 0; r > n; n++) e.call(a, t[l[n]], l[n])
                      }
                  }, o.clone = function(t) {
                      var e = {};
                      return o.each(t, function(t, a) {
                          o.isArray(t) ? e[a] = t.slice(0) : "object" == typeof t && null !== t ? e[a] = o.clone(t) : e[a] = t
                      }), e
                  }, o.extend = function(t) {
                      for (var e = function(e, a) {
                              t[a] = e
                          }, a = 1, i = arguments.length; i > a; a++) o.each(arguments[a], e);
                      return t
                  }, o.configMerge = function(e) {
                      var a = o.clone(e);
                      return o.each(Array.prototype.slice.call(arguments, 1), function(e) {
                          o.each(e, function(e, i) {
                              if ("scales" === i) a[i] = o.scaleMerge(a.hasOwnProperty(i) ? a[i] : {}, e);
                              else if ("scale" === i) a[i] = o.configMerge(a.hasOwnProperty(i) ? a[i] : {}, t.scaleService.getScaleDefaults(e.type), e);
                              else if (a.hasOwnProperty(i) && o.isArray(a[i]) && o.isArray(e)) {
                                  var n = a[i];
                                  o.each(e, function(t, e) {
                                      e < n.length ? "object" == typeof n[e] && null !== n[e] && "object" == typeof t && null !== t ? n[e] = o.configMerge(n[e], t) : n[e] = t : n.push(t)
                                  })
                              } else a.hasOwnProperty(i) && "object" == typeof a[i] && null !== a[i] && "object" == typeof e ? a[i] = o.configMerge(a[i], e) : a[i] = e
                          })
                      }), a
                  }, o.scaleMerge = function(e, a) {
                      var i = o.clone(e);
                      return o.each(a, function(e, a) {
                          "xAxes" === a || "yAxes" === a ? i.hasOwnProperty(a) ? o.each(e, function(e, n) {
                              var r = o.getValueOrDefault(e.type, "xAxes" === a ? "category" : "linear"),
                                  l = t.scaleService.getScaleDefaults(r);
                              n >= i[a].length || !i[a][n].type ? i[a].push(o.configMerge(l, e)) : e.type && e.type !== i[a][n].type ? i[a][n] = o.configMerge(i[a][n], l, e) : i[a][n] = o.configMerge(i[a][n], e)
                          }) : (i[a] = [], o.each(e, function(e) {
                              var n = o.getValueOrDefault(e.type, "xAxes" === a ? "category" : "linear");
                              i[a].push(o.configMerge(t.scaleService.getScaleDefaults(n), e))
                          })) : i.hasOwnProperty(a) && "object" == typeof i[a] && null !== i[a] && "object" == typeof e ? i[a] = o.configMerge(i[a], e) : i[a] = e
                      }), i
                  }, o.getValueAtIndexOrDefault = function(t, e, a) {
                      return void 0 === t || null === t ? a : o.isArray(t) ? e < t.length ? t[e] : a : t
                  }, o.getValueOrDefault = function(t, e) {
                      return void 0 === t ? e : t
                  }, o.indexOf = Array.prototype.indexOf ? function(t, e) {
                      return t.indexOf(e)
                  } : function(t, e) {
                      for (var a = 0, i = t.length; i > a; ++a)
                          if (t[a] === e) return a;
                      return -1
                  }, o.where = function(t, e) {
                      if (o.isArray(t) && Array.prototype.filter) return t.filter(e);
                      var a = [];
                      return o.each(t, function(t) {
                          e(t) && a.push(t)
                      }), a
                  }, o.findIndex = Array.prototype.findIndex ? function(t, e, a) {
                      return t.findIndex(e, a)
                  } : function(t, e, a) {
                      a = void 0 === a ? t : a;
                      for (var i = 0, n = t.length; n > i; ++i)
                          if (e.call(a, t[i], i, t)) return i;
                      return -1
                  }, o.findNextWhere = function(t, e, a) {
                      (void 0 === a || null === a) && (a = -1);
                      for (var i = a + 1; i < t.length; i++) {
                          var n = t[i];
                          if (e(n)) return n
                      }
                  }, o.findPreviousWhere = function(t, e, a) {
                      (void 0 === a || null === a) && (a = t.length);
                      for (var i = a - 1; i >= 0; i--) {
                          var n = t[i];
                          if (e(n)) return n
                      }
                  }, o.inherits = function(t) {
                      var e = this,
                          a = t && t.hasOwnProperty("constructor") ? t.constructor : function() {
                              return e.apply(this, arguments)
                          },
                          i = function() {
                              this.constructor = a
                          };
                      return i.prototype = e.prototype, a.prototype = new i, a.extend = o.inherits, t && o.extend(a.prototype, t), a.__super__ = e.prototype, a
                  }, o.noop = function() {}, o.uid = function() {
                      var t = 0;
                      return function() {
                          return t++
                      }
                  }(), o.isNumber = function(t) {
                      return !isNaN(parseFloat(t)) && isFinite(t)
                  }, o.almostEquals = function(t, e, a) {
                      return Math.abs(t - e) < a
                  }, o.max = function(t) {
                      return t.reduce(function(t, e) {
                          return isNaN(e) ? t : Math.max(t, e)
                      }, Number.NEGATIVE_INFINITY)
                  }, o.min = function(t) {
                      return t.reduce(function(t, e) {
                          return isNaN(e) ? t : Math.min(t, e)
                      }, Number.POSITIVE_INFINITY)
                  }, o.sign = Math.sign ? function(t) {
                      return Math.sign(t)
                  } : function(t) {
                      return t = +t, 0 === t || isNaN(t) ? t : t > 0 ? 1 : -1
                  }, o.log10 = Math.log10 ? function(t) {
                      return Math.log10(t)
                  } : function(t) {
                      return Math.log(t) / Math.LN10
                  }, o.toRadians = function(t) {
                      return t * (Math.PI / 180)
                  }, o.toDegrees = function(t) {
                      return t * (180 / Math.PI)
                  }, o.getAngleFromPoint = function(t, e) {
                      var a = e.x - t.x,
                          i = e.y - t.y,
                          n = Math.sqrt(a * a + i * i),
                          o = Math.atan2(i, a);
                      return o < -.5 * Math.PI && (o += 2 * Math.PI), {
                          angle: o,
                          distance: n
                      }
                  }, o.aliasPixel = function(t) {
                      return t % 2 === 0 ? 0 : .5
                  }, o.splineCurve = function(t, e, a, i) {
                      var n = t.skip ? e : t,
                          o = e,
                          r = a.skip ? e : a,
                          l = Math.sqrt(Math.pow(o.x - n.x, 2) + Math.pow(o.y - n.y, 2)),
                          s = Math.sqrt(Math.pow(r.x - o.x, 2) + Math.pow(r.y - o.y, 2)),
                          d = l / (l + s),
                          u = s / (l + s);
                      d = isNaN(d) ? 0 : d, u = isNaN(u) ? 0 : u;
                      var c = i * d,
                          h = i * u;
                      return {
                          previous: {
                              x: o.x - c * (r.x - n.x),
                              y: o.y - c * (r.y - n.y)
                          },
                          next: {
                              x: o.x + h * (r.x - n.x),
                              y: o.y + h * (r.y - n.y)
                          }
                      }
                  }, o.EPSILON = Number.EPSILON || 1e-14, o.splineCurveMonotone = function(t) {
                      var e, a, i, n, r = (t || []).map(function(t) {
                              return {
                                  model: t._model,
                                  deltaK: 0,
                                  mK: 0
                              }
                          }),
                          l = r.length;
                      for (e = 0; l > e; ++e) i = r[e], i.model.skip || (a = e > 0 ? r[e - 1] : null, n = l - 1 > e ? r[e + 1] : null, n && !n.model.skip && (i.deltaK = (n.model.y - i.model.y) / (n.model.x - i.model.x)), !a || a.model.skip ? i.mK = i.deltaK : !n || n.model.skip ? i.mK = a.deltaK : this.sign(a.deltaK) != this.sign(i.deltaK) ? i.mK = 0 : i.mK = (a.deltaK + i.deltaK) / 2);
                      var s, d, u, c;
                      for (e = 0; l - 1 > e; ++e) i = r[e], n = r[e + 1], i.model.skip || n.model.skip || (o.almostEquals(i.deltaK, 0, this.EPSILON) ? i.mK = n.mK = 0 : (s = i.mK / i.deltaK, d = n.mK / i.deltaK, c = Math.pow(s, 2) + Math.pow(d, 2), 9 >= c || (u = 3 / Math.sqrt(c), i.mK = s * u * i.deltaK, n.mK = d * u * i.deltaK)));
                      var h;
                      for (e = 0; l > e; ++e) i = r[e], i.model.skip || (a = e > 0 ? r[e - 1] : null, n = l - 1 > e ? r[e + 1] : null, a && !a.model.skip && (h = (i.model.x - a.model.x) / 3, i.model.controlPointPreviousX = i.model.x - h, i.model.controlPointPreviousY = i.model.y - h * i.mK), n && !n.model.skip && (h = (n.model.x - i.model.x) / 3, i.model.controlPointNextX = i.model.x + h, i.model.controlPointNextY = i.model.y + h * i.mK))
                  }, o.nextItem = function(t, e, a) {
                      return a ? e >= t.length - 1 ? t[0] : t[e + 1] : e >= t.length - 1 ? t[t.length - 1] : t[e + 1]
                  }, o.previousItem = function(t, e, a) {
                      return a ? 0 >= e ? t[t.length - 1] : t[e - 1] : 0 >= e ? t[0] : t[e - 1]
                  }, o.niceNum = function(t, e) {
                      var a, i = Math.floor(o.log10(t)),
                          n = t / Math.pow(10, i);
                      return a = e ? 1.5 > n ? 1 : 3 > n ? 2 : 7 > n ? 5 : 10 : 1 >= n ? 1 : 2 >= n ? 2 : 5 >= n ? 5 : 10, a * Math.pow(10, i)
                  };
                  var r = o.easingEffects = {
                      linear: function(t) {
                          return t
                      },
                      easeInQuad: function(t) {
                          return t * t
                      },
                      easeOutQuad: function(t) {
                          return -1 * t * (t - 2)
                      },
                      easeInOutQuad: function(t) {
                          return (t /= .5) < 1 ? .5 * t * t : -0.5 * (--t * (t - 2) - 1)
                      },
                      easeInCubic: function(t) {
                          return t * t * t
                      },
                      easeOutCubic: function(t) {
                          return 1 * ((t = t / 1 - 1) * t * t + 1)
                      },
                      easeInOutCubic: function(t) {
                          return (t /= .5) < 1 ? .5 * t * t * t : .5 * ((t -= 2) * t * t + 2)
                      },
                      easeInQuart: function(t) {
                          return t * t * t * t
                      },
                      easeOutQuart: function(t) {
                          return -1 * ((t = t / 1 - 1) * t * t * t - 1)
                      },
                      easeInOutQuart: function(t) {
                          return (t /= .5) < 1 ? .5 * t * t * t * t : -0.5 * ((t -= 2) * t * t * t - 2)
                      },
                      easeInQuint: function(t) {
                          return 1 * (t /= 1) * t * t * t * t
                      },
                      easeOutQuint: function(t) {
                          return 1 * ((t = t / 1 - 1) * t * t * t * t + 1)
                      },
                      easeInOutQuint: function(t) {
                          return (t /= .5) < 1 ? .5 * t * t * t * t * t : .5 * ((t -= 2) * t * t * t * t + 2)
                      },
                      easeInSine: function(t) {
                          return -1 * Math.cos(t / 1 * (Math.PI / 2)) + 1
                      },
                      easeOutSine: function(t) {
                          return 1 * Math.sin(t / 1 * (Math.PI / 2))
                      },
                      easeInOutSine: function(t) {
                          return -0.5 * (Math.cos(Math.PI * t / 1) - 1)
                      },
                      easeInExpo: function(t) {
                          return 0 === t ? 1 : 1 * Math.pow(2, 10 * (t / 1 - 1))
                      },
                      easeOutExpo: function(t) {
                          return 1 === t ? 1 : 1 * (-Math.pow(2, -10 * t / 1) + 1)
                      },
                      easeInOutExpo: function(t) {
                          return 0 === t ? 0 : 1 === t ? 1 : (t /= .5) < 1 ? .5 * Math.pow(2, 10 * (t - 1)) : .5 * (-Math.pow(2, -10 * --t) + 2)
                      },
                      easeInCirc: function(t) {
                          return t >= 1 ? t : -1 * (Math.sqrt(1 - (t /= 1) * t) - 1)
                      },
                      easeOutCirc: function(t) {
                          return 1 * Math.sqrt(1 - (t = t / 1 - 1) * t)
                      },
                      easeInOutCirc: function(t) {
                          return (t /= .5) < 1 ? -0.5 * (Math.sqrt(1 - t * t) - 1) : .5 * (Math.sqrt(1 - (t -= 2) * t) + 1)
                      },
                      easeInElastic: function(t) {
                          var e = 1.70158,
                              a = 0,
                              i = 1;
                          return 0 === t ? 0 : 1 === (t /= 1) ? 1 : (a || (a = .3), i < Math.abs(1) ? (i = 1, e = a / 4) : e = a / (2 * Math.PI) * Math.asin(1 / i), -(i * Math.pow(2, 10 * (t -= 1)) * Math.sin((1 * t - e) * (2 * Math.PI) / a)))
                      },
                      easeOutElastic: function(t) {
                          var e = 1.70158,
                              a = 0,
                              i = 1;
                          return 0 === t ? 0 : 1 === (t /= 1) ? 1 : (a || (a = .3), i < Math.abs(1) ? (i = 1, e = a / 4) : e = a / (2 * Math.PI) * Math.asin(1 / i), i * Math.pow(2, -10 * t) * Math.sin((1 * t - e) * (2 * Math.PI) / a) + 1)
                      },
                      easeInOutElastic: function(t) {
                          var e = 1.70158,
                              a = 0,
                              i = 1;
                          return 0 === t ? 0 : 2 === (t /= .5) ? 1 : (a || (a = 1 * (.3 * 1.5)), i < Math.abs(1) ? (i = 1, e = a / 4) : e = a / (2 * Math.PI) * Math.asin(1 / i), 1 > t ? -.5 * (i * Math.pow(2, 10 * (t -= 1)) * Math.sin((1 * t - e) * (2 * Math.PI) / a)) : i * Math.pow(2, -10 * (t -= 1)) * Math.sin((1 * t - e) * (2 * Math.PI) / a) * .5 + 1)
                      },
                      easeInBack: function(t) {
                          var e = 1.70158;
                          return 1 * (t /= 1) * t * ((e + 1) * t - e)
                      },
                      easeOutBack: function(t) {
                          var e = 1.70158;
                          return 1 * ((t = t / 1 - 1) * t * ((e + 1) * t + e) + 1)
                      },
                      easeInOutBack: function(t) {
                          var e = 1.70158;
                          return (t /= .5) < 1 ? .5 * (t * t * (((e *= 1.525) + 1) * t - e)) : .5 * ((t -= 2) * t * (((e *= 1.525) + 1) * t + e) + 2)
                      },
                      easeInBounce: function(t) {
                          return 1 - r.easeOutBounce(1 - t)
                      },
                      easeOutBounce: function(t) {
                          return (t /= 1) < 1 / 2.75 ? 1 * (7.5625 * t * t) : 2 / 2.75 > t ? 1 * (7.5625 * (t -= 1.5 / 2.75) * t + .75) : 2.5 / 2.75 > t ? 1 * (7.5625 * (t -= 2.25 / 2.75) * t + .9375) : 1 * (7.5625 * (t -= 2.625 / 2.75) * t + .984375)
                      },
                      easeInOutBounce: function(t) {
                          return .5 > t ? .5 * r.easeInBounce(2 * t) : .5 * r.easeOutBounce(2 * t - 1) + .5
                      }
                  };
                  o.requestAnimFrame = function() {
                      return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function(t) {
                          return window.setTimeout(t, 1e3 / 60)
                      }
                  }(), o.cancelAnimFrame = function() {
                      return window.cancelAnimationFrame || window.webkitCancelAnimationFrame || window.mozCancelAnimationFrame || window.oCancelAnimationFrame || window.msCancelAnimationFrame || function(t) {
                          return window.clearTimeout(t, 1e3 / 60)
                      }
                  }(), o.getRelativePosition = function(t, e) {
                      var a, i, n = t.originalEvent || t,
                          r = t.currentTarget || t.srcElement,
                          l = r.getBoundingClientRect(),
                          s = n.touches;
                      s && s.length > 0 ? (a = s[0].clientX, i = s[0].clientY) : (a = n.clientX, i = n.clientY);
                      var d = parseFloat(o.getStyle(r, "padding-left")),
                          u = parseFloat(o.getStyle(r, "padding-top")),
                          c = parseFloat(o.getStyle(r, "padding-right")),
                          h = parseFloat(o.getStyle(r, "padding-bottom")),
                          f = l.right - l.left - d - c,
                          g = l.bottom - l.top - u - h;
                      return a = Math.round((a - l.left - d) / f * r.width / e.currentDevicePixelRatio), i = Math.round((i - l.top - u) / g * r.height / e.currentDevicePixelRatio), {
                          x: a,
                          y: i
                      }
                  }, o.addEvent = function(t, e, a) {
                      t.addEventListener ? t.addEventListener(e, a) : t.attachEvent ? t.attachEvent("on" + e, a) : t["on" + e] = a
                  }, o.removeEvent = function(t, e, a) {
                      t.removeEventListener ? t.removeEventListener(e, a, !1) : t.detachEvent ? t.detachEvent("on" + e, a) : t["on" + e] = o.noop
                  }, o.bindEvents = function(t, e, a) {
                      var i = t.events = t.events || {};
                      o.each(e, function(e) {
                          i[e] = function() {
                              a.apply(t, arguments)
                          }, o.addEvent(t.chart.canvas, e, i[e])
                      })
                  }, o.unbindEvents = function(t, e) {
                      var a = t.chart.canvas;
                      o.each(e, function(t, e) {
                          o.removeEvent(a, e, t)
                      })
                  }, o.getConstraintWidth = function(t) {
                      return n(t, "max-width", "clientWidth")
                  }, o.getConstraintHeight = function(t) {
                      return n(t, "max-height", "clientHeight")
                  }, o.getMaximumWidth = function(t) {
                      var e = t.parentNode,
                          a = parseInt(o.getStyle(e, "padding-left")) + parseInt(o.getStyle(e, "padding-right")),
                          i = e.clientWidth - a,
                          n = o.getConstraintWidth(t);
                      return isNaN(n) ? i : Math.min(i, n)
                  }, o.getMaximumHeight = function(t) {
                      var e = t.parentNode,
                          a = parseInt(o.getStyle(e, "padding-top")) + parseInt(o.getStyle(e, "padding-bottom")),
                          i = e.clientHeight - a,
                          n = o.getConstraintHeight(t);
                      return isNaN(n) ? i : Math.min(i, n)
                  }, o.getStyle = function(t, e) {
                      return t.currentStyle ? t.currentStyle[e] : document.defaultView.getComputedStyle(t, null).getPropertyValue(e)
                  }, o.retinaScale = function(t) {
                      var e = t.ctx,
                          a = t.canvas,
                          i = a.width,
                          n = a.height,
                          o = t.currentDevicePixelRatio = window.devicePixelRatio || 1;
                      1 !== o && (a.height = n * o, a.width = i * o, e.scale(o, o), t.originalDevicePixelRatio = t.originalDevicePixelRatio || o), a.style.width = i + "px", a.style.height = n + "px"
                  }, o.clear = function(t) {
                      t.ctx.clearRect(0, 0, t.width, t.height)
                  }, o.fontString = function(t, e, a) {
                      return e + " " + t + "px " + a
                  }, o.longestText = function(t, e, a, i) {
                      i = i || {};
                      var n = i.data = i.data || {},
                          r = i.garbageCollect = i.garbageCollect || [];
                      i.font !== e && (n = i.data = {}, r = i.garbageCollect = [], i.font = e), t.font = e;
                      var l = 0;
                      o.each(a, function(e) {
                          void 0 !== e && null !== e && o.isArray(e) !== !0 ? l = o.measureText(t, n, r, l, e) : o.isArray(e) && o.each(e, function(e) {
                              void 0 === e || null === e || o.isArray(e) || (l = o.measureText(t, n, r, l, e))
                          })
                      });
                      var s = r.length / 2;
                      if (s > a.length) {
                          for (var d = 0; s > d; d++) delete n[r[d]];
                          r.splice(0, s)
                      }
                      return l
                  }, o.measureText = function(t, e, a, i, n) {
                      var o = e[n];
                      return o || (o = e[n] = t.measureText(n).width, a.push(n)), o > i && (i = o), i
                  }, o.numberOfLabelLines = function(t) {
                      var e = 1;
                      return o.each(t, function(t) {
                          o.isArray(t) && t.length > e && (e = t.length)
                      }), e
                  }, o.drawRoundedRectangle = function(t, e, a, i, n, o) {
                      t.beginPath(), t.moveTo(e + o, a), t.lineTo(e + i - o, a), t.quadraticCurveTo(e + i, a, e + i, a + o), t.lineTo(e + i, a + n - o), t.quadraticCurveTo(e + i, a + n, e + i - o, a + n), t.lineTo(e + o, a + n), t.quadraticCurveTo(e, a + n, e, a + n - o), t.lineTo(e, a + o), t.quadraticCurveTo(e, a, e + o, a), t.closePath()
                  }, o.color = function(e) {
                      return i ? i(e instanceof CanvasGradient ? t.defaults.global.defaultColor : e) : (console.log("Color.js not found!"), e)
                  }, o.addResizeListener = function(t, e) {
                      var a = document.createElement("iframe"),
                          i = "chartjs-hidden-iframe";
                      a.classlist ? a.classlist.add(i) : a.setAttribute("class", i), a.tabIndex = -1;
                      var n = a.style;
                      n.width = "100%", n.display = "block", n.border = 0, n.height = 0, n.margin = 0, n.position = "absolute", n.left = 0, n.right = 0, n.top = 0, n.bottom = 0, t.insertBefore(a, t.firstChild), (a.contentWindow || a).onresize = function() {
                          e && e()
                      }
                  }, o.removeResizeListener = function(t) {
                      var e = t.querySelector(".chartjs-hidden-iframe");
                      e && e.parentNode.removeChild(e)
                  }, o.isArray = Array.isArray ? function(t) {
                      return Array.isArray(t)
                  } : function(t) {
                      return "[object Array]" === Object.prototype.toString.call(t)
                  }, o.arrayEquals = function(t, e) {
                      var a, i, n, r;
                      if (!t || !e || t.length != e.length) return !1;
                      for (a = 0, i = t.length; i > a; ++a)
                          if (n = t[a], r = e[a], n instanceof Array && r instanceof Array) {
                              if (!o.arrayEquals(n, r)) return !1
                          } else if (n != r) return !1;
                      return !0
                  }, o.callCallback = function(t, e, a) {
                      t && "function" == typeof t.call && t.apply(a, e)
                  }, o.getHoverColor = function(t) {
                      return t instanceof CanvasPattern ? t : o.color(t).saturate(.5).darken(.1).rgbString()
                  }
              }
          }, {
              3: 3
          }],
          27: [function(t, e, a) {
              "use strict";
              e.exports = function() {
                  var t = function(e, a) {
                      var i = this,
                          n = t.helpers;
                      return i.config = a || {
                          data: {
                              datasets: []
                          }
                      }, e.length && e[0].getContext && (e = e[0]), e.getContext && (e = e.getContext("2d")), i.ctx = e, i.canvas = e.canvas, e.canvas.style.display = e.canvas.style.display || "block", i.width = e.canvas.width || parseInt(n.getStyle(e.canvas, "width"), 10) || n.getMaximumWidth(e.canvas), i.height = e.canvas.height || parseInt(n.getStyle(e.canvas, "height"), 10) || n.getMaximumHeight(e.canvas), i.aspectRatio = i.width / i.height, (isNaN(i.aspectRatio) || isFinite(i.aspectRatio) === !1) && (i.aspectRatio = void 0 !== a.aspectRatio ? a.aspectRatio : 2), i.originalCanvasStyleWidth = e.canvas.style.width, i.originalCanvasStyleHeight = e.canvas.style.height, n.retinaScale(i), i.controller = new t.Controller(i), n.addResizeListener(e.canvas.parentNode, function() {
                          i.controller && i.controller.config.options.responsive && i.controller.resize()
                      }), i.controller ? i.controller : i
                  };
                  return t.defaults = {
                      global: {
                          responsive: !0,
                          responsiveAnimationDuration: 0,
                          maintainAspectRatio: !0,
                          events: ["mousemove", "mouseout", "click", "touchstart", "touchmove"],
                          hover: {
                              onHover: null,
                              mode: "single",
                              animationDuration: 400
                          },
                          onClick: null,
                          defaultColor: "rgba(0,0,0,0.1)",
                          defaultFontColor: "#666",
                          defaultFontFamily: "'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",
                          defaultFontSize: 12,
                          defaultFontStyle: "normal",
                          showLines: !0,
                          elements: {},
                          legendCallback: function(t) {
                              var e = [];
                              e.push('<ul class="' + t.id + '-legend">');
                              for (var a = 0; a < t.data.datasets.length; a++) e.push('<li><span style="background-color:' + t.data.datasets[a].backgroundColor + '"></span>'), t.data.datasets[a].label && e.push(t.data.datasets[a].label), e.push("</li>");
                              return e.push("</ul>"), e.join("")
                          }
                      }
                  }, t.Chart = t, t
              }
          }, {}],
          28: [function(t, e, a) {
              "use strict";
              e.exports = function(t) {
                  var e = t.helpers;
                  t.layoutService = {
                      defaults: {},
                      addBox: function(t, e) {
                          t.boxes || (t.boxes = []), t.boxes.push(e)
                      },
                      removeBox: function(t, e) {
                          t.boxes && t.boxes.splice(t.boxes.indexOf(e), 1)
                      },
                      update: function(t, a, i) {
                          function n(t) {
                              var e, a = t.isHorizontal();
                              a ? (e = t.update(t.options.fullWidth ? p : k, y), S -= e.height) : (e = t.update(x, v), k -= e.width), w.push({
                                  horizontal: a,
                                  minSize: e,
                                  box: t
                              })
                          }
  
                          function o(t) {
                              var a = e.findNextWhere(w, function(e) {
                                  return e.box === t
                              });
                              if (a)
                                  if (t.isHorizontal()) {
                                      var i = {
                                          left: C,
                                          right: M,
                                          top: 0,
                                          bottom: 0
                                      };
                                      t.update(t.options.fullWidth ? p : k, m / 2, i)
                                  } else t.update(a.minSize.width, S)
                          }
  
                          function r(t) {
                              var a = e.findNextWhere(w, function(e) {
                                      return e.box === t
                                  }),
                                  i = {
                                      left: 0,
                                      right: 0,
                                      top: D,
                                      bottom: I
                                  };
                              a && t.update(a.minSize.width, S, i)
                          }
  
                          function l(t) {
                              t.isHorizontal() ? (t.left = t.options.fullWidth ? s : C, t.right = t.options.fullWidth ? a - s : C + k, t.top = F, t.bottom = F + t.height, F = t.bottom) : (t.left = T, t.right = T + t.width, t.top = D, t.bottom = D + S, T = t.right)
                          }
                          if (t) {
                              var s = 0,
                                  d = 0,
                                  u = e.where(t.boxes, function(t) {
                                      return "left" === t.options.position
                                  }),
                                  c = e.where(t.boxes, function(t) {
                                      return "right" === t.options.position
                                  }),
                                  h = e.where(t.boxes, function(t) {
                                      return "top" === t.options.position
                                  }),
                                  f = e.where(t.boxes, function(t) {
                                      return "bottom" === t.options.position
                                  }),
                                  g = e.where(t.boxes, function(t) {
                                      return "chartArea" === t.options.position
                                  });
                              h.sort(function(t, e) {
                                  return (e.options.fullWidth ? 1 : 0) - (t.options.fullWidth ? 1 : 0)
                              }), f.sort(function(t, e) {
                                  return (t.options.fullWidth ? 1 : 0) - (e.options.fullWidth ? 1 : 0)
                              });
                              var p = a - 2 * s,
                                  m = i - 2 * d,
                                  b = p / 2,
                                  v = m / 2,
                                  x = (a - b) / (u.length + c.length),
                                  y = (i - v) / (h.length + f.length),
                                  k = p,
                                  S = m,
                                  w = [];
                              e.each(u.concat(c, h, f), n);
                              var C = s,
                                  M = s,
                                  D = d,
                                  I = d;
                              e.each(u.concat(c), o), e.each(u, function(t) {
                                  C += t.width
                              }), e.each(c, function(t) {
                                  M += t.width
                              }), e.each(h.concat(f), o), e.each(h, function(t) {
                                  D += t.height
                              }), e.each(f, function(t) {
                                  I += t.height
                              }), e.each(u.concat(c), r), C = s, M = s, D = d, I = d, e.each(u, function(t) {
                                  C += t.width
                              }), e.each(c, function(t) {
                                  M += t.width
                              }), e.each(h, function(t) {
                                  D += t.height
                              }), e.each(f, function(t) {
                                  I += t.height
                              });
                              var A = i - D - I,
                                  P = a - C - M;
                              (P !== k || A !== S) && (e.each(u, function(t) {
                                  t.height = A
                              }), e.each(c, function(t) {
                                  t.height = A
                              }), e.each(h, function(t) {
                                  t.options.fullWidth || (t.width = P)
                              }), e.each(f, function(t) {
                                  t.options.fullWidth || (t.width = P)
                              }), S = A, k = P);
                              var T = s,
                                  F = d;
                              e.each(u.concat(h), l), T += k, F += S, e.each(c, l), e.each(f, l), t.chartArea = {
                                  left: C,
                                  top: D,
                                  right: C + k,
                                  bottom: D + S
                              }, e.each(g, function(e) {
                                  e.left = t.chartArea.left, e.top = t.chartArea.top, e.right = t.chartArea.right, e.bottom = t.chartArea.bottom, e.update(k, S)
                              })
                          }
                      }
                  }
              }
          }, {}],
          29: [function(t, e, a) {
              "use strict";
              e.exports = function(t) {
                  var e = t.helpers,
                      a = e.noop;
                  t.defaults.global.legend = {
                      display: !0,
                      position: "top",
                      fullWidth: !0,
                      reverse: !1,
                      onClick: function(t, e) {
                          var a = e.datasetIndex,
                              i = this.chart,
                              n = i.getDatasetMeta(a);
                          n.hidden = null === n.hidden ? !i.data.datasets[a].hidden : null, i.update()
                      },
                      labels: {
                          boxWidth: 40,
                          padding: 10,
                          generateLabels: function(t) {
                              var a = t.data;
                              return e.isArray(a.datasets) ? a.datasets.map(function(a, i) {
                                  return {
                                      text: a.label,
                                      fillStyle: e.isArray(a.backgroundColor) ? a.backgroundColor[0] : a.backgroundColor,
                                      hidden: !t.isDatasetVisible(i),
                                      lineCap: a.borderCapStyle,
                                      lineDash: a.borderDash,
                                      lineDashOffset: a.borderDashOffset,
                                      lineJoin: a.borderJoinStyle,
                                      lineWidth: a.borderWidth,
                                      strokeStyle: a.borderColor,
                                      pointStyle: a.pointStyle,
                                      datasetIndex: i
                                  }
                              }, this) : []
                          }
                      }
                  }, t.Legend = t.Element.extend({
                      initialize: function(t) {
                          e.extend(this, t), this.legendHitBoxes = [], this.doughnutMode = !1
                      },
                      beforeUpdate: a,
                      update: function(t, e, a) {
                          var i = this;
                          return i.beforeUpdate(), i.maxWidth = t, i.maxHeight = e, i.margins = a, i.beforeSetDimensions(), i.setDimensions(), i.afterSetDimensions(), i.beforeBuildLabels(), i.buildLabels(), i.afterBuildLabels(), i.beforeFit(), i.fit(), i.afterFit(), i.afterUpdate(), i.minSize
                      },
                      afterUpdate: a,
                      beforeSetDimensions: a,
                      setDimensions: function() {
                          var t = this;
                          t.isHorizontal() ? (t.width = t.maxWidth, t.left = 0, t.right = t.width) : (t.height = t.maxHeight, t.top = 0, t.bottom = t.height), t.paddingLeft = 0, t.paddingTop = 0, t.paddingRight = 0, t.paddingBottom = 0, t.minSize = {
                              width: 0,
                              height: 0
                          }
                      },
                      afterSetDimensions: a,
                      beforeBuildLabels: a,
                      buildLabels: function() {
                          var t = this;
                          t.legendItems = t.options.labels.generateLabels.call(t, t.chart), t.options.reverse && t.legendItems.reverse()
                      },
                      afterBuildLabels: a,
                      beforeFit: a,
                      fit: function() {
                          var a = this,
                              i = a.options,
                              n = i.labels,
                              o = i.display,
                              r = a.ctx,
                              l = t.defaults.global,
                              s = e.getValueOrDefault,
                              d = s(n.fontSize, l.defaultFontSize),
                              u = s(n.fontStyle, l.defaultFontStyle),
                              c = s(n.fontFamily, l.defaultFontFamily),
                              h = e.fontString(d, u, c),
                              f = a.legendHitBoxes = [],
                              g = a.minSize,
                              p = a.isHorizontal();
                          if (p ? (g.width = a.maxWidth, g.height = o ? 10 : 0) : (g.width = o ? 10 : 0, g.height = a.maxHeight), o)
                              if (r.font = h, p) {
                                  var m = a.lineWidths = [0],
                                      b = a.legendItems.length ? d + n.padding : 0;
                                  r.textAlign = "left", r.textBaseline = "top", e.each(a.legendItems, function(t, e) {
                                      var i = n.usePointStyle ? d * Math.sqrt(2) : n.boxWidth,
                                          o = i + d / 2 + r.measureText(t.text).width;
                                      m[m.length - 1] + o + n.padding >= a.width && (b += d + n.padding, m[m.length] = a.left), f[e] = {
                                          left: 0,
                                          top: 0,
                                          width: o,
                                          height: d
                                      }, m[m.length - 1] += o + n.padding
                                  }), g.height += b
                              } else {
                                  var v = n.padding,
                                      x = a.columnWidths = [],
                                      y = n.padding,
                                      k = 0,
                                      S = 0,
                                      w = d + v;
                                  e.each(a.legendItems, function(t, e) {
                                      var a = n.usePointStyle ? 2 * n.boxWidth : n.boxWidth,
                                          i = a + d / 2 + r.measureText(t.text).width;
                                      S + w > g.height && (y += k + n.padding, x.push(k), k = 0, S = 0), k = Math.max(k, i), S += w, f[e] = {
                                          left: 0,
                                          top: 0,
                                          width: i,
                                          height: d
                                      }
                                  }), y += k, x.push(k), g.width += y
                              }
                          a.width = g.width, a.height = g.height
                      },
                      afterFit: a,
                      isHorizontal: function() {
                          return "top" === this.options.position || "bottom" === this.options.position
                      },
                      draw: function() {
                          var a = this,
                              i = a.options,
                              n = i.labels,
                              o = t.defaults.global,
                              r = o.elements.line,
                              l = a.width,
                              s = a.lineWidths;
                          if (i.display) {
                              var d, u = a.ctx,
                                  c = e.getValueOrDefault,
                                  h = c(n.fontColor, o.defaultFontColor),
                                  f = c(n.fontSize, o.defaultFontSize),
                                  g = c(n.fontStyle, o.defaultFontStyle),
                                  p = c(n.fontFamily, o.defaultFontFamily),
                                  m = e.fontString(f, g, p);
                              u.textAlign = "left", u.textBaseline = "top", u.lineWidth = .5, u.strokeStyle = h, u.fillStyle = h, u.font = m;
                              var b = n.boxWidth,
                                  v = a.legendHitBoxes,
                                  x = function(e, a, n) {
                                      if (!(isNaN(b) || 0 >= b)) {
                                          if (u.save(), u.fillStyle = c(n.fillStyle, o.defaultColor), u.lineCap = c(n.lineCap, r.borderCapStyle), u.lineDashOffset = c(n.lineDashOffset, r.borderDashOffset), u.lineJoin = c(n.lineJoin, r.borderJoinStyle), u.lineWidth = c(n.lineWidth, r.borderWidth), u.strokeStyle = c(n.strokeStyle, o.defaultColor), u.setLineDash && u.setLineDash(c(n.lineDash, r.borderDash)), i.labels && i.labels.usePointStyle) {
                                              var l = f * Math.SQRT2 / 2,
                                                  s = l / Math.SQRT2,
                                                  d = e + s,
                                                  h = a + s;
                                              t.canvasHelpers.drawPoint(u, n.pointStyle, l, d, h)
                                          } else u.strokeRect(e, a, b, f), u.fillRect(e, a, b, f);
                                          u.restore()
                                      }
                                  },
                                  y = function(t, e, a, i) {
                                      u.fillText(a.text, b + f / 2 + t, e), a.hidden && (u.beginPath(), u.lineWidth = 2, u.moveTo(b + f / 2 + t, e + f / 2), u.lineTo(b + f / 2 + t + i, e + f / 2), u.stroke())
                                  },
                                  k = a.isHorizontal();
                              d = k ? {
                                  x: a.left + (l - s[0]) / 2,
                                  y: a.top + n.padding,
                                  line: 0
                              } : {
                                  x: a.left + n.padding,
                                  y: a.top + n.padding,
                                  line: 0
                              };
                              var S = f + n.padding;
                              e.each(a.legendItems, function(t, e) {
                                  var i = u.measureText(t.text).width,
                                      o = n.usePointStyle ? f + f / 2 + i : b + f / 2 + i,
                                      r = d.x,
                                      c = d.y;
                                  k ? r + o >= l && (c = d.y += S, d.line++, r = d.x = a.left + (l - s[d.line]) / 2) : c + S > a.bottom && (r = d.x = r + a.columnWidths[d.line] + n.padding, c = d.y = a.top, d.line++), x(r, c, t), v[e].left = r, v[e].top = c, y(r, c, t, i), k ? d.x += o + n.padding : d.y += S
                              })
                          }
                      },
                      handleEvent: function(t) {
                          var a = this,
                              i = e.getRelativePosition(t, a.chart.chart),
                              n = i.x,
                              o = i.y,
                              r = a.options;
                          if (n >= a.left && n <= a.right && o >= a.top && o <= a.bottom)
                              for (var l = a.legendHitBoxes, s = 0; s < l.length; ++s) {
                                  var d = l[s];
                                  if (n >= d.left && n <= d.left + d.width && o >= d.top && o <= d.top + d.height) {
                                      r.onClick && r.onClick.call(a, t, a.legendItems[s]);
                                      break
                                  }
                              }
                      }
                  }), t.plugins.register({
                      beforeInit: function(e) {
                          var a = e.options,
                              i = a.legend;
                          i && (e.legend = new t.Legend({
                              ctx: e.chart.ctx,
                              options: i,
                              chart: e
                          }), t.layoutService.addBox(e, e.legend))
                      }
                  })
              }
          }, {}],
          30: [function(t, e, a) {
              "use strict";
              e.exports = function(t) {
                  var e = t.helpers.noop;
                  t.plugins = {
                      _plugins: [],
                      register: function(t) {
                          var e = this._plugins;
                          [].concat(t).forEach(function(t) {
                              -1 === e.indexOf(t) && e.push(t)
                          })
                      },
                      unregister: function(t) {
                          var e = this._plugins;
                          [].concat(t).forEach(function(t) {
                              var a = e.indexOf(t); - 1 !== a && e.splice(a, 1)
                          })
                      },
                      clear: function() {
                          this._plugins = []
                      },
                      count: function() {
                          return this._plugins.length
                      },
                      getAll: function() {
                          return this._plugins
                      },
                      notify: function(t, e) {
                          var a, i, n = this._plugins,
                              o = n.length;
                          for (a = 0; o > a; ++a)
                              if (i = n[a], "function" == typeof i[t] && i[t].apply(i, e || []) === !1) return !1;
                          return !0
                      }
                  }, t.PluginBase = t.Element.extend({
                      beforeInit: e,
                      afterInit: e,
                      beforeUpdate: e,
                      afterUpdate: e,
                      beforeDraw: e,
                      afterDraw: e,
                      destroy: e
                  }), t.pluginService = t.plugins
              }
          }, {}],
          31: [function(t, e, a) {
              "use strict";
              e.exports = function(t) {
                  var e = t.helpers;
                  t.defaults.scale = {
                      display: !0,
                      position: "left",
                      gridLines: {
                          display: !0,
                          color: "rgba(0, 0, 0, 0.1)",
                          lineWidth: 1,
                          drawBorder: !0,
                          drawOnChartArea: !0,
                          drawTicks: !0,
                          tickMarkLength: 10,
                          zeroLineWidth: 1,
                          zeroLineColor: "rgba(0,0,0,0.25)",
                          offsetGridLines: !1,
                          borderDash: [],
                          borderDashOffset: 0
                      },
                      scaleLabel: {
                          labelString: "",
                          display: !1
                      },
                      ticks: {
                          beginAtZero: !1,
                          minRotation: 0,
                          maxRotation: 50,
                          mirror: !1,
                          padding: 10,
                          reverse: !1,
                          display: !0,
                          autoSkip: !0,
                          autoSkipPadding: 0,
                          labelOffset: 0,
                          callback: function(t) {
                              return e.isArray(t) ? t : "" + t
                          }
                      }
                  }, t.Scale = t.Element.extend({
                      beforeUpdate: function() {
                          e.callCallback(this.options.beforeUpdate, [this])
                      },
                      update: function(t, a, i) {
                          var n = this;
                          return n.beforeUpdate(), n.maxWidth = t, n.maxHeight = a, n.margins = e.extend({
                              left: 0,
                              right: 0,
                              top: 0,
                              bottom: 0
                          }, i), n.beforeSetDimensions(), n.setDimensions(), n.afterSetDimensions(), n.beforeDataLimits(), n.determineDataLimits(), n.afterDataLimits(), n.beforeBuildTicks(), n.buildTicks(), n.afterBuildTicks(), n.beforeTickToLabelConversion(), n.convertTicksToLabels(), n.afterTickToLabelConversion(), n.beforeCalculateTickRotation(), n.calculateTickRotation(), n.afterCalculateTickRotation(), n.beforeFit(), n.fit(), n.afterFit(), n.afterUpdate(), n.minSize
                      },
                      afterUpdate: function() {
                          e.callCallback(this.options.afterUpdate, [this])
                      },
                      beforeSetDimensions: function() {
                          e.callCallback(this.options.beforeSetDimensions, [this])
                      },
                      setDimensions: function() {
                          var t = this;
                          t.isHorizontal() ? (t.width = t.maxWidth, t.left = 0, t.right = t.width) : (t.height = t.maxHeight, t.top = 0, t.bottom = t.height), t.paddingLeft = 0, t.paddingTop = 0, t.paddingRight = 0, t.paddingBottom = 0
                      },
                      afterSetDimensions: function() {
                          e.callCallback(this.options.afterSetDimensions, [this])
                      },
                      beforeDataLimits: function() {
                          e.callCallback(this.options.beforeDataLimits, [this])
                      },
                      determineDataLimits: e.noop,
                      afterDataLimits: function() {
                          e.callCallback(this.options.afterDataLimits, [this])
                      },
                      beforeBuildTicks: function() {
                          e.callCallback(this.options.beforeBuildTicks, [this])
                      },
                      buildTicks: e.noop,
                      afterBuildTicks: function() {
                          e.callCallback(this.options.afterBuildTicks, [this])
                      },
                      beforeTickToLabelConversion: function() {
                          e.callCallback(this.options.beforeTickToLabelConversion, [this])
                      },
                      convertTicksToLabels: function() {
                          var t = this;
                          t.ticks = t.ticks.map(function(e, a, i) {
                              return t.options.ticks.userCallback ? t.options.ticks.userCallback(e, a, i) : t.options.ticks.callback(e, a, i)
                          }, t)
                      },
                      afterTickToLabelConversion: function() {
                          e.callCallback(this.options.afterTickToLabelConversion, [this])
                      },
                      beforeCalculateTickRotation: function() {
                          e.callCallback(this.options.beforeCalculateTickRotation, [this])
                      },
                      calculateTickRotation: function() {
                          var a = this,
                              i = a.ctx,
                              n = t.defaults.global,
                              o = a.options.ticks,
                              r = e.getValueOrDefault(o.fontSize, n.defaultFontSize),
                              l = e.getValueOrDefault(o.fontStyle, n.defaultFontStyle),
                              s = e.getValueOrDefault(o.fontFamily, n.defaultFontFamily),
                              d = e.fontString(r, l, s);
                          i.font = d;
                          var u, c = i.measureText(a.ticks[0]).width,
                              h = i.measureText(a.ticks[a.ticks.length - 1]).width;
                          if (a.labelRotation = o.minRotation || 0, a.paddingRight = 0, a.paddingLeft = 0, a.options.display && a.isHorizontal()) {
                              a.paddingRight = h / 2 + 3, a.paddingLeft = c / 2 + 3, a.longestTextCache || (a.longestTextCache = {});
                              for (var f, g, p = e.longestText(i, d, a.ticks, a.longestTextCache), m = p, b = a.getPixelForTick(1) - a.getPixelForTick(0) - 6; m > b && a.labelRotation < o.maxRotation;) {
                                  if (f = Math.cos(e.toRadians(a.labelRotation)), g = Math.sin(e.toRadians(a.labelRotation)), u = f * c, u + r / 2 > a.yLabelWidth && (a.paddingLeft = u + r / 2), a.paddingRight = r / 2, g * p > a.maxHeight) {
                                      a.labelRotation--;
                                      break
                                  }
                                  a.labelRotation++, m = f * p
                              }
                          }
                          a.margins && (a.paddingLeft = Math.max(a.paddingLeft - a.margins.left, 0), a.paddingRight = Math.max(a.paddingRight - a.margins.right, 0))
                      },
                      afterCalculateTickRotation: function() {
                          e.callCallback(this.options.afterCalculateTickRotation, [this])
                      },
                      beforeFit: function() {
                          e.callCallback(this.options.beforeFit, [this])
                      },
                      fit: function() {
                          var a = this,
                              i = a.minSize = {
                                  width: 0,
                                  height: 0
                              },
                              n = a.options,
                              o = t.defaults.global,
                              r = n.ticks,
                              l = n.scaleLabel,
                              s = n.gridLines,
                              d = n.display,
                              u = a.isHorizontal(),
                              c = e.getValueOrDefault(r.fontSize, o.defaultFontSize),
                              h = e.getValueOrDefault(r.fontStyle, o.defaultFontStyle),
                              f = e.getValueOrDefault(r.fontFamily, o.defaultFontFamily),
                              g = e.fontString(c, h, f),
                              p = e.getValueOrDefault(l.fontSize, o.defaultFontSize),
                              m = n.gridLines.tickMarkLength;
                          if (u ? i.width = a.isFullWidth() ? a.maxWidth - a.margins.left - a.margins.right : a.maxWidth : i.width = d && s.drawTicks ? m : 0, u ? i.height = d && s.drawTicks ? m : 0 : i.height = a.maxHeight, l.display && d && (u ? i.height += 1.5 * p : i.width += 1.5 * p), r.display && d) {
                              a.longestTextCache || (a.longestTextCache = {});
                              var b = e.longestText(a.ctx, g, a.ticks, a.longestTextCache),
                                  v = e.numberOfLabelLines(a.ticks),
                                  x = .5 * c;
                              if (u) {
                                  a.longestLabelWidth = b;
                                  var y = Math.sin(e.toRadians(a.labelRotation)) * a.longestLabelWidth + c * v + x * v;
                                  i.height = Math.min(a.maxHeight, i.height + y), a.ctx.font = g;
                                  var k = a.ctx.measureText(a.ticks[0]).width,
                                      S = a.ctx.measureText(a.ticks[a.ticks.length - 1]).width,
                                      w = Math.cos(e.toRadians(a.labelRotation)),
                                      C = Math.sin(e.toRadians(a.labelRotation));
                                  a.paddingLeft = 0 !== a.labelRotation ? w * k + 3 : k / 2 + 3, a.paddingRight = 0 !== a.labelRotation ? C * (c / 2) + 3 : S / 2 + 3
                              } else {
                                  var M = a.maxWidth - i.width,
                                      D = r.mirror;
                                  D ? b = 0 : b += a.options.ticks.padding, M > b ? i.width += b : i.width = a.maxWidth, a.paddingTop = c / 2, a.paddingBottom = c / 2
                              }
                          }
                          a.margins && (a.paddingLeft = Math.max(a.paddingLeft - a.margins.left, 0), a.paddingTop = Math.max(a.paddingTop - a.margins.top, 0), a.paddingRight = Math.max(a.paddingRight - a.margins.right, 0), a.paddingBottom = Math.max(a.paddingBottom - a.margins.bottom, 0)), a.width = i.width, a.height = i.height
                      },
                      afterFit: function() {
                          e.callCallback(this.options.afterFit, [this])
                      },
                      isHorizontal: function() {
                          return "top" === this.options.position || "bottom" === this.options.position
                      },
                      isFullWidth: function() {
                          return this.options.fullWidth
                      },
                      getRightValue: function(t) {
                          return null === t || "undefined" == typeof t ? NaN : "number" == typeof t && isNaN(t) ? NaN : "object" == typeof t ? t instanceof Date || t.isValid ? t : this.getRightValue(this.isHorizontal() ? t.x : t.y) : t
                      },
                      getLabelForIndex: e.noop,
                      getPixelForValue: e.noop,
                      getValueForPixel: e.noop,
                      getPixelForTick: function(t, e) {
                          var a = this;
                          if (a.isHorizontal()) {
                              var i = a.width - (a.paddingLeft + a.paddingRight),
                                  n = i / Math.max(a.ticks.length - (a.options.gridLines.offsetGridLines ? 0 : 1), 1),
                                  o = n * t + a.paddingLeft;
                              e && (o += n / 2);
                              var r = a.left + Math.round(o);
                              return r += a.isFullWidth() ? a.margins.left : 0
                          }
                          var l = a.height - (a.paddingTop + a.paddingBottom);
                          return a.top + t * (l / (a.ticks.length - 1))
                      },
                      getPixelForDecimal: function(t) {
                          var e = this;
                          if (e.isHorizontal()) {
                              var a = e.width - (e.paddingLeft + e.paddingRight),
                                  i = a * t + e.paddingLeft,
                                  n = e.left + Math.round(i);
                              return n += e.isFullWidth() ? e.margins.left : 0
                          }
                          return e.top + t * e.height
                      },
                      getBasePixel: function() {
                          var t = this,
                              e = t.min,
                              a = t.max;
                          return t.getPixelForValue(t.beginAtZero ? 0 : 0 > e && 0 > a ? a : e > 0 && a > 0 ? e : 0)
                      },
                      draw: function(a) {
                          var i = this,
                              n = i.options;
                          if (n.display) {
                              var o, r, l = i.ctx,
                                  s = t.defaults.global,
                                  d = n.ticks,
                                  u = n.gridLines,
                                  c = n.scaleLabel,
                                  h = 0 !== i.labelRotation,
                                  f = d.autoSkip,
                                  g = i.isHorizontal();
                              d.maxTicksLimit && (r = d.maxTicksLimit);
                              var p = e.getValueOrDefault(d.fontColor, s.defaultFontColor),
                                  m = e.getValueOrDefault(d.fontSize, s.defaultFontSize),
                                  b = e.getValueOrDefault(d.fontStyle, s.defaultFontStyle),
                                  v = e.getValueOrDefault(d.fontFamily, s.defaultFontFamily),
                                  x = e.fontString(m, b, v),
                                  y = u.tickMarkLength,
                                  k = e.getValueOrDefault(u.borderDash, s.borderDash),
                                  S = e.getValueOrDefault(u.borderDashOffset, s.borderDashOffset),
                                  w = e.getValueOrDefault(c.fontColor, s.defaultFontColor),
                                  C = e.getValueOrDefault(c.fontSize, s.defaultFontSize),
                                  M = e.getValueOrDefault(c.fontStyle, s.defaultFontStyle),
                                  D = e.getValueOrDefault(c.fontFamily, s.defaultFontFamily),
                                  I = e.fontString(C, M, D),
                                  A = e.toRadians(i.labelRotation),
                                  P = Math.cos(A),
                                  T = i.longestLabelWidth * P;
                              l.fillStyle = p;
                              var F = [];
                              if (g) {
                                  if (o = !1, h && (T /= 2), (T + d.autoSkipPadding) * i.ticks.length > i.width - (i.paddingLeft + i.paddingRight) && (o = 1 + Math.floor((T + d.autoSkipPadding) * i.ticks.length / (i.width - (i.paddingLeft + i.paddingRight)))), r && i.ticks.length > r)
                                      for (; !o || i.ticks.length / (o || 1) > r;) o || (o = 1), o += 1;
                                  f || (o = !1)
                              }
                              var R = "right" === n.position ? i.left : i.right - y,
                                  _ = "right" === n.position ? i.left + y : i.right,
                                  V = "bottom" === n.position ? i.top : i.bottom - y,
                                  L = "bottom" === n.position ? i.top + y : i.bottom;
                              if (e.each(i.ticks, function(t, r) {
                                      if (void 0 !== t && null !== t) {
                                          var l = i.ticks.length === r + 1,
                                              s = o > 1 && r % o > 0 || r % o === 0 && r + o >= i.ticks.length;
                                          if ((!s || l) && void 0 !== t && null !== t) {
                                              var c, f;
                                              r === ("undefined" != typeof i.zeroLineIndex ? i.zeroLineIndex : 0) ? (c = u.zeroLineWidth, f = u.zeroLineColor) : (c = e.getValueAtIndexOrDefault(u.lineWidth, r), f = e.getValueAtIndexOrDefault(u.color, r));
                                              var p, m, b, v, x, w, C, M, D, I, P, T = "middle";
                                              if (g) {
                                                  h || (T = "top" === n.position ? "bottom" : "top"), P = h ? "right" : "center";
                                                  var O = i.getPixelForTick(r) + e.aliasPixel(c);
                                                  D = i.getPixelForTick(r, u.offsetGridLines) + d.labelOffset, I = h ? i.top + 12 : "top" === n.position ? i.bottom - y : i.top + y, p = b = x = C = O, m = V, v = L, w = a.top, M = a.bottom
                                              } else {
                                                  "left" === n.position ? d.mirror ? (D = i.right + d.padding, P = "left") : (D = i.right - d.padding, P = "right") : d.mirror ? (D = i.left - d.padding, P = "right") : (D = i.left + d.padding, P = "left");
                                                  var B = i.getPixelForTick(r);
                                                  B += e.aliasPixel(c), I = i.getPixelForTick(r, u.offsetGridLines), p = R, b = _, x = a.left, C = a.right, m = v = w = M = B
                                              }
                                              F.push({
                                                  tx1: p,
                                                  ty1: m,
                                                  tx2: b,
                                                  ty2: v,
                                                  x1: x,
                                                  y1: w,
                                                  x2: C,
                                                  y2: M,
                                                  labelX: D,
                                                  labelY: I,
                                                  glWidth: c,
                                                  glColor: f,
                                                  glBorderDash: k,
                                                  glBorderDashOffset: S,
                                                  rotation: -1 * A,
                                                  label: t,
                                                  textBaseline: T,
                                                  textAlign: P
                                              })
                                          }
                                      }
                                  }), e.each(F, function(t) {
                                      if (u.display && (l.save(), l.lineWidth = t.glWidth, l.strokeStyle = t.glColor, l.setLineDash && (l.setLineDash(t.glBorderDash), l.lineDashOffset = t.glBorderDashOffset), l.beginPath(), u.drawTicks && (l.moveTo(t.tx1, t.ty1), l.lineTo(t.tx2, t.ty2)), u.drawOnChartArea && (l.moveTo(t.x1, t.y1), l.lineTo(t.x2, t.y2)), l.stroke(), l.restore()), d.display) {
                                          l.save(), l.translate(t.labelX, t.labelY), l.rotate(t.rotation), l.font = x, l.textBaseline = t.textBaseline, l.textAlign = t.textAlign;
                                          var a = t.label;
                                          if (e.isArray(a))
                                              for (var i = 0, n = 0; i < a.length; ++i) l.fillText("" + a[i], 0, n), n += 1.5 * m;
                                          else l.fillText(a, 0, 0);
                                          l.restore()
                                      }
                                  }), c.display) {
                                  var O, B, W = 0;
                                  if (g) O = i.left + (i.right - i.left) / 2, B = "bottom" === n.position ? i.bottom - C / 2 : i.top + C / 2;
                                  else {
                                      var z = "left" === n.position;
                                      O = z ? i.left + C / 2 : i.right - C / 2, B = i.top + (i.bottom - i.top) / 2, W = z ? -.5 * Math.PI : .5 * Math.PI
                                  }
                                  l.save(), l.translate(O, B), l.rotate(W), l.textAlign = "center", l.textBaseline = "middle", l.fillStyle = w, l.font = I, l.fillText(c.labelString, 0, 0), l.restore()
                              }
                              if (u.drawBorder) {
                                  l.lineWidth = e.getValueAtIndexOrDefault(u.lineWidth, 0), l.strokeStyle = e.getValueAtIndexOrDefault(u.color, 0);
                                  var N = i.left,
                                      H = i.right,
                                      E = i.top,
                                      U = i.bottom,
                                      q = e.aliasPixel(l.lineWidth);
                                  g ? (E = U = "top" === n.position ? i.bottom : i.top, E += q, U += q) : (N = H = "left" === n.position ? i.right : i.left, N += q, H += q), l.beginPath(), l.moveTo(N, E), l.lineTo(H, U), l.stroke()
                              }
                          }
                      }
                  })
              }
          }, {}],
          32: [function(t, e, a) {
              "use strict";
              e.exports = function(t) {
                  var e = t.helpers;
                  t.scaleService = {
                      constructors: {},
                      defaults: {},
                      registerScaleType: function(t, a, i) {
                          this.constructors[t] = a, this.defaults[t] = e.clone(i)
                      },
                      getScaleConstructor: function(t) {
                          return this.constructors.hasOwnProperty(t) ? this.constructors[t] : void 0
                      },
                      getScaleDefaults: function(a) {
                          return this.defaults.hasOwnProperty(a) ? e.scaleMerge(t.defaults.scale, this.defaults[a]) : {}
                      },
                      updateScaleDefaults: function(t, a) {
                          var i = this.defaults;
                          i.hasOwnProperty(t) && (i[t] = e.extend(i[t], a))
                      },
                      addScalesToLayout: function(a) {
                          e.each(a.scales, function(e) {
                              t.layoutService.addBox(a, e)
                          })
                      }
                  }
              }
          }, {}],
          33: [function(t, e, a) {
              "use strict";
              e.exports = function(t) {
                  var e = t.helpers;
                  t.defaults.global.title = {
                      display: !1,
                      position: "top",
                      fullWidth: !0,
                      fontStyle: "bold",
                      padding: 10,
                      text: ""
                  };
                  var a = e.noop;
                  t.Title = t.Element.extend({
                      initialize: function(a) {
                          var i = this;
                          e.extend(i, a), i.options = e.configMerge(t.defaults.global.title, a.options), i.legendHitBoxes = []
                      },
                      beforeUpdate: function() {
                          var a = this.chart.options;
                          a && a.title && (this.options = e.configMerge(t.defaults.global.title, a.title))
                      },
                      update: function(t, e, a) {
                          var i = this;
                          return i.beforeUpdate(), i.maxWidth = t, i.maxHeight = e, i.margins = a, i.beforeSetDimensions(), i.setDimensions(), i.afterSetDimensions(), i.beforeBuildLabels(), i.buildLabels(), i.afterBuildLabels(), i.beforeFit(), i.fit(), i.afterFit(), i.afterUpdate(), i.minSize
                      },
                      afterUpdate: a,
                      beforeSetDimensions: a,
                      setDimensions: function() {
                          var t = this;
                          t.isHorizontal() ? (t.width = t.maxWidth, t.left = 0, t.right = t.width) : (t.height = t.maxHeight, t.top = 0, t.bottom = t.height), t.paddingLeft = 0, t.paddingTop = 0, t.paddingRight = 0, t.paddingBottom = 0, t.minSize = {
                              width: 0,
                              height: 0
                          }
                      },
                      afterSetDimensions: a,
                      beforeBuildLabels: a,
                      buildLabels: a,
                      afterBuildLabels: a,
                      beforeFit: a,
                      fit: function() {
                          var a = this,
                              i = e.getValueOrDefault,
                              n = a.options,
                              o = t.defaults.global,
                              r = n.display,
                              l = i(n.fontSize, o.defaultFontSize),
                              s = a.minSize;
                          a.isHorizontal() ? (s.width = a.maxWidth, s.height = r ? l + 2 * n.padding : 0) : (s.width = r ? l + 2 * n.padding : 0, s.height = a.maxHeight), a.width = s.width, a.height = s.height
                      },
                      afterFit: a,
                      isHorizontal: function() {
                          var t = this.options.position;
                          return "top" === t || "bottom" === t
                      },
                      draw: function() {
                          var a = this,
                              i = a.ctx,
                              n = e.getValueOrDefault,
                              o = a.options,
                              r = t.defaults.global;
                          if (o.display) {
                              var l, s, d = n(o.fontSize, r.defaultFontSize),
                                  u = n(o.fontStyle, r.defaultFontStyle),
                                  c = n(o.fontFamily, r.defaultFontFamily),
                                  h = e.fontString(d, u, c),
                                  f = 0,
                                  g = a.top,
                                  p = a.left,
                                  m = a.bottom,
                                  b = a.right;
                              i.fillStyle = n(o.fontColor, r.defaultFontColor), i.font = h, a.isHorizontal() ? (l = p + (b - p) / 2, s = g + (m - g) / 2) : (l = "left" === o.position ? p + d / 2 : b - d / 2, s = g + (m - g) / 2, f = Math.PI * ("left" === o.position ? -.5 : .5)), i.save(), i.translate(l, s), i.rotate(f), i.textAlign = "center", i.textBaseline = "middle", i.fillText(o.text, 0, 0), i.restore()
                          }
                      }
                  }), t.plugins.register({
                      beforeInit: function(e) {
                          var a = e.options,
                              i = a.title;
                          i && (e.titleBlock = new t.Title({
                              ctx: e.chart.ctx,
                              options: i,
                              chart: e
                          }), t.layoutService.addBox(e, e.titleBlock))
                      }
                  })
              }
          }, {}],
          34: [function(t, e, a) {
              "use strict";
              e.exports = function(t) {
                  function e(t, e) {
                      return e && (n.isArray(e) ? Array.prototype.push.apply(t, e) : t.push(e)), t
                  }
  
                  function a(t) {
                      if (!t.length) return !1;
                      var e, a, i = [],
                          n = [];
                      for (e = 0, a = t.length; a > e; ++e) {
                          var o = t[e];
                          if (o && o.hasValue()) {
                              var r = o.tooltipPosition();
                              i.push(r.x), n.push(r.y)
                          }
                      }
                      var l = 0,
                          s = 0;
                      for (e = 0; e < i.length; ++e) i[e] && (l += i[e], s += n[e]);
                      return {
                          x: Math.round(l / i.length),
                          y: Math.round(s / i.length)
                      }
                  }
  
                  function i(t) {
                      var e = t._xScale,
                          a = t._yScale || t._scale,
                          i = t._index,
                          n = t._datasetIndex;
                      return {
                          xLabel: e ? e.getLabelForIndex(i, n) : "",
                          yLabel: a ? a.getLabelForIndex(i, n) : "",
                          index: i,
                          datasetIndex: n
                      }
                  }
                  var n = t.helpers;
                  t.defaults.global.tooltips = {
                      enabled: !0,
                      custom: null,
                      mode: "single",
                      backgroundColor: "rgba(0,0,0,0.8)",
                      titleFontStyle: "bold",
                      titleSpacing: 2,
                      titleMarginBottom: 6,
                      titleFontColor: "#fff",
                      titleAlign: "left",
                      bodySpacing: 2,
                      bodyFontColor: "#fff",
                      bodyAlign: "left",
                      footerFontStyle: "bold",
                      footerSpacing: 2,
                      footerMarginTop: 6,
                      footerFontColor: "#fff",
                      footerAlign: "left",
                      yPadding: 6,
                      xPadding: 6,
                      yAlign: "center",
                      xAlign: "center",
                      caretSize: 5,
                      cornerRadius: 6,
                      multiKeyBackground: "#fff",
                      callbacks: {
                          beforeTitle: n.noop,
                          title: function(t, e) {
                              var a = "",
                                  i = e.labels,
                                  n = i ? i.length : 0;
                              if (t.length > 0) {
                                  var o = t[0];
                                  o.xLabel ? a = o.xLabel : n > 0 && o.index < n && (a = i[o.index])
                              }
                              return a
                          },
                          afterTitle: n.noop,
                          beforeBody: n.noop,
                          beforeLabel: n.noop,
                          label: function(t, e) {
                              var a = e.datasets[t.datasetIndex].label || "";
                              return a + ": " + t.yLabel
                          },
                          labelColor: function(t, e) {
                              var a = e.getDatasetMeta(t.datasetIndex),
                                  i = a.data[t.index],
                                  n = i._view;
                              return {
                                  borderColor: n.borderColor,
                                  backgroundColor: n.backgroundColor
                              }
                          },
                          afterLabel: n.noop,
                          afterBody: n.noop,
                          beforeFooter: n.noop,
                          footer: n.noop,
                          afterFooter: n.noop
                      }
                  }, t.Tooltip = t.Element.extend({
                      initialize: function() {
                          var e = this,
                              a = t.defaults.global,
                              i = e._options,
                              o = n.getValueOrDefault;
                          n.extend(e, {
                              _model: {
                                  xPadding: i.xPadding,
                                  yPadding: i.yPadding,
                                  xAlign: i.xAlign,
                                  yAlign: i.yAlign,
                                  bodyFontColor: i.bodyFontColor,
                                  _bodyFontFamily: o(i.bodyFontFamily, a.defaultFontFamily),
                                  _bodyFontStyle: o(i.bodyFontStyle, a.defaultFontStyle),
                                  _bodyAlign: i.bodyAlign,
                                  bodyFontSize: o(i.bodyFontSize, a.defaultFontSize),
                                  bodySpacing: i.bodySpacing,
                                  titleFontColor: i.titleFontColor,
                                  _titleFontFamily: o(i.titleFontFamily, a.defaultFontFamily),
                                  _titleFontStyle: o(i.titleFontStyle, a.defaultFontStyle),
                                  titleFontSize: o(i.titleFontSize, a.defaultFontSize),
                                  _titleAlign: i.titleAlign,
                                  titleSpacing: i.titleSpacing,
                                  titleMarginBottom: i.titleMarginBottom,
                                  footerFontColor: i.footerFontColor,
                                  _footerFontFamily: o(i.footerFontFamily, a.defaultFontFamily),
                                  _footerFontStyle: o(i.footerFontStyle, a.defaultFontStyle),
                                  footerFontSize: o(i.footerFontSize, a.defaultFontSize),
                                  _footerAlign: i.footerAlign,
                                  footerSpacing: i.footerSpacing,
                                  footerMarginTop: i.footerMarginTop,
                                  caretSize: i.caretSize,
                                  cornerRadius: i.cornerRadius,
                                  backgroundColor: i.backgroundColor,
                                  opacity: 0,
                                  legendColorBackground: i.multiKeyBackground
                              }
                          })
                      },
                      getTitle: function() {
                          var t = this,
                              a = t._options,
                              i = a.callbacks,
                              n = i.beforeTitle.apply(t, arguments),
                              o = i.title.apply(t, arguments),
                              r = i.afterTitle.apply(t, arguments),
                              l = [];
                          return l = e(l, n), l = e(l, o), l = e(l, r)
                      },
                      getBeforeBody: function() {
                          var t = this._options.callbacks.beforeBody.apply(this, arguments);
                          return n.isArray(t) ? t : void 0 !== t ? [t] : []
                      },
                      getBody: function(t, a) {
                          var i = this,
                              o = i._options.callbacks,
                              r = [];
                          return n.each(t, function(t) {
                              var n = {
                                  before: [],
                                  lines: [],
                                  after: []
                              };
                              e(n.before, o.beforeLabel.call(i, t, a)), e(n.lines, o.label.call(i, t, a)), e(n.after, o.afterLabel.call(i, t, a)), r.push(n)
                          }), r
                      },
                      getAfterBody: function() {
                          var t = this._options.callbacks.afterBody.apply(this, arguments);
                          return n.isArray(t) ? t : void 0 !== t ? [t] : []
                      },
                      getFooter: function() {
                          var t = this,
                              a = t._options.callbacks,
                              i = a.beforeFooter.apply(t, arguments),
                              n = a.footer.apply(t, arguments),
                              o = a.afterFooter.apply(t, arguments),
                              r = [];
                          return r = e(r, i), r = e(r, n), r = e(r, o)
                      },
                      update: function(t) {
                          var e, o, r = this,
                              l = r._options,
                              s = r._model,
                              d = r._active,
                              u = r._data,
                              c = r._chartInstance;
                          if (d.length) {
                              s.opacity = 1;
                              var h = [],
                                  f = a(d),
                                  g = [];
                              for (e = 0, o = d.length; o > e; ++e) g.push(i(d[e]));
                              l.itemSort && (g = g.sort(function(t, e) {
                                  return l.itemSort(t, e, u)
                              })), d.length > 1 && n.each(g, function(t) {
                                  h.push(l.callbacks.labelColor.call(r, t, c))
                              }), n.extend(s, {
                                  title: r.getTitle(g, u),
                                  beforeBody: r.getBeforeBody(g, u),
                                  body: r.getBody(g, u),
                                  afterBody: r.getAfterBody(g, u),
                                  footer: r.getFooter(g, u),
                                  x: Math.round(f.x),
                                  y: Math.round(f.y),
                                  caretPadding: n.getValueOrDefault(f.padding, 2),
                                  labelColors: h
                              });
                              var p = r.getTooltipSize(s);
                              r.determineAlignment(p), n.extend(s, r.getBackgroundPoint(s, p))
                          } else r._model.opacity = 0;
                          return t && l.custom && l.custom.call(r, s), r
                      },
                      getTooltipSize: function(t) {
                          var e = this._chart.ctx,
                              a = {
                                  height: 2 * t.yPadding,
                                  width: 0
                              },
                              i = t.body,
                              o = i.reduce(function(t, e) {
                                  return t + e.before.length + e.lines.length + e.after.length
                              }, 0);
                          o += t.beforeBody.length + t.afterBody.length;
                          var r = t.title.length,
                              l = t.footer.length,
                              s = t.titleFontSize,
                              d = t.bodyFontSize,
                              u = t.footerFontSize;
                          a.height += r * s, a.height += (r - 1) * t.titleSpacing, a.height += r ? t.titleMarginBottom : 0, a.height += o * d, a.height += o ? (o - 1) * t.bodySpacing : 0, a.height += l ? t.footerMarginTop : 0, a.height += l * u, a.height += l ? (l - 1) * t.footerSpacing : 0;
                          var c = 0,
                              h = function(t) {
                                  a.width = Math.max(a.width, e.measureText(t).width + c)
                              };
                          return e.font = n.fontString(s, t._titleFontStyle, t._titleFontFamily), n.each(t.title, h), e.font = n.fontString(d, t._bodyFontStyle, t._bodyFontFamily), n.each(t.beforeBody.concat(t.afterBody), h), c = i.length > 1 ? d + 2 : 0, n.each(i, function(t) {
                              n.each(t.before, h), n.each(t.lines, h), n.each(t.after, h)
                          }), c = 0, e.font = n.fontString(u, t._footerFontStyle, t._footerFontFamily), n.each(t.footer, h), a.width += 2 * t.xPadding, a
                      },
                      determineAlignment: function(t) {
                          var e = this,
                              a = e._model,
                              i = e._chart,
                              n = e._chartInstance.chartArea;
                          a.y < t.height ? a.yAlign = "top" : a.y > i.height - t.height && (a.yAlign = "bottom");
                          var o, r, l, s, d, u = (n.left + n.right) / 2,
                              c = (n.top + n.bottom) / 2;
                          "center" === a.yAlign ? (o = function(t) {
                              return u >= t
                          }, r = function(t) {
                              return t > u
                          }) : (o = function(e) {
                              return e <= t.width / 2
                          }, r = function(e) {
                              return e >= i.width - t.width / 2
                          }), l = function(e) {
                              return e + t.width > i.width
                          }, s = function(e) {
                              return e - t.width < 0
                          }, d = function(t) {
                              return c >= t ? "top" : "bottom"
                          }, o(a.x) ? (a.xAlign = "left", l(a.x) && (a.xAlign = "center", a.yAlign = d(a.y))) : r(a.x) && (a.xAlign = "right", s(a.x) && (a.xAlign = "center", a.yAlign = d(a.y)))
                      },
                      getBackgroundPoint: function(t, e) {
                          var a = {
                                  x: t.x,
                                  y: t.y
                              },
                              i = t.caretSize,
                              n = t.caretPadding,
                              o = t.cornerRadius,
                              r = t.xAlign,
                              l = t.yAlign,
                              s = i + n,
                              d = o + n;
                          return "right" === r ? a.x -= e.width : "center" === r && (a.x -= e.width / 2), "top" === l ? a.y += s : "bottom" === l ? a.y -= e.height + s : a.y -= e.height / 2, "center" === l ? "left" === r ? a.x += s : "right" === r && (a.x -= s) : "left" === r ? a.x -= d : "right" === r && (a.x += d), a
                      },
                      drawCaret: function(t, e, a) {
                          var i, o, r, l, s, d, u = this._view,
                              c = this._chart.ctx,
                              h = u.caretSize,
                              f = u.cornerRadius,
                              g = u.xAlign,
                              p = u.yAlign,
                              m = t.x,
                              b = t.y,
                              v = e.width,
                              x = e.height;
                          "center" === p ? ("left" === g ? (i = m, o = i - h, r = i) : (i = m + v, o = i + h, r = i), s = b + x / 2, l = s - h, d = s + h) : ("left" === g ? (i = m + f, o = i + h, r = o + h) : "right" === g ? (i = m + v - f, o = i - h, r = o - h) : (o = m + v / 2, i = o - h, r = o + h), "top" === p ? (l = b, s = l - h, d = l) : (l = b + x, s = l + h, d = l));
                          var y = n.color(u.backgroundColor);
                          c.fillStyle = y.alpha(a * y.alpha()).rgbString(), c.beginPath(), c.moveTo(i, l), c.lineTo(o, s), c.lineTo(r, d), c.closePath(), c.fill()
                      },
                      drawTitle: function(t, e, a, i) {
                          var o = e.title;
                          if (o.length) {
                              a.textAlign = e._titleAlign, a.textBaseline = "top";
                              var r = e.titleFontSize,
                                  l = e.titleSpacing,
                                  s = n.color(e.titleFontColor);
                              a.fillStyle = s.alpha(i * s.alpha()).rgbString(), a.font = n.fontString(r, e._titleFontStyle, e._titleFontFamily);
                              var d, u;
                              for (d = 0, u = o.length; u > d; ++d) a.fillText(o[d], t.x, t.y), t.y += r + l, d + 1 === o.length && (t.y += e.titleMarginBottom - l)
                          }
                      },
                      drawBody: function(t, e, a, i) {
                          var o = e.bodyFontSize,
                              r = e.bodySpacing,
                              l = e.body;
                          a.textAlign = e._bodyAlign, a.textBaseline = "top";
                          var s = n.color(e.bodyFontColor),
                              d = s.alpha(i * s.alpha()).rgbString();
                          a.fillStyle = d, a.font = n.fontString(o, e._bodyFontStyle, e._bodyFontFamily);
                          var u = 0,
                              c = function(e) {
                                  a.fillText(e, t.x + u, t.y), t.y += o + r
                              };
                          n.each(e.beforeBody, c);
                          var h = l.length > 1;
                          u = h ? o + 2 : 0, n.each(l, function(r, l) {
                              n.each(r.before, c), n.each(r.lines, function(r) {
                                  h && (a.fillStyle = n.color(e.legendColorBackground).alpha(i).rgbaString(), a.fillRect(t.x, t.y, o, o), a.strokeStyle = n.color(e.labelColors[l].borderColor).alpha(i).rgbaString(), a.strokeRect(t.x, t.y, o, o), a.fillStyle = n.color(e.labelColors[l].backgroundColor).alpha(i).rgbaString(), a.fillRect(t.x + 1, t.y + 1, o - 2, o - 2), a.fillStyle = d), c(r)
                              }), n.each(r.after, c)
                          }), u = 0, n.each(e.afterBody, c), t.y -= r
                      },
                      drawFooter: function(t, e, a, i) {
                          var o = e.footer;
                          if (o.length) {
                              t.y += e.footerMarginTop, a.textAlign = e._footerAlign, a.textBaseline = "top";
                              var r = n.color(e.footerFontColor);
                              a.fillStyle = r.alpha(i * r.alpha()).rgbString(), a.font = n.fontString(e.footerFontSize, e._footerFontStyle, e._footerFontFamily), n.each(o, function(i) {
                                  a.fillText(i, t.x, t.y), t.y += e.footerFontSize + e.footerSpacing
                              })
                          }
                      },
                      draw: function() {
                          var t = this._chart.ctx,
                              e = this._view;
                          if (0 !== e.opacity) {
                              var a = this.getTooltipSize(e),
                                  i = {
                                      x: e.x,
                                      y: e.y
                                  },
                                  o = Math.abs(e.opacity < .001) ? 0 : e.opacity;
                              if (this._options.enabled) {
                                  var r = n.color(e.backgroundColor);
                                  t.fillStyle = r.alpha(o * r.alpha()).rgbString(), n.drawRoundedRectangle(t, i.x, i.y, a.width, a.height, e.cornerRadius), t.fill(), this.drawCaret(i, a, o), i.x += e.xPadding, i.y += e.yPadding, this.drawTitle(i, e, t, o), this.drawBody(i, e, t, o), this.drawFooter(i, e, t, o)
                              }
                          }
                      }
                  })
              }
          }, {}],
          35: [function(t, e, a) {
              "use strict";
              e.exports = function(t) {
                  var e = t.helpers,
                      a = t.defaults.global;
                  a.elements.arc = {
                      backgroundColor: a.defaultColor,
                      borderColor: "#fff",
                      borderWidth: 2
                  }, t.elements.Arc = t.Element.extend({
                      inLabelRange: function(t) {
                          var e = this._view;
                          return e ? Math.pow(t - e.x, 2) < Math.pow(e.radius + e.hoverRadius, 2) : !1
                      },
                      inRange: function(t, a) {
                          var i = this._view;
                          if (i) {
                              for (var n = e.getAngleFromPoint(i, {
                                      x: t,
                                      y: a
                                  }), o = n.angle, r = n.distance, l = i.startAngle, s = i.endAngle; l > s;) s += 2 * Math.PI;
                              for (; o > s;) o -= 2 * Math.PI;
                              for (; l > o;) o += 2 * Math.PI;
                              var d = o >= l && s >= o,
                                  u = r >= i.innerRadius && r <= i.outerRadius;
                              return d && u
                          }
                          return !1
                      },
                      tooltipPosition: function() {
                          var t = this._view,
                              e = t.startAngle + (t.endAngle - t.startAngle) / 2,
                              a = (t.outerRadius - t.innerRadius) / 2 + t.innerRadius;
                          return {
                              x: t.x + Math.cos(e) * a,
                              y: t.y + Math.sin(e) * a
                          }
                      },
                      draw: function() {
                          var t = this._chart.ctx,
                              e = this._view,
                              a = e.startAngle,
                              i = e.endAngle;
                          t.beginPath(), t.arc(e.x, e.y, e.outerRadius, a, i), t.arc(e.x, e.y, e.innerRadius, i, a, !0), t.closePath(), t.strokeStyle = e.borderColor, t.lineWidth = e.borderWidth, t.fillStyle = e.backgroundColor, t.fill(), t.lineJoin = "bevel", e.borderWidth && t.stroke()
                      }
                  })
              }
          }, {}],
          36: [function(t, e, a) {
              "use strict";
              e.exports = function(t) {
                  var e = t.helpers,
                      a = t.defaults.global;
                  t.defaults.global.elements.line = {
                      tension: .4,
                      backgroundColor: a.defaultColor,
                      borderWidth: 3,
                      borderColor: a.defaultColor,
                      borderCapStyle: "butt",
                      borderDash: [],
                      borderDashOffset: 0,
                      borderJoinStyle: "miter",
                      capBezierPoints: !0,
                      fill: !0
                  }, t.elements.Line = t.Element.extend({
                      draw: function() {
                          function t(t, e) {
                              var a = e._view;
                              e._view.steppedLine === !0 ? (s.lineTo(e._view.x, t._view.y), s.lineTo(e._view.x, e._view.y)) : 0 === e._view.tension ? s.lineTo(a.x, a.y) : s.bezierCurveTo(t._view.controlPointNextX, t._view.controlPointNextY, a.controlPointPreviousX, a.controlPointPreviousY, a.x, a.y)
                          }
                          var i = this,
                              n = i._view,
                              o = n.spanGaps,
                              r = n.scaleZero,
                              l = i._loop,
                              s = i._chart.ctx;
                          s.save();
                          var d = i._children.slice(),
                              u = -1;
                          l && d.length && d.push(d[0]);
                          var c, h, f, g;
                          if (d.length && n.fill) {
                              for (s.beginPath(), c = 0; c < d.length; ++c) h = d[c], f = e.previousItem(d, c), g = h._view, 0 === c ? (l ? s.moveTo(r.x, r.y) : s.moveTo(g.x, r), g.skip || (u = c, s.lineTo(g.x, g.y))) : (f = -1 === u ? f : d[u], g.skip ? o || u !== c - 1 || (l ? s.lineTo(r.x, r.y) : s.lineTo(f._view.x, r)) : (u !== c - 1 ? o && -1 !== u ? t(f, h) : l ? s.lineTo(g.x, g.y) : (s.lineTo(g.x, r), s.lineTo(g.x, g.y)) : t(f, h), u = c));
                              l || -1 === u || s.lineTo(d[u]._view.x, r), s.fillStyle = n.backgroundColor || a.defaultColor, s.closePath(), s.fill()
                          }
                          var p = a.elements.line;
                          for (s.lineCap = n.borderCapStyle || p.borderCapStyle, s.setLineDash && s.setLineDash(n.borderDash || p.borderDash), s.lineDashOffset = n.borderDashOffset || p.borderDashOffset, s.lineJoin = n.borderJoinStyle || p.borderJoinStyle, s.lineWidth = n.borderWidth || p.borderWidth, s.strokeStyle = n.borderColor || a.defaultColor, s.beginPath(), u = -1, c = 0; c < d.length; ++c) h = d[c], f = e.previousItem(d, c), g = h._view, 0 === c ? g.skip || (s.moveTo(g.x, g.y), u = c) : (f = -1 === u ? f : d[u], g.skip || (u !== c - 1 && !o || -1 === u ? s.moveTo(g.x, g.y) : t(f, h), u = c));
                          s.stroke(), s.restore()
                      }
                  })
              }
          }, {}],
          37: [function(t, e, a) {
              "use strict";
              e.exports = function(t) {
                  var e = t.helpers,
                      a = t.defaults.global,
                      i = a.defaultColor;
                  a.elements.point = {
                      radius: 3,
                      pointStyle: "circle",
                      backgroundColor: i,
                      borderWidth: 1,
                      borderColor: i,
                      hitRadius: 1,
                      hoverRadius: 4,
                      hoverBorderWidth: 1
                  }, t.elements.Point = t.Element.extend({
                      inRange: function(t, e) {
                          var a = this._view;
                          return a ? Math.pow(t - a.x, 2) + Math.pow(e - a.y, 2) < Math.pow(a.hitRadius + a.radius, 2) : !1
                      },
                      inLabelRange: function(t) {
                          var e = this._view;
                          return e ? Math.pow(t - e.x, 2) < Math.pow(e.radius + e.hitRadius, 2) : !1
                      },
                      tooltipPosition: function() {
                          var t = this._view;
                          return {
                              x: t.x,
                              y: t.y,
                              padding: t.radius + t.borderWidth
                          }
                      },
                      draw: function() {
                          var n = this._view,
                              o = this._chart.ctx,
                              r = n.pointStyle,
                              l = n.radius,
                              s = n.x,
                              d = n.y;
                          n.skip || (o.strokeStyle = n.borderColor || i, o.lineWidth = e.getValueOrDefault(n.borderWidth, a.elements.point.borderWidth), o.fillStyle = n.backgroundColor || i, t.canvasHelpers.drawPoint(o, r, l, s, d))
                      }
                  })
              }
          }, {}],
          38: [function(t, e, a) {
              "use strict";
              e.exports = function(t) {
                  var e = t.defaults.global;
                  e.elements.rectangle = {
                      backgroundColor: e.defaultColor,
                      borderWidth: 0,
                      borderColor: e.defaultColor,
                      borderSkipped: "bottom"
                  }, t.elements.Rectangle = t.Element.extend({
                      draw: function() {
                          function t(t) {
                              return s[(u + t) % 4]
                          }
                          var e = this._chart.ctx,
                              a = this._view,
                              i = a.width / 2,
                              n = a.x - i,
                              o = a.x + i,
                              r = a.base - (a.base - a.y),
                              l = a.borderWidth / 2;
                          a.borderWidth && (n += l, o -= l, r += l), e.beginPath(), e.fillStyle = a.backgroundColor, e.strokeStyle = a.borderColor, e.lineWidth = a.borderWidth;
                          var s = [
                                  [n, a.base],
                                  [n, r],
                                  [o, r],
                                  [o, a.base]
                              ],
                              d = ["bottom", "left", "top", "right"],
                              u = d.indexOf(a.borderSkipped, 0); - 1 === u && (u = 0), e.moveTo.apply(e, t(0));
                          for (var c = 1; 4 > c; c++) e.lineTo.apply(e, t(c));
                          e.fill(), a.borderWidth && e.stroke()
                      },
                      height: function() {
                          var t = this._view;
                          return t.base - t.y
                      },
                      inRange: function(t, e) {
                          var a = this._view;
                          return a ? a.y < a.base ? t >= a.x - a.width / 2 && t <= a.x + a.width / 2 && e >= a.y && e <= a.base : t >= a.x - a.width / 2 && t <= a.x + a.width / 2 && e >= a.base && e <= a.y : !1
                      },
                      inLabelRange: function(t) {
                          var e = this._view;
                          return e ? t >= e.x - e.width / 2 && t <= e.x + e.width / 2 : !1
                      },
                      tooltipPosition: function() {
                          var t = this._view;
                          return {
                              x: t.x,
                              y: t.y
                          }
                      }
                  })
              }
          }, {}],
          39: [function(t, e, a) {
              "use strict";
              e.exports = function(t) {
                  var e = t.helpers,
                      a = {
                          position: "bottom"
                      },
                      i = t.Scale.extend({
                          getLabels: function() {
                              var t = this.chart.data;
                              return (this.isHorizontal() ? t.xLabels : t.yLabels) || t.labels
                          },
                          determineDataLimits: function() {
                              var t = this,
                                  a = t.getLabels();
                              t.minIndex = 0, t.maxIndex = a.length - 1;
                              var i;
                              void 0 !== t.options.ticks.min && (i = e.indexOf(a, t.options.ticks.min), t.minIndex = -1 !== i ? i : t.minIndex), void 0 !== t.options.ticks.max && (i = e.indexOf(a, t.options.ticks.max), t.maxIndex = -1 !== i ? i : t.maxIndex), t.min = a[t.minIndex], t.max = a[t.maxIndex]
                          },
                          buildTicks: function() {
                              var t = this,
                                  e = t.getLabels();
                              t.ticks = 0 === t.minIndex && t.maxIndex === e.length - 1 ? e : e.slice(t.minIndex, t.maxIndex + 1)
                          },
                          getLabelForIndex: function(t) {
                              return this.ticks[t]
                          },
                          getPixelForValue: function(t, e, a, i) {
                              var n = this,
                                  o = Math.max(n.maxIndex + 1 - n.minIndex - (n.options.gridLines.offsetGridLines ? 0 : 1), 1);
                              if (void 0 !== t && isNaN(e)) {
                                  var r = n.getLabels(),
                                      l = r.indexOf(t);
                                  e = -1 !== l ? l : e
                              }
                              if (n.isHorizontal()) {
                                  var s = n.width - (n.paddingLeft + n.paddingRight),
                                      d = s / o,
                                      u = d * (e - n.minIndex) + n.paddingLeft;
                                  return (n.options.gridLines.offsetGridLines && i || n.maxIndex === n.minIndex && i) && (u += d / 2), n.left + Math.round(u)
                              }
                              var c = n.height - (n.paddingTop + n.paddingBottom),
                                  h = c / o,
                                  f = h * (e - n.minIndex) + n.paddingTop;
                              return n.options.gridLines.offsetGridLines && i && (f += h / 2), n.top + Math.round(f)
                          },
                          getPixelForTick: function(t, e) {
                              return this.getPixelForValue(this.ticks[t], t + this.minIndex, null, e)
                          },
                          getValueForPixel: function(t) {
                              var e, a = this,
                                  i = Math.max(a.ticks.length - (a.options.gridLines.offsetGridLines ? 0 : 1), 1),
                                  n = a.isHorizontal(),
                                  o = n ? a.width - (a.paddingLeft + a.paddingRight) : a.height - (a.paddingTop + a.paddingBottom),
                                  r = o / i;
                              return t -= n ? a.left : a.top, a.options.gridLines.offsetGridLines && (t -= r / 2), t -= n ? a.paddingLeft : a.paddingTop, e = 0 >= t ? 0 : Math.round(t / r)
                          },
                          getBasePixel: function() {
                              return this.bottom
                          }
                      });
                  t.scaleService.registerScaleType("category", i, a)
              }
          }, {}],
          40: [function(t, e, a) {
              "use strict";
              e.exports = function(t) {
                  var e = t.helpers,
                      a = {
                          position: "left",
                          ticks: {
                              callback: function(t, a, i) {
                                  var n = i.length > 3 ? i[2] - i[1] : i[1] - i[0];
                                  Math.abs(n) > 1 && t !== Math.floor(t) && (n = t - Math.floor(t));
                                  var o = e.log10(Math.abs(n)),
                                      r = "";
                                  if (0 !== t) {
                                      var l = -1 * Math.floor(o);
                                      l = Math.max(Math.min(l, 20), 0), r = t.toFixed(l)
                                  } else r = "0";
                                  return r
                              }
                          }
                      },
                      i = t.LinearScaleBase.extend({
                          determineDataLimits: function() {
                              function t(t) {
                                  return l ? t.xAxisID === a.id : t.yAxisID === a.id
                              }
                              var a = this,
                                  i = a.options,
                                  n = a.chart,
                                  o = n.data,
                                  r = o.datasets,
                                  l = a.isHorizontal();
                              if (a.min = null, a.max = null, i.stacked) {
                                  var s = {},
                                      d = !1,
                                      u = !1;
                                  e.each(r, function(o, r) {
                                      var l = n.getDatasetMeta(r);
                                      void 0 === s[l.type] && (s[l.type] = {
                                          positiveValues: [],
                                          negativeValues: []
                                      });
                                      var c = s[l.type].positiveValues,
                                          h = s[l.type].negativeValues;
                                      n.isDatasetVisible(r) && t(l) && e.each(o.data, function(t, e) {
                                          var n = +a.getRightValue(t);
                                          isNaN(n) || l.data[e].hidden || (c[e] = c[e] || 0, h[e] = h[e] || 0, i.relativePoints ? c[e] = 100 : 0 > n ? (u = !0, h[e] += n) : (d = !0, c[e] += n))
                                      })
                                  }), e.each(s, function(t) {
                                      var i = t.positiveValues.concat(t.negativeValues),
                                          n = e.min(i),
                                          o = e.max(i);
                                      a.min = null === a.min ? n : Math.min(a.min, n), a.max = null === a.max ? o : Math.max(a.max, o)
                                  })
                              } else e.each(r, function(i, o) {
                                  var r = n.getDatasetMeta(o);
                                  n.isDatasetVisible(o) && t(r) && e.each(i.data, function(t, e) {
                                      var i = +a.getRightValue(t);
                                      isNaN(i) || r.data[e].hidden || (null === a.min ? a.min = i : i < a.min && (a.min = i), null === a.max ? a.max = i : i > a.max && (a.max = i))
                                  })
                              });
                              this.handleTickRangeOptions()
                          },
                          getTickLimit: function() {
                              var a, i = this,
                                  n = i.options.ticks;
                              if (i.isHorizontal()) a = Math.min(n.maxTicksLimit ? n.maxTicksLimit : 11, Math.ceil(i.width / 50));
                              else {
                                  var o = e.getValueOrDefault(n.fontSize, t.defaults.global.defaultFontSize);
                                  a = Math.min(n.maxTicksLimit ? n.maxTicksLimit : 11, Math.ceil(i.height / (2 * o)))
                              }
                              return a
                          },
                          handleDirectionalChanges: function() {
                              this.isHorizontal() || this.ticks.reverse()
                          },
                          getLabelForIndex: function(t, e) {
                              return +this.getRightValue(this.chart.data.datasets[e].data[t])
                          },
                          getPixelForValue: function(t) {
                              var e, a, i = this,
                                  n = i.paddingLeft,
                                  o = i.paddingBottom,
                                  r = i.start,
                                  l = +i.getRightValue(t),
                                  s = i.end - r;
                              return i.isHorizontal() ? (a = i.width - (n + i.paddingRight), e = i.left + a / s * (l - r), Math.round(e + n)) : (a = i.height - (i.paddingTop + o), e = i.bottom - o - a / s * (l - r), Math.round(e))
                          },
                          getValueForPixel: function(t) {
                              var e = this,
                                  a = e.isHorizontal(),
                                  i = e.paddingLeft,
                                  n = e.paddingBottom,
                                  o = a ? e.width - (i + e.paddingRight) : e.height - (e.paddingTop + n),
                                  r = (a ? t - e.left - i : e.bottom - n - t) / o;
                              return e.start + (e.end - e.start) * r
                          },
                          getPixelForTick: function(t) {
                              return this.getPixelForValue(this.ticksAsNumbers[t])
                          }
                      });
                  t.scaleService.registerScaleType("linear", i, a)
              }
          }, {}],
          41: [function(t, e, a) {
              "use strict";
              e.exports = function(t) {
                  var e = t.helpers,
                      a = e.noop;
                  t.LinearScaleBase = t.Scale.extend({
                      handleTickRangeOptions: function() {
                          var t = this,
                              a = t.options,
                              i = a.ticks;
                          if (i.beginAtZero) {
                              var n = e.sign(t.min),
                                  o = e.sign(t.max);
                              0 > n && 0 > o ? t.max = 0 : n > 0 && o > 0 && (t.min = 0)
                          }
                          void 0 !== i.min ? t.min = i.min : void 0 !== i.suggestedMin && (t.min = Math.min(t.min, i.suggestedMin)), void 0 !== i.max ? t.max = i.max : void 0 !== i.suggestedMax && (t.max = Math.max(t.max, i.suggestedMax)), t.min === t.max && (t.max++, i.beginAtZero || t.min--)
                      },
                      getTickLimit: a,
                      handleDirectionalChanges: a,
                      buildTicks: function() {
                          var t = this,
                              a = t.options,
                              i = t.ticks = [],
                              n = a.ticks,
                              o = e.getValueOrDefault,
                              r = t.getTickLimit();
                          r = Math.max(2, r);
                          var l, s = n.fixedStepSize && n.fixedStepSize > 0 || n.stepSize && n.stepSize > 0;
                          if (s) l = o(n.fixedStepSize, n.stepSize);
                          else {
                              var d = e.niceNum(t.max - t.min, !1);
                              l = e.niceNum(d / (r - 1), !0)
                          }
                          var u = Math.floor(t.min / l) * l,
                              c = Math.ceil(t.max / l) * l,
                              h = (c - u) / l;
                          h = e.almostEquals(h, Math.round(h), l / 1e3) ? Math.round(h) : Math.ceil(h), i.push(void 0 !== n.min ? n.min : u);
                          for (var f = 1; h > f; ++f) i.push(u + f * l);
                          i.push(void 0 !== n.max ? n.max : c), t.handleDirectionalChanges(), t.max = e.max(i), t.min = e.min(i), n.reverse ? (i.reverse(), t.start = t.max, t.end = t.min) : (t.start = t.min, t.end = t.max)
                      },
                      convertTicksToLabels: function() {
                          var e = this;
                          e.ticksAsNumbers = e.ticks.slice(), e.zeroLineIndex = e.ticks.indexOf(0), t.Scale.prototype.convertTicksToLabels.call(e)
                      }
                  })
              }
          }, {}],
          42: [function(t, e, a) {
              "use strict";
              e.exports = function(t) {
                  var e = t.helpers,
                      a = {
                          position: "left",
                          ticks: {
                              callback: function(t, a, i) {
                                  var n = t / Math.pow(10, Math.floor(e.log10(t)));
                                  return 0 === t ? "0" : 1 === n || 2 === n || 5 === n || 0 === a || a === i.length - 1 ? t.toExponential() : ""
                              }
                          }
                      },
                      i = t.Scale.extend({
                          determineDataLimits: function() {
                              function t(t) {
                                  return d ? t.xAxisID === a.id : t.yAxisID === a.id
                              }
                              var a = this,
                                  i = a.options,
                                  n = i.ticks,
                                  o = a.chart,
                                  r = o.data,
                                  l = r.datasets,
                                  s = e.getValueOrDefault,
                                  d = a.isHorizontal();
                              if (a.min = null, a.max = null, a.minNotZero = null, i.stacked) {
                                  var u = {};
                                  e.each(l, function(n, r) {
                                      var l = o.getDatasetMeta(r);
                                      o.isDatasetVisible(r) && t(l) && (void 0 === u[l.type] && (u[l.type] = []), e.each(n.data, function(t, e) {
                                          var n = u[l.type],
                                              o = +a.getRightValue(t);
                                          isNaN(o) || l.data[e].hidden || (n[e] = n[e] || 0, i.relativePoints ? n[e] = 100 : n[e] += o)
                                      }))
                                  }), e.each(u, function(t) {
                                      var i = e.min(t),
                                          n = e.max(t);
                                      a.min = null === a.min ? i : Math.min(a.min, i), a.max = null === a.max ? n : Math.max(a.max, n)
                                  })
                              } else e.each(l, function(i, n) {
                                  var r = o.getDatasetMeta(n);
                                  o.isDatasetVisible(n) && t(r) && e.each(i.data, function(t, e) {
                                      var i = +a.getRightValue(t);
                                      isNaN(i) || r.data[e].hidden || (null === a.min ? a.min = i : i < a.min && (a.min = i), null === a.max ? a.max = i : i > a.max && (a.max = i), 0 !== i && (null === a.minNotZero || i < a.minNotZero) && (a.minNotZero = i))
                                  })
                              });
                              a.min = s(n.min, a.min), a.max = s(n.max, a.max), a.min === a.max && (0 !== a.min && null !== a.min ? (a.min = Math.pow(10, Math.floor(e.log10(a.min)) - 1),
                                  a.max = Math.pow(10, Math.floor(e.log10(a.max)) + 1)) : (a.min = 1, a.max = 10))
                          },
                          buildTicks: function() {
                              for (var t = this, a = t.options, i = a.ticks, n = e.getValueOrDefault, o = t.ticks = [], r = n(i.min, Math.pow(10, Math.floor(e.log10(t.min)))); r < t.max;) {
                                  o.push(r);
                                  var l, s;
                                  0 === r ? (l = Math.floor(e.log10(t.minNotZero)), s = Math.round(t.minNotZero / Math.pow(10, l))) : (l = Math.floor(e.log10(r)), s = Math.floor(r / Math.pow(10, l)) + 1), 10 === s && (s = 1, ++l), r = s * Math.pow(10, l)
                              }
                              var d = n(i.max, r);
                              o.push(d), t.isHorizontal() || o.reverse(), t.max = e.max(o), t.min = e.min(o), i.reverse ? (o.reverse(), t.start = t.max, t.end = t.min) : (t.start = t.min, t.end = t.max)
                          },
                          convertTicksToLabels: function() {
                              this.tickValues = this.ticks.slice(), t.Scale.prototype.convertTicksToLabels.call(this)
                          },
                          getLabelForIndex: function(t, e) {
                              return +this.getRightValue(this.chart.data.datasets[e].data[t])
                          },
                          getPixelForTick: function(t) {
                              return this.getPixelForValue(this.tickValues[t])
                          },
                          getPixelForValue: function(t) {
                              var a, i, n, o = this,
                                  r = o.start,
                                  l = +o.getRightValue(t),
                                  s = o.paddingTop,
                                  d = o.paddingBottom,
                                  u = o.paddingLeft,
                                  c = o.options,
                                  h = c.ticks;
                              return o.isHorizontal() ? (n = e.log10(o.end) - e.log10(r), 0 === l ? i = o.left + u : (a = o.width - (u + o.paddingRight), i = o.left + a / n * (e.log10(l) - e.log10(r)), i += u)) : (a = o.height - (s + d), 0 !== r || h.reverse ? 0 === o.end && h.reverse ? (n = e.log10(o.start) - e.log10(o.minNotZero), i = l === o.end ? o.top + s : l === o.minNotZero ? o.top + s + .02 * a : o.top + s + .02 * a + .98 * a / n * (e.log10(l) - e.log10(o.minNotZero))) : (n = e.log10(o.end) - e.log10(r), a = o.height - (s + d), i = o.bottom - d - a / n * (e.log10(l) - e.log10(r))) : (n = e.log10(o.end) - e.log10(o.minNotZero), i = l === r ? o.bottom - d : l === o.minNotZero ? o.bottom - d - .02 * a : o.bottom - d - .02 * a - .98 * a / n * (e.log10(l) - e.log10(o.minNotZero)))), i
                          },
                          getValueForPixel: function(t) {
                              var a, i, n = this,
                                  o = e.log10(n.end) - e.log10(n.start);
                              return n.isHorizontal() ? (i = n.width - (n.paddingLeft + n.paddingRight), a = n.start * Math.pow(10, (t - n.left - n.paddingLeft) * o / i)) : (i = n.height - (n.paddingTop + n.paddingBottom), a = Math.pow(10, (n.bottom - n.paddingBottom - t) * o / i) / n.start), a
                          }
                      });
                  t.scaleService.registerScaleType("logarithmic", i, a)
              }
          }, {}],
          43: [function(t, e, a) {
              "use strict";
              e.exports = function(t) {
                  var e = t.helpers,
                      a = t.defaults.global,
                      i = {
                          display: !0,
                          animate: !0,
                          lineArc: !1,
                          position: "chartArea",
                          angleLines: {
                              display: !0,
                              color: "rgba(0, 0, 0, 0.1)",
                              lineWidth: 1
                          },
                          ticks: {
                              showLabelBackdrop: !0,
                              backdropColor: "rgba(255,255,255,0.75)",
                              backdropPaddingY: 2,
                              backdropPaddingX: 2
                          },
                          pointLabels: {
                              fontSize: 10,
                              callback: function(t) {
                                  return t
                              }
                          }
                      },
                      n = t.LinearScaleBase.extend({
                          getValueCount: function() {
                              return this.chart.data.labels.length
                          },
                          setDimensions: function() {
                              var t = this,
                                  i = t.options,
                                  n = i.ticks;
                              t.width = t.maxWidth, t.height = t.maxHeight, t.xCenter = Math.round(t.width / 2), t.yCenter = Math.round(t.height / 2);
                              var o = e.min([t.height, t.width]),
                                  r = e.getValueOrDefault(n.fontSize, a.defaultFontSize);
                              t.drawingArea = i.display ? o / 2 - (r / 2 + n.backdropPaddingY) : o / 2
                          },
                          determineDataLimits: function() {
                              var t = this,
                                  a = t.chart;
                              t.min = null, t.max = null, e.each(a.data.datasets, function(i, n) {
                                  if (a.isDatasetVisible(n)) {
                                      var o = a.getDatasetMeta(n);
                                      e.each(i.data, function(e, a) {
                                          var i = +t.getRightValue(e);
                                          isNaN(i) || o.data[a].hidden || (null === t.min ? t.min = i : i < t.min && (t.min = i), null === t.max ? t.max = i : i > t.max && (t.max = i))
                                      })
                                  }
                              }), t.handleTickRangeOptions()
                          },
                          getTickLimit: function() {
                              var t = this.options.ticks,
                                  i = e.getValueOrDefault(t.fontSize, a.defaultFontSize);
                              return Math.min(t.maxTicksLimit ? t.maxTicksLimit : 11, Math.ceil(this.drawingArea / (1.5 * i)))
                          },
                          convertTicksToLabels: function() {
                              var e = this;
                              t.LinearScaleBase.prototype.convertTicksToLabels.call(e), e.pointLabels = e.chart.data.labels.map(e.options.pointLabels.callback, e)
                          },
                          getLabelForIndex: function(t, e) {
                              return +this.getRightValue(this.chart.data.datasets[e].data[t])
                          },
                          fit: function() {
                              var t, i, n, o, r, l, s, d, u, c, h, f, g = this.options.pointLabels,
                                  p = e.getValueOrDefault(g.fontSize, a.defaultFontSize),
                                  m = e.getValueOrDefault(g.fontStyle, a.defaultFontStyle),
                                  b = e.getValueOrDefault(g.fontFamily, a.defaultFontFamily),
                                  v = e.fontString(p, m, b),
                                  x = e.min([this.height / 2 - p - 5, this.width / 2]),
                                  y = this.width,
                                  k = 0;
                              for (this.ctx.font = v, i = 0; i < this.getValueCount(); i++) {
                                  t = this.getPointPosition(i, x), n = this.ctx.measureText(this.pointLabels[i] ? this.pointLabels[i] : "").width + 5;
                                  var S = this.getIndexAngle(i) + Math.PI / 2,
                                      w = 360 * S / (2 * Math.PI) % 360;
                                  0 === w || 180 === w ? (o = n / 2, t.x + o > y && (y = t.x + o, r = i), t.x - o < k && (k = t.x - o, s = i)) : 180 > w ? t.x + n > y && (y = t.x + n, r = i) : t.x - n < k && (k = t.x - n, s = i)
                              }
                              u = k, c = Math.ceil(y - this.width), l = this.getIndexAngle(r), d = this.getIndexAngle(s), h = c / Math.sin(l + Math.PI / 2), f = u / Math.sin(d + Math.PI / 2), h = e.isNumber(h) ? h : 0, f = e.isNumber(f) ? f : 0, this.drawingArea = Math.round(x - (f + h) / 2), this.setCenterPoint(f, h)
                          },
                          setCenterPoint: function(t, e) {
                              var a = this,
                                  i = a.width - e - a.drawingArea,
                                  n = t + a.drawingArea;
                              a.xCenter = Math.round((n + i) / 2 + a.left), a.yCenter = Math.round(a.height / 2 + a.top)
                          },
                          getIndexAngle: function(t) {
                              var e = 2 * Math.PI / this.getValueCount(),
                                  a = this.chart.options && this.chart.options.startAngle ? this.chart.options.startAngle : 0,
                                  i = a * Math.PI * 2 / 360;
                              return t * e - Math.PI / 2 + i
                          },
                          getDistanceFromCenterForValue: function(t) {
                              var e = this;
                              if (null === t) return 0;
                              var a = e.drawingArea / (e.max - e.min);
                              return e.options.reverse ? (e.max - t) * a : (t - e.min) * a
                          },
                          getPointPosition: function(t, e) {
                              var a = this,
                                  i = a.getIndexAngle(t);
                              return {
                                  x: Math.round(Math.cos(i) * e) + a.xCenter,
                                  y: Math.round(Math.sin(i) * e) + a.yCenter
                              }
                          },
                          getPointPositionForValue: function(t, e) {
                              return this.getPointPosition(t, this.getDistanceFromCenterForValue(e))
                          },
                          getBasePosition: function() {
                              var t = this,
                                  e = t.min,
                                  a = t.max;
                              return t.getPointPositionForValue(0, t.beginAtZero ? 0 : 0 > e && 0 > a ? a : e > 0 && a > 0 ? e : 0)
                          },
                          draw: function() {
                              var t = this,
                                  i = t.options,
                                  n = i.gridLines,
                                  o = i.ticks,
                                  r = i.angleLines,
                                  l = i.pointLabels,
                                  s = e.getValueOrDefault;
                              if (i.display) {
                                  var d = t.ctx,
                                      u = s(o.fontSize, a.defaultFontSize),
                                      c = s(o.fontStyle, a.defaultFontStyle),
                                      h = s(o.fontFamily, a.defaultFontFamily),
                                      f = e.fontString(u, c, h);
                                  if (e.each(t.ticks, function(r, l) {
                                          if (l > 0 || i.reverse) {
                                              var c = t.getDistanceFromCenterForValue(t.ticksAsNumbers[l]),
                                                  h = t.yCenter - c;
                                              if (n.display && 0 !== l)
                                                  if (d.strokeStyle = e.getValueAtIndexOrDefault(n.color, l - 1), d.lineWidth = e.getValueAtIndexOrDefault(n.lineWidth, l - 1), i.lineArc) d.beginPath(), d.arc(t.xCenter, t.yCenter, c, 0, 2 * Math.PI), d.closePath(), d.stroke();
                                                  else {
                                                      d.beginPath();
                                                      for (var g = 0; g < t.getValueCount(); g++) {
                                                          var p = t.getPointPosition(g, c);
                                                          0 === g ? d.moveTo(p.x, p.y) : d.lineTo(p.x, p.y)
                                                      }
                                                      d.closePath(), d.stroke()
                                                  }
                                              if (o.display) {
                                                  var m = s(o.fontColor, a.defaultFontColor);
                                                  if (d.font = f, o.showLabelBackdrop) {
                                                      var b = d.measureText(r).width;
                                                      d.fillStyle = o.backdropColor, d.fillRect(t.xCenter - b / 2 - o.backdropPaddingX, h - u / 2 - o.backdropPaddingY, b + 2 * o.backdropPaddingX, u + 2 * o.backdropPaddingY)
                                                  }
                                                  d.textAlign = "center", d.textBaseline = "middle", d.fillStyle = m, d.fillText(r, t.xCenter, h)
                                              }
                                          }
                                      }), !i.lineArc) {
                                      d.lineWidth = r.lineWidth, d.strokeStyle = r.color;
                                      for (var g = t.getDistanceFromCenterForValue(i.reverse ? t.min : t.max), p = s(l.fontSize, a.defaultFontSize), m = s(l.fontStyle, a.defaultFontStyle), b = s(l.fontFamily, a.defaultFontFamily), v = e.fontString(p, m, b), x = t.getValueCount() - 1; x >= 0; x--) {
                                          if (r.display) {
                                              var y = t.getPointPosition(x, g);
                                              d.beginPath(), d.moveTo(t.xCenter, t.yCenter), d.lineTo(y.x, y.y), d.stroke(), d.closePath()
                                          }
                                          var k = t.getPointPosition(x, g + 5),
                                              S = s(l.fontColor, a.defaultFontColor);
                                          d.font = v, d.fillStyle = S;
                                          var w = t.pointLabels,
                                              C = this.getIndexAngle(x) + Math.PI / 2,
                                              M = 360 * C / (2 * Math.PI) % 360;
                                          0 === M || 180 === M ? d.textAlign = "center" : 180 > M ? d.textAlign = "left" : d.textAlign = "right", 90 === M || 270 === M ? d.textBaseline = "middle" : M > 270 || 90 > M ? d.textBaseline = "bottom" : d.textBaseline = "top", d.fillText(w[x] ? w[x] : "", k.x, k.y)
                                      }
                                  }
                              }
                          }
                      });
                  t.scaleService.registerScaleType("radialLinear", n, i)
              }
          }, {}],
          44: [function(t, e, a) {
              "use strict";
              var i = t(1);
              i = "function" == typeof i ? i : window.moment, e.exports = function(t) {
                  var e = t.helpers,
                      a = {
                          units: [{
                              name: "millisecond",
                              steps: [1, 2, 5, 10, 20, 50, 100, 250, 500]
                          }, {
                              name: "second",
                              steps: [1, 2, 5, 10, 30]
                          }, {
                              name: "minute",
                              steps: [1, 2, 5, 10, 30]
                          }, {
                              name: "hour",
                              steps: [1, 2, 3, 6, 12]
                          }, {
                              name: "day",
                              steps: [1, 2, 5]
                          }, {
                              name: "week",
                              maxStep: 4
                          }, {
                              name: "month",
                              maxStep: 3
                          }, {
                              name: "quarter",
                              maxStep: 4
                          }, {
                              name: "year",
                              maxStep: !1
                          }]
                      },
                      n = {
                          position: "bottom",
                          time: {
                              parser: !1,
                              format: !1,
                              unit: !1,
                              round: !1,
                              displayFormat: !1,
                              isoWeekday: !1,
                              displayFormats: {
                                  millisecond: "h:mm:ss.SSS a",
                                  second: "h:mm:ss a",
                                  minute: "h:mm:ss a",
                                  hour: "MMM D, hA",
                                  day: "ll",
                                  week: "ll",
                                  month: "MMM YYYY",
                                  quarter: "[Q]Q - YYYY",
                                  year: "YYYY"
                              }
                          },
                          ticks: {
                              autoSkip: !1
                          }
                      },
                      o = t.Scale.extend({
                          initialize: function() {
                              if (!i) throw new Error("Chart.js - Moment.js could not be found! You must include it before Chart.js to use the time scale. Download at https://momentjs.com");
                              t.Scale.prototype.initialize.call(this)
                          },
                          getLabelMoment: function(t, e) {
                              return "undefined" != typeof this.labelMoments[t] ? this.labelMoments[t][e] : null
                          },
                          getMomentStartOf: function(t) {
                              var e = this;
                              return "week" === e.options.time.unit && e.options.time.isoWeekday !== !1 ? t.clone().startOf("isoWeek").isoWeekday(e.options.time.isoWeekday) : t.clone().startOf(e.tickUnit)
                          },
                          determineDataLimits: function() {
                              var t = this;
                              t.labelMoments = [];
                              var a = [];
                              t.chart.data.labels && t.chart.data.labels.length > 0 ? (e.each(t.chart.data.labels, function(e) {
                                  var i = t.parseTime(e);
                                  i.isValid() && (t.options.time.round && i.startOf(t.options.time.round), a.push(i))
                              }, t), t.firstTick = i.min.call(t, a), t.lastTick = i.max.call(t, a)) : (t.firstTick = null, t.lastTick = null), e.each(t.chart.data.datasets, function(n, o) {
                                  var r = [],
                                      l = t.chart.isDatasetVisible(o);
                                  "object" == typeof n.data[0] && null !== n.data[0] ? e.each(n.data, function(e) {
                                      var a = t.parseTime(t.getRightValue(e));
                                      a.isValid() && (t.options.time.round && a.startOf(t.options.time.round), r.push(a), l && (t.firstTick = null !== t.firstTick ? i.min(t.firstTick, a) : a, t.lastTick = null !== t.lastTick ? i.max(t.lastTick, a) : a))
                                  }, t) : r = a, t.labelMoments.push(r)
                              }, t), t.options.time.min && (t.firstTick = t.parseTime(t.options.time.min)), t.options.time.max && (t.lastTick = t.parseTime(t.options.time.max)), t.firstTick = (t.firstTick || i()).clone(), t.lastTick = (t.lastTick || i()).clone()
                          },
                          buildTicks: function() {
                              var i = this;
                              i.ctx.save();
                              var n = e.getValueOrDefault(i.options.ticks.fontSize, t.defaults.global.defaultFontSize),
                                  o = e.getValueOrDefault(i.options.ticks.fontStyle, t.defaults.global.defaultFontStyle),
                                  r = e.getValueOrDefault(i.options.ticks.fontFamily, t.defaults.global.defaultFontFamily),
                                  l = e.fontString(n, o, r);
                              if (i.ctx.font = l, i.ticks = [], i.unitScale = 1, i.scaleSizeInUnits = 0, i.options.time.unit) i.tickUnit = i.options.time.unit || "day", i.displayFormat = i.options.time.displayFormats[i.tickUnit], i.scaleSizeInUnits = i.lastTick.diff(i.firstTick, i.tickUnit, !0), i.unitScale = e.getValueOrDefault(i.options.time.unitStepSize, 1);
                              else {
                                  var s = i.isHorizontal() ? i.width - (i.paddingLeft + i.paddingRight) : i.height - (i.paddingTop + i.paddingBottom),
                                      d = i.tickFormatFunction(i.firstTick, 0, []),
                                      u = i.ctx.measureText(d).width,
                                      c = Math.cos(e.toRadians(i.options.ticks.maxRotation)),
                                      h = Math.sin(e.toRadians(i.options.ticks.maxRotation));
                                  u = u * c + n * h;
                                  var f = s / u;
                                  i.tickUnit = "millisecond", i.scaleSizeInUnits = i.lastTick.diff(i.firstTick, i.tickUnit, !0), i.displayFormat = i.options.time.displayFormats[i.tickUnit];
                                  for (var g = 0, p = a.units[g]; g < a.units.length;) {
                                      if (i.unitScale = 1, e.isArray(p.steps) && Math.ceil(i.scaleSizeInUnits / f) < e.max(p.steps)) {
                                          for (var m = 0; m < p.steps.length; ++m)
                                              if (p.steps[m] >= Math.ceil(i.scaleSizeInUnits / f)) {
                                                  i.unitScale = e.getValueOrDefault(i.options.time.unitStepSize, p.steps[m]);
                                                  break
                                              }
                                          break
                                      }
                                      if (p.maxStep === !1 || Math.ceil(i.scaleSizeInUnits / f) < p.maxStep) {
                                          i.unitScale = e.getValueOrDefault(i.options.time.unitStepSize, Math.ceil(i.scaleSizeInUnits / f));
                                          break
                                      }++g, p = a.units[g], i.tickUnit = p.name;
                                      var b = i.firstTick.diff(i.getMomentStartOf(i.firstTick), i.tickUnit, !0),
                                          v = i.getMomentStartOf(i.lastTick.clone().add(1, i.tickUnit)).diff(i.lastTick, i.tickUnit, !0);
                                      i.scaleSizeInUnits = i.lastTick.diff(i.firstTick, i.tickUnit, !0) + b + v, i.displayFormat = i.options.time.displayFormats[p.name]
                                  }
                              }
                              var x;
                              if (i.options.time.min ? x = i.getMomentStartOf(i.firstTick) : (i.firstTick = i.getMomentStartOf(i.firstTick), x = i.firstTick), !i.options.time.max) {
                                  var y = i.getMomentStartOf(i.lastTick),
                                      k = y.diff(i.lastTick, i.tickUnit, !0);
                                  0 > k ? i.lastTick = i.getMomentStartOf(i.lastTick.add(1, i.tickUnit)) : k >= 0 && (i.lastTick = y), i.scaleSizeInUnits = i.lastTick.diff(i.firstTick, i.tickUnit, !0)
                              }
                              i.options.time.displayFormat && (i.displayFormat = i.options.time.displayFormat), i.ticks.push(i.firstTick.clone());
                              for (var S = 1; S <= i.scaleSizeInUnits; ++S) {
                                  var w = x.clone().add(S, i.tickUnit);
                                  if (i.options.time.max && w.diff(i.lastTick, i.tickUnit, !0) >= 0) break;
                                  S % i.unitScale === 0 && i.ticks.push(w)
                              }
                              var C = i.ticks[i.ticks.length - 1].diff(i.lastTick, i.tickUnit);
                              (0 !== C || 0 === i.scaleSizeInUnits) && (i.options.time.max ? (i.ticks.push(i.lastTick.clone()), i.scaleSizeInUnits = i.lastTick.diff(i.ticks[0], i.tickUnit, !0)) : (i.ticks.push(i.lastTick.clone()), i.scaleSizeInUnits = i.lastTick.diff(i.firstTick, i.tickUnit, !0))), i.ctx.restore()
                          },
                          getLabelForIndex: function(t, e) {
                              var a = this,
                                  i = a.chart.data.labels && t < a.chart.data.labels.length ? a.chart.data.labels[t] : "";
                              return "object" == typeof a.chart.data.datasets[e].data[0] && (i = a.getRightValue(a.chart.data.datasets[e].data[t])), a.options.time.tooltipFormat && (i = a.parseTime(i).format(a.options.time.tooltipFormat)), i
                          },
                          tickFormatFunction: function(t, a, i) {
                              var n = t.format(this.displayFormat),
                                  o = this.options.ticks,
                                  r = e.getValueOrDefault(o.callback, o.userCallback);
                              return r ? r(n, a, i) : n
                          },
                          convertTicksToLabels: function() {
                              var t = this;
                              t.tickMoments = t.ticks, t.ticks = t.ticks.map(t.tickFormatFunction, t)
                          },
                          getPixelForValue: function(t, e, a) {
                              var i = this;
                              t && t.isValid || (t = i.parseTime(i.getRightValue(t)));
                              var n = t && t.isValid && t.isValid() ? t : i.getLabelMoment(a, e);
                              if (n) {
                                  var o = n.diff(i.firstTick, i.tickUnit, !0),
                                      r = 0 !== o ? o / i.scaleSizeInUnits : o;
                                  if (i.isHorizontal()) {
                                      var l = i.width - (i.paddingLeft + i.paddingRight),
                                          s = l * r + i.paddingLeft;
                                      return i.left + Math.round(s)
                                  }
                                  var d = i.height - (i.paddingTop + i.paddingBottom),
                                      u = d * r + i.paddingTop;
                                  return i.top + Math.round(u)
                              }
                          },
                          getPixelForTick: function(t) {
                              return this.getPixelForValue(this.tickMoments[t], null, null)
                          },
                          getValueForPixel: function(t) {
                              var e = this,
                                  a = e.isHorizontal() ? e.width - (e.paddingLeft + e.paddingRight) : e.height - (e.paddingTop + e.paddingBottom),
                                  n = (t - (e.isHorizontal() ? e.left + e.paddingLeft : e.top + e.paddingTop)) / a;
                              return n *= e.scaleSizeInUnits, e.firstTick.clone().add(i.duration(n, e.tickUnit).asSeconds(), "seconds")
                          },
                          parseTime: function(t) {
                              var e = this;
                              return "string" == typeof e.options.time.parser ? i(t, e.options.time.parser) : "function" == typeof e.options.time.parser ? e.options.time.parser(t) : "function" == typeof t.getMonth || "number" == typeof t ? i(t) : t.isValid && t.isValid() ? t : "string" != typeof e.options.time.format && e.options.time.format.call ? (console.warn("options.time.format is deprecated and replaced by options.time.parser. See http://nnnick.github.io/Chart.js/docs-v2/#scales-time-scale"), e.options.time.format(t)) : i(t, e.options.time.format)
                          }
                      });
                  t.scaleService.registerScaleType("time", o, n)
              }
          }, {
              1: 1
          }]
      }, {}, [7])(7)
  });