UNPKG

offices-viewer

Version:

## Current Renderable File Types

9,806 lines 340 kB
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
/* nvd3 version 1.8.1-dev (https://github.com/novus/nvd3) 2015-09-10 */

!function () {
  var a = {};
  a.dev = !1, a.tooltip = a.tooltip || {}, a.utils = a.utils || {}, a.models = a.models || {}, a.charts = {}, a.logs = {}, a.dom = {}, a.dispatch = d3.dispatch("render_start", "render_end"), Function.prototype.bind || (Function.prototype.bind = function (a) {
    if ("function" != typeof this) throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");
    var b = Array.prototype.slice.call(arguments, 1),
      c = this,
      d = function d() {},
      e = function e() {
        return c.apply(this instanceof d && a ? this : a, b.concat(Array.prototype.slice.call(arguments)));
      };
    return d.prototype = this.prototype, e.prototype = new d(), e;
  }), a.dev && (a.dispatch.on("render_start", function (b) {
    a.logs.startTime = +new Date();
  }), a.dispatch.on("render_end", function (b) {
    a.logs.endTime = +new Date(), a.logs.totalTime = a.logs.endTime - a.logs.startTime, a.log("total", a.logs.totalTime);
  })), a.log = function () {
    if (a.dev && window.console && console.log && console.log.apply) console.log.apply(console, arguments);else if (a.dev && window.console && "function" == typeof console.log && Function.prototype.bind) {
      var b = Function.prototype.bind.call(console.log, console);
      b.apply(console, arguments);
    }
    return arguments[arguments.length - 1];
  }, a.deprecated = function (a, b) {
    console && console.warn && console.warn("nvd3 warning: `" + a + "` has been deprecated. ", b || "");
  }, a.render = function (b) {
    b = b || 1, a.render.active = !0, a.dispatch.render_start();
    var c = function c() {
      for (var d, e, f = 0; b > f && (e = a.render.queue[f]); f++) d = e.generate(), _typeof(e.callback) == (typeof Function === "undefined" ? "undefined" : _typeof(Function)) && e.callback(d);
      a.render.queue.splice(0, f), a.render.queue.length ? setTimeout(c) : (a.dispatch.render_end(), a.render.active = !1);
    };
    setTimeout(c);
  }, a.render.active = !1, a.render.queue = [], a.addGraph = function (b) {
    _typeof(arguments[0]) == (typeof Function === "undefined" ? "undefined" : _typeof(Function)) && (b = {
      generate: arguments[0],
      callback: arguments[1]
    }), a.render.queue.push(b), a.render.active || a.render();
  }, "undefined" != typeof module && "undefined" != typeof exports && (module.exports = a), "undefined" != typeof window && (window.nv = a), a.dom.write = function (a) {
    return void 0 !== window.fastdom ? fastdom.write(a) : a();
  }, a.dom.read = function (a) {
    return void 0 !== window.fastdom ? fastdom.read(a) : a();
  }, a.interactiveGuideline = function () {
    "use strict";

    function b(l) {
      l.each(function (l) {
        function m() {
          var a = d3.mouse(this),
            d = a[0],
            e = a[1],
            h = !0,
            i = !1;
          if (k && (d = d3.event.offsetX, e = d3.event.offsetY, "svg" !== d3.event.target.tagName && (h = !1), d3.event.target.className.baseVal.match("nv-legend") && (i = !0)), h && (d -= c.left, e -= c.top), 0 > d || 0 > e || d > o || e > p || d3.event.relatedTarget && void 0 === d3.event.relatedTarget.ownerSVGElement || i) {
            if (k && d3.event.relatedTarget && void 0 === d3.event.relatedTarget.ownerSVGElement && (void 0 === d3.event.relatedTarget.className || d3.event.relatedTarget.className.match(j.nvPointerEventsClass))) return;
            return g.elementMouseout({
              mouseX: d,
              mouseY: e
            }), b.renderGuideLine(null), void j.hidden(!0);
          }
          j.hidden(!1);
          var l = f.invert(d);
          g.elementMousemove({
            mouseX: d,
            mouseY: e,
            pointXValue: l
          }), "dblclick" === d3.event.type && g.elementDblclick({
            mouseX: d,
            mouseY: e,
            pointXValue: l
          }), "click" === d3.event.type && g.elementClick({
            mouseX: d,
            mouseY: e,
            pointXValue: l
          }), "mousedown" === d3.event.type && g.elementMouseDown({
            mouseX: d,
            mouseY: e,
            pointXValue: l
          }), "mouseup" === d3.event.type && g.elementMouseUp({
            mouseX: d,
            mouseY: e,
            pointXValue: l
          });
        }
        var n = d3.select(this),
          o = d || 960,
          p = e || 400,
          q = n.selectAll("g.nv-wrap.nv-interactiveLineLayer").data([l]),
          r = q.enter().append("g").attr("class", " nv-wrap nv-interactiveLineLayer");
        r.append("g").attr("class", "nv-interactiveGuideLine"), i && (i.on("touchmove", m).on("mousemove", m, !0).on("mouseout", m, !0).on("mousedown", m, !0).on("mouseup", m, !0).on("dblclick", m).on("click", m), b.guideLine = null, b.renderGuideLine = function (c) {
          h && (b.guideLine && b.guideLine.attr("x1") === c || a.dom.write(function () {
            var b = q.select(".nv-interactiveGuideLine").selectAll("line").data(null != c ? [a.utils.NaNtoZero(c)] : [], String);
            b.enter().append("line").attr("class", "nv-guideline").attr("x1", function (a) {
              return a;
            }).attr("x2", function (a) {
              return a;
            }).attr("y1", p).attr("y2", 0), b.exit().remove();
          }));
        });
      });
    }
    var c = {
        left: 0,
        top: 0
      },
      d = null,
      e = null,
      f = d3.scale.linear(),
      g = d3.dispatch("elementMousemove", "elementMouseout", "elementClick", "elementDblclick", "elementMouseDown", "elementMouseUp"),
      h = !0,
      i = null,
      j = a.models.tooltip(),
      k = ("ActiveXObject" in window);
    return j.duration(0).hideDelay(0).hidden(!1), b.dispatch = g, b.tooltip = j, b.margin = function (a) {
      return arguments.length ? (c.top = "undefined" != typeof a.top ? a.top : c.top, c.left = "undefined" != typeof a.left ? a.left : c.left, b) : c;
    }, b.width = function (a) {
      return arguments.length ? (d = a, b) : d;
    }, b.height = function (a) {
      return arguments.length ? (e = a, b) : e;
    }, b.xScale = function (a) {
      return arguments.length ? (f = a, b) : f;
    }, b.showGuideLine = function (a) {
      return arguments.length ? (h = a, b) : h;
    }, b.svgContainer = function (a) {
      return arguments.length ? (i = a, b) : i;
    }, b;
  }, a.interactiveBisect = function (a, b, c) {
    "use strict";

    if (!(a instanceof Array)) return null;
    var d;
    d = "function" != typeof c ? function (a) {
      return a.x;
    } : c;
    var e = function e(a, b) {
        return d(a) - b;
      },
      f = d3.bisector(e).left,
      g = d3.max([0, f(a, b) - 1]),
      h = d(a[g]);
    if ("undefined" == typeof h && (h = g), h === b) return g;
    var i = d3.min([g + 1, a.length - 1]),
      j = d(a[i]);
    return "undefined" == typeof j && (j = i), Math.abs(j - b) >= Math.abs(h - b) ? g : i;
  }, a.nearestValueIndex = function (a, b, c) {
    "use strict";

    var d = 1 / 0,
      e = null;
    return a.forEach(function (a, f) {
      var g = Math.abs(b - a);
      null != a && d >= g && c > g && (d = g, e = f);
    }), e;
  }, a.models.tooltip = function () {
    "use strict";

    function b() {
      if (!m) {
        var a = j ? j : document.body;
        m = d3.select(a).append("div").attr("class", "nvtooltip " + (i ? i : "xy-tooltip")).attr("id", d), m.style("top", 0).style("left", 0), m.style("opacity", 0), m.style("position", "fixed"), m.selectAll("div, table, td, tr").classed(r, !0), m.classed(r, !0);
      }
    }
    function c() {
      return o && x(e) ? (a.dom.write(function () {
        b();
        var a = w(e);
        a && (m.node().innerHTML = a), z();
      }), c) : void 0;
    }
    var d = "nvtooltip-" + Math.floor(1e5 * Math.random()),
      e = null,
      f = "w",
      g = 25,
      h = 0,
      i = null,
      j = null,
      k = !0,
      l = 200,
      m = null,
      n = {
        left: null,
        top: null
      },
      o = !0,
      p = 100,
      q = !0,
      r = "nv-pointer-events-none",
      s = function s() {
        return {
          left: d3.event.clientX,
          top: d3.event.clientY
        };
      },
      t = function t(a, b) {
        return a;
      },
      u = function u(a) {
        return a;
      },
      v = function v(a, b) {
        return a;
      },
      w = function w(a) {
        if (null === a) return "";
        var b = d3.select(document.createElement("table"));
        if (q) {
          var c = b.selectAll("thead").data([a]).enter().append("thead");
          c.append("tr").append("td").attr("colspan", 3).append("strong").classed("x-value", !0).html(u(a.value));
        }
        var d = b.selectAll("tbody").data([a]).enter().append("tbody"),
          e = d.selectAll("tr").data(function (a) {
            return a.series;
          }).enter().append("tr").classed("highlight", function (a) {
            return a.highlight;
          });
        e.append("td").classed("legend-color-guide", !0).append("div").style("background-color", function (a) {
          return a.color;
        }), e.append("td").classed("key", !0).classed("total", function (a) {
          return !!a.total;
        }).html(function (a, b) {
          return v(a.key, b);
        }), e.append("td").classed("value", !0).html(function (a, b) {
          return t(a.value, b);
        }), e.selectAll("td").each(function (a) {
          if (a.highlight) {
            var b = d3.scale.linear().domain([0, 1]).range(["#fff", a.color]),
              c = .6;
            d3.select(this).style("border-bottom-color", b(c)).style("border-top-color", b(c));
          }
        });
        var f = b.node().outerHTML;
        return void 0 !== a.footer && (f += "<div class='footer'>" + a.footer + "</div>"), f;
      },
      x = function x(a) {
        if (a && a.series) {
          if (a.series instanceof Array) return !!a.series.length;
          if (a.series instanceof Object) return a.series = [a.series], !0;
        }
        return !1;
      },
      y = function y(a) {
        var b,
          c,
          d,
          e = m.node().offsetHeight,
          h = m.node().offsetWidth,
          i = document.documentElement.clientWidth,
          j = document.documentElement.clientHeight;
        switch (f) {
          case "e":
            b = -h - g, c = -(e / 2), a.left + b < 0 && (b = g), (d = a.top + c) < 0 && (c -= d), (d = a.top + c + e) > j && (c -= d - j);
            break;
          case "w":
            b = g, c = -(e / 2), a.left + b + h > i && (b = -h - g), (d = a.top + c) < 0 && (c -= d), (d = a.top + c + e) > j && (c -= d - j);
            break;
          case "n":
            b = -(h / 2) - 5, c = g, a.top + c + e > j && (c = -e - g), (d = a.left + b) < 0 && (b -= d), (d = a.left + b + h) > i && (b -= d - i);
            break;
          case "s":
            b = -(h / 2), c = -e - g, a.top + c < 0 && (c = g), (d = a.left + b) < 0 && (b -= d), (d = a.left + b + h) > i && (b -= d - i);
            break;
          case "center":
            b = -(h / 2), c = -(e / 2);
            break;
          default:
            b = 0, c = 0;
        }
        return {
          left: b,
          top: c
        };
      },
      z = function z() {
        a.dom.read(function () {
          var a = s(),
            b = y(a),
            c = a.left + b.left,
            d = a.top + b.top;
          if (k) m.interrupt().transition().delay(l).duration(0).style("opacity", 0);else {
            var e = "translate(" + n.left + "px, " + n.top + "px)",
              f = "translate(" + c + "px, " + d + "px)",
              g = d3.interpolateString(e, f),
              h = m.style("opacity") < .1;
            m.interrupt().transition().duration(h ? 0 : p).styleTween("transform", function (a) {
              return g;
            }, "important").styleTween("-webkit-transform", function (a) {
              return g;
            }).style("-ms-transform", f).style("opacity", 1);
          }
          n.left = c, n.top = d;
        });
      };
    return c.nvPointerEventsClass = r, c.options = a.utils.optionsFunc.bind(c), c._options = Object.create({}, {
      duration: {
        get: function get() {
          return p;
        },
        set: function set(a) {
          p = a;
        }
      },
      gravity: {
        get: function get() {
          return f;
        },
        set: function set(a) {
          f = a;
        }
      },
      distance: {
        get: function get() {
          return g;
        },
        set: function set(a) {
          g = a;
        }
      },
      snapDistance: {
        get: function get() {
          return h;
        },
        set: function set(a) {
          h = a;
        }
      },
      classes: {
        get: function get() {
          return i;
        },
        set: function set(a) {
          i = a;
        }
      },
      chartContainer: {
        get: function get() {
          return j;
        },
        set: function set(a) {
          j = a;
        }
      },
      enabled: {
        get: function get() {
          return o;
        },
        set: function set(a) {
          o = a;
        }
      },
      hideDelay: {
        get: function get() {
          return l;
        },
        set: function set(a) {
          l = a;
        }
      },
      contentGenerator: {
        get: function get() {
          return w;
        },
        set: function set(a) {
          w = a;
        }
      },
      valueFormatter: {
        get: function get() {
          return t;
        },
        set: function set(a) {
          t = a;
        }
      },
      headerFormatter: {
        get: function get() {
          return u;
        },
        set: function set(a) {
          u = a;
        }
      },
      keyFormatter: {
        get: function get() {
          return v;
        },
        set: function set(a) {
          v = a;
        }
      },
      headerEnabled: {
        get: function get() {
          return q;
        },
        set: function set(a) {
          q = a;
        }
      },
      position: {
        get: function get() {
          return s;
        },
        set: function set(a) {
          s = a;
        }
      },
      hidden: {
        get: function get() {
          return k;
        },
        set: function set(a) {
          k != a && (k = !!a, c());
        }
      },
      data: {
        get: function get() {
          return e;
        },
        set: function set(a) {
          a.point && (a.value = a.point.x, a.series = a.series || {}, a.series.value = a.point.y, a.series.color = a.point.color || a.series.color), e = a;
        }
      },
      node: {
        get: function get() {
          return m.node();
        },
        set: function set(a) {}
      },
      id: {
        get: function get() {
          return d;
        },
        set: function set(a) {}
      }
    }), a.utils.initOptions(c), c;
  }, a.utils.windowSize = function () {
    var a = {
      width: 640,
      height: 480
    };
    return window.innerWidth && window.innerHeight ? (a.width = window.innerWidth, a.height = window.innerHeight, a) : "CSS1Compat" == document.compatMode && document.documentElement && document.documentElement.offsetWidth ? (a.width = document.documentElement.offsetWidth, a.height = document.documentElement.offsetHeight, a) : document.body && document.body.offsetWidth ? (a.width = document.body.offsetWidth, a.height = document.body.offsetHeight, a) : a;
  }, a.utils.windowResize = function (b) {
    return window.addEventListener ? window.addEventListener("resize", b) : a.log("ERROR: Failed to bind to window.resize with: ", b), {
      callback: b,
      clear: function clear() {
        window.removeEventListener("resize", b);
      }
    };
  }, a.utils.getColor = function (b) {
    if (void 0 === b) return a.utils.defaultColor();
    if (Array.isArray(b)) {
      var c = d3.scale.ordinal().range(b);
      return function (a, b) {
        var d = void 0 === b ? a : b;
        return a.color || c(d);
      };
    }
    return b;
  }, a.utils.defaultColor = function () {
    return a.utils.getColor(d3.scale.category20().range());
  }, a.utils.customTheme = function (a, b, c) {
    b = b || function (a) {
      return a.key;
    }, c = c || d3.scale.category20().range();
    var d = c.length;
    return function (e, f) {
      var g = b(e);
      return "function" == typeof a[g] ? a[g]() : void 0 !== a[g] ? a[g] : (d || (d = c.length), d -= 1, c[d]);
    };
  }, a.utils.pjax = function (b, c) {
    var d = function d(_d) {
      d3.html(_d, function (d) {
        var e = d3.select(c).node();
        e.parentNode.replaceChild(d3.select(d).select(c).node(), e), a.utils.pjax(b, c);
      });
    };
    d3.selectAll(b).on("click", function () {
      history.pushState(this.href, this.textContent, this.href), d(this.href), d3.event.preventDefault();
    }), d3.select(window).on("popstate", function () {
      d3.event.state && d(d3.event.state);
    });
  }, a.utils.calcApproxTextWidth = function (a) {
    if ("function" == typeof a.style && "function" == typeof a.text) {
      var b = parseInt(a.style("font-size").replace("px", ""), 10),
        c = a.text().length;
      return c * b * .5;
    }
    return 0;
  }, a.utils.NaNtoZero = function (a) {
    return "number" != typeof a || isNaN(a) || null === a || a === 1 / 0 || a === -(1 / 0) ? 0 : a;
  }, d3.selection.prototype.watchTransition = function (a) {
    var b = [this].concat([].slice.call(arguments, 1));
    return a.transition.apply(a, b);
  }, a.utils.renderWatch = function (b, c) {
    if (!(this instanceof a.utils.renderWatch)) return new a.utils.renderWatch(b, c);
    var d = void 0 !== c ? c : 250,
      e = [],
      f = this;
    this.models = function (a) {
      return a = [].slice.call(arguments, 0), a.forEach(function (a) {
        a.__rendered = !1, function (a) {
          a.dispatch.on("renderEnd", function (b) {
            a.__rendered = !0, f.renderEnd("model");
          });
        }(a), e.indexOf(a) < 0 && e.push(a);
      }), this;
    }, this.reset = function (a) {
      void 0 !== a && (d = a), e = [];
    }, this.transition = function (a, b, c) {
      if (b = arguments.length > 1 ? [].slice.call(arguments, 1) : [], c = b.length > 1 ? b.pop() : void 0 !== d ? d : 250, a.__rendered = !1, e.indexOf(a) < 0 && e.push(a), 0 === c) return a.__rendered = !0, a.delay = function () {
        return this;
      }, a.duration = function () {
        return this;
      }, a;
      0 === a.length ? a.__rendered = !0 : a.every(function (a) {
        return !a.length;
      }) ? a.__rendered = !0 : a.__rendered = !1;
      var g = 0;
      return a.transition().duration(c).each(function () {
        ++g;
      }).each("end", function (c, d) {
        0 === --g && (a.__rendered = !0, f.renderEnd.apply(this, b));
      });
    }, this.renderEnd = function () {
      e.every(function (a) {
        return a.__rendered;
      }) && (e.forEach(function (a) {
        a.__rendered = !1;
      }), b.renderEnd.apply(this, arguments));
    };
  }, a.utils.deepExtend = function (b) {
    var c = arguments.length > 1 ? [].slice.call(arguments, 1) : [];
    c.forEach(function (c) {
      for (var d in c) {
        var e = b[d] instanceof Array,
          f = "object" == _typeof(b[d]),
          g = "object" == _typeof(c[d]);
        f && !e && g ? a.utils.deepExtend(b[d], c[d]) : b[d] = c[d];
      }
    });
  }, a.utils.state = function () {
    if (!(this instanceof a.utils.state)) return new a.utils.state();
    var b = {},
      c = function c() {},
      d = function d() {
        return {};
      },
      e = null,
      f = null;
    this.dispatch = d3.dispatch("change", "set"), this.dispatch.on("set", function (a) {
      c(a, !0);
    }), this.getter = function (a) {
      return d = a, this;
    }, this.setter = function (a, b) {
      return b || (b = function b() {}), c = function c(_c, d) {
        a(_c), d && b();
      }, this;
    }, this.init = function (b) {
      e = e || {}, a.utils.deepExtend(e, b);
    };
    var g = function g() {
      var a = d();
      if (JSON.stringify(a) === JSON.stringify(b)) return !1;
      for (var c in a) void 0 === b[c] && (b[c] = {}), b[c] = a[c], f = !0;
      return !0;
    };
    this.update = function () {
      e && (c(e, !1), e = null), g.call(this) && this.dispatch.change(b);
    };
  }, a.utils.optionsFunc = function (a) {
    return a && d3.map(a).forEach(function (a, b) {
      "function" == typeof this[a] && this[a](b);
    }.bind(this)), this;
  }, a.utils.calcTicksX = function (b, c) {
    var d = 1,
      e = 0;
    for (e; e < c.length; e += 1) {
      var f = c[e] && c[e].values ? c[e].values.length : 0;
      d = f > d ? f : d;
    }
    return a.log("Requested number of ticks: ", b), a.log("Calculated max values to be: ", d), b = b > d ? b = d - 1 : b, b = 1 > b ? 1 : b, b = Math.floor(b), a.log("Calculating tick count as: ", b), b;
  }, a.utils.calcTicksY = function (b, c) {
    return a.utils.calcTicksX(b, c);
  }, a.utils.initOption = function (a, b) {
    a._calls && a._calls[b] ? a[b] = a._calls[b] : (a[b] = function (c) {
      return arguments.length ? (a._overrides[b] = !0, a._options[b] = c, a) : a._options[b];
    }, a["_" + b] = function (c) {
      return arguments.length ? (a._overrides[b] || (a._options[b] = c), a) : a._options[b];
    });
  }, a.utils.initOptions = function (b) {
    b._overrides = b._overrides || {};
    var c = Object.getOwnPropertyNames(b._options || {}),
      d = Object.getOwnPropertyNames(b._calls || {});
    c = c.concat(d);
    for (var e in c) a.utils.initOption(b, c[e]);
  }, a.utils.inheritOptionsD3 = function (a, b, c) {
    a._d3options = c.concat(a._d3options || []), c.unshift(b), c.unshift(a), d3.rebind.apply(this, c);
  }, a.utils.arrayUnique = function (a) {
    return a.sort().filter(function (b, c) {
      return !c || b != a[c - 1];
    });
  }, a.utils.symbolMap = d3.map(), a.utils.symbol = function () {
    function b(b, e) {
      var f = c.call(this, b, e),
        g = d.call(this, b, e);
      return -1 !== d3.svg.symbolTypes.indexOf(f) ? d3.svg.symbol().type(f).size(g)() : a.utils.symbolMap.get(f)(g);
    }
    var c,
      d = 64;
    return b.type = function (a) {
      return arguments.length ? (c = d3.functor(a), b) : c;
    }, b.size = function (a) {
      return arguments.length ? (d = d3.functor(a), b) : d;
    }, b;
  }, a.utils.inheritOptions = function (b, c) {
    var d = Object.getOwnPropertyNames(c._options || {}),
      e = Object.getOwnPropertyNames(c._calls || {}),
      f = c._inherited || [],
      g = c._d3options || [],
      h = d.concat(e).concat(f).concat(g);
    h.unshift(c), h.unshift(b), d3.rebind.apply(this, h), b._inherited = a.utils.arrayUnique(d.concat(e).concat(f).concat(d).concat(b._inherited || [])), b._d3options = a.utils.arrayUnique(g.concat(b._d3options || []));
  }, a.utils.initSVG = function (a) {
    a.classed({
      "nvd3-svg": !0
    });
  }, a.utils.sanitizeHeight = function (a, b) {
    return a || parseInt(b.style("height"), 10) || 400;
  }, a.utils.sanitizeWidth = function (a, b) {
    return a || parseInt(b.style("width"), 10) || 960;
  }, a.utils.availableHeight = function (b, c, d) {
    return a.utils.sanitizeHeight(b, c) - d.top - d.bottom;
  }, a.utils.availableWidth = function (b, c, d) {
    return a.utils.sanitizeWidth(b, c) - d.left - d.right;
  }, a.utils.noData = function (b, c) {
    var d = b.options(),
      e = d.margin(),
      f = d.noData(),
      g = null == f ? ["No Data Available."] : [f],
      h = a.utils.availableHeight(null, c, e),
      i = a.utils.availableWidth(null, c, e),
      j = e.left + i / 2,
      k = e.top + h / 2;
    c.selectAll("g").remove();
    var l = c.selectAll(".nv-noData").data(g);
    l.enter().append("text").attr("class", "nvd3 nv-noData").attr("dy", "-.7em").style("text-anchor", "middle"), l.attr("x", j).attr("y", k).text(function (a) {
      return a;
    });
  }, a.utils.wrapTicks = function (a, b) {
    a.each(function () {
      for (var a, c = d3.select(this), d = c.text().split(/\s+/).reverse(), e = [], f = 0, g = 1.1, h = c.attr("y"), i = parseFloat(c.attr("dy")), j = c.text(null).append("tspan").attr("x", 0).attr("y", h).attr("dy", i + "em"); a = d.pop();) e.push(a), j.text(e.join(" ")), j.node().getComputedTextLength() > b && (e.pop(), j.text(e.join(" ")), e = [a], j = c.append("tspan").attr("x", 0).attr("y", h).attr("dy", ++f * g + i + "em").text(a));
    });
  }, a.models.axis = function () {
    "use strict";

    function b(g) {
      return s.reset(), g.each(function (b) {
        var g = d3.select(this);
        a.utils.initSVG(g);
        var p = g.selectAll("g.nv-wrap.nv-axis").data([b]),
          q = p.enter().append("g").attr("class", "nvd3 nv-wrap nv-axis"),
          t = (q.append("g"), p.select("g"));
        null !== n ? c.ticks(n) : ("top" == c.orient() || "bottom" == c.orient()) && c.ticks(Math.abs(d.range()[1] - d.range()[0]) / 100), t.watchTransition(s, "axis").call(c), r = r || c.scale();
        var u = c.tickFormat();
        null == u && (u = r.tickFormat());
        var v = t.selectAll("text.nv-axislabel").data([h || null]);
        v.exit().remove();
        var w, x, y;
        switch (c.orient()) {
          case "top":
            v.enter().append("text").attr("class", "nv-axislabel"), y = 0, 1 === d.range().length ? y = m ? 2 * d.range()[0] + d.rangeBand() : 0 : 2 === d.range().length ? y = m ? d.range()[0] + d.range()[1] + d.rangeBand() : d.range()[1] : d.range().length > 2 && (y = d.range()[d.range().length - 1] + (d.range()[1] - d.range()[0])), v.attr("text-anchor", "middle").attr("y", 0).attr("x", y / 2), i && (x = p.selectAll("g.nv-axisMaxMin").data(d.domain()), x.enter().append("g").attr("class", function (a, b) {
              return ["nv-axisMaxMin", "nv-axisMaxMin-x", 0 == b ? "nv-axisMin-x" : "nv-axisMax-x"].join(" ");
            }).append("text"), x.exit().remove(), x.attr("transform", function (b, c) {
              return "translate(" + a.utils.NaNtoZero(d(b)) + ",0)";
            }).select("text").attr("dy", "-0.5em").attr("y", -c.tickPadding()).attr("text-anchor", "middle").text(function (a, b) {
              var c = u(a);
              return ("" + c).match("NaN") ? "" : c;
            }), x.watchTransition(s, "min-max top").attr("transform", function (b, c) {
              return "translate(" + a.utils.NaNtoZero(d.range()[c]) + ",0)";
            }));
            break;
          case "bottom":
            w = o + 36;
            var z = 30,
              A = 0,
              B = t.selectAll("g").select("text"),
              C = "";
            if (j % 360) {
              B.each(function (a, b) {
                var c = this.getBoundingClientRect(),
                  d = c.width;
                A = c.height, d > z && (z = d);
              }), C = "rotate(" + j + " 0," + (A / 2 + c.tickPadding()) + ")";
              var D = Math.abs(Math.sin(j * Math.PI / 180));
              w = (D ? D * z : z) + 30, B.attr("transform", C).style("text-anchor", j % 360 > 0 ? "start" : "end");
            }
            v.enter().append("text").attr("class", "nv-axislabel"), y = 0, 1 === d.range().length ? y = m ? 2 * d.range()[0] + d.rangeBand() : 0 : 2 === d.range().length ? y = m ? d.range()[0] + d.range()[1] + d.rangeBand() : d.range()[1] : d.range().length > 2 && (y = d.range()[d.range().length - 1] + (d.range()[1] - d.range()[0])), v.attr("text-anchor", "middle").attr("y", w).attr("x", y / 2), i && (x = p.selectAll("g.nv-axisMaxMin").data([d.domain()[0], d.domain()[d.domain().length - 1]]), x.enter().append("g").attr("class", function (a, b) {
              return ["nv-axisMaxMin", "nv-axisMaxMin-x", 0 == b ? "nv-axisMin-x" : "nv-axisMax-x"].join(" ");
            }).append("text"), x.exit().remove(), x.attr("transform", function (b, c) {
              return "translate(" + a.utils.NaNtoZero(d(b) + (m ? d.rangeBand() / 2 : 0)) + ",0)";
            }).select("text").attr("dy", ".71em").attr("y", c.tickPadding()).attr("transform", C).style("text-anchor", j ? j % 360 > 0 ? "start" : "end" : "middle").text(function (a, b) {
              var c = u(a);
              return ("" + c).match("NaN") ? "" : c;
            }), x.watchTransition(s, "min-max bottom").attr("transform", function (b, c) {
              return "translate(" + a.utils.NaNtoZero(d(b) + (m ? d.rangeBand() / 2 : 0)) + ",0)";
            })), l && B.attr("transform", function (a, b) {
              return "translate(0," + (b % 2 == 0 ? "0" : "12") + ")";
            });
            break;
          case "right":
            v.enter().append("text").attr("class", "nv-axislabel"), v.style("text-anchor", k ? "middle" : "begin").attr("transform", k ? "rotate(90)" : "").attr("y", k ? -Math.max(e.right, f) + 12 : -10).attr("x", k ? d3.max(d.range()) / 2 : c.tickPadding()), i && (x = p.selectAll("g.nv-axisMaxMin").data(d.domain()), x.enter().append("g").attr("class", function (a, b) {
              return ["nv-axisMaxMin", "nv-axisMaxMin-y", 0 == b ? "nv-axisMin-y" : "nv-axisMax-y"].join(" ");
            }).append("text").style("opacity", 0), x.exit().remove(), x.attr("transform", function (b, c) {
              return "translate(0," + a.utils.NaNtoZero(d(b)) + ")";
            }).select("text").attr("dy", ".32em").attr("y", 0).attr("x", c.tickPadding()).style("text-anchor", "start").text(function (a, b) {
              var c = u(a);
              return ("" + c).match("NaN") ? "" : c;
            }), x.watchTransition(s, "min-max right").attr("transform", function (b, c) {
              return "translate(0," + a.utils.NaNtoZero(d.range()[c]) + ")";
            }).select("text").style("opacity", 1));
            break;
          case "left":
            v.enter().append("text").attr("class", "nv-axislabel"), v.style("text-anchor", k ? "middle" : "end").attr("transform", k ? "rotate(-90)" : "").attr("y", k ? -Math.max(e.left, f) + 25 - (o || 0) : -10).attr("x", k ? -d3.max(d.range()) / 2 : -c.tickPadding()), i && (x = p.selectAll("g.nv-axisMaxMin").data(d.domain()), x.enter().append("g").attr("class", function (a, b) {
              return ["nv-axisMaxMin", "nv-axisMaxMin-y", 0 == b ? "nv-axisMin-y" : "nv-axisMax-y"].join(" ");
            }).append("text").style("opacity", 0), x.exit().remove(), x.attr("transform", function (b, c) {
              return "translate(0," + a.utils.NaNtoZero(r(b)) + ")";
            }).select("text").attr("dy", ".32em").attr("y", 0).attr("x", -c.tickPadding()).attr("text-anchor", "end").text(function (a, b) {
              var c = u(a);
              return ("" + c).match("NaN") ? "" : c;
            }), x.watchTransition(s, "min-max right").attr("transform", function (b, c) {
              return "translate(0," + a.utils.NaNtoZero(d.range()[c]) + ")";
            }).select("text").style("opacity", 1));
        }
        if (v.text(function (a) {
          return a;
        }), !i || "left" !== c.orient() && "right" !== c.orient() || (t.selectAll("g").each(function (a, b) {
          d3.select(this).select("text").attr("opacity", 1), (d(a) < d.range()[1] + 10 || d(a) > d.range()[0] - 10) && ((a > 1e-10 || -1e-10 > a) && d3.select(this).attr("opacity", 0), d3.select(this).select("text").attr("opacity", 0));
        }), d.domain()[0] == d.domain()[1] && 0 == d.domain()[0] && p.selectAll("g.nv-axisMaxMin").style("opacity", function (a, b) {
          return b ? 0 : 1;
        })), i && ("top" === c.orient() || "bottom" === c.orient())) {
          var E = [];
          p.selectAll("g.nv-axisMaxMin").each(function (a, b) {
            try {
              b ? E.push(d(a) - this.getBoundingClientRect().width - 4) : E.push(d(a) + this.getBoundingClientRect().width + 4);
            } catch (c) {
              b ? E.push(d(a) - 4) : E.push(d(a) + 4);
            }
          }), t.selectAll("g").each(function (a, b) {
            (d(a) < E[0] || d(a) > E[1]) && (a > 1e-10 || -1e-10 > a ? d3.select(this).remove() : d3.select(this).select("text").remove());
          });
        }
        t.selectAll(".tick").filter(function (a) {
          return !parseFloat(Math.round(1e5 * a) / 1e6) && void 0 !== a;
        }).classed("zero", !0), r = d.copy();
      }), s.renderEnd("axis immediate"), b;
    }
    var c = d3.svg.axis(),
      d = d3.scale.linear(),
      e = {
        top: 0,
        right: 0,
        bottom: 0,
        left: 0
      },
      f = 75,
      g = 60,
      h = null,
      i = !0,
      j = 0,
      k = !0,
      l = !1,
      m = !1,
      n = null,
      o = 0,
      p = 250,
      q = d3.dispatch("renderEnd");
    c.scale(d).orient("bottom").tickFormat(function (a) {
      return a;
    });
    var r,
      s = a.utils.renderWatch(q, p);
    return b.axis = c, b.dispatch = q, b.options = a.utils.optionsFunc.bind(b), b._options = Object.create({}, {
      axisLabelDistance: {
        get: function get() {
          return o;
        },
        set: function set(a) {
          o = a;
        }
      },
      staggerLabels: {
        get: function get() {
          return l;
        },
        set: function set(a) {
          l = a;
        }
      },
      rotateLabels: {
        get: function get() {
          return j;
        },
        set: function set(a) {
          j = a;
        }
      },
      rotateYLabel: {
        get: function get() {
          return k;
        },
        set: function set(a) {
          k = a;
        }
      },
      showMaxMin: {
        get: function get() {
          return i;
        },
        set: function set(a) {
          i = a;
        }
      },
      axisLabel: {
        get: function get() {
          return h;
        },
        set: function set(a) {
          h = a;
        }
      },
      height: {
        get: function get() {
          return g;
        },
        set: function set(a) {
          g = a;
        }
      },
      ticks: {
        get: function get() {
          return n;
        },
        set: function set(a) {
          n = a;
        }
      },
      width: {
        get: function get() {
          return f;
        },
        set: function set(a) {
          f = a;
        }
      },
      margin: {
        get: function get() {
          return e;
        },
        set: function set(a) {
          e.top = void 0 !== a.top ? a.top : e.top, e.right = void 0 !== a.right ? a.right : e.right, e.bottom = void 0 !== a.bottom ? a.bottom : e.bottom, e.left = void 0 !== a.left ? a.left : e.left;
        }
      },
      duration: {
        get: function get() {
          return p;
        },
        set: function set(a) {
          p = a, s.reset(p);
        }
      },
      scale: {
        get: function get() {
          return d;
        },
        set: function set(e) {
          d = e, c.scale(d), m = "function" == typeof d.rangeBands, a.utils.inheritOptionsD3(b, d, ["domain", "range", "rangeBand", "rangeBands"]);
        }
      }
    }), a.utils.initOptions(b), a.utils.inheritOptionsD3(b, c, ["orient", "tickValues", "tickSubdivide", "tickSize", "tickPadding", "tickFormat"]), a.utils.inheritOptionsD3(b, d, ["domain", "range", "rangeBand", "rangeBands"]), b;
  }, a.models.boxPlot = function () {
    "use strict";

    function b(l) {
      return v.reset(), l.each(function (b) {
        var l = j - i.left - i.right,
          p = k - i.top - i.bottom;
        r = d3.select(this), a.utils.initSVG(r), m.domain(c || b.map(function (a, b) {
          return o(a, b);
        })).rangeBands(e || [0, l], .1);
        var w = [];
        if (!d) {
          var x = d3.min(b.map(function (a) {
              var b = [];
              return b.push(a.values.Q1), a.values.hasOwnProperty("whisker_low") && null !== a.values.whisker_low && b.push(a.values.whisker_low), a.values.hasOwnProperty("outliers") && null !== a.values.outliers && (b = b.concat(a.values.outliers)), d3.min(b);
            })),
            y = d3.max(b.map(function (a) {
              var b = [];
              return b.push(a.values.Q3), a.values.hasOwnProperty("whisker_high") && null !== a.values.whisker_high && b.push(a.values.whisker_high), a.values.hasOwnProperty("outliers") && null !== a.values.outliers && (b = b.concat(a.values.outliers)), d3.max(b);
            }));
          w = [x, y];
        }
        n.domain(d || w), n.range(f || [p, 0]), g = g || m, h = h || n.copy().range([n(0), n(0)]);
        var z = r.selectAll("g.nv-wrap").data([b]);
        z.enter().append("g").attr("class", "nvd3 nv-wrap");
        z.attr("transform", "translate(" + i.left + "," + i.top + ")");
        var A = z.selectAll(".nv-boxplot").data(function (a) {
            return a;
          }),
          B = A.enter().append("g").style("stroke-opacity", 1e-6).style("fill-opacity", 1e-6);
        A.attr("class", "nv-boxplot").attr("transform", function (a, b, c) {
          return "translate(" + (m(o(a, b)) + .05 * m.rangeBand()) + ", 0)";
        }).classed("hover", function (a) {
          return a.hover;
        }), A.watchTransition(v, "nv-boxplot: boxplots").style("stroke-opacity", 1).style("fill-opacity", .75).delay(function (a, c) {
          return c * t / b.length;
        }).attr("transform", function (a, b) {
          return "translate(" + (m(o(a, b)) + .05 * m.rangeBand()) + ", 0)";
        }), A.exit().remove(), B.each(function (a, b) {
          var c = d3.select(this);
          ["low", "high"].forEach(function (d) {
            a.values.hasOwnProperty("whisker_" + d) && null !== a.values["whisker_" + d] && (c.append("line").style("stroke", a.color ? a.color : q(a, b)).attr("class", "nv-boxplot-whisker nv-boxplot-" + d), c.append("line").style("stroke", a.color ? a.color : q(a, b)).attr("class", "nv-boxplot-tick nv-boxplot-" + d));
          });
        });
        var C = A.selectAll(".nv-boxplot-outlier").data(function (a) {
          return a.values.hasOwnProperty("outliers") && null !== a.values.outliers ? a.values.outliers : [];
        });
        C.enter().append("circle").style("fill", function (a, b, c) {
          return q(a, c);
        }).style("stroke", function (a, b, c) {
          return q(a, c);
        }).on("mouseover", function (a, b, c) {
          d3.select(this).classed("hover", !0), s.elementMouseover({
            series: {
              key: a,
              color: q(a, c)
            },
            e: d3.event
          });
        }).on("mouseout", function (a, b, c) {
          d3.select(this).classed("hover", !1), s.elementMouseout({
            series: {
              key: a,
              color: q(a, c)
            },
            e: d3.event
          });
        }).on("mousemove", function (a, b) {
          s.elementMousemove({
            e: d3.event
          });
        }), C.attr("class", "nv-boxplot-outlier"), C.watchTransition(v, "nv-boxplot: nv-boxplot-outlier").attr("cx", .45 * m.rangeBand()).attr("cy", function (a, b, c) {
          return n(a);
        }).attr("r", "3"), C.exit().remove();
        var D = function D() {
            return null === u ? .9 * m.rangeBand() : Math.min(75, .9 * m.rangeBand());
          },
          E = function E() {
            return .45 * m.rangeBand() - D() / 2;
          },
          F = function F() {
            return .45 * m.rangeBand() + D() / 2;
          };
        ["low", "high"].forEach(function (a) {
          var b = "low" === a ? "Q1" : "Q3";
          A.select("line.nv-boxplot-whisker.nv-boxplot-" + a).watchTransition(v, "nv-boxplot: boxplots").attr("x1", .45 * m.rangeBand()).attr("y1", function (b, c) {
            return n(b.values["whisker_" + a]);
          }).attr("x2", .45 * m.rangeBand()).attr("y2", function (a, c) {
            return n(a.values[b]);
          }), A.select("line.nv-boxplot-tick.nv-boxplot-" + a).watchTransition(v, "nv-boxplot: boxplots").attr("x1", E).attr("y1", function (b, c) {
            return n(b.values["whisker_" + a]);
          }).attr("x2", F).attr("y2", function (b, c) {
            return n(b.values["whisker_" + a]);
          });
        }), ["low", "high"].forEach(function (a) {
          B.selectAll(".nv-boxplot-" + a).on("mouseover", function (b, c, d) {
            d3.select(this).classed("hover", !0), s.elementMouseover({
              series: {
                key: b.values["whisker_" + a],
                color: q(b, d)
              },
              e: d3.event
            });
          }).on("mouseout", function (b, c, d) {
            d3.select(this).classed("hover", !1), s.elementMouseout({
              series: {
                key: b.values["whisker_" + a],
                color: q(b, d)
              },
              e: d3.event
            });
          }).on("mousemove", function (a, b) {
            s.elementMousemove({
              e: d3.event
            });
          });
        }), B.append("rect").attr("class", "nv-boxplot-box").on("mouseover", function (a, b) {
          d3.select(this).classed("hover", !0), s.elementMouseover({
            key: a.label,
            value: a.label,
            series: [{
              key: "Q3",
              value: a.values.Q3,
              color: a.color || q(a, b)
            }, {
              key: "Q2",
              value: a.values.Q2,
              color: a.color || q(a, b)
            }, {
              key: "Q1",
              value: a.values.Q1,
              color: a.color || q(a, b)
            }],
            data: a,
            index: b,
            e: d3.event
          });
        }).on("mouseout", function (a, b) {
          d3.select(this).classed("hover", !1), s.elementMouseout({
            key: a.label,
            value: a.label,
            series: [{
              key: "Q3",
              value: a.values.Q3,
              color: a.color || q(a, b)
            }, {
              key: "Q2",
              value: a.values.Q2,
              color: a.color || q(a, b)
            }, {
              key: "Q1",
              value: a.values.Q1,
              color: a.color || q(a, b)
            }],
            data: a,
            index: b,
            e: d3.event
          });
        }).on("mousemove", function (a, b) {
          s.elementMousemove({
            e: d3.event
          });
        }), A.select("rect.nv-boxplot-box").watchTransition(v, "nv-boxplot: boxes").attr("y", function (a, b) {
          return n(a.values.Q3);
        }).attr("width", D).attr("x", E).attr("height", function (a, b) {
          return Math.abs(n(a.values.Q3) - n(a.values.Q1)) || 1;
        }).style("fill", function (a, b) {
          return a.color || q(a, b);
        }).style("stroke", function (a, b) {
          return a.color || q(a, b);
        }), B.append("line").attr("class", "nv-boxplot-median"), A.select("line.nv-boxplot-median").watchTransition(v, "nv-boxplot: boxplots line").attr("x1", E).attr("y1", function (a, b) {
          return n(a.values.Q2);
        }).attr("x2", F).attr("y2", function (a, b) {
          return n(a.values.Q2);
        }), g = m.copy(), h = n.copy();
      }), v.renderEnd("nv-boxplot immediate"), b;
    }
    var c,
      d,
      e,
      f,
      g,
      h,
      i = {
        top: 0,
        right: 0,
        bottom: 0,
        left: 0
      },
      j = 960,
      k = 500,
      l = Math.floor(1e4 * Math.random()),
      m = d3.scale.ordinal(),
      n = d3.scale.linear(),
      o = function o(a) {
        return a.x;
      },
      p = function p(a) {
        return a.y;
      },
      q = a.utils.defaultColor(),
      r = null,
      s = d3.dispatch("elementMouseover", "elementMouseout", "elementMousemove", "renderEnd"),
      t = 250,
      u = null,
      v = a.utils.renderWatch(s, t);
    return b.dispatch = s, b.options = a.utils.optionsFunc.bind(b), b._options = Object.create({}, {
      width: {
        get: function get() {
          return j;
        },
        set: function set(a) {
          j = a;
        }
      },
      height: {
        get: function get() {
          return k;
        },
        set: function set(a) {
          k = a;
        }
      },
      maxBoxWidth: {
        get: function get() {
          return u;
        },
        set: function set(a) {
          u = a;
        }
      },
      x: {
        get: function get() {
          return o;
        },
        set: function set(a) {
          o = a;
        }
      },
      y: {
        get: function get() {
          return p;
        },
        set: function set(a) {
          p = a;
        }
      },
      xScale: {
        get: function get() {
          return m;
        },
        set: function set(a) {
          m = a;
        }
      },
      yScale: {
        get: function get() {
          return n;
        },
        set: function set(a) {
          n = a;
        }
      },
      xDomain: {
        get: function get() {
          return c;
        },
        set: function set(a) {
          c = a;
        }
      },
      yDomain: {
        get: function get() {
          return d;
        },
        set: function set(a) {
          d = a;
        }
      },
      xRange: {
        get: function get() {
          return e;
        },
        set: function set(a) {
          e = a;
        }
      },
      yRange: {
        get: function get() {
          return f;
        },
        set: function set(a) {
          f = a;
        }
      },
      id: {
        get: function get() {
          return l;
        },
        set: function set(a) {
          l = a;
        }
      },
      margin: {
        get: function get() {
          return i;
        },
        set: function set(a) {
          i.top = void 0 !== a.top ? a.top : i.top, i.right = void 0 !== a.right ? a.right : i.right, i.bottom = void 0 !== a.bottom ? a.bottom : i.bottom, i.left = void 0 !== a.left ? a.left : i.left;
        }
      },
      color: {
        get: function get() {
          return q;
        },
        set: function set(b) {
          q = a.utils.getColor(b);
        }
      },
      duration: {
        get: function get() {
          return t;
        },
        set: function set(a) {
          t = a, v.reset(t);
        }
      }
    }), a.utils.initOptions(b), b;
  }, a.models.boxPlotChart = function () {
    "use strict";

    function b(k) {
      return t.reset(), t.models(e), l && t.models(f), m && t.models(g), k.each(function (k) {
        var p = d3.select(this);
        a.utils.initSVG(p);
        var t = (i || parseInt(p.style("width")) || 960) - h.left - h.right,
          u = (j || parseInt(p.style("height")) || 400) - h.top - h.bottom;
        if (b.update = function () {
          r.beforeUpdate(), p.transition().duration(s).call(b);
        }, b.container = this, !(k && k.length && k.filter(function (a) {
          return a.values.hasOwnProperty("Q1") && a.values.hasOwnProperty("Q2") && a.values.hasOwnProperty("Q3");
        }).length)) {
          var v = p.selectAll(".nv-noData").data([q]);
          return v.enter().append("text").attr("class", "nvd3 nv-noData").attr("dy", "-.7em").style("text-anchor", "middle"), v.attr("x", h.left + t / 2).attr("y", h.top + u / 2).text(function (a) {
            return a;
          }), b;
        }
        p.selectAll(".nv-noData").remove(), c = e.xScale(), d = e.yScale().clamp(!0);
        var w = p.selectAll("g.nv-wrap.nv-boxPlotWithAxes").data([k]),
          x = w.enter().append("g").attr("class", "nvd3 nv-wrap nv-boxPlotWithAxes").append("g"),
          y = x.append("defs"),
          z = w.select("g");
        x.append("g").attr("class", "nv-x nv-axis"), x.append("g").attr("class", "nv-y nv-axis").append("g").attr("class", "nv-zeroLine").append("line"), x.append("g").attr("class", "nv-barsWrap"), z.attr("transform", "translate(" + h.left + "," + h.top + ")"), n && z.select(".nv-y.nv-axis").attr("transform", "translate(" + t + ",0)"), e.width(t).height(u);
        var A = z.select(".nv-barsWrap").datum(k.filter(function (a) {
          return !a.disabled;
        }));
        if (A.transition().call(e), y.append("clipPath").attr("id", "nv-x-label-clip-" + e.id()).append("rect"), z.select("#nv-x-label-clip-" + e.id() + " rect").attr("width", c.rangeBand() * (o ? 2 : 1)).attr("height", 16).attr("x", -c.rangeBand() / (o ? 1 : 2)), l) {
          f.scale(c).ticks(a.utils.calcTicksX(t / 100, k)).tickSize(-u, 0), z.select(".nv-x.nv-axis").attr("transform", "translate(0," + d.range()[0] + ")"), z.select(".nv-x.nv-axis").call(f);
          var B = z.select(".nv-x.nv-axis").selectAll("g");
          o && B.selectAll("text").attr("transform", function (a, b, c) {
            return "translate(0," + (c % 2 == 0 ? "5" : "17") + ")";
          });
        }
        m && (g.scale(d).ticks(Math.floor(u / 36)).tickSize(-t, 0), z.select(".nv-y.nv-axis").call(g)), z.select(".nv-zeroLine line").attr("x1", 0).attr("x2", t).attr("y1", d(0)).attr("y2", d(0));
      }), t.renderEnd("nv-boxplot chart immediate"), b;
    }
    var c,
      d,
      e = a.models.boxPlot(),
      f = a.models.axis(),
      g = a.models.axis(),
      h = {
        top: 15,
        right: 10,
        bottom: 50,
        left: 60
      },
      i = null,
      j = null,
      k = a.utils.getColor(),
      l = !0,
      m = !0,
      n = !1,
      o = !1,
      p = a.models.tooltip(),
      q = "No Data Available.",
      r = d3.dispatch("beforeUpdate", "renderEnd"),
      s = 250;
    f.orient("bottom").showMaxMin(!1).tickFormat(function (a) {
      return a;
    }), g.orient(n ? "right" : "left").tickFormat(d3.format(",.1f")), p.duration(0);
    var t = a.utils.renderWatch(r, s);
    return e.dispatch.on("elementMouseover.tooltip", function (a) {
      p.data(a).hidden(!1);
    }), e.dispatch.on("elementMouseout.tooltip", function (a) {
      p.data(a).hidden(!0);
    }), e.dispatch.on("elementMousemove.tooltip", function (a) {
      p();
    }), b.dispatch = r, b.boxplot = e, b.xAxis = f, b.yAxis = g, b.tooltip = p, b.options = a.utils.optionsFunc.bind(b), b._options = Object.create({}, {
      width: {
        get: function get() {
          return i;
        },
        set: function set(a) {
          i = a;
        }
      },
      height: {
        get: function get() {
          return j;
        },
        set: function set(a) {
          j = a;
        }
      },
      staggerLabels: {
        get: function get() {
          return o;
        },
        set: function set(a) {
          o = a;
        }
      },
      showXAxis: {
        get: function get() {
          return l;
        },
        set: function set(a) {
          l = a;
        }
      },
      showYAxis: {
        get: function get() {
          return m;
        },
        set: function set(a) {
          m = a;
        }
      },
      tooltipContent: {
        get: function get() {
          return p;
        },
        set: function set(a) {
          p = a;
        }
      },
      noData: {
        get: function get() {
          return q;
        },
        set: function set(a) {
          q = a;
        }
      },
      margin: {
        get: function get() {
          return h;
        },
        set: function set(a) {
          h.top = void 0 !== a.top ? a.top : h.top, h.right = void 0 !== a.right ? a.right : h.right, h.bottom = void 0 !== a.bottom ? a.bottom : h.bottom, h.left = void 0 !== a.left ? a.left : h.left;
        }
      },
      duration: {
        get: function get() {
          return s;
        },
        set: function set(a) {
          s = a, t.reset(s), e.duration(s), f.duration(s), g.duration(s);
        }
      },
      color: {
        get: function get() {
          return k;
        },
        set: function set(b) {
          k = a.utils.getColor(b), e.color(k);
        }
      },
      rightAlignYAxis: {
        get: function get() {
          return n;
        },
        set: function set(a) {
          n = a, g.orient(a ? "right" : "left");
        }
      }
    }), a.utils.inheritOptions(b, e), a.utils.initOptions(b), b;
  }, a.models.bullet = function () {
    "use strict";

    function b(d) {
      return d.each(function (b, d) {
        var p = m - c.left - c.right,
          s = n - c.top - c.bottom;
        o = d3.select(this), a.utils.initSVG(o);
        var t = f.call(this, b, d).slice().sort(d3.descending),
          u = g.call(this, b, d).slice().sort(d3.descending),
          v = h.call(this, b, d).slice().sort(d3.descending),
          w = i.call(this, b, d).slice(),
          x = j.call(this, b, d).slice(),
          y = k.call(this, b, d).slice(),
          z = d3.scale.linear().domain(d3.extent(d3.merge([l, t]))).range(e ? [p, 0] : [0, p]);
        this.__chart__ || d3.scale.linear().domain([0, 1 / 0]).range(z.range());
        this.__chart__ = z;
        var A = d3.min(t),
          B = d3.max(t),
          C = t[1],
          D = o.selectAll("g.nv-wrap.nv-bullet").data([b]),
          E = D.enter().append("g").attr("class", "nvd3 nv-wrap nv-bullet"),
          F = E.append("g"),
          G = D.select("g");
        F.append("rect").attr("class", "nv-range nv-rangeMax"), F.append("rect").attr("class", "nv-range nv-rangeAvg"), F.append("rect").attr("class", "nv-range nv-rangeMin"), F.append("rect").attr("class", "nv-measure"), D.attr("transform", "translate(" + c.left + "," + c.top + ")");
        var H = function H(a) {
            return Math.abs(z(a) - z(0));
          },
          I = function I(a) {
            return z(0 > a ? a : 0);
          };
        G.select("rect.nv-rangeMax").attr("height", s).attr("width", H(B > 0 ? B : A)).attr("x", I(B > 0 ? B : A)).datum(B > 0 ? B : A), G.select("rect.nv-rangeAvg").attr("height", s).attr("width", H(C)).attr("x", I(C)).datum(C), G.select("rect.nv-rangeMin").attr("height", s).attr("width", H(B)).attr("x", I(B)).attr("width", H(B > 0 ? A : B)).attr("x", I(B > 0 ? A : B)).datum(B > 0 ? A : B), G.select("rect.nv-measure").style("fill", q).attr("height", s / 3).attr("y", s / 3).attr("width", 0 > v ? z(0) - z(v[0]) : z(v[0]) - z(0)).attr("x", I(v)).on("mouseover", function () {
          r.elementMouseover({
            value: v[0],
            label: y[0] || "Current",
            color: d3.select(this).style("fill")
          });
        }).on("mousemove", function () {
          r.elementMousemove({
            value: v[0],
            label: y[0] || "Current",
            color: d3.select(this).style("fill")
          });
        }).on("mouseout", function () {
          r.elementMouseout({
            value: v[0],
            label: y[0] || "Current",
            color: d3.select(this).style("fill")
          });
        });
        var J = s / 6,
          K = u.map(function (a, b) {
            return {
              value: a,
              label: x[b]
            };
          });
        F.selectAll("path.nv-markerTriangle").data(K).enter().append("path").attr("class", "nv-markerTriangle").attr("transform", function (a) {
          return "translate(" + z(a.value) + "," + s / 2 + ")";
        }).attr("d", "M0," + J + "L" + J + "," + -J + " " + -J + "," + -J + "Z").on("mouseover", function (a) {
          r.elementMouseover({
            value: a.value,
            label: a.label || "Previous",
            color: d3.select(this).style("fill"),
            pos: [z(a.value), s / 2]
          });
        }).on("mousemove", function (a) {
          r.elementMousemove({
            value: a.value,
            label: a.label || "Previous",
            color: d3.select(this).style("fill")
          });
        }).on("mouseout", function (a, b) {
          r.elementMouseout({
            value: a.value,
            label: a.label || "Previous",
            color: d3.select(this).style("fill")
          });
        }), D.selectAll(".nv-range").on("mouseover", function (a, b) {
          var c = w[b] || (b ? 1 == b ? "Mean" : "Minimum" : "Maximum");
          r.elementMouseover({
            value: a,
            label: c,
            color: d3.select(this).style("fill")
          });
        }).on("mousemove", function () {
          r.elementMousemove({
            value: v[0],
            label: y[0] || "Previous",
            color: d3.select(this).style("fill")
          });
        }).on("mouseout", function (a, b) {
          var c = w[b] || (b ? 1 == b ? "Mean" : "Minimum" : "Maximum");
          r.elementMouseout({
            value: a,
            label: c,
            color: d3.select(this).style("fill")
          });
        });
      }), b;
    }
    var c = {
        top: 0,
        right: 0,
        bottom: 0,
        left: 0
      },
      d = "left",
      e = !1,
      f = function f(a) {
        return a.ranges;
      },
      g = function g(a) {
        return a.markers ? a.markers : [0];
      },
      h = function h(a) {
        return a.measures;
      },
      i = function i(a) {
        return a.rangeLabels ? a.rangeLabels : [];
      },
      j = function j(a) {
        return a.markerLabels ? a.markerLabels : [];
      },
      k = function k(a) {
        return a.measureLabels ? a.measureLabels : [];
      },
      l = [0],
      m = 380,
      n = 30,
      o = null,
      p = null,
      q = a.utils.getColor(["#1f77b4"]),
      r = d3.dispatch("elementMouseover", "elementMouseout", "elementMousemove");
    return b.dispatch = r, b.options = a.utils.optionsFunc.bind(b), b._options = Object.create({}, {
      ranges: {
        get: function get() {
          return f;
        },
        set: function set(a) {
          f = a;
        }
      },
      markers: {
        get: function get() {
          return g;
        },
        set: function set(a) {
          g = a;
        }
      },
      measures: {
        get: function get() {
          return h;
        },
        set: function set(a) {
          h = a;
        }
      },
      forceX: {
        get: function get() {
          return l;
        },
        set: function set(a) {
          l = a;
        }
      },
      width: {
        get: function get() {
          return m;
        },
        set: function set(a) {
          m = a;
        }
      },
      height: {
        get: function get() {
          return n;
        },
        set: function set(a) {
          n = a;
        }
      },
      tickFormat: {
        get: function get() {
          return p;
        },
        set: function set(a) {
          p = a;
        }
      },
      margin: {
        get: function get() {
          return c;
        },
        set: function set(a) {
          c.top = void 0 !== a.top ? a.top : c.top, c.right = void 0 !== a.right ? a.right : c.right, c.bottom = void 0 !== a.bottom ? a.bottom : c.bottom, c.left = void 0 !== a.left ? a.left : c.left;
        }
      },
      orient: {
        get: function get() {
          return d;
        },
        set: function set(a) {
          d = a, e = "right" == d || "bottom" == d;
        }
      },
      color: {
        get: function get() {
          return q;
        },
        set: function set(b) {
          q = a.utils.getColor(b);
        }
      }
    }), a.utils.initOptions(b), b;
  }, a.models.bulletChart = function () {
    "use strict";

    function b(d) {
      return d.each(function (e, o) {
        var p = d3.select(this);
        a.utils.initSVG(p);
        var q = a.utils.availableWidth(k, p, g),
          r = l - g.top - g.bottom;
        if (b.update = function () {
          b(d);
        }, b.container = this, !e || !h.call(this, e, o)) return a.utils.noData(b, p), b;
        p.selectAll(".nv-noData").remove();
        var s = h.call(this, e, o).slice().sort(d3.descending),
          t = i.call(this, e, o).slice().sort(d3.descending),
          u = j.call(this, e, o).slice().sort(d3.descending),
          v = p.selectAll("g.nv-wrap.nv-bulletChart").data([e]),
          w = v.enter().append("g").attr("class", "nvd3 nv-wrap nv-bulletChart"),
          x = w.append("g"),
          y = v.select("g");
        x.append("g").attr("class", "nv-bulletWrap"), x.append("g").attr("class", "nv-titles"), v.attr("transform", "translate(" + g.left + "," + g.top + ")");
        var z = d3.scale.linear().domain([0, Math.max(s[0], t[0], u[0])]).range(f ? [q, 0] : [0, q]),
          A = this.__chart__ || d3.scale.linear().domain([0, 1 / 0]).range(z.range());
        this.__chart__ = z;
        var B = x.select(".nv-titles").append("g").attr("text-anchor", "end").attr("transform", "translate(-6," + (l - g.top - g.bottom) / 2 + ")");
        B.append("text").attr("class", "nv-title").text(function (a) {
          return a.title;
        }), B.append("text").attr("class", "nv-subtitle").attr("dy", "1em").text(function (a) {
          return a.subtitle;
        }), c.width(q).height(r);
        var C = y.select(".nv-bulletWrap");
        d3.transition(C).call(c);
        var D = m || z.tickFormat(q / 100),
          E = y.selectAll("g.nv-tick").data(z.ticks(n ? n : q / 50), function (a) {
            return this.textContent || D(a);
          }),
          F = E.enter().append("g").attr("class", "nv-tick").attr("transform", function (a) {
            return "translate(" + A(a) + ",0)";
          }).style("opacity", 1e-6);
        F.append("line").attr("y1", r).attr("y2", 7 * r / 6), F.append("text").attr("text-anchor", "middle").attr("dy", "1em").attr("y", 7 * r / 6).text(D);
        var G = d3.transition(E).attr("transform", function (a) {
          return "translate(" + z(a) + ",0)";
        }).style("opacity", 1);
        G.select("line").attr("y1", r).attr("y2", 7 * r / 6), G.select("text").attr("y", 7 * r / 6), d3.transition(E.exit()).attr("transform", function (a) {
          return "translate(" + z(a) + ",0)";
        }).style("opacity", 1e-6).remove();
      }), d3.timer.flush(), b;
    }
    var c = a.models.bullet(),
      d = a.models.tooltip(),
      e = "left",
      f = !1,
      g = {
        top: 5,
        right: 40,
        bottom: 20,
        left: 120
      },
      h = function h(a) {
        return a.ranges;
      },
      i = function i(a) {
        return a.markers ? a.markers : [0];
      },
      j = function j(a) {
        return a.measures;
      },
      k = null,
      l = 55,
      m = null,
      n = null,
      o = null,
      p = d3.dispatch();
    return d.duration(0).headerEnabled(!1), c.dispatch.on("elementMouseover.tooltip", function (a) {
      a.series = {
        key: a.label,
        value: a.value,
        color: a.color
      }, d.data(a).hidden(!1);
    }), c.dispatch.on("elementMouseout.tooltip", function (a) {
      d.hidden(!0);
    }), c.dispatch.on("elementMousemove.tooltip", function (a) {
      d();
    }), b.bullet = c, b.dispatch = p, b.tooltip = d, b.options = a.utils.optionsFunc.bind(b), b._options = Object.create({}, {
      ranges: {
        get: function get() {
          return h;
        },
        set: function set(a) {
          h = a;
        }
      },
      markers: {
        get: function get() {
          return i;
        },
        set: function set(a) {
          i = a;
        }
      },
      measures: {
        get: function get() {
          return j;
        },
        set: function set(a) {
          j = a;
        }
      },
      width: {
        get: function get() {
          return k;
        },
        set: function set(a) {
          k = a;
        }
      },
      height: {
        get: function get() {
          return l;
        },
        set: function set(a) {
          l = a;
        }
      },
      tickFormat: {
        get: function get() {
          return m;
        },
        set: function set(a) {
          m = a;
        }
      },
      ticks: {
        get: function get() {
          return n;
        },
        set: function set(a) {
          n = a;
        }
      },
      noData: {
        get: function get() {
          return o;
        },
        set: function set(a) {
          o = a;
        }
      },
      margin: {
        get: function get() {
          return g;
        },
        set: function set(a) {
          g.top = void 0 !== a.top ? a.top : g.top, g.right = void 0 !== a.right ? a.right : g.right, g.bottom = void 0 !== a.bottom ? a.bottom : g.bottom, g.left = void 0 !== a.left ? a.left : g.left;
        }
      },
      orient: {
        get: function get() {
          return e;
        },
        set: function set(a) {
          e = a, f = "right" == e || "bottom" == e;
        }
      }
    }), a.utils.inheritOptions(b, c), a.utils.initOptions(b), b;
  }, a.models.candlestickBar = function () {
    "use strict";

    function b(x) {
      return x.each(function (b) {
        c = d3.select(this);
        var x = a.utils.availableWidth(i, c, h),
          y = a.utils.availableHeight(j, c, h);
        a.utils.initSVG(c);
        var A = x / b[0].values.length * .45;
        l.domain(d || d3.extent(b[0].values.map(n).concat(t))), v ? l.range(f || [.5 * x / b[0].values.length, x * (b[0].values.length - .5) / b[0].values.length]) : l.range(f || [5 + A / 2, x - A / 2 - 5]), m.domain(e || [d3.min(b[0].values.map(s).concat(u)), d3.max(b[0].values.map(r).concat(u))]).range(g || [y, 0]), l.domain()[0] === l.domain()[1] && (l.domain()[0] ? l.domain([l.domain()[0] - .01 * l.domain()[0], l.domain()[1] + .01 * l.domain()[1]]) : l.domain([-1, 1])), m.domain()[0] === m.domain()[1] && (m.domain()[0] ? m.domain([m.domain()[0] + .01 * m.domain()[0], m.domain()[1] - .01 * m.domain()[1]]) : m.domain([-1, 1]));
        var B = d3.select(this).selectAll("g.nv-wrap.nv-candlestickBar").data([b[0].values]),
          C = B.enter().append("g").attr("class", "nvd3 nv-wrap nv-candlestickBar"),
          D = C.append("defs"),
          E = C.append("g"),
          F = B.select("g");
        E.append("g").attr("class", "nv-ticks"), B.attr("transform", "translate(" + h.left + "," + h.top + ")"), c.on("click", function (a, b) {
          z.chartClick({
            data: a,
            index: b,
            pos: d3.event,
            id: k
          });
        }), D.append("clipPath").attr("id", "nv-chart-clip-path-" + k).append("rect"), B.select("#nv-chart-clip-path-" + k + " rect").attr("width", x).attr("height", y), F.attr("clip-path", w ? "url(#nv-chart-clip-path-" + k + ")" : "");
        var G = B.select(".nv-ticks").selectAll(".nv-tick").data(function (a) {
          return a;
        });
        G.exit().remove();
        var H = G.enter().append("g");
        G.attr("class", function (a, b, c) {
          return (p(a, b) > q(a, b) ? "nv-tick negative" : "nv-tick positive") + " nv-tick-" + c + "-" + b;
        });
        H.append("line").attr("class", "nv-candlestick-lines").attr("transform", function (a, b) {
          return "translate(" + l(n(a, b)) + ",0)";
        }).attr("x1", 0).attr("y1", function (a, b) {
          return m(r(a, b));
        }).attr("x2", 0).attr("y2", function (a, b) {
          return m(s(a, b));
        }), H.append("rect").attr("class", "nv-candlestick-rects nv-bars").attr("transform", function (a, b) {
          return "translate(" + (l(n(a, b)) - A / 2) + "," + (m(o(a, b)) - (p(a, b) > q(a, b) ? m(q(a, b)) - m(p(a, b)) : 0)) + ")";
        }).attr("x", 0).attr("y", 0).attr("width", A).attr("height", function (a, b) {
          var c = p(a, b),
            d = q(a, b);
          return c > d ? m(d) - m(c) : m(c) - m(d);
        });
        G.select(".nv-candlestick-lines").transition().attr("transform", function (a, b) {
          return "translate(" + l(n(a, b)) + ",0)";
        }).attr("x1", 0).attr("y1", function (a, b) {
          return m(r(a, b));
        }).attr("x2", 0).attr("y2", function (a, b) {
          return m(s(a, b));
        }), G.select(".nv-candlestick-rects").transition().attr("transform", function (a, b) {
          return "translate(" + (l(n(a, b)) - A / 2) + "," + (m(o(a, b)) - (p(a, b) > q(a, b) ? m(q(a, b)) - m(p(a, b)) : 0)) + ")";
        }).attr("x", 0).attr("y", 0).attr("width", A).attr("height", function (a, b) {
          var c = p(a, b),
            d = q(a, b);
          return c > d ? m(d) - m(c) : m(c) - m(d);
        });
      }), b;
    }
    var c,
      d,
      e,
      f,
      g,
      h = {
        top: 0,
        right: 0,
        bottom: 0,
        left: 0
      },
      i = null,
      j = null,
      k = Math.floor(1e4 * Math.random()),
      l = d3.scale.linear(),
      m = d3.scale.linear(),
      n = function n(a) {
        return a.x;
      },
      o = function o(a) {
        return a.y;
      },
      p = function p(a) {
        return a.open;
      },
      q = function q(a) {
        return a.close;
      },
      r = function r(a) {
        return a.high;
      },
      s = function s(a) {
        return a.low;
      },
      t = [],
      u = [],
      v = !1,
      w = !0,
      x = a.utils.defaultColor(),
      y = !1,
      z = d3.dispatch("stateChange", "changeState", "renderEnd", "chartClick", "elementClick", "elementDblClick", "elementMouseover", "elementMouseout", "elementMousemove");
    return b.highlightPoint = function (a, d) {
      b.clearHighlights(), c.select(".nv-candlestickBar .nv-tick-0-" + a).classed("hover", d);
    }, b.clearHighlights = function () {
      c.select(".nv-candlestickBar .nv-tick.hover").classed("hover", !1);
    }, b.dispatch = z, b.options = a.utils.optionsFunc.bind(b), b._options = Object.create({}, {
      width: {
        get: function get() {
          return i;
        },
        set: function set(a) {
          i = a;
        }
      },
      height: {
        get: function get() {
          return j;
        },
        set: function set(a) {
          j = a;
        }
      },
      xScale: {
        get: function get() {
          return l;
        },
        set: function set(a) {
          l = a;
        }
      },
      yScale: {
        get: function get() {
          return m;
        },
        set: function set(a) {
          m = a;
        }
      },
      xDomain: {
        get: function get() {
          return d;
        },
        set: function set(a) {
          d = a;
        }
      },
      yDomain: {
        get: function get() {
          return e;
        },
        set: function set(a) {
          e = a;
        }
      },
      xRange: {
        get: function get() {
          return f;
        },
        set: function set(a) {
          f = a;
        }
      },
      yRange: {
        get: function get() {
          return g;
        },
        set: function set(a) {
          g = a;
        }
      },
      forceX: {
        get: function get() {
          return t;
        },
        set: function set(a) {
          t = a;
        }
      },
      forceY: {
        get: function get() {
          return u;
        },
        set: function set(a) {
          u = a;
        }
      },
      padData: {
        get: function get() {
          return v;
        },
        set: function set(a) {
          v = a;
        }
      },
      clipEdge: {
        get: function get() {
          return w;
        },
        set: function set(a) {
          w = a;
        }
      },
      id: {
        get: function get() {
          return k;
        },
        set: function set(a) {
          k = a;
        }
      },
      interactive: {
        get: function get() {
          return y;
        },
        set: function set(a) {
          y = a;
        }
      },
      x: {
        get: function get() {
          return n;
        },
        set: function set(a) {
          n = a;
        }
      },
      y: {
        get: function get() {
          return o;
        },
        set: function set(a) {
          o = a;
        }
      },
      open: {
        get: function get() {
          return p();
        },
        set: function set(a) {
          p = a;
        }
      },
      close: {
        get: function get() {
          return q();
        },
        set: function set(a) {
          q = a;
        }
      },
      high: {
        get: function get() {
          return r;
        },
        set: function set(a) {
          r = a;
        }
      },
      low: {
        get: function get() {
          return s;
        },
        set: function set(a) {
          s = a;
        }
      },
      margin: {
        get: function get() {
          return h;
        },
        set: function set(a) {
          h.top = void 0 != a.top ? a.top : h.top, h.right = void 0 != a.right ? a.right : h.right, h.bottom = void 0 != a.bottom ? a.bottom : h.bottom, h.left = void 0 != a.left ? a.left : h.left;
        }
      },
      color: {
        get: function get() {
          return x;
        },
        set: function set(b) {
          x = a.utils.getColor(b);
        }
      }
    }), a.utils.initOptions(b), b;
  }, a.models.cumulativeLineChart = function () {
    "use strict";

    function b(l) {
      return H.reset(), H.models(f), r && H.models(g), s && H.models(h), l.each(function (l) {
        function A(a, c) {
          d3.select(b.container).style("cursor", "ew-resize");
        }
        function E(a, b) {
          G.x = d3.event.x, G.i = Math.round(F.invert(G.x)), K();
        }
        function H(a, c) {
          d3.select(b.container).style("cursor", "auto"), y.index = G.i, C.stateChange(y);
        }
        function K() {
          ba.data([G]);
          var a = b.duration();
          b.duration(0), b.update(), b.duration(a);
        }
        var L = d3.select(this);
        a.utils.initSVG(L), L.classed("nv-chart-" + x, !0);
        var M = this,
          N = a.utils.availableWidth(o, L, m),
          O = a.utils.availableHeight(p, L, m);
        if (b.update = function () {
          0 === D ? L.call(b) : L.transition().duration(D).call(b);
        }, b.container = this, y.setter(J(l), b.update).getter(I(l)).update(), y.disabled = l.map(function (a) {
          return !!a.disabled;
        }), !z) {
          var P;
          z = {};
          for (P in y) y[P] instanceof Array ? z[P] = y[P].slice(0) : z[P] = y[P];
        }
        var Q = d3.behavior.drag().on("dragstart", A).on("drag", E).on("dragend", H);
        if (!(l && l.length && l.filter(function (a) {
          return a.values.length;
        }).length)) return a.utils.noData(b, L), b;
        if (L.selectAll(".nv-noData").remove(), d = f.xScale(), e = f.yScale(), w) f.yDomain(null);else {
          var R = l.filter(function (a) {
              return !a.disabled;
            }).map(function (a, b) {
              var c = d3.extent(a.values, f.y());
              return c[0] < -.95 && (c[0] = -.95), [(c[0] - c[1]) / (1 + c[1]), (c[1] - c[0]) / (1 + c[0])];
            }),
            S = [d3.min(R, function (a) {
              return a[0];
            }), d3.max(R, function (a) {
              return a[1];
            })];
          f.yDomain(S);
        }
        F.domain([0, l[0].values.length - 1]).range([0, N]).clamp(!0);
        var l = c(G.i, l),
          T = v ? "none" : "all",
          U = L.selectAll("g.nv-wrap.nv-cumulativeLine").data([l]),
          V = U.enter().append("g").attr("class", "nvd3 nv-wrap nv-cumulativeLine").append("g"),
          W = U.select("g");
        if (V.append("g").attr("class", "nv-interactive"), V.append("g").attr("class", "nv-x nv-axis").style("pointer-events", "none"), V.append("g").attr("class", "nv-y nv-axis"), V.append("g").attr("class", "nv-background"), V.append("g").attr("class", "nv-linesWrap").style("pointer-events", T), V.append("g").attr("class", "nv-avgLinesWrap").style("pointer-events", "none"), V.append("g").attr("class", "nv-legendWrap"), V.append("g").attr("class", "nv-controlsWrap"), q && (i.width(N), W.select(".nv-legendWrap").datum(l).call(i), m.top != i.height() && (m.top = i.height(), O = a.utils.availableHeight(p, L, m)), W.select(".nv-legendWrap").attr("transform", "translate(0," + -m.top + ")")), u) {
          var X = [{
            key: "Re-scale y-axis",
            disabled: !w
          }];
          j.width(140).color(["#444", "#444", "#444"]).rightAlign(!1).margin({
            top: 5,
            right: 0,
            bottom: 5,
            left: 20
          }), W.select(".nv-controlsWrap").datum(X).attr("transform", "translate(0," + -m.top + ")").call(j);
        }
        U.attr("transform", "translate(" + m.left + "," + m.top + ")"), t && W.select(".nv-y.nv-axis").attr("transform", "translate(" + N + ",0)");
        var Y = l.filter(function (a) {
          return a.tempDisabled;
        });
        U.select(".tempDisabled").remove(), Y.length && U.append("text").attr("class", "tempDisabled").attr("x", N / 2).attr("y", "-.71em").style("text-anchor", "end").text(Y.map(function (a) {
          return a.key;
        }).join(", ") + " values cannot be calculated for this time period."), v && (k.width(N).height(O).margin({
          left: m.left,
          top: m.top
        }).svgContainer(L).xScale(d), U.select(".nv-interactive").call(k)), V.select(".nv-background").append("rect"), W.select(".nv-background rect").attr("width", N).attr("height", O), f.y(function (a) {
          return a.display.y;
        }).width(N).height(O).color(l.map(function (a, b) {
          return a.color || n(a, b);
        }).filter(function (a, b) {
          return !l[b].disabled && !l[b].tempDisabled;
        }));
        var Z = W.select(".nv-linesWrap").datum(l.filter(function (a) {
          return !a.disabled && !a.tempDisabled;
        }));
        Z.call(f), l.forEach(function (a, b) {
          a.seriesIndex = b;
        });
        var $ = l.filter(function (a) {
            return !a.disabled && !!B(a);
          }),
          _ = W.select(".nv-avgLinesWrap").selectAll("line").data($, function (a) {
            return a.key;
          }),
          aa = function aa(a) {
            var b = e(B(a));
            return 0 > b ? 0 : b > O ? O : b;
          };
        _.enter().append("line").style("stroke-width", 2).style("stroke-dasharray", "10,10").style("stroke", function (a, b) {
          return f.color()(a, a.seriesIndex);
        }).attr("x1", 0).attr("x2", N).attr("y1", aa).attr("y2", aa), _.style("stroke-opacity", function (a) {
          var b = e(B(a));
          return 0 > b || b > O ? 0 : 1;
        }).attr("x1", 0).attr("x2", N).attr("y1", aa).attr("y2", aa), _.exit().remove();
        var ba = Z.selectAll(".nv-indexLine").data([G]);
        ba.enter().append("rect").attr("class", "nv-indexLine").attr("width", 3).attr("x", -2).attr("fill", "red").attr("fill-opacity", .5).style("pointer-events", "all").call(Q), ba.attr("transform", function (a) {
          return "translate(" + F(a.i) + ",0)";
        }).attr("height", O), r && (g.scale(d)._ticks(a.utils.calcTicksX(N / 70, l)).tickSize(-O, 0), W.select(".nv-x.nv-axis").attr("transform", "translate(0," + e.range()[0] + ")"), W.select(".nv-x.nv-axis").call(g)), s && (h.scale(e)._ticks(a.utils.calcTicksY(O / 36, l)).tickSize(-N, 0), W.select(".nv-y.nv-axis").call(h)), W.select(".nv-background rect").on("click", function () {
          G.x = d3.mouse(this)[0], G.i = Math.round(F.invert(G.x)), y.index = G.i, C.stateChange(y), K();
        }), f.dispatch.on("elementClick", function (a) {
          G.i = a.pointIndex, G.x = F(G.i), y.index = G.i, C.stateChange(y), K();
        }), j.dispatch.on("legendClick", function (a, c) {
          a.disabled = !a.disabled, w = !a.disabled, y.rescaleY = w, C.stateChange(y), b.update();
        }), i.dispatch.on("stateChange", function (a) {
          for (var c in a) y[c] = a[c];
          C.stateChange(y), b.update();
        }), k.dispatch.on("elementMousemove", function (c) {
          f.clearHighlights();
          var d,
            e,
            i,
            j = [];
          if (l.filter(function (a, b) {
            return a.seriesIndex = b, !a.disabled;
          }).forEach(function (g, h) {
            e = a.interactiveBisect(g.values, c.pointXValue, b.x()), f.highlightPoint(h, e, !0);
            var k = g.values[e];
            "undefined" != typeof k && ("undefined" == typeof d && (d = k), "undefined" == typeof i && (i = b.xScale()(b.x()(k, e))), j.push({
              key: g.key,
              value: b.y()(k, e),
              color: n(g, g.seriesIndex)
            }));
          }), j.length > 2) {
            var m = b.yScale().invert(c.mouseY),
              o = Math.abs(b.yScale().domain()[0] - b.yScale().domain()[1]),
              p = .03 * o,
              q = a.nearestValueIndex(j.map(function (a) {
                return a.value;
              }), m, p);
            null !== q && (j[q].highlight = !0);
          }
          var r = g.tickFormat()(b.x()(d, e), e);
          k.tooltip.chartContainer(M.parentNode).valueFormatter(function (a, b) {
            return h.tickFormat()(a);
          }).data({
            value: r,
            series: j
          })(), k.renderGuideLine(i);
        }), k.dispatch.on("elementMouseout", function (a) {
          f.clearHighlights();
        }), C.on("changeState", function (a) {
          "undefined" != typeof a.disabled && (l.forEach(function (b, c) {
            b.disabled = a.disabled[c];
          }), y.disabled = a.disabled), "undefined" != typeof a.index && (G.i = a.index, G.x = F(G.i), y.index = a.index, ba.data([G])), "undefined" != typeof a.rescaleY && (w = a.rescaleY), b.update();
        });
      }), H.renderEnd("cumulativeLineChart immediate"), b;
    }
    function c(a, b) {
      return K || (K = f.y()), b.map(function (b, c) {
        if (!b.values) return b;
        var d = b.values[a];
        if (null == d) return b;
        var e = K(d, a);
        return -.95 > e && !E ? (b.tempDisabled = !0, b) : (b.tempDisabled = !1, b.values = b.values.map(function (a, b) {
          return a.display = {
            y: (K(a, b) - e) / (1 + e)
          }, a;
        }), b);
      });
    }
    var d,
      e,
      f = a.models.line(),
      g = a.models.axis(),
      h = a.models.axis(),
      i = a.models.legend(),
      j = a.models.legend(),
      k = a.interactiveGuideline(),
      l = a.models.tooltip(),
      m = {
        top: 30,
        right: 30,
        bottom: 50,
        left: 60
      },
      n = a.utils.defaultColor(),
      o = null,
      p = null,
      q = !0,
      r = !0,
      s = !0,
      t = !1,
      u = !0,
      v = !1,
      w = !0,
      x = f.id(),
      y = a.utils.state(),
      z = null,
      A = null,
      B = function B(a) {
        return a.average;
      },
      C = d3.dispatch("stateChange", "changeState", "renderEnd"),
      D = 250,
      E = !1;
    y.index = 0, y.rescaleY = w, g.orient("bottom").tickPadding(7), h.orient(t ? "right" : "left"), l.valueFormatter(function (a, b) {
      return h.tickFormat()(a, b);
    }).headerFormatter(function (a, b) {
      return g.tickFormat()(a, b);
    }), j.updateState(!1);
    var F = d3.scale.linear(),
      G = {
        i: 0,
        x: 0
      },
      H = a.utils.renderWatch(C, D),
      I = function I(a) {
        return function () {
          return {
            active: a.map(function (a) {
              return !a.disabled;
            }),
            index: G.i,
            rescaleY: w
          };
        };
      },
      J = function J(a) {
        return function (b) {
          void 0 !== b.index && (G.i = b.index), void 0 !== b.rescaleY && (w = b.rescaleY), void 0 !== b.active && a.forEach(function (a, c) {
            a.disabled = !b.active[c];
          });
        };
      };
    f.dispatch.on("elementMouseover.tooltip", function (a) {
      var c = {
        x: b.x()(a.point),
        y: b.y()(a.point),
        color: a.point.color
      };
      a.point = c, l.data(a).hidden(!1);
    }), f.dispatch.on("elementMouseout.tooltip", function (a) {
      l.hidden(!0);
    });
    var K = null;
    return b.dispatch = C, b.lines = f, b.legend = i, b.controls = j, b.xAxis = g, b.yAxis = h, b.interactiveLayer = k, b.state = y, b.tooltip = l, b.options = a.utils.optionsFunc.bind(b), b._options = Object.create({}, {
      width: {
        get: function get() {
          return o;
        },
        set: function set(a) {
          o = a;
        }
      },
      height: {
        get: function get() {
          return p;
        },
        set: function set(a) {
          p = a;
        }
      },
      rescaleY: {
        get: function get() {
          return w;
        },
        set: function set(a) {
          w = a;
        }
      },
      showControls: {
        get: function get() {
          return u;
        },
        set: function set(a) {
          u = a;
        }
      },
      showLegend: {
        get: function get() {
          return q;
        },
        set: function set(a) {
          q = a;
        }
      },
      average: {
        get: function get() {
          return B;
        },
        set: function set(a) {
          B = a;
        }
      },
      defaultState: {
        get: function get() {
          return z;
        },
        set: function set(a) {
          z = a;
        }
      },
      noData: {
        get: function get() {
          return A;
        },
        set: function set(a) {
          A = a;
        }
      },
      showXAxis: {
        get: function get() {
          return r;
        },
        set: function set(a) {
          r = a;
        }
      },
      showYAxis: {
        get: function get() {
          return s;
        },
        set: function set(a) {
          s = a;
        }
      },
      noErrorCheck: {
        get: function get() {
          return E;
        },
        set: function set(a) {
          E = a;
        }
      },
      margin: {
        get: function get() {
          return m;
        },
        set: function set(a) {
          m.top = void 0 !== a.top ? a.top : m.top, m.right = void 0 !== a.right ? a.right : m.right, m.bottom = void 0 !== a.bottom ? a.bottom : m.bottom, m.left = void 0 !== a.left ? a.left : m.left;
        }
      },
      color: {
        get: function get() {
          return n;
        },
        set: function set(b) {
          n = a.utils.getColor(b), i.color(n);
        }
      },
      useInteractiveGuideline: {
        get: function get() {
          return v;
        },
        set: function set(a) {
          v = a, a === !0 && (b.interactive(!1), b.useVoronoi(!1));
        }
      },
      rightAlignYAxis: {
        get: function get() {
          return t;
        },
        set: function set(a) {
          t = a, h.orient(a ? "right" : "left");
        }
      },
      duration: {
        get: function get() {
          return D;
        },
        set: function set(a) {
          D = a, f.duration(D), g.duration(D), h.duration(D), H.reset(D);
        }
      }
    }), a.utils.inheritOptions(b, f), a.utils.initOptions(b), b;
  }, a.models.discreteBar = function () {
    "use strict";

    function b(m) {
      return y.reset(), m.each(function (b) {
        var m = k - j.left - j.right,
          x = l - j.top - j.bottom;
        c = d3.select(this), a.utils.initSVG(c), b.forEach(function (a, b) {
          a.values.forEach(function (a) {
            a.series = b;
          });
        });
        var z = d && e ? [] : b.map(function (a) {
          return a.values.map(function (a, b) {
            return {
              x: p(a, b),
              y: q(a, b),
              y0: a.y0
            };
          });
        });
        n.domain(d || d3.merge(z).map(function (a) {
          return a.x;
        })).rangeBands(f || [0, m], .1), o.domain(e || d3.extent(d3.merge(z).map(function (a) {
          return a.y;
        }).concat(r))), t ? o.range(g || [x - (o.domain()[0] < 0 ? 12 : 0), o.domain()[1] > 0 ? 12 : 0]) : o.range(g || [x, 0]), h = h || n, i = i || o.copy().range([o(0), o(0)]);
        var A = c.selectAll("g.nv-wrap.nv-discretebar").data([b]),
          B = A.enter().append("g").attr("class", "nvd3 nv-wrap nv-discretebar"),
          C = B.append("g");
        A.select("g");
        C.append("g").attr("class", "nv-groups"), A.attr("transform", "translate(" + j.left + "," + j.top + ")");
        var D = A.select(".nv-groups").selectAll(".nv-group").data(function (a) {
          return a;
        }, function (a) {
          return a.key;
        });
        D.enter().append("g").style("stroke-opacity", 1e-6).style("fill-opacity", 1e-6), D.exit().watchTransition(y, "discreteBar: exit groups").style("stroke-opacity", 1e-6).style("fill-opacity", 1e-6).remove(), D.attr("class", function (a, b) {
          return "nv-group nv-series-" + b;
        }).classed("hover", function (a) {
          return a.hover;
        }), D.watchTransition(y, "discreteBar: groups").style("stroke-opacity", 1).style("fill-opacity", .75);
        var E = D.selectAll("g.nv-bar").data(function (a) {
          return a.values;
        });
        E.exit().remove();
        var F = E.enter().append("g").attr("transform", function (a, b, c) {
          return "translate(" + (n(p(a, b)) + .05 * n.rangeBand()) + ", " + o(0) + ")";
        }).on("mouseover", function (a, b) {
          d3.select(this).classed("hover", !0), v.elementMouseover({
            data: a,
            index: b,
            color: d3.select(this).style("fill")
          });
        }).on("mouseout", function (a, b) {
          d3.select(this).classed("hover", !1), v.elementMouseout({
            data: a,
            index: b,
            color: d3.select(this).style("fill")
          });
        }).on("mousemove", function (a, b) {
          v.elementMousemove({
            data: a,
            index: b,
            color: d3.select(this).style("fill")
          });
        }).on("click", function (a, b) {
          v.elementClick({
            data: a,
            index: b,
            color: d3.select(this).style("fill")
          }), d3.event.stopPropagation();
        }).on("dblclick", function (a, b) {
          v.elementDblClick({
            data: a,
            index: b,
            color: d3.select(this).style("fill")
          }), d3.event.stopPropagation();
        });
        F.append("rect").attr("height", 0).attr("width", .9 * n.rangeBand() / b.length), t ? (F.append("text").attr("text-anchor", "middle"), E.select("text").text(function (a, b) {
          return u(q(a, b));
        }).watchTransition(y, "discreteBar: bars text").attr("x", .9 * n.rangeBand() / 2).attr("y", function (a, b) {
          return q(a, b) < 0 ? o(q(a, b)) - o(0) + 12 : -4;
        })) : E.selectAll("text").remove(), E.attr("class", function (a, b) {
          return q(a, b) < 0 ? "nv-bar negative" : "nv-bar positive";
        }).style("fill", function (a, b) {
          return a.color || s(a, b);
        }).style("stroke", function (a, b) {
          return a.color || s(a, b);
        }).select("rect").attr("class", w).watchTransition(y, "discreteBar: bars rect").attr("width", .9 * n.rangeBand() / b.length), E.watchTransition(y, "discreteBar: bars").attr("transform", function (a, b) {
          var c = n(p(a, b)) + .05 * n.rangeBand(),
            d = q(a, b) < 0 ? o(0) : o(0) - o(q(a, b)) < 1 ? o(0) - 1 : o(q(a, b));
          return "translate(" + c + ", " + d + ")";
        }).select("rect").attr("height", function (a, b) {
          return Math.max(Math.abs(o(q(a, b)) - o(e && e[0] || 0)) || 1);
        }), h = n.copy(), i = o.copy();
      }), y.renderEnd("discreteBar immediate"), b;
    }
    var c,
      d,
      e,
      f,
      g,
      h,
      i,
      j = {
        top: 0,
        right: 0,
        bottom: 0,
        left: 0
      },
      k = 960,
      l = 500,
      m = Math.floor(1e4 * Math.random()),
      n = d3.scale.ordinal(),
      o = d3.scale.linear(),
      p = function p(a) {
        return a.x;
      },
      q = function q(a) {
        return a.y;
      },
      r = [0],
      s = a.utils.defaultColor(),
      t = !1,
      u = d3.format(",.2f"),
      v = d3.dispatch("chartClick", "elementClick", "elementDblClick", "elementMouseover", "elementMouseout", "elementMousemove", "renderEnd"),
      w = "discreteBar",
      x = 250,
      y = a.utils.renderWatch(v, x);
    return b.dispatch = v, b.options = a.utils.optionsFunc.bind(b), b._options = Object.create({}, {
      width: {
        get: function get() {
          return k;
        },
        set: function set(a) {
          k = a;
        }
      },
      height: {
        get: function get() {
          return l;
        },
        set: function set(a) {
          l = a;
        }
      },
      forceY: {
        get: function get() {
          return r;
        },
        set: function set(a) {
          r = a;
        }
      },
      showValues: {
        get: function get() {
          return t;
        },
        set: function set(a) {
          t = a;
        }
      },
      x: {
        get: function get() {
          return p;
        },
        set: function set(a) {
          p = a;
        }
      },
      y: {
        get: function get() {
          return q;
        },
        set: function set(a) {
          q = a;
        }
      },
      xScale: {
        get: function get() {
          return n;
        },
        set: function set(a) {
          n = a;
        }
      },
      yScale: {
        get: function get() {
          return o;
        },
        set: function set(a) {
          o = a;
        }
      },
      xDomain: {
        get: function get() {
          return d;
        },
        set: function set(a) {
          d = a;
        }
      },
      yDomain: {
        get: function get() {
          return e;
        },
        set: function set(a) {
          e = a;
        }
      },
      xRange: {
        get: function get() {
          return f;
        },
        set: function set(a) {
          f = a;
        }
      },
      yRange: {
        get: function get() {
          return g;
        },
        set: function set(a) {
          g = a;
        }
      },
      valueFormat: {
        get: function get() {
          return u;
        },
        set: function set(a) {
          u = a;
        }
      },
      id: {
        get: function get() {
          return m;
        },
        set: function set(a) {
          m = a;
        }
      },
      rectClass: {
        get: function get() {
          return w;
        },
        set: function set(a) {
          w = a;
        }
      },
      margin: {
        get: function get() {
          return j;
        },
        set: function set(a) {
          j.top = void 0 !== a.top ? a.top : j.top, j.right = void 0 !== a.right ? a.right : j.right, j.bottom = void 0 !== a.bottom ? a.bottom : j.bottom, j.left = void 0 !== a.left ? a.left : j.left;
        }
      },
      color: {
        get: function get() {
          return s;
        },
        set: function set(b) {
          s = a.utils.getColor(b);
        }
      },
      duration: {
        get: function get() {
          return x;
        },
        set: function set(a) {
          x = a, y.reset(x);
        }
      }
    }), a.utils.initOptions(b), b;
  }, a.models.discreteBarChart = function () {
    "use strict";

    function b(h) {
      return v.reset(), v.models(e), m && v.models(f), n && v.models(g), h.each(function (h) {
        var l = d3.select(this);
        a.utils.initSVG(l);
        var s = a.utils.availableWidth(j, l, i),
          v = a.utils.availableHeight(k, l, i);
        if (b.update = function () {
          t.beforeUpdate(), l.transition().duration(u).call(b);
        }, b.container = this, !(h && h.length && h.filter(function (a) {
          return a.values.length;
        }).length)) return a.utils.noData(b, l), b;
        l.selectAll(".nv-noData").remove(), c = e.xScale(), d = e.yScale().clamp(!0);
        var w = l.selectAll("g.nv-wrap.nv-discreteBarWithAxes").data([h]),
          x = w.enter().append("g").attr("class", "nvd3 nv-wrap nv-discreteBarWithAxes").append("g"),
          y = x.append("defs"),
          z = w.select("g");
        x.append("g").attr("class", "nv-x nv-axis"), x.append("g").attr("class", "nv-y nv-axis").append("g").attr("class", "nv-zeroLine").append("line"), x.append("g").attr("class", "nv-barsWrap"), z.attr("transform", "translate(" + i.left + "," + i.top + ")"), o && z.select(".nv-y.nv-axis").attr("transform", "translate(" + s + ",0)"), e.width(s).height(v);
        var A = z.select(".nv-barsWrap").datum(h.filter(function (a) {
          return !a.disabled;
        }));
        if (A.transition().call(e), y.append("clipPath").attr("id", "nv-x-label-clip-" + e.id()).append("rect"), z.select("#nv-x-label-clip-" + e.id() + " rect").attr("width", c.rangeBand() * (p ? 2 : 1)).attr("height", 16).attr("x", -c.rangeBand() / (p ? 1 : 2)), m) {
          f.scale(c)._ticks(a.utils.calcTicksX(s / 100, h)).tickSize(-v, 0), z.select(".nv-x.nv-axis").attr("transform", "translate(0," + (d.range()[0] + (e.showValues() && d.domain()[0] < 0 ? 16 : 0)) + ")"), z.select(".nv-x.nv-axis").call(f);
          var B = z.select(".nv-x.nv-axis").selectAll("g");
          p && B.selectAll("text").attr("transform", function (a, b, c) {
            return "translate(0," + (c % 2 == 0 ? "5" : "17") + ")";
          }), r && B.selectAll(".tick text").attr("transform", "rotate(" + r + " 0,0)").style("text-anchor", r > 0 ? "start" : "end"), q && z.selectAll(".tick text").call(a.utils.wrapTicks, b.xAxis.rangeBand());
        }
        n && (g.scale(d)._ticks(a.utils.calcTicksY(v / 36, h)).tickSize(-s, 0), z.select(".nv-y.nv-axis").call(g)), z.select(".nv-zeroLine line").attr("x1", 0).attr("x2", s).attr("y1", d(0)).attr("y2", d(0));
      }), v.renderEnd("discreteBar chart immediate"), b;
    }
    var c,
      d,
      e = a.models.discreteBar(),
      f = a.models.axis(),
      g = a.models.axis(),
      h = a.models.tooltip(),
      i = {
        top: 15,
        right: 10,
        bottom: 50,
        left: 60
      },
      j = null,
      k = null,
      l = a.utils.getColor(),
      m = !0,
      n = !0,
      o = !1,
      p = !1,
      q = !1,
      r = 0,
      s = null,
      t = d3.dispatch("beforeUpdate", "renderEnd"),
      u = 250;
    f.orient("bottom").showMaxMin(!1).tickFormat(function (a) {
      return a;
    }), g.orient(o ? "right" : "left").tickFormat(d3.format(",.1f")), h.duration(0).headerEnabled(!1).valueFormatter(function (a, b) {
      return g.tickFormat()(a, b);
    }).keyFormatter(function (a, b) {
      return f.tickFormat()(a, b);
    });
    var v = a.utils.renderWatch(t, u);
    return e.dispatch.on("elementMouseover.tooltip", function (a) {
      a.series = {
        key: b.x()(a.data),
        value: b.y()(a.data),
        color: a.color
      }, h.data(a).hidden(!1);
    }), e.dispatch.on("elementMouseout.tooltip", function (a) {
      h.hidden(!0);
    }), e.dispatch.on("elementMousemove.tooltip", function (a) {
      h();
    }), b.dispatch = t, b.discretebar = e, b.xAxis = f, b.yAxis = g, b.tooltip = h, b.options = a.utils.optionsFunc.bind(b), b._options = Object.create({}, {
      width: {
        get: function get() {
          return j;
        },
        set: function set(a) {
          j = a;
        }
      },
      height: {
        get: function get() {
          return k;
        },
        set: function set(a) {
          k = a;
        }
      },
      staggerLabels: {
        get: function get() {
          return p;
        },
        set: function set(a) {
          p = a;
        }
      },
      rotateLabels: {
        get: function get() {
          return r;
        },
        set: function set(a) {
          r = a;
        }
      },
      wrapLabels: {
        get: function get() {
          return q;
        },
        set: function set(a) {
          q = !!a;
        }
      },
      showXAxis: {
        get: function get() {
          return m;
        },
        set: function set(a) {
          m = a;
        }
      },
      showYAxis: {
        get: function get() {
          return n;
        },
        set: function set(a) {
          n = a;
        }
      },
      noData: {
        get: function get() {
          return s;
        },
        set: function set(a) {
          s = a;
        }
      },
      margin: {
        get: function get() {
          return i;
        },
        set: function set(a) {
          i.top = void 0 !== a.top ? a.top : i.top, i.right = void 0 !== a.right ? a.right : i.right, i.bottom = void 0 !== a.bottom ? a.bottom : i.bottom, i.left = void 0 !== a.left ? a.left : i.left;
        }
      },
      duration: {
        get: function get() {
          return u;
        },
        set: function set(a) {
          u = a, v.reset(u), e.duration(u), f.duration(u), g.duration(u);
        }
      },
      color: {
        get: function get() {
          return l;
        },
        set: function set(b) {
          l = a.utils.getColor(b), e.color(l);
        }
      },
      rightAlignYAxis: {
        get: function get() {
          return o;
        },
        set: function set(a) {
          o = a, g.orient(a ? "right" : "left");
        }
      }
    }), a.utils.inheritOptions(b, e), a.utils.initOptions(b), b;
  }, a.models.distribution = function () {
    "use strict";

    function b(k) {
      return m.reset(), k.each(function (b) {
        var k = (e - ("x" === g ? d.left + d.right : d.top + d.bottom), "x" == g ? "y" : "x"),
          l = d3.select(this);
        a.utils.initSVG(l), c = c || j;
        var n = l.selectAll("g.nv-distribution").data([b]),
          o = n.enter().append("g").attr("class", "nvd3 nv-distribution"),
          p = (o.append("g"), n.select("g"));
        n.attr("transform", "translate(" + d.left + "," + d.top + ")");
        var q = p.selectAll("g.nv-dist").data(function (a) {
          return a;
        }, function (a) {
          return a.key;
        });
        q.enter().append("g"), q.attr("class", function (a, b) {
          return "nv-dist nv-series-" + b;
        }).style("stroke", function (a, b) {
          return i(a, b);
        });
        var r = q.selectAll("line.nv-dist" + g).data(function (a) {
          return a.values;
        });
        r.enter().append("line").attr(g + "1", function (a, b) {
          return c(h(a, b));
        }).attr(g + "2", function (a, b) {
          return c(h(a, b));
        }), m.transition(q.exit().selectAll("line.nv-dist" + g), "dist exit").attr(g + "1", function (a, b) {
          return j(h(a, b));
        }).attr(g + "2", function (a, b) {
          return j(h(a, b));
        }).style("stroke-opacity", 0).remove(), r.attr("class", function (a, b) {
          return "nv-dist" + g + " nv-dist" + g + "-" + b;
        }).attr(k + "1", 0).attr(k + "2", f), m.transition(r, "dist").attr(g + "1", function (a, b) {
          return j(h(a, b));
        }).attr(g + "2", function (a, b) {
          return j(h(a, b));
        }), c = j.copy();
      }), m.renderEnd("distribution immediate"), b;
    }
    var c,
      d = {
        top: 0,
        right: 0,
        bottom: 0,
        left: 0
      },
      e = 400,
      f = 8,
      g = "x",
      h = function h(a) {
        return a[g];
      },
      i = a.utils.defaultColor(),
      j = d3.scale.linear(),
      k = 250,
      l = d3.dispatch("renderEnd"),
      m = a.utils.renderWatch(l, k);
    return b.options = a.utils.optionsFunc.bind(b), b.dispatch = l, b.margin = function (a) {
      return arguments.length ? (d.top = "undefined" != typeof a.top ? a.top : d.top, d.right = "undefined" != typeof a.right ? a.right : d.right, d.bottom = "undefined" != typeof a.bottom ? a.bottom : d.bottom, d.left = "undefined" != typeof a.left ? a.left : d.left, b) : d;
    }, b.width = function (a) {
      return arguments.length ? (e = a, b) : e;
    }, b.axis = function (a) {
      return arguments.length ? (g = a, b) : g;
    }, b.size = function (a) {
      return arguments.length ? (f = a, b) : f;
    }, b.getData = function (a) {
      return arguments.length ? (h = d3.functor(a), b) : h;
    }, b.scale = function (a) {
      return arguments.length ? (j = a, b) : j;
    }, b.color = function (c) {
      return arguments.length ? (i = a.utils.getColor(c), b) : i;
    }, b.duration = function (a) {
      return arguments.length ? (k = a, m.reset(k), b) : k;
    }, b;
  }, a.models.furiousLegend = function () {
    "use strict";

    function b(q) {
      function r(a, b) {
        return "furious" != p ? "#000" : n ? a.disengaged ? g(a, b) : "#fff" : n ? void 0 : a.disabled ? g(a, b) : "#fff";
      }
      function s(a, b) {
        return n && "furious" == p ? a.disengaged ? "#fff" : g(a, b) : a.disabled ? "#fff" : g(a, b);
      }
      return q.each(function (b) {
        var q = d - c.left - c.right,
          t = d3.select(this);
        a.utils.initSVG(t);
        var u = t.selectAll("g.nv-legend").data([b]),
          v = (u.enter().append("g").attr("class", "nvd3 nv-legend").append("g"), u.select("g"));
        u.attr("transform", "translate(" + c.left + "," + c.top + ")");
        var w,
          x = v.selectAll(".nv-series").data(function (a) {
            return "furious" != p ? a : a.filter(function (a) {
              return n ? !0 : !a.disengaged;
            });
          }),
          y = x.enter().append("g").attr("class", "nv-series");
        if ("classic" == p) y.append("circle").style("stroke-width", 2).attr("class", "nv-legend-symbol").attr("r", 5), w = x.select("circle");else if ("furious" == p) {
          y.append("rect").style("stroke-width", 2).attr("class", "nv-legend-symbol").attr("rx", 3).attr("ry", 3), w = x.select("rect"), y.append("g").attr("class", "nv-check-box").property("innerHTML", '<path d="M0.5,5 L22.5,5 L22.5,26.5 L0.5,26.5 L0.5,5 Z" class="nv-box"></path><path d="M5.5,12.8618467 L11.9185089,19.2803556 L31,0.198864511" class="nv-check"></path>').attr("transform", "translate(-10,-8)scale(0.5)");
          var z = x.select(".nv-check-box");
          z.each(function (a, b) {
            d3.select(this).selectAll("path").attr("stroke", r(a, b));
          });
        }
        y.append("text").attr("text-anchor", "start").attr("class", "nv-legend-text").attr("dy", ".32em").attr("dx", "8");
        var A = x.select("text.nv-legend-text");
        x.on("mouseover", function (a, b) {
          o.legendMouseover(a, b);
        }).on("mouseout", function (a, b) {
          o.legendMouseout(a, b);
        }).on("click", function (a, b) {
          o.legendClick(a, b);
          var c = x.data();
          if (l) {
            if ("classic" == p) m ? (c.forEach(function (a) {
              a.disabled = !0;
            }), a.disabled = !1) : (a.disabled = !a.disabled, c.every(function (a) {
              return a.disabled;
            }) && c.forEach(function (a) {
              a.disabled = !1;
            }));else if ("furious" == p) if (n) a.disengaged = !a.disengaged, a.userDisabled = void 0 == a.userDisabled ? !!a.disabled : a.userDisabled, a.disabled = a.disengaged || a.userDisabled;else if (!n) {
              a.disabled = !a.disabled, a.userDisabled = a.disabled;
              var d = c.filter(function (a) {
                return !a.disengaged;
              });
              d.every(function (a) {
                return a.userDisabled;
              }) && c.forEach(function (a) {
                a.disabled = a.userDisabled = !1;
              });
            }
            o.stateChange({
              disabled: c.map(function (a) {
                return !!a.disabled;
              }),
              disengaged: c.map(function (a) {
                return !!a.disengaged;
              })
            });
          }
        }).on("dblclick", function (a, b) {
          if (("furious" != p || !n) && (o.legendDblclick(a, b), l)) {
            var c = x.data();
            c.forEach(function (a) {
              a.disabled = !0, "furious" == p && (a.userDisabled = a.disabled);
            }), a.disabled = !1, "furious" == p && (a.userDisabled = a.disabled), o.stateChange({
              disabled: c.map(function (a) {
                return !!a.disabled;
              })
            });
          }
        }), x.classed("nv-disabled", function (a) {
          return a.userDisabled;
        }), x.exit().remove(), A.attr("fill", r).text(f);
        var B;
        switch (p) {
          case "furious":
            B = 23;
            break;
          case "classic":
            B = 20;
        }
        if (i) {
          var C = [];
          x.each(function (b, c) {
            var d;
            if (f(b).length > h) {
              var e = f(b).substring(0, h);
              d = d3.select(this).select("text").text(e + "..."), d3.select(this).append("svg:title").text(f(b));
            } else d = d3.select(this).select("text");
            var g;
            try {
              if (g = d.node().getComputedTextLength(), 0 >= g) throw Error();
            } catch (i) {
              g = a.utils.calcApproxTextWidth(d);
            }
            C.push(g + j);
          });
          for (var D = 0, E = 0, F = []; q > E && D < C.length;) F[D] = C[D], E += C[D++];
          for (0 === D && (D = 1); E > q && D > 1;) {
            F = [], D--;
            for (var G = 0; G < C.length; G++) C[G] > (F[G % D] || 0) && (F[G % D] = C[G]);
            E = F.reduce(function (a, b, c, d) {
              return a + b;
            });
          }
          for (var H = [], I = 0, J = 0; D > I; I++) H[I] = J, J += F[I];
          x.attr("transform", function (a, b) {
            return "translate(" + H[b % D] + "," + (5 + Math.floor(b / D) * B) + ")";
          }), k ? v.attr("transform", "translate(" + (d - c.right - E) + "," + c.top + ")") : v.attr("transform", "translate(0," + c.top + ")"), e = c.top + c.bottom + Math.ceil(C.length / D) * B;
        } else {
          var K,
            L = 5,
            M = 5,
            N = 0;
          x.attr("transform", function (a, b) {
            var e = d3.select(this).select("text").node().getComputedTextLength() + j;
            return K = M, d < c.left + c.right + K + e && (M = K = 5, L += B), M += e, M > N && (N = M), "translate(" + K + "," + L + ")";
          }), v.attr("transform", "translate(" + (d - c.right - N) + "," + c.top + ")"), e = c.top + c.bottom + L + 15;
        }
        "furious" == p && w.attr("width", function (a, b) {
          return A[0][b].getComputedTextLength() + 27;
        }).attr("height", 18).attr("y", -9).attr("x", -15), w.style("fill", s).style("stroke", function (a, b) {
          return a.color || g(a, b);
        });
      }), b;
    }
    var c = {
        top: 5,
        right: 0,
        bottom: 5,
        left: 0
      },
      d = 400,
      e = 20,
      f = function f(a) {
        return a.key;
      },
      g = a.utils.getColor(),
      h = 20,
      i = !0,
      j = 28,
      k = !0,
      l = !0,
      m = !1,
      n = !1,
      o = d3.dispatch("legendClick", "legendDblclick", "legendMouseover", "legendMouseout", "stateChange"),
      p = "classic";
    return b.dispatch = o, b.options = a.utils.optionsFunc.bind(b), b._options = Object.create({}, {
      width: {
        get: function get() {
          return d;
        },
        set: function set(a) {
          d = a;
        }
      },
      height: {
        get: function get() {
          return e;
        },
        set: function set(a) {
          e = a;
        }
      },
      key: {
        get: function get() {
          return f;
        },
        set: function set(a) {
          f = a;
        }
      },
      align: {
        get: function get() {
          return i;
        },
        set: function set(a) {
          i = a;
        }
      },
      rightAlign: {
        get: function get() {
          return k;
        },
        set: function set(a) {
          k = a;
        }
      },
      maxKeyLength: {
        get: function get() {
          return h;
        },
        set: function set(a) {
          h = a;
        }
      },
      padding: {
        get: function get() {
          return j;
        },
        set: function set(a) {
          j = a;
        }
      },
      updateState: {
        get: function get() {
          return l;
        },
        set: function set(a) {
          l = a;
        }
      },
      radioButtonMode: {
        get: function get() {
          return m;
        },
        set: function set(a) {
          m = a;
        }
      },
      expanded: {
        get: function get() {
          return n;
        },
        set: function set(a) {
          n = a;
        }
      },
      vers: {
        get: function get() {
          return p;
        },
        set: function set(a) {
          p = a;
        }
      },
      margin: {
        get: function get() {
          return c;
        },
        set: function set(a) {
          c.top = void 0 !== a.top ? a.top : c.top, c.right = void 0 !== a.right ? a.right : c.right, c.bottom = void 0 !== a.bottom ? a.bottom : c.bottom, c.left = void 0 !== a.left ? a.left : c.left;
        }
      },
      color: {
        get: function get() {
          return g;
        },
        set: function set(b) {
          g = a.utils.getColor(b);
        }
      }
    }), a.utils.initOptions(b), b;
  }, a.models.historicalBar = function () {
    "use strict";

    function b(x) {
      return x.each(function (b) {
        w.reset(), k = d3.select(this);
        var x = a.utils.availableWidth(h, k, g),
          y = a.utils.availableHeight(i, k, g);
        a.utils.initSVG(k), l.domain(c || d3.extent(b[0].values.map(n).concat(p))), r ? l.range(e || [.5 * x / b[0].values.length, x * (b[0].values.length - .5) / b[0].values.length]) : l.range(e || [0, x]), m.domain(d || d3.extent(b[0].values.map(o).concat(q))).range(f || [y, 0]), l.domain()[0] === l.domain()[1] && (l.domain()[0] ? l.domain([l.domain()[0] - .01 * l.domain()[0], l.domain()[1] + .01 * l.domain()[1]]) : l.domain([-1, 1])), m.domain()[0] === m.domain()[1] && (m.domain()[0] ? m.domain([m.domain()[0] + .01 * m.domain()[0], m.domain()[1] - .01 * m.domain()[1]]) : m.domain([-1, 1]));
        var z = k.selectAll("g.nv-wrap.nv-historicalBar-" + j).data([b[0].values]),
          A = z.enter().append("g").attr("class", "nvd3 nv-wrap nv-historicalBar-" + j),
          B = A.append("defs"),
          C = A.append("g"),
          D = z.select("g");
        C.append("g").attr("class", "nv-bars"), z.attr("transform", "translate(" + g.left + "," + g.top + ")"), k.on("click", function (a, b) {
          u.chartClick({
            data: a,
            index: b,
            pos: d3.event,
            id: j
          });
        }), B.append("clipPath").attr("id", "nv-chart-clip-path-" + j).append("rect"), z.select("#nv-chart-clip-path-" + j + " rect").attr("width", x).attr("height", y), D.attr("clip-path", s ? "url(#nv-chart-clip-path-" + j + ")" : "");
        var E = z.select(".nv-bars").selectAll(".nv-bar").data(function (a) {
          return a;
        }, function (a, b) {
          return n(a, b);
        });
        E.exit().remove(), E.enter().append("rect").attr("x", 0).attr("y", function (b, c) {
          return a.utils.NaNtoZero(m(Math.max(0, o(b, c))));
        }).attr("height", function (b, c) {
          return a.utils.NaNtoZero(Math.abs(m(o(b, c)) - m(0)));
        }).attr("transform", function (a, c) {
          return "translate(" + (l(n(a, c)) - x / b[0].values.length * .45) + ",0)";
        }).on("mouseover", function (a, b) {
          v && (d3.select(this).classed("hover", !0), u.elementMouseover({
            data: a,
            index: b,
            color: d3.select(this).style("fill")
          }));
        }).on("mouseout", function (a, b) {
          v && (d3.select(this).classed("hover", !1), u.elementMouseout({
            data: a,
            index: b,
            color: d3.select(this).style("fill")
          }));
        }).on("mousemove", function (a, b) {
          v && u.elementMousemove({
            data: a,
            index: b,
            color: d3.select(this).style("fill")
          });
        }).on("click", function (a, b) {
          v && (u.elementClick({
            data: a,
            index: b,
            color: d3.select(this).style("fill")
          }), d3.event.stopPropagation());
        }).on("dblclick", function (a, b) {
          v && (u.elementDblClick({
            data: a,
            index: b,
            color: d3.select(this).style("fill")
          }), d3.event.stopPropagation());
        }), E.attr("fill", function (a, b) {
          return t(a, b);
        }).attr("class", function (a, b, c) {
          return (o(a, b) < 0 ? "nv-bar negative" : "nv-bar positive") + " nv-bar-" + c + "-" + b;
        }).watchTransition(w, "bars").attr("transform", function (a, c) {
          return "translate(" + (l(n(a, c)) - x / b[0].values.length * .45) + ",0)";
        }).attr("width", x / b[0].values.length * .9), E.watchTransition(w, "bars").attr("y", function (b, c) {
          var d = o(b, c) < 0 ? m(0) : m(0) - m(o(b, c)) < 1 ? m(0) - 1 : m(o(b, c));
          return a.utils.NaNtoZero(d);
        }).attr("height", function (b, c) {
          return a.utils.NaNtoZero(Math.max(Math.abs(m(o(b, c)) - m(0)), 1));
        });
      }), w.renderEnd("historicalBar immediate"), b;
    }
    var c,
      d,
      e,
      f,
      g = {
        top: 0,
        right: 0,
        bottom: 0,
        left: 0
      },
      h = null,
      i = null,
      j = Math.floor(1e4 * Math.random()),
      k = null,
      l = d3.scale.linear(),
      m = d3.scale.linear(),
      n = function n(a) {
        return a.x;
      },
      o = function o(a) {
        return a.y;
      },
      p = [],
      q = [0],
      r = !1,
      s = !0,
      t = a.utils.defaultColor(),
      u = d3.dispatch("chartClick", "elementClick", "elementDblClick", "elementMouseover", "elementMouseout", "elementMousemove", "renderEnd"),
      v = !0,
      w = a.utils.renderWatch(u, 0);
    return b.highlightPoint = function (a, b) {
      k.select(".nv-bars .nv-bar-0-" + a).classed("hover", b);
    }, b.clearHighlights = function () {
      k.select(".nv-bars .nv-bar.hover").classed("hover", !1);
    }, b.dispatch = u, b.options = a.utils.optionsFunc.bind(b), b._options = Object.create({}, {
      width: {
        get: function get() {
          return h;
        },
        set: function set(a) {
          h = a;
        }
      },
      height: {
        get: function get() {
          return i;
        },
        set: function set(a) {
          i = a;
        }
      },
      forceX: {
        get: function get() {
          return p;
        },
        set: function set(a) {
          p = a;
        }
      },
      forceY: {
        get: function get() {
          return q;
        },
        set: function set(a) {
          q = a;
        }
      },
      padData: {
        get: function get() {
          return r;
        },
        set: function set(a) {
          r = a;
        }
      },
      x: {
        get: function get() {
          return n;
        },
        set: function set(a) {
          n = a;
        }
      },
      y: {
        get: function get() {
          return o;
        },
        set: function set(a) {
          o = a;
        }
      },
      xScale: {
        get: function get() {
          return l;
        },
        set: function set(a) {
          l = a;
        }
      },
      yScale: {
        get: function get() {
          return m;
        },
        set: function set(a) {
          m = a;
        }
      },
      xDomain: {
        get: function get() {
          return c;
        },
        set: function set(a) {
          c = a;
        }
      },
      yDomain: {
        get: function get() {
          return d;
        },
        set: function set(a) {
          d = a;
        }
      },
      xRange: {
        get: function get() {
          return e;
        },
        set: function set(a) {
          e = a;
        }
      },
      yRange: {
        get: function get() {
          return f;
        },
        set: function set(a) {
          f = a;
        }
      },
      clipEdge: {
        get: function get() {
          return s;
        },
        set: function set(a) {
          s = a;
        }
      },
      id: {
        get: function get() {
          return j;
        },
        set: function set(a) {
          j = a;
        }
      },
      interactive: {
        get: function get() {
          return v;
        },
        set: function set(a) {
          v = a;
        }
      },
      margin: {
        get: function get() {
          return g;
        },
        set: function set(a) {
          g.top = void 0 !== a.top ? a.top : g.top, g.right = void 0 !== a.right ? a.right : g.right, g.bottom = void 0 !== a.bottom ? a.bottom : g.bottom, g.left = void 0 !== a.left ? a.left : g.left;
        }
      },
      color: {
        get: function get() {
          return t;
        },
        set: function set(b) {
          t = a.utils.getColor(b);
        }
      }
    }), a.utils.initOptions(b), b;
  }, a.models.historicalBarChart = function (b) {
    "use strict";

    function c(b) {
      return b.each(function (k) {
        z.reset(), z.models(f), q && z.models(g), r && z.models(h);
        var w = d3.select(this),
          A = this;
        a.utils.initSVG(w);
        var B = a.utils.availableWidth(n, w, l),
          C = a.utils.availableHeight(o, w, l);
        if (c.update = function () {
          w.transition().duration(y).call(c);
        }, c.container = this, u.disabled = k.map(function (a) {
          return !!a.disabled;
        }), !v) {
          var D;
          v = {};
          for (D in u) u[D] instanceof Array ? v[D] = u[D].slice(0) : v[D] = u[D];
        }
        if (!(k && k.length && k.filter(function (a) {
          return a.values.length;
        }).length)) return a.utils.noData(c, w), c;
        w.selectAll(".nv-noData").remove(), d = f.xScale(), e = f.yScale();
        var E = w.selectAll("g.nv-wrap.nv-historicalBarChart").data([k]),
          F = E.enter().append("g").attr("class", "nvd3 nv-wrap nv-historicalBarChart").append("g"),
          G = E.select("g");
        F.append("g").attr("class", "nv-x nv-axis"), F.append("g").attr("class", "nv-y nv-axis"), F.append("g").attr("class", "nv-barsWrap"), F.append("g").attr("class", "nv-legendWrap"), F.append("g").attr("class", "nv-interactive"), p && (i.width(B), G.select(".nv-legendWrap").datum(k).call(i), l.top != i.height() && (l.top = i.height(), C = a.utils.availableHeight(o, w, l)), E.select(".nv-legendWrap").attr("transform", "translate(0," + -l.top + ")")), E.attr("transform", "translate(" + l.left + "," + l.top + ")"), s && G.select(".nv-y.nv-axis").attr("transform", "translate(" + B + ",0)"), t && (j.width(B).height(C).margin({
          left: l.left,
          top: l.top
        }).svgContainer(w).xScale(d), E.select(".nv-interactive").call(j)), f.width(B).height(C).color(k.map(function (a, b) {
          return a.color || m(a, b);
        }).filter(function (a, b) {
          return !k[b].disabled;
        }));
        var H = G.select(".nv-barsWrap").datum(k.filter(function (a) {
          return !a.disabled;
        }));
        H.transition().call(f), q && (g.scale(d)._ticks(a.utils.calcTicksX(B / 100, k)).tickSize(-C, 0), G.select(".nv-x.nv-axis").attr("transform", "translate(0," + e.range()[0] + ")"), G.select(".nv-x.nv-axis").transition().call(g)), r && (h.scale(e)._ticks(a.utils.calcTicksY(C / 36, k)).tickSize(-B, 0), G.select(".nv-y.nv-axis").transition().call(h)), j.dispatch.on("elementMousemove", function (b) {
          f.clearHighlights();
          var d,
            e,
            i,
            l = [];
          k.filter(function (a, b) {
            return a.seriesIndex = b, !a.disabled;
          }).forEach(function (g, h) {
            e = a.interactiveBisect(g.values, b.pointXValue, c.x()), f.highlightPoint(e, !0);
            var j = g.values[e];
            void 0 !== j && (void 0 === d && (d = j), void 0 === i && (i = c.xScale()(c.x()(j, e))), l.push({
              key: g.key,
              value: c.y()(j, e),
              color: m(g, g.seriesIndex),
              data: g.values[e]
            }));
          });
          var n = g.tickFormat()(c.x()(d, e));
          j.tooltip.chartContainer(A.parentNode).valueFormatter(function (a, b) {
            return h.tickFormat()(a);
          }).data({
            value: n,
            index: e,
            series: l
          })(), j.renderGuideLine(i);
        }), j.dispatch.on("elementMouseout", function (a) {
          x.tooltipHide(), f.clearHighlights();
        }), i.dispatch.on("legendClick", function (a, d) {
          a.disabled = !a.disabled, k.filter(function (a) {
            return !a.disabled;
          }).length || k.map(function (a) {
            return a.disabled = !1, E.selectAll(".nv-series").classed("disabled", !1), a;
          }), u.disabled = k.map(function (a) {
            return !!a.disabled;
          }), x.stateChange(u), b.transition().call(c);
        }), i.dispatch.on("legendDblclick", function (a) {
          k.forEach(function (a) {
            a.disabled = !0;
          }), a.disabled = !1, u.disabled = k.map(function (a) {
            return !!a.disabled;
          }), x.stateChange(u), c.update();
        }), x.on("changeState", function (a) {
          "undefined" != typeof a.disabled && (k.forEach(function (b, c) {
            b.disabled = a.disabled[c];
          }), u.disabled = a.disabled), c.update();
        });
      }), z.renderEnd("historicalBarChart immediate"), c;
    }
    var d,
      e,
      f = b || a.models.historicalBar(),
      g = a.models.axis(),
      h = a.models.axis(),
      i = a.models.legend(),
      j = a.interactiveGuideline(),
      k = a.models.tooltip(),
      l = {
        top: 30,
        right: 90,
        bottom: 50,
        left: 90
      },
      m = a.utils.defaultColor(),
      n = null,
      o = null,
      p = !1,
      q = !0,
      r = !0,
      s = !1,
      t = !1,
      u = {},
      v = null,
      w = null,
      x = d3.dispatch("tooltipHide", "stateChange", "changeState", "renderEnd"),
      y = 250;
    g.orient("bottom").tickPadding(7), h.orient(s ? "right" : "left"), k.duration(0).headerEnabled(!1).valueFormatter(function (a, b) {
      return h.tickFormat()(a, b);
    }).headerFormatter(function (a, b) {
      return g.tickFormat()(a, b);
    });
    var z = a.utils.renderWatch(x, 0);
    return f.dispatch.on("elementMouseover.tooltip", function (a) {
      a.series = {
        key: c.x()(a.data),
        value: c.y()(a.data),
        color: a.color
      }, k.data(a).hidden(!1);
    }), f.dispatch.on("elementMouseout.tooltip", function (a) {
      k.hidden(!0);
    }), f.dispatch.on("elementMousemove.tooltip", function (a) {
      k();
    }), c.dispatch = x, c.bars = f, c.legend = i, c.xAxis = g, c.yAxis = h, c.interactiveLayer = j, c.tooltip = k, c.options = a.utils.optionsFunc.bind(c), c._options = Object.create({}, {
      width: {
        get: function get() {
          return n;
        },
        set: function set(a) {
          n = a;
        }
      },
      height: {
        get: function get() {
          return o;
        },
        set: function set(a) {
          o = a;
        }
      },
      showLegend: {
        get: function get() {
          return p;
        },
        set: function set(a) {
          p = a;
        }
      },
      showXAxis: {
        get: function get() {
          return q;
        },
        set: function set(a) {
          q = a;
        }
      },
      showYAxis: {
        get: function get() {
          return r;
        },
        set: function set(a) {
          r = a;
        }
      },
      defaultState: {
        get: function get() {
          return v;
        },
        set: function set(a) {
          v = a;
        }
      },
      noData: {
        get: function get() {
          return w;
        },
        set: function set(a) {
          w = a;
        }
      },
      margin: {
        get: function get() {
          return l;
        },
        set: function set(a) {
          l.top = void 0 !== a.top ? a.top : l.top, l.right = void 0 !== a.right ? a.right : l.right, l.bottom = void 0 !== a.bottom ? a.bottom : l.bottom, l.left = void 0 !== a.left ? a.left : l.left;
        }
      },
      color: {
        get: function get() {
          return m;
        },
        set: function set(b) {
          m = a.utils.getColor(b), i.color(m), f.color(m);
        }
      },
      duration: {
        get: function get() {
          return y;
        },
        set: function set(a) {
          y = a, z.reset(y), h.duration(y), g.duration(y);
        }
      },
      rightAlignYAxis: {
        get: function get() {
          return s;
        },
        set: function set(a) {
          s = a, h.orient(a ? "right" : "left");
        }
      },
      useInteractiveGuideline: {
        get: function get() {
          return t;
        },
        set: function set(a) {
          t = a, a === !0 && c.interactive(!1);
        }
      }
    }), a.utils.inheritOptions(c, f), a.utils.initOptions(c), c;
  }, a.models.ohlcBarChart = function () {
    var b = a.models.historicalBarChart(a.models.ohlcBar());
    return b.useInteractiveGuideline(!0), b.interactiveLayer.tooltip.contentGenerator(function (a) {
      var c = a.series[0].data,
        d = c.open < c.close ? "2ca02c" : "d62728";
      return '<h3 style="color: #' + d + '">' + a.value + "</h3><table><tr><td>open:</td><td>" + b.yAxis.tickFormat()(c.open) + "</td></tr><tr><td>close:</td><td>" + b.yAxis.tickFormat()(c.close) + "</td></tr><tr><td>high</td><td>" + b.yAxis.tickFormat()(c.high) + "</td></tr><tr><td>low:</td><td>" + b.yAxis.tickFormat()(c.low) + "</td></tr></table>";
    }), b;
  }, a.models.candlestickBarChart = function () {
    var b = a.models.historicalBarChart(a.models.candlestickBar());
    return b.useInteractiveGuideline(!0), b.interactiveLayer.tooltip.contentGenerator(function (a) {
      var c = a.series[0].data,
        d = c.open < c.close ? "2ca02c" : "d62728";
      return '<h3 style="color: #' + d + '">' + a.value + "</h3><table><tr><td>open:</td><td>" + b.yAxis.tickFormat()(c.open) + "</td></tr><tr><td>close:</td><td>" + b.yAxis.tickFormat()(c.close) + "</td></tr><tr><td>high</td><td>" + b.yAxis.tickFormat()(c.high) + "</td></tr><tr><td>low:</td><td>" + b.yAxis.tickFormat()(c.low) + "</td></tr></table>";
    }), b;
  }, a.models.legend = function () {
    "use strict";

    function b(q) {
      function r(a, b) {
        return "furious" != p ? "#000" : n ? a.disengaged ? "#000" : "#fff" : n ? void 0 : (a.color || (a.color = g(a, b)), a.disabled ? a.color : "#fff");
      }
      function s(a, b) {
        return n && "furious" == p && a.disengaged ? "#eee" : a.color || g(a, b);
      }
      function t(a, b) {
        return n && "furious" == p ? 1 : a.disabled ? 0 : 1;
      }
      return q.each(function (b) {
        var g = d - c.left - c.right,
          q = d3.select(this);
        a.utils.initSVG(q);
        var u = q.selectAll("g.nv-legend").data([b]),
          v = u.enter().append("g").attr("class", "nvd3 nv-legend").append("g"),
          w = u.select("g");
        u.attr("transform", "translate(" + c.left + "," + c.top + ")");
        var x,
          y,
          z = w.selectAll(".nv-series").data(function (a) {
            return "furious" != p ? a : a.filter(function (a) {
              return n ? !0 : !a.disengaged;
            });
          }),
          A = z.enter().append("g").attr("class", "nv-series");
        switch (p) {
          case "furious":
            y = 23;
            break;
          case "classic":
            y = 20;
        }
        if ("classic" == p) A.append("circle").style("stroke-width", 2).attr("class", "nv-legend-symbol").attr("r", 5), x = z.select("circle");else if ("furious" == p) {
          A.append("rect").style("stroke-width", 2).attr("class", "nv-legend-symbol").attr("rx", 3).attr("ry", 3), x = z.select(".nv-legend-symbol"), A.append("g").attr("class", "nv-check-box").property("innerHTML", '<path d="M0.5,5 L22.5,5 L22.5,26.5 L0.5,26.5 L0.5,5 Z" class="nv-box"></path><path d="M5.5,12.8618467 L11.9185089,19.2803556 L31,0.198864511" class="nv-check"></path>').attr("transform", "translate(-10,-8)scale(0.5)");
          var B = z.select(".nv-check-box");
          B.each(function (a, b) {
            d3.select(this).selectAll("path").attr("stroke", r(a, b));
          });
        }
        A.append("text").attr("text-anchor", "start").attr("class", "nv-legend-text").attr("dy", ".32em").attr("dx", "8");
        var C = z.select("text.nv-legend-text");
        z.on("mouseover", function (a, b) {
          o.legendMouseover(a, b);
        }).on("mouseout", function (a, b) {
          o.legendMouseout(a, b);
        }).on("click", function (a, b) {
          o.legendClick(a, b);
          var c = z.data();
          if (l) {
            if ("classic" == p) m ? (c.forEach(function (a) {
              a.disabled = !0;
            }), a.disabled = !1) : (a.disabled = !a.disabled, c.every(function (a) {
              return a.disabled;
            }) && c.forEach(function (a) {
              a.disabled = !1;
            }));else if ("furious" == p) if (n) a.disengaged = !a.disengaged, a.userDisabled = void 0 == a.userDisabled ? !!a.disabled : a.userDisabled, a.disabled = a.disengaged || a.userDisabled;else if (!n) {
              a.disabled = !a.disabled, a.userDisabled = a.disabled;
              var d = c.filter(function (a) {
                return !a.disengaged;
              });
              d.every(function (a) {
                return a.userDisabled;
              }) && c.forEach(function (a) {
                a.disabled = a.userDisabled = !1;
              });
            }
            o.stateChange({
              disabled: c.map(function (a) {
                return !!a.disabled;
              }),
              disengaged: c.map(function (a) {
                return !!a.disengaged;
              })
            });
          }
        }).on("dblclick", function (a, b) {
          if (("furious" != p || !n) && (o.legendDblclick(a, b), l)) {
            var c = z.data();
            c.forEach(function (a) {
              a.disabled = !0, "furious" == p && (a.userDisabled = a.disabled);
            }), a.disabled = !1, "furious" == p && (a.userDisabled = a.disabled), o.stateChange({
              disabled: c.map(function (a) {
                return !!a.disabled;
              })
            });
          }
        }), z.classed("nv-disabled", function (a) {
          return a.userDisabled;
        }), z.exit().remove(), C.attr("fill", r).text(f);
        var D = 0;
        if (i) {
          var E = [];
          z.each(function (b, c) {
            var d;
            if (f(b).length > h) {
              var e = f(b).substring(0, h);
              d = d3.select(this).select("text").text(e + "..."), d3.select(this).append("svg:title").text(f(b));
            } else d = d3.select(this).select("text");
            var g;
            try {
              if (g = d.node().getComputedTextLength(), 0 >= g) throw Error();
            } catch (i) {
              g = a.utils.calcApproxTextWidth(d);
            }
            E.push(g + j);
          });
          var F = 0,
            G = [];
          for (D = 0; g > D && F < E.length;) G[F] = E[F], D += E[F++];
          for (0 === F && (F = 1); D > g && F > 1;) {
            G = [], F--;
            for (var H = 0; H < E.length; H++) E[H] > (G[H % F] || 0) && (G[H % F] = E[H]);
            D = G.reduce(function (a, b, c, d) {
              return a + b;
            });
          }
          for (var I = [], J = 0, K = 0; F > J; J++) I[J] = K, K += G[J];
          z.attr("transform", function (a, b) {
            return "translate(" + I[b % F] + "," + (5 + Math.floor(b / F) * y) + ")";
          }), k ? w.attr("transform", "translate(" + (d - c.right - D) + "," + c.top + ")") : w.attr("transform", "translate(0," + c.top + ")"), e = c.top + c.bottom + Math.ceil(E.length / F) * y;
        } else {
          var L,
            M = 5,
            N = 5,
            O = 0;
          z.attr("transform", function (a, b) {
            var e = d3.select(this).select("text").node().getComputedTextLength() + j;
            return L = N, d < c.left + c.right + L + e && (N = L = 5, M += y), N += e, N > O && (O = N), L + O > D && (D = L + O), "translate(" + L + "," + M + ")";
          }), w.attr("transform", "translate(" + (d - c.right - O) + "," + c.top + ")"), e = c.top + c.bottom + M + 15;
        }
        if ("furious" == p) {
          x.attr("width", function (a, b) {
            return C[0][b].getComputedTextLength() + 27;
          }).attr("height", 18).attr("y", -9).attr("x", -15), v.insert("rect", ":first-child").attr("class", "nv-legend-bg").attr("fill", "#eee").attr("opacity", 0);
          var P = w.select(".nv-legend-bg");
          P.transition().duration(300).attr("x", -y).attr("width", D + y - 12).attr("height", e + 10).attr("y", -c.top - 10).attr("opacity", n ? 1 : 0);
        }
        x.style("fill", s).style("fill-opacity", t).style("stroke", s);
      }), b;
    }
    var c = {
        top: 5,
        right: 0,
        bottom: 5,
        left: 0
      },
      d = 400,
      e = 20,
      f = function f(a) {
        return a.key;
      },
      g = a.utils.getColor(),
      h = 20,
      i = !0,
      j = 32,
      k = !0,
      l = !0,
      m = !1,
      n = !1,
      o = d3.dispatch("legendClick", "legendDblclick", "legendMouseover", "legendMouseout", "stateChange"),
      p = "classic";
    return b.dispatch = o, b.options = a.utils.optionsFunc.bind(b), b._options = Object.create({}, {
      width: {
        get: function get() {
          return d;
        },
        set: function set(a) {
          d = a;
        }
      },
      height: {
        get: function get() {
          return e;
        },
        set: function set(a) {
          e = a;
        }
      },
      key: {
        get: function get() {
          return f;
        },
        set: function set(a) {
          f = a;
        }
      },
      align: {
        get: function get() {
          return i;
        },
        set: function set(a) {
          i = a;
        }
      },
      maxKeyLength: {
        get: function get() {
          return h;
        },
        set: function set(a) {
          h = a;
        }
      },
      rightAlign: {
        get: function get() {
          return k;
        },
        set: function set(a) {
          k = a;
        }
      },
      padding: {
        get: function get() {
          return j;
        },
        set: function set(a) {
          j = a;
        }
      },
      updateState: {
        get: function get() {
          return l;
        },
        set: function set(a) {
          l = a;
        }
      },
      radioButtonMode: {
        get: function get() {
          return m;
        },
        set: function set(a) {
          m = a;
        }
      },
      expanded: {
        get: function get() {
          return n;
        },
        set: function set(a) {
          n = a;
        }
      },
      vers: {
        get: function get() {
          return p;
        },
        set: function set(a) {
          p = a;
        }
      },
      margin: {
        get: function get() {
          return c;
        },
        set: function set(a) {
          c.top = void 0 !== a.top ? a.top : c.top, c.right = void 0 !== a.right ? a.right : c.right, c.bottom = void 0 !== a.bottom ? a.bottom : c.bottom, c.left = void 0 !== a.left ? a.left : c.left;
        }
      },
      color: {
        get: function get() {
          return g;
        },
        set: function set(b) {
          g = a.utils.getColor(b);
        }
      }
    }), a.utils.initOptions(b), b;
  }, a.models.line = function () {
    "use strict";

    function b(r) {
      return v.reset(), v.models(e), r.each(function (b) {
        i = d3.select(this);
        var r = a.utils.availableWidth(g, i, f),
          s = a.utils.availableHeight(h, i, f);
        a.utils.initSVG(i), c = e.xScale(), d = e.yScale(), t = t || c, u = u || d;
        var w = i.selectAll("g.nv-wrap.nv-line").data([b]),
          x = w.enter().append("g").attr("class", "nvd3 nv-wrap nv-line"),
          y = x.append("defs"),
          z = x.append("g"),
          A = w.select("g");
        z.append("g").attr("class", "nv-groups"), z.append("g").attr("class", "nv-scatterWrap"), w.attr("transform", "translate(" + f.left + "," + f.top + ")"), e.width(r).height(s);
        var B = w.select(".nv-scatterWrap");
        B.call(e), y.append("clipPath").attr("id", "nv-edge-clip-" + e.id()).append("rect"), w.select("#nv-edge-clip-" + e.id() + " rect").attr("width", r).attr("height", s > 0 ? s : 0), A.attr("clip-path", p ? "url(#nv-edge-clip-" + e.id() + ")" : ""), B.attr("clip-path", p ? "url(#nv-edge-clip-" + e.id() + ")" : "");
        var C = w.select(".nv-groups").selectAll(".nv-group").data(function (a) {
          return a;
        }, function (a) {
          return a.key;
        });
        C.enter().append("g").style("stroke-opacity", 1e-6).style("stroke-width", function (a) {
          return a.strokeWidth || j;
        }).style("fill-opacity", 1e-6), C.exit().remove(), C.attr("class", function (a, b) {
          return (a.classed || "") + " nv-group nv-series-" + b;
        }).classed("hover", function (a) {
          return a.hover;
        }).style("fill", function (a, b) {
          return k(a, b);
        }).style("stroke", function (a, b) {
          return k(a, b);
        }), C.watchTransition(v, "line: groups").style("stroke-opacity", 1).style("fill-opacity", function (a) {
          return a.fillOpacity || .5;
        });
        var D = C.selectAll("path.nv-area").data(function (a) {
          return o(a) ? [a] : [];
        });
        D.enter().append("path").attr("class", "nv-area").attr("d", function (b) {
          return d3.svg.area().interpolate(q).defined(n).x(function (b, c) {
            return a.utils.NaNtoZero(t(l(b, c)));
          }).y0(function (b, c) {
            return a.utils.NaNtoZero(u(m(b, c)));
          }).y1(function (a, b) {
            return u(d.domain()[0] <= 0 ? d.domain()[1] >= 0 ? 0 : d.domain()[1] : d.domain()[0]);
          }).apply(this, [b.values]);
        }), C.exit().selectAll("path.nv-area").remove(), D.watchTransition(v, "line: areaPaths").attr("d", function (b) {
          return d3.svg.area().interpolate(q).defined(n).x(function (b, d) {
            return a.utils.NaNtoZero(c(l(b, d)));
          }).y0(function (b, c) {
            return a.utils.NaNtoZero(d(m(b, c)));
          }).y1(function (a, b) {
            return d(d.domain()[0] <= 0 ? d.domain()[1] >= 0 ? 0 : d.domain()[1] : d.domain()[0]);
          }).apply(this, [b.values]);
        });
        var E = C.selectAll("path.nv-line").data(function (a) {
          return [a.values];
        });
        E.enter().append("path").attr("class", "nv-line").attr("d", d3.svg.line().interpolate(q).defined(n).x(function (b, c) {
          return a.utils.NaNtoZero(t(l(b, c)));
        }).y(function (b, c) {
          return a.utils.NaNtoZero(u(m(b, c)));
        })), E.watchTransition(v, "line: linePaths").attr("d", d3.svg.line().interpolate(q).defined(n).x(function (b, d) {
          return a.utils.NaNtoZero(c(l(b, d)));
        }).y(function (b, c) {
          return a.utils.NaNtoZero(d(m(b, c)));
        })), t = c.copy(), u = d.copy();
      }), v.renderEnd("line immediate"), b;
    }
    var c,
      d,
      e = a.models.scatter(),
      f = {
        top: 0,
        right: 0,
        bottom: 0,
        left: 0
      },
      g = 960,
      h = 500,
      i = null,
      j = 1.5,
      k = a.utils.defaultColor(),
      l = function l(a) {
        return a.x;
      },
      m = function m(a) {
        return a.y;
      },
      n = function n(a, b) {
        return !isNaN(m(a, b)) && null !== m(a, b);
      },
      o = function o(a) {
        return a.area;
      },
      p = !1,
      q = "linear",
      r = 250,
      s = d3.dispatch("elementClick", "elementMouseover", "elementMouseout", "renderEnd");
    e.pointSize(16).pointDomain([16, 256]);
    var t,
      u,
      v = a.utils.renderWatch(s, r);
    return b.dispatch = s, b.scatter = e, e.dispatch.on("elementClick", function () {
      s.elementClick.apply(this, arguments);
    }), e.dispatch.on("elementMouseover", function () {
      s.elementMouseover.apply(this, arguments);
    }), e.dispatch.on("elementMouseout", function () {
      s.elementMouseout.apply(this, arguments);
    }), b.options = a.utils.optionsFunc.bind(b), b._options = Object.create({}, {
      width: {
        get: function get() {
          return g;
        },
        set: function set(a) {
          g = a;
        }
      },
      height: {
        get: function get() {
          return h;
        },
        set: function set(a) {
          h = a;
        }
      },
      defined: {
        get: function get() {
          return n;
        },
        set: function set(a) {
          n = a;
        }
      },
      interpolate: {
        get: function get() {
          return q;
        },
        set: function set(a) {
          q = a;
        }
      },
      clipEdge: {
        get: function get() {
          return p;
        },
        set: function set(a) {
          p = a;
        }
      },
      margin: {
        get: function get() {
          return f;
        },
        set: function set(a) {
          f.top = void 0 !== a.top ? a.top : f.top, f.right = void 0 !== a.right ? a.right : f.right, f.bottom = void 0 !== a.bottom ? a.bottom : f.bottom, f.left = void 0 !== a.left ? a.left : f.left;
        }
      },
      duration: {
        get: function get() {
          return r;
        },
        set: function set(a) {
          r = a, v.reset(r), e.duration(r);
        }
      },
      isArea: {
        get: function get() {
          return o;
        },
        set: function set(a) {
          o = d3.functor(a);
        }
      },
      x: {
        get: function get() {
          return l;
        },
        set: function set(a) {
          l = a, e.x(a);
        }
      },
      y: {
        get: function get() {
          return m;
        },
        set: function set(a) {
          m = a, e.y(a);
        }
      },
      color: {
        get: function get() {
          return k;
        },
        set: function set(b) {
          k = a.utils.getColor(b), e.color(k);
        }
      }
    }), a.utils.inheritOptions(b, e), a.utils.initOptions(b), b;
  }, a.models.lineChart = function () {
    "use strict";

    function b(j) {
      return y.reset(), y.models(e), p && y.models(f), q && y.models(g), j.each(function (j) {
        var v = d3.select(this),
          y = this;
        a.utils.initSVG(v);
        var B = a.utils.availableWidth(m, v, k),
          C = a.utils.availableHeight(n, v, k);
        if (b.update = function () {
          0 === x ? v.call(b) : v.transition().duration(x).call(b);
        }, b.container = this, t.setter(A(j), b.update).getter(z(j)).update(), t.disabled = j.map(function (a) {
          return !!a.disabled;
        }), !u) {
          var D;
          u = {};
          for (D in t) t[D] instanceof Array ? u[D] = t[D].slice(0) : u[D] = t[D];
        }
        if (!(j && j.length && j.filter(function (a) {
          return a.values.length;
        }).length)) return a.utils.noData(b, v), b;
        v.selectAll(".nv-noData").remove(), c = e.xScale(), d = e.yScale();
        var E = v.selectAll("g.nv-wrap.nv-lineChart").data([j]),
          F = E.enter().append("g").attr("class", "nvd3 nv-wrap nv-lineChart").append("g"),
          G = E.select("g");
        F.append("rect").style("opacity", 0), F.append("g").attr("class", "nv-x nv-axis"), F.append("g").attr("class", "nv-y nv-axis"), F.append("g").attr("class", "nv-linesWrap"), F.append("g").attr("class", "nv-legendWrap"), F.append("g").attr("class", "nv-interactive"), G.select("rect").attr("width", B).attr("height", C > 0 ? C : 0), o && (h.width(B), G.select(".nv-legendWrap").datum(j).call(h), k.top != h.height() && (k.top = h.height(), C = a.utils.availableHeight(n, v, k)), E.select(".nv-legendWrap").attr("transform", "translate(0," + -k.top + ")")), E.attr("transform", "translate(" + k.left + "," + k.top + ")"), r && G.select(".nv-y.nv-axis").attr("transform", "translate(" + B + ",0)"), s && (i.width(B).height(C).margin({
          left: k.left,
          top: k.top
        }).svgContainer(v).xScale(c), E.select(".nv-interactive").call(i)), e.width(B).height(C).color(j.map(function (a, b) {
          return a.color || l(a, b);
        }).filter(function (a, b) {
          return !j[b].disabled;
        }));
        var H = G.select(".nv-linesWrap").datum(j.filter(function (a) {
          return !a.disabled;
        }));
        H.call(e), p && (f.scale(c)._ticks(a.utils.calcTicksX(B / 100, j)).tickSize(-C, 0), G.select(".nv-x.nv-axis").attr("transform", "translate(0," + d.range()[0] + ")"), G.select(".nv-x.nv-axis").call(f)), q && (g.scale(d)._ticks(a.utils.calcTicksY(C / 36, j)).tickSize(-B, 0), G.select(".nv-y.nv-axis").call(g)), h.dispatch.on("stateChange", function (a) {
          for (var c in a) t[c] = a[c];
          w.stateChange(t), b.update();
        }), i.dispatch.on("elementMousemove", function (c) {
          e.clearHighlights();
          var d,
            h,
            k,
            m = [];
          if (j.filter(function (a, b) {
            return a.seriesIndex = b, !a.disabled;
          }).forEach(function (f, g) {
            h = a.interactiveBisect(f.values, c.pointXValue, b.x());
            var i = f.values[h],
              j = b.y()(i, h);
            null != j && e.highlightPoint(g, h, !0), void 0 !== i && (void 0 === d && (d = i), void 0 === k && (k = b.xScale()(b.x()(i, h))), m.push({
              key: f.key,
              value: j,
              color: l(f, f.seriesIndex)
            }));
          }), m.length > 2) {
            var n = b.yScale().invert(c.mouseY),
              o = Math.abs(b.yScale().domain()[0] - b.yScale().domain()[1]),
              p = .03 * o,
              q = a.nearestValueIndex(m.map(function (a) {
                return a.value;
              }), n, p);
            null !== q && (m[q].highlight = !0);
          }
          var r = f.tickFormat()(b.x()(d, h));
          i.tooltip.chartContainer(y.parentNode).valueFormatter(function (a, b) {
            return null == a ? "N/A" : g.tickFormat()(a);
          }).data({
            value: r,
            index: h,
            series: m
          })(), i.renderGuideLine(k);
        }), i.dispatch.on("elementClick", function (c) {
          var d,
            f = [];
          j.filter(function (a, b) {
            return a.seriesIndex = b, !a.disabled;
          }).forEach(function (e) {
            var g = a.interactiveBisect(e.values, c.pointXValue, b.x()),
              h = e.values[g];
            if ("undefined" != typeof h) {
              "undefined" == typeof d && (d = b.xScale()(b.x()(h, g)));
              var i = b.yScale()(b.y()(h, g));
              f.push({
                point: h,
                pointIndex: g,
                pos: [d, i],
                seriesIndex: e.seriesIndex,
                series: e
              });
            }
          }), e.dispatch.elementClick(f);
        }), i.dispatch.on("elementMouseout", function (a) {
          e.clearHighlights();
        }), w.on("changeState", function (a) {
          "undefined" != typeof a.disabled && j.length === a.disabled.length && (j.forEach(function (b, c) {
            b.disabled = a.disabled[c];
          }), t.disabled = a.disabled), b.update();
        });
      }), y.renderEnd("lineChart immediate"), b;
    }
    var c,
      d,
      e = a.models.line(),
      f = a.models.axis(),
      g = a.models.axis(),
      h = a.models.legend(),
      i = a.interactiveGuideline(),
      j = a.models.tooltip(),
      k = {
        top: 30,
        right: 20,
        bottom: 50,
        left: 60
      },
      l = a.utils.defaultColor(),
      m = null,
      n = null,
      o = !0,
      p = !0,
      q = !0,
      r = !1,
      s = !1,
      t = a.utils.state(),
      u = null,
      v = null,
      w = d3.dispatch("tooltipShow", "tooltipHide", "stateChange", "changeState", "renderEnd"),
      x = 250;
    f.orient("bottom").tickPadding(7), g.orient(r ? "right" : "left"), j.valueFormatter(function (a, b) {
      return g.tickFormat()(a, b);
    }).headerFormatter(function (a, b) {
      return f.tickFormat()(a, b);
    });
    var y = a.utils.renderWatch(w, x),
      z = function z(a) {
        return function () {
          return {
            active: a.map(function (a) {
              return !a.disabled;
            })
          };
        };
      },
      A = function A(a) {
        return function (b) {
          void 0 !== b.active && a.forEach(function (a, c) {
            a.disabled = !b.active[c];
          });
        };
      };
    return e.dispatch.on("elementMouseover.tooltip", function (a) {
      j.data(a).hidden(!1);
    }), e.dispatch.on("elementMouseout.tooltip", function (a) {
      j.hidden(!0);
    }), b.dispatch = w, b.lines = e, b.legend = h, b.xAxis = f, b.yAxis = g, b.interactiveLayer = i, b.tooltip = j, b.dispatch = w, b.options = a.utils.optionsFunc.bind(b), b._options = Object.create({}, {
      width: {
        get: function get() {
          return m;
        },
        set: function set(a) {
          m = a;
        }
      },
      height: {
        get: function get() {
          return n;
        },
        set: function set(a) {
          n = a;
        }
      },
      showLegend: {
        get: function get() {
          return o;
        },
        set: function set(a) {
          o = a;
        }
      },
      showXAxis: {
        get: function get() {
          return p;
        },
        set: function set(a) {
          p = a;
        }
      },
      showYAxis: {
        get: function get() {
          return q;
        },
        set: function set(a) {
          q = a;
        }
      },
      defaultState: {
        get: function get() {
          return u;
        },
        set: function set(a) {
          u = a;
        }
      },
      noData: {
        get: function get() {
          return v;
        },
        set: function set(a) {
          v = a;
        }
      },
      margin: {
        get: function get() {
          return k;
        },
        set: function set(a) {
          k.top = void 0 !== a.top ? a.top : k.top, k.right = void 0 !== a.right ? a.right : k.right, k.bottom = void 0 !== a.bottom ? a.bottom : k.bottom, k.left = void 0 !== a.left ? a.left : k.left;
        }
      },
      duration: {
        get: function get() {
          return x;
        },
        set: function set(a) {
          x = a, y.reset(x), e.duration(x), f.duration(x), g.duration(x);
        }
      },
      color: {
        get: function get() {
          return l;
        },
        set: function set(b) {
          l = a.utils.getColor(b), h.color(l), e.color(l);
        }
      },
      rightAlignYAxis: {
        get: function get() {
          return r;
        },
        set: function set(a) {
          r = a, g.orient(r ? "right" : "left");
        }
      },
      useInteractiveGuideline: {
        get: function get() {
          return s;
        },
        set: function set(a) {
          s = a, s && (e.interactive(!1), e.useVoronoi(!1));
        }
      }
    }), a.utils.inheritOptions(b, e), a.utils.initOptions(b), b;
  }, a.models.linePlusBarChart = function () {
    "use strict";

    function b(v) {
      return v.each(function (v) {
        function J(a) {
          var b = +("e" == a),
            c = b ? 1 : -1,
            d = Y / 3;
          return "M" + .5 * c + "," + d + "A6,6 0 0 " + b + " " + 6.5 * c + "," + (d + 6) + "V" + (2 * d - 6) + "A6,6 0 0 " + b + " " + .5 * c + "," + 2 * d + "ZM" + 2.5 * c + "," + (d + 8) + "V" + (2 * d - 8) + "M" + 4.5 * c + "," + (d + 8) + "V" + (2 * d - 8);
        }
        function T() {
          u.empty() || u.extent(I), la.data([u.empty() ? e.domain() : I]).each(function (a, b) {
            var c = e(a[0]) - e.range()[0],
              d = e.range()[1] - e(a[1]);
            d3.select(this).select(".left").attr("width", 0 > c ? 0 : c), d3.select(this).select(".right").attr("x", e(a[1])).attr("width", 0 > d ? 0 : d);
          });
        }
        function U() {
          I = u.empty() ? null : u.extent(), c = u.empty() ? e.domain() : u.extent(), K.brush({
            extent: c,
            brush: u
          }), T(), l.width(W).height(X).color(v.map(function (a, b) {
            return a.color || C(a, b);
          }).filter(function (a, b) {
            return !v[b].disabled && v[b].bar;
          })), j.width(W).height(X).color(v.map(function (a, b) {
            return a.color || C(a, b);
          }).filter(function (a, b) {
            return !v[b].disabled && !v[b].bar;
          }));
          var b = ea.select(".nv-focus .nv-barsWrap").datum($.length ? $.map(function (a, b) {
              return {
                key: a.key,
                values: a.values.filter(function (a, b) {
                  return l.x()(a, b) >= c[0] && l.x()(a, b) <= c[1];
                })
              };
            }) : [{
              values: []
            }]),
            h = ea.select(".nv-focus .nv-linesWrap").datum(S(_) ? [{
              values: []
            }] : _.filter(function (a) {
              return !a.disabled;
            }).map(function (a, b) {
              return {
                area: a.area,
                fillOpacity: a.fillOpacity,
                key: a.key,
                values: a.values.filter(function (a, b) {
                  return j.x()(a, b) >= c[0] && j.x()(a, b) <= c[1];
                })
              };
            }));
          d = $.length ? l.xScale() : j.xScale(), n.scale(d)._ticks(a.utils.calcTicksX(W / 100, v)).tickSize(-X, 0), n.domain([Math.ceil(c[0]), Math.floor(c[1])]), ea.select(".nv-x.nv-axis").transition().duration(L).call(n), b.transition().duration(L).call(l), h.transition().duration(L).call(j), ea.select(".nv-focus .nv-x.nv-axis").attr("transform", "translate(0," + f.range()[0] + ")"), p.scale(f)._ticks(a.utils.calcTicksY(X / 36, v)).tickSize(-W, 0), q.scale(g)._ticks(a.utils.calcTicksY(X / 36, v)).tickSize($.length ? 0 : -W, 0), ea.select(".nv-focus .nv-y1.nv-axis").style("opacity", $.length ? 1 : 0), ea.select(".nv-focus .nv-y2.nv-axis").style("opacity", _.length && !S(_) ? 1 : 0).attr("transform", "translate(" + d.range()[1] + ",0)"), ea.select(".nv-focus .nv-y1.nv-axis").transition().duration(L).call(p), ea.select(".nv-focus .nv-y2.nv-axis").transition().duration(L).call(q);
        }
        var V = d3.select(this);
        a.utils.initSVG(V);
        var W = a.utils.availableWidth(y, V, w),
          X = a.utils.availableHeight(z, V, w) - (E ? H : 0),
          Y = H - x.top - x.bottom;
        if (b.update = function () {
          V.transition().duration(L).call(b);
        }, b.container = this, M.setter(R(v), b.update).getter(Q(v)).update(), M.disabled = v.map(function (a) {
          return !!a.disabled;
        }), !N) {
          var Z;
          N = {};
          for (Z in M) M[Z] instanceof Array ? N[Z] = M[Z].slice(0) : N[Z] = M[Z];
        }
        if (!(v && v.length && v.filter(function (a) {
          return a.values.length;
        }).length)) return a.utils.noData(b, V), b;
        V.selectAll(".nv-noData").remove();
        var $ = v.filter(function (a) {
            return !a.disabled && a.bar;
          }),
          _ = v.filter(function (a) {
            return !a.bar;
          });
        d = l.xScale(), e = o.scale(), f = l.yScale(), g = j.yScale(), h = m.yScale(), i = k.yScale();
        var aa = v.filter(function (a) {
            return !a.disabled && a.bar;
          }).map(function (a) {
            return a.values.map(function (a, b) {
              return {
                x: A(a, b),
                y: B(a, b)
              };
            });
          }),
          ba = v.filter(function (a) {
            return !a.disabled && !a.bar;
          }).map(function (a) {
            return a.values.map(function (a, b) {
              return {
                x: A(a, b),
                y: B(a, b)
              };
            });
          });
        d.range([0, W]), e.domain(d3.extent(d3.merge(aa.concat(ba)), function (a) {
          return a.x;
        })).range([0, W]);
        var ca = V.selectAll("g.nv-wrap.nv-linePlusBar").data([v]),
          da = ca.enter().append("g").attr("class", "nvd3 nv-wrap nv-linePlusBar").append("g"),
          ea = ca.select("g");
        da.append("g").attr("class", "nv-legendWrap");
        var fa = da.append("g").attr("class", "nv-focus");
        fa.append("g").attr("class", "nv-x nv-axis"), fa.append("g").attr("class", "nv-y1 nv-axis"), fa.append("g").attr("class", "nv-y2 nv-axis"), fa.append("g").attr("class", "nv-barsWrap"), fa.append("g").attr("class", "nv-linesWrap");
        var ga = da.append("g").attr("class", "nv-context");
        if (ga.append("g").attr("class", "nv-x nv-axis"), ga.append("g").attr("class", "nv-y1 nv-axis"), ga.append("g").attr("class", "nv-y2 nv-axis"), ga.append("g").attr("class", "nv-barsWrap"), ga.append("g").attr("class", "nv-linesWrap"), ga.append("g").attr("class", "nv-brushBackground"), ga.append("g").attr("class", "nv-x nv-brush"), D) {
          var ha = t.align() ? W / 2 : W,
            ia = t.align() ? ha : 0;
          t.width(ha), ea.select(".nv-legendWrap").datum(v.map(function (a) {
            return a.originalKey = void 0 === a.originalKey ? a.key : a.originalKey, a.key = a.originalKey + (a.bar ? O : P), a;
          })).call(t), w.top != t.height() && (w.top = t.height(), X = a.utils.availableHeight(z, V, w) - H), ea.select(".nv-legendWrap").attr("transform", "translate(" + ia + "," + -w.top + ")");
        }
        ca.attr("transform", "translate(" + w.left + "," + w.top + ")"), ea.select(".nv-context").style("display", E ? "initial" : "none"), m.width(W).height(Y).color(v.map(function (a, b) {
          return a.color || C(a, b);
        }).filter(function (a, b) {
          return !v[b].disabled && v[b].bar;
        })), k.width(W).height(Y).color(v.map(function (a, b) {
          return a.color || C(a, b);
        }).filter(function (a, b) {
          return !v[b].disabled && !v[b].bar;
        }));
        var ja = ea.select(".nv-context .nv-barsWrap").datum($.length ? $ : [{
            values: []
          }]),
          ka = ea.select(".nv-context .nv-linesWrap").datum(S(_) ? [{
            values: []
          }] : _.filter(function (a) {
            return !a.disabled;
          }));
        ea.select(".nv-context").attr("transform", "translate(0," + (X + w.bottom + x.top) + ")"), ja.transition().call(m), ka.transition().call(k), G && (o._ticks(a.utils.calcTicksX(W / 100, v)).tickSize(-Y, 0), ea.select(".nv-context .nv-x.nv-axis").attr("transform", "translate(0," + h.range()[0] + ")"), ea.select(".nv-context .nv-x.nv-axis").transition().call(o)), F && (r.scale(h)._ticks(Y / 36).tickSize(-W, 0), s.scale(i)._ticks(Y / 36).tickSize($.length ? 0 : -W, 0), ea.select(".nv-context .nv-y3.nv-axis").style("opacity", $.length ? 1 : 0).attr("transform", "translate(0," + e.range()[0] + ")"), ea.select(".nv-context .nv-y2.nv-axis").style("opacity", _.length ? 1 : 0).attr("transform", "translate(" + e.range()[1] + ",0)"), ea.select(".nv-context .nv-y1.nv-axis").transition().call(r), ea.select(".nv-context .nv-y2.nv-axis").transition().call(s)), u.x(e).on("brush", U), I && u.extent(I);
        var la = ea.select(".nv-brushBackground").selectAll("g").data([I || u.extent()]),
          ma = la.enter().append("g");
        ma.append("rect").attr("class", "left").attr("x", 0).attr("y", 0).attr("height", Y), ma.append("rect").attr("class", "right").attr("x", 0).attr("y", 0).attr("height", Y);
        var na = ea.select(".nv-x.nv-brush").call(u);
        na.selectAll("rect").attr("height", Y), na.selectAll(".resize").append("path").attr("d", J), t.dispatch.on("stateChange", function (a) {
          for (var c in a) M[c] = a[c];
          K.stateChange(M), b.update();
        }), K.on("changeState", function (a) {
          "undefined" != typeof a.disabled && (v.forEach(function (b, c) {
            b.disabled = a.disabled[c];
          }), M.disabled = a.disabled), b.update();
        }), U();
      }), b;
    }
    var c,
      d,
      e,
      f,
      g,
      h,
      i,
      j = a.models.line(),
      k = a.models.line(),
      l = a.models.historicalBar(),
      m = a.models.historicalBar(),
      n = a.models.axis(),
      o = a.models.axis(),
      p = a.models.axis(),
      q = a.models.axis(),
      r = a.models.axis(),
      s = a.models.axis(),
      t = a.models.legend(),
      u = d3.svg.brush(),
      v = a.models.tooltip(),
      w = {
        top: 30,
        right: 30,
        bottom: 30,
        left: 60
      },
      x = {
        top: 0,
        right: 30,
        bottom: 20,
        left: 60
      },
      y = null,
      z = null,
      A = function A(a) {
        return a.x;
      },
      B = function B(a) {
        return a.y;
      },
      C = a.utils.defaultColor(),
      D = !0,
      E = !0,
      F = !1,
      G = !0,
      H = 50,
      I = null,
      J = null,
      K = d3.dispatch("brush", "stateChange", "changeState"),
      L = 0,
      M = a.utils.state(),
      N = null,
      O = " (left axis)",
      P = " (right axis)";
    j.clipEdge(!0), k.interactive(!1), k.pointActive(function (a) {
      return !1;
    }), n.orient("bottom").tickPadding(5), p.orient("left"), q.orient("right"), o.orient("bottom").tickPadding(5), r.orient("left"), s.orient("right"), v.headerEnabled(!0).headerFormatter(function (a, b) {
      return n.tickFormat()(a, b);
    });
    var Q = function Q(a) {
        return function () {
          return {
            active: a.map(function (a) {
              return !a.disabled;
            })
          };
        };
      },
      R = function R(a) {
        return function (b) {
          void 0 !== b.active && a.forEach(function (a, c) {
            a.disabled = !b.active[c];
          });
        };
      },
      S = function S(a) {
        return a.every(function (a) {
          return a.disabled;
        });
      };
    return j.dispatch.on("elementMouseover.tooltip", function (a) {
      v.duration(100).valueFormatter(function (a, b) {
        return q.tickFormat()(a, b);
      }).data(a).hidden(!1);
    }), j.dispatch.on("elementMouseout.tooltip", function (a) {
      v.hidden(!0);
    }), l.dispatch.on("elementMouseover.tooltip", function (a) {
      a.value = b.x()(a.data), a.series = {
        value: b.y()(a.data),
        color: a.color
      }, v.duration(0).valueFormatter(function (a, b) {
        return p.tickFormat()(a, b);
      }).data(a).hidden(!1);
    }), l.dispatch.on("elementMouseout.tooltip", function (a) {
      v.hidden(!0);
    }), l.dispatch.on("elementMousemove.tooltip", function (a) {
      v();
    }), b.dispatch = K, b.legend = t, b.lines = j, b.lines2 = k, b.bars = l, b.bars2 = m, b.xAxis = n, b.x2Axis = o, b.y1Axis = p, b.y2Axis = q, b.y3Axis = r, b.y4Axis = s, b.tooltip = v, b.options = a.utils.optionsFunc.bind(b), b._options = Object.create({}, {
      width: {
        get: function get() {
          return y;
        },
        set: function set(a) {
          y = a;
        }
      },
      height: {
        get: function get() {
          return z;
        },
        set: function set(a) {
          z = a;
        }
      },
      showLegend: {
        get: function get() {
          return D;
        },
        set: function set(a) {
          D = a;
        }
      },
      brushExtent: {
        get: function get() {
          return I;
        },
        set: function set(a) {
          I = a;
        }
      },
      noData: {
        get: function get() {
          return J;
        },
        set: function set(a) {
          J = a;
        }
      },
      focusEnable: {
        get: function get() {
          return E;
        },
        set: function set(a) {
          E = a;
        }
      },
      focusHeight: {
        get: function get() {
          return H;
        },
        set: function set(a) {
          H = a;
        }
      },
      focusShowAxisX: {
        get: function get() {
          return G;
        },
        set: function set(a) {
          G = a;
        }
      },
      focusShowAxisY: {
        get: function get() {
          return F;
        },
        set: function set(a) {
          F = a;
        }
      },
      legendLeftAxisHint: {
        get: function get() {
          return O;
        },
        set: function set(a) {
          O = a;
        }
      },
      legendRightAxisHint: {
        get: function get() {
          return P;
        },
        set: function set(a) {
          P = a;
        }
      },
      margin: {
        get: function get() {
          return w;
        },
        set: function set(a) {
          w.top = void 0 !== a.top ? a.top : w.top, w.right = void 0 !== a.right ? a.right : w.right, w.bottom = void 0 !== a.bottom ? a.bottom : w.bottom, w.left = void 0 !== a.left ? a.left : w.left;
        }
      },
      focusMargin: {
        get: function get() {
          return x;
        },
        set: function set(a) {
          x.top = void 0 !== a.top ? a.top : x.top, x.right = void 0 !== a.right ? a.right : x.right, x.bottom = void 0 !== a.bottom ? a.bottom : x.bottom, x.left = void 0 !== a.left ? a.left : x.left;
        }
      },
      duration: {
        get: function get() {
          return L;
        },
        set: function set(a) {
          L = a;
        }
      },
      color: {
        get: function get() {
          return C;
        },
        set: function set(b) {
          C = a.utils.getColor(b), t.color(C);
        }
      },
      x: {
        get: function get() {
          return A;
        },
        set: function set(a) {
          A = a, j.x(a), k.x(a), l.x(a), m.x(a);
        }
      },
      y: {
        get: function get() {
          return B;
        },
        set: function set(a) {
          B = a, j.y(a), k.y(a), l.y(a), m.y(a);
        }
      }
    }), a.utils.inheritOptions(b, j), a.utils.initOptions(b), b;
  }, a.models.lineWithFocusChart = function () {
    "use strict";

    function b(o) {
      return o.each(function (o) {
        function z(a) {
          var b = +("e" == a),
            c = b ? 1 : -1,
            d = M / 3;
          return "M" + .5 * c + "," + d + "A6,6 0 0 " + b + " " + 6.5 * c + "," + (d + 6) + "V" + (2 * d - 6) + "A6,6 0 0 " + b + " " + .5 * c + "," + 2 * d + "ZM" + 2.5 * c + "," + (d + 8) + "V" + (2 * d - 8) + "M" + 4.5 * c + "," + (d + 8) + "V" + (2 * d - 8);
        }
        function G() {
          n.empty() || n.extent(y), U.data([n.empty() ? e.domain() : y]).each(function (a, b) {
            var d = e(a[0]) - c.range()[0],
              f = K - e(a[1]);
            d3.select(this).select(".left").attr("width", 0 > d ? 0 : d), d3.select(this).select(".right").attr("x", e(a[1])).attr("width", 0 > f ? 0 : f);
          });
        }
        function H() {
          y = n.empty() ? null : n.extent();
          var a = n.empty() ? e.domain() : n.extent();
          if (!(Math.abs(a[0] - a[1]) <= 1)) {
            A.brush({
              extent: a,
              brush: n
            }), G();
            var b = Q.select(".nv-focus .nv-linesWrap").datum(o.filter(function (a) {
              return !a.disabled;
            }).map(function (b, c) {
              return {
                key: b.key,
                area: b.area,
                classed: b.classed,
                values: b.values.filter(function (b, c) {
                  return g.x()(b, c) >= a[0] && g.x()(b, c) <= a[1];
                })
              };
            }));
            b.transition().duration(B).call(g), Q.select(".nv-focus .nv-x.nv-axis").transition().duration(B).call(i), Q.select(".nv-focus .nv-y.nv-axis").transition().duration(B).call(j);
          }
        }
        var I = d3.select(this),
          J = this;
        a.utils.initSVG(I);
        var K = a.utils.availableWidth(t, I, q),
          L = a.utils.availableHeight(u, I, q) - v,
          M = v - r.top - r.bottom;
        if (b.update = function () {
          I.transition().duration(B).call(b);
        }, b.container = this, C.setter(F(o), b.update).getter(E(o)).update(), C.disabled = o.map(function (a) {
          return !!a.disabled;
        }), !D) {
          var N;
          D = {};
          for (N in C) C[N] instanceof Array ? D[N] = C[N].slice(0) : D[N] = C[N];
        }
        if (!(o && o.length && o.filter(function (a) {
          return a.values.length;
        }).length)) return a.utils.noData(b, I), b;
        I.selectAll(".nv-noData").remove(), c = g.xScale(), d = g.yScale(), e = h.xScale(), f = h.yScale();
        var O = I.selectAll("g.nv-wrap.nv-lineWithFocusChart").data([o]),
          P = O.enter().append("g").attr("class", "nvd3 nv-wrap nv-lineWithFocusChart").append("g"),
          Q = O.select("g");
        P.append("g").attr("class", "nv-legendWrap");
        var R = P.append("g").attr("class", "nv-focus");
        R.append("g").attr("class", "nv-x nv-axis"), R.append("g").attr("class", "nv-y nv-axis"), R.append("g").attr("class", "nv-linesWrap"), R.append("g").attr("class", "nv-interactive");
        var S = P.append("g").attr("class", "nv-context");
        S.append("g").attr("class", "nv-x nv-axis"), S.append("g").attr("class", "nv-y nv-axis"), S.append("g").attr("class", "nv-linesWrap"), S.append("g").attr("class", "nv-brushBackground"), S.append("g").attr("class", "nv-x nv-brush"), x && (m.width(K), Q.select(".nv-legendWrap").datum(o).call(m), q.top != m.height() && (q.top = m.height(), L = a.utils.availableHeight(u, I, q) - v), Q.select(".nv-legendWrap").attr("transform", "translate(0," + -q.top + ")")), O.attr("transform", "translate(" + q.left + "," + q.top + ")"), w && (p.width(K).height(L).margin({
          left: q.left,
          top: q.top
        }).svgContainer(I).xScale(c), O.select(".nv-interactive").call(p)), g.width(K).height(L).color(o.map(function (a, b) {
          return a.color || s(a, b);
        }).filter(function (a, b) {
          return !o[b].disabled;
        })), h.defined(g.defined()).width(K).height(M).color(o.map(function (a, b) {
          return a.color || s(a, b);
        }).filter(function (a, b) {
          return !o[b].disabled;
        })), Q.select(".nv-context").attr("transform", "translate(0," + (L + q.bottom + r.top) + ")");
        var T = Q.select(".nv-context .nv-linesWrap").datum(o.filter(function (a) {
          return !a.disabled;
        }));
        d3.transition(T).call(h), i.scale(c)._ticks(a.utils.calcTicksX(K / 100, o)).tickSize(-L, 0), j.scale(d)._ticks(a.utils.calcTicksY(L / 36, o)).tickSize(-K, 0), Q.select(".nv-focus .nv-x.nv-axis").attr("transform", "translate(0," + L + ")"), n.x(e).on("brush", function () {
          H();
        }), y && n.extent(y);
        var U = Q.select(".nv-brushBackground").selectAll("g").data([y || n.extent()]),
          V = U.enter().append("g");
        V.append("rect").attr("class", "left").attr("x", 0).attr("y", 0).attr("height", M), V.append("rect").attr("class", "right").attr("x", 0).attr("y", 0).attr("height", M);
        var W = Q.select(".nv-x.nv-brush").call(n);
        W.selectAll("rect").attr("height", M), W.selectAll(".resize").append("path").attr("d", z), H(), k.scale(e)._ticks(a.utils.calcTicksX(K / 100, o)).tickSize(-M, 0), Q.select(".nv-context .nv-x.nv-axis").attr("transform", "translate(0," + f.range()[0] + ")"), d3.transition(Q.select(".nv-context .nv-x.nv-axis")).call(k), l.scale(f)._ticks(a.utils.calcTicksY(M / 36, o)).tickSize(-K, 0), d3.transition(Q.select(".nv-context .nv-y.nv-axis")).call(l), Q.select(".nv-context .nv-x.nv-axis").attr("transform", "translate(0," + f.range()[0] + ")"), m.dispatch.on("stateChange", function (a) {
          for (var c in a) C[c] = a[c];
          A.stateChange(C), b.update();
        }), p.dispatch.on("elementMousemove", function (c) {
          g.clearHighlights();
          var d,
            f,
            h,
            k = [];
          if (o.filter(function (a, b) {
            return a.seriesIndex = b, !a.disabled;
          }).forEach(function (i, j) {
            var l = n.empty() ? e.domain() : n.extent(),
              m = i.values.filter(function (a, b) {
                return g.x()(a, b) >= l[0] && g.x()(a, b) <= l[1];
              });
            f = a.interactiveBisect(m, c.pointXValue, g.x());
            var o = m[f],
              p = b.y()(o, f);
            null != p && g.highlightPoint(j, f, !0), void 0 !== o && (void 0 === d && (d = o), void 0 === h && (h = b.xScale()(b.x()(o, f))), k.push({
              key: i.key,
              value: b.y()(o, f),
              color: s(i, i.seriesIndex)
            }));
          }), k.length > 2) {
            var l = b.yScale().invert(c.mouseY),
              m = Math.abs(b.yScale().domain()[0] - b.yScale().domain()[1]),
              q = .03 * m,
              r = a.nearestValueIndex(k.map(function (a) {
                return a.value;
              }), l, q);
            null !== r && (k[r].highlight = !0);
          }
          var t = i.tickFormat()(b.x()(d, f));
          p.tooltip.chartContainer(J.parentNode).valueFormatter(function (a, b) {
            return null == a ? "N/A" : j.tickFormat()(a);
          }).data({
            value: t,
            index: f,
            series: k
          })(), p.renderGuideLine(h);
        }), p.dispatch.on("elementMouseout", function (a) {
          g.clearHighlights();
        }), A.on("changeState", function (a) {
          "undefined" != typeof a.disabled && o.forEach(function (b, c) {
            b.disabled = a.disabled[c];
          }), b.update();
        });
      }), b;
    }
    var c,
      d,
      e,
      f,
      g = a.models.line(),
      h = a.models.line(),
      i = a.models.axis(),
      j = a.models.axis(),
      k = a.models.axis(),
      l = a.models.axis(),
      m = a.models.legend(),
      n = d3.svg.brush(),
      o = a.models.tooltip(),
      p = a.interactiveGuideline(),
      q = {
        top: 30,
        right: 30,
        bottom: 30,
        left: 60
      },
      r = {
        top: 0,
        right: 30,
        bottom: 20,
        left: 60
      },
      s = a.utils.defaultColor(),
      t = null,
      u = null,
      v = 50,
      w = !1,
      x = !0,
      y = null,
      z = null,
      A = d3.dispatch("brush", "stateChange", "changeState"),
      B = 250,
      C = a.utils.state(),
      D = null;
    g.clipEdge(!0).duration(0), h.interactive(!1), h.pointActive(function (a) {
      return !1;
    }), i.orient("bottom").tickPadding(5), j.orient("left"), k.orient("bottom").tickPadding(5), l.orient("left"), o.valueFormatter(function (a, b) {
      return j.tickFormat()(a, b);
    }).headerFormatter(function (a, b) {
      return i.tickFormat()(a, b);
    });
    var E = function E(a) {
        return function () {
          return {
            active: a.map(function (a) {
              return !a.disabled;
            })
          };
        };
      },
      F = function F(a) {
        return function (b) {
          void 0 !== b.active && a.forEach(function (a, c) {
            a.disabled = !b.active[c];
          });
        };
      };
    return g.dispatch.on("elementMouseover.tooltip", function (a) {
      o.data(a).hidden(!1);
    }), g.dispatch.on("elementMouseout.tooltip", function (a) {
      o.hidden(!0);
    }), b.dispatch = A, b.legend = m, b.lines = g, b.lines2 = h, b.xAxis = i, b.yAxis = j, b.x2Axis = k, b.y2Axis = l, b.interactiveLayer = p, b.tooltip = o, b.options = a.utils.optionsFunc.bind(b), b._options = Object.create({}, {
      width: {
        get: function get() {
          return t;
        },
        set: function set(a) {
          t = a;
        }
      },
      height: {
        get: function get() {
          return u;
        },
        set: function set(a) {
          u = a;
        }
      },
      focusHeight: {
        get: function get() {
          return v;
        },
        set: function set(a) {
          v = a;
        }
      },
      showLegend: {
        get: function get() {
          return x;
        },
        set: function set(a) {
          x = a;
        }
      },
      brushExtent: {
        get: function get() {
          return y;
        },
        set: function set(a) {
          y = a;
        }
      },
      defaultState: {
        get: function get() {
          return D;
        },
        set: function set(a) {
          D = a;
        }
      },
      noData: {
        get: function get() {
          return z;
        },
        set: function set(a) {
          z = a;
        }
      },
      margin: {
        get: function get() {
          return q;
        },
        set: function set(a) {
          q.top = void 0 !== a.top ? a.top : q.top, q.right = void 0 !== a.right ? a.right : q.right, q.bottom = void 0 !== a.bottom ? a.bottom : q.bottom, q.left = void 0 !== a.left ? a.left : q.left;
        }
      },
      focusMargin: {
        get: function get() {
          return r;
        },
        set: function set(a) {
          r.top = void 0 !== a.top ? a.top : r.top, r.right = void 0 !== a.right ? a.right : r.right, r.bottom = void 0 !== a.bottom ? a.bottom : r.bottom, r.left = void 0 !== a.left ? a.left : r.left;
        }
      },
      color: {
        get: function get() {
          return s;
        },
        set: function set(b) {
          s = a.utils.getColor(b), m.color(s);
        }
      },
      interpolate: {
        get: function get() {
          return g.interpolate();
        },
        set: function set(a) {
          g.interpolate(a), h.interpolate(a);
        }
      },
      xTickFormat: {
        get: function get() {
          return i.tickFormat();
        },
        set: function set(a) {
          i.tickFormat(a), k.tickFormat(a);
        }
      },
      yTickFormat: {
        get: function get() {
          return j.tickFormat();
        },
        set: function set(a) {
          j.tickFormat(a), l.tickFormat(a);
        }
      },
      duration: {
        get: function get() {
          return B;
        },
        set: function set(a) {
          B = a, j.duration(B), l.duration(B), i.duration(B), k.duration(B);
        }
      },
      x: {
        get: function get() {
          return g.x();
        },
        set: function set(a) {
          g.x(a), h.x(a);
        }
      },
      y: {
        get: function get() {
          return g.y();
        },
        set: function set(a) {
          g.y(a), h.y(a);
        }
      },
      useInteractiveGuideline: {
        get: function get() {
          return w;
        },
        set: function set(a) {
          w = a, w && (g.interactive(!1), g.useVoronoi(!1));
        }
      }
    }), a.utils.inheritOptions(b, g), a.utils.initOptions(b), b;
  }, a.models.multiBar = function () {
    "use strict";

    function b(E) {
      return C.reset(), E.each(function (b) {
        var E = k - j.left - j.right,
          F = l - j.top - j.bottom;
        p = d3.select(this), a.utils.initSVG(p);
        var G = 0;
        if (x && b.length && (x = [{
          values: b[0].values.map(function (a) {
            return {
              x: a.x,
              y: 0,
              series: a.series,
              size: .01
            };
          })
        }]), u) {
          var H = d3.layout.stack().offset(v).values(function (a) {
            return a.values;
          }).y(r)(!b.length && x ? x : b);
          H.forEach(function (a, c) {
            a.nonStackable ? (b[c].nonStackableSeries = G++, H[c] = b[c]) : c > 0 && H[c - 1].nonStackable && H[c].values.map(function (a, b) {
              a.y0 -= H[c - 1].values[b].y, a.y1 = a.y0 + a.y;
            });
          }), b = H;
        }
        b.forEach(function (a, b) {
          a.values.forEach(function (c) {
            c.series = b, c.key = a.key;
          });
        }), u && b[0].values.map(function (a, c) {
          var d = 0,
            e = 0;
          b.map(function (a, f) {
            if (!b[f].nonStackable) {
              var g = a.values[c];
              g.size = Math.abs(g.y), g.y < 0 ? (g.y1 = e, e -= g.size) : (g.y1 = g.size + d, d += g.size);
            }
          });
        });
        var I = d && e ? [] : b.map(function (a, b) {
          return a.values.map(function (a, c) {
            return {
              x: q(a, c),
              y: r(a, c),
              y0: a.y0,
              y1: a.y1,
              idx: b
            };
          });
        });
        m.domain(d || d3.merge(I).map(function (a) {
          return a.x;
        })).rangeBands(f || [0, E], A), n.domain(e || d3.extent(d3.merge(I).map(function (a) {
          var c = a.y;
          return u && !b[a.idx].nonStackable && (c = a.y > 0 ? a.y1 : a.y1 + a.y), c;
        }).concat(s))).range(g || [F, 0]), m.domain()[0] === m.domain()[1] && (m.domain()[0] ? m.domain([m.domain()[0] - .01 * m.domain()[0], m.domain()[1] + .01 * m.domain()[1]]) : m.domain([-1, 1])), n.domain()[0] === n.domain()[1] && (n.domain()[0] ? n.domain([n.domain()[0] + .01 * n.domain()[0], n.domain()[1] - .01 * n.domain()[1]]) : n.domain([-1, 1])), h = h || m, i = i || n;
        var J = p.selectAll("g.nv-wrap.nv-multibar").data([b]),
          K = J.enter().append("g").attr("class", "nvd3 nv-wrap nv-multibar"),
          L = K.append("defs"),
          M = K.append("g"),
          N = J.select("g");
        M.append("g").attr("class", "nv-groups"), J.attr("transform", "translate(" + j.left + "," + j.top + ")"), L.append("clipPath").attr("id", "nv-edge-clip-" + o).append("rect"), J.select("#nv-edge-clip-" + o + " rect").attr("width", E).attr("height", F), N.attr("clip-path", t ? "url(#nv-edge-clip-" + o + ")" : "");
        var O = J.select(".nv-groups").selectAll(".nv-group").data(function (a) {
          return a;
        }, function (a, b) {
          return b;
        });
        O.enter().append("g").style("stroke-opacity", 1e-6).style("fill-opacity", 1e-6);
        var P = C.transition(O.exit().selectAll("rect.nv-bar"), "multibarExit", Math.min(100, z)).attr("y", function (a, c, d) {
          var e = i(0) || 0;
          return u && b[a.series] && !b[a.series].nonStackable && (e = i(a.y0)), e;
        }).attr("height", 0).remove();
        P.delay && P.delay(function (a, b) {
          var c = b * (z / (D + 1)) - b;
          return c;
        }), O.attr("class", function (a, b) {
          return "nv-group nv-series-" + b;
        }).classed("hover", function (a) {
          return a.hover;
        }).style("fill", function (a, b) {
          return w(a, b);
        }).style("stroke", function (a, b) {
          return w(a, b);
        }), O.style("stroke-opacity", 1).style("fill-opacity", .75);
        var Q = O.selectAll("rect.nv-bar").data(function (a) {
          return x && !b.length ? x.values : a.values;
        });
        Q.exit().remove();
        Q.enter().append("rect").attr("class", function (a, b) {
          return r(a, b) < 0 ? "nv-bar negative" : "nv-bar positive";
        }).attr("x", function (a, c, d) {
          return u && !b[d].nonStackable ? 0 : d * m.rangeBand() / b.length;
        }).attr("y", function (a, c, d) {
          return i(u && !b[d].nonStackable ? a.y0 : 0) || 0;
        }).attr("height", 0).attr("width", function (a, c, d) {
          return m.rangeBand() / (u && !b[d].nonStackable ? 1 : b.length);
        }).attr("transform", function (a, b) {
          return "translate(" + m(q(a, b)) + ",0)";
        });
        Q.style("fill", function (a, b, c) {
          return w(a, c, b);
        }).style("stroke", function (a, b, c) {
          return w(a, c, b);
        }).on("mouseover", function (a, b) {
          d3.select(this).classed("hover", !0), B.elementMouseover({
            data: a,
            index: b,
            color: d3.select(this).style("fill")
          });
        }).on("mouseout", function (a, b) {
          d3.select(this).classed("hover", !1), B.elementMouseout({
            data: a,
            index: b,
            color: d3.select(this).style("fill")
          });
        }).on("mousemove", function (a, b) {
          B.elementMousemove({
            data: a,
            index: b,
            color: d3.select(this).style("fill")
          });
        }).on("click", function (a, b) {
          B.elementClick({
            data: a,
            index: b,
            color: d3.select(this).style("fill")
          }), d3.event.stopPropagation();
        }).on("dblclick", function (a, b) {
          B.elementDblClick({
            data: a,
            index: b,
            color: d3.select(this).style("fill")
          }), d3.event.stopPropagation();
        }), Q.attr("class", function (a, b) {
          return r(a, b) < 0 ? "nv-bar negative" : "nv-bar positive";
        }).attr("transform", function (a, b) {
          return "translate(" + m(q(a, b)) + ",0)";
        }), y && (c || (c = b.map(function () {
          return !0;
        })), Q.style("fill", function (a, b, d) {
          return d3.rgb(y(a, b)).darker(c.map(function (a, b) {
            return b;
          }).filter(function (a, b) {
            return !c[b];
          })[d]).toString();
        }).style("stroke", function (a, b, d) {
          return d3.rgb(y(a, b)).darker(c.map(function (a, b) {
            return b;
          }).filter(function (a, b) {
            return !c[b];
          })[d]).toString();
        }));
        var R = Q.watchTransition(C, "multibar", Math.min(250, z)).delay(function (a, c) {
          return c * z / b[0].values.length;
        });
        u ? R.attr("y", function (a, c, d) {
          var e = 0;
          return e = b[d].nonStackable ? r(a, c) < 0 ? n(0) : n(0) - n(r(a, c)) < -1 ? n(0) - 1 : n(r(a, c)) || 0 : n(a.y1);
        }).attr("height", function (a, c, d) {
          return b[d].nonStackable ? Math.max(Math.abs(n(r(a, c)) - n(0)), 0) || 0 : Math.max(Math.abs(n(a.y + a.y0) - n(a.y0)), 0);
        }).attr("x", function (a, c, d) {
          var e = 0;
          return b[d].nonStackable && (e = a.series * m.rangeBand() / b.length, b.length !== G && (e = b[d].nonStackableSeries * m.rangeBand() / (2 * G))), e;
        }).attr("width", function (a, c, d) {
          if (b[d].nonStackable) {
            var e = m.rangeBand() / G;
            return b.length !== G && (e = m.rangeBand() / (2 * G)), e;
          }
          return m.rangeBand();
        }) : R.attr("x", function (a, c) {
          return a.series * m.rangeBand() / b.length;
        }).attr("width", m.rangeBand() / b.length).attr("y", function (a, b) {
          return r(a, b) < 0 ? n(0) : n(0) - n(r(a, b)) < 1 ? n(0) - 1 : n(r(a, b)) || 0;
        }).attr("height", function (a, b) {
          return Math.max(Math.abs(n(r(a, b)) - n(0)), 1) || 0;
        }), h = m.copy(), i = n.copy(), b[0] && b[0].values && (D = b[0].values.length);
      }), C.renderEnd("multibar immediate"), b;
    }
    var c,
      d,
      e,
      f,
      g,
      h,
      i,
      j = {
        top: 0,
        right: 0,
        bottom: 0,
        left: 0
      },
      k = 960,
      l = 500,
      m = d3.scale.ordinal(),
      n = d3.scale.linear(),
      o = Math.floor(1e4 * Math.random()),
      p = null,
      q = function q(a) {
        return a.x;
      },
      r = function r(a) {
        return a.y;
      },
      s = [0],
      t = !0,
      u = !1,
      v = "zero",
      w = a.utils.defaultColor(),
      x = !1,
      y = null,
      z = 500,
      A = .1,
      B = d3.dispatch("chartClick", "elementClick", "elementDblClick", "elementMouseover", "elementMouseout", "elementMousemove", "renderEnd"),
      C = a.utils.renderWatch(B, z),
      D = 0;
    return b.dispatch = B, b.options = a.utils.optionsFunc.bind(b), b._options = Object.create({}, {
      width: {
        get: function get() {
          return k;
        },
        set: function set(a) {
          k = a;
        }
      },
      height: {
        get: function get() {
          return l;
        },
        set: function set(a) {
          l = a;
        }
      },
      x: {
        get: function get() {
          return q;
        },
        set: function set(a) {
          q = a;
        }
      },
      y: {
        get: function get() {
          return r;
        },
        set: function set(a) {
          r = a;
        }
      },
      xScale: {
        get: function get() {
          return m;
        },
        set: function set(a) {
          m = a;
        }
      },
      yScale: {
        get: function get() {
          return n;
        },
        set: function set(a) {
          n = a;
        }
      },
      xDomain: {
        get: function get() {
          return d;
        },
        set: function set(a) {
          d = a;
        }
      },
      yDomain: {
        get: function get() {
          return e;
        },
        set: function set(a) {
          e = a;
        }
      },
      xRange: {
        get: function get() {
          return f;
        },
        set: function set(a) {
          f = a;
        }
      },
      yRange: {
        get: function get() {
          return g;
        },
        set: function set(a) {
          g = a;
        }
      },
      forceY: {
        get: function get() {
          return s;
        },
        set: function set(a) {
          s = a;
        }
      },
      stacked: {
        get: function get() {
          return u;
        },
        set: function set(a) {
          u = a;
        }
      },
      stackOffset: {
        get: function get() {
          return v;
        },
        set: function set(a) {
          v = a;
        }
      },
      clipEdge: {
        get: function get() {
          return t;
        },
        set: function set(a) {
          t = a;
        }
      },
      disabled: {
        get: function get() {
          return c;
        },
        set: function set(a) {
          c = a;
        }
      },
      id: {
        get: function get() {
          return o;
        },
        set: function set(a) {
          o = a;
        }
      },
      hideable: {
        get: function get() {
          return x;
        },
        set: function set(a) {
          x = a;
        }
      },
      groupSpacing: {
        get: function get() {
          return A;
        },
        set: function set(a) {
          A = a;
        }
      },
      margin: {
        get: function get() {
          return j;
        },
        set: function set(a) {
          j.top = void 0 !== a.top ? a.top : j.top, j.right = void 0 !== a.right ? a.right : j.right, j.bottom = void 0 !== a.bottom ? a.bottom : j.bottom, j.left = void 0 !== a.left ? a.left : j.left;
        }
      },
      duration: {
        get: function get() {
          return z;
        },
        set: function set(a) {
          z = a, C.reset(z);
        }
      },
      color: {
        get: function get() {
          return w;
        },
        set: function set(b) {
          w = a.utils.getColor(b);
        }
      },
      barColor: {
        get: function get() {
          return y;
        },
        set: function set(b) {
          y = b ? a.utils.getColor(b) : null;
        }
      }
    }), a.utils.initOptions(b), b;
  }, a.models.multiBarChart = function () {
    "use strict";

    function b(j) {
      return E.reset(), E.models(e), r && E.models(f), s && E.models(g), j.each(function (j) {
        var A = d3.select(this);
        a.utils.initSVG(A);
        var E = a.utils.availableWidth(l, A, k),
          I = a.utils.availableHeight(m, A, k);
        if (b.update = function () {
          0 === D ? A.call(b) : A.transition().duration(D).call(b);
        }, b.container = this, y.setter(H(j), b.update).getter(G(j)).update(), y.disabled = j.map(function (a) {
          return !!a.disabled;
        }), !z) {
          var J;
          z = {};
          for (J in y) y[J] instanceof Array ? z[J] = y[J].slice(0) : z[J] = y[J];
        }
        if (!(j && j.length && j.filter(function (a) {
          return a.values.length;
        }).length)) return a.utils.noData(b, A), b;
        A.selectAll(".nv-noData").remove(), c = e.xScale(), d = e.yScale();
        var K = A.selectAll("g.nv-wrap.nv-multiBarWithLegend").data([j]),
          L = K.enter().append("g").attr("class", "nvd3 nv-wrap nv-multiBarWithLegend").append("g"),
          M = K.select("g");
        if (L.append("g").attr("class", "nv-x nv-axis"), L.append("g").attr("class", "nv-y nv-axis"), L.append("g").attr("class", "nv-barsWrap"), L.append("g").attr("class", "nv-legendWrap"), L.append("g").attr("class", "nv-controlsWrap"), q && (h.width(E - C()), M.select(".nv-legendWrap").datum(j).call(h), k.top != h.height() && (k.top = h.height(), I = a.utils.availableHeight(m, A, k)), M.select(".nv-legendWrap").attr("transform", "translate(" + C() + "," + -k.top + ")")), o) {
          var N = [{
            key: p.grouped || "Grouped",
            disabled: e.stacked()
          }, {
            key: p.stacked || "Stacked",
            disabled: !e.stacked()
          }];
          i.width(C()).color(["#444", "#444", "#444"]), M.select(".nv-controlsWrap").datum(N).attr("transform", "translate(0," + -k.top + ")").call(i);
        }
        K.attr("transform", "translate(" + k.left + "," + k.top + ")"), t && M.select(".nv-y.nv-axis").attr("transform", "translate(" + E + ",0)"), e.disabled(j.map(function (a) {
          return a.disabled;
        })).width(E).height(I).color(j.map(function (a, b) {
          return a.color || n(a, b);
        }).filter(function (a, b) {
          return !j[b].disabled;
        }));
        var O = M.select(".nv-barsWrap").datum(j.filter(function (a) {
          return !a.disabled;
        }));
        if (O.call(e), r) {
          f.scale(c)._ticks(a.utils.calcTicksX(E / 100, j)).tickSize(-I, 0), M.select(".nv-x.nv-axis").attr("transform", "translate(0," + d.range()[0] + ")"), M.select(".nv-x.nv-axis").call(f);
          var P = M.select(".nv-x.nv-axis > g").selectAll("g");
          if (P.selectAll("line, text").style("opacity", 1), v) {
            var Q = function Q(a, b) {
                return "translate(" + a + "," + b + ")";
              },
              R = 5,
              S = 17;
            P.selectAll("text").attr("transform", function (a, b, c) {
              return Q(0, c % 2 == 0 ? R : S);
            });
            var T = d3.selectAll(".nv-x.nv-axis .nv-wrap g g text")[0].length;
            M.selectAll(".nv-x.nv-axis .nv-axisMaxMin text").attr("transform", function (a, b) {
              return Q(0, 0 === b || T % 2 !== 0 ? S : R);
            });
          }
          w && M.selectAll(".tick text").call(a.utils.wrapTicks, b.xAxis.rangeBand()), u && P.filter(function (a, b) {
            return b % Math.ceil(j[0].values.length / (E / 100)) !== 0;
          }).selectAll("text, line").style("opacity", 0), x && P.selectAll(".tick text").attr("transform", "rotate(" + x + " 0,0)").style("text-anchor", x > 0 ? "start" : "end"), M.select(".nv-x.nv-axis").selectAll("g.nv-axisMaxMin text").style("opacity", 1);
        }
        s && (g.scale(d)._ticks(a.utils.calcTicksY(I / 36, j)).tickSize(-E, 0), M.select(".nv-y.nv-axis").call(g)), h.dispatch.on("stateChange", function (a) {
          for (var c in a) y[c] = a[c];
          B.stateChange(y), b.update();
        }), i.dispatch.on("legendClick", function (a, c) {
          if (a.disabled) {
            switch (N = N.map(function (a) {
              return a.disabled = !0, a;
            }), a.disabled = !1, a.key) {
              case "Grouped":
              case p.grouped:
                e.stacked(!1);
                break;
              case "Stacked":
              case p.stacked:
                e.stacked(!0);
            }
            y.stacked = e.stacked(), B.stateChange(y), b.update();
          }
        }), B.on("changeState", function (a) {
          "undefined" != typeof a.disabled && (j.forEach(function (b, c) {
            b.disabled = a.disabled[c];
          }), y.disabled = a.disabled), "undefined" != typeof a.stacked && (e.stacked(a.stacked), y.stacked = a.stacked, F = a.stacked), b.update();
        });
      }), E.renderEnd("multibarchart immediate"), b;
    }
    var c,
      d,
      e = a.models.multiBar(),
      f = a.models.axis(),
      g = a.models.axis(),
      h = a.models.legend(),
      i = a.models.legend(),
      j = a.models.tooltip(),
      k = {
        top: 30,
        right: 20,
        bottom: 50,
        left: 60
      },
      l = null,
      m = null,
      n = a.utils.defaultColor(),
      o = !0,
      p = {},
      q = !0,
      r = !0,
      s = !0,
      t = !1,
      u = !0,
      v = !1,
      w = !1,
      x = 0,
      y = a.utils.state(),
      z = null,
      A = null,
      B = d3.dispatch("stateChange", "changeState", "renderEnd"),
      C = function C() {
        return o ? 180 : 0;
      },
      D = 250;
    y.stacked = !1, e.stacked(!1), f.orient("bottom").tickPadding(7).showMaxMin(!1).tickFormat(function (a) {
      return a;
    }), g.orient(t ? "right" : "left").tickFormat(d3.format(",.1f")), j.duration(0).valueFormatter(function (a, b) {
      return g.tickFormat()(a, b);
    }).headerFormatter(function (a, b) {
      return f.tickFormat()(a, b);
    }), i.updateState(!1);
    var E = a.utils.renderWatch(B),
      F = !1,
      G = function G(a) {
        return function () {
          return {
            active: a.map(function (a) {
              return !a.disabled;
            }),
            stacked: F
          };
        };
      },
      H = function H(a) {
        return function (b) {
          void 0 !== b.stacked && (F = b.stacked), void 0 !== b.active && a.forEach(function (a, c) {
            a.disabled = !b.active[c];
          });
        };
      };
    return e.dispatch.on("elementMouseover.tooltip", function (a) {
      a.value = b.x()(a.data), a.series = {
        key: a.data.key,
        value: b.y()(a.data),
        color: a.color
      }, j.data(a).hidden(!1);
    }), e.dispatch.on("elementMouseout.tooltip", function (a) {
      j.hidden(!0);
    }), e.dispatch.on("elementMousemove.tooltip", function (a) {
      j();
    }), b.dispatch = B, b.multibar = e, b.legend = h, b.controls = i, b.xAxis = f, b.yAxis = g, b.state = y, b.tooltip = j, b.options = a.utils.optionsFunc.bind(b), b._options = Object.create({}, {
      width: {
        get: function get() {
          return l;
        },
        set: function set(a) {
          l = a;
        }
      },
      height: {
        get: function get() {
          return m;
        },
        set: function set(a) {
          m = a;
        }
      },
      showLegend: {
        get: function get() {
          return q;
        },
        set: function set(a) {
          q = a;
        }
      },
      showControls: {
        get: function get() {
          return o;
        },
        set: function set(a) {
          o = a;
        }
      },
      controlLabels: {
        get: function get() {
          return p;
        },
        set: function set(a) {
          p = a;
        }
      },
      showXAxis: {
        get: function get() {
          return r;
        },
        set: function set(a) {
          r = a;
        }
      },
      showYAxis: {
        get: function get() {
          return s;
        },
        set: function set(a) {
          s = a;
        }
      },
      defaultState: {
        get: function get() {
          return z;
        },
        set: function set(a) {
          z = a;
        }
      },
      noData: {
        get: function get() {
          return A;
        },
        set: function set(a) {
          A = a;
        }
      },
      reduceXTicks: {
        get: function get() {
          return u;
        },
        set: function set(a) {
          u = a;
        }
      },
      rotateLabels: {
        get: function get() {
          return x;
        },
        set: function set(a) {
          x = a;
        }
      },
      staggerLabels: {
        get: function get() {
          return v;
        },
        set: function set(a) {
          v = a;
        }
      },
      wrapLabels: {
        get: function get() {
          return w;
        },
        set: function set(a) {
          w = !!a;
        }
      },
      margin: {
        get: function get() {
          return k;
        },
        set: function set(a) {
          k.top = void 0 !== a.top ? a.top : k.top, k.right = void 0 !== a.right ? a.right : k.right, k.bottom = void 0 !== a.bottom ? a.bottom : k.bottom, k.left = void 0 !== a.left ? a.left : k.left;
        }
      },
      duration: {
        get: function get() {
          return D;
        },
        set: function set(a) {
          D = a, e.duration(D), f.duration(D), g.duration(D), E.reset(D);
        }
      },
      color: {
        get: function get() {
          return n;
        },
        set: function set(b) {
          n = a.utils.getColor(b), h.color(n);
        }
      },
      rightAlignYAxis: {
        get: function get() {
          return t;
        },
        set: function set(a) {
          t = a, g.orient(t ? "right" : "left");
        }
      },
      barColor: {
        get: function get() {
          return e.barColor;
        },
        set: function set(a) {
          e.barColor(a), h.color(function (a, b) {
            return d3.rgb("#ccc").darker(1.5 * b).toString();
          });
        }
      }
    }), a.utils.inheritOptions(b, e), a.utils.initOptions(b), b;
  }, a.models.multiBarHorizontal = function () {
    "use strict";

    function b(m) {
      return E.reset(), m.each(function (b) {
        var m = k - j.left - j.right,
          C = l - j.top - j.bottom;
        n = d3.select(this), a.utils.initSVG(n), w && (b = d3.layout.stack().offset("zero").values(function (a) {
          return a.values;
        }).y(r)(b)), b.forEach(function (a, b) {
          a.values.forEach(function (c) {
            c.series = b, c.key = a.key;
          });
        }), w && b[0].values.map(function (a, c) {
          var d = 0,
            e = 0;
          b.map(function (a) {
            var b = a.values[c];
            b.size = Math.abs(b.y), b.y < 0 ? (b.y1 = e - b.size, e -= b.size) : (b.y1 = d, d += b.size);
          });
        });
        var F = d && e ? [] : b.map(function (a) {
          return a.values.map(function (a, b) {
            return {
              x: q(a, b),
              y: r(a, b),
              y0: a.y0,
              y1: a.y1
            };
          });
        });
        o.domain(d || d3.merge(F).map(function (a) {
          return a.x;
        })).rangeBands(f || [0, C], A), p.domain(e || d3.extent(d3.merge(F).map(function (a) {
          return w ? a.y > 0 ? a.y1 + a.y : a.y1 : a.y;
        }).concat(t))), x && !w ? p.range(g || [p.domain()[0] < 0 ? z : 0, m - (p.domain()[1] > 0 ? z : 0)]) : p.range(g || [0, m]), h = h || o, i = i || d3.scale.linear().domain(p.domain()).range([p(0), p(0)]);
        var G = d3.select(this).selectAll("g.nv-wrap.nv-multibarHorizontal").data([b]),
          H = G.enter().append("g").attr("class", "nvd3 nv-wrap nv-multibarHorizontal"),
          I = (H.append("defs"), H.append("g"));
        G.select("g");
        I.append("g").attr("class", "nv-groups"), G.attr("transform", "translate(" + j.left + "," + j.top + ")");
        var J = G.select(".nv-groups").selectAll(".nv-group").data(function (a) {
          return a;
        }, function (a, b) {
          return b;
        });
        J.enter().append("g").style("stroke-opacity", 1e-6).style("fill-opacity", 1e-6), J.exit().watchTransition(E, "multibarhorizontal: exit groups").style("stroke-opacity", 1e-6).style("fill-opacity", 1e-6).remove(), J.attr("class", function (a, b) {
          return "nv-group nv-series-" + b;
        }).classed("hover", function (a) {
          return a.hover;
        }).style("fill", function (a, b) {
          return u(a, b);
        }).style("stroke", function (a, b) {
          return u(a, b);
        }), J.watchTransition(E, "multibarhorizontal: groups").style("stroke-opacity", 1).style("fill-opacity", .75);
        var K = J.selectAll("g.nv-bar").data(function (a) {
          return a.values;
        });
        K.exit().remove();
        var L = K.enter().append("g").attr("transform", function (a, c, d) {
          return "translate(" + i(w ? a.y0 : 0) + "," + (w ? 0 : d * o.rangeBand() / b.length + o(q(a, c))) + ")";
        });
        L.append("rect").attr("width", 0).attr("height", o.rangeBand() / (w ? 1 : b.length)), K.on("mouseover", function (a, b) {
          d3.select(this).classed("hover", !0), D.elementMouseover({
            data: a,
            index: b,
            color: d3.select(this).style("fill")
          });
        }).on("mouseout", function (a, b) {
          d3.select(this).classed("hover", !1), D.elementMouseout({
            data: a,
            index: b,
            color: d3.select(this).style("fill")
          });
        }).on("mouseout", function (a, b) {
          D.elementMouseout({
            data: a,
            index: b,
            color: d3.select(this).style("fill")
          });
        }).on("mousemove", function (a, b) {
          D.elementMousemove({
            data: a,
            index: b,
            color: d3.select(this).style("fill")
          });
        }).on("click", function (a, b) {
          D.elementClick({
            data: a,
            index: b,
            color: d3.select(this).style("fill")
          }), d3.event.stopPropagation();
        }).on("dblclick", function (a, b) {
          D.elementDblClick({
            data: a,
            index: b,
            color: d3.select(this).style("fill")
          }), d3.event.stopPropagation();
        }), s(b[0], 0) && (L.append("polyline"), K.select("polyline").attr("fill", "none").attr("points", function (a, c) {
          var d = s(a, c),
            e = .8 * o.rangeBand() / (2 * (w ? 1 : b.length));
          d = d.length ? d : [-Math.abs(d), Math.abs(d)], d = d.map(function (a) {
            return p(a) - p(0);
          });
          var f = [[d[0], -e], [d[0], e], [d[0], 0], [d[1], 0], [d[1], -e], [d[1], e]];
          return f.map(function (a) {
            return a.join(",");
          }).join(" ");
        }).attr("transform", function (a, c) {
          var d = o.rangeBand() / (2 * (w ? 1 : b.length));
          return "translate(" + (r(a, c) < 0 ? 0 : p(r(a, c)) - p(0)) + ", " + d + ")";
        })), L.append("text"), x && !w ? (K.select("text").attr("text-anchor", function (a, b) {
          return r(a, b) < 0 ? "end" : "start";
        }).attr("y", o.rangeBand() / (2 * b.length)).attr("dy", ".32em").text(function (a, b) {
          var c = B(r(a, b)),
            d = s(a, b);
          return void 0 === d ? c : d.length ? c + "+" + B(Math.abs(d[1])) + "-" + B(Math.abs(d[0])) : c + "±" + B(Math.abs(d));
        }), K.watchTransition(E, "multibarhorizontal: bars").select("text").attr("x", function (a, b) {
          return r(a, b) < 0 ? -4 : p(r(a, b)) - p(0) + 4;
        })) : K.selectAll("text").text(""), y && !w ? (L.append("text").classed("nv-bar-label", !0), K.select("text.nv-bar-label").attr("text-anchor", function (a, b) {
          return r(a, b) < 0 ? "start" : "end";
        }).attr("y", o.rangeBand() / (2 * b.length)).attr("dy", ".32em").text(function (a, b) {
          return q(a, b);
        }), K.watchTransition(E, "multibarhorizontal: bars").select("text.nv-bar-label").attr("x", function (a, b) {
          return r(a, b) < 0 ? p(0) - p(r(a, b)) + 4 : -4;
        })) : K.selectAll("text.nv-bar-label").text(""), K.attr("class", function (a, b) {
          return r(a, b) < 0 ? "nv-bar negative" : "nv-bar positive";
        }), v && (c || (c = b.map(function () {
          return !0;
        })), K.style("fill", function (a, b, d) {
          return d3.rgb(v(a, b)).darker(c.map(function (a, b) {
            return b;
          }).filter(function (a, b) {
            return !c[b];
          })[d]).toString();
        }).style("stroke", function (a, b, d) {
          return d3.rgb(v(a, b)).darker(c.map(function (a, b) {
            return b;
          }).filter(function (a, b) {
            return !c[b];
          })[d]).toString();
        })), w ? K.watchTransition(E, "multibarhorizontal: bars").attr("transform", function (a, b) {
          return "translate(" + p(a.y1) + "," + o(q(a, b)) + ")";
        }).select("rect").attr("width", function (a, b) {
          return Math.abs(p(r(a, b) + a.y0) - p(a.y0)) || 0;
        }).attr("height", o.rangeBand()) : K.watchTransition(E, "multibarhorizontal: bars").attr("transform", function (a, c) {
          return "translate(" + p(r(a, c) < 0 ? r(a, c) : 0) + "," + (a.series * o.rangeBand() / b.length + o(q(a, c))) + ")";
        }).select("rect").attr("height", o.rangeBand() / b.length).attr("width", function (a, b) {
          return Math.max(Math.abs(p(r(a, b)) - p(0)), 1) || 0;
        }), h = o.copy(), i = p.copy();
      }), E.renderEnd("multibarHorizontal immediate"), b;
    }
    var c,
      d,
      e,
      f,
      g,
      h,
      i,
      j = {
        top: 0,
        right: 0,
        bottom: 0,
        left: 0
      },
      k = 960,
      l = 500,
      m = Math.floor(1e4 * Math.random()),
      n = null,
      o = d3.scale.ordinal(),
      p = d3.scale.linear(),
      q = function q(a) {
        return a.x;
      },
      r = function r(a) {
        return a.y;
      },
      s = function s(a) {
        return a.yErr;
      },
      t = [0],
      u = a.utils.defaultColor(),
      v = null,
      w = !1,
      x = !1,
      y = !1,
      z = 60,
      A = .1,
      B = d3.format(",.2f"),
      C = 250,
      D = d3.dispatch("chartClick", "elementClick", "elementDblClick", "elementMouseover", "elementMouseout", "elementMousemove", "renderEnd"),
      E = a.utils.renderWatch(D, C);
    return b.dispatch = D, b.options = a.utils.optionsFunc.bind(b), b._options = Object.create({}, {
      width: {
        get: function get() {
          return k;
        },
        set: function set(a) {
          k = a;
        }
      },
      height: {
        get: function get() {
          return l;
        },
        set: function set(a) {
          l = a;
        }
      },
      x: {
        get: function get() {
          return q;
        },
        set: function set(a) {
          q = a;
        }
      },
      y: {
        get: function get() {
          return r;
        },
        set: function set(a) {
          r = a;
        }
      },
      yErr: {
        get: function get() {
          return s;
        },
        set: function set(a) {
          s = a;
        }
      },
      xScale: {
        get: function get() {
          return o;
        },
        set: function set(a) {
          o = a;
        }
      },
      yScale: {
        get: function get() {
          return p;
        },
        set: function set(a) {
          p = a;
        }
      },
      xDomain: {
        get: function get() {
          return d;
        },
        set: function set(a) {
          d = a;
        }
      },
      yDomain: {
        get: function get() {
          return e;
        },
        set: function set(a) {
          e = a;
        }
      },
      xRange: {
        get: function get() {
          return f;
        },
        set: function set(a) {
          f = a;
        }
      },
      yRange: {
        get: function get() {
          return g;
        },
        set: function set(a) {
          g = a;
        }
      },
      forceY: {
        get: function get() {
          return t;
        },
        set: function set(a) {
          t = a;
        }
      },
      stacked: {
        get: function get() {
          return w;
        },
        set: function set(a) {
          w = a;
        }
      },
      showValues: {
        get: function get() {
          return x;
        },
        set: function set(a) {
          x = a;
        }
      },
      disabled: {
        get: function get() {
          return c;
        },
        set: function set(a) {
          c = a;
        }
      },
      id: {
        get: function get() {
          return m;
        },
        set: function set(a) {
          m = a;
        }
      },
      valueFormat: {
        get: function get() {
          return B;
        },
        set: function set(a) {
          B = a;
        }
      },
      valuePadding: {
        get: function get() {
          return z;
        },
        set: function set(a) {
          z = a;
        }
      },
      groupSpacing: {
        get: function get() {
          return A;
        },
        set: function set(a) {
          A = a;
        }
      },
      margin: {
        get: function get() {
          return j;
        },
        set: function set(a) {
          j.top = void 0 !== a.top ? a.top : j.top, j.right = void 0 !== a.right ? a.right : j.right, j.bottom = void 0 !== a.bottom ? a.bottom : j.bottom, j.left = void 0 !== a.left ? a.left : j.left;
        }
      },
      duration: {
        get: function get() {
          return C;
        },
        set: function set(a) {
          C = a, E.reset(C);
        }
      },
      color: {
        get: function get() {
          return u;
        },
        set: function set(b) {
          u = a.utils.getColor(b);
        }
      },
      barColor: {
        get: function get() {
          return v;
        },
        set: function set(b) {
          v = b ? a.utils.getColor(b) : null;
        }
      }
    }), a.utils.initOptions(b), b;
  }, a.models.multiBarHorizontalChart = function () {
    "use strict";

    function b(j) {
      return C.reset(), C.models(e), r && C.models(f), s && C.models(g), j.each(function (j) {
        var w = d3.select(this);
        a.utils.initSVG(w);
        var C = a.utils.availableWidth(l, w, k),
          D = a.utils.availableHeight(m, w, k);
        if (b.update = function () {
          w.transition().duration(z).call(b);
        }, b.container = this, t = e.stacked(), u.setter(B(j), b.update).getter(A(j)).update(), u.disabled = j.map(function (a) {
          return !!a.disabled;
        }), !v) {
          var E;
          v = {};
          for (E in u) u[E] instanceof Array ? v[E] = u[E].slice(0) : v[E] = u[E];
        }
        if (!(j && j.length && j.filter(function (a) {
          return a.values.length;
        }).length)) return a.utils.noData(b, w), b;
        w.selectAll(".nv-noData").remove(), c = e.xScale(), d = e.yScale();
        var F = w.selectAll("g.nv-wrap.nv-multiBarHorizontalChart").data([j]),
          G = F.enter().append("g").attr("class", "nvd3 nv-wrap nv-multiBarHorizontalChart").append("g"),
          H = F.select("g");
        if (G.append("g").attr("class", "nv-x nv-axis"), G.append("g").attr("class", "nv-y nv-axis").append("g").attr("class", "nv-zeroLine").append("line"), G.append("g").attr("class", "nv-barsWrap"), G.append("g").attr("class", "nv-legendWrap"), G.append("g").attr("class", "nv-controlsWrap"), q && (h.width(C - y()), H.select(".nv-legendWrap").datum(j).call(h), k.top != h.height() && (k.top = h.height(), D = a.utils.availableHeight(m, w, k)), H.select(".nv-legendWrap").attr("transform", "translate(" + y() + "," + -k.top + ")")), o) {
          var I = [{
            key: p.grouped || "Grouped",
            disabled: e.stacked()
          }, {
            key: p.stacked || "Stacked",
            disabled: !e.stacked()
          }];
          i.width(y()).color(["#444", "#444", "#444"]), H.select(".nv-controlsWrap").datum(I).attr("transform", "translate(0," + -k.top + ")").call(i);
        }
        F.attr("transform", "translate(" + k.left + "," + k.top + ")"), e.disabled(j.map(function (a) {
          return a.disabled;
        })).width(C).height(D).color(j.map(function (a, b) {
          return a.color || n(a, b);
        }).filter(function (a, b) {
          return !j[b].disabled;
        }));
        var J = H.select(".nv-barsWrap").datum(j.filter(function (a) {
          return !a.disabled;
        }));
        if (J.transition().call(e), r) {
          f.scale(c)._ticks(a.utils.calcTicksY(D / 24, j)).tickSize(-C, 0), H.select(".nv-x.nv-axis").call(f);
          var K = H.select(".nv-x.nv-axis").selectAll("g");
          K.selectAll("line, text");
        }
        s && (g.scale(d)._ticks(a.utils.calcTicksX(C / 100, j)).tickSize(-D, 0), H.select(".nv-y.nv-axis").attr("transform", "translate(0," + D + ")"), H.select(".nv-y.nv-axis").call(g)), H.select(".nv-zeroLine line").attr("x1", d(0)).attr("x2", d(0)).attr("y1", 0).attr("y2", -D), h.dispatch.on("stateChange", function (a) {
          for (var c in a) u[c] = a[c];
          x.stateChange(u), b.update();
        }), i.dispatch.on("legendClick", function (a, c) {
          if (a.disabled) {
            switch (I = I.map(function (a) {
              return a.disabled = !0, a;
            }), a.disabled = !1, a.key) {
              case "Grouped":
                e.stacked(!1);
                break;
              case "Stacked":
                e.stacked(!0);
            }
            u.stacked = e.stacked(), x.stateChange(u), t = e.stacked(), b.update();
          }
        }), x.on("changeState", function (a) {
          "undefined" != typeof a.disabled && (j.forEach(function (b, c) {
            b.disabled = a.disabled[c];
          }), u.disabled = a.disabled), "undefined" != typeof a.stacked && (e.stacked(a.stacked), u.stacked = a.stacked, t = a.stacked), b.update();
        });
      }), C.renderEnd("multibar horizontal chart immediate"), b;
    }
    var c,
      d,
      e = a.models.multiBarHorizontal(),
      f = a.models.axis(),
      g = a.models.axis(),
      h = a.models.legend().height(30),
      i = a.models.legend().height(30),
      j = a.models.tooltip(),
      k = {
        top: 30,
        right: 20,
        bottom: 50,
        left: 60
      },
      l = null,
      m = null,
      n = a.utils.defaultColor(),
      o = !0,
      p = {},
      q = !0,
      r = !0,
      s = !0,
      t = !1,
      u = a.utils.state(),
      v = null,
      w = null,
      x = d3.dispatch("stateChange", "changeState", "renderEnd"),
      y = function y() {
        return o ? 180 : 0;
      },
      z = 250;
    u.stacked = !1, e.stacked(t), f.orient("left").tickPadding(5).showMaxMin(!1).tickFormat(function (a) {
      return a;
    }), g.orient("bottom").tickFormat(d3.format(",.1f")), j.duration(0).valueFormatter(function (a, b) {
      return g.tickFormat()(a, b);
    }).headerFormatter(function (a, b) {
      return f.tickFormat()(a, b);
    }), i.updateState(!1);
    var A = function A(a) {
        return function () {
          return {
            active: a.map(function (a) {
              return !a.disabled;
            }),
            stacked: t
          };
        };
      },
      B = function B(a) {
        return function (b) {
          void 0 !== b.stacked && (t = b.stacked), void 0 !== b.active && a.forEach(function (a, c) {
            a.disabled = !b.active[c];
          });
        };
      },
      C = a.utils.renderWatch(x, z);
    return e.dispatch.on("elementMouseover.tooltip", function (a) {
      a.value = b.x()(a.data), a.series = {
        key: a.data.key,
        value: b.y()(a.data),
        color: a.color
      }, j.data(a).hidden(!1);
    }), e.dispatch.on("elementMouseout.tooltip", function (a) {
      j.hidden(!0);
    }), e.dispatch.on("elementMousemove.tooltip", function (a) {
      j();
    }), b.dispatch = x, b.multibar = e, b.legend = h, b.controls = i, b.xAxis = f, b.yAxis = g, b.state = u, b.tooltip = j, b.options = a.utils.optionsFunc.bind(b), b._options = Object.create({}, {
      width: {
        get: function get() {
          return l;
        },
        set: function set(a) {
          l = a;
        }
      },
      height: {
        get: function get() {
          return m;
        },
        set: function set(a) {
          m = a;
        }
      },
      showLegend: {
        get: function get() {
          return q;
        },
        set: function set(a) {
          q = a;
        }
      },
      showControls: {
        get: function get() {
          return o;
        },
        set: function set(a) {
          o = a;
        }
      },
      controlLabels: {
        get: function get() {
          return p;
        },
        set: function set(a) {
          p = a;
        }
      },
      showXAxis: {
        get: function get() {
          return r;
        },
        set: function set(a) {
          r = a;
        }
      },
      showYAxis: {
        get: function get() {
          return s;
        },
        set: function set(a) {
          s = a;
        }
      },
      defaultState: {
        get: function get() {
          return v;
        },
        set: function set(a) {
          v = a;
        }
      },
      noData: {
        get: function get() {
          return w;
        },
        set: function set(a) {
          w = a;
        }
      },
      margin: {
        get: function get() {
          return k;
        },
        set: function set(a) {
          k.top = void 0 !== a.top ? a.top : k.top, k.right = void 0 !== a.right ? a.right : k.right, k.bottom = void 0 !== a.bottom ? a.bottom : k.bottom, k.left = void 0 !== a.left ? a.left : k.left;
        }
      },
      duration: {
        get: function get() {
          return z;
        },
        set: function set(a) {
          z = a, C.reset(z), e.duration(z), f.duration(z), g.duration(z);
        }
      },
      color: {
        get: function get() {
          return n;
        },
        set: function set(b) {
          n = a.utils.getColor(b), h.color(n);
        }
      },
      barColor: {
        get: function get() {
          return e.barColor;
        },
        set: function set(a) {
          e.barColor(a), h.color(function (a, b) {
            return d3.rgb("#ccc").darker(1.5 * b).toString();
          });
        }
      }
    }), a.utils.inheritOptions(b, e), a.utils.initOptions(b), b;
  }, a.models.multiChart = function () {
    "use strict";

    function b(j) {
      return j.each(function (j) {
        function n(a) {
          var b = 2 === j[a.seriesIndex].yAxis ? B : A;
          a.value = a.point.x, a.series = {
            value: a.point.y,
            color: a.point.color,
            key: a.series.key
          }, D.duration(0).valueFormatter(function (a, c) {
            return b.tickFormat()(a, c);
          }).data(a).hidden(!1);
        }
        function E(a) {
          var b = 2 === j[a.seriesIndex].yAxis ? B : A;
          a.value = a.point.x, a.series = {
            value: a.point.y,
            color: a.point.color,
            key: a.series.key
          }, D.duration(100).valueFormatter(function (a, c) {
            return b.tickFormat()(a, c);
          }).data(a).hidden(!1);
        }
        function F(a) {
          var b = 2 === j[a.seriesIndex].yAxis ? B : A;
          a.point.x = x.x()(a.point), a.point.y = x.y()(a.point), D.duration(0).valueFormatter(function (a, c) {
            return b.tickFormat()(a, c);
          }).data(a).hidden(!1);
        }
        function G(a) {
          var b = 2 === j[a.data.series].yAxis ? B : A;
          a.value = v.x()(a.data), a.series = {
            value: v.y()(a.data),
            color: a.color,
            key: a.data.key
          }, D.duration(0).valueFormatter(function (a, c) {
            return b.tickFormat()(a, c);
          }).data(a).hidden(!1);
        }
        var H = d3.select(this);
        a.utils.initSVG(H), b.update = function () {
          H.transition().call(b);
        }, b.container = this;
        var I = a.utils.availableWidth(g, H, e),
          J = a.utils.availableHeight(h, H, e),
          K = j.filter(function (a) {
            return "line" == a.type && 1 == a.yAxis;
          }),
          L = j.filter(function (a) {
            return "line" == a.type && 2 == a.yAxis;
          }),
          M = j.filter(function (a) {
            return "scatter" == a.type && 1 == a.yAxis;
          }),
          N = j.filter(function (a) {
            return "scatter" == a.type && 2 == a.yAxis;
          }),
          O = j.filter(function (a) {
            return "bar" == a.type && 1 == a.yAxis;
          }),
          P = j.filter(function (a) {
            return "bar" == a.type && 2 == a.yAxis;
          }),
          Q = j.filter(function (a) {
            return "area" == a.type && 1 == a.yAxis;
          }),
          R = j.filter(function (a) {
            return "area" == a.type && 2 == a.yAxis;
          });
        if (!(j && j.length && j.filter(function (a) {
          return a.values.length;
        }).length)) return a.utils.noData(b, H), b;
        H.selectAll(".nv-noData").remove();
        var S = j.filter(function (a) {
            return !a.disabled && 1 == a.yAxis;
          }).map(function (a) {
            return a.values.map(function (a, b) {
              return {
                x: k(a),
                y: l(a)
              };
            });
          }),
          T = j.filter(function (a) {
            return !a.disabled && 2 == a.yAxis;
          }).map(function (a) {
            return a.values.map(function (a, b) {
              return {
                x: k(a),
                y: l(a)
              };
            });
          });
        o.domain(d3.extent(d3.merge(S.concat(T)), function (a) {
          return k(a);
        })).range([0, I]);
        var U = H.selectAll("g.wrap.multiChart").data([j]),
          V = U.enter().append("g").attr("class", "wrap nvd3 multiChart").append("g");
        V.append("g").attr("class", "nv-x nv-axis"), V.append("g").attr("class", "nv-y1 nv-axis"), V.append("g").attr("class", "nv-y2 nv-axis"), V.append("g").attr("class", "lines1Wrap"), V.append("g").attr("class", "lines2Wrap"), V.append("g").attr("class", "scatters1Wrap"), V.append("g").attr("class", "scatters2Wrap"), V.append("g").attr("class", "bars1Wrap"), V.append("g").attr("class", "bars2Wrap"), V.append("g").attr("class", "stack1Wrap"), V.append("g").attr("class", "stack2Wrap"), V.append("g").attr("class", "legendWrap");
        var W = U.select("g"),
          X = j.map(function (a, b) {
            return j[b].color || f(a, b);
          });
        if (i) {
          var Y = C.align() ? I / 2 : I,
            Z = C.align() ? Y : 0;
          C.width(Y), C.color(X), W.select(".legendWrap").datum(j.map(function (a) {
            return a.originalKey = void 0 === a.originalKey ? a.key : a.originalKey, a.key = a.originalKey + (1 == a.yAxis ? "" : " (right axis)"), a;
          })).call(C), e.top != C.height() && (e.top = C.height(), J = a.utils.availableHeight(h, H, e)), W.select(".legendWrap").attr("transform", "translate(" + Z + "," + -e.top + ")");
        }
        r.width(I).height(J).interpolate(m).color(X.filter(function (a, b) {
          return !j[b].disabled && 1 == j[b].yAxis && "line" == j[b].type;
        })), s.width(I).height(J).interpolate(m).color(X.filter(function (a, b) {
          return !j[b].disabled && 2 == j[b].yAxis && "line" == j[b].type;
        })), t.width(I).height(J).color(X.filter(function (a, b) {
          return !j[b].disabled && 1 == j[b].yAxis && "scatter" == j[b].type;
        })), u.width(I).height(J).color(X.filter(function (a, b) {
          return !j[b].disabled && 2 == j[b].yAxis && "scatter" == j[b].type;
        })), v.width(I).height(J).color(X.filter(function (a, b) {
          return !j[b].disabled && 1 == j[b].yAxis && "bar" == j[b].type;
        })), w.width(I).height(J).color(X.filter(function (a, b) {
          return !j[b].disabled && 2 == j[b].yAxis && "bar" == j[b].type;
        })), x.width(I).height(J).color(X.filter(function (a, b) {
          return !j[b].disabled && 1 == j[b].yAxis && "area" == j[b].type;
        })), y.width(I).height(J).color(X.filter(function (a, b) {
          return !j[b].disabled && 2 == j[b].yAxis && "area" == j[b].type;
        })), W.attr("transform", "translate(" + e.left + "," + e.top + ")");
        var $ = W.select(".lines1Wrap").datum(K.filter(function (a) {
            return !a.disabled;
          })),
          _ = W.select(".scatters1Wrap").datum(M.filter(function (a) {
            return !a.disabled;
          })),
          aa = W.select(".bars1Wrap").datum(O.filter(function (a) {
            return !a.disabled;
          })),
          ba = W.select(".stack1Wrap").datum(Q.filter(function (a) {
            return !a.disabled;
          })),
          ca = W.select(".lines2Wrap").datum(L.filter(function (a) {
            return !a.disabled;
          })),
          da = W.select(".scatters2Wrap").datum(N.filter(function (a) {
            return !a.disabled;
          })),
          ea = W.select(".bars2Wrap").datum(P.filter(function (a) {
            return !a.disabled;
          })),
          fa = W.select(".stack2Wrap").datum(R.filter(function (a) {
            return !a.disabled;
          })),
          ga = Q.length ? Q.map(function (a) {
            return a.values;
          }).reduce(function (a, b) {
            return a.map(function (a, c) {
              return {
                x: a.x,
                y: a.y + b[c].y
              };
            });
          }).concat([{
            x: 0,
            y: 0
          }]) : [],
          ha = R.length ? R.map(function (a) {
            return a.values;
          }).reduce(function (a, b) {
            return a.map(function (a, c) {
              return {
                x: a.x,
                y: a.y + b[c].y
              };
            });
          }).concat([{
            x: 0,
            y: 0
          }]) : [];
        p.domain(c || d3.extent(d3.merge(S).concat(ga), function (a) {
          return a.y;
        })).range([0, J]), q.domain(d || d3.extent(d3.merge(T).concat(ha), function (a) {
          return a.y;
        })).range([0, J]), r.yDomain(p.domain()), t.yDomain(p.domain()), v.yDomain(p.domain()), x.yDomain(p.domain()), s.yDomain(q.domain()), u.yDomain(q.domain()), w.yDomain(q.domain()), y.yDomain(q.domain()), Q.length && d3.transition(ba).call(x), R.length && d3.transition(fa).call(y), O.length && d3.transition(aa).call(v), P.length && d3.transition(ea).call(w), K.length && d3.transition($).call(r), L.length && d3.transition(ca).call(s), M.length && d3.transition(_).call(t), N.length && d3.transition(da).call(u), z._ticks(a.utils.calcTicksX(I / 100, j)).tickSize(-J, 0), W.select(".nv-x.nv-axis").attr("transform", "translate(0," + J + ")"), d3.transition(W.select(".nv-x.nv-axis")).call(z), A._ticks(a.utils.calcTicksY(J / 36, j)).tickSize(-I, 0), d3.transition(W.select(".nv-y1.nv-axis")).call(A), B._ticks(a.utils.calcTicksY(J / 36, j)).tickSize(-I, 0), d3.transition(W.select(".nv-y2.nv-axis")).call(B), W.select(".nv-y1.nv-axis").classed("nv-disabled", S.length ? !1 : !0).attr("transform", "translate(" + o.range()[0] + ",0)"), W.select(".nv-y2.nv-axis").classed("nv-disabled", T.length ? !1 : !0).attr("transform", "translate(" + o.range()[1] + ",0)"), C.dispatch.on("stateChange", function (a) {
          b.update();
        }), r.dispatch.on("elementMouseover.tooltip", n), s.dispatch.on("elementMouseover.tooltip", n), r.dispatch.on("elementMouseout.tooltip", function (a) {
          D.hidden(!0);
        }), s.dispatch.on("elementMouseout.tooltip", function (a) {
          D.hidden(!0);
        }), t.dispatch.on("elementMouseover.tooltip", E), u.dispatch.on("elementMouseover.tooltip", E), t.dispatch.on("elementMouseout.tooltip", function (a) {
          D.hidden(!0);
        }), u.dispatch.on("elementMouseout.tooltip", function (a) {
          D.hidden(!0);
        }), x.dispatch.on("elementMouseover.tooltip", F), y.dispatch.on("elementMouseover.tooltip", F), x.dispatch.on("elementMouseout.tooltip", function (a) {
          D.hidden(!0);
        }), y.dispatch.on("elementMouseout.tooltip", function (a) {
          D.hidden(!0);
        }), v.dispatch.on("elementMouseover.tooltip", G), w.dispatch.on("elementMouseover.tooltip", G), v.dispatch.on("elementMouseout.tooltip", function (a) {
          D.hidden(!0);
        }), w.dispatch.on("elementMouseout.tooltip", function (a) {
          D.hidden(!0);
        }), v.dispatch.on("elementMousemove.tooltip", function (a) {
          D();
        }), w.dispatch.on("elementMousemove.tooltip", function (a) {
          D();
        });
      }), b;
    }
    var c,
      d,
      e = {
        top: 30,
        right: 20,
        bottom: 50,
        left: 60
      },
      f = a.utils.defaultColor(),
      g = null,
      h = null,
      i = !0,
      j = null,
      k = function k(a) {
        return a.x;
      },
      l = function l(a) {
        return a.y;
      },
      m = "monotone",
      n = !0,
      o = d3.scale.linear(),
      p = d3.scale.linear(),
      q = d3.scale.linear(),
      r = a.models.line().yScale(p),
      s = a.models.line().yScale(q),
      t = a.models.scatter().yScale(p),
      u = a.models.scatter().yScale(q),
      v = a.models.multiBar().stacked(!1).yScale(p),
      w = a.models.multiBar().stacked(!1).yScale(q),
      x = a.models.stackedArea().yScale(p),
      y = a.models.stackedArea().yScale(q),
      z = a.models.axis().scale(o).orient("bottom").tickPadding(5),
      A = a.models.axis().scale(p).orient("left"),
      B = a.models.axis().scale(q).orient("right"),
      C = a.models.legend().height(30),
      D = a.models.tooltip(),
      E = d3.dispatch();
    return b.dispatch = E, b.legend = C, b.lines1 = r, b.lines2 = s, b.scatters1 = t, b.scatters2 = u, b.bars1 = v, b.bars2 = w, b.stack1 = x, b.stack2 = y, b.xAxis = z, b.yAxis1 = A, b.yAxis2 = B, b.tooltip = D, b.options = a.utils.optionsFunc.bind(b), b._options = Object.create({}, {
      width: {
        get: function get() {
          return g;
        },
        set: function set(a) {
          g = a;
        }
      },
      height: {
        get: function get() {
          return h;
        },
        set: function set(a) {
          h = a;
        }
      },
      showLegend: {
        get: function get() {
          return i;
        },
        set: function set(a) {
          i = a;
        }
      },
      yDomain1: {
        get: function get() {
          return c;
        },
        set: function set(a) {
          c = a;
        }
      },
      yDomain2: {
        get: function get() {
          return d;
        },
        set: function set(a) {
          d = a;
        }
      },
      noData: {
        get: function get() {
          return j;
        },
        set: function set(a) {
          j = a;
        }
      },
      interpolate: {
        get: function get() {
          return m;
        },
        set: function set(a) {
          m = a;
        }
      },
      margin: {
        get: function get() {
          return e;
        },
        set: function set(a) {
          e.top = void 0 !== a.top ? a.top : e.top, e.right = void 0 !== a.right ? a.right : e.right, e.bottom = void 0 !== a.bottom ? a.bottom : e.bottom, e.left = void 0 !== a.left ? a.left : e.left;
        }
      },
      color: {
        get: function get() {
          return f;
        },
        set: function set(b) {
          f = a.utils.getColor(b);
        }
      },
      x: {
        get: function get() {
          return k;
        },
        set: function set(a) {
          k = a, r.x(a), s.x(a), t.x(a), u.x(a), v.x(a), w.x(a), x.x(a), y.x(a);
        }
      },
      y: {
        get: function get() {
          return l;
        },
        set: function set(a) {
          l = a, r.y(a), s.y(a), t.y(a), u.y(a), x.y(a), y.y(a), v.y(a), w.y(a);
        }
      },
      useVoronoi: {
        get: function get() {
          return n;
        },
        set: function set(a) {
          n = a, r.useVoronoi(a), s.useVoronoi(a), x.useVoronoi(a), y.useVoronoi(a);
        }
      }
    }), a.utils.initOptions(b), b;
  }, a.models.ohlcBar = function () {
    "use strict";

    function b(y) {
      return y.each(function (b) {
        k = d3.select(this);
        var y = a.utils.availableWidth(h, k, g),
          A = a.utils.availableHeight(i, k, g);
        a.utils.initSVG(k);
        var B = y / b[0].values.length * .9;
        l.domain(c || d3.extent(b[0].values.map(n).concat(t))), v ? l.range(e || [.5 * y / b[0].values.length, y * (b[0].values.length - .5) / b[0].values.length]) : l.range(e || [5 + B / 2, y - B / 2 - 5]), m.domain(d || [d3.min(b[0].values.map(s).concat(u)), d3.max(b[0].values.map(r).concat(u))]).range(f || [A, 0]), l.domain()[0] === l.domain()[1] && (l.domain()[0] ? l.domain([l.domain()[0] - .01 * l.domain()[0], l.domain()[1] + .01 * l.domain()[1]]) : l.domain([-1, 1])), m.domain()[0] === m.domain()[1] && (m.domain()[0] ? m.domain([m.domain()[0] + .01 * m.domain()[0], m.domain()[1] - .01 * m.domain()[1]]) : m.domain([-1, 1]));
        var C = d3.select(this).selectAll("g.nv-wrap.nv-ohlcBar").data([b[0].values]),
          D = C.enter().append("g").attr("class", "nvd3 nv-wrap nv-ohlcBar"),
          E = D.append("defs"),
          F = D.append("g"),
          G = C.select("g");
        F.append("g").attr("class", "nv-ticks"), C.attr("transform", "translate(" + g.left + "," + g.top + ")"), k.on("click", function (a, b) {
          z.chartClick({
            data: a,
            index: b,
            pos: d3.event,
            id: j
          });
        }), E.append("clipPath").attr("id", "nv-chart-clip-path-" + j).append("rect"), C.select("#nv-chart-clip-path-" + j + " rect").attr("width", y).attr("height", A), G.attr("clip-path", w ? "url(#nv-chart-clip-path-" + j + ")" : "");
        var H = C.select(".nv-ticks").selectAll(".nv-tick").data(function (a) {
          return a;
        });
        H.exit().remove(), H.enter().append("path").attr("class", function (a, b, c) {
          return (p(a, b) > q(a, b) ? "nv-tick negative" : "nv-tick positive") + " nv-tick-" + c + "-" + b;
        }).attr("d", function (a, b) {
          return "m0,0l0," + (m(p(a, b)) - m(r(a, b))) + "l" + -B / 2 + ",0l" + B / 2 + ",0l0," + (m(s(a, b)) - m(p(a, b))) + "l0," + (m(q(a, b)) - m(s(a, b))) + "l" + B / 2 + ",0l" + -B / 2 + ",0z";
        }).attr("transform", function (a, b) {
          return "translate(" + l(n(a, b)) + "," + m(r(a, b)) + ")";
        }).attr("fill", function (a, b) {
          return x[0];
        }).attr("stroke", function (a, b) {
          return x[0];
        }).attr("x", 0).attr("y", function (a, b) {
          return m(Math.max(0, o(a, b)));
        }).attr("height", function (a, b) {
          return Math.abs(m(o(a, b)) - m(0));
        }), H.attr("class", function (a, b, c) {
          return (p(a, b) > q(a, b) ? "nv-tick negative" : "nv-tick positive") + " nv-tick-" + c + "-" + b;
        }), d3.transition(H).attr("transform", function (a, b) {
          return "translate(" + l(n(a, b)) + "," + m(r(a, b)) + ")";
        }).attr("d", function (a, c) {
          var d = y / b[0].values.length * .9;
          return "m0,0l0," + (m(p(a, c)) - m(r(a, c))) + "l" + -d / 2 + ",0l" + d / 2 + ",0l0," + (m(s(a, c)) - m(p(a, c))) + "l0," + (m(q(a, c)) - m(s(a, c))) + "l" + d / 2 + ",0l" + -d / 2 + ",0z";
        });
      }), b;
    }
    var c,
      d,
      e,
      f,
      g = {
        top: 0,
        right: 0,
        bottom: 0,
        left: 0
      },
      h = null,
      i = null,
      j = Math.floor(1e4 * Math.random()),
      k = null,
      l = d3.scale.linear(),
      m = d3.scale.linear(),
      n = function n(a) {
        return a.x;
      },
      o = function o(a) {
        return a.y;
      },
      p = function p(a) {
        return a.open;
      },
      q = function q(a) {
        return a.close;
      },
      r = function r(a) {
        return a.high;
      },
      s = function s(a) {
        return a.low;
      },
      t = [],
      u = [],
      v = !1,
      w = !0,
      x = a.utils.defaultColor(),
      y = !1,
      z = d3.dispatch("stateChange", "changeState", "renderEnd", "chartClick", "elementClick", "elementDblClick", "elementMouseover", "elementMouseout", "elementMousemove");
    return b.highlightPoint = function (a, c) {
      b.clearHighlights(), k.select(".nv-ohlcBar .nv-tick-0-" + a).classed("hover", c);
    }, b.clearHighlights = function () {
      k.select(".nv-ohlcBar .nv-tick.hover").classed("hover", !1);
    }, b.dispatch = z, b.options = a.utils.optionsFunc.bind(b), b._options = Object.create({}, {
      width: {
        get: function get() {
          return h;
        },
        set: function set(a) {
          h = a;
        }
      },
      height: {
        get: function get() {
          return i;
        },
        set: function set(a) {
          i = a;
        }
      },
      xScale: {
        get: function get() {
          return l;
        },
        set: function set(a) {
          l = a;
        }
      },
      yScale: {
        get: function get() {
          return m;
        },
        set: function set(a) {
          m = a;
        }
      },
      xDomain: {
        get: function get() {
          return c;
        },
        set: function set(a) {
          c = a;
        }
      },
      yDomain: {
        get: function get() {
          return d;
        },
        set: function set(a) {
          d = a;
        }
      },
      xRange: {
        get: function get() {
          return e;
        },
        set: function set(a) {
          e = a;
        }
      },
      yRange: {
        get: function get() {
          return f;
        },
        set: function set(a) {
          f = a;
        }
      },
      forceX: {
        get: function get() {
          return t;
        },
        set: function set(a) {
          t = a;
        }
      },
      forceY: {
        get: function get() {
          return u;
        },
        set: function set(a) {
          u = a;
        }
      },
      padData: {
        get: function get() {
          return v;
        },
        set: function set(a) {
          v = a;
        }
      },
      clipEdge: {
        get: function get() {
          return w;
        },
        set: function set(a) {
          w = a;
        }
      },
      id: {
        get: function get() {
          return j;
        },
        set: function set(a) {
          j = a;
        }
      },
      interactive: {
        get: function get() {
          return y;
        },
        set: function set(a) {
          y = a;
        }
      },
      x: {
        get: function get() {
          return n;
        },
        set: function set(a) {
          n = a;
        }
      },
      y: {
        get: function get() {
          return o;
        },
        set: function set(a) {
          o = a;
        }
      },
      open: {
        get: function get() {
          return p();
        },
        set: function set(a) {
          p = a;
        }
      },
      close: {
        get: function get() {
          return q();
        },
        set: function set(a) {
          q = a;
        }
      },
      high: {
        get: function get() {
          return r;
        },
        set: function set(a) {
          r = a;
        }
      },
      low: {
        get: function get() {
          return s;
        },
        set: function set(a) {
          s = a;
        }
      },
      margin: {
        get: function get() {
          return g;
        },
        set: function set(a) {
          g.top = void 0 != a.top ? a.top : g.top, g.right = void 0 != a.right ? a.right : g.right, g.bottom = void 0 != a.bottom ? a.bottom : g.bottom, g.left = void 0 != a.left ? a.left : g.left;
        }
      },
      color: {
        get: function get() {
          return x;
        },
        set: function set(b) {
          x = a.utils.getColor(b);
        }
      }
    }), a.utils.initOptions(b), b;
  }, a.models.parallelCoordinates = function () {
    "use strict";

    function b(p) {
      return p.each(function (b) {
        function p(a) {
          return F(h.map(function (b) {
            if (isNaN(a[b]) || isNaN(parseFloat(a[b]))) {
              var c = g[b].domain(),
                d = g[b].range(),
                e = c[0] - (c[1] - c[0]) / 9;
              if (J.indexOf(b) < 0) {
                var h = d3.scale.linear().domain([e, c[1]]).range([x - 12, d[1]]);
                g[b].brush.y(h), J.push(b);
              }
              return [f(b), g[b](e)];
            }
            return J.length > 0 ? (D.style("display", "inline"), E.style("display", "inline")) : (D.style("display", "none"), E.style("display", "none")), [f(b), g[b](a[b])];
          }));
        }
        function q() {
          var a = h.filter(function (a) {
              return !g[a].brush.empty();
            }),
            b = a.map(function (a) {
              return g[a].brush.extent();
            });
          k = [], a.forEach(function (a, c) {
            k[c] = {
              dimension: a,
              extent: b[c]
            };
          }), l = [], M.style("display", function (c) {
            var d = a.every(function (a, d) {
              return isNaN(c[a]) && b[d][0] == g[a].brush.y().domain()[0] ? !0 : b[d][0] <= c[a] && c[a] <= b[d][1];
            });
            return d && l.push(c), d ? null : "none";
          }), o.brush({
            filters: k,
            active: l
          });
        }
        function r(a, b) {
          m[a] = this.parentNode.__origin__ = f(a), L.attr("visibility", "hidden");
        }
        function s(a, b) {
          m[a] = Math.min(w, Math.max(0, this.parentNode.__origin__ += d3.event.x)), M.attr("d", p), h.sort(function (a, b) {
            return u(a) - u(b);
          }), f.domain(h), N.attr("transform", function (a) {
            return "translate(" + u(a) + ")";
          });
        }
        function t(a, b) {
          delete this.parentNode.__origin__, delete m[a], d3.select(this.parentNode).attr("transform", "translate(" + f(a) + ")"), M.attr("d", p), L.attr("d", p).attr("visibility", null);
        }
        function u(a) {
          var b = m[a];
          return null == b ? f(a) : b;
        }
        var v = d3.select(this),
          w = a.utils.availableWidth(d, v, c),
          x = a.utils.availableHeight(e, v, c);
        a.utils.initSVG(v), l = b, f.rangePoints([0, w], 1).domain(h);
        var y = {};
        h.forEach(function (a) {
          var c = d3.extent(b, function (b) {
            return +b[a];
          });
          return y[a] = !1, void 0 === c[0] && (y[a] = !0, c[0] = 0, c[1] = 0), c[0] === c[1] && (c[0] = c[0] - 1, c[1] = c[1] + 1), g[a] = d3.scale.linear().domain(c).range([.9 * (x - 12), 0]), g[a].brush = d3.svg.brush().y(g[a]).on("brush", q), "name" != a;
        });
        var z = v.selectAll("g.nv-wrap.nv-parallelCoordinates").data([b]),
          A = z.enter().append("g").attr("class", "nvd3 nv-wrap nv-parallelCoordinates"),
          B = A.append("g"),
          C = z.select("g");
        B.append("g").attr("class", "nv-parallelCoordinates background"), B.append("g").attr("class", "nv-parallelCoordinates foreground"), B.append("g").attr("class", "nv-parallelCoordinates missingValuesline"), z.attr("transform", "translate(" + c.left + "," + c.top + ")");
        var D,
          E,
          F = d3.svg.line().interpolate("cardinal").tension(n),
          G = d3.svg.axis().orient("left"),
          H = d3.behavior.drag().on("dragstart", r).on("drag", s).on("dragend", t),
          I = f.range()[1] - f.range()[0],
          J = [],
          K = [0 + I / 2, x - 12, w - I / 2, x - 12];
        D = z.select(".missingValuesline").selectAll("line").data([K]), D.enter().append("line"), D.exit().remove(), D.attr("x1", function (a) {
          return a[0];
        }).attr("y1", function (a) {
          return a[1];
        }).attr("x2", function (a) {
          return a[2];
        }).attr("y2", function (a) {
          return a[3];
        }), E = z.select(".missingValuesline").selectAll("text").data(["undefined values"]), E.append("text").data(["undefined values"]), E.enter().append("text"), E.exit().remove(), E.attr("y", x).attr("x", w - 92 - I / 2).text(function (a) {
          return a;
        });
        var L = z.select(".background").selectAll("path").data(b);
        L.enter().append("path"), L.exit().remove(), L.attr("d", p);
        var M = z.select(".foreground").selectAll("path").data(b);
        M.enter().append("path"), M.exit().remove(), M.attr("d", p).attr("stroke", j), M.on("mouseover", function (a, b) {
          d3.select(this).classed("hover", !0), o.elementMouseover({
            label: a.name,
            data: a.data,
            index: b,
            pos: [d3.mouse(this.parentNode)[0], d3.mouse(this.parentNode)[1]]
          });
        }), M.on("mouseout", function (a, b) {
          d3.select(this).classed("hover", !1), o.elementMouseout({
            label: a.name,
            data: a.data,
            index: b
          });
        });
        var N = C.selectAll(".dimension").data(h),
          O = N.enter().append("g").attr("class", "nv-parallelCoordinates dimension");
        O.append("g").attr("class", "nv-parallelCoordinates nv-axis"), O.append("g").attr("class", "nv-parallelCoordinates-brush"), O.append("text").attr("class", "nv-parallelCoordinates nv-label"), N.attr("transform", function (a) {
          return "translate(" + f(a) + ",0)";
        }), N.exit().remove(), N.select(".nv-label").style("cursor", "move").attr("dy", "-1em").attr("text-anchor", "middle").text(String).on("mouseover", function (a, b) {
          o.elementMouseover({
            dim: a,
            pos: [d3.mouse(this.parentNode.parentNode)[0], d3.mouse(this.parentNode.parentNode)[1]]
          });
        }).on("mouseout", function (a, b) {
          o.elementMouseout({
            dim: a
          });
        }).call(H), N.select(".nv-axis").each(function (a, b) {
          d3.select(this).call(G.scale(g[a]).tickFormat(d3.format(i[b])));
        }), N.select(".nv-parallelCoordinates-brush").each(function (a) {
          d3.select(this).call(g[a].brush);
        }).selectAll("rect").attr("x", -8).attr("width", 16);
      }), b;
    }
    var c = {
        top: 30,
        right: 0,
        bottom: 10,
        left: 0
      },
      d = null,
      e = null,
      f = d3.scale.ordinal(),
      g = {},
      h = [],
      i = [],
      j = a.utils.defaultColor(),
      k = [],
      l = [],
      m = [],
      n = 1,
      o = d3.dispatch("brush", "elementMouseover", "elementMouseout");
    return b.dispatch = o, b.options = a.utils.optionsFunc.bind(b), b._options = Object.create({}, {
      width: {
        get: function get() {
          return d;
        },
        set: function set(a) {
          d = a;
        }
      },
      height: {
        get: function get() {
          return e;
        },
        set: function set(a) {
          e = a;
        }
      },
      dimensionNames: {
        get: function get() {
          return h;
        },
        set: function set(a) {
          h = a;
        }
      },
      dimensionFormats: {
        get: function get() {
          return i;
        },
        set: function set(a) {
          i = a;
        }
      },
      lineTension: {
        get: function get() {
          return n;
        },
        set: function set(a) {
          n = a;
        }
      },
      dimensions: {
        get: function get() {
          return h;
        },
        set: function set(b) {
          a.deprecated("dimensions", "use dimensionNames instead"), h = b;
        }
      },
      margin: {
        get: function get() {
          return c;
        },
        set: function set(a) {
          c.top = void 0 !== a.top ? a.top : c.top, c.right = void 0 !== a.right ? a.right : c.right, c.bottom = void 0 !== a.bottom ? a.bottom : c.bottom, c.left = void 0 !== a.left ? a.left : c.left;
        }
      },
      color: {
        get: function get() {
          return j;
        },
        set: function set(b) {
          j = a.utils.getColor(b);
        }
      }
    }), a.utils.initOptions(b), b;
  }, a.models.pie = function () {
    "use strict";

    function b(E) {
      return D.reset(), E.each(function (b) {
        function E(a, b) {
          a.endAngle = isNaN(a.endAngle) ? 0 : a.endAngle, a.startAngle = isNaN(a.startAngle) ? 0 : a.startAngle, p || (a.innerRadius = 0);
          var c = d3.interpolate(this._current, a);
          return this._current = c(0), function (a) {
            return B[b](c(a));
          };
        }
        var F = d - c.left - c.right,
          G = e - c.top - c.bottom,
          H = Math.min(F, G) / 2,
          I = [],
          J = [];
        if (i = d3.select(this), 0 === z.length) for (var K = H - H / 5, L = y * H, M = 0; M < b[0].length; M++) I.push(K), J.push(L);else I = z.map(function (a) {
          return (a.outer - a.outer / 5) * H;
        }), J = z.map(function (a) {
          return (a.inner - a.inner / 5) * H;
        }), y = d3.min(z.map(function (a) {
          return a.inner - a.inner / 5;
        }));
        a.utils.initSVG(i);
        var N = i.selectAll(".nv-wrap.nv-pie").data(b),
          O = N.enter().append("g").attr("class", "nvd3 nv-wrap nv-pie nv-chart-" + h),
          P = O.append("g"),
          Q = N.select("g"),
          R = P.append("g").attr("class", "nv-pie");
        P.append("g").attr("class", "nv-pieLabels"), N.attr("transform", "translate(" + c.left + "," + c.top + ")"), Q.select(".nv-pie").attr("transform", "translate(" + F / 2 + "," + G / 2 + ")"), Q.select(".nv-pieLabels").attr("transform", "translate(" + F / 2 + "," + G / 2 + ")"), i.on("click", function (a, b) {
          A.chartClick({
            data: a,
            index: b,
            pos: d3.event,
            id: h
          });
        }), B = [], C = [];
        for (var M = 0; M < b[0].length; M++) {
          var S = d3.svg.arc().outerRadius(I[M]),
            T = d3.svg.arc().outerRadius(I[M] + 5);
          u !== !1 && (S.startAngle(u), T.startAngle(u)), w !== !1 && (S.endAngle(w), T.endAngle(w)), p && (S.innerRadius(J[M]), T.innerRadius(J[M])), S.cornerRadius && x && (S.cornerRadius(x), T.cornerRadius(x)), B.push(S), C.push(T);
        }
        var U = d3.layout.pie().sort(null).value(function (a) {
          return a.disabled ? 0 : g(a);
        });
        U.padAngle && v && U.padAngle(v), p && q && (R.append("text").attr("class", "nv-pie-title"), N.select(".nv-pie-title").style("text-anchor", "middle").text(function (a) {
          return q;
        }).style("font-size", Math.min(F, G) * y * 2 / (q.length + 2) + "px").attr("dy", "0.35em").attr("transform", function (a, b) {
          return "translate(0, " + s + ")";
        }));
        var V = N.select(".nv-pie").selectAll(".nv-slice").data(U),
          W = N.select(".nv-pieLabels").selectAll(".nv-label").data(U);
        V.exit().remove(), W.exit().remove();
        var X = V.enter().append("g");
        X.attr("class", "nv-slice"), X.on("mouseover", function (a, b) {
          d3.select(this).classed("hover", !0), r && d3.select(this).select("path").transition().duration(70).attr("d", C[b]), A.elementMouseover({
            data: a.data,
            index: b,
            color: d3.select(this).style("fill")
          });
        }), X.on("mouseout", function (a, b) {
          d3.select(this).classed("hover", !1), r && d3.select(this).select("path").transition().duration(50).attr("d", B[b]), A.elementMouseout({
            data: a.data,
            index: b
          });
        }), X.on("mousemove", function (a, b) {
          A.elementMousemove({
            data: a.data,
            index: b
          });
        }), X.on("click", function (a, b) {
          A.elementClick({
            data: a.data,
            index: b,
            color: d3.select(this).style("fill")
          });
        }), X.on("dblclick", function (a, b) {
          A.elementDblClick({
            data: a.data,
            index: b,
            color: d3.select(this).style("fill")
          });
        }), V.attr("fill", function (a, b) {
          return j(a.data, b);
        }), V.attr("stroke", function (a, b) {
          return j(a.data, b);
        });
        X.append("path").each(function (a) {
          this._current = a;
        });
        if (V.select("path").transition().attr("d", function (a, b) {
          return B[b](a);
        }).attrTween("d", E), l) {
          for (var Y = [], M = 0; M < b[0].length; M++) Y.push(B[M]), m ? p && (Y[M] = d3.svg.arc().outerRadius(B[M].outerRadius()), u !== !1 && Y[M].startAngle(u), w !== !1 && Y[M].endAngle(w)) : p || Y[M].innerRadius(0);
          W.enter().append("g").classed("nv-label", !0).each(function (a, b) {
            var c = d3.select(this);
            c.attr("transform", function (a, b) {
              if (t) {
                a.outerRadius = I[b] + 10, a.innerRadius = I[b] + 15;
                var c = (a.startAngle + a.endAngle) / 2 * (180 / Math.PI);
                return (a.startAngle + a.endAngle) / 2 < Math.PI ? c -= 90 : c += 90, "translate(" + Y[b].centroid(a) + ") rotate(" + c + ")";
              }
              return a.outerRadius = H + 10, a.innerRadius = H + 15, "translate(" + Y[b].centroid(a) + ")";
            }), c.append("rect").style("stroke", "#fff").style("fill", "#fff").attr("rx", 3).attr("ry", 3), c.append("text").style("text-anchor", t ? (a.startAngle + a.endAngle) / 2 < Math.PI ? "start" : "end" : "middle").style("fill", "#000");
          });
          var Z = {},
            $ = 14,
            _ = 140,
            aa = function aa(a) {
              return Math.floor(a[0] / _) * _ + "," + Math.floor(a[1] / $) * $;
            };
          W.watchTransition(D, "pie labels").attr("transform", function (a, b) {
            if (t) {
              a.outerRadius = I[b] + 10, a.innerRadius = I[b] + 15;
              var c = (a.startAngle + a.endAngle) / 2 * (180 / Math.PI);
              return (a.startAngle + a.endAngle) / 2 < Math.PI ? c -= 90 : c += 90, "translate(" + Y[b].centroid(a) + ") rotate(" + c + ")";
            }
            a.outerRadius = H + 10, a.innerRadius = H + 15;
            var d = Y[b].centroid(a);
            if (a.value) {
              var e = aa(d);
              Z[e] && (d[1] -= $), Z[aa(d)] = !0;
            }
            return "translate(" + d + ")";
          }), W.select(".nv-label text").style("text-anchor", function (a, b) {
            return t ? (a.startAngle + a.endAngle) / 2 < Math.PI ? "start" : "end" : "middle";
          }).text(function (a, b) {
            var c = (a.endAngle - a.startAngle) / (2 * Math.PI),
              d = "";
            if (!a.value || o > c) return "";
            if ("function" == typeof n) d = n(a, b, {
              key: f(a.data),
              value: g(a.data),
              percent: k(c)
            });else switch (n) {
              case "key":
                d = f(a.data);
                break;
              case "value":
                d = k(g(a.data));
                break;
              case "percent":
                d = d3.format("%")(c);
            }
            return d;
          });
        }
      }), D.renderEnd("pie immediate"), b;
    }
    var c = {
        top: 0,
        right: 0,
        bottom: 0,
        left: 0
      },
      d = 500,
      e = 500,
      f = function f(a) {
        return a.x;
      },
      g = function g(a) {
        return a.y;
      },
      h = Math.floor(1e4 * Math.random()),
      i = null,
      j = a.utils.defaultColor(),
      k = d3.format(",.2f"),
      l = !0,
      m = !1,
      n = "key",
      o = .02,
      p = !1,
      q = !1,
      r = !0,
      s = 0,
      t = !1,
      u = !1,
      v = !1,
      w = !1,
      x = 0,
      y = .5,
      z = [],
      A = d3.dispatch("chartClick", "elementClick", "elementDblClick", "elementMouseover", "elementMouseout", "elementMousemove", "renderEnd"),
      B = [],
      C = [],
      D = a.utils.renderWatch(A);
    return b.dispatch = A, b.options = a.utils.optionsFunc.bind(b), b._options = Object.create({}, {
      arcsRadius: {
        get: function get() {
          return z;
        },
        set: function set(a) {
          z = a;
        }
      },
      width: {
        get: function get() {
          return d;
        },
        set: function set(a) {
          d = a;
        }
      },
      height: {
        get: function get() {
          return e;
        },
        set: function set(a) {
          e = a;
        }
      },
      showLabels: {
        get: function get() {
          return l;
        },
        set: function set(a) {
          l = a;
        }
      },
      title: {
        get: function get() {
          return q;
        },
        set: function set(a) {
          q = a;
        }
      },
      titleOffset: {
        get: function get() {
          return s;
        },
        set: function set(a) {
          s = a;
        }
      },
      labelThreshold: {
        get: function get() {
          return o;
        },
        set: function set(a) {
          o = a;
        }
      },
      valueFormat: {
        get: function get() {
          return k;
        },
        set: function set(a) {
          k = a;
        }
      },
      x: {
        get: function get() {
          return f;
        },
        set: function set(a) {
          f = a;
        }
      },
      id: {
        get: function get() {
          return h;
        },
        set: function set(a) {
          h = a;
        }
      },
      endAngle: {
        get: function get() {
          return w;
        },
        set: function set(a) {
          w = a;
        }
      },
      startAngle: {
        get: function get() {
          return u;
        },
        set: function set(a) {
          u = a;
        }
      },
      padAngle: {
        get: function get() {
          return v;
        },
        set: function set(a) {
          v = a;
        }
      },
      cornerRadius: {
        get: function get() {
          return x;
        },
        set: function set(a) {
          x = a;
        }
      },
      donutRatio: {
        get: function get() {
          return y;
        },
        set: function set(a) {
          y = a;
        }
      },
      labelsOutside: {
        get: function get() {
          return m;
        },
        set: function set(a) {
          m = a;
        }
      },
      labelSunbeamLayout: {
        get: function get() {
          return t;
        },
        set: function set(a) {
          t = a;
        }
      },
      donut: {
        get: function get() {
          return p;
        },
        set: function set(a) {
          p = a;
        }
      },
      growOnHover: {
        get: function get() {
          return r;
        },
        set: function set(a) {
          r = a;
        }
      },
      pieLabelsOutside: {
        get: function get() {
          return m;
        },
        set: function set(b) {
          m = b, a.deprecated("pieLabelsOutside", "use labelsOutside instead");
        }
      },
      donutLabelsOutside: {
        get: function get() {
          return m;
        },
        set: function set(b) {
          m = b, a.deprecated("donutLabelsOutside", "use labelsOutside instead");
        }
      },
      labelFormat: {
        get: function get() {
          return k;
        },
        set: function set(b) {
          k = b, a.deprecated("labelFormat", "use valueFormat instead");
        }
      },
      margin: {
        get: function get() {
          return c;
        },
        set: function set(a) {
          c.top = "undefined" != typeof a.top ? a.top : c.top, c.right = "undefined" != typeof a.right ? a.right : c.right, c.bottom = "undefined" != typeof a.bottom ? a.bottom : c.bottom, c.left = "undefined" != typeof a.left ? a.left : c.left;
        }
      },
      y: {
        get: function get() {
          return g;
        },
        set: function set(a) {
          g = d3.functor(a);
        }
      },
      color: {
        get: function get() {
          return j;
        },
        set: function set(b) {
          j = a.utils.getColor(b);
        }
      },
      labelType: {
        get: function get() {
          return n;
        },
        set: function set(a) {
          n = a || "key";
        }
      }
    }), a.utils.initOptions(b), b;
  }, a.models.pieChart = function () {
    "use strict";

    function b(e) {
      return q.reset(), q.models(c), e.each(function (e) {
        var k = d3.select(this);
        a.utils.initSVG(k);
        var n = a.utils.availableWidth(g, k, f),
          o = a.utils.availableHeight(h, k, f);
        if (b.update = function () {
          k.transition().call(b);
        }, b.container = this, l.setter(s(e), b.update).getter(r(e)).update(), l.disabled = e.map(function (a) {
          return !!a.disabled;
        }), !m) {
          var q;
          m = {};
          for (q in l) l[q] instanceof Array ? m[q] = l[q].slice(0) : m[q] = l[q];
        }
        if (!e || !e.length) return a.utils.noData(b, k), b;
        k.selectAll(".nv-noData").remove();
        var t = k.selectAll("g.nv-wrap.nv-pieChart").data([e]),
          u = t.enter().append("g").attr("class", "nvd3 nv-wrap nv-pieChart").append("g"),
          v = t.select("g");
        if (u.append("g").attr("class", "nv-pieWrap"), u.append("g").attr("class", "nv-legendWrap"), i) if ("top" === j) d.width(n).key(c.x()), t.select(".nv-legendWrap").datum(e).call(d), f.top != d.height() && (f.top = d.height(), o = a.utils.availableHeight(h, k, f)), t.select(".nv-legendWrap").attr("transform", "translate(0," + -f.top + ")");else if ("right" === j) {
          var w = a.models.legend().width();
          w > n / 2 && (w = n / 2), d.height(o).key(c.x()), d.width(w), n -= d.width(), t.select(".nv-legendWrap").datum(e).call(d).attr("transform", "translate(" + n + ",0)");
        }
        t.attr("transform", "translate(" + f.left + "," + f.top + ")"), c.width(n).height(o);
        var x = v.select(".nv-pieWrap").datum([e]);
        d3.transition(x).call(c), d.dispatch.on("stateChange", function (a) {
          for (var c in a) l[c] = a[c];
          p.stateChange(l), b.update();
        }), p.on("changeState", function (a) {
          "undefined" != typeof a.disabled && (e.forEach(function (b, c) {
            b.disabled = a.disabled[c];
          }), l.disabled = a.disabled), b.update();
        });
      }), q.renderEnd("pieChart immediate"), b;
    }
    var c = a.models.pie(),
      d = a.models.legend(),
      e = a.models.tooltip(),
      f = {
        top: 30,
        right: 20,
        bottom: 20,
        left: 20
      },
      g = null,
      h = null,
      i = !0,
      j = "top",
      k = a.utils.defaultColor(),
      l = a.utils.state(),
      m = null,
      n = null,
      o = 250,
      p = d3.dispatch("stateChange", "changeState", "renderEnd");
    e.duration(0).headerEnabled(!1).valueFormatter(function (a, b) {
      return c.valueFormat()(a, b);
    });
    var q = a.utils.renderWatch(p),
      r = function r(a) {
        return function () {
          return {
            active: a.map(function (a) {
              return !a.disabled;
            })
          };
        };
      },
      s = function s(a) {
        return function (b) {
          void 0 !== b.active && a.forEach(function (a, c) {
            a.disabled = !b.active[c];
          });
        };
      };
    return c.dispatch.on("elementMouseover.tooltip", function (a) {
      a.series = {
        key: b.x()(a.data),
        value: b.y()(a.data),
        color: a.color
      }, e.data(a).hidden(!1);
    }), c.dispatch.on("elementMouseout.tooltip", function (a) {
      e.hidden(!0);
    }), c.dispatch.on("elementMousemove.tooltip", function (a) {
      e();
    }), b.legend = d, b.dispatch = p, b.pie = c, b.tooltip = e, b.options = a.utils.optionsFunc.bind(b), b._options = Object.create({}, {
      noData: {
        get: function get() {
          return n;
        },
        set: function set(a) {
          n = a;
        }
      },
      showLegend: {
        get: function get() {
          return i;
        },
        set: function set(a) {
          i = a;
        }
      },
      legendPosition: {
        get: function get() {
          return j;
        },
        set: function set(a) {
          j = a;
        }
      },
      defaultState: {
        get: function get() {
          return m;
        },
        set: function set(a) {
          m = a;
        }
      },
      color: {
        get: function get() {
          return k;
        },
        set: function set(a) {
          k = a, d.color(k), c.color(k);
        }
      },
      duration: {
        get: function get() {
          return o;
        },
        set: function set(a) {
          o = a, q.reset(o);
        }
      },
      margin: {
        get: function get() {
          return f;
        },
        set: function set(a) {
          f.top = void 0 !== a.top ? a.top : f.top, f.right = void 0 !== a.right ? a.right : f.right, f.bottom = void 0 !== a.bottom ? a.bottom : f.bottom, f.left = void 0 !== a.left ? a.left : f.left;
        }
      }
    }), a.utils.inheritOptions(b, c), a.utils.initOptions(b), b;
  }, a.models.scatter = function () {
    "use strict";

    function b(N) {
      return P.reset(), N.each(function (b) {
        function N() {
          if (O = !1, !w) return !1;
          if (M === !0) {
            var a = d3.merge(b.map(function (a, b) {
              return a.values.map(function (a, c) {
                var d = p(a, c),
                  e = q(a, c);
                return [m(d) + 1e-4 * Math.random(), n(e) + 1e-4 * Math.random(), b, c, a];
              }).filter(function (a, b) {
                return x(a[4], b);
              });
            }));
            if (0 == a.length) return !1;
            a.length < 3 && (a.push([m.range()[0] - 20, n.range()[0] - 20, null, null]), a.push([m.range()[1] + 20, n.range()[1] + 20, null, null]), a.push([m.range()[0] - 20, n.range()[0] + 20, null, null]), a.push([m.range()[1] + 20, n.range()[1] - 20, null, null]));
            var c = d3.geom.polygon([[-10, -10], [-10, i + 10], [h + 10, i + 10], [h + 10, -10]]),
              d = d3.geom.voronoi(a).map(function (b, d) {
                return {
                  data: c.clip(b),
                  series: a[d][2],
                  point: a[d][3]
                };
              });
            U.select(".nv-point-paths").selectAll("path").remove();
            var e = U.select(".nv-point-paths").selectAll("path").data(d),
              f = e.enter().append("svg:path").attr("d", function (a) {
                return a && a.data && 0 !== a.data.length ? "M" + a.data.join(",") + "Z" : "M 0 0";
              }).attr("id", function (a, b) {
                return "nv-path-" + b;
              }).attr("clip-path", function (a, b) {
                return "url(#nv-clip-" + k + "-" + b + ")";
              });
            if (C && f.style("fill", d3.rgb(230, 230, 230)).style("fill-opacity", .4).style("stroke-opacity", 1).style("stroke", d3.rgb(200, 200, 200)), B) {
              U.select(".nv-point-clips").selectAll("*").remove();
              var o = U.select(".nv-point-clips").selectAll("clipPath").data(a);
              o.enter().append("svg:clipPath").attr("id", function (a, b) {
                return "nv-clip-" + k + "-" + b;
              }).append("svg:circle").attr("cx", function (a) {
                return a[0];
              }).attr("cy", function (a) {
                return a[1];
              }).attr("r", D);
            }
            var r = function r(a, c) {
              if (O) return 0;
              var d = b[a.series];
              if (void 0 !== d) {
                var e = d.values[a.point];
                e.color = j(d, a.series), e.x = p(e), e.y = q(e);
                var f = l.node().getBoundingClientRect(),
                  h = window.pageYOffset || document.documentElement.scrollTop,
                  i = window.pageXOffset || document.documentElement.scrollLeft,
                  k = {
                    left: m(p(e, a.point)) + f.left + i + g.left + 10,
                    top: n(q(e, a.point)) + f.top + h + g.top + 10
                  };
                c({
                  point: e,
                  series: d,
                  pos: k,
                  relativePos: [m(p(e, a.point)) + g.left, n(q(e, a.point)) + g.top],
                  seriesIndex: a.series,
                  pointIndex: a.point
                });
              }
            };
            e.on("click", function (a) {
              r(a, L.elementClick);
            }).on("dblclick", function (a) {
              r(a, L.elementDblClick);
            }).on("mouseover", function (a) {
              r(a, L.elementMouseover);
            }).on("mouseout", function (a, b) {
              r(a, L.elementMouseout);
            });
          } else U.select(".nv-groups").selectAll(".nv-group").selectAll(".nv-point").on("click", function (a, c) {
            if (O || !b[a.series]) return 0;
            var d = b[a.series],
              e = d.values[c];
            L.elementClick({
              point: e,
              series: d,
              pos: [m(p(e, c)) + g.left, n(q(e, c)) + g.top],
              relativePos: [m(p(e, c)) + g.left, n(q(e, c)) + g.top],
              seriesIndex: a.series,
              pointIndex: c
            });
          }).on("dblclick", function (a, c) {
            if (O || !b[a.series]) return 0;
            var d = b[a.series],
              e = d.values[c];
            L.elementDblClick({
              point: e,
              series: d,
              pos: [m(p(e, c)) + g.left, n(q(e, c)) + g.top],
              relativePos: [m(p(e, c)) + g.left, n(q(e, c)) + g.top],
              seriesIndex: a.series,
              pointIndex: c
            });
          }).on("mouseover", function (a, c) {
            if (O || !b[a.series]) return 0;
            var d = b[a.series],
              e = d.values[c];
            L.elementMouseover({
              point: e,
              series: d,
              pos: [m(p(e, c)) + g.left, n(q(e, c)) + g.top],
              relativePos: [m(p(e, c)) + g.left, n(q(e, c)) + g.top],
              seriesIndex: a.series,
              pointIndex: c,
              color: j(a, c)
            });
          }).on("mouseout", function (a, c) {
            if (O || !b[a.series]) return 0;
            var d = b[a.series],
              e = d.values[c];
            L.elementMouseout({
              point: e,
              series: d,
              pos: [m(p(e, c)) + g.left, n(q(e, c)) + g.top],
              relativePos: [m(p(e, c)) + g.left, n(q(e, c)) + g.top],
              seriesIndex: a.series,
              pointIndex: c,
              color: j(a, c)
            });
          });
        }
        l = d3.select(this);
        var R = a.utils.availableWidth(h, l, g),
          S = a.utils.availableHeight(i, l, g);
        a.utils.initSVG(l), b.forEach(function (a, b) {
          a.values.forEach(function (a) {
            a.series = b;
          });
        });
        var T = E && F && I ? [] : d3.merge(b.map(function (a) {
          return a.values.map(function (a, b) {
            return {
              x: p(a, b),
              y: q(a, b),
              size: r(a, b)
            };
          });
        }));
        m.domain(E || d3.extent(T.map(function (a) {
          return a.x;
        }).concat(t))), y && b[0] ? m.range(G || [(R * z + R) / (2 * b[0].values.length), R - R * (1 + z) / (2 * b[0].values.length)]) : m.range(G || [0, R]), n.domain(F || d3.extent(T.map(function (a) {
          return a.y;
        }).concat(u))).range(H || [S, 0]), o.domain(I || d3.extent(T.map(function (a) {
          return a.size;
        }).concat(v))).range(J || Q), K = m.domain()[0] === m.domain()[1] || n.domain()[0] === n.domain()[1], m.domain()[0] === m.domain()[1] && (m.domain()[0] ? m.domain([m.domain()[0] - .01 * m.domain()[0], m.domain()[1] + .01 * m.domain()[1]]) : m.domain([-1, 1])), n.domain()[0] === n.domain()[1] && (n.domain()[0] ? n.domain([n.domain()[0] - .01 * n.domain()[0], n.domain()[1] + .01 * n.domain()[1]]) : n.domain([-1, 1])), isNaN(m.domain()[0]) && m.domain([-1, 1]), isNaN(n.domain()[0]) && n.domain([-1, 1]), c = c || m, d = d || n, e = e || o;
        var U = l.selectAll("g.nv-wrap.nv-scatter").data([b]),
          V = U.enter().append("g").attr("class", "nvd3 nv-wrap nv-scatter nv-chart-" + k),
          W = V.append("defs"),
          X = V.append("g"),
          Y = U.select("g");
        U.classed("nv-single-point", K), X.append("g").attr("class", "nv-groups"), X.append("g").attr("class", "nv-point-paths"), V.append("g").attr("class", "nv-point-clips"), U.attr("transform", "translate(" + g.left + "," + g.top + ")"), W.append("clipPath").attr("id", "nv-edge-clip-" + k).append("rect"), U.select("#nv-edge-clip-" + k + " rect").attr("width", R).attr("height", S > 0 ? S : 0), Y.attr("clip-path", A ? "url(#nv-edge-clip-" + k + ")" : ""), O = !0;
        var Z = U.select(".nv-groups").selectAll(".nv-group").data(function (a) {
          return a;
        }, function (a) {
          return a.key;
        });
        Z.enter().append("g").style("stroke-opacity", 1e-6).style("fill-opacity", 1e-6), Z.exit().remove(), Z.attr("class", function (a, b) {
          return "nv-group nv-series-" + b;
        }).classed("hover", function (a) {
          return a.hover;
        }), Z.watchTransition(P, "scatter: groups").style("fill", function (a, b) {
          return j(a, b);
        }).style("stroke", function (a, b) {
          return j(a, b);
        }).style("stroke-opacity", 1).style("fill-opacity", .5);
        var $ = Z.selectAll("path.nv-point").data(function (a) {
          return a.values.map(function (a, b) {
            return [a, b];
          }).filter(function (a, b) {
            return x(a[0], b);
          });
        });
        $.enter().append("path").style("fill", function (a) {
          return a.color;
        }).style("stroke", function (a) {
          return a.color;
        }).attr("transform", function (a) {
          return "translate(" + c(p(a[0], a[1])) + "," + d(q(a[0], a[1])) + ")";
        }).attr("d", a.utils.symbol().type(function (a) {
          return s(a[0]);
        }).size(function (a) {
          return o(r(a[0], a[1]));
        })), $.exit().remove(), Z.exit().selectAll("path.nv-point").watchTransition(P, "scatter exit").attr("transform", function (a) {
          return "translate(" + m(p(a[0], a[1])) + "," + n(q(a[0], a[1])) + ")";
        }).remove(), $.each(function (a) {
          d3.select(this).classed("nv-point", !0).classed("nv-point-" + a[1], !0).classed("nv-noninteractive", !w).classed("hover", !1);
        }), $.watchTransition(P, "scatter points").attr("transform", function (a) {
          return "translate(" + m(p(a[0], a[1])) + "," + n(q(a[0], a[1])) + ")";
        }).attr("d", a.utils.symbol().type(function (a) {
          return s(a[0]);
        }).size(function (a) {
          return o(r(a[0], a[1]));
        })), clearTimeout(f), f = setTimeout(N, 300), c = m.copy(), d = n.copy(), e = o.copy();
      }), P.renderEnd("scatter immediate"), b;
    }
    var c,
      d,
      e,
      f,
      g = {
        top: 0,
        right: 0,
        bottom: 0,
        left: 0
      },
      h = null,
      i = null,
      j = a.utils.defaultColor(),
      k = Math.floor(1e5 * Math.random()),
      l = null,
      m = d3.scale.linear(),
      n = d3.scale.linear(),
      o = d3.scale.linear(),
      p = function p(a) {
        return a.x;
      },
      q = function q(a) {
        return a.y;
      },
      r = function r(a) {
        return a.size || 1;
      },
      s = function s(a) {
        return a.shape || "circle";
      },
      t = [],
      u = [],
      v = [],
      w = !0,
      x = function x(a) {
        return !a.notActive;
      },
      y = !1,
      z = .1,
      A = !1,
      B = !0,
      C = !1,
      D = function D() {
        return 25;
      },
      E = null,
      F = null,
      G = null,
      H = null,
      I = null,
      J = null,
      K = !1,
      L = d3.dispatch("elementClick", "elementDblClick", "elementMouseover", "elementMouseout", "renderEnd"),
      M = !0,
      N = 250,
      O = !1,
      P = a.utils.renderWatch(L, N),
      Q = [16, 256];
    return b.dispatch = L, b.options = a.utils.optionsFunc.bind(b), b._calls = new function () {
      this.clearHighlights = function () {
        return a.dom.write(function () {
          l.selectAll(".nv-point.hover").classed("hover", !1);
        }), null;
      }, this.highlightPoint = function (b, c, d) {
        a.dom.write(function () {
          l.select(".nv-groups").selectAll(".nv-series-" + b).selectAll(".nv-point-" + c).classed("hover", d);
        });
      };
    }(), L.on("elementMouseover.point", function (a) {
      w && b._calls.highlightPoint(a.seriesIndex, a.pointIndex, !0);
    }), L.on("elementMouseout.point", function (a) {
      w && b._calls.highlightPoint(a.seriesIndex, a.pointIndex, !1);
    }), b._options = Object.create({}, {
      width: {
        get: function get() {
          return h;
        },
        set: function set(a) {
          h = a;
        }
      },
      height: {
        get: function get() {
          return i;
        },
        set: function set(a) {
          i = a;
        }
      },
      xScale: {
        get: function get() {
          return m;
        },
        set: function set(a) {
          m = a;
        }
      },
      yScale: {
        get: function get() {
          return n;
        },
        set: function set(a) {
          n = a;
        }
      },
      pointScale: {
        get: function get() {
          return o;
        },
        set: function set(a) {
          o = a;
        }
      },
      xDomain: {
        get: function get() {
          return E;
        },
        set: function set(a) {
          E = a;
        }
      },
      yDomain: {
        get: function get() {
          return F;
        },
        set: function set(a) {
          F = a;
        }
      },
      pointDomain: {
        get: function get() {
          return I;
        },
        set: function set(a) {
          I = a;
        }
      },
      xRange: {
        get: function get() {
          return G;
        },
        set: function set(a) {
          G = a;
        }
      },
      yRange: {
        get: function get() {
          return H;
        },
        set: function set(a) {
          H = a;
        }
      },
      pointRange: {
        get: function get() {
          return J;
        },
        set: function set(a) {
          J = a;
        }
      },
      forceX: {
        get: function get() {
          return t;
        },
        set: function set(a) {
          t = a;
        }
      },
      forceY: {
        get: function get() {
          return u;
        },
        set: function set(a) {
          u = a;
        }
      },
      forcePoint: {
        get: function get() {
          return v;
        },
        set: function set(a) {
          v = a;
        }
      },
      interactive: {
        get: function get() {
          return w;
        },
        set: function set(a) {
          w = a;
        }
      },
      pointActive: {
        get: function get() {
          return x;
        },
        set: function set(a) {
          x = a;
        }
      },
      padDataOuter: {
        get: function get() {
          return z;
        },
        set: function set(a) {
          z = a;
        }
      },
      padData: {
        get: function get() {
          return y;
        },
        set: function set(a) {
          y = a;
        }
      },
      clipEdge: {
        get: function get() {
          return A;
        },
        set: function set(a) {
          A = a;
        }
      },
      clipVoronoi: {
        get: function get() {
          return B;
        },
        set: function set(a) {
          B = a;
        }
      },
      clipRadius: {
        get: function get() {
          return D;
        },
        set: function set(a) {
          D = a;
        }
      },
      showVoronoi: {
        get: function get() {
          return C;
        },
        set: function set(a) {
          C = a;
        }
      },
      id: {
        get: function get() {
          return k;
        },
        set: function set(a) {
          k = a;
        }
      },
      x: {
        get: function get() {
          return p;
        },
        set: function set(a) {
          p = d3.functor(a);
        }
      },
      y: {
        get: function get() {
          return q;
        },
        set: function set(a) {
          q = d3.functor(a);
        }
      },
      pointSize: {
        get: function get() {
          return r;
        },
        set: function set(a) {
          r = d3.functor(a);
        }
      },
      pointShape: {
        get: function get() {
          return s;
        },
        set: function set(a) {
          s = d3.functor(a);
        }
      },
      margin: {
        get: function get() {
          return g;
        },
        set: function set(a) {
          g.top = void 0 !== a.top ? a.top : g.top, g.right = void 0 !== a.right ? a.right : g.right, g.bottom = void 0 !== a.bottom ? a.bottom : g.bottom, g.left = void 0 !== a.left ? a.left : g.left;
        }
      },
      duration: {
        get: function get() {
          return N;
        },
        set: function set(a) {
          N = a, P.reset(N);
        }
      },
      color: {
        get: function get() {
          return j;
        },
        set: function set(b) {
          j = a.utils.getColor(b);
        }
      },
      useVoronoi: {
        get: function get() {
          return M;
        },
        set: function set(a) {
          M = a, M === !1 && (B = !1);
        }
      }
    }), a.utils.initOptions(b), b;
  }, a.models.scatterChart = function () {
    "use strict";

    function b(z) {
      return D.reset(), D.models(c), t && D.models(d), u && D.models(e), q && D.models(g), r && D.models(h), z.each(function (z) {
        m = d3.select(this), a.utils.initSVG(m);
        var G = a.utils.availableWidth(k, m, j),
          H = a.utils.availableHeight(l, m, j);
        if (b.update = function () {
          0 === A ? m.call(b) : m.transition().duration(A).call(b);
        }, b.container = this, w.setter(F(z), b.update).getter(E(z)).update(), w.disabled = z.map(function (a) {
          return !!a.disabled;
        }), !x) {
          var I;
          x = {};
          for (I in w) w[I] instanceof Array ? x[I] = w[I].slice(0) : x[I] = w[I];
        }
        if (!(z && z.length && z.filter(function (a) {
          return a.values.length;
        }).length)) return a.utils.noData(b, m), D.renderEnd("scatter immediate"), b;
        m.selectAll(".nv-noData").remove(), o = c.xScale(), p = c.yScale();
        var J = m.selectAll("g.nv-wrap.nv-scatterChart").data([z]),
          K = J.enter().append("g").attr("class", "nvd3 nv-wrap nv-scatterChart nv-chart-" + c.id()),
          L = K.append("g"),
          M = J.select("g");
        if (L.append("rect").attr("class", "nvd3 nv-background").style("pointer-events", "none"), L.append("g").attr("class", "nv-x nv-axis"), L.append("g").attr("class", "nv-y nv-axis"), L.append("g").attr("class", "nv-scatterWrap"), L.append("g").attr("class", "nv-regressionLinesWrap"), L.append("g").attr("class", "nv-distWrap"), L.append("g").attr("class", "nv-legendWrap"), v && M.select(".nv-y.nv-axis").attr("transform", "translate(" + G + ",0)"), s) {
          var N = G;
          f.width(N), J.select(".nv-legendWrap").datum(z).call(f), j.top != f.height() && (j.top = f.height(), H = a.utils.availableHeight(l, m, j)), J.select(".nv-legendWrap").attr("transform", "translate(0," + -j.top + ")");
        }
        J.attr("transform", "translate(" + j.left + "," + j.top + ")"), c.width(G).height(H).color(z.map(function (a, b) {
          return a.color = a.color || n(a, b), a.color;
        }).filter(function (a, b) {
          return !z[b].disabled;
        })), J.select(".nv-scatterWrap").datum(z.filter(function (a) {
          return !a.disabled;
        })).call(c), J.select(".nv-regressionLinesWrap").attr("clip-path", "url(#nv-edge-clip-" + c.id() + ")");
        var O = J.select(".nv-regressionLinesWrap").selectAll(".nv-regLines").data(function (a) {
          return a;
        });
        O.enter().append("g").attr("class", "nv-regLines");
        var P = O.selectAll(".nv-regLine").data(function (a) {
          return [a];
        });
        P.enter().append("line").attr("class", "nv-regLine").style("stroke-opacity", 0), P.filter(function (a) {
          return a.intercept && a.slope;
        }).watchTransition(D, "scatterPlusLineChart: regline").attr("x1", o.range()[0]).attr("x2", o.range()[1]).attr("y1", function (a, b) {
          return p(o.domain()[0] * a.slope + a.intercept);
        }).attr("y2", function (a, b) {
          return p(o.domain()[1] * a.slope + a.intercept);
        }).style("stroke", function (a, b, c) {
          return n(a, c);
        }).style("stroke-opacity", function (a, b) {
          return a.disabled || "undefined" == typeof a.slope || "undefined" == typeof a.intercept ? 0 : 1;
        }), t && (d.scale(o)._ticks(a.utils.calcTicksX(G / 100, z)).tickSize(-H, 0), M.select(".nv-x.nv-axis").attr("transform", "translate(0," + p.range()[0] + ")").call(d)), u && (e.scale(p)._ticks(a.utils.calcTicksY(H / 36, z)).tickSize(-G, 0), M.select(".nv-y.nv-axis").call(e)), q && (g.getData(c.x()).scale(o).width(G).color(z.map(function (a, b) {
          return a.color || n(a, b);
        }).filter(function (a, b) {
          return !z[b].disabled;
        })), L.select(".nv-distWrap").append("g").attr("class", "nv-distributionX"), M.select(".nv-distributionX").attr("transform", "translate(0," + p.range()[0] + ")").datum(z.filter(function (a) {
          return !a.disabled;
        })).call(g)), r && (h.getData(c.y()).scale(p).width(H).color(z.map(function (a, b) {
          return a.color || n(a, b);
        }).filter(function (a, b) {
          return !z[b].disabled;
        })), L.select(".nv-distWrap").append("g").attr("class", "nv-distributionY"), M.select(".nv-distributionY").attr("transform", "translate(" + (v ? G : -h.size()) + ",0)").datum(z.filter(function (a) {
          return !a.disabled;
        })).call(h)), f.dispatch.on("stateChange", function (a) {
          for (var c in a) w[c] = a[c];
          y.stateChange(w), b.update();
        }), y.on("changeState", function (a) {
          "undefined" != typeof a.disabled && (z.forEach(function (b, c) {
            b.disabled = a.disabled[c];
          }), w.disabled = a.disabled), b.update();
        }), c.dispatch.on("elementMouseout.tooltip", function (a) {
          i.hidden(!0), m.select(".nv-chart-" + c.id() + " .nv-series-" + a.seriesIndex + " .nv-distx-" + a.pointIndex).attr("y1", 0), m.select(".nv-chart-" + c.id() + " .nv-series-" + a.seriesIndex + " .nv-disty-" + a.pointIndex).attr("x2", h.size());
        }), c.dispatch.on("elementMouseover.tooltip", function (a) {
          m.select(".nv-series-" + a.seriesIndex + " .nv-distx-" + a.pointIndex).attr("y1", a.relativePos[1] - H), m.select(".nv-series-" + a.seriesIndex + " .nv-disty-" + a.pointIndex).attr("x2", a.relativePos[0] + g.size()), i.data(a).hidden(!1);
        }), B = o.copy(), C = p.copy();
      }), D.renderEnd("scatter with line immediate"), b;
    }
    var c = a.models.scatter(),
      d = a.models.axis(),
      e = a.models.axis(),
      f = a.models.legend(),
      g = a.models.distribution(),
      h = a.models.distribution(),
      i = a.models.tooltip(),
      j = {
        top: 30,
        right: 20,
        bottom: 50,
        left: 75
      },
      k = null,
      l = null,
      m = null,
      n = a.utils.defaultColor(),
      o = c.xScale(),
      p = c.yScale(),
      q = !1,
      r = !1,
      s = !0,
      t = !0,
      u = !0,
      v = !1,
      w = a.utils.state(),
      x = null,
      y = d3.dispatch("stateChange", "changeState", "renderEnd"),
      z = null,
      A = 250;
    c.xScale(o).yScale(p), d.orient("bottom").tickPadding(10), e.orient(v ? "right" : "left").tickPadding(10), g.axis("x"), h.axis("y"), i.headerFormatter(function (a, b) {
      return d.tickFormat()(a, b);
    }).valueFormatter(function (a, b) {
      return e.tickFormat()(a, b);
    });
    var B,
      C,
      D = a.utils.renderWatch(y, A),
      E = function E(a) {
        return function () {
          return {
            active: a.map(function (a) {
              return !a.disabled;
            })
          };
        };
      },
      F = function F(a) {
        return function (b) {
          void 0 !== b.active && a.forEach(function (a, c) {
            a.disabled = !b.active[c];
          });
        };
      };
    return b.dispatch = y, b.scatter = c, b.legend = f, b.xAxis = d, b.yAxis = e, b.distX = g, b.distY = h, b.tooltip = i, b.options = a.utils.optionsFunc.bind(b), b._options = Object.create({}, {
      width: {
        get: function get() {
          return k;
        },
        set: function set(a) {
          k = a;
        }
      },
      height: {
        get: function get() {
          return l;
        },
        set: function set(a) {
          l = a;
        }
      },
      container: {
        get: function get() {
          return m;
        },
        set: function set(a) {
          m = a;
        }
      },
      showDistX: {
        get: function get() {
          return q;
        },
        set: function set(a) {
          q = a;
        }
      },
      showDistY: {
        get: function get() {
          return r;
        },
        set: function set(a) {
          r = a;
        }
      },
      showLegend: {
        get: function get() {
          return s;
        },
        set: function set(a) {
          s = a;
        }
      },
      showXAxis: {
        get: function get() {
          return t;
        },
        set: function set(a) {
          t = a;
        }
      },
      showYAxis: {
        get: function get() {
          return u;
        },
        set: function set(a) {
          u = a;
        }
      },
      defaultState: {
        get: function get() {
          return x;
        },
        set: function set(a) {
          x = a;
        }
      },
      noData: {
        get: function get() {
          return z;
        },
        set: function set(a) {
          z = a;
        }
      },
      duration: {
        get: function get() {
          return A;
        },
        set: function set(a) {
          A = a;
        }
      },
      margin: {
        get: function get() {
          return j;
        },
        set: function set(a) {
          j.top = void 0 !== a.top ? a.top : j.top, j.right = void 0 !== a.right ? a.right : j.right, j.bottom = void 0 !== a.bottom ? a.bottom : j.bottom, j.left = void 0 !== a.left ? a.left : j.left;
        }
      },
      rightAlignYAxis: {
        get: function get() {
          return v;
        },
        set: function set(a) {
          v = a, e.orient(a ? "right" : "left");
        }
      },
      color: {
        get: function get() {
          return n;
        },
        set: function set(b) {
          n = a.utils.getColor(b), f.color(n), g.color(n), h.color(n);
        }
      }
    }), a.utils.inheritOptions(b, c), a.utils.initOptions(b), b;
  }, a.models.sparkline = function () {
    "use strict";

    function b(k) {
      return k.each(function (b) {
        var k = h - g.left - g.right,
          q = i - g.top - g.bottom;
        j = d3.select(this), a.utils.initSVG(j), l.domain(c || d3.extent(b, n)).range(e || [0, k]), m.domain(d || d3.extent(b, o)).range(f || [q, 0]);
        var r = j.selectAll("g.nv-wrap.nv-sparkline").data([b]),
          s = r.enter().append("g").attr("class", "nvd3 nv-wrap nv-sparkline");
        s.append("g"), r.select("g");
        r.attr("transform", "translate(" + g.left + "," + g.top + ")");
        var t = r.selectAll("path").data(function (a) {
          return [a];
        });
        t.enter().append("path"), t.exit().remove(), t.style("stroke", function (a, b) {
          return a.color || p(a, b);
        }).attr("d", d3.svg.line().x(function (a, b) {
          return l(n(a, b));
        }).y(function (a, b) {
          return m(o(a, b));
        }));
        var u = r.selectAll("circle.nv-point").data(function (a) {
          function b(b) {
            if (-1 != b) {
              var c = a[b];
              return c.pointIndex = b, c;
            }
            return null;
          }
          var c = a.map(function (a, b) {
              return o(a, b);
            }),
            d = b(c.lastIndexOf(m.domain()[1])),
            e = b(c.indexOf(m.domain()[0])),
            f = b(c.length - 1);
          return [e, d, f].filter(function (a) {
            return null != a;
          });
        });
        u.enter().append("circle"), u.exit().remove(), u.attr("cx", function (a, b) {
          return l(n(a, a.pointIndex));
        }).attr("cy", function (a, b) {
          return m(o(a, a.pointIndex));
        }).attr("r", 2).attr("class", function (a, b) {
          return n(a, a.pointIndex) == l.domain()[1] ? "nv-point nv-currentValue" : o(a, a.pointIndex) == m.domain()[0] ? "nv-point nv-minValue" : "nv-point nv-maxValue";
        });
      }), b;
    }
    var c,
      d,
      e,
      f,
      g = {
        top: 2,
        right: 0,
        bottom: 2,
        left: 0
      },
      h = 400,
      i = 32,
      j = null,
      k = !0,
      l = d3.scale.linear(),
      m = d3.scale.linear(),
      n = function n(a) {
        return a.x;
      },
      o = function o(a) {
        return a.y;
      },
      p = a.utils.getColor(["#000"]);
    return b.options = a.utils.optionsFunc.bind(b), b._options = Object.create({}, {
      width: {
        get: function get() {
          return h;
        },
        set: function set(a) {
          h = a;
        }
      },
      height: {
        get: function get() {
          return i;
        },
        set: function set(a) {
          i = a;
        }
      },
      xDomain: {
        get: function get() {
          return c;
        },
        set: function set(a) {
          c = a;
        }
      },
      yDomain: {
        get: function get() {
          return d;
        },
        set: function set(a) {
          d = a;
        }
      },
      xRange: {
        get: function get() {
          return e;
        },
        set: function set(a) {
          e = a;
        }
      },
      yRange: {
        get: function get() {
          return f;
        },
        set: function set(a) {
          f = a;
        }
      },
      xScale: {
        get: function get() {
          return l;
        },
        set: function set(a) {
          l = a;
        }
      },
      yScale: {
        get: function get() {
          return m;
        },
        set: function set(a) {
          m = a;
        }
      },
      animate: {
        get: function get() {
          return k;
        },
        set: function set(a) {
          k = a;
        }
      },
      x: {
        get: function get() {
          return n;
        },
        set: function set(a) {
          n = d3.functor(a);
        }
      },
      y: {
        get: function get() {
          return o;
        },
        set: function set(a) {
          o = d3.functor(a);
        }
      },
      margin: {
        get: function get() {
          return g;
        },
        set: function set(a) {
          g.top = void 0 !== a.top ? a.top : g.top, g.right = void 0 !== a.right ? a.right : g.right, g.bottom = void 0 !== a.bottom ? a.bottom : g.bottom, g.left = void 0 !== a.left ? a.left : g.left;
        }
      },
      color: {
        get: function get() {
          return p;
        },
        set: function set(b) {
          p = a.utils.getColor(b);
        }
      }
    }), a.utils.initOptions(b), b;
  }, a.models.sparklinePlus = function () {
    "use strict";

    function b(p) {
      return p.each(function (p) {
        function q() {
          if (!j) {
            var a = z.selectAll(".nv-hoverValue").data(i),
              b = a.enter().append("g").attr("class", "nv-hoverValue").style("stroke-opacity", 0).style("fill-opacity", 0);
            a.exit().transition().duration(250).style("stroke-opacity", 0).style("fill-opacity", 0).remove(), a.attr("transform", function (a) {
              return "translate(" + c(e.x()(p[a], a)) + ",0)";
            }).transition().duration(250).style("stroke-opacity", 1).style("fill-opacity", 1), i.length && (b.append("line").attr("x1", 0).attr("y1", -f.top).attr("x2", 0).attr("y2", u), b.append("text").attr("class", "nv-xValue").attr("x", -6).attr("y", -f.top).attr("text-anchor", "end").attr("dy", ".9em"), z.select(".nv-hoverValue .nv-xValue").text(k(e.x()(p[i[0]], i[0]))), b.append("text").attr("class", "nv-yValue").attr("x", 6).attr("y", -f.top).attr("text-anchor", "start").attr("dy", ".9em"), z.select(".nv-hoverValue .nv-yValue").text(l(e.y()(p[i[0]], i[0]))));
          }
        }
        function r() {
          function a(a, b) {
            for (var c = Math.abs(e.x()(a[0], 0) - b), d = 0, f = 0; f < a.length; f++) Math.abs(e.x()(a[f], f) - b) < c && (c = Math.abs(e.x()(a[f], f) - b), d = f);
            return d;
          }
          if (!j) {
            var b = d3.mouse(this)[0] - f.left;
            i = [a(p, Math.round(c.invert(b)))], q();
          }
        }
        var s = d3.select(this);
        a.utils.initSVG(s);
        var t = a.utils.availableWidth(g, s, f),
          u = a.utils.availableHeight(h, s, f);
        if (b.update = function () {
          s.call(b);
        }, b.container = this, !p || !p.length) return a.utils.noData(b, s), b;
        s.selectAll(".nv-noData").remove();
        var v = e.y()(p[p.length - 1], p.length - 1);
        c = e.xScale(), d = e.yScale();
        var w = s.selectAll("g.nv-wrap.nv-sparklineplus").data([p]),
          x = w.enter().append("g").attr("class", "nvd3 nv-wrap nv-sparklineplus"),
          y = x.append("g"),
          z = w.select("g");
        y.append("g").attr("class", "nv-sparklineWrap"), y.append("g").attr("class", "nv-valueWrap"), y.append("g").attr("class", "nv-hoverArea"), w.attr("transform", "translate(" + f.left + "," + f.top + ")");
        var A = z.select(".nv-sparklineWrap");
        if (e.width(t).height(u), A.call(e), m) {
          var B = z.select(".nv-valueWrap"),
            C = B.selectAll(".nv-currentValue").data([v]);
          C.enter().append("text").attr("class", "nv-currentValue").attr("dx", o ? -8 : 8).attr("dy", ".9em").style("text-anchor", o ? "end" : "start"), C.attr("x", t + (o ? f.right : 0)).attr("y", n ? function (a) {
            return d(a);
          } : 0).style("fill", e.color()(p[p.length - 1], p.length - 1)).text(l(v));
        }
        y.select(".nv-hoverArea").append("rect").on("mousemove", r).on("click", function () {
          j = !j;
        }).on("mouseout", function () {
          i = [], q();
        }), z.select(".nv-hoverArea rect").attr("transform", function (a) {
          return "translate(" + -f.left + "," + -f.top + ")";
        }).attr("width", t + f.left + f.right).attr("height", u + f.top);
      }), b;
    }
    var c,
      d,
      e = a.models.sparkline(),
      f = {
        top: 15,
        right: 100,
        bottom: 10,
        left: 50
      },
      g = null,
      h = null,
      i = [],
      j = !1,
      k = d3.format(",r"),
      l = d3.format(",.2f"),
      m = !0,
      n = !0,
      o = !1,
      p = null;
    return b.sparkline = e, b.options = a.utils.optionsFunc.bind(b), b._options = Object.create({}, {
      width: {
        get: function get() {
          return g;
        },
        set: function set(a) {
          g = a;
        }
      },
      height: {
        get: function get() {
          return h;
        },
        set: function set(a) {
          h = a;
        }
      },
      xTickFormat: {
        get: function get() {
          return k;
        },
        set: function set(a) {
          k = a;
        }
      },
      yTickFormat: {
        get: function get() {
          return l;
        },
        set: function set(a) {
          l = a;
        }
      },
      showLastValue: {
        get: function get() {
          return m;
        },
        set: function set(a) {
          m = a;
        }
      },
      alignValue: {
        get: function get() {
          return n;
        },
        set: function set(a) {
          n = a;
        }
      },
      rightAlignValue: {
        get: function get() {
          return o;
        },
        set: function set(a) {
          o = a;
        }
      },
      noData: {
        get: function get() {
          return p;
        },
        set: function set(a) {
          p = a;
        }
      },
      margin: {
        get: function get() {
          return f;
        },
        set: function set(a) {
          f.top = void 0 !== a.top ? a.top : f.top, f.right = void 0 !== a.right ? a.right : f.right, f.bottom = void 0 !== a.bottom ? a.bottom : f.bottom, f.left = void 0 !== a.left ? a.left : f.left;
        }
      }
    }), a.utils.inheritOptions(b, e), a.utils.initOptions(b), b;
  }, a.models.stackedArea = function () {
    "use strict";

    function b(m) {
      return u.reset(), u.models(r), m.each(function (m) {
        var s = f - e.left - e.right,
          v = g - e.top - e.bottom;
        j = d3.select(this), a.utils.initSVG(j), c = r.xScale(), d = r.yScale();
        var w = m;
        m.forEach(function (a, b) {
          a.seriesIndex = b, a.values = a.values.map(function (a, c) {
            return a.index = c, a.seriesIndex = b, a;
          });
        });
        var x = m.filter(function (a) {
          return !a.disabled;
        });
        m = d3.layout.stack().order(o).offset(n).values(function (a) {
          return a.values;
        }).x(k).y(l).out(function (a, b, c) {
          a.display = {
            y: c,
            y0: b
          };
        })(x);
        var y = j.selectAll("g.nv-wrap.nv-stackedarea").data([m]),
          z = y.enter().append("g").attr("class", "nvd3 nv-wrap nv-stackedarea"),
          A = z.append("defs"),
          B = z.append("g"),
          C = y.select("g");
        B.append("g").attr("class", "nv-areaWrap"), B.append("g").attr("class", "nv-scatterWrap"), y.attr("transform", "translate(" + e.left + "," + e.top + ")"), 0 == r.forceY().length && r.forceY().push(0), r.width(s).height(v).x(k).y(function (a) {
          return void 0 !== a.display ? a.display.y + a.display.y0 : void 0;
        }).forceY([0]).color(m.map(function (a, b) {
          return a.color || h(a, a.seriesIndex);
        }));
        var D = C.select(".nv-scatterWrap").datum(m);
        D.call(r), A.append("clipPath").attr("id", "nv-edge-clip-" + i).append("rect"), y.select("#nv-edge-clip-" + i + " rect").attr("width", s).attr("height", v), C.attr("clip-path", q ? "url(#nv-edge-clip-" + i + ")" : "");
        var E = d3.svg.area().x(function (a, b) {
            return c(k(a, b));
          }).y0(function (a) {
            return d(a.display.y0);
          }).y1(function (a) {
            return d(a.display.y + a.display.y0);
          }).interpolate(p),
          F = d3.svg.area().x(function (a, b) {
            return c(k(a, b));
          }).y0(function (a) {
            return d(a.display.y0);
          }).y1(function (a) {
            return d(a.display.y0);
          }),
          G = C.select(".nv-areaWrap").selectAll("path.nv-area").data(function (a) {
            return a;
          });
        G.enter().append("path").attr("class", function (a, b) {
          return "nv-area nv-area-" + b;
        }).attr("d", function (a, b) {
          return F(a.values, a.seriesIndex);
        }).on("mouseover", function (a, b) {
          d3.select(this).classed("hover", !0), t.areaMouseover({
            point: a,
            series: a.key,
            pos: [d3.event.pageX, d3.event.pageY],
            seriesIndex: a.seriesIndex
          });
        }).on("mouseout", function (a, b) {
          d3.select(this).classed("hover", !1), t.areaMouseout({
            point: a,
            series: a.key,
            pos: [d3.event.pageX, d3.event.pageY],
            seriesIndex: a.seriesIndex
          });
        }).on("click", function (a, b) {
          d3.select(this).classed("hover", !1), t.areaClick({
            point: a,
            series: a.key,
            pos: [d3.event.pageX, d3.event.pageY],
            seriesIndex: a.seriesIndex
          });
        }), G.exit().remove(), G.style("fill", function (a, b) {
          return a.color || h(a, a.seriesIndex);
        }).style("stroke", function (a, b) {
          return a.color || h(a, a.seriesIndex);
        }), G.watchTransition(u, "stackedArea path").attr("d", function (a, b) {
          return E(a.values, b);
        }), r.dispatch.on("elementMouseover.area", function (a) {
          C.select(".nv-chart-" + i + " .nv-area-" + a.seriesIndex).classed("hover", !0);
        }), r.dispatch.on("elementMouseout.area", function (a) {
          C.select(".nv-chart-" + i + " .nv-area-" + a.seriesIndex).classed("hover", !1);
        }), b.d3_stackedOffset_stackPercent = function (a) {
          var b,
            c,
            d,
            e = a.length,
            f = a[0].length,
            g = [];
          for (c = 0; f > c; ++c) {
            for (b = 0, d = 0; b < w.length; b++) d += l(w[b].values[c]);
            if (d) for (b = 0; e > b; b++) a[b][c][1] /= d;else for (b = 0; e > b; b++) a[b][c][1] = 0;
          }
          for (c = 0; f > c; ++c) g[c] = 0;
          return g;
        };
      }), u.renderEnd("stackedArea immediate"), b;
    }
    var c,
      d,
      e = {
        top: 0,
        right: 0,
        bottom: 0,
        left: 0
      },
      f = 960,
      g = 500,
      h = a.utils.defaultColor(),
      i = Math.floor(1e5 * Math.random()),
      j = null,
      k = function k(a) {
        return a.x;
      },
      l = function l(a) {
        return a.y;
      },
      m = "stack",
      n = "zero",
      o = "default",
      p = "linear",
      q = !1,
      r = a.models.scatter(),
      s = 250,
      t = d3.dispatch("areaClick", "areaMouseover", "areaMouseout", "renderEnd", "elementClick", "elementMouseover", "elementMouseout");
    r.pointSize(2.2).pointDomain([2.2, 2.2]);
    var u = a.utils.renderWatch(t, s);
    return b.dispatch = t, b.scatter = r, r.dispatch.on("elementClick", function () {
      t.elementClick.apply(this, arguments);
    }), r.dispatch.on("elementMouseover", function () {
      t.elementMouseover.apply(this, arguments);
    }), r.dispatch.on("elementMouseout", function () {
      t.elementMouseout.apply(this, arguments);
    }), b.interpolate = function (a) {
      return arguments.length ? (p = a, b) : p;
    }, b.duration = function (a) {
      return arguments.length ? (s = a, u.reset(s), r.duration(s), b) : s;
    }, b.dispatch = t, b.scatter = r, b.options = a.utils.optionsFunc.bind(b), b._options = Object.create({}, {
      width: {
        get: function get() {
          return f;
        },
        set: function set(a) {
          f = a;
        }
      },
      height: {
        get: function get() {
          return g;
        },
        set: function set(a) {
          g = a;
        }
      },
      clipEdge: {
        get: function get() {
          return q;
        },
        set: function set(a) {
          q = a;
        }
      },
      offset: {
        get: function get() {
          return n;
        },
        set: function set(a) {
          n = a;
        }
      },
      order: {
        get: function get() {
          return o;
        },
        set: function set(a) {
          o = a;
        }
      },
      interpolate: {
        get: function get() {
          return p;
        },
        set: function set(a) {
          p = a;
        }
      },
      x: {
        get: function get() {
          return k;
        },
        set: function set(a) {
          k = d3.functor(a);
        }
      },
      y: {
        get: function get() {
          return l;
        },
        set: function set(a) {
          l = d3.functor(a);
        }
      },
      margin: {
        get: function get() {
          return e;
        },
        set: function set(a) {
          e.top = void 0 !== a.top ? a.top : e.top, e.right = void 0 !== a.right ? a.right : e.right, e.bottom = void 0 !== a.bottom ? a.bottom : e.bottom, e.left = void 0 !== a.left ? a.left : e.left;
        }
      },
      color: {
        get: function get() {
          return h;
        },
        set: function set(b) {
          h = a.utils.getColor(b);
        }
      },
      style: {
        get: function get() {
          return m;
        },
        set: function set(a) {
          switch (m = a) {
            case "stack":
              b.offset("zero"), b.order("default");
              break;
            case "stream":
              b.offset("wiggle"), b.order("inside-out");
              break;
            case "stream-center":
              b.offset("silhouette"), b.order("inside-out");
              break;
            case "expand":
              b.offset("expand"), b.order("default");
              break;
            case "stack_percent":
              b.offset(b.d3_stackedOffset_stackPercent), b.order("default");
          }
        }
      },
      duration: {
        get: function get() {
          return s;
        },
        set: function set(a) {
          s = a, u.reset(s), r.duration(s);
        }
      }
    }), a.utils.inheritOptions(b, r), a.utils.initOptions(b), b;
  }, a.models.stackedAreaChart = function () {
    "use strict";

    function b(k) {
      return H.reset(), H.models(e), r && H.models(f), s && H.models(g), k.each(function (k) {
        var z = d3.select(this),
          H = this;
        a.utils.initSVG(z);
        var M = a.utils.availableWidth(m, z, l),
          N = a.utils.availableHeight(n, z, l);
        if (b.update = function () {
          z.transition().duration(E).call(b);
        }, b.container = this, x.setter(K(k), b.update).getter(J(k)).update(), x.disabled = k.map(function (a) {
          return !!a.disabled;
        }), !y) {
          var O;
          y = {};
          for (O in x) x[O] instanceof Array ? y[O] = x[O].slice(0) : y[O] = x[O];
        }
        if (!(k && k.length && k.filter(function (a) {
          return a.values.length;
        }).length)) return a.utils.noData(b, z), b;
        z.selectAll(".nv-noData").remove(), c = e.xScale(), d = e.yScale();
        var P = z.selectAll("g.nv-wrap.nv-stackedAreaChart").data([k]),
          Q = P.enter().append("g").attr("class", "nvd3 nv-wrap nv-stackedAreaChart").append("g"),
          R = P.select("g");
        if (Q.append("rect").style("opacity", 0), Q.append("g").attr("class", "nv-x nv-axis"), Q.append("g").attr("class", "nv-y nv-axis"), Q.append("g").attr("class", "nv-stackedWrap"), Q.append("g").attr("class", "nv-legendWrap"), Q.append("g").attr("class", "nv-controlsWrap"), Q.append("g").attr("class", "nv-interactive"), R.select("rect").attr("width", M).attr("height", N), q) {
          var S = p ? M - B : M;
          h.width(S), R.select(".nv-legendWrap").datum(k).call(h), l.top != h.height() && (l.top = h.height(), N = a.utils.availableHeight(n, z, l)), R.select(".nv-legendWrap").attr("transform", "translate(" + (M - S) + "," + -l.top + ")");
        }
        if (p) {
          var T = [{
            key: D.stacked || "Stacked",
            metaKey: "Stacked",
            disabled: "stack" != e.style(),
            style: "stack"
          }, {
            key: D.stream || "Stream",
            metaKey: "Stream",
            disabled: "stream" != e.style(),
            style: "stream"
          }, {
            key: D.expanded || "Expanded",
            metaKey: "Expanded",
            disabled: "expand" != e.style(),
            style: "expand"
          }, {
            key: D.stack_percent || "Stack %",
            metaKey: "Stack_Percent",
            disabled: "stack_percent" != e.style(),
            style: "stack_percent"
          }];
          B = C.length / 3 * 260, T = T.filter(function (a) {
            return -1 !== C.indexOf(a.metaKey);
          }), i.width(B).color(["#444", "#444", "#444"]), R.select(".nv-controlsWrap").datum(T).call(i), l.top != Math.max(i.height(), h.height()) && (l.top = Math.max(i.height(), h.height()), N = a.utils.availableHeight(n, z, l)), R.select(".nv-controlsWrap").attr("transform", "translate(0," + -l.top + ")");
        }
        P.attr("transform", "translate(" + l.left + "," + l.top + ")"), t && R.select(".nv-y.nv-axis").attr("transform", "translate(" + M + ",0)"), u && (j.width(M).height(N).margin({
          left: l.left,
          top: l.top
        }).svgContainer(z).xScale(c), P.select(".nv-interactive").call(j)), e.width(M).height(N);
        var U = R.select(".nv-stackedWrap").datum(k);
        if (U.transition().call(e), r && (f.scale(c)._ticks(a.utils.calcTicksX(M / 100, k)).tickSize(-N, 0), R.select(".nv-x.nv-axis").attr("transform", "translate(0," + N + ")"), R.select(".nv-x.nv-axis").transition().duration(0).call(f)), s) {
          var V;
          if (V = "wiggle" === e.offset() ? 0 : a.utils.calcTicksY(N / 36, k), g.scale(d)._ticks(V).tickSize(-M, 0), "expand" === e.style() || "stack_percent" === e.style()) {
            var W = g.tickFormat();
            F && W === L || (F = W), g.tickFormat(L);
          } else F && (g.tickFormat(F), F = null);
          R.select(".nv-y.nv-axis").transition().duration(0).call(g);
        }
        e.dispatch.on("areaClick.toggle", function (a) {
          1 === k.filter(function (a) {
            return !a.disabled;
          }).length ? k.forEach(function (a) {
            a.disabled = !1;
          }) : k.forEach(function (b, c) {
            b.disabled = c != a.seriesIndex;
          }), x.disabled = k.map(function (a) {
            return !!a.disabled;
          }), A.stateChange(x), b.update();
        }), h.dispatch.on("stateChange", function (a) {
          for (var c in a) x[c] = a[c];
          A.stateChange(x), b.update();
        }), i.dispatch.on("legendClick", function (a, c) {
          a.disabled && (T = T.map(function (a) {
            return a.disabled = !0, a;
          }), a.disabled = !1, e.style(a.style), x.style = e.style(), A.stateChange(x), b.update());
        }), j.dispatch.on("elementMousemove", function (c) {
          e.clearHighlights();
          var d,
            g,
            h,
            i = [],
            l = 0;
          if (k.filter(function (a, b) {
            return a.seriesIndex = b, !a.disabled;
          }).forEach(function (f, j) {
            g = a.interactiveBisect(f.values, c.pointXValue, b.x());
            var k = f.values[g],
              m = b.y()(k, g);
            if (null != m && e.highlightPoint(j, g, !0), "undefined" != typeof k) {
              "undefined" == typeof d && (d = k), "undefined" == typeof h && (h = b.xScale()(b.x()(k, g)));
              var n = "expand" == e.style() ? k.display.y : b.y()(k, g);
              i.push({
                key: f.key,
                value: n,
                color: o(f, f.seriesIndex),
                stackedValue: k.display
              }), v && "expand" != e.style() && (l += n);
            }
          }), i.reverse(), i.length > 2) {
            var m = b.yScale().invert(c.mouseY),
              n = null;
            i.forEach(function (a, b) {
              m = Math.abs(m);
              var c = Math.abs(a.stackedValue.y0),
                d = Math.abs(a.stackedValue.y);
              return m >= c && d + c >= m ? void (n = b) : void 0;
            }), null != n && (i[n].highlight = !0);
          }
          v && "expand" != e.style() && i.length >= 2 && i.push({
            key: w,
            value: l,
            total: !0
          });
          var p = f.tickFormat()(b.x()(d, g)),
            q = j.tooltip.valueFormatter();
          "expand" === e.style() || "stack_percent" === e.style() ? (G || (G = q), q = d3.format(".1%")) : G && (q = G, G = null), j.tooltip.chartContainer(H.parentNode).valueFormatter(q).data({
            value: p,
            series: i
          })(), j.renderGuideLine(h);
        }), j.dispatch.on("elementMouseout", function (a) {
          e.clearHighlights();
        }), A.on("changeState", function (a) {
          "undefined" != typeof a.disabled && k.length === a.disabled.length && (k.forEach(function (b, c) {
            b.disabled = a.disabled[c];
          }), x.disabled = a.disabled), "undefined" != typeof a.style && (e.style(a.style), I = a.style), b.update();
        });
      }), H.renderEnd("stacked Area chart immediate"), b;
    }
    var c,
      d,
      e = a.models.stackedArea(),
      f = a.models.axis(),
      g = a.models.axis(),
      h = a.models.legend(),
      i = a.models.legend(),
      j = a.interactiveGuideline(),
      k = a.models.tooltip(),
      l = {
        top: 30,
        right: 25,
        bottom: 50,
        left: 60
      },
      m = null,
      n = null,
      o = a.utils.defaultColor(),
      p = !0,
      q = !0,
      r = !0,
      s = !0,
      t = !1,
      u = !1,
      v = !0,
      w = "TOTAL",
      x = a.utils.state(),
      y = null,
      z = null,
      A = d3.dispatch("stateChange", "changeState", "renderEnd"),
      B = 250,
      C = ["Stacked", "Stream", "Expanded"],
      D = {},
      E = 250;
    x.style = e.style(), f.orient("bottom").tickPadding(7), g.orient(t ? "right" : "left"), k.headerFormatter(function (a, b) {
      return f.tickFormat()(a, b);
    }).valueFormatter(function (a, b) {
      return g.tickFormat()(a, b);
    }), j.tooltip.headerFormatter(function (a, b) {
      return f.tickFormat()(a, b);
    }).valueFormatter(function (a, b) {
      return g.tickFormat()(a, b);
    });
    var F = null,
      G = null;
    i.updateState(!1);
    var H = a.utils.renderWatch(A),
      I = e.style(),
      J = function J(a) {
        return function () {
          return {
            active: a.map(function (a) {
              return !a.disabled;
            }),
            style: e.style()
          };
        };
      },
      K = function K(a) {
        return function (b) {
          void 0 !== b.style && (I = b.style), void 0 !== b.active && a.forEach(function (a, c) {
            a.disabled = !b.active[c];
          });
        };
      },
      L = d3.format("%");
    return e.dispatch.on("elementMouseover.tooltip", function (a) {
      a.point.x = e.x()(a.point), a.point.y = e.y()(a.point), k.data(a).hidden(!1);
    }), e.dispatch.on("elementMouseout.tooltip", function (a) {
      k.hidden(!0);
    }), b.dispatch = A, b.stacked = e, b.legend = h, b.controls = i, b.xAxis = f, b.yAxis = g, b.interactiveLayer = j, b.tooltip = k, b.dispatch = A, b.options = a.utils.optionsFunc.bind(b), b._options = Object.create({}, {
      width: {
        get: function get() {
          return m;
        },
        set: function set(a) {
          m = a;
        }
      },
      height: {
        get: function get() {
          return n;
        },
        set: function set(a) {
          n = a;
        }
      },
      showLegend: {
        get: function get() {
          return q;
        },
        set: function set(a) {
          q = a;
        }
      },
      showXAxis: {
        get: function get() {
          return r;
        },
        set: function set(a) {
          r = a;
        }
      },
      showYAxis: {
        get: function get() {
          return s;
        },
        set: function set(a) {
          s = a;
        }
      },
      defaultState: {
        get: function get() {
          return y;
        },
        set: function set(a) {
          y = a;
        }
      },
      noData: {
        get: function get() {
          return z;
        },
        set: function set(a) {
          z = a;
        }
      },
      showControls: {
        get: function get() {
          return p;
        },
        set: function set(a) {
          p = a;
        }
      },
      controlLabels: {
        get: function get() {
          return D;
        },
        set: function set(a) {
          D = a;
        }
      },
      controlOptions: {
        get: function get() {
          return C;
        },
        set: function set(a) {
          C = a;
        }
      },
      showTotalInTooltip: {
        get: function get() {
          return v;
        },
        set: function set(a) {
          v = a;
        }
      },
      totalLabel: {
        get: function get() {
          return w;
        },
        set: function set(a) {
          w = a;
        }
      },
      margin: {
        get: function get() {
          return l;
        },
        set: function set(a) {
          l.top = void 0 !== a.top ? a.top : l.top, l.right = void 0 !== a.right ? a.right : l.right, l.bottom = void 0 !== a.bottom ? a.bottom : l.bottom, l.left = void 0 !== a.left ? a.left : l.left;
        }
      },
      duration: {
        get: function get() {
          return E;
        },
        set: function set(a) {
          E = a, H.reset(E), e.duration(E), f.duration(E), g.duration(E);
        }
      },
      color: {
        get: function get() {
          return o;
        },
        set: function set(b) {
          o = a.utils.getColor(b), h.color(o), e.color(o);
        }
      },
      rightAlignYAxis: {
        get: function get() {
          return t;
        },
        set: function set(a) {
          t = a, g.orient(t ? "right" : "left");
        }
      },
      useInteractiveGuideline: {
        get: function get() {
          return u;
        },
        set: function set(a) {
          u = !!a, b.interactive(!a), b.useVoronoi(!a), e.scatter.interactive(!a);
        }
      }
    }), a.utils.inheritOptions(b, e), a.utils.initOptions(b), b;
  }, a.models.sunburst = function () {
    "use strict";

    function b(u) {
      return t.reset(), u.each(function (b) {
        function t(a) {
          a.x0 = a.x, a.dx0 = a.dx;
        }
        function u(a) {
          var b = d3.interpolate(p.domain(), [a.x, a.x + a.dx]),
            c = d3.interpolate(q.domain(), [a.y, 1]),
            d = d3.interpolate(q.range(), [a.y ? 20 : 0, y]);
          return function (a, e) {
            return e ? function (b) {
              return s(a);
            } : function (e) {
              return p.domain(b(e)), q.domain(c(e)).range(d(e)), s(a);
            };
          };
        }
        l = d3.select(this);
        var v,
          w = a.utils.availableWidth(g, l, f),
          x = a.utils.availableHeight(h, l, f),
          y = Math.min(w, x) / 2;
        a.utils.initSVG(l);
        var z = l.selectAll(".nv-wrap.nv-sunburst").data(b),
          A = z.enter().append("g").attr("class", "nvd3 nv-wrap nv-sunburst nv-chart-" + k),
          B = A.selectAll("nv-sunburst");
        z.attr("transform", "translate(" + w / 2 + "," + x / 2 + ")"), l.on("click", function (a, b) {
          o.chartClick({
            data: a,
            index: b,
            pos: d3.event,
            id: k
          });
        }), q.range([0, y]), c = c || b, e = b[0], r.value(j[i] || j.count), v = B.data(r.nodes).enter().append("path").attr("d", s).style("fill", function (a) {
          return m((a.children ? a : a.parent).name);
        }).style("stroke", "#FFF").on("click", function (a) {
          d !== c && c !== a && (d = c), c = a, v.transition().duration(n).attrTween("d", u(a));
        }).each(t).on("dblclick", function (a) {
          d.parent == a && v.transition().duration(n).attrTween("d", u(e));
        }).each(t).on("mouseover", function (a, b) {
          d3.select(this).classed("hover", !0).style("opacity", .8), o.elementMouseover({
            data: a,
            color: d3.select(this).style("fill")
          });
        }).on("mouseout", function (a, b) {
          d3.select(this).classed("hover", !1).style("opacity", 1), o.elementMouseout({
            data: a
          });
        }).on("mousemove", function (a, b) {
          o.elementMousemove({
            data: a
          });
        });
      }), t.renderEnd("sunburst immediate"), b;
    }
    var c,
      d,
      e,
      f = {
        top: 0,
        right: 0,
        bottom: 0,
        left: 0
      },
      g = null,
      h = null,
      i = "count",
      j = {
        count: function count(a) {
          return 1;
        },
        size: function size(a) {
          return a.size;
        }
      },
      k = Math.floor(1e4 * Math.random()),
      l = null,
      m = a.utils.defaultColor(),
      n = 500,
      o = d3.dispatch("chartClick", "elementClick", "elementDblClick", "elementMousemove", "elementMouseover", "elementMouseout", "renderEnd"),
      p = d3.scale.linear().range([0, 2 * Math.PI]),
      q = d3.scale.sqrt(),
      r = d3.layout.partition().sort(null).value(function (a) {
        return 1;
      }),
      s = d3.svg.arc().startAngle(function (a) {
        return Math.max(0, Math.min(2 * Math.PI, p(a.x)));
      }).endAngle(function (a) {
        return Math.max(0, Math.min(2 * Math.PI, p(a.x + a.dx)));
      }).innerRadius(function (a) {
        return Math.max(0, q(a.y));
      }).outerRadius(function (a) {
        return Math.max(0, q(a.y + a.dy));
      }),
      t = a.utils.renderWatch(o);
    return b.dispatch = o, b.options = a.utils.optionsFunc.bind(b), b._options = Object.create({}, {
      width: {
        get: function get() {
          return g;
        },
        set: function set(a) {
          g = a;
        }
      },
      height: {
        get: function get() {
          return h;
        },
        set: function set(a) {
          h = a;
        }
      },
      mode: {
        get: function get() {
          return i;
        },
        set: function set(a) {
          i = a;
        }
      },
      id: {
        get: function get() {
          return k;
        },
        set: function set(a) {
          k = a;
        }
      },
      duration: {
        get: function get() {
          return n;
        },
        set: function set(a) {
          n = a;
        }
      },
      margin: {
        get: function get() {
          return f;
        },
        set: function set(a) {
          f.top = void 0 != a.top ? a.top : f.top, f.right = void 0 != a.right ? a.right : f.right, f.bottom = void 0 != a.bottom ? a.bottom : f.bottom, f.left = void 0 != a.left ? a.left : f.left;
        }
      },
      color: {
        get: function get() {
          return m;
        },
        set: function set(b) {
          m = a.utils.getColor(b);
        }
      }
    }), a.utils.initOptions(b), b;
  }, a.models.sunburstChart = function () {
    "use strict";

    function b(d) {
      return m.reset(), m.models(c), d.each(function (d) {
        var h = d3.select(this);
        a.utils.initSVG(h);
        var i = a.utils.availableWidth(f, h, e),
          j = a.utils.availableHeight(g, h, e);
        if (b.update = function () {
          0 === k ? h.call(b) : h.transition().duration(k).call(b);
        }, b.container = this, !d || !d.length) return a.utils.noData(b, h), b;
        h.selectAll(".nv-noData").remove();
        var l = h.selectAll("g.nv-wrap.nv-sunburstChart").data(d),
          m = l.enter().append("g").attr("class", "nvd3 nv-wrap nv-sunburstChart").append("g"),
          n = l.select("g");
        m.append("g").attr("class", "nv-sunburstWrap"), l.attr("transform", "translate(" + e.left + "," + e.top + ")"), c.width(i).height(j);
        var o = n.select(".nv-sunburstWrap").datum(d);
        d3.transition(o).call(c);
      }), m.renderEnd("sunburstChart immediate"), b;
    }
    var c = a.models.sunburst(),
      d = a.models.tooltip(),
      e = {
        top: 30,
        right: 20,
        bottom: 20,
        left: 20
      },
      f = null,
      g = null,
      h = a.utils.defaultColor(),
      i = (Math.round(1e5 * Math.random()), null),
      j = null,
      k = 250,
      l = d3.dispatch("stateChange", "changeState", "renderEnd");
    d.duration(0);
    var m = a.utils.renderWatch(l);
    return d.headerEnabled(!1).valueFormatter(function (a, b) {
      return a;
    }), c.dispatch.on("elementMouseover.tooltip", function (a) {
      a.series = {
        key: a.data.name,
        value: a.data.size,
        color: a.color
      }, d.data(a).hidden(!1);
    }), c.dispatch.on("elementMouseout.tooltip", function (a) {
      d.hidden(!0);
    }), c.dispatch.on("elementMousemove.tooltip", function (a) {
      d();
    }), b.dispatch = l, b.sunburst = c, b.tooltip = d, b.options = a.utils.optionsFunc.bind(b), b._options = Object.create({}, {
      noData: {
        get: function get() {
          return j;
        },
        set: function set(a) {
          j = a;
        }
      },
      defaultState: {
        get: function get() {
          return i;
        },
        set: function set(a) {
          i = a;
        }
      },
      color: {
        get: function get() {
          return h;
        },
        set: function set(a) {
          h = a, c.color(h);
        }
      },
      duration: {
        get: function get() {
          return k;
        },
        set: function set(a) {
          k = a, m.reset(k), c.duration(k);
        }
      },
      margin: {
        get: function get() {
          return e;
        },
        set: function set(a) {
          e.top = void 0 !== a.top ? a.top : e.top, e.right = void 0 !== a.right ? a.right : e.right, e.bottom = void 0 !== a.bottom ? a.bottom : e.bottom, e.left = void 0 !== a.left ? a.left : e.left;
        }
      }
    }), a.utils.inheritOptions(b, c), a.utils.initOptions(b), b;
  }, a.version = "1.8.1-dev";
}();