/*
 * jQuery JavaScript Library v1.4
 * http://jquery.com/
 *
 * Copyright 2010, John Resig
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://docs.jquery.com/License
 *
 * Includes Sizzle.js
 * http://sizzlejs.com/
 * Copyright 2010, The Dojo Foundation
 * Released under the MIT, BSD, and GPL Licenses.
 *
 * Date: Wed Jan 13 15:23:05 2010 -0500
 */
(function (aM, J) {
    function af() {
        if (!ag.isReady) {
            try {
                N.documentElement.doScroll("left")
            } catch (c) {
                setTimeout(af, 1);
                return
            }
            ag.ready()
        }
    }
    function n(s, c) {
        c.src ? ag.ajax({
            url: c.src,
            async: false,
            dataType: "script"
        }) : ag.globalEval(c.text || c.textContent || c.innerHTML || "");
        c.parentNode && c.parentNode.removeChild(c)
    }
    function aZ(s, c, L, G, H, A) {
        var w = s.length;
        if (typeof c === "object") {
            for (var K in c) {
                aZ(s, K, c[K], G, H, L)
            }
            return s
        }
        if (L !== J) {
            G = !A && G && ag.isFunction(L);
            for (K = 0; K < w; K++) {
                H(s[K], c, G ? L.call(s[K], K, H(s[K], c)) : L, A)
            }
            return s
        }
        return w ? H(s[0], c) : null
    }
    function aB() {
        return (new Date).getTime()
    }
    function aS() {
        return false
    }
    function ay() {
        return true
    }
    function B(s, c, w) {
        w[0].type = s;
        return ag.event.handle.apply(c, w)
    }
    function m(O) {
        var M = true,
            L = [],
            H = [],
            K = arguments,
            G, A, s, c, w, P = ag.extend({}, ag.data(this, "events").live);
        for (c in P) {
            A = P[c];
            if (A.live === O.type || A.altLive && ag.inArray(O.type, A.altLive) > -1) {
                G = A.data;
                G.beforeFilter && G.beforeFilter[O.type] && !G.beforeFilter[O.type](O) || H.push(A.selector)
            } else {
                delete P[c]
            }
        }
        G = ag(O.target).closest(H, O.currentTarget);
        w = 0;
        for (l = G.length; w < l; w++) {
            for (c in P) {
                A = P[c];
                s = G[w].elem;
                H = null;
                if (G[w].selector === A.selector) {
                    if (A.live === "mouseenter" || A.live === "mouseleave") {
                        H = ag(O.relatedTarget).closest(A.selector)[0]
                    }
                    if (!H || H !== s) {
                        L.push({
                            elem: s,
                            fn: A
                        })
                    }
                }
            }
        }
        w = 0;
        for (l = L.length; w < l; w++) {
            G = L[w];
            O.currentTarget = G.elem;
            O.data = G.fn.data;
            if (G.fn.apply(G.elem, K) === false) {
                M = false;
                break
            }
        }
        return M
    }
    function bg(s, c) {
        return ["live", s, c.replace(/\./g, "`").replace(/ /g, "&")].join(".")
    }
    function a1(c) {
        return !c || !c.parentNode || c.parentNode.nodeType === 11
    }
    function aN(s, c) {
        var w = 0;
        c.each(function () {
            if (this.nodeName === (s[w] && s[w].nodeName)) {
                var H = ag.data(s[w++]),
                    K = ag.data(this, H);
                if (H = H && H.events) {
                    delete K.handle;
                    K.events = {};
                    for (var G in H) {
                        for (var A in H[G]) {
                            ag.event.add(this, G, H[G][A], H[G][A].data)
                        }
                    }
                }
            }
        })
    }
    function aj(s, c, H) {
        var A, G, w;
        if (s.length === 1 && typeof s[0] === "string" && s[0].length < 512 && s[0].indexOf("<option") < 0) {
            G = true;
            if (w = ag.fragments[s[0]]) {
                if (w !== 1) {
                    A = w
                }
            }
        }
        if (!A) {
            c = c && c[0] ? c[0].ownerDocument || c[0] : N;
            A = c.createDocumentFragment();
            ag.clean(s, c, A, H)
        }
        if (G) {
            ag.fragments[s[0]] = w ? A : 1
        }
        return {
            fragment: A,
            cacheable: G
        }
    }
    function ar(s) {
        for (var c = 0, A, w;
        (A = s[c]) != null; c++) {
            if (!ag.noData[A.nodeName.toLowerCase()] && (w = A[aF])) {
                delete ag.cache[w]
            }
        }
    }
    function aA(s, c) {
        var w = {};
        ag.each(E.concat.apply([], E.slice(0, c)), function () {
            w[this] = s
        });
        return w
    }
    function p(c) {
        return "scrollTo" in c && c.document ? c : c.nodeType === 9 ? c.defaultView || c.parentWindow : false
    }
    var ag = function (s, c) {
            return new ag.fn.init(s, c)
        },
        bh = aM.jQuery,
        a2 = aM.$,
        N = aM.document,
        aq, aO = /^[^<]*(<[\w\W]+>)[^>]*$|^#([\w-]+)$/,
        ak = /^.[^:#\[\.,]*$/,
        F = /\S/,
        q = /^(\s|\u00A0)+|(\s|\u00A0)+$/g,
        d = /^<(\w+)\s*\/?>(?:<\/\1>)?$/,
        aw = navigator.userAgent,
        b = false,
        au = [],
        az, X = Object.prototype.toString,
        u = Object.prototype.hasOwnProperty,
        g = Array.prototype.push,
        at = Array.prototype.slice,
        ap = Array.prototype.indexOf;
    ag.fn = ag.prototype = {
        init: function (s, c) {
            var A, w;
            if (!s) {
                return this
            }
            if (s.nodeType) {
                this.context = this[0] = s;
                this.length = 1;
                return this
            }
            if (typeof s === "string") {
                if ((A = aO.exec(s)) && (A[1] || !c)) {
                    if (A[1]) {
                        w = c ? c.ownerDocument || c : N;
                        if (s = d.exec(s)) {
                            if (ag.isPlainObject(c)) {
                                s = [N.createElement(s[1])];
                                ag.fn.attr.call(s, c, true)
                            } else {
                                s = [w.createElement(s[1])]
                            }
                        } else {
                            s = aj([A[1]], [w]);
                            s = (s.cacheable ? s.fragment.cloneNode(true) : s.fragment).childNodes
                        }
                    } else {
                        if (c = N.getElementById(A[2])) {
                            if (c.id !== A[2]) {
                                return aq.find(s)
                            }
                            this.length = 1;
                            this[0] = c
                        }
                        this.context = N;
                        this.selector = s;
                        return this
                    }
                } else {
                    if (!c && /^\w+$/.test(s)) {
                        this.selector = s;
                        this.context = N;
                        s = N.getElementsByTagName(s)
                    } else {
                        return !c || c.jquery ? (c || aq).find(s) : ag(c).find(s)
                    }
                }
            } else {
                if (ag.isFunction(s)) {
                    return aq.ready(s)
                }
            }
            if (s.selector !== J) {
                this.selector = s.selector;
                this.context = s.context
            }
            return ag.isArray(s) ? this.setArray(s) : ag.makeArray(s, this)
        },
        selector: "",
        jquery: "1.4",
        length: 0,
        size: function () {
            return this.length
        },
        toArray: function () {
            return at.call(this, 0)
        },
        get: function (c) {
            return c == null ? this.toArray() : c < 0 ? this.slice(c)[0] : this[c]
        },
        pushStack: function (s, c, w) {
            s = ag(s || null);
            s.prevObject = this;
            s.context = this.context;
            if (c === "find") {
                s.selector = this.selector + (this.selector ? " " : "") + w
            } else {
                if (c) {
                    s.selector = this.selector + "." + c + "(" + w + ")"
                }
            }
            return s
        },
        setArray: function (c) {
            this.length = 0;
            g.apply(this, c);
            return this
        },
        each: function (s, c) {
            return ag.each(this, s, c)
        },
        ready: function (c) {
            ag.bindReady();
            if (ag.isReady) {
                c.call(N, ag)
            } else {
                au && au.push(c)
            }
            return this
        },
        eq: function (c) {
            return c === -1 ? this.slice(c) : this.slice(c, +c + 1)
        },
        first: function () {
            return this.eq(0)
        },
        last: function () {
            return this.eq(-1)
        },
        slice: function () {
            return this.pushStack(at.apply(this, arguments), "slice", at.call(arguments).join(","))
        },
        map: function (c) {
            return this.pushStack(ag.map(this, function (s, w) {
                return c.call(s, w, s)
            }))
        },
        end: function () {
            return this.prevObject || ag(null)
        },
        push: g,
        sort: [].sort,
        splice: [].splice
    };
    ag.fn.init.prototype = ag.fn;
    ag.extend = ag.fn.extend = function () {
        var s = arguments[0] || {},
            c = 1,
            L = arguments.length,
            G = false,
            H, A, w, K;
        if (typeof s === "boolean") {
            G = s;
            s = arguments[1] || {};
            c = 2
        }
        if (typeof s !== "object" && !ag.isFunction(s)) {
            s = {}
        }
        if (L === c) {
            s = this;
            --c
        }
        for (; c < L; c++) {
            if ((H = arguments[c]) != null) {
                for (A in H) {
                    w = s[A];
                    K = H[A];
                    if (s !== K) {
                        if (G && K && (ag.isPlainObject(K) || ag.isArray(K))) {
                            w = w && (ag.isPlainObject(w) || ag.isArray(w)) ? w : ag.isArray(K) ? [] : {};
                            s[A] = ag.extend(G, w, K)
                        } else {
                            if (K !== J) {
                                s[A] = K
                            }
                        }
                    }
                }
            }
        }
        return s
    };
    ag.extend({
        noConflict: function (c) {
            aM.$ = a2;
            if (c) {
                aM.jQuery = bh
            }
            return ag
        },
        isReady: false,
        ready: function () {
            if (!ag.isReady) {
                if (!N.body) {
                    return setTimeout(ag.ready, 13)
                }
                ag.isReady = true;
                if (au) {
                    for (var s, c = 0; s = au[c++];) {
                        s.call(N, ag)
                    }
                    au = null
                }
                ag.fn.triggerHandler && ag(N).triggerHandler("ready")
            }
        },
        bindReady: function () {
            if (!b) {
                b = true;
                if (N.readyState === "complete") {
                    return ag.ready()
                }
                if (N.addEventListener) {
                    N.addEventListener("DOMContentLoaded", az, false);
                    aM.addEventListener("load", ag.ready, false)
                } else {
                    if (N.attachEvent) {
                        N.attachEvent("onreadystatechange", az);
                        aM.attachEvent("onload", ag.ready);
                        var s = false;
                        try {
                            s = aM.frameElement == null
                        } catch (c) {}
                        N.documentElement.doScroll && s && af()
                    }
                }
            }
        },
        isFunction: function (c) {
            return X.call(c) === "[object Function]"
        },
        isArray: function (c) {
            return X.call(c) === "[object Array]"
        },
        isPlainObject: function (s) {
            if (!s || X.call(s) !== "[object Object]" || s.nodeType || s.setInterval) {
                return false
            }
            if (s.constructor && !u.call(s, "constructor") && !u.call(s.constructor.prototype, "isPrototypeOf")) {
                return false
            }
            var c;
            for (c in s) {}
            return c === J || u.call(s, c)
        },
        isEmptyObject: function (s) {
            for (var c in s) {
                return false
            }
            return true
        },
        noop: function () {},
        globalEval: function (s) {
            if (s && F.test(s)) {
                var c = N.getElementsByTagName("head")[0] || N.documentElement,
                    w = N.createElement("script");
                w.type = "text/javascript";
                if (ag.support.scriptEval) {
                    w.appendChild(N.createTextNode(s))
                } else {
                    w.text = s
                }
                c.insertBefore(w, c.firstChild);
                c.removeChild(w)
            }
        },
        nodeName: function (s, c) {
            return s.nodeName && s.nodeName.toUpperCase() === c.toUpperCase()
        },
        each: function (s, c, K) {
            var G, H = 0,
                A = s.length,
                w = A === J || ag.isFunction(s);
            if (K) {
                if (w) {
                    for (G in s) {
                        if (c.apply(s[G], K) === false) {
                            break
                        }
                    }
                } else {
                    for (; H < A;) {
                        if (c.apply(s[H++], K) === false) {
                            break
                        }
                    }
                }
            } else {
                if (w) {
                    for (G in s) {
                        if (c.call(s[G], G, s[G]) === false) {
                            break
                        }
                    }
                } else {
                    for (K = s[0]; H < A && c.call(K, H, K) !== false; K = s[++H]) {}
                }
            }
            return s
        },
        trim: function (c) {
            return (c || "").replace(q, "")
        },
        makeArray: function (s, c) {
            c = c || [];
            if (s != null) {
                s.length == null || typeof s === "string" || ag.isFunction(s) || typeof s !== "function" && s.setInterval ? g.call(c, s) : ag.merge(c, s)
            }
            return c
        },
        inArray: function (s, c) {
            if (c.indexOf) {
                return c.indexOf(s)
            }
            for (var A = 0, w = c.length; A < w; A++) {
                if (c[A] === s) {
                    return A
                }
            }
            return -1
        },
        merge: function (s, c) {
            var G = s.length,
                w = 0;
            if (typeof c.length === "number") {
                for (var A = c.length; w < A; w++) {
                    s[G++] = c[w]
                }
            } else {
                for (; c[w] !== J;) {
                    s[G++] = c[w++]
                }
            }
            s.length = G;
            return s
        },
        grep: function (s, c, H) {
            for (var A = [], G = 0, w = s.length; G < w; G++) {
                !H !== !c(s[G], G) && A.push(s[G])
            }
            return A
        },
        map: function (s, c, K) {
            for (var G = [], H, A = 0, w = s.length; A < w; A++) {
                H = c(s[A], A, K);
                if (H != null) {
                    G[G.length] = H
                }
            }
            return G.concat.apply([], G)
        },
        guid: 1,
        proxy: function (s, c, w) {
            if (arguments.length === 2) {
                if (typeof c === "string") {
                    w = s;
                    s = w[c];
                    c = J
                } else {
                    if (c && !ag.isFunction(c)) {
                        w = c;
                        c = J
                    }
                }
            }
            if (!c && s) {
                c = function () {
                    return s.apply(w || this, arguments)
                }
            }
            if (s) {
                c.guid = s.guid = s.guid || c.guid || ag.guid++
            }
            return c
        },
        uaMatch: function (s) {
            var c = {
                browser: ""
            };
            s = s.toLowerCase();
            if (/webkit/.test(s)) {
                c = {
                    browser: "webkit",
                    version: /webkit[\/ ]([\w.]+)/
                }
            } else {
                if (/opera/.test(s)) {
                    c = {
                        browser: "opera",
                        version: /version/.test(s) ? /version[\/ ]([\w.]+)/ : /opera[\/ ]([\w.]+)/
                    }
                } else {
                    if (/msie/.test(s)) {
                        c = {
                            browser: "msie",
                            version: /msie ([\w.]+)/
                        }
                    } else {
                        if (/mozilla/.test(s) && !/compatible/.test(s)) {
                            c = {
                                browser: "mozilla",
                                version: /rv:([\w.]+)/
                            }
                        }
                    }
                }
            }
            c.version = (c.version && c.version.exec(s) || [0, "0"])[1];
            return c
        },
        browser: {}
    });
    aw = ag.uaMatch(aw);
    if (aw.browser) {
        ag.browser[aw.browser] = true;
        ag.browser.version = aw.version
    }
    if (ag.browser.webkit) {
        ag.browser.safari = true
    }
    if (ap) {
        ag.inArray = function (s, c) {
            return ap.call(c, s)
        }
    }
    aq = ag(N);
    if (N.addEventListener) {
        az = function () {
            N.removeEventListener("DOMContentLoaded", az, false);
            ag.ready()
        }
    } else {
        if (N.attachEvent) {
            az = function () {
                if (N.readyState === "complete") {
                    N.detachEvent("onreadystatechange", az);
                    ag.ready()
                }
            }
        }
    }
    if (ap) {
        ag.inArray = function (s, c) {
            return ap.call(c, s)
        }
    }(function () {
        ag.support = {};
        var s = N.documentElement,
            c = N.createElement("script"),
            L = N.createElement("div"),
            G = "script" + aB();
        L.style.display = "none";
        L.innerHTML = "   <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
        var H = L.getElementsByTagName("*"),
            A = L.getElementsByTagName("a")[0];
        if (!(!H || !H.length || !A)) {
            ag.support = {
                leadingWhitespace: L.firstChild.nodeType === 3,
                tbody: !L.getElementsByTagName("tbody").length,
                htmlSerialize: !! L.getElementsByTagName("link").length,
                style: /red/.test(A.getAttribute("style")),
                hrefNormalized: A.getAttribute("href") === "/a",
                opacity: /^0.55$/.test(A.style.opacity),
                cssFloat: !! A.style.cssFloat,
                checkOn: L.getElementsByTagName("input")[0].value === "on",
                optSelected: N.createElement("select").appendChild(N.createElement("option")).selected,
                scriptEval: false,
                noCloneEvent: true,
                boxModel: null
            };
            c.type = "text/javascript";
            try {
                c.appendChild(N.createTextNode("window." + G + "=1;"))
            } catch (w) {}
            s.insertBefore(c, s.firstChild);
            if (aM[G]) {
                ag.support.scriptEval = true;
                delete aM[G]
            }
            s.removeChild(c);
            if (L.attachEvent && L.fireEvent) {
                L.attachEvent("onclick", function K() {
                    ag.support.noCloneEvent = false;
                    L.detachEvent("onclick", K)
                });
                L.cloneNode(true).fireEvent("onclick")
            }
            ag(function () {
                var M = N.createElement("div");
                M.style.width = M.style.paddingLeft = "1px";
                N.body.appendChild(M);
                ag.boxModel = ag.support.boxModel = M.offsetWidth === 2;
                N.body.removeChild(M).style.display = "none"
            });
            s = function (O) {
                var M = N.createElement("div");
                O = "on" + O;
                var P = O in M;
                if (!P) {
                    M.setAttribute(O, "return;");
                    P = typeof M[O] === "function"
                }
                return P
            };
            ag.support.submitBubbles = s("submit");
            ag.support.changeBubbles = s("change");
            s = c = L = H = A = null
        }
    })();
    ag.props = {
        "for": "htmlFor",
        "class": "className",
        readonly: "readOnly",
        maxlength: "maxLength",
        cellspacing: "cellSpacing",
        rowspan: "rowSpan",
        colspan: "colSpan",
        tabindex: "tabIndex",
        usemap: "useMap",
        frameborder: "frameBorder"
    };
    var aF = "jQuery" + aB(),
        a5 = 0,
        a4 = {},
        aQ = {};
    ag.extend({
        cache: {},
        expando: aF,
        noData: {
            embed: true,
            object: true,
            applet: true
        },
        data: function (s, c, G) {
            if (!(s.nodeName && ag.noData[s.nodeName.toLowerCase()])) {
                s = s == aM ? a4 : s;
                var w = s[aF],
                    A = ag.cache;
                if (!c && !w) {
                    return null
                }
                w || (w = ++a5);
                if (typeof c === "object") {
                    s[aF] = w;
                    A = A[w] = ag.extend(true, {}, c)
                } else {
                    A = A[w] ? A[w] : typeof G === "undefined" ? aQ : (A[w] = {})
                }
                if (G !== J) {
                    s[aF] = w;
                    A[c] = G
                }
                return typeof c === "string" ? A[c] : A
            }
        },
        removeData: function (s, c) {
            if (!(s.nodeName && ag.noData[s.nodeName.toLowerCase()])) {
                s = s == aM ? a4 : s;
                var H = s[aF],
                    A = ag.cache,
                    G = A[H];
                if (c) {
                    if (G) {
                        delete G[c];
                        ag.isEmptyObject(G) && ag.removeData(s)
                    }
                } else {
                    try {
                        delete s[aF]
                    } catch (w) {
                        s.removeAttribute && s.removeAttribute(aF)
                    }
                    delete A[H]
                }
            }
        }
    });
    ag.fn.extend({
        data: function (s, c) {
            if (typeof s === "undefined" && this.length) {
                return ag.data(this[0])
            } else {
                if (typeof s === "object") {
                    return this.each(function () {
                        ag.data(this, s)
                    })
                }
            }
            var A = s.split(".");
            A[1] = A[1] ? "." + A[1] : "";
            if (c === J) {
                var w = this.triggerHandler("getData" + A[1] + "!", [A[0]]);
                if (w === J && this.length) {
                    w = ag.data(this[0], s)
                }
                return w === J && A[1] ? this.data(A[0]) : w
            } else {
                return this.trigger("setData" + A[1] + "!", [A[0], c]).each(function () {
                    ag.data(this, s, c)
                })
            }
        },
        removeData: function (c) {
            return this.each(function () {
                ag.removeData(this, c)
            })
        }
    });
    ag.extend({
        queue: function (s, c, A) {
            if (s) {
                c = (c || "fx") + "queue";
                var w = ag.data(s, c);
                if (!A) {
                    return w || []
                }
                if (!w || ag.isArray(A)) {
                    w = ag.data(s, c, ag.makeArray(A))
                } else {
                    w.push(A)
                }
                return w
            }
        },
        dequeue: function (s, c) {
            c = c || "fx";
            var A = ag.queue(s, c),
                w = A.shift();
            if (w === "inprogress") {
                w = A.shift()
            }
            if (w) {
                c === "fx" && A.unshift("inprogress");
                w.call(s, function () {
                    ag.dequeue(s, c)
                })
            }
        }
    });
    ag.fn.extend({
        queue: function (s, c) {
            if (typeof s !== "string") {
                c = s;
                s = "fx"
            }
            if (c === J) {
                return ag.queue(this[0], s)
            }
            return this.each(function () {
                var w = ag.queue(this, s, c);
                s === "fx" && w[0] !== "inprogress" && ag.dequeue(this, s)
            })
        },
        dequeue: function (c) {
            return this.each(function () {
                ag.dequeue(this, c)
            })
        },
        delay: function (s, c) {
            s = ag.fx ? ag.fx.speeds[s] || s : s;
            c = c || "fx";
            return this.queue(c, function () {
                var w = this;
                setTimeout(function () {
                    ag.dequeue(w, c)
                }, s)
            })
        },
        clearQueue: function (c) {
            return this.queue(c || "fx", [])
        }
    });
    var aP = /[\n\t]/g,
        a8 = /\s+/,
        am = /\r/g,
        I = /href|src|style/,
        r = /(button|input)/i,
        e = /(button|input|object|select|textarea)/i,
        a6 = /^(a|area)$/i,
        a9 = /radio|checkbox/;
    ag.fn.extend({
        attr: function (s, c) {
            return aZ(this, s, c, true, ag.attr)
        },
        removeAttr: function (c) {
            return this.each(function () {
                ag.attr(this, c, "");
                this.nodeType === 1 && this.removeAttribute(c)
            })
        },
        addClass: function (s) {
            if (ag.isFunction(s)) {
                return this.each(function (M) {
                    var O = ag(this);
                    O.addClass(s.call(this, M, O.attr("class")))
                })
            }
            if (s && typeof s === "string") {
                for (var c = (s || "").split(a8), L = 0, G = this.length; L < G; L++) {
                    var H = this[L];
                    if (H.nodeType === 1) {
                        if (H.className) {
                            for (var A = " " + H.className + " ", w = 0, K = c.length; w < K; w++) {
                                if (A.indexOf(" " + c[w] + " ") < 0) {
                                    H.className += " " + c[w]
                                }
                            }
                        } else {
                            H.className = s
                        }
                    }
                }
            }
            return this
        },
        removeClass: function (s) {
            if (ag.isFunction(s)) {
                return this.each(function (M) {
                    var O = ag(this);
                    O.removeClass(s.call(this, M, O.attr("class")))
                })
            }
            if (s && typeof s === "string" || s === J) {
                for (var c = (s || "").split(a8), L = 0, G = this.length; L < G; L++) {
                    var H = this[L];
                    if (H.nodeType === 1 && H.className) {
                        if (s) {
                            for (var A = (" " + H.className + " ").replace(aP, " "), w = 0, K = c.length; w < K; w++) {
                                A = A.replace(" " + c[w] + " ", " ")
                            }
                            H.className = A.substring(1, A.length - 1)
                        } else {
                            H.className = ""
                        }
                    }
                }
            }
            return this
        },
        toggleClass: function (s, c) {
            var A = typeof s,
                w = typeof c === "boolean";
            if (ag.isFunction(s)) {
                return this.each(function (H) {
                    var G = ag(this);
                    G.toggleClass(s.call(this, H, G.attr("class"), c), c)
                })
            }
            return this.each(function () {
                if (A === "string") {
                    for (var L, H = 0, G = ag(this), M = c, K = s.split(a8); L = K[H++];) {
                        M = w ? M : !G.hasClass(L);
                        G[M ? "addClass" : "removeClass"](L)
                    }
                } else {
                    if (A === "undefined" || A === "boolean") {
                        this.className && ag.data(this, "__className__", this.className);
                        this.className = this.className || s === false ? "" : ag.data(this, "__className__") || ""
                    }
                }
            })
        },
        hasClass: function (s) {
            s = " " + s + " ";
            for (var c = 0, w = this.length; c < w; c++) {
                if ((" " + this[c].className + " ").replace(aP, " ").indexOf(s) > -1) {
                    return true
                }
            }
            return false
        },
        val: function (s) {
            if (s === J) {
                var c = this[0];
                if (c) {
                    if (ag.nodeName(c, "option")) {
                        return (c.attributes.value || {}).specified ? c.value : c.text
                    }
                    if (ag.nodeName(c, "select")) {
                        var L = c.selectedIndex,
                            G = [],
                            H = c.options;
                        c = c.type === "select-one";
                        if (L < 0) {
                            return null
                        }
                        var A = c ? L : 0;
                        for (L = c ? L + 1 : H.length; A < L; A++) {
                            var w = H[A];
                            if (w.selected) {
                                s = ag(w).val();
                                if (c) {
                                    return s
                                }
                                G.push(s)
                            }
                        }
                        return G
                    }
                    if (a9.test(c.type) && !ag.support.checkOn) {
                        return c.getAttribute("value") === null ? "on" : c.value
                    }
                    return (c.value || "").replace(am, "")
                }
                return J
            }
            var K = ag.isFunction(s);
            return this.each(function (O) {
                var Q = ag(this),
                    M = s;
                if (this.nodeType === 1) {
                    if (K) {
                        M = s.call(this, O, Q.val())
                    }
                    if (typeof M === "number") {
                        M += ""
                    }
                    if (ag.isArray(M) && a9.test(this.type)) {
                        this.checked = ag.inArray(Q.val(), M) >= 0
                    } else {
                        if (ag.nodeName(this, "select")) {
                            var P = ag.makeArray(M);
                            ag("option", this).each(function () {
                                this.selected = ag.inArray(ag(this).val(), P) >= 0
                            });
                            if (!P.length) {
                                this.selectedIndex = -1
                            }
                        } else {
                            this.value = M
                        }
                    }
                }
            })
        }
    });
    ag.extend({
        attrFn: {
            val: true,
            css: true,
            html: true,
            text: true,
            data: true,
            width: true,
            height: true,
            offset: true
        },
        attr: function (s, c, H, A) {
            if (!s || s.nodeType === 3 || s.nodeType === 8) {
                return J
            }
            if (A && c in ag.attrFn) {
                return ag(s)[c](H)
            }
            A = s.nodeType !== 1 || !ag.isXMLDoc(s);
            var G = H !== J;
            c = A && ag.props[c] || c;
            if (s.nodeType === 1) {
                var w = I.test(c);
                if (c in s && A && !w) {
                    if (G) {
                        if (c === "type" && r.test(s.nodeName) && s.parentNode) {
                            throw "type property can't be changed"
                        }
                        s[c] = H
                    }
                    if (ag.nodeName(s, "form") && s.getAttributeNode(c)) {
                        return s.getAttributeNode(c).nodeValue
                    }
                    if (c === "tabIndex") {
                        return (c = s.getAttributeNode("tabIndex")) && c.specified ? c.value : e.test(s.nodeName) || a6.test(s.nodeName) && s.href ? 0 : J
                    }
                    return s[c]
                }
                if (!ag.support.style && A && c === "style") {
                    if (G) {
                        s.style.cssText = "" + H
                    }
                    return s.style.cssText
                }
                G && s.setAttribute(c, "" + H);
                s = !ag.support.hrefNormalized && A && w ? s.getAttribute(c, 2) : s.getAttribute(c);
                return s === null ? J : s
            }
            return ag.style(s, c, H)
        }
    });
    var aK = function (c) {
            return c.replace(/[^\w\s\.\|`]/g, function (s) {
                return "\\" + s
            })
        };
    ag.event = {
        add: function (P, O, L, H) {
            if (!(P.nodeType === 3 || P.nodeType === 8)) {
                if (P.setInterval && P !== aM && !P.frameElement) {
                    P = aM
                }
                if (!L.guid) {
                    L.guid = ag.guid++
                }
                if (H !== J) {
                    L = ag.proxy(L);
                    L.data = H
                }
                var K = ag.data(P, "events") || ag.data(P, "events", {}),
                    G = ag.data(P, "handle"),
                    A;
                if (!G) {
                    A = function () {
                        return typeof ag !== "undefined" && !ag.event.triggered ? ag.event.handle.apply(A.elem, arguments) : J
                    };
                    G = ag.data(P, "handle", A)
                }
                if (G) {
                    G.elem = P;
                    O = O.split(/\s+/);
                    for (var s, c = 0; s = O[c++];) {
                        var w = s.split(".");
                        s = w.shift();
                        L.type = w.slice(0).sort().join(".");
                        var Q = K[s],
                            M = this.special[s] || {};
                        if (!Q) {
                            Q = K[s] = {};
                            if (!M.setup || M.setup.call(P, H, w, L) === false) {
                                if (P.addEventListener) {
                                    P.addEventListener(s, G, false)
                                } else {
                                    P.attachEvent && P.attachEvent("on" + s, G)
                                }
                            }
                        }
                        if (M.add) {
                            if ((w = M.add.call(P, L, H, w, Q)) && ag.isFunction(w)) {
                                w.guid = w.guid || L.guid;
                                L = w
                            }
                        }
                        Q[L.guid] = L;
                        this.global[s] = true
                    }
                    P = null
                }
            }
        },
        global: {},
        remove: function (Q, P, M) {
            if (!(Q.nodeType === 3 || Q.nodeType === 8)) {
                var K = ag.data(Q, "events"),
                    L, H, G;
                if (K) {
                    if (P === J || typeof P === "string" && P.charAt(0) === ".") {
                        for (H in K) {
                            this.remove(Q, H + (P || ""))
                        }
                    } else {
                        if (P.type) {
                            M = P.handler;
                            P = P.type
                        }
                        P = P.split(/\s+/);
                        for (var w = 0; H = P[w++];) {
                            var s = H.split(".");
                            H = s.shift();
                            var A = !s.length,
                                R = ag.map(s.slice(0).sort(), aK);
                            R = new RegExp("(^|\\.)" + R.join("\\.(?:.*\\.)?") + "(\\.|$)");
                            var O = this.special[H] || {};
                            if (K[H]) {
                                if (M) {
                                    G = K[H][M.guid];
                                    delete K[H][M.guid]
                                } else {
                                    for (var c in K[H]) {
                                        if (A || R.test(K[H][c].type)) {
                                            delete K[H][c]
                                        }
                                    }
                                }
                                O.remove && O.remove.call(Q, s, G);
                                for (L in K[H]) {
                                    break
                                }
                                if (!L) {
                                    if (!O.teardown || O.teardown.call(Q, s) === false) {
                                        if (Q.removeEventListener) {
                                            Q.removeEventListener(H, ag.data(Q, "handle"), false)
                                        } else {
                                            Q.detachEvent && Q.detachEvent("on" + H, ag.data(Q, "handle"))
                                        }
                                    }
                                    L = null;
                                    delete K[H]
                                }
                            }
                        }
                    }
                    for (L in K) {
                        break
                    }
                    if (!L) {
                        if (c = ag.data(Q, "handle")) {
                            c.elem = null
                        }
                        ag.removeData(Q, "events");
                        ag.removeData(Q, "handle")
                    }
                }
            }
        },
        trigger: function (O, M, L, H) {
            var K = O.type || O;
            if (!H) {
                O = typeof O === "object" ? O[aF] ? O : ag.extend(ag.Event(K), O) : ag.Event(K);
                if (K.indexOf("!") >= 0) {
                    O.type = K = K.slice(0, -1);
                    O.exclusive = true
                }
                if (!L) {
                    O.stopPropagation();
                    this.global[K] && ag.each(ag.cache, function () {
                        this.events && this.events[K] && ag.event.trigger(O, M, this.handle.elem)
                    })
                }
                if (!L || L.nodeType === 3 || L.nodeType === 8) {
                    return J
                }
                O.result = J;
                O.target = L;
                M = ag.makeArray(M);
                M.unshift(O)
            }
            O.currentTarget = L;
            var G = ag.data(L, "handle");
            G && G.apply(L, M);
            var A, s;
            try {
                if (!(L && L.nodeName && ag.noData[L.nodeName.toLowerCase()])) {
                    A = L[K];
                    s = L["on" + K]
                }
            } catch (c) {}
            G = ag.nodeName(L, "a") && K === "click";
            if (!H && A && !O.isDefaultPrevented() && !G) {
                this.triggered = true;
                try {
                    L[K]()
                } catch (w) {}
            } else {
                if (s && L["on" + K].apply(L, M) === false) {
                    O.result = false
                }
            }
            this.triggered = false;
            if (!O.isPropagationStopped()) {
                (L = L.parentNode || L.ownerDocument) && ag.event.trigger(O, M, L, true)
            }
        },
        handle: function (s) {
            var c, H;
            s = arguments[0] = ag.event.fix(s || aM.event);
            s.currentTarget = this;
            H = s.type.split(".");
            s.type = H.shift();
            c = !H.length && !s.exclusive;
            var A = new RegExp("(^|\\.)" + H.slice(0).sort().join("\\.(?:.*\\.)?") + "(\\.|$)");
            H = (ag.data(this, "events") || {})[s.type];
            for (var G in H) {
                var w = H[G];
                if (c || A.test(w.type)) {
                    s.handler = w;
                    s.data = w.data;
                    w = w.apply(this, arguments);
                    if (w !== J) {
                        s.result = w;
                        if (w === false) {
                            s.preventDefault();
                            s.stopPropagation()
                        }
                    }
                    if (s.isImmediatePropagationStopped()) {
                        break
                    }
                }
            }
            return s.result
        },
        props: "altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
        fix: function (s) {
            if (s[aF]) {
                return s
            }
            var c = s;
            s = ag.Event(c);
            for (var A = this.props.length, w; A;) {
                w = this.props[--A];
                s[w] = c[w]
            }
            if (!s.target) {
                s.target = s.srcElement || N
            }
            if (s.target.nodeType === 3) {
                s.target = s.target.parentNode
            }
            if (!s.relatedTarget && s.fromElement) {
                s.relatedTarget = s.fromElement === s.target ? s.toElement : s.fromElement
            }
            if (s.pageX == null && s.clientX != null) {
                c = N.documentElement;
                A = N.body;
                s.pageX = s.clientX + (c && c.scrollLeft || A && A.scrollLeft || 0) - (c && c.clientLeft || A && A.clientLeft || 0);
                s.pageY = s.clientY + (c && c.scrollTop || A && A.scrollTop || 0) - (c && c.clientTop || A && A.clientTop || 0)
            }
            if (!s.which && (s.charCode || s.charCode === 0 ? s.charCode : s.keyCode)) {
                s.which = s.charCode || s.keyCode
            }
            if (!s.metaKey && s.ctrlKey) {
                s.metaKey = s.ctrlKey
            }
            if (!s.which && s.button !== J) {
                s.which = s.button & 1 ? 1 : s.button & 2 ? 3 : s.button & 4 ? 2 : 0
            }
            return s
        },
        guid: 100000000,
        proxy: ag.proxy,
        special: {
            ready: {
                setup: ag.bindReady,
                teardown: ag.noop
            },
            live: {
                add: function (s, c) {
                    ag.extend(s, c || {});
                    s.guid += c.selector + c.live;
                    ag.event.add(this, c.live, m, c)
                },
                remove: function (s) {
                    if (s.length) {
                        var c = 0,
                            w = new RegExp("(^|\\.)" + s[0] + "(\\.|$)");
                        ag.each(ag.data(this, "events").live || {}, function () {
                            w.test(this.type) && c++
                        });
                        c < 1 && ag.event.remove(this, s[0], m)
                    }
                },
                special: {}
            },
            beforeunload: {
                setup: function (s, c, w) {
                    if (this.setInterval) {
                        this.onbeforeunload = w
                    }
                    return false
                },
                teardown: function (s, c) {
                    if (this.onbeforeunload === c) {
                        this.onbeforeunload = null
                    }
                }
            }
        }
    };
    ag.Event = function (c) {
        if (!this.preventDefault) {
            return new ag.Event(c)
        }
        if (c && c.type) {
            this.originalEvent = c;
            this.type = c.type
        } else {
            this.type = c
        }
        this.timeStamp = aB();
        this[aF] = true
    };
    ag.Event.prototype = {
        preventDefault: function () {
            this.isDefaultPrevented = ay;
            var c = this.originalEvent;
            if (c) {
                c.preventDefault && c.preventDefault();
                c.returnValue = false
            }
        },
        stopPropagation: function () {
            this.isPropagationStopped = ay;
            var c = this.originalEvent;
            if (c) {
                c.stopPropagation && c.stopPropagation();
                c.cancelBubble = true
            }
        },
        stopImmediatePropagation: function () {
            this.isImmediatePropagationStopped = ay;
            this.stopPropagation()
        },
        isDefaultPrevented: aS,
        isPropagationStopped: aS,
        isImmediatePropagationStopped: aS
    };
    var aV = function (s) {
            for (var c = s.relatedTarget; c && c !== this;) {
                try {
                    c = c.parentNode
                } catch (w) {
                    break
                }
            }
            if (c !== this) {
                s.type = s.data;
                ag.event.handle.apply(this, arguments)
            }
        },
        aE = function (c) {
            c.type = c.data;
            ag.event.handle.apply(this, arguments)
        };
    ag.each({
        mouseenter: "mouseover",
        mouseleave: "mouseout"
    }, function (s, c) {
        ag.event.special[s] = {
            setup: function (w) {
                ag.event.add(this, c, w && w.selector ? aE : aV, s)
            },
            teardown: function (w) {
                ag.event.remove(this, c, w && w.selector ? aE : aV)
            }
        }
    });
    if (!ag.support.submitBubbles) {
        ag.event.special.submit = {
            setup: function (s, c, w) {
                if (this.nodeName.toLowerCase() !== "form") {
                    ag.event.add(this, "click.specialSubmit." + w.guid, function (G) {
                        var H = G.target,
                            A = H.type;
                        if ((A === "submit" || A === "image") && ag(H).closest("form").length) {
                            return B("submit", this, arguments)
                        }
                    });
                    ag.event.add(this, "keypress.specialSubmit." + w.guid, function (G) {
                        var H = G.target,
                            A = H.type;
                        if ((A === "text" || A === "password") && ag(H).closest("form").length && G.keyCode === 13) {
                            return B("submit", this, arguments)
                        }
                    })
                } else {
                    return false
                }
            },
            remove: function (s, c) {
                ag.event.remove(this, "click.specialSubmit" + (c ? "." + c.guid : ""));
                ag.event.remove(this, "keypress.specialSubmit" + (c ? "." + c.guid : ""))
            }
        }
    }
    if (!ag.support.changeBubbles) {
        var aU = /textarea|input|select/i;

        function ad(s) {
            var c = s.type,
                w = s.value;
            if (c === "radio" || c === "checkbox") {
                w = s.checked
            } else {
                if (c === "select-multiple") {
                    w = s.selectedIndex > -1 ? ag.map(s.options, function (A) {
                        return A.selected
                    }).join("-") : ""
                } else {
                    if (s.nodeName.toLowerCase() === "select") {
                        w = s.selectedIndex
                    }
                }
            }
            return w
        }
        function aD(s, c) {
            var G = s.target,
                w, A;
            if (!(!aU.test(G.nodeName) || G.readOnly)) {
                w = ag.data(G, "_change_data");
                A = ad(G);
                if (A !== w) {
                    if (s.type !== "focusout" || G.type !== "radio") {
                        ag.data(G, "_change_data", A)
                    }
                    if (G.type !== "select" && (w != null || A)) {
                        s.type = "change";
                        return ag.event.trigger(s, c, this)
                    }
                }
            }
        }
        ag.event.special.change = {
            filters: {
                focusout: aD,
                click: function (s) {
                    var c = s.target,
                        w = c.type;
                    if (w === "radio" || w === "checkbox" || c.nodeName.toLowerCase() === "select") {
                        return aD.call(this, s)
                    }
                },
                keydown: function (s) {
                    var c = s.target,
                        w = c.type;
                    if (s.keyCode === 13 && c.nodeName.toLowerCase() !== "textarea" || s.keyCode === 32 && (w === "checkbox" || w === "radio") || w === "select-multiple") {
                        return aD.call(this, s)
                    }
                },
                beforeactivate: function (c) {
                    c = c.target;
                    c.nodeName.toLowerCase() === "input" && c.type === "radio" && ag.data(c, "_change_data", ad(c))
                }
            },
            setup: function (s, c, A) {
                for (var w in ao) {
                    ag.event.add(this, w + ".specialChange." + A.guid, ao[w])
                }
                return aU.test(this.nodeName)
            },
            remove: function (s, c) {
                for (var w in ao) {
                    ag.event.remove(this, w + ".specialChange" + (c ? "." + c.guid : ""), ao[w])
                }
                return aU.test(this.nodeName)
            }
        };
        var ao = ag.event.special.change.filters
    }
    N.addEventListener && ag.each({
        focus: "focusin",
        blur: "focusout"
    }, function (s, c) {
        function w(A) {
            A = ag.event.fix(A);
            A.type = c;
            return ag.event.handle.call(this, A)
        }
        ag.event.special[c] = {
            setup: function () {
                this.addEventListener(s, w, true)
            },
            teardown: function () {
                this.removeEventListener(s, w, true)
            }
        }
    });
    ag.each(["bind", "one"], function (s, c) {
        ag.fn[c] = function (K, G, H) {
            if (typeof K === "object") {
                for (var A in K) {
                    this[c](A, G, K[A], H)
                }
                return this
            }
            if (ag.isFunction(G)) {
                thisObject = H;
                H = G;
                G = J
            }
            var w = c === "one" ? ag.proxy(H, function (L) {
                ag(this).unbind(L, w);
                return H.apply(this, arguments)
            }) : H;
            return K === "unload" && c !== "one" ? this.one(K, G, H, thisObject) : this.each(function () {
                ag.event.add(this, K, w, G)
            })
        }
    });
    ag.fn.extend({
        unbind: function (s, c) {
            if (typeof s === "object" && !s.preventDefault) {
                for (var w in s) {
                    this.unbind(w, s[w])
                }
                return this
            }
            return this.each(function () {
                ag.event.remove(this, s, c)
            })
        },
        trigger: function (s, c) {
            return this.each(function () {
                ag.event.trigger(s, c, this)
            })
        },
        triggerHandler: function (s, c) {
            if (this[0]) {
                s = ag.Event(s);
                s.preventDefault();
                s.stopPropagation();
                ag.event.trigger(s, c, this[0]);
                return s.result
            }
        },
        toggle: function (s) {
            for (var c = arguments, w = 1; w < c.length;) {
                ag.proxy(s, c[w++])
            }
            return this.click(ag.proxy(s, function (A) {
                var G = (ag.data(this, "lastToggle" + s.guid) || 0) % w;
                ag.data(this, "lastToggle" + s.guid, G + 1);
                A.preventDefault();
                return c[G].apply(this, arguments) || false
            }))
        },
        hover: function (s, c) {
            return this.mouseenter(s).mouseleave(c || s)
        },
        live: function (s, c, w) {
            if (ag.isFunction(c)) {
                w = c;
                c = J
            }
            ag(this.context).bind(bg(s, this.selector), {
                data: c,
                selector: this.selector,
                live: s
            }, w);
            return this
        },
        die: function (s, c) {
            ag(this.context).unbind(bg(s, this.selector), c ? {
                guid: c.guid + this.selector + s
            } : null);
            return this
        }
    });
    ag.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "), function (s, c) {
        ag.fn[c] = function (w) {
            return w ? this.bind(c, w) : this.trigger(c)
        };
        if (ag.attrFn) {
            ag.attrFn[c] = true
        }
    });
    aM.attachEvent && !aM.addEventListener && aM.attachEvent("onunload", function () {
        for (var s in ag.cache) {
            if (ag.cache[s].handle) {
                try {
                    ag.event.remove(ag.cache[s].handle.elem)
                } catch (c) {}
            }
        }
    });
    (function () {
        function Y(ba) {
            for (var ab = "", aa, Z = 0; ba[Z]; Z++) {
                aa = ba[Z];
                if (aa.nodeType === 3 || aa.nodeType === 4) {
                    ab += aa.nodeValue
                } else {
                    if (aa.nodeType !== 8) {
                        ab += Y(aa.childNodes)
                    }
                }
            }
            return ab
        }
        function W(bi, bb, ba, ab, Z, aa) {
            Z = 0;
            for (var bk = ab.length; Z < bk; Z++) {
                var bl = ab[Z];
                if (bl) {
                    bl = bl[bi];
                    for (var bj = false; bl;) {
                        if (bl.sizcache === ba) {
                            bj = ab[bl.sizset];
                            break
                        }
                        if (bl.nodeType === 1 && !aa) {
                            bl.sizcache = ba;
                            bl.sizset = Z
                        }
                        if (bl.nodeName.toLowerCase() === bb) {
                            bj = bl;
                            break
                        }
                        bl = bl[bi]
                    }
                    ab[Z] = bj
                }
            }
        }
        function V(bi, bb, ba, ab, Z, aa) {
            Z = 0;
            for (var bk = ab.length; Z < bk; Z++) {
                var bl = ab[Z];
                if (bl) {
                    bl = bl[bi];
                    for (var bj = false; bl;) {
                        if (bl.sizcache === ba) {
                            bj = ab[bl.sizset];
                            break
                        }
                        if (bl.nodeType === 1) {
                            if (!aa) {
                                bl.sizcache = ba;
                                bl.sizset = Z
                            }
                            if (typeof bb !== "string") {
                                if (bl === bb) {
                                    bj = true;
                                    break
                                }
                            } else {
                                if (L.filter(bb, [bl]).length > 0) {
                                    bj = bl;
                                    break
                                }
                            }
                        }
                        bl = bl[bi]
                    }
                    ab[Z] = bj
                }
            }
        }
        var T = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
            U = 0,
            R = Object.prototype.toString,
            Q = false,
            M = true;
        [0, 0].sort(function () {
            M = false;
            return 0
        });
        var L = function (bj, bi, ba, ab) {
                ba = ba || [];
                var Z = bi = bi || N;
                if (bi.nodeType !== 1 && bi.nodeType !== 9) {
                    return []
                }
                if (!bj || typeof bj !== "string") {
                    return ba
                }
                for (var aa = [], bo, bp, bl, bb, bn = true, bk = s(bi), bm = bj;
                (T.exec(""), bo = T.exec(bm)) !== null;) {
                    bm = bo[3];
                    aa.push(bo[1]);
                    if (bo[2]) {
                        bb = bo[3];
                        break
                    }
                }
                if (aa.length > 1 && A.exec(bj)) {
                    if (aa.length === 2 && O.relative[aa[0]]) {
                        bp = P(aa[0] + aa[1], bi)
                    } else {
                        for (bp = O.relative[aa[0]] ? [bi] : L(aa.shift(), bi); aa.length;) {
                            bj = aa.shift();
                            if (O.relative[bj]) {
                                bj += aa.shift()
                            }
                            bp = P(bj, bp)
                        }
                    }
                } else {
                    if (!ab && aa.length > 1 && bi.nodeType === 9 && !bk && O.match.ID.test(aa[0]) && !O.match.ID.test(aa[aa.length - 1])) {
                        bo = L.find(aa.shift(), bi, bk);
                        bi = bo.expr ? L.filter(bo.expr, bo.set)[0] : bo.set[0]
                    }
                    if (bi) {
                        bo = ab ? {
                            expr: aa.pop(),
                            set: K(ab)
                        } : L.find(aa.pop(), aa.length === 1 && (aa[0] === "~" || aa[0] === "+") && bi.parentNode ? bi.parentNode : bi, bk);
                        bp = bo.expr ? L.filter(bo.expr, bo.set) : bo.set;
                        if (aa.length > 0) {
                            bl = K(bp)
                        } else {
                            bn = false
                        }
                        for (; aa.length;) {
                            var bq = aa.pop();
                            bo = bq;
                            if (O.relative[bq]) {
                                bo = aa.pop()
                            } else {
                                bq = ""
                            }
                            if (bo == null) {
                                bo = bi
                            }
                            O.relative[bq](bl, bo, bk)
                        }
                    } else {
                        bl = []
                    }
                }
                bl || (bl = bp);
                if (!bl) {
                    throw "Syntax error, unrecognized expression: " + (bq || bj)
                }
                if (R.call(bl) === "[object Array]") {
                    if (bn) {
                        if (bi && bi.nodeType === 1) {
                            for (bj = 0; bl[bj] != null; bj++) {
                                if (bl[bj] && (bl[bj] === true || bl[bj].nodeType === 1 && w(bi, bl[bj]))) {
                                    ba.push(bp[bj])
                                }
                            }
                        } else {
                            for (bj = 0; bl[bj] != null; bj++) {
                                bl[bj] && bl[bj].nodeType === 1 && ba.push(bp[bj])
                            }
                        }
                    } else {
                        ba.push.apply(ba, bl)
                    }
                } else {
                    K(bl, ba)
                }
                if (bb) {
                    L(bb, Z, ba, ab);
                    L.uniqueSort(ba)
                }
                return ba
            };
        L.uniqueSort = function (aa) {
            if (G) {
                Q = M;
                aa.sort(G);
                if (Q) {
                    for (var Z = 1; Z < aa.length; Z++) {
                        aa[Z] === aa[Z - 1] && aa.splice(Z--, 1)
                    }
                }
            }
            return aa
        };
        L.matches = function (aa, Z) {
            return L(aa, null, null, Z)
        };
        L.find = function (bi, bb, ba) {
            var ab, Z;
            if (!bi) {
                return []
            }
            for (var aa = 0, bk = O.order.length; aa < bk; aa++) {
                var bl = O.order[aa];
                if (Z = O.leftMatch[bl].exec(bi)) {
                    var bj = Z[1];
                    Z.splice(1, 1);
                    if (bj.substr(bj.length - 1) !== "\\") {
                        Z[1] = (Z[1] || "").replace(/\\/g, "");
                        ab = O.find[bl](Z, bb, ba);
                        if (ab != null) {
                            bi = bi.replace(O.match[bl], "");
                            break
                        }
                    }
                }
            }
            ab || (ab = bb.getElementsByTagName("*"));
            return {
                set: ab,
                expr: bi
            }
        };
        L.filter = function (bk, bj, bb, ba) {
            for (var Z = bk, aa = [], bq = bj, br, bm, bi = bj && bj[0] && s(bj[0]); bk && bj.length;) {
                for (var bp in O.filter) {
                    if ((br = O.leftMatch[bp].exec(bk)) != null && br[2]) {
                        var bl = O.filter[bp],
                            bo, bs;
                        bs = br[1];
                        bm = false;
                        br.splice(1, 1);
                        if (bs.substr(bs.length - 1) !== "\\") {
                            if (bq === aa) {
                                aa = []
                            }
                            if (O.preFilter[bp]) {
                                if (br = O.preFilter[bp](br, bq, bb, aa, ba, bi)) {
                                    if (br === true) {
                                        continue
                                    }
                                } else {
                                    bm = bo = true
                                }
                            }
                            if (br) {
                                for (var ab = 0;
                                (bs = bq[ab]) != null; ab++) {
                                    if (bs) {
                                        bo = bl(bs, br, ab, bq);
                                        var bn = ba ^ !! bo;
                                        if (bb && bo != null) {
                                            if (bn) {
                                                bm = true
                                            } else {
                                                bq[ab] = false
                                            }
                                        } else {
                                            if (bn) {
                                                aa.push(bs);
                                                bm = true
                                            }
                                        }
                                    }
                                }
                            }
                            if (bo !== J) {
                                bb || (bq = aa);
                                bk = bk.replace(O.match[bp], "");
                                if (!bm) {
                                    return []
                                }
                                break
                            }
                        }
                    }
                }
                if (bk === Z) {
                    if (bm == null) {
                        throw "Syntax error, unrecognized expression: " + bk
                    } else {
                        break
                    }
                }
                Z = bk
            }
            return bq
        };
        var O = L.selectors = {
            order: ["ID", "NAME", "TAG"],
            match: {
                ID: /#((?:[\w\u00c0-\uFFFF-]|\\.)+)/,
                CLASS: /\.((?:[\w\u00c0-\uFFFF-]|\\.)+)/,
                NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['"]*\]/,
                ATTR: /\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,
                TAG: /^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)/,
                CHILD: /:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,
                POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,
                PSEUDO: /:((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/
            },
            leftMatch: {},
            attrMap: {
                "class": "className",
                "for": "htmlFor"
            },
            attrHandle: {
                href: function (Z) {
                    return Z.getAttribute("href")
                }
            },
            relative: {
                "+": function (bb, ab) {
                    var aa = typeof ab === "string",
                        Z = aa && !/\W/.test(ab);
                    aa = aa && !Z;
                    if (Z) {
                        ab = ab.toLowerCase()
                    }
                    Z = 0;
                    for (var ba = bb.length, bi; Z < ba; Z++) {
                        if (bi = bb[Z]) {
                            for (;
                            (bi = bi.previousSibling) && bi.nodeType !== 1;) {}
                            bb[Z] = aa || bi && bi.nodeName.toLowerCase() === ab ? bi || false : bi === ab
                        }
                    }
                    aa && L.filter(ab, bb, true)
                },
                ">": function (bb, ab) {
                    var aa = typeof ab === "string";
                    if (aa && !/\W/.test(ab)) {
                        ab = ab.toLowerCase();
                        for (var Z = 0, ba = bb.length; Z < ba; Z++) {
                            var bi = bb[Z];
                            if (bi) {
                                aa = bi.parentNode;
                                bb[Z] = aa.nodeName.toLowerCase() === ab ? aa : false
                            }
                        }
                    } else {
                        Z = 0;
                        for (ba = bb.length; Z < ba; Z++) {
                            if (bi = bb[Z]) {
                                bb[Z] = aa ? bi.parentNode : bi.parentNode === ab
                            }
                        }
                        aa && L.filter(ab, bb, true)
                    }
                },
                "": function (bb, ab, aa) {
                    var Z = U++,
                        ba = V;
                    if (typeof ab === "string" && !/\W/.test(ab)) {
                        var bi = ab = ab.toLowerCase();
                        ba = W
                    }
                    ba("parentNode", ab, Z, bb, bi, aa)
                },
                "~": function (bb, ab, aa) {
                    var Z = U++,
                        ba = V;
                    if (typeof ab === "string" && !/\W/.test(ab)) {
                        var bi = ab = ab.toLowerCase();
                        ba = W
                    }
                    ba("previousSibling", ab, Z, bb, bi, aa)
                }
            },
            find: {
                ID: function (ab, aa, Z) {
                    if (typeof aa.getElementById !== "undefined" && !Z) {
                        return (ab = aa.getElementById(ab[1])) ? [ab] : []
                    }
                },
                NAME: function (bb, ab) {
                    if (typeof ab.getElementsByName !== "undefined") {
                        var aa = [];
                        ab = ab.getElementsByName(bb[1]);
                        for (var Z = 0, ba = ab.length; Z < ba; Z++) {
                            ab[Z].getAttribute("name") === bb[1] && aa.push(ab[Z])
                        }
                        return aa.length === 0 ? null : aa
                    }
                },
                TAG: function (aa, Z) {
                    return Z.getElementsByTagName(aa[1])
                }
            },
            preFilter: {
                CLASS: function (bi, ba, ab, Z, bb, bj) {
                    bi = " " + bi[1].replace(/\\/g, "") + " ";
                    if (bj) {
                        return bi
                    }
                    bj = 0;
                    for (var aa;
                    (aa = ba[bj]) != null; bj++) {
                        if (aa) {
                            if (bb ^ (aa.className && (" " + aa.className + " ").replace(/[\t\n]/g, " ").indexOf(bi) >= 0)) {
                                ab || Z.push(aa)
                            } else {
                                if (ab) {
                                    ba[bj] = false
                                }
                            }
                        }
                    }
                    return false
                },
                ID: function (Z) {
                    return Z[1].replace(/\\/g, "")
                },
                TAG: function (Z) {
                    return Z[1].toLowerCase()
                },
                CHILD: function (aa) {
                    if (aa[1] === "nth") {
                        var Z = /(-?)(\d*)n((?:\+|-)?\d*)/.exec(aa[2] === "even" && "2n" || aa[2] === "odd" && "2n+1" || !/\D/.test(aa[2]) && "0n+" + aa[2] || aa[2]);
                        aa[2] = Z[1] + (Z[2] || 1) - 0;
                        aa[3] = Z[3] - 0
                    }
                    aa[0] = U++;
                    return aa
                },
                ATTR: function (bb, ab, aa, Z, ba, bi) {
                    ab = bb[1].replace(/\\/g, "");
                    if (!bi && O.attrMap[ab]) {
                        bb[1] = O.attrMap[ab]
                    }
                    if (bb[2] === "~=") {
                        bb[4] = " " + bb[4] + " "
                    }
                    return bb
                },
                PSEUDO: function (bb, ab, aa, Z, ba) {
                    if (bb[1] === "not") {
                        if ((T.exec(bb[3]) || "").length > 1 || /^\w/.test(bb[3])) {
                            bb[3] = L(bb[3], null, null, ab)
                        } else {
                            bb = L.filter(bb[3], ab, aa, true ^ ba);
                            aa || Z.push.apply(Z, bb);
                            return false
                        }
                    } else {
                        if (O.match.POS.test(bb[0]) || O.match.CHILD.test(bb[0])) {
                            return true
                        }
                    }
                    return bb
                },
                POS: function (Z) {
                    Z.unshift(true);
                    return Z
                }
            },
            filters: {
                enabled: function (Z) {
                    return Z.disabled === false && Z.type !== "hidden"
                },
                disabled: function (Z) {
                    return Z.disabled === true
                },
                checked: function (Z) {
                    return Z.checked === true
                },
                selected: function (Z) {
                    return Z.selected === true
                },
                parent: function (Z) {
                    return !!Z.firstChild
                },
                empty: function (Z) {
                    return !Z.firstChild
                },
                has: function (ab, aa, Z) {
                    return !!L(Z[3], ab).length
                },
                header: function (Z) {
                    return /h\d/i.test(Z.nodeName)
                },
                text: function (Z) {
                    return "text" === Z.type
                },
                radio: function (Z) {
                    return "radio" === Z.type
                },
                checkbox: function (Z) {
                    return "checkbox" === Z.type
                },
                file: function (Z) {
                    return "file" === Z.type
                },
                password: function (Z) {
                    return "password" === Z.type
                },
                submit: function (Z) {
                    return "submit" === Z.type
                },
                image: function (Z) {
                    return "image" === Z.type
                },
                reset: function (Z) {
                    return "reset" === Z.type
                },
                button: function (Z) {
                    return "button" === Z.type || Z.nodeName.toLowerCase() === "button"
                },
                input: function (Z) {
                    return /input|select|textarea|button/i.test(Z.nodeName)
                }
            },
            setFilters: {
                first: function (aa, Z) {
                    return Z === 0
                },
                last: function (ba, ab, aa, Z) {
                    return ab === Z.length - 1
                },
                even: function (aa, Z) {
                    return Z % 2 === 0
                },
                odd: function (aa, Z) {
                    return Z % 2 === 1
                },
                lt: function (ab, aa, Z) {
                    return aa < Z[3] - 0
                },
                gt: function (ab, aa, Z) {
                    return aa > Z[3] - 0
                },
                nth: function (ab, aa, Z) {
                    return Z[3] - 0 === aa
                },
                eq: function (ab, aa, Z) {
                    return Z[3] - 0 === aa
                }
            },
            filter: {
                PSEUDO: function (bb, ab, aa, Z) {
                    var ba = ab[1],
                        bi = O.filters[ba];
                    if (bi) {
                        return bi(bb, aa, ab, Z)
                    } else {
                        if (ba === "contains") {
                            return (bb.textContent || bb.innerText || Y([bb]) || "").indexOf(ab[3]) >= 0
                        } else {
                            if (ba === "not") {
                                ab = ab[3];
                                aa = 0;
                                for (Z = ab.length; aa < Z; aa++) {
                                    if (ab[aa] === bb) {
                                        return false
                                    }
                                }
                                return true
                            } else {
                                throw "Syntax error, unrecognized expression: " + ba
                            }
                        }
                    }
                },
                CHILD: function (bi, ba) {
                    var ab = ba[1],
                        Z = bi;
                    switch (ab) {
                    case "only":
                    case "first":
                        for (; Z = Z.previousSibling;) {
                            if (Z.nodeType === 1) {
                                return false
                            }
                        }
                        if (ab === "first") {
                            return true
                        }
                        Z = bi;
                    case "last":
                        for (; Z = Z.nextSibling;) {
                            if (Z.nodeType === 1) {
                                return false
                            }
                        }
                        return true;
                    case "nth":
                        ab = ba[2];
                        var bb = ba[3];
                        if (ab === 1 && bb === 0) {
                            return true
                        }
                        ba = ba[0];
                        var bj = bi.parentNode;
                        if (bj && (bj.sizcache !== ba || !bi.nodeIndex)) {
                            var aa = 0;
                            for (Z = bj.firstChild; Z; Z = Z.nextSibling) {
                                if (Z.nodeType === 1) {
                                    Z.nodeIndex = ++aa
                                }
                            }
                            bj.sizcache = ba
                        }
                        bi = bi.nodeIndex - bb;
                        return ab === 0 ? bi === 0 : bi % ab === 0 && bi / ab >= 0
                    }
                },
                ID: function (aa, Z) {
                    return aa.nodeType === 1 && aa.getAttribute("id") === Z
                },
                TAG: function (aa, Z) {
                    return Z === "*" && aa.nodeType === 1 || aa.nodeName.toLowerCase() === Z
                },
                CLASS: function (aa, Z) {
                    return (" " + (aa.className || aa.getAttribute("class")) + " ").indexOf(Z) > -1
                },
                ATTR: function (ba, ab) {
                    var aa = ab[1];
                    ba = O.attrHandle[aa] ? O.attrHandle[aa](ba) : ba[aa] != null ? ba[aa] : ba.getAttribute(aa);
                    aa = ba + "";
                    var Z = ab[2];
                    ab = ab[4];
                    return ba == null ? Z === "!=" : Z === "=" ? aa === ab : Z === "*=" ? aa.indexOf(ab) >= 0 : Z === "~=" ? (" " + aa + " ").indexOf(ab) >= 0 : !ab ? aa && ba !== false : Z === "!=" ? aa !== ab : Z === "^=" ? aa.indexOf(ab) === 0 : Z === "$=" ? aa.substr(aa.length - ab.length) === ab : Z === "|=" ? aa === ab || aa.substr(0, ab.length + 1) === ab + "-" : false
                },
                POS: function (bb, ab, aa, Z) {
                    var ba = O.setFilters[ab[2]];
                    if (ba) {
                        return ba(bb, aa, ab, Z)
                    }
                }
            }
        },
            A = O.match.POS;
        for (var c in O.match) {
            O.match[c] = new RegExp(O.match[c].source + /(?![^\[]*\])(?![^\(]*\))/.source);
            O.leftMatch[c] = new RegExp(/(^(?:.|\r|\n)*?)/.source + O.match[c].source.replace(/\\(\d+)/g, function (aa, Z) {
                return "\\" + (Z - 0 + 1)
            }))
        }
        var K = function (aa, Z) {
                aa = Array.prototype.slice.call(aa, 0);
                if (Z) {
                    Z.push.apply(Z, aa);
                    return Z
                }
                return aa
            };
        try {
            Array.prototype.slice.call(N.documentElement.childNodes, 0)
        } catch (H) {
            K = function (ba, ab) {
                ab = ab || [];
                if (R.call(ba) === "[object Array]") {
                    Array.prototype.push.apply(ab, ba)
                } else {
                    if (typeof ba.length === "number") {
                        for (var aa = 0, Z = ba.length; aa < Z; aa++) {
                            ab.push(ba[aa])
                        }
                    } else {
                        for (aa = 0; ba[aa]; aa++) {
                            ab.push(ba[aa])
                        }
                    }
                }
                return ab
            }
        }
        var G;
        if (N.documentElement.compareDocumentPosition) {
            G = function (aa, Z) {
                if (!aa.compareDocumentPosition || !Z.compareDocumentPosition) {
                    if (aa == Z) {
                        Q = true
                    }
                    return aa.compareDocumentPosition ? -1 : 1
                }
                aa = aa.compareDocumentPosition(Z) & 4 ? -1 : aa === Z ? 0 : 1;
                if (aa === 0) {
                    Q = true
                }
                return aa
            }
        } else {
            if ("sourceIndex" in N.documentElement) {
                G = function (aa, Z) {
                    if (!aa.sourceIndex || !Z.sourceIndex) {
                        if (aa == Z) {
                            Q = true
                        }
                        return aa.sourceIndex ? -1 : 1
                    }
                    aa = aa.sourceIndex - Z.sourceIndex;
                    if (aa === 0) {
                        Q = true
                    }
                    return aa
                }
            } else {
                if (N.createRange) {
                    G = function (ba, ab) {
                        if (!ba.ownerDocument || !ab.ownerDocument) {
                            if (ba == ab) {
                                Q = true
                            }
                            return ba.ownerDocument ? -1 : 1
                        }
                        var aa = ba.ownerDocument.createRange(),
                            Z = ab.ownerDocument.createRange();
                        aa.setStart(ba, 0);
                        aa.setEnd(ba, 0);
                        Z.setStart(ab, 0);
                        Z.setEnd(ab, 0);
                        ba = aa.compareBoundaryPoints(Range.START_TO_END, Z);
                        if (ba === 0) {
                            Q = true
                        }
                        return ba
                    }
                }
            }
        }(function () {
            var ab = N.createElement("div"),
                aa = "script" + (new Date).getTime();
            ab.innerHTML = "<a name='" + aa + "'/>";
            var Z = N.documentElement;
            Z.insertBefore(ab, Z.firstChild);
            if (N.getElementById(aa)) {
                O.find.ID = function (ba, bb, bi) {
                    if (typeof bb.getElementById !== "undefined" && !bi) {
                        return (bb = bb.getElementById(ba[1])) ? bb.id === ba[1] || typeof bb.getAttributeNode !== "undefined" && bb.getAttributeNode("id").nodeValue === ba[1] ? [bb] : J : []
                    }
                };
                O.filter.ID = function (ba, bb) {
                    var bi = typeof ba.getAttributeNode !== "undefined" && ba.getAttributeNode("id");
                    return ba.nodeType === 1 && bi && bi.nodeValue === bb
                }
            }
            Z.removeChild(ab);
            Z = ab = null
        })();
        (function () {
            var Z = N.createElement("div");
            Z.appendChild(N.createComment(""));
            if (Z.getElementsByTagName("*").length > 0) {
                O.find.TAG = function (ba, ab) {
                    ab = ab.getElementsByTagName(ba[1]);
                    if (ba[1] === "*") {
                        ba = [];
                        for (var aa = 0; ab[aa]; aa++) {
                            ab[aa].nodeType === 1 && ba.push(ab[aa])
                        }
                        ab = ba
                    }
                    return ab
                }
            }
            Z.innerHTML = "<a href='#'></a>";
            if (Z.firstChild && typeof Z.firstChild.getAttribute !== "undefined" && Z.firstChild.getAttribute("href") !== "#") {
                O.attrHandle.href = function (aa) {
                    return aa.getAttribute("href", 2)
                }
            }
            Z = null
        })();
        N.querySelectorAll &&
        function () {
            var ab = L,
                aa = N.createElement("div");
            aa.innerHTML = "<p class='TEST'></p>";
            if (!(aa.querySelectorAll && aa.querySelectorAll(".TEST").length === 0)) {
                L = function (ba, bj, bk, bb) {
                    bj = bj || N;
                    if (!bb && bj.nodeType === 9 && !s(bj)) {
                        try {
                            return K(bj.querySelectorAll(ba), bk)
                        } catch (bi) {}
                    }
                    return ab(ba, bj, bk, bb)
                };
                for (var Z in ab) {
                    L[Z] = ab[Z]
                }
                aa = null
            }
        }();
        (function () {
            var Z = N.createElement("div");
            Z.innerHTML = "<div class='test e'></div><div class='test'></div>";
            if (!(!Z.getElementsByClassName || Z.getElementsByClassName("e").length === 0)) {
                Z.lastChild.className = "e";
                if (Z.getElementsByClassName("e").length !== 1) {
                    O.order.splice(1, 0, "CLASS");
                    O.find.CLASS = function (ba, ab, aa) {
                        if (typeof ab.getElementsByClassName !== "undefined" && !aa) {
                            return ab.getElementsByClassName(ba[1])
                        }
                    };
                    Z = null
                }
            }
        })();
        var w = N.compareDocumentPosition ?
        function (aa, Z) {
            return aa.compareDocumentPosition(Z) & 16
        } : function (aa, Z) {
            return aa !== Z && (aa.contains ? aa.contains(Z) : true)
        }, s = function (Z) {
            return (Z = (Z ? Z.ownerDocument || Z : 0).documentElement) ? Z.nodeName !== "HTML" : false
        }, P = function (bb, ab) {
            var aa = [],
                Z = "",
                ba;
            for (ab = ab.nodeType ? [ab] : ab; ba = O.match.PSEUDO.exec(bb);) {
                Z += ba[0];
                bb = bb.replace(O.match.PSEUDO, "")
            }
            bb = O.relative[bb] ? bb + "*" : bb;
            ba = 0;
            for (var bi = ab.length; ba < bi; ba++) {
                L(bb, ab[ba], aa)
            }
            return L.filter(Z, aa)
        };
        ag.find = L;
        ag.expr = L.selectors;
        ag.expr[":"] = ag.expr.filters;
        ag.unique = L.uniqueSort;
        ag.getText = Y;
        ag.isXMLDoc = s;
        ag.contains = w
    })();
    var aR = /Until$/,
        av = /^(?:parents|prevUntil|prevAll)/,
        S = /,/;
    at = Array.prototype.slice;
    var j = function (s, c, A) {
            if (ag.isFunction(c)) {
                return ag.grep(s, function (H, G) {
                    return !!c.call(H, G, H) === A
                })
            } else {
                if (c.nodeType) {
                    return ag.grep(s, function (G) {
                        return G === c === A
                    })
                } else {
                    if (typeof c === "string") {
                        var w = ag.grep(s, function (G) {
                            return G.nodeType === 1
                        });
                        if (ak.test(c)) {
                            return ag.filter(c, w, !A)
                        } else {
                            c = ag.filter(c, s)
                        }
                    }
                }
            }
            return ag.grep(s, function (G) {
                return ag.inArray(G, c) >= 0 === A
            })
        };
    ag.fn.extend({
        find: function (s) {
            for (var c = this.pushStack("", "find", s), K = 0, G = 0, H = this.length; G < H; G++) {
                K = c.length;
                ag.find(s, this[G], c);
                if (G > 0) {
                    for (var A = K; A < c.length; A++) {
                        for (var w = 0; w < K; w++) {
                            if (c[w] === c[A]) {
                                c.splice(A--, 1);
                                break
                            }
                        }
                    }
                }
            }
            return c
        },
        has: function (s) {
            var c = ag(s);
            return this.filter(function () {
                for (var A = 0, w = c.length; A < w; A++) {
                    if (ag.contains(this, c[A])) {
                        return true
                    }
                }
            })
        },
        not: function (c) {
            return this.pushStack(j(this, c, false), "not", c)
        },
        filter: function (c) {
            return this.pushStack(j(this, c, true), "filter", c)
        },
        is: function (c) {
            return !!c && ag.filter(c, this).length > 0
        },
        closest: function (M, L) {
            if (ag.isArray(M)) {
                var K = [],
                    G = this[0],
                    H, A = {},
                    w;
                if (G && M.length) {
                    H = 0;
                    for (var s = M.length; H < s; H++) {
                        w = M[H];
                        A[w] || (A[w] = ag.expr.match.POS.test(w) ? ag(w, L || this.context) : w)
                    }
                    for (; G && G.ownerDocument && G !== L;) {
                        for (w in A) {
                            H = A[w];
                            if (H.jquery ? H.index(G) > -1 : ag(G).is(H)) {
                                K.push({
                                    selector: w,
                                    elem: G
                                });
                                delete A[w]
                            }
                        }
                        G = G.parentNode
                    }
                }
                return K
            }
            var c = ag.expr.match.POS.test(M) ? ag(M, L || this.context) : null;
            return this.map(function (P, O) {
                for (; O && O.ownerDocument && O !== L;) {
                    if (c ? c.index(O) > -1 : ag(O).is(M)) {
                        return O
                    }
                    O = O.parentNode
                }
                return null
            })
        },
        index: function (c) {
            if (!c || typeof c === "string") {
                return ag.inArray(this[0], c ? ag(c) : this.parent().children())
            }
            return ag.inArray(c.jquery ? c[0] : c, this)
        },
        add: function (s, c) {
            s = typeof s === "string" ? ag(s, c || this.context) : ag.makeArray(s);
            c = ag.merge(this.get(), s);
            return this.pushStack(a1(s[0]) || a1(c[0]) ? c : ag.unique(c))
        },
        andSelf: function () {
            return this.add(this.prevObject)
        }
    });
    ag.each({
        parent: function (c) {
            return (c = c.parentNode) && c.nodeType !== 11 ? c : null
        },
        parents: function (c) {
            return ag.dir(c, "parentNode")
        },
        parentsUntil: function (s, c, w) {
            return ag.dir(s, "parentNode", w)
        },
        next: function (c) {
            return ag.nth(c, 2, "nextSibling")
        },
        prev: function (c) {
            return ag.nth(c, 2, "previousSibling")
        },
        nextAll: function (c) {
            return ag.dir(c, "nextSibling")
        },
        prevAll: function (c) {
            return ag.dir(c, "previousSibling")
        },
        nextUntil: function (s, c, w) {
            return ag.dir(s, "nextSibling", w)
        },
        prevUntil: function (s, c, w) {
            return ag.dir(s, "previousSibling", w)
        },
        siblings: function (c) {
            return ag.sibling(c.parentNode.firstChild, c)
        },
        children: function (c) {
            return ag.sibling(c.firstChild)
        },
        contents: function (c) {
            return ag.nodeName(c, "iframe") ? c.contentDocument || c.contentWindow.document : ag.makeArray(c.childNodes)
        }
    }, function (s, c) {
        ag.fn[s] = function (G, w) {
            var A = ag.map(this, c, G);
            aR.test(s) || (w = G);
            if (w && typeof w === "string") {
                A = ag.filter(w, A)
            }
            A = this.length > 1 ? ag.unique(A) : A;
            if ((this.length > 1 || S.test(w)) && av.test(s)) {
                A = A.reverse()
            }
            return this.pushStack(A, s, at.call(arguments).join(","))
        }
    });
    ag.extend({
        filter: function (s, c, w) {
            if (w) {
                s = ":not(" + s + ")"
            }
            return ag.find.matches(s, c)
        },
        dir: function (s, c, A) {
            var w = [];
            for (s = s[c]; s && s.nodeType !== 9 && (A === J || !ag(s).is(A));) {
                s.nodeType === 1 && w.push(s);
                s = s[c]
            }
            return w
        },
        nth: function (s, c, A) {
            c = c || 1;
            for (var w = 0; s; s = s[A]) {
                if (s.nodeType === 1 && ++w === c) {
                    break
                }
            }
            return s
        },
        sibling: function (s, c) {
            for (var w = []; s; s = s.nextSibling) {
                s.nodeType === 1 && s !== c && w.push(s)
            }
            return w
        }
    });
    var be = / jQuery\d+="(?:\d+|null)"/g,
        an = /^\s+/,
        t = /(<([\w:]+)[^>]*?)\/>/g,
        f = /^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,
        aY = /<([\w:]+)/,
        a7 = /<tbody/i,
        aT = /<|&\w+;/,
        aC = function (s, c, w) {
            return f.test(w) ? s : c + "></" + w + ">"
        },
        aG = {
            option: [1, "<select multiple='multiple'>", "</select>"],
            legend: [1, "<fieldset>", "</fieldset>"],
            thead: [1, "<table>", "</table>"],
            tr: [2, "<table><tbody>", "</tbody></table>"],
            td: [3, "<table><tbody><tr>", "</tr></tbody></table>"],
            col: [2, "<table><tbody></tbody><colgroup>", "</colgroup></table>"],
            area: [1, "<map>", "</map>"],
            _default: [0, "", ""]
        };
    aG.optgroup = aG.option;
    aG.tbody = aG.tfoot = aG.colgroup = aG.caption = aG.thead;
    aG.th = aG.td;
    if (!ag.support.htmlSerialize) {
        aG._default = [1, "div<div>", "</div>"]
    }
    ag.fn.extend({
        text: function (c) {
            if (ag.isFunction(c)) {
                return this.each(function (s) {
                    var w = ag(this);
                    return w.text(c.call(this, s, w.text()))
                })
            }
            if (typeof c !== "object" && c !== J) {
                return this.empty().append((this[0] && this[0].ownerDocument || N).createTextNode(c))
            }
            return ag.getText(this)
        },
        wrapAll: function (s) {
            if (ag.isFunction(s)) {
                return this.each(function (w) {
                    ag(this).wrapAll(s.call(this, w))
                })
            }
            if (this[0]) {
                var c = ag(s, this[0].ownerDocument).eq(0).clone(true);
                this[0].parentNode && c.insertBefore(this[0]);
                c.map(function () {
                    for (var w = this; w.firstChild && w.firstChild.nodeType === 1;) {
                        w = w.firstChild
                    }
                    return w
                }).append(this)
            }
            return this
        },
        wrapInner: function (c) {
            return this.each(function () {
                var s = ag(this),
                    w = s.contents();
                w.length ? w.wrapAll(c) : s.append(c)
            })
        },
        wrap: function (c) {
            return this.each(function () {
                ag(this).wrapAll(c)
            })
        },
        unwrap: function () {
            return this.parent().each(function () {
                ag.nodeName(this, "body") || ag(this).replaceWith(this.childNodes)
            }).end()
        },
        append: function () {
            return this.domManip(arguments, true, function (c) {
                this.nodeType === 1 && this.appendChild(c)
            })
        },
        prepend: function () {
            return this.domManip(arguments, true, function (c) {
                this.nodeType === 1 && this.insertBefore(c, this.firstChild)
            })
        },
        before: function () {
            if (this[0] && this[0].parentNode) {
                return this.domManip(arguments, false, function (s) {
                    this.parentNode.insertBefore(s, this)
                })
            } else {
                if (arguments.length) {
                    var c = ag(arguments[0]);
                    c.push.apply(c, this.toArray());
                    return this.pushStack(c, "before", arguments)
                }
            }
        },
        after: function () {
            if (this[0] && this[0].parentNode) {
                return this.domManip(arguments, false, function (s) {
                    this.parentNode.insertBefore(s, this.nextSibling)
                })
            } else {
                if (arguments.length) {
                    var c = this.pushStack(this, "after", arguments);
                    c.push.apply(c, ag(arguments[0]).toArray());
                    return c
                }
            }
        },
        clone: function (s) {
            var c = this.map(function () {
                if (!ag.support.noCloneEvent && !ag.isXMLDoc(this)) {
                    var A = this.outerHTML,
                        w = this.ownerDocument;
                    if (!A) {
                        A = w.createElement("div");
                        A.appendChild(this.cloneNode(true));
                        A = A.innerHTML
                    }
                    return ag.clean([A.replace(be, "").replace(an, "")], w)[0]
                } else {
                    return this.cloneNode(true)
                }
            });
            if (s === true) {
                aN(this, c);
                aN(this.find("*"), c.find("*"))
            }
            return c
        },
        html: function (s) {
            if (s === J) {
                return this[0] && this[0].nodeType === 1 ? this[0].innerHTML.replace(be, "") : null
            } else {
                if (typeof s === "string" && !/<script/i.test(s) && (ag.support.leadingWhitespace || !an.test(s)) && !aG[(aY.exec(s) || ["", ""])[1].toLowerCase()]) {
                    try {
                        for (var c = 0, A = this.length; c < A; c++) {
                            if (this[c].nodeType === 1) {
                                ar(this[c].getElementsByTagName("*"));
                                this[c].innerHTML = s
                            }
                        }
                    } catch (w) {
                        this.empty().append(s)
                    }
                } else {
                    ag.isFunction(s) ? this.each(function (K) {
                        var H = ag(this),
                            G = H.html();
                        H.empty().append(function () {
                            return s.call(this, K, G)
                        })
                    }) : this.empty().append(s)
                }
            }
            return this
        },
        replaceWith: function (c) {
            if (this[0] && this[0].parentNode) {
                ag.isFunction(c) || (c = ag(c).detach());
                return this.each(function () {
                    var s = this.nextSibling,
                        w = this.parentNode;
                    ag(this).remove();
                    s ? ag(s).before(c) : ag(w).append(c)
                })
            } else {
                return this.pushStack(ag(ag.isFunction(c) ? c() : c), "replaceWith", c)
            }
        },
        detach: function (c) {
            return this.remove(c, true)
        },
        domManip: function (O, M, L) {
            function H(P) {
                return ag.nodeName(P, "table") ? P.getElementsByTagName("tbody")[0] || P.appendChild(P.ownerDocument.createElement("tbody")) : P
            }
            var K, G, A = O[0],
                s = [];
            if (ag.isFunction(A)) {
                return this.each(function (P) {
                    var Q = ag(this);
                    O[0] = A.call(this, P, M ? Q.html() : J);
                    return Q.domManip(O, M, L)
                })
            }
            if (this[0]) {
                K = O[0] && O[0].parentNode && O[0].parentNode.nodeType === 11 ? {
                    fragment: O[0].parentNode
                } : aj(O, this, s);
                if (G = K.fragment.firstChild) {
                    M = M && ag.nodeName(G, "tr");
                    for (var c = 0, w = this.length; c < w; c++) {
                        L.call(M ? H(this[c], G) : this[c], K.cacheable || this.length > 1 || c > 0 ? K.fragment.cloneNode(true) : K.fragment)
                    }
                }
                s && ag.each(s, n)
            }
            return this
        }
    });
    ag.fragments = {};
    ag.each({
        appendTo: "append",
        prependTo: "prepend",
        insertBefore: "before",
        insertAfter: "after",
        replaceAll: "replaceWith"
    }, function (s, c) {
        ag.fn[s] = function (K) {
            var G = [];
            K = ag(K);
            for (var H = 0, A = K.length; H < A; H++) {
                var w = (H > 0 ? this.clone(true) : this).get();
                ag.fn[c].apply(ag(K[H]), w);
                G = G.concat(w)
            }
            return this.pushStack(G, s, K.selector)
        }
    });
    ag.each({
        remove: function (s, c) {
            if (!s || ag.filter(s, [this]).length) {
                if (!c && this.nodeType === 1) {
                    ar(this.getElementsByTagName("*"));
                    ar([this])
                }
                this.parentNode && this.parentNode.removeChild(this)
            }
        },
        empty: function () {
            for (this.nodeType === 1 && ar(this.getElementsByTagName("*")); this.firstChild;) {
                this.removeChild(this.firstChild)
            }
        }
    }, function (s, c) {
        ag.fn[s] = function () {
            return this.each(c, arguments)
        }
    });
    ag.extend({
        clean: function (s, c, G, w) {
            c = c || N;
            if (typeof c.createElement === "undefined") {
                c = c.ownerDocument || c[0] && c[0].ownerDocument || N
            }
            var A = [];
            ag.each(s, function (K, H) {
                if (typeof H === "number") {
                    H += ""
                }
                if (H) {
                    if (typeof H === "string" && !aT.test(H)) {
                        H = c.createTextNode(H)
                    } else {
                        if (typeof H === "string") {
                            H = H.replace(t, aC);
                            var M = (aY.exec(H) || ["", ""])[1].toLowerCase(),
                                L = aG[M] || aG._default,
                                O = L[0];
                            K = c.createElement("div");
                            for (K.innerHTML = L[1] + H + L[2]; O--;) {
                                K = K.lastChild
                            }
                            if (!ag.support.tbody) {
                                O = a7.test(H);
                                M = M === "table" && !O ? K.firstChild && K.firstChild.childNodes : L[1] === "<table>" && !O ? K.childNodes : [];
                                for (L = M.length - 1; L >= 0; --L) {
                                    ag.nodeName(M[L], "tbody") && !M[L].childNodes.length && M[L].parentNode.removeChild(M[L])
                                }
                            }!ag.support.leadingWhitespace && an.test(H) && K.insertBefore(c.createTextNode(an.exec(H)[0]), K.firstChild);
                            H = ag.makeArray(K.childNodes)
                        }
                    }
                    if (H.nodeType) {
                        A.push(H)
                    } else {
                        A = ag.merge(A, H)
                    }
                }
            });
            if (G) {
                for (s = 0; A[s]; s++) {
                    if (w && ag.nodeName(A[s], "script") && (!A[s].type || A[s].type.toLowerCase() === "text/javascript")) {
                        w.push(A[s].parentNode ? A[s].parentNode.removeChild(A[s]) : A[s])
                    } else {
                        A[s].nodeType === 1 && A.splice.apply(A, [s + 1, 0].concat(ag.makeArray(A[s].getElementsByTagName("script"))));
                        G.appendChild(A[s])
                    }
                }
            }
            return A
        }
    });
    var ac = /z-?index|font-?weight|opacity|zoom|line-?height/i,
        aJ = /alpha\([^)]*\)/,
        ah = /opacity=([^)]*)/,
        y = /float/i,
        i = /-([a-z])/ig,
        v = /([A-Z])/g,
        h = /^-?\d+(?:px)?$/i,
        bc = /^-?\d/,
        aW = {
            position: "absolute",
            visibility: "hidden",
            display: "block"
        },
        aH = ["Left", "Right"],
        ae = ["Top", "Bottom"],
        z = N.defaultView && N.defaultView.getComputedStyle,
        C = ag.support.cssFloat ? "cssFloat" : "styleFloat",
        bd = function (s, c) {
            return c.toUpperCase()
        };
    ag.fn.css = function (s, c) {
        return aZ(this, s, c, true, function (G, w, A) {
            if (A === J) {
                return ag.curCSS(G, w)
            }
            if (typeof A === "number" && !ac.test(w)) {
                A += "px"
            }
            ag.style(G, w, A)
        })
    };
    ag.extend({
        style: function (s, c, G) {
            if (!s || s.nodeType === 3 || s.nodeType === 8) {
                return J
            }
            if ((c === "width" || c === "height") && parseFloat(G) < 0) {
                G = J
            }
            var w = s.style || s,
                A = G !== J;
            if (!ag.support.opacity && c === "opacity") {
                if (A) {
                    w.zoom = 1;
                    c = parseInt(G, 10) + "" === "NaN" ? "" : "alpha(opacity=" + G * 100 + ")";
                    s = w.filter || ag.curCSS(s, "filter") || "";
                    w.filter = aJ.test(s) ? s.replace(aJ, c) : c
                }
                return w.filter && w.filter.indexOf("opacity=") >= 0 ? parseFloat(ah.exec(w.filter)[1]) / 100 + "" : ""
            }
            if (y.test(c)) {
                c = C
            }
            c = c.replace(i, bd);
            if (A) {
                w[c] = G
            }
            return w[c]
        },
        css: function (s, c, K, G) {
            if (c === "width" || c === "height") {
                var H, A = c === "width" ? aH : ae;

                function w() {
                    H = c === "width" ? s.offsetWidth : s.offsetHeight;
                    G !== "border" && ag.each(A, function () {
                        G || (H -= parseFloat(ag.curCSS(s, "padding" + this, true)) || 0);
                        if (G === "margin") {
                            H += parseFloat(ag.curCSS(s, "margin" + this, true)) || 0
                        } else {
                            H -= parseFloat(ag.curCSS(s, "border" + this + "Width", true)) || 0
                        }
                    })
                }
                s.offsetWidth !== 0 ? w() : ag.swap(s, aW, w);
                return Math.max(0, Math.round(H))
            }
            return ag.curCSS(s, c, K)
        },
        curCSS: function (s, c, H) {
            var A, G = s.style;
            if (!ag.support.opacity && c === "opacity" && s.currentStyle) {
                A = ah.test(s.currentStyle.filter || "") ? parseFloat(RegExp.$1) / 100 + "" : "";
                return A === "" ? "1" : A
            }
            if (y.test(c)) {
                c = C
            }
            if (!H && G && G[c]) {
                A = G[c]
            } else {
                if (z) {
                    if (y.test(c)) {
                        c = "float"
                    }
                    c = c.replace(v, "-$1").toLowerCase();
                    G = s.ownerDocument.defaultView;
                    if (!G) {
                        return null
                    }
                    if (s = G.getComputedStyle(s, null)) {
                        A = s.getPropertyValue(c)
                    }
                    if (c === "opacity" && A === "") {
                        A = "1"
                    }
                } else {
                    if (s.currentStyle) {
                        H = c.replace(i, bd);
                        A = s.currentStyle[c] || s.currentStyle[H];
                        if (!h.test(A) && bc.test(A)) {
                            c = G.left;
                            var w = s.runtimeStyle.left;
                            s.runtimeStyle.left = s.currentStyle.left;
                            G.left = H === "fontSize" ? "1em" : A || 0;
                            A = G.pixelLeft + "px";
                            G.left = c;
                            s.runtimeStyle.left = w
                        }
                    }
                }
            }
            return A
        },
        swap: function (s, c, G) {
            var w = {};
            for (var A in c) {
                w[A] = s.style[A];
                s.style[A] = c[A]
            }
            G.call(s);
            for (A in c) {
                s.style[A] = w[A]
            }
        }
    });
    if (ag.expr && ag.expr.filters) {
        ag.expr.filters.hidden = function (s) {
            var c = s.offsetWidth,
                A = s.offsetHeight,
                w = s.nodeName.toLowerCase() === "tr";
            return c === 0 && A === 0 && !w ? true : c > 0 && A > 0 && !w ? false : ag.curCSS(s, "display") === "none"
        };
        ag.expr.filters.visible = function (c) {
            return !ag.expr.filters.hidden(c)
        }
    }
    var k = aB(),
        bf = /<script(.|\s)*?\/script>/gi,
        a0 = /select|textarea/i,
        aL = /color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,
        ax = /=\?(&|$)/,
        aX = /\?/,
        ai = /(\?|&)_=.*?(&|$)/,
        D = /^(\w+:)?\/\/([^\/?#]+)/,
        o = /%20/g;
    ag.fn.extend({
        _load: ag.fn.load,
        load: function (s, c, G) {
            if (typeof s !== "string") {
                return this._load(s)
            } else {
                if (!this.length) {
                    return this
                }
            }
            var w = s.indexOf(" ");
            if (w >= 0) {
                var A = s.slice(w, s.length);
                s = s.slice(0, w)
            }
            w = "GET";
            if (c) {
                if (ag.isFunction(c)) {
                    G = c;
                    c = null
                } else {
                    if (typeof c === "object") {
                        c = ag.param(c, ag.ajaxSettings.traditional);
                        w = "POST"
                    }
                }
            }
            ag.ajax({
                url: s,
                type: w,
                dataType: "html",
                data: c,
                context: this,
                complete: function (K, H) {
                    if (H === "success" || H === "notmodified") {
                        this.html(A ? ag("<div />").append(K.responseText.replace(bf, "")).find(A) : K.responseText)
                    }
                    G && this.each(G, [K.responseText, H, K])
                }
            });
            return this
        },
        serialize: function () {
            return ag.param(this.serializeArray())
        },
        serializeArray: function () {
            return this.map(function () {
                return this.elements ? ag.makeArray(this.elements) : this
            }).filter(function () {
                return this.name && !this.disabled && (this.checked || a0.test(this.nodeName) || aL.test(this.type))
            }).map(function (s, c) {
                s = ag(this).val();
                return s == null ? null : ag.isArray(s) ? ag.map(s, function (w) {
                    return {
                        name: c.name,
                        value: w
                    }
                }) : {
                    name: c.name,
                    value: s
                }
            }).get()
        }
    });
    ag.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "), function (s, c) {
        ag.fn[c] = function (w) {
            return this.bind(c, w)
        }
    });
    ag.extend({
        get: function (s, c, A, w) {
            if (ag.isFunction(c)) {
                w = w || A;
                A = c;
                c = null
            }
            return ag.ajax({
                type: "GET",
                url: s,
                data: c,
                success: A,
                dataType: w
            })
        },
        getScript: function (s, c) {
            return ag.get(s, null, c, "script")
        },
        getJSON: function (s, c, w) {
            return ag.get(s, c, w, "json")
        },
        post: function (s, c, A, w) {
            if (ag.isFunction(c)) {
                w = w || A;
                A = c;
                c = {}
            }
            return ag.ajax({
                type: "POST",
                url: s,
                data: c,
                success: A,
                dataType: w
            })
        },
        ajaxSetup: function (c) {
            ag.extend(ag.ajaxSettings, c)
        },
        ajaxSettings: {
            url: location.href,
            global: true,
            type: "GET",
            contentType: "application/x-www-form-urlencoded",
            processData: true,
            async: true,
            xhr: aM.XMLHttpRequest && (aM.location.protocol !== "file:" || !aM.ActiveXObject) ?
            function () {
                return new aM.XMLHttpRequest
            } : function () {
                try {
                    return new aM.ActiveXObject("Microsoft.XMLHTTP")
                } catch (c) {}
            },
            accepts: {
                xml: "application/xml, text/xml",
                html: "text/html",
                script: "text/javascript, application/javascript",
                json: "application/json, text/javascript",
                text: "text/plain",
                _default: "*/*"
            }
        },
        lastModified: {},
        etag: {},
        ajax: function (ba) {
            function ab() {
                Z.success && Z.success.call(L, M, T, s);
                Z.global && Y("ajaxSuccess", [s, Z])
            }
            function aa() {
                Z.complete && Z.complete.call(L, s, T);
                Z.global && Y("ajaxComplete", [s, Z]);
                Z.global && !--ag.active && ag.event.trigger("ajaxStop")
            }
            function Y(bb, bi) {
                (Z.context ? ag(Z.context) : ag.event).trigger(bb, bi)
            }
            var Z = ag.extend(true, {}, ag.ajaxSettings, ba),
                U, T, M, L = Z.context || Z,
                O = Z.type.toUpperCase();
            if (Z.data && Z.processData && typeof Z.data !== "string") {
                Z.data = ag.param(Z.data, Z.traditional)
            }
            if (Z.dataType === "jsonp") {
                if (O === "GET") {
                    ax.test(Z.url) || (Z.url += (aX.test(Z.url) ? "&" : "?") + (Z.jsonp || "callback") + "=?")
                } else {
                    if (!Z.data || !ax.test(Z.data)) {
                        Z.data = (Z.data ? Z.data + "&" : "") + (Z.jsonp || "callback") + "=?"
                    }
                }
                Z.dataType = "json"
            }
            if (Z.dataType === "json" && (Z.data && ax.test(Z.data) || ax.test(Z.url))) {
                U = Z.jsonpCallback || "jsonp" + k++;
                if (Z.data) {
                    Z.data = (Z.data + "").replace(ax, "=" + U + "$1")
                }
                Z.url = Z.url.replace(ax, "=" + U + "$1");
                Z.dataType = "script";
                aM[U] = aM[U] ||
                function (bb) {
                    M = bb;
                    ab();
                    aa();
                    aM[U] = J;
                    try {
                        delete aM[U]
                    } catch (bi) {}
                    K && K.removeChild(H)
                }
            }
            if (Z.dataType === "script" && Z.cache === null) {
                Z.cache = false
            }
            if (Z.cache === false && O === "GET") {
                var A = aB(),
                    c = Z.url.replace(ai, "$1_=" + A + "$2");
                Z.url = c + (c === Z.url ? (aX.test(Z.url) ? "&" : "?") + "_=" + A : "")
            }
            if (Z.data && O === "GET") {
                Z.url += (aX.test(Z.url) ? "&" : "?") + Z.data
            }
            Z.global && !ag.active++ && ag.event.trigger("ajaxStart");
            A = (A = D.exec(Z.url)) && (A[1] && A[1] !== location.protocol || A[2] !== location.host);
            if (Z.dataType === "script" && O === "GET" && A) {
                var K = N.getElementsByTagName("head")[0] || N.documentElement,
                    H = N.createElement("script");
                H.src = Z.url;
                if (Z.scriptCharset) {
                    H.charset = Z.scriptCharset
                }
                if (!U) {
                    var G = false;
                    H.onload = H.onreadystatechange = function () {
                        if (!G && (!this.readyState || this.readyState === "loaded" || this.readyState === "complete")) {
                            G = true;
                            ab();
                            aa();
                            H.onload = H.onreadystatechange = null;
                            K && H.parentNode && K.removeChild(H)
                        }
                    }
                }
                K.insertBefore(H, K.firstChild);
                return J
            }
            var w = false,
                s = Z.xhr();
            if (s) {
                Z.username ? s.open(O, Z.url, Z.async, Z.username, Z.password) : s.open(O, Z.url, Z.async);
                try {
                    if (Z.data || ba && ba.contentType) {
                        s.setRequestHeader("Content-Type", Z.contentType)
                    }
                    if (Z.ifModified) {
                        ag.lastModified[Z.url] && s.setRequestHeader("If-Modified-Since", ag.lastModified[Z.url]);
                        ag.etag[Z.url] && s.setRequestHeader("If-None-Match", ag.etag[Z.url])
                    }
                    A || s.setRequestHeader("X-Requested-With", "XMLHttpRequest");
                    s.setRequestHeader("Accept", Z.dataType && Z.accepts[Z.dataType] ? Z.accepts[Z.dataType] + ", */*" : Z.accepts._default)
                } catch (Q) {}
                if (Z.beforeSend && Z.beforeSend.call(L, s, Z) === false) {
                    Z.global && !--ag.active && ag.event.trigger("ajaxStop");
                    s.abort();
                    return false
                }
                Z.global && Y("ajaxSend", [s, Z]);
                var W = s.onreadystatechange = function (bb) {
                        if (!s || s.readyState === 0) {
                            w || aa();
                            w = true;
                            if (s) {
                                s.onreadystatechange = ag.noop
                            }
                        } else {
                            if (!w && s && (s.readyState === 4 || bb === "timeout")) {
                                w = true;
                                s.onreadystatechange = ag.noop;
                                T = bb === "timeout" ? "timeout" : !ag.httpSuccess(s) ? "error" : Z.ifModified && ag.httpNotModified(s, Z.url) ? "notmodified" : "success";
                                if (T === "success") {
                                    try {
                                        M = ag.httpData(s, Z.dataType, Z)
                                    } catch (bi) {
                                        T = "parsererror"
                                    }
                                }
                                if (T === "success" || T === "notmodified") {
                                    U || ab()
                                } else {
                                    ag.handleError(Z, s, T)
                                }
                                aa();
                                bb === "timeout" && s.abort();
                                if (Z.async) {
                                    s = null
                                }
                            }
                        }
                    };
                try {
                    var V = s.abort;
                    s.abort = function () {
                        if (s) {
                            V.call(s);
                            if (s) {
                                s.readyState = 0
                            }
                        }
                        W()
                    }
                } catch (R) {}
                Z.async && Z.timeout > 0 && setTimeout(function () {
                    s && !w && W("timeout")
                }, Z.timeout);
                try {
                    s.send(O === "POST" || O === "PUT" || O === "DELETE" ? Z.data : null)
                } catch (P) {
                    ag.handleError(Z, s, null, P);
                    aa()
                }
                Z.async || W();
                return s
            }
        },
        handleError: function (s, c, A, w) {
            if (s.error) {
                s.error.call(s.context || aM, c, A, w)
            }
            if (s.global) {
                (s.context ? ag(s.context) : ag.event).trigger("ajaxError", [c, s, w])
            }
        },
        active: 0,
        httpSuccess: function (s) {
            try {
                return !s.status && location.protocol === "file:" || s.status >= 200 && s.status < 300 || s.status === 304 || s.status === 1223 || s.status === 0
            } catch (c) {}
            return false
        },
        httpNotModified: function (s, c) {
            var A = s.getResponseHeader("Last-Modified"),
                w = s.getResponseHeader("Etag");
            if (A) {
                ag.lastModified[c] = A
            }
            if (w) {
                ag.etag[c] = w
            }
            return s.status === 304 || s.status === 0
        },
        httpData: function (s, c, G) {
            var w = s.getResponseHeader("content-type") || "",
                A = c === "xml" || !c && w.indexOf("xml") >= 0;
            s = A ? s.responseXML : s.responseText;
            if (A && s.documentElement.nodeName === "parsererror") {
                throw "parsererror"
            }
            if (G && G.dataFilter) {
                s = G.dataFilter(s, c)
            }
            if (typeof s === "string") {
                if (c === "json" || !c && w.indexOf("json") >= 0) {
                    if (/^[\],:{}\s]*$/.test(s.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]").replace(/(?:^|:|,)(?:\s*\[)+/g, ""))) {
                        s = aM.JSON && aM.JSON.parse ? aM.JSON.parse(s) : (new Function("return " + s))()
                    } else {
                        throw "Invalid JSON: " + s
                    }
                } else {
                    if (c === "script" || !c && w.indexOf("javascript") >= 0) {
                        ag.globalEval(s)
                    }
                }
            }
            return s
        },
        param: function (s, c) {
            function G(K, H) {
                H = ag.isFunction(H) ? H() : H;
                w[w.length] = encodeURIComponent(K) + "=" + encodeURIComponent(H)
            }
            var w = [];
            if (c === J) {
                c = ag.ajaxSettings.traditional
            }
            ag.isArray(s) || s.jquery ? ag.each(s, function () {
                G(this.name, this.value)
            }) : ag.each(s, function A(K, H) {
                if (ag.isArray(H)) {
                    ag.each(H, function (M, L) {
                        c ? G(K, L) : A(K + "[" + (typeof L === "object" || ag.isArray(L) ? M : "") + "]", L)
                    })
                } else {
                    !c && H != null && typeof H === "object" ? ag.each(H, function (M, L) {
                        A(K + "[" + M + "]", L)
                    }) : G(K, H)
                }
            });
            return w.join("&").replace(o, "+")
        }
    });
    var aI = {},
        a = /toggle|show|hide/,
        a3 = /^([+-]=)?([\d+-.]+)(.*)$/,
        al, E = [
            ["height", "marginTop", "marginBottom", "paddingTop", "paddingBottom"],
            ["width", "marginLeft", "marginRight", "paddingLeft", "paddingRight"],
            ["opacity"]
        ];
    ag.fn.extend({
        show: function (s, c) {
            if (s != null) {
                return this.animate(aA("show", 3), s, c)
            } else {
                s = 0;
                for (c = this.length; s < c; s++) {
                    var G = ag.data(this[s], "olddisplay");
                    this[s].style.display = G || "";
                    if (ag.css(this[s], "display") === "none") {
                        G = this[s].nodeName;
                        var w;
                        if (aI[G]) {
                            w = aI[G]
                        } else {
                            var A = ag("<" + G + " />").appendTo("body");
                            w = A.css("display");
                            if (w === "none") {
                                w = "block"
                            }
                            A.remove();
                            aI[G] = w
                        }
                        ag.data(this[s], "olddisplay", w)
                    }
                }
                s = 0;
                for (c = this.length; s < c; s++) {
                    this[s].style.display = ag.data(this[s], "olddisplay") || ""
                }
                return this
            }
        },
        hide: function (s, c) {
            if (s != null) {
                return this.animate(aA("hide", 3), s, c)
            } else {
                s = 0;
                for (c = this.length; s < c; s++) {
                    var w = ag.data(this[s], "olddisplay");
                    !w && w !== "none" && ag.data(this[s], "olddisplay", ag.css(this[s], "display"))
                }
                s = 0;
                for (c = this.length; s < c; s++) {
                    this[s].style.display = "none"
                }
                return this
            }
        },
        _toggle: ag.fn.toggle,
        toggle: function (s, c) {
            var w = typeof s === "boolean";
            if (ag.isFunction(s) && ag.isFunction(c)) {
                this._toggle.apply(this, arguments)
            } else {
                s == null || w ? this.each(function () {
                    var A = w ? s : ag(this).is(":hidden");
                    ag(this)[A ? "show" : "hide"]()
                }) : this.animate(aA("toggle", 3), s, c)
            }
            return this
        },
        fadeTo: function (s, c, w) {
            return this.filter(":hidden").css("opacity", 0).show().end().animate({
                opacity: c
            }, s, w)
        },
        animate: function (s, c, G, w) {
            var A = ag.speed(c, G, w);
            if (ag.isEmptyObject(s)) {
                return this.each(A.complete)
            }
            return this[A.queue === false ? "each" : "queue"](function () {
                var K = ag.extend({}, A),
                    H, M = this.nodeType === 1 && ag(this).is(":hidden"),
                    L = this;
                for (H in s) {
                    var O = H.replace(i, bd);
                    if (H !== O) {
                        s[O] = s[H];
                        delete s[H];
                        H = O
                    }
                    if (s[H] === "hide" && M || s[H] === "show" && !M) {
                        return K.complete.call(this)
                    }
                    if ((H === "height" || H === "width") && this.style) {
                        K.display = ag.css(this, "display");
                        K.overflow = this.style.overflow
                    }
                    if (ag.isArray(s[H])) {
                        (K.specialEasing = K.specialEasing || {})[H] = s[H][1];
                        s[H] = s[H][0]
                    }
                }
                if (K.overflow != null) {
                    this.style.overflow = "hidden"
                }
                K.curAnim = ag.extend({}, s);
                ag.each(s, function (P, U) {
                    var V = new ag.fx(L, K, P);
                    if (a.test(U)) {
                        V[U === "toggle" ? M ? "show" : "hide" : U](s)
                    } else {
                        var T = a3.exec(U),
                            R = V.cur(true) || 0;
                        if (T) {
                            U = parseFloat(T[2]);
                            var Q = T[3] || "px";
                            if (Q !== "px") {
                                L.style[P] = (U || 1) + Q;
                                R = (U || 1) / V.cur(true) * R;
                                L.style[P] = R + Q
                            }
                            if (T[1]) {
                                U = (T[1] === "-=" ? -1 : 1) * U + R
                            }
                            V.custom(R, U, Q)
                        } else {
                            V.custom(R, U, "")
                        }
                    }
                });
                return true
            })
        },
        stop: function (s, c) {
            var w = ag.timers;
            s && this.queue([]);
            this.each(function () {
                for (var A = w.length - 1; A >= 0; A--) {
                    if (w[A].elem === this) {
                        c && w[A](true);
                        w.splice(A, 1)
                    }
                }
            });
            c || this.dequeue();
            return this
        }
    });
    ag.each({
        slideDown: aA("show", 1),
        slideUp: aA("hide", 1),
        slideToggle: aA("toggle", 1),
        fadeIn: {
            opacity: "show"
        },
        fadeOut: {
            opacity: "hide"
        }
    }, function (s, c) {
        ag.fn[s] = function (A, w) {
            return this.animate(c, A, w)
        }
    });
    ag.extend({
        speed: function (s, c, A) {
            var w = s && typeof s === "object" ? s : {
                complete: A || !A && c || ag.isFunction(s) && s,
                duration: s,
                easing: A && c || c && !ag.isFunction(c) && c
            };
            w.duration = ag.fx.off ? 0 : typeof w.duration === "number" ? w.duration : ag.fx.speeds[w.duration] || ag.fx.speeds._default;
            w.old = w.complete;
            w.complete = function () {
                w.queue !== false && ag(this).dequeue();
                ag.isFunction(w.old) && w.old.call(this)
            };
            return w
        },
        easing: {
            linear: function (s, c, A, w) {
                return A + w * s
            },
            swing: function (s, c, A, w) {
                return (-Math.cos(s * Math.PI) / 2 + 0.5) * w + A
            }
        },
        timers: [],
        fx: function (s, c, w) {
            this.options = c;
            this.elem = s;
            this.prop = w;
            if (!c.orig) {
                c.orig = {}
            }
        }
    });
    ag.fx.prototype = {
        update: function () {
            this.options.step && this.options.step.call(this.elem, this.now, this);
            (ag.fx.step[this.prop] || ag.fx.step._default)(this);
            if ((this.prop === "height" || this.prop === "width") && this.elem.style) {
                this.elem.style.display = "block"
            }
        },
        cur: function (c) {
            if (this.elem[this.prop] != null && (!this.elem.style || this.elem.style[this.prop] == null)) {
                return this.elem[this.prop]
            }
            return (c = parseFloat(ag.css(this.elem, this.prop, c))) && c > -10000 ? c : parseFloat(ag.curCSS(this.elem, this.prop)) || 0
        },
        custom: function (s, c, G) {
            function w(H) {
                return A.step(H)
            }
            this.startTime = aB();
            this.start = s;
            this.end = c;
            this.unit = G || this.unit || "px";
            this.now = this.start;
            this.pos = this.state = 0;
            var A = this;
            w.elem = this.elem;
            if (w() && ag.timers.push(w) && !al) {
                al = setInterval(ag.fx.tick, 13)
            }
        },
        show: function () {
            this.options.orig[this.prop] = ag.style(this.elem, this.prop);
            this.options.show = true;
            this.custom(this.prop === "width" || this.prop === "height" ? 1 : 0, this.cur());
            ag(this.elem).show()
        },
        hide: function () {
            this.options.orig[this.prop] = ag.style(this.elem, this.prop);
            this.options.hide = true;
            this.custom(this.cur(), 0)
        },
        step: function (s) {
            var c = aB(),
                G = true;
            if (s || c >= this.options.duration + this.startTime) {
                this.now = this.end;
                this.pos = this.state = 1;
                this.update();
                this.options.curAnim[this.prop] = true;
                for (var w in this.options.curAnim) {
                    if (this.options.curAnim[w] !== true) {
                        G = false
                    }
                }
                if (G) {
                    if (this.options.display != null) {
                        this.elem.style.overflow = this.options.overflow;
                        s = ag.data(this.elem, "olddisplay");
                        this.elem.style.display = s ? s : this.options.display;
                        if (ag.css(this.elem, "display") === "none") {
                            this.elem.style.display = "block"
                        }
                    }
                    this.options.hide && ag(this.elem).hide();
                    if (this.options.hide || this.options.show) {
                        for (var A in this.options.curAnim) {
                            ag.style(this.elem, A, this.options.orig[A])
                        }
                    }
                    this.options.complete.call(this.elem)
                }
                return false
            } else {
                A = c - this.startTime;
                this.state = A / this.options.duration;
                s = this.options.easing || (ag.easing.swing ? "swing" : "linear");
                this.pos = ag.easing[this.options.specialEasing && this.options.specialEasing[this.prop] || s](this.state, A, 0, 1, this.options.duration);
                this.now = this.start + (this.end - this.start) * this.pos;
                this.update()
            }

            return true
        }
    };
    ag.extend(ag.fx, {
        tick: function () {
            for (var s = ag.timers, c = 0; c < s.length; c++) {
                s[c]() || s.splice(c--, 1)
            }
            s.length || ag.fx.stop()
        },
        stop: function () {
            clearInterval(al);
            al = null
        },
        speeds: {
            slow: 600,
            fast: 200,
            _default: 400
        },
        step: {
            opacity: function (c) {
                ag.style(c.elem, "opacity", c.now)
            },
            _default: function (c) {
                if (c.elem.style && c.elem.style[c.prop] != null) {
                    c.elem.style[c.prop] = (c.prop === "width" || c.prop === "height" ? Math.max(0, c.now) : c.now) + c.unit
                } else {
                    c.elem[c.prop] = c.now
                }
            }
        }
    });
    if (ag.expr && ag.expr.filters) {
        ag.expr.filters.animated = function (c) {
            return ag.grep(ag.timers, function (s) {
                return c === s.elem
            }).length
        }
    }
    ag.fn.offset = "getBoundingClientRect" in N.documentElement ?
    function (s) {
        var c = this[0];
        if (!c || !c.ownerDocument) {
            return null
        }
        if (s) {
            return this.each(function (G) {
                ag.offset.setOffset(this, s, G)
            })
        }
        if (c === c.ownerDocument.body) {
            return ag.offset.bodyOffset(c)
        }
        var A = c.getBoundingClientRect(),
            w = c.ownerDocument;
        c = w.body;
        w = w.documentElement;
        return {
            top: A.top + (self.pageYOffset || ag.support.boxModel && w.scrollTop || c.scrollTop) - (w.clientTop || c.clientTop || 0),
            left: A.left + (self.pageXOffset || ag.support.boxModel && w.scrollLeft || c.scrollLeft) - (w.clientLeft || c.clientLeft || 0)
        }
    } : function (O) {
        var M = this[0];
        if (!M || !M.ownerDocument) {
            return null
        }
        if (O) {
            return this.each(function (P) {
                ag.offset.setOffset(this, O, P)
            })
        }
        if (M === M.ownerDocument.body) {
            return ag.offset.bodyOffset(M)
        }
        ag.offset.initialize();
        var L = M.offsetParent,
            H = M,
            K = M.ownerDocument,
            G, A = K.documentElement,
            s = K.body;
        H = (K = K.defaultView) ? K.getComputedStyle(M, null) : M.currentStyle;
        for (var c = M.offsetTop, w = M.offsetLeft;
        (M = M.parentNode) && M !== s && M !== A;) {
            if (ag.offset.supportsFixedPosition && H.position === "fixed") {
                break
            }
            G = K ? K.getComputedStyle(M, null) : M.currentStyle;
            c -= M.scrollTop;
            w -= M.scrollLeft;
            if (M === L) {
                c += M.offsetTop;
                w += M.offsetLeft;
                if (ag.offset.doesNotAddBorder && !(ag.offset.doesAddBorderForTableAndCells && /^t(able|d|h)$/i.test(M.nodeName))) {
                    c += parseFloat(G.borderTopWidth) || 0;
                    w += parseFloat(G.borderLeftWidth) || 0
                }
                H = L;
                L = M.offsetParent
            }
            if (ag.offset.subtractsBorderForOverflowNotVisible && G.overflow !== "visible") {
                c += parseFloat(G.borderTopWidth) || 0;
                w += parseFloat(G.borderLeftWidth) || 0
            }
            H = G
        }
        if (H.position === "relative" || H.position === "static") {
            c += s.offsetTop;
            w += s.offsetLeft
        }
        if (ag.offset.supportsFixedPosition && H.position === "fixed") {
            c += Math.max(A.scrollTop, s.scrollTop);
            w += Math.max(A.scrollLeft, s.scrollLeft)
        }
        return {
            top: c,
            left: w
        }
    };
    ag.offset = {
        initialize: function () {
            var s = N.body,
                c = N.createElement("div"),
                H, A, G, w = parseFloat(ag.curCSS(s, "marginTop", true)) || 0;
            ag.extend(c.style, {
                position: "absolute",
                top: 0,
                left: 0,
                margin: 0,
                border: 0,
                width: "1px",
                height: "1px",
                visibility: "hidden"
            });
            c.innerHTML = "<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";
            s.insertBefore(c, s.firstChild);
            H = c.firstChild;
            A = H.firstChild;
            G = H.nextSibling.firstChild.firstChild;
            this.doesNotAddBorder = A.offsetTop !== 5;
            this.doesAddBorderForTableAndCells = G.offsetTop === 5;
            A.style.position = "fixed";
            A.style.top = "20px";
            this.supportsFixedPosition = A.offsetTop === 20 || A.offsetTop === 15;
            A.style.position = A.style.top = "";
            H.style.overflow = "hidden";
            H.style.position = "relative";
            this.subtractsBorderForOverflowNotVisible = A.offsetTop === -5;
            this.doesNotIncludeMarginInBodyOffset = s.offsetTop !== w;
            s.removeChild(c);
            ag.offset.initialize = ag.noop
        },
        bodyOffset: function (s) {
            var c = s.offsetTop,
                w = s.offsetLeft;
            ag.offset.initialize();
            if (ag.offset.doesNotIncludeMarginInBodyOffset) {
                c += parseFloat(ag.curCSS(s, "marginTop", true)) || 0;
                w += parseFloat(ag.curCSS(s, "marginLeft", true)) || 0
            }
            return {
                top: c,
                left: w
            }
        },
        setOffset: function (s, c, K) {
            if (/static/.test(ag.curCSS(s, "position"))) {
                s.style.position = "relative"
            }
            var G = ag(s),
                H = G.offset(),
                A = parseInt(ag.curCSS(s, "top", true), 10) || 0,
                w = parseInt(ag.curCSS(s, "left", true), 10) || 0;
            if (ag.isFunction(c)) {
                c = c.call(s, K, H)
            }
            K = {
                top: c.top - H.top + A,
                left: c.left - H.left + w
            };
            "using" in c ? c.using.call(s, K) : G.css(K)
        }
    };
    ag.fn.extend({
        position: function () {
            if (!this[0]) {
                return null
            }
            var s = this[0],
                c = this.offsetParent(),
                A = this.offset(),
                w = /^body|html$/i.test(c[0].nodeName) ? {
                    top: 0,
                    left: 0
                } : c.offset();
            A.top -= parseFloat(ag.curCSS(s, "marginTop", true)) || 0;
            A.left -= parseFloat(ag.curCSS(s, "marginLeft", true)) || 0;
            w.top += parseFloat(ag.curCSS(c[0], "borderTopWidth", true)) || 0;
            w.left += parseFloat(ag.curCSS(c[0], "borderLeftWidth", true)) || 0;
            return {
                top: A.top - w.top,
                left: A.left - w.left
            }
        },
        offsetParent: function () {
            return this.map(function () {
                for (var c = this.offsetParent || N.body; c && !/^body|html$/i.test(c.nodeName) && ag.css(c, "position") === "static";) {
                    c = c.offsetParent
                }
                return c
            })
        }
    });
    ag.each(["Left", "Top"], function (s, c) {
        var w = "scroll" + c;
        ag.fn[w] = function (G) {
            var H = this[0],
                A;
            if (!H) {
                return null
            }
            if (G !== J) {
                return this.each(function () {
                    if (A = p(this)) {
                        A.scrollTo(!s ? G : ag(A).scrollLeft(), s ? G : ag(A).scrollTop())
                    } else {
                        this[w] = G
                    }
                })
            } else {
                return (A = p(H)) ? "pageXOffset" in A ? A[s ? "pageYOffset" : "pageXOffset"] : ag.support.boxModel && A.document.documentElement[w] || A.document.body[w] : H[w]
            }
        }
    });
    ag.each(["Height", "Width"], function (s, c) {
        var w = c.toLowerCase();
        ag.fn["inner" + c] = function () {
            return this[0] ? ag.css(this[0], w, false, "padding") : null
        };
        ag.fn["outer" + c] = function (A) {
            return this[0] ? ag.css(this[0], w, false, A ? "margin" : "border") : null
        };
        ag.fn[w] = function (A) {
            var G = this[0];
            if (!G) {
                return A == null ? null : this
            }
            return "scrollTo" in G && G.document ? G.document.compatMode === "CSS1Compat" && G.document.documentElement["client" + c] || G.document.body["client" + c] : G.nodeType === 9 ? Math.max(G.documentElement["client" + c], G.body["scroll" + c], G.documentElement["scroll" + c], G.body["offset" + c], G.documentElement["offset" + c]) : A === J ? ag.css(G, w) : this.css(w, typeof A === "string" ? A : A + "px")
        }
    });
    aM.jQuery = aM.$ = ag
})(window);
/*
 * SWFObject v1.5: Flash Player detection and embed - http://blog.deconcept.com/swfobject/
 *
 * SWFObject is (c) 2007 Geoff Stearns and is released under the MIT License:
 * http://www.opensource.org/licenses/mit-license.php
 *
 */
if (typeof deconcept == "undefined") {
    var deconcept = new Object()
}
if (typeof deconcept.util == "undefined") {
    deconcept.util = new Object()
}
if (typeof deconcept.SWFObjectUtil == "undefined") {
    deconcept.SWFObjectUtil = new Object()
}
deconcept.SWFObject = function (n, b, o, e, j, k, g, f, d, m) {
    if (!document.getElementById) {
        return
    }
    this.DETECT_KEY = m ? m : "detectflash";
    this.skipDetect = deconcept.util.getRequestParameter(this.DETECT_KEY);
    this.params = new Object();
    this.variables = new Object();
    this.attributes = new Array();
    if (n) {
        this.setAttribute("swf", n)
    }
    if (b) {
        this.setAttribute("id", b)
    }
    if (o) {
        this.setAttribute("width", o)
    }
    if (e) {
        this.setAttribute("height", e)
    }
    if (j) {
        this.setAttribute("version", new deconcept.PlayerVersion(j.toString().split(".")))
    }
    this.installedVer = deconcept.SWFObjectUtil.getPlayerVersion();
    if (!window.opera && document.all && this.installedVer.major > 7) {
        deconcept.SWFObject.doPrepUnload = true
    }
    if (k) {
        this.addParam("bgcolor", k)
    }
    var a = g ? g : "high";
    this.addParam("quality", a);
    this.setAttribute("useExpressInstall", false);
    this.setAttribute("doExpressInstall", false);
    var i = (f) ? f : window.location;
    this.setAttribute("xiRedirectUrl", i);
    this.setAttribute("redirectUrl", "");
    if (d) {
        this.setAttribute("redirectUrl", d)
    }
};
deconcept.SWFObject.prototype = {
    useExpressInstall: function (a) {
        this.xiSWFPath = !a ? "expressinstall.swf" : a;
        this.setAttribute("useExpressInstall", true)
    },
    setAttribute: function (a, b) {
        this.attributes[a] = b
    },
    getAttribute: function (a) {
        return this.attributes[a]
    },
    addParam: function (b, a) {
        this.params[b] = a
    },
    getParams: function () {
        return this.params
    },
    addVariable: function (b, a) {
        this.variables[b] = a
    },
    getVariable: function (a) {
        return this.variables[a]
    },
    getVariables: function () {
        return this.variables
    },
    getVariablePairs: function () {
        var c = new Array();
        var b;
        var a = this.getVariables();
        for (b in a) {
            c[c.length] = b + "=" + a[b]
        }
        return c
    },
    getSWFHTML: function () {
        var b = "";
        if (navigator.plugins && navigator.mimeTypes && navigator.mimeTypes.length) {
            if (this.getAttribute("doExpressInstall")) {
                this.addVariable("MMplayerType", "PlugIn");
                this.setAttribute("swf", this.xiSWFPath)
            }
            b = '<embed type="application/x-shockwave-flash" src="' + this.getAttribute("swf") + '" width="' + this.getAttribute("width") + '" height="' + this.getAttribute("height") + '" style="' + this.getAttribute("style") + '"';
            b += ' id="' + this.getAttribute("id") + '" name="' + this.getAttribute("id") + '" ';
            var f = this.getParams();
            for (var e in f) {
                b += [e] + '="' + f[e] + '" '
            }
            var d = this.getVariablePairs().join("&");
            if (d.length > 0) {
                b += 'flashvars="' + d + '"'
            }
            b += "/>"
        } else {
            if (this.getAttribute("doExpressInstall")) {
                this.addVariable("MMplayerType", "ActiveX");
                this.setAttribute("swf", this.xiSWFPath)
            }
            b = '<object id="' + this.getAttribute("id") + '" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="' + this.getAttribute("width") + '" height="' + this.getAttribute("height") + '" style="' + this.getAttribute("style") + '">';
            b += '<param name="movie" value="' + this.getAttribute("swf") + '" />';
            var c = this.getParams();
            for (var e in c) {
                b += '<param name="' + e + '" value="' + c[e] + '" />'
            }
            var a = this.getVariablePairs().join("&");
            if (a.length > 0) {
                b += '<param name="flashvars" value="' + a + '" />'
            }
            b += "</object>"
        }
        return b
    },
    write: function (b) {
        if (this.getAttribute("useExpressInstall")) {
            var a = new deconcept.PlayerVersion([6, 0, 65]);
            if (this.installedVer.versionIsValid(a) && !this.installedVer.versionIsValid(this.getAttribute("version"))) {
                this.setAttribute("doExpressInstall", true);
                this.addVariable("MMredirectURL", escape(this.getAttribute("xiRedirectUrl")));
                document.title = document.title.slice(0, 47) + " - Flash Player Installation";
                this.addVariable("MMdoctitle", document.title)
            }
        }
        if (this.skipDetect || this.getAttribute("doExpressInstall") || this.installedVer.versionIsValid(this.getAttribute("version"))) {
            var c = (typeof b == "string") ? document.getElementById(b) : b;
            c.innerHTML = this.getSWFHTML();
            return true
        } else {
            if (this.getAttribute("redirectUrl") != "") {
                document.location.replace(this.getAttribute("redirectUrl"))
            }
        }
        return false
    }
};
deconcept.SWFObjectUtil.getPlayerVersion = function () {
    var f = new deconcept.PlayerVersion([0, 0, 0]);
    if (navigator.plugins && navigator.mimeTypes.length) {
        var a = navigator.plugins["Shockwave Flash"];
        if (a && a.description) {
            f = new deconcept.PlayerVersion(a.description.replace(/([a-zA-Z]|\s)+/, "").replace(/(\s+r|\s+b[0-9]+)/, ".").split("."))
        }
    } else {
        if (navigator.userAgent && navigator.userAgent.indexOf("Windows CE") >= 0) {
            var b = 1;
            var c = 3;
            while (b) {
                try {
                    c++;
                    b = new ActiveXObject("ShockwaveFlash.ShockwaveFlash." + c);
                    f = new deconcept.PlayerVersion([c, 0, 0])
                } catch (d) {
                    b = null
                }
            }
        } else {
            try {
                var b = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7")
            } catch (d) {
                try {
                    var b = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");
                    f = new deconcept.PlayerVersion([6, 0, 21]);
                    b.AllowScriptAccess = "always"
                } catch (d) {
                    if (f.major == 6) {
                        return f
                    }
                }
                try {
                    b = new ActiveXObject("ShockwaveFlash.ShockwaveFlash")
                } catch (d) {}
            }
            if (b != null) {
                f = new deconcept.PlayerVersion(b.GetVariable("$version").split(" ")[1].split(","))
            }
        }
    }
    return f
};
deconcept.PlayerVersion = function (a) {
    this.major = a[0] != null ? parseInt(a[0]) : 0;
    this.minor = a[1] != null ? parseInt(a[1]) : 0;
    this.rev = a[2] != null ? parseInt(a[2]) : 0
};
deconcept.PlayerVersion.prototype.versionIsValid = function (a) {
    if (this.major < a.major) {
        return false
    }
    if (this.major > a.major) {
        return true
    }
    if (this.minor < a.minor) {
        return false
    }
    if (this.minor > a.minor) {
        return true
    }
    if (this.rev < a.rev) {
        return false
    }
    return true
};
deconcept.util = {
    getRequestParameter: function (c) {
        var d = document.location.search || document.location.hash;
        if (c == null) {
            return d
        }
        if (d) {
            var b = d.substring(1).split("&");
            for (var a = 0; a < b.length; a++) {
                if (b[a].substring(0, b[a].indexOf("=")) == c) {
                    return b[a].substring((b[a].indexOf("=") + 1))
                }
            }
        }
        return ""
    }
};
deconcept.SWFObjectUtil.cleanupSWFs = function () {
    var b = document.getElementsByTagName("OBJECT");
    for (var c = b.length - 1; c >= 0; c--) {
        b[c].style.display = "none";
        for (var a in b[c]) {
            if (typeof b[c][a] == "function") {
                b[c][a] = function () {}
            }
        }
    }
};
if (deconcept.SWFObject.doPrepUnload) {
    if (!deconcept.unloadSet) {
        deconcept.SWFObjectUtil.prepUnload = function () {
            __flash_unloadHandler = function () {};
            __flash_savedUnloadHandler = function () {};
            window.attachEvent("onunload", deconcept.SWFObjectUtil.cleanupSWFs)
        };
        window.attachEvent("onbeforeunload", deconcept.SWFObjectUtil.prepUnload);
        deconcept.unloadSet = true
    }
}
if (!document.getElementById && document.all) {
    document.getElementById = function (a) {
        return document.all[a]
    }
}
var getQueryParamValue = deconcept.util.getRequestParameter;
var FlashObject = deconcept.SWFObject;
var SWFObject = deconcept.SWFObject;
window.name = "bloomberg";
if (typeof BLOOMBERG === "undefined" || !BLOOMBERG) {
    var BLOOMBERG = {}
}
if (typeof (BLOOMBERG.global_var) === "undefined") {
    BLOOMBERG.global_var = {}
}
if (typeof (BLOOMBERG.chartData) === "undefined") {
    BLOOMBERG.chartData = {}
}
if (typeof image_domain === "undefined") {
    image_domain = ""
}(function () {
    new_nav_event_registered = false;
    new_ext_nav_events_registered = false;
    BLOOMBERG.register_nav_events = function () {
        if (new_nav_event_registered) {
            return
        }
        try {
            if ($("#primary_navigation .nav_menu_item_with_dropdown .menu_icon").length > 0) {
                var b = $("#primary_navigation .nav_menu_item_with_dropdown .menu_icon");
                b.hover(function () {
                    $(this).closest(".nav_menu_item_with_dropdown").addClass("menu_icon_mouse_over")
                }, function () {
                    $(this).closest(".nav_menu_item_with_dropdown").removeClass("menu_icon_mouse_over")
                });
                b.click(function () {
                    $("#primary_navigation .nav_menu_item_with_dropdown").not($(this).closest(".nav_menu_item_with_dropdown")).removeClass("show_sub_menu");
                    $(this).closest(".nav_menu_item_with_dropdown").toggleClass("show_sub_menu");
                    return false
                });
                $("body").click(function () {
                    b.closest(".nav_menu_item_with_dropdown").removeClass("show_sub_menu")
                });
                new_nav_event_registered = true
            }
        } catch (a) {}
    };
    BLOOMBERG.register_ext_nav_events = function () {
        var b, f, a;

        function c(h) {
            if (f && a == h) {
                clearTimeout(f);
                clearTimeout(b);
                f = null;
                b = null
            }
        }
        function e(h) {
            h.addClass("show_sub_menu");
            a = h
        }
        if (new_ext_nav_events_registered) {
            return
        }
        try {
            var g = $("#ext_primary_navigation .nav_menu_item_with_dropdown");
            g.each(function () {
                var n = $(this),
                    k = n.find(".menu_tab"),
                    j = n.find(".div_dropdown_container"),
                    h = navigator.userAgent && (navigator.userAgent.match(/iPad/i) != null),
                    m = 150,
                    i = 250;
                if (!h) {
                    k.mouseenter(function () {
                        c(n);
                        if (b) {
                            clearTimeout(b);
                            b = null
                        }
                        b = setTimeout(function () {
                            e(n)
                        }, i)
                    });
                    j.mouseenter(function () {
                        c(n)
                    })
                } else {
                    k.click(function () {
                        if (!n.hasClass("show_sub_menu")) {
                            n.addClass("show_sub_menu");
                            return false
                        }
                    })
                }
                n.mouseleave(function () {
                    if (f) {
                        clearTimeout(f);
                        f = null
                    }
                    if (b) {
                        clearTimeout(b);
                        b = null
                    }
                    f = setTimeout(function () {
                        g.removeClass("show_sub_menu")
                    }, m)
                })
            });
            $("body").click(function () {
                g.removeClass("show_sub_menu")
            });
            new_ext_nav_events_registered = true
        } catch (d) {}
    }
})();
(function () {
    BLOOMBERG.namespace = function (b) {
        var a = [],
            d, c;
        a = b.split(".");
        d = BLOOMBERG;
        if (a[0] === "BLOOMBERG") {
            a.shift()
        }
        for (c = 0; c < a.length; c++) {
            if (typeof d[a[c]] === "undefined") {
                d[a[c]] = {}
            }
            d = d[a[c]]
        }
        return d
    }
})();
(function () {
    Array.prototype.contains = function (b) {
        for (var a = 0; a < this.length; a++) {
            if (b === this[a]) {
                return true
            }
        }
        return false
    };
    String.prototype.strip = function () {
        return this.replace(/^\s+|\s+$/g, "")
    };
    String.prototype.starts_with = function (a) {
        return this.indexOf(a) == 0
    };
    String.prototype.ends_with = function (a) {
        return (this.lastIndexOf(a) >= 0) && (this.lastIndexOf(a) == (this.length - a.length))
    };
    Date.nextYear = function () {
        var a = new Date();
        return new Date(a.getFullYear() + 1, a.getMonth(), a.getDate(), a.getHours(), a.getMinutes(), a.getSeconds(), a.getMilliseconds())
    }
})();
(function () {
    var b = BLOOMBERG,
        a = b.namespace("url");
    a.CombinePath = function (d, c) {
        if (typeof (d) == "undefined") {
            return c
        }
        if (typeof (c) == "undefined") {
            return d
        }
        if (d.ends_with("/") && c.starts_with("/")) {
            return d + c.slice(1)
        } else {
            return d + c
        }
    }
})();
(function () {
    var c = BLOOMBERG,
        b = c.namespace("video");
    b.generate_url_from_fvid = function (d) {
        return c.global_var.video_domain + d + ".flv"
    };

    function a(d) {
        var f = "";
        for (var g in d) {
            f += "&amp;" + g + "=" + escape(d[g])
        }
        return f.substring(5)
    }
    b.generate_embed = function (d, e) {
        var h = {
            height: 360,
            width: 640,
            site: "blp.embed",
            zone: "vod",
            poster_url: ""
        };
        $.extend(h, e);
        var g = {
            file_url: b.generate_url_from_fvid(d),
            autoplay: false,
            site: h.site,
            zone: h.zone,
            EnableLogging: "true",
            LoggingDomain: "www.bloomberg.com",
            sz: "1x1",
            tile: "1",
            poster_url: h.poster_url
        },
            i = a(g),
            f = "http://cdn.gotraffic.net/flash/BloombergMediaPlayer.swf";
        return '<object width="' + h.width + '" height="' + h.height + '"><param name="movie" value="' + f + '"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><param name="flashvars" value="' + i + '"></param><embed src="' + f + '" flashvars="' + i + '" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="' + h.width + '" height="' + h.height + '" wmode="opaque"></embed></object>'
    };
    b.bind_video_embed = function (d) {
        return this.each(function () {
            var i = $(this),
                e = $("#" + d),
                f = i.find("a"),
                h = function () {
                    var j = $("<span>Embed Code</span>"),
                        p = $("<textarea></textarea>"),
                        o = $('<a href="#close" class="close">X</a>'),
                        m = $('meta[property="og:image"]').attr("content"),
                        k = {
                            poster_url: m,
                            zone: BLOOMBERG._zone
                        },
                        n = $('<div class="video_embed_code"></div>');
                    p.val(b.generate_embed(c._fvid_id, k));
                    p.click(function () {
                        this.select()
                    });
                    o.click(g);
                    n.append(j).append(p).append(o);
                    e.html(n).show();
                    f.unbind("click", h).click(g);
                    return false
                },
                g = function () {
                    e.toggle();
                    return false
                };
            f.click(h)
        })
    }
})();
(function () {
    $.fn.bindVideoEmbed = BLOOMBERG.video.bind_video_embed
})();
(function () {
    var b = BLOOMBERG,
        a = b.namespace("util");
    a.Cookie = (function () {
        var f;

        function g(m, o, k, p, n) {
            var k = new Date(k),
                j;
            if (k) {
                j = "; expires=" + k.toGMTString()
            } else {
                j = ""
            }
            if (typeof p === "undefined") {
                p = "; path=/"
            } else {
                p = "; path=" + p
            }
            if (typeof n === "undefined") {
                n = ""
            } else {
                n = "; domain=" + n
            }
            document.cookie = m + "=" + o + j + p + n
        }
        function d(k, n, o, m) {
            var j;
            j = "";
            if (typeof o === "undefined") {
                o = "; path=/"
            } else {
                o = "; path=" + o
            }
            if (typeof m === "undefined") {
                m = ""
            } else {
                m = "; domain=" + m
            }
            document.cookie = k + "=" + n + j + o + m
        }
        function i(j) {
            var k = document.cookie.match("(^|;) ?" + j + "=([^;$]*)");
            if (k) {
                return k[2]
            }
            return ""
        }
        function e(j) {
            return i(j)
        }
        function c(j) {
            return i(j)
        }
        function h(j, n, k) {
            var m = n || "/";
            g(j, "", -1, m, k)
        }
        f = {
            set: function (k, n, j, o, m) {
                g(k, n, j, o, m)
            },
            setEndOfSession: function (j, m, n, k) {
                d(j, m, n, k)
            },
            get: function (j) {
                return e(j)
            },
            getOpt: function (j) {
                return c(j)
            },
            erase: function (j) {
                h(j, "/", "bloomberg.com")
            },
            remove: function (j, m, k) {
                h(j, m, k)
            },
            removeCookies: function (k, n, m) {
                for (var j = 0; j < k.length; j++) {
                    h(k[j], n, m)
                }
            }
        };
        return f
    })()
})();
(function () {
    var a = BLOOMBERG;
    a.num = (function () {
        var b;

        function c(e, d) {
            var f = "" + e;
            while (f.length < d) {
                f = "0" + f
            }
            return f
        }
        b = {
            pad: function (e, d) {
                return c(e, d)
            }
        };
        return b
    })()
})();
(function () {
    var b = BLOOMBERG,
        a = b.namespace("date");
    a.ago_time_format = function (d) {
        var c = new Date();
        if (c - d < 120000) {
            return "1 minute ago"
        } else {
            if (c - d < 3600000) {
                return Math.floor((c - d) / 60000) + " minutes ago"
            } else {
                if (c - d < 7200000) {
                    return "1 hour ago"
                } else {
                    if (c - d < 18000000) {
                        return Math.floor((c - d) / 3600000) + " hours ago"
                    }
                }
            }
        }
        return ""
    };
    a.chartDateFormatter = function (e) {
        var d = "",
            c = Highcharts.dateFormat("%H", e);
        if (c % 2 == 0) {
            if (c == "00") {
                d = Highcharts.dateFormat("%b %d", e)
            } else {
                d = Highcharts.dateFormat("%l%P", e)
            }
        }
        return d
    };
    a.extendedChartDateFormatter = function (i, h) {
        var e = "",
            f = Highcharts.dateFormat("%M", i),
            d = Highcharts.dateFormat("%e", i),
            g = Highcharts.dateFormat("%a", i),
            c = Highcharts.dateFormat("%H", i);
        if (h == "1D" && f == "00") {
            e = Highcharts.dateFormat("%l%P", i)
        } else {
            if (h == "1M" && c == "00") {
                e = Highcharts.dateFormat("%b %e", i)
            } else {
                if (h == "1Y") {
                    e = Highcharts.dateFormat("%b", i)
                }
            }
        }
        return e
    };
    a.chartMarkerDateFormatter = function (h, g) {
        var d = "";
        var f = Highcharts.dateFormat("%m", h);
        var c = Highcharts.dateFormat("%e", h);
        f = ((f.indexOf("0") == 0) ? f.substring(1) : f);
        var e = Highcharts.dateFormat("%l:%M:%S %P", h);
        if (g == "1D") {
            d = e
        } else {
            if (g == "1M") {
                d = f + "/" + c
            } else {
                if (g == "1Y") {
                    d = Highcharts.dateFormat("%b %e", h)
                }
            }
        }
        return d
    }
})();
(function () {
    var d = BLOOMBERG,
        c = d.namespace("widget"),
        b;
    b = {
        tabNameArray: [],
        targetDom: null,
        tabGroupDom: null,
        defaultTabName: null
    };

    function a(f, g) {
        if (!f || !f.tabNameArray || !f.targetDom || !f.tabGroupDom) {
            return
        }
        $.extend(b, f);

        function e() {
            f.targetDom.removeClass(f.tabNameArray.join(" "))
        }
        if (f.defaultTabName) {
            e();
            f.targetDom.addClass(f.defaultTabName)
        }
        $(f.tabNameArray).each(function () {
            var h = this.toString();
            f.tabGroupDom.find("." + h).click(function () {
                e();
                f.targetDom.addClass(h);
                if (g) {
                    g.call(a, h)
                }
                return false
            })
        })
    }
    c.FilterTabs = function (e, f) {
        return new a(e, f)
    }
})();
(function () {
    var b = BLOOMBERG,
        a = b.namespace("widget");
    a.TvChannelLookup = function () {
        var g = $("#fake_zip_lookup"),
            i = $("#zip_lookup"),
            h = $("#channel_lookup_form"),
            d = $("#lookup_results"),
            e = $("#country_lookup");

        function c(j) {
            if (j === true) {
                g.hide();
                i.show();
                i.focus()
            } else {
                i.hide();
                g.show()
            }
        }
        i.val("");
        e.val("US").change(function () {
            if ($(this).val() === "US") {
                c(false)
            } else {
                g.hide();
                i.hide()
            }
        });
        g.focus(function () {
            c(true)
        });
        i.blur(function () {
            if ($(this).val() === "") {
                c(false)
            }
        });

        function f() {
            var k = i.val(),
                m = e.val(),
                j, r = $("#channel_finder .lookup_error");

            function q(u) {
                r.html(u);
                r.show()
            }
            function o() {
                r.html("");
                r.hide()
            }
            function n(u, w) {
                var y = "/chlookup/chan",
                    v = {};
                if (u === "US" && w.length === 5) {
                    v.zip = w
                } else {
                    if (u !== "US") {
                        v.country = u
                    }
                }
                $("#channel_loading_img").show();
                $.ajax({
                    type: "GET",
                    url: y,
                    data: v,
                    dataType: "json",
                    success: function (z) {
                        s(z)
                    },
                    error: function () {
                        q("Network error.")
                    },
                    complete: function () {
                        $("#channel_loading_img").hide()
                    }
                })
            }
            function p(y) {
                var w = $("<table></table>"),
                    B = y.PROVIDER.concat(y.SATPROVIDER),
                    A = $("<th></th>").text("PROVIDERS"),
                    v = $("<th></th>"),
                    z = $('<tr><td class="disclaimer" colspan="2">* Not available in all areas</td></tr>'),
                    u = false;
                w.append(A).append(v);
                if (B.length > 0) {
                    $.each(B, function (E) {
                        var H = $("<tr></tr>"),
                            D = $("<td></td>").addClass("provider"),
                            G = $("<td></td>").addClass("channels"),
                            C = B[E].NAME,
                            F = t(B[E]);
                        D.text(C);
                        G.text(F);
                        if (F !== "" && !u) {
                            u = true
                        }
                        H.append(D).append(G);
                        w.append(H)
                    });
                    w.append(z)
                } else {
                    w.append('<tr><td colspan="2">Unfortunately, there are no providers in ' + y.COUNTRY.CODE + "</td></tr>")
                }
                if (u) {
                    v.text("CHANNEL")
                }
                return w
            }
            function t(v) {
                var u = v.CHANNEL,
                    w = v.HDCHANNEL,
                    y = "";
                if (w !== "") {
                    if (u !== "") {
                        y += ", "
                    }
                    y += $.map(w.split(","), function (z) {
                        return z + " (HD)"
                    })
                }
                return u + y
            }
            function s(B) {
                var z = p(B),
                    u = $("#change"),
                    y = $("#control1"),
                    w = $("#control2"),
                    A, v = B.COUNTRY.CODE,
                    C = $("#country_lookup :selected").text();
                u.click(function (D) {
                    D.preventDefault();
                    w.hide();
                    y.show();
                    return false
                });
                A = C;
                if (v === "US") {
                    A += " " + $("#zip_lookup").val()
                }
                y.hide();
                $("#area").text(A);
                w.show();
                d.html("").append(z).show()
            }
            o();
            if (m === "US" && (!k || k.length !== 5)) {
                q("ZIP is required for U.S. locations")
            } else {
                n(m, k)
            }
        }
        $("#channel_lookup_submit").click(f);
        i.keypress(function (j) {
            if (j.keyCode === 13) {
                f();
                return false
            }
        })
    }
})();
$.fn.bindFiltering = function () {
    return this.each(function () {
        var c = $(this),
            a = c.find(".tabs"),
            d = c.find(".news_group"),
            b = ["all", "exclusive", "breaking", "businessweek"];
        $(b).each(function () {
            var e = this.toString();
            a.find("." + e).click(function () {
                c.removeClass("exclusive breaking businessweek all").addClass(e);
                return false
            })
        })
    })
};
$.fn.bindModuleLinkTracking = function (c, b) {
    var a = $(this).find("a:visible");
    if (typeof b != "undefined" && b) {
        a = $(this).find("a")
    }
    return a.each(function (d, f) {
        $(this).mousedown(function () {
            var e = BLOOMBERG.num.pad(d, 2);
            BLOOMBERG.tracker.EVENTTRACK.record("Module Link Tracking", c + e, this.href)
        })
    })
};
$.fn.makeSameHeight = function () {
    var c = $(this),
        b, a = [];
    c.each(function () {
        a.push($(this).height())
    });
    b = Math.max.apply(Math, a);
    return c.each(function () {
        $(this).height(b)
    })
};
$.fn.dynamicModuleLinkTracking = function (c, b) {
    var d = "#" + c;
    var a = "";
    if (typeof b != "undefined" && b) {
        a = $(d).find("a")
    } else {
        a = $(d).find("a:visible")
    }
    var e = $(this).text();
    a.each(function (f, h) {
        if (e == $(this).text()) {
            var g = BLOOMBERG.num.pad(f, 2);
            BLOOMBERG.tracker.EVENTTRACK.record("Module Link Tracking", c + g, this.href)
        }
    })
};
$.fn.bindPrint = function () {
    return this.each(function () {
        var a = $(this),
            b = a.find("a");
        $(b).each(function () {
            $(this).click(function () {
                window.print();
                return false
            })
        })
    })
};
$.fn.bindShare = function () {
    return this.each(function () {
        var b = $(this),
            a = b.find("a").not(".options a");
        a.click(function (c) {
            c.stopPropagation();
            b.toggleClass("menu-active");
            return false
        });
        $("body").click(function () {
            $(".menu-active").removeClass("menu-active")
        })
    })
};
$.fn.bindDaySelection = function (a) {
    return this.each(function () {
        var c = $(this),
            b = c.find("li");
        b.each(function () {
            var f = $(this),
                e = f.find("a"),
                d = f.attr("id"),
                g = $("#days_of_the_week").attr("class");

            function h(i) {
                c.removeClass("monday tuesday wednesday thursday friday saturday sunday").addClass(i)
            }
            if (g === d) {
                a(d)
            }
            e.click(function () {
                h(d);
                if (typeof a === "function") {
                    a(d)
                }
                return false
            })
        })
    })
};
$.fn.bindTextTruncator = function (a) {
    return this.each(function () {
        var i = $(this),
            f = i.text().length,
            e = i.text().substring(0, a),
            c = $('<p style="display:inline;" class="less_text">' + e + "</p>"),
            d = i.text().substring(a, f),
            b = $('<p style="display:inline;" class="more_text">' + d + "</p>"),
            h = $('<p style="display:inline;" class="continue">&hellip; </p><a href="#show_more" class="read_more">Read More &#9660;</a>'),
            g = $('<a href="#show_less" class="read_less">Close</a>');
        if (f > a) {
            i.html(c).append(h).append(b).append(g);
            b.hide();
            g.hide()
        }
        i.find("a.read_more").click(function () {
            i.find("p.continue").hide();
            h.hide();
            b.show();
            g.show();
            return false
        });
        i.find("a.read_less").click(function () {
            i.find("p.continue").show();
            h.show();
            b.hide();
            g.hide();
            return false
        })
    })
};
(function () {
    var a = BLOOMBERG.namespace("ads");
    a.hide_leader_board = function () {
        var d = $("#leader_board");
        var c = ["http://imagec12.247realmedia.com/RealMedia/ads/Creatives/default/empty.gif", "http://imagec12.247realmedia.com/RealMedia/ads/Creatives/Bloomberg/Slider-test/1x1_bw-no-show-ad.gif", "http://imagec12.247realmedia.com/RealMedia/ads/Creatives/Bloomberg/3841153/1x1_bw-no-show-ad.gif/1304978391"];
        if (d.length > 0) {
            for (var b = 0; b < c.length; b++) {
                if (d.find("img[src*='" + c[b] + "']").length > 0) {
                    d.hide()
                }
            }
        }
    }
})();
(fbRecoButton = function (a) {
    var b = "'" + a + "/channel.html'";
    if ($.browser.msie == true && ($.browser.version == 8 || $.browser.version == 7)) {
        b = ""
    }
    window.fbAsyncInit = function () {
        FB.init({
            appId: "100001111898866",
            status: true,
            cookie: true,
            xfbml: true,
            channelUrl: b
        })
    };
    (function () {
        var c = document.createElement("script");
        c.src = document.location.protocol + "//connect.facebook.net/en_US/all.js";
        c.async = true;
        $("#fb-root").append(c)
    }())
})();
(function () {
    var a = BLOOMBERG.namespace("BLOOMBERG.player");
    a.render_video_player = function (d, b) {
        var c = new SWFObject(BLOOMBERG.url.CombinePath(BLOOMBERG.global_var.image_domain, "/flash/BloombergMediaPlayer.swf"), "bbmp", "100%", "100%", "10", "#000000");
        c.addParam("allowFullScreen", "true");
        c.addParam("allowscriptaccess", "always");
        c.addParam("wmode", "opaque");
        if (b._autoplay) {
            c.addVariable("autoplay", "true")
        }
        if (b._video_url) {
            c.addVariable("file_url", b._video_url)
        } else {
            if (b._asset_id) {
                c.addVariable("asset_ids", b._asset_id)
            } else {
                if (b._fvid_id) {
                    c.addVariable("file_url", BLOOMBERG.video.generate_url_from_fvid(b._fvid_id))
                }
            }
        }
        if (b._site) {
            c.addVariable("site", b._site)
        }
        if (b._zone) {
            c.addVariable("zone", b._zone)
        }
        c.addVariable("EnableLogging", "true");
        c.addVariable("LoggingDomain", "www.bloomberg.com");
        c.addVariable("sz", "1x1");
        c.addVariable("tile", "1");
        c.addVariable("title", b._title);
        c.addVariable("description", b._description);
        c.addVariable("GoogleUA", BLOOMBERG.global_var.gaTrackAcct);
        c.write(d)
    }
})();
(function () {
    var f = BLOOMBERG,
        e = f.namespace("widget"),
        c = f.namespace("util"),
        b = f.namespace("util.Cookie"),
        a = e.FilterTabs;
    var d = false;
    $(document).ready(function () {
        var k, i, t, j, s;
        BLOOMBERG.showTvStreaming = function (A, z) {
            if (z) {
                document.getElementById("ooyala_live_tv").setQueryStringParameters({
                    wmode: "opaque",
                    embedCode: BLOOMBERG.global_var.live_stream_us || "d3MzYwMjoS4f85a0xfQrxDFebezasnkN",
                    "thruParam_doubleclick[tagUrl]": "http://ad.doubleclick.net/pfadx/" + f._site + "/" + f._zone + ";sz=1x1;tile=1;tp_video=null;dcmt=text/html;ord=" + BLOOMBERG.global_var.random_num,
                    hide: "share",
                    autoplay: A == "true" ? 1 : 0
                })
            } else {
                k = new SWFObject(BLOOMBERG.global_var.image_domain + "/flash/BloombergMediaPlayer.swf", "bbmp", "100%", "100%", "10", "#000000");
                k.addParam("allowFullScreen", "true");
                k.addParam("allowscriptaccess", "always");
                k.addParam("wmode", "opaque");
                if (f._site) {
                    k.addVariable("site", f._site)
                }
                if (f._zone) {
                    k.addVariable("zone", f._zone)
                }
                k.addVariable("EnableLogging", "true");
                k.addVariable("LoggingDomain", "www.bloomberg.com");
                k.addVariable("sz", "1x1");
                k.addVariable("tile", "1");
                k.addVariable("stream_url", "rtmpt://cp87869.live.edgefcs.net/live/us_300@21006");
                k.addVariable("title", f._title);
                k.addVariable("description", f._description);
                if ($("body").hasClass("davos")) {
                    k.addVariable("poster_url", "../images/bumpers/bbtv.png")
                } else {
                    k.addVariable("poster_url", "../images/bumpers/tv-bumper-live.png")
                }
                k.addVariable("GoogleUA", BLOOMBERG.global_var.gaTrackAcct);
                if (A == "true") {
                    k.addVariable("autoplay", "true")
                }
                k.write("mediaplayer")
            }
        };
        BLOOMBERG.showRadioStreaming = function (A, z) {
            s = new SWFObject(BLOOMBERG.global_var.image_domain + "/flash/BloombergMediaPlayer.swf", "bbmp", "100%", "100%", "10", "#000000");
            s.addParam("allowFullScreen", "false");
            s.addParam("allowscriptaccess", "always");
            s.addParam("wmode", "opaque");
            s.addVariable("EnableLogging", "true");
            s.addVariable("LoggingDomain", "www.bloomberg.com");
            s.addVariable("fullscreen_ui", "false");
            s.addVariable("stream_url", "rtmpt://cp87869.live.edgefcs.net/live/bbr@21885");
            if ($("body").hasClass(".davos")) {
                s.addVariable("poster_url", "../images/bumpers/bbradio.png")
            } else {
                s.addVariable("poster_url", "../images/bumpers/radio-bumper-live.png")
            }
            s.addVariable("tp_video", "000");
            s.addVariable("title", "Bloomberg Radio");
            s.addVariable("description", "Bloomberg Radio");
            s.addVariable("GoogleUA", BLOOMBERG.global_var.gaTrackAcct);
            if (A == "true") {
                s.addVariable("autoplay", "true")
            }
            s.write(z == null ? "mediaplayer" : z)
        };
        BLOOMBERG.register_nav_events();
        if ($(".story_link")) {
            $(".story_link").mousedown(function (B) {
                var A = $(this).parents(".news_section"),
                    z = (A.length > 0) ? $(A)[0].id : "";
                b.set("path_cookie", z, "", "", "");
                return true
            })
        }
        if ($("#days_of_the_week")) {
            function h(z) {
                $(".time_table").removeClass("show_today");
                $("#" + z + "_schedule").addClass("show_today")
            }
            $("#days_of_the_week").bindDaySelection(function (z) {
                if (!z) {
                    return
                }
                h(z)
            })
        }
        if ($("#channel_finder").length > 0) {
            e.TvChannelLookup()
        }
        if ($("#bloomberg_tv_live #mediaplayer").length > 0) {
            BLOOMBERG.showTvStreaming()
        }
        if ($("#ooyala_mediaplayer").length > 0) {
            var u = {
                tabNameArray: ["us", "europe", "asia"],
                targetDom: $("#bloomberg_tv_live"),
                tabGroupDom: $("#bloomberg_tv_live .tabs")
            },
                m = {
                    us: BLOOMBERG.global_var.live_stream_us || "d3MzYwMjoS4f85a0xfQrxDFebezasnkN",
                    europe: BLOOMBERG.global_var.live_stream_europe || "41NDYwMjoAX-XqGCy1PYOso_K5JHYUHa",
                    asia: BLOOMBERG.global_var.live_stream_asia || "A3NDYwMjrxuAk9iHbmNGbDNGV59SvMRF"
                };
            a(u, function (z) {
                document.getElementById("ooyala_live_tv").setQueryStringParameters({
                    wmode: "opaque",
                    embedCode: m[z],
                    autoplay: "1",
                    "thruParam_doubleclick[tagUrl]": "http://ad.doubleclick.net/pfadx/" + f._site + "/" + f._zone + ";sz=1x1;tile=1;tp_video=null;dcmt=text/html;ord=" + BLOOMBERG.global_var.random_num,
                    hide: "share"
                })
            })
        }
        if ($("#bloomberg_tv_live").length > 0 && $("#ooyala_mediaplayer").length <= 0) {
            var u = {
                tabNameArray: ["us", "europe", "asia"],
                targetDom: $("#bloomberg_tv_live"),
                tabGroupDom: $("#bloomberg_tv_live .tabs"),
                defaultTabName: "us"
            },
                m = {
                    us: "rtmpt://cp87869.live.edgefcs.net/live/us_300@21006",
                    europe: "rtmpt://cp87869.live.edgefcs.net/live/uk_300@21008",
                    asia: "rtmpt://cp87869.live.edgefcs.net/live/ap_300@21010"
                };
            a(u, function (A) {
                var z = m[A];
                k.addVariable("stream_url", z);
                k.write("mediaplayer")
            })
        }
        if ($("#radio_guests").length > 0) {
            var w = {
                tabNameArray: ["recent", "past"],
                targetDom: $("#radio_guests"),
                tabGroupDom: $("#radio_guests .tabs"),
                defaultTabName: "recent"
            };
            a(w, function (z) {
                $("#recent_guests_list table").hide();
                $("#recent_guests_list ." + z).show()
            })
        }
        if ($("#bloomberg_radio_live #mediaplayer").length > 0) {
            BLOOMBERG.showRadioStreaming()
        }
        if ($("#bloomberg_vod_player").length > 0 && $("#ooyala_mediaplayer").length <= 0) {
            var r = $('meta[property="og:image"]').attr("content");
            t = new SWFObject(BLOOMBERG.url.CombinePath(BLOOMBERG.global_var.image_domain, "/flash/BloombergMediaPlayer.swf"), "bbmp", "100%", "100%", "10", "#000000");
            t.addParam("allowFullScreen", "true");
            t.addParam("allowscriptaccess", "always");
            t.addParam("wmode", "opaque");
            if (f._autoplay) {
                t.addVariable("autoplay", "true")
            }
            if (f._video_url) {
                t.addVariable("file_url", f._video_url)
            } else {
                if (f._asset_id) {
                    t.addVariable("asset_ids", f._asset_id)
                } else {
                    if (f._fvid_id) {
                        t.addVariable("file_url", f.video.generate_url_from_fvid(f._fvid_id))
                    }
                }
            }
            if (r) {
                t.addVariable("poster_url", escape(r))
            }
            if (f._site) {
                t.addVariable("site", f._site)
            }
            if (f._zone) {
                t.addVariable("zone", f._zone)
            }
            t.addVariable("EnableLogging", "true");
            t.addVariable("LoggingDomain", "www.bloomberg.com");
            t.addVariable("sz", "1x1");
            t.addVariable("tile", "1");
            t.addVariable("title", f._title);
            t.addVariable("description", f._description);
            t.addVariable("GoogleUA", BLOOMBERG.global_var.gaTrackAcct);
            t.write("mediaplayer")
        }
        if ($("#market_snapshot").length > 0) {
            var v = {
                tabNameArray: ["us", "europe", "asia"],
                targetDom: $("#market_snapshot"),
                tabGroupDom: $("#market_snapshot .tabs")
            },
                p = {
                    us: "",
                    europe: "",
                    asia: ""
                };
            a(v, function (z) {
                BLOOMBERG.market_summary.set_default_chart()
            })
        }
        if ($("#market_snapshot_table").length > 0) {
            var g = {
                tabNameArray: ["us", "europe", "asia"],
                targetDom: $("#market_snapshot_table"),
                tabGroupDom: $("#market_snapshot_table .tabs")
            };
            a(g)
        }
        if ($("#non_stop_news_module").length > 0) {
            var g = {
                tabNameArray: ["more_top_news_header", "non_stop_news_header"],
                targetDom: $("#non_stop_news_module_container"),
                tabGroupDom: $("#non_stop_news_module_container .tabs")
            };
            a(g)
        }
        if ($("#market_data_container").length > 0) {
            var y = {
                tabNameArray: ["indexes_header", "futures_header", "currencies_header", "bonds_header"],
                targetDom: $("#market_data_module"),
                tabGroupDom: $("#market_data_module .tabs")
            };
            a(y)
        }
        if ($(".header_nav #more_navigation_item>a").length > 0) {
            $(".header_nav #more_navigation_item>a").click(function () {
                $(".header_nav #more_navigation_item>a").toggleClass("dropdown");
                $(this).parent().find("ul.submenu").toggleClass("hide");
                return false
            });
            $("body").click(function () {
                $(".header_nav #more_navigation_item>a").removeClass("dropdown");
                $(".header_nav #more_navigation_item>ul").addClass("hide")
            })
        }
        $("ul.eyebrow_navigation li.has_more a:first").click(function (z) {
            z.preventDefault();
            z.stopPropagation();
            $(this).toggleClass("open");
            $(this).parent().find("ul.sub_menu").toggleClass("open")
        });
        $("body").click(function () {
            $("ul.eyebrow_navigation li.has_more a").removeClass("open");
            $("ul.eyebrow_navigation li.has_more ul.sub_menu").removeClass("open")
        });
        if ($("#company_profile_container").length > 0) {
            var q = {
                tabNameArray: ["bio_reference", "dogfish_head", "ethan_allen", "irobot_corp", "stew_leonard", "vita_coco", "wwe", "zip_car", "morton", "buffalo_wild", "kimpton_hotel"],
                targetDom: $("#company_profile_container"),
                tabGroupDom: $("#company_profile_container .tabs")
            };
            a(q)
        }
        if ($("#risk_taker_bio_container").length > 0) {
            var n = {
                tabNameArray: ["david_neel", "michael_burry", "scott_boras", "elon_musk", "michelle_rhea"],
                targetDom: $("#risk_taker_bio_container"),
                tabGroupDom: $("#risk_taker_bio_container .tabs")
            };
            a(n)
        }
        if ($(".home #data_insights").length > 0) {
            var o = {
                tabNameArray: $(".home #data_insights .tabs li").map(function () {
                    return this.className
                }).get(),
                targetDom: $("#data_insights"),
                tabGroupDom: $("#data_insights .tabs")
            };
            a(o)
        }
    });
    $(window).bind("load", function () {
        var m = $("div.ad_box").filter(".dfp_ad_box"),
            g = $("div.dfp_ad_box"),
            o = $("div.micro_bar_ad"),
            k = $("#leader_board"),
            h = location.href,
            j = "http://imagec12.247realmedia.com/RealMedia/ads/Creatives/default/empty.gif",
            n = "http://s0.2mdn.net/viewad/817-grey.gif",
            i = "1x1_bw-no-show-ad.gif";
        if (h.indexOf("debug=true") !== -1) {
            return true
        }
        o.filter(function (r) {
            var q = $(this),
                s = q.find("img[src*='" + j + "']").length > 0,
                u = q.find("img[src*='" + n + "']").length > 0,
                p = q.children().size() === 1,
                t = q.find("a").length == 1 && q.find("a img").width() == 1 && q.find("a img").height() == 1;
            return (s || p || t || u)
        }).hide();
        m.filter(function (s) {
            var B = $(this),
                z = ((B.find("img[src*='http://ads.bloomberg.com/adstream_nx.ads/']").length > 0) || (B.find("img[src*='" + i + "']").length > 0)),
                y = B.find("embed").length > 0,
                t = B.find("iframe").length > 0,
                C = B.find("img").length > 0,
                r = B.find("object").length > 0,
                w = B.find("div").height() > 2,
                p = B.find("center").length > 0,
                v = B.find("a[class=textadblack]").length > 0,
                u = B.find("div[id*=gpt]").length > 0,
                q = B.find("a").length == 1 && B.find("a img[src*='" + j + "']").length > 0,
                A = B.find("div[class=micro_bar_content]").is(":hidden") || B.find("div[class=micro_bar_content]").height() == 0;
            return (z || A || q || !(y || t || C || r || v || p || w)) && !u
        }).hide();
        g.filter(function (s) {
            var C = $(this),
                A = ((C.find("img[src*='http://ads.bloomberg.com/adstream_nx.ads/']").length > 0) || (C.find("img[src*='" + i + "']").length > 0)),
                z = C.find("embed").length > 0,
                t = C.find("iframe").length > 0,
                D = C.find("img").length > 0,
                r = C.find("object").length > 0,
                w = C.find("div").height() > 2,
                p = C.find("center").length > 0,
                v = C.find("a[class=textadblack]").length > 0,
                u = C.find("div[id*=gpt]").length > 0,
                q = C.find("a").length == 1 && C.find("a img[src*='" + j + "']").length > 0,
                y = C.find("a").length == 1 && C.find("a img[src*='" + n + "']").length > 0,
                B = C.find("div[class=micro_bar_content]").is(":hidden") || C.find("div[class=micro_bar_content]").height() == 0;
            return (A || B || q || y || !(z || t || D || r || v || p || w)) && !u
        }).hide();
        if ((k.length > 0 && k.find("img[src*='" + j + "']").length > 0) || (k.length > 0 && k.find("img[src*='" + n + "']").length > 0)) {
            k.hide()
        }
    })
})();
(function () {
    var a = BLOOMBERG,
        b = a.namespace("storyutil");
    b.CLONESTORYTOOL = (function () {
        var d;

        function f() {
            var h = $("#story_tools_bottom").clone(true).attr("id", "story_tools_top");
            var i = $("#story_tools_bottom .linkedin").attr("target_url");
            h.find(".linkedin").html("");
            $("#story_tools_top_holder").replaceWith(h);
            var g = $("<script/>").attr("type", "in/share").attr("data-counter", "right").attr("data-url", i);
            $("#story_tools_top .linkedin").append(g)
        }
        function e(g) {
            var j = $("#" + g),
                i = $("#story_tools_bottom");
            i.find(".linkedin").html("");
            j.replaceWith($("#story_tools_bottom"));
            var h = $("<script/>").attr("type", "in/share").attr("data-counter", "right");
            $("#story_tools_bottom .linkedin").append(h)
        }
        function c() {
            var g = $("#story_tools_top .google_plusone");
            if (g.length > 0) {
                g.html("");
                gapi.plusone.render(g[0], {
                    size: "medium",
                    href: g.attr("target_url")
                })
            }
        }
        d = {
            clonetool: function () {
                return f()
            },
            clonevideotool: function (g) {
                return e(g)
            },
            clone_google_plusone: function () {
                return c()
            }
        };
        return d
    })()
})();
(function () {
    var c = BLOOMBERG,
        b = c.namespace("util");

    function a(d) {
        var g = d.split("?"),
            f = g[1] !== "" ? g[1].split("&") : [],
            e = this;
        e.pureUrl = g[0];
        e.params = {};
        if (f.length > 0) {
            $.each(f, function (h, i) {
                var j = i.split("=");
                e.params[j[0]] = j[1]
            })
        }
    }
    a.prototype.getParameter = function (d) {
        return this.params[d]
    };
    a.prototype.setParameter = function (e, d) {
        this.params[e] = d;
        return this
    };
    a.prototype.getUrl = function () {
        var g, e, d = this.pureUrl + "?",
            f = [];
        for (e in this.params) {
            f.push(e + "=" + this.params[e])
        }
        return d + f.join("&")
    };
    a.prototype.getPureUrl = function () {
        return this.pureUrl
    };
    b.URL = function (d) {
        return new a(d)
    }
})();
(function () {
    var i = BLOOMBERG,
        d = i.namespace("swf");

    function j(k) {
        var e = k.match(/[\d]+/g);
        e.length = 3;
        return e.join(".")
    }
    var h = false;
    var c = "";
    if (navigator.plugins && navigator.plugins.length) {
        var f = navigator.plugins["Shockwave Flash"];
        if (f) {
            h = true;
            if (f.description) {
                c = j(f.description)
            }
        }
        if (navigator.plugins["Shockwave Flash 2.0"]) {
            h = true;
            c = "2.0.0.11"
        }
    } else {
        if (navigator.mimeTypes && navigator.mimeTypes.length) {
            var b = navigator.mimeTypes["application/x-shockwave-flash"];
            h = b && b.enabledPlugin;
            if (h) {
                c = j(b.enabledPlugin.description)
            }
        } else {
            try {
                var a = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
                h = true;
                c = j(a.GetVariable("$version"))
            } catch (g) {
                try {
                    var a = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");
                    h = true;
                    c = "6.0.21"
                } catch (g) {
                    try {
                        var a = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
                        h = true;
                        c = j(a.GetVariable("$version"))
                    } catch (g) {}
                }
            }
        }
    }
    d.hasFlash = h;
    d.flashVersion = c
})();

function ilogin() {
    var b = "user_navigation",
        f = "http://" + igetdsld() + ".bloomberg.com",
        k = "https://" + igetsdsld() + ".bloomberg.com",
        o = "USID",
        e = document.cookie.split(";"),
        d = 0,
        h, m, g, a, j;
    for (h = 0; h < e.length; h++) {
        var n = e[h];
        while (n.charAt(0) === " ") {
            n = n.substring(1, n.length)
        }
        if (n.indexOf(o) === 0) {
            g = n.split(":");
            a = g[0].split("=");
            j = a[1].split("%3A");
            d = 1
        }
    }
    if (d == 1) {
        m = '<li id="name_navigation_item" class="first">' + j[0] + '<li id="profile_navigation_item"><a href="' + k + '/apps/subscriber/access?action=profile&previewaction=preview">Profile</a></li><li id="portfolio_tracker_navigation_item"><a href="/apps/subscriber/webport">Portfolios</a></li><li id="logout_navigation_item"><a onClick="ilogout();" href="#">Log out</a></li>'
    } else {
        m = '<li id="login_navigation_item" class="first"><a href="#" onclick="ilredirect(); return false;">Log in</a></li>'
    }
    $("#user_navigation").html(m)
}
function ilredirect() {
    var c = "https://" + igetsdsld() + ".bloomberg.com",
        b = new Date(),
        d = ".bloomberg.com",
        f = "/",
        a = 1;
    b.setTime(b.getTime());
    if (a) {
        a = a * 1000 * 60 * 60
    }
    var e = new Date(b.getTime() + (a));
    document.cookie = "BTOG=" + window.location.href + "|" + ((a) ? ";expires=" + e.toGMTString() : "") + ((f) ? ";path=" + f : "") + ((d) ? ";domain=" + d : "");
    window.location = c + "/log-in/index.html"
}
function iredirect() {
    window.location = "http://" + igetdsld() + ".bloomberg.com"
}
function ilogout() {
    var b = "USID",
        a = document.cookie.split(";");
    for (var e = 0; e < a.length; e++) {
        var f = a[e];
        while (f.charAt(0) === " ") {
            f = f.substring(1, f.length)
        }
        if (f.indexOf(b) === 0) {
            var d = f + "; expires=Sun, 4 Jan 1970 12:00:00 UTC; path=/;domain=.bloomberg.com ";
            document.cookie = d
        }
    }
    iredirect()
}
function igetdsld() {
    return location.hostname.match("wbetest1") ? "wbetest1" : "preview"
}
function igetsdsld() {
    return location.hostname.match("wbetest1") ? "wbetest1" : "software"
}
function recordOutboundLink(e, d, f) {
    try {
        var a = BLOOMBERG.global_var.gaTrackAcct;
        var b = _gat._getTracker(a);
        b._trackEvent(d, f);
        setTimeout('document.location = "' + e.href + '"', 500)
    } catch (c) {}
}(function () {
    var e = BLOOMBERG,
        c = e.namespace("tracker");
    c.EVENTTRACK = (function () {
        var v;

        function y(z) {
            if (z.which == 1) {
                return "left click"
            } else {
                if (z.which == 2) {
                    return "middle click"
                } else {
                    if (z.which == 3) {
                        return "right click"
                    } else {
                        return "click"
                    }
                }
            }
        }
        function r(B, C, D, z) {
            try {
                _gaq.push(["_setAccount", BLOOMBERG.global_var.gaTrackAcct]);
                _gaq.push(["_trackEvent", B, C, D, z]);
                if (B == "Outbound") {
                    setTimeout(function () {}, 500)
                }
            } catch (A) {}
            return true
        }
        function m(B, A, E, z) {
            var D = (B instanceof jQuery.Event) ? B : $.event.fix(B),
                C = y(D);
            r(A, C, E, z)
        }
        function p() {
            $("#related_stories a.story_link").live("click", function (C) {
                try {
                    var z = $(C.target).attr("suid");
                    BLOOMBERG.tracker.EVENTTRACK.record("more_stories", "click-bk" + getcombo_ga(), C.originalTarget.href);
                    if (z != undefined && z != "") {
                        var A = "/apps/_t/b/" + related_items + "/s/" + groupid + "/d/" + z;
                        $.ajax({
                            url: A
                        })
                    }
                    setTimeout('document.location = "' + C.originalTarget.href + '"', 150);
                    C.preventDefault();
                    return false
                } catch (B) {}
                return true
            })
        }
        function n() {
            $("a[rel*=external]").live("mousedown", function (E) {
                var z = $(this),
                    C = "Outbound",
                    B = z.attr("id"),
                    D = (B == "") ? "" : " - ",
                    A = B + D + z.attr("href");
                m(E, C, A)
            })
        }
        function j() {
            f();
            i(d);
            k(a, true)
        }
        function s() {
            w()
        }
        function f() {
            $("#customized_breaking_news").bindModuleLinkTracking("customized_breaking_news");
            $("#breaking_news").bindModuleLinkTracking("breaking_news");
            $("#breaking_news_combo").bindModuleLinkTracking("breaking_news_combo");
            $("#top_headline").bindModuleLinkTracking("top_news");
            $('#more_top :not(".news")').bindModuleLinkTracking("more_top_news_links");
            $("#more_top .news").bindModuleLinkTracking("more_top_news");
            $("#hot_dog_featured_news").bindModuleLinkTracking("hot_dog_featured_news");
            $("#trending").bindModuleLinkTracking("highlights");
            $("#hot_dog_social").bindModuleLinkTracking("hot_dog_social");
            $("#featured_videos").bindModuleLinkTracking("featured_videos");
            $("#custom_promo").bindModuleLinkTracking("custom_promo");
            $("#custom_promo_exclusive").bindModuleLinkTracking("custom_promo_exclusive")
        }
        function w() {
            $("#quick_view_menu").bindModuleLinkTracking("quick_view_menu")
        }
        function h() {
            $(document).ready(function () {
                j()
            })
        }
        function g() {
            $(document).ready(function () {
                s()
            })
        }
        function u() {
            $(document).ready(function () {
                i(b, true)
            })
        }
        function t() {
            $(document).ready(function () {
                var z = $("#flavorpill_stories");
                if (z.length > 0) {
                    z.bindModuleLinkTracking("flavorpill_stories");
                    BLOOMBERG.tracker.EVENTTRACK.record("Module Link Tracking", "flavorpill_stories_load", window.location.href)
                }
            })
        }
        function o() {
            $(document).ready(function () {
                var z = "#live_tv_us, #live_tv_europe, #live_tv_asia";
                $(z).each(function () {
                    $(this).mousedown(function () {
                        BLOOMBERG.tracker.EVENTTRACK.record("Live TV Link Tracking", "live_tv_load", $(this).html())
                    })
                })
            })
        }
        function q() {
            $(document).ready(function () {
                var z = ".view #columnist_group ul";
                $(z).each(function (B, C) {
                    $(this).find(".columnist a").each(function (D, E) {
                        $(this).mousedown(function () {
                            var G = BLOOMBERG.num.pad(D, 2);
                            var F = "columnists_p" + B + "_";
                            var H = $(this).find("p").text();
                            BLOOMBERG.tracker.EVENTTRACK.record("Module Link Tracking", F + G, H)
                        })
                    })
                });
                var A = ".view #columnist_latest_posts ul";
                $(A).each(function (B, C) {
                    $(this).find("li:not(:first)").bindModuleLinkTracking($(this).attr("id"))
                });
                $(".view .columnist_pagination").bindModuleLinkTracking("columnist_pagination");
                $(".view .social_band").bindModuleLinkTracking("social_band");
                $(".view_tab #news_pagination_top").bindModuleLinkTracking("pagination_top");
                $(".view_tab #news_pagination_bottom").bindModuleLinkTracking("pagination_bottom")
            })
        }
        function i(z, A) {
            $(z).each(function () {
                var B = $(this).attr("id");
                $(this).bindModuleLinkTracking(B, A)
            })
        }
        function k(z, A) {
            $(z).each(function () {
                var B = $(this).attr("id");
                $(this).bindModuleLinkTracking(B, A)
            })
        }
        v = {
            init: function () {
                p();
                n();
                h();
                u();
                t();
                o();
                q();
                g()
            },
            record: function (A, B, C, z) {
                r(A, B, C, z)
            },
            bindPrimaryContentTracking: function () {
                j()
            }
        };
        return v
    })();
    var b = "",
        d = "",
        a = "";
    b = "#nav_home, #nav_quick, .nav_menu_item_with_dropdown, #footer_more, #footer_company, #copyright_statement, #utility_navigation";
    d = "#teaser_topic_opinion, #teaser_topic_politics, #teaser_topic_personal_finance, #teaser_topic_sports, #teaser_topic_businessweek_com, #teaser_topic_bloomberg_markets, #teaser_topic_view, #teaser_topic_leaders, #teaser_topic_entrepreneurs, #teaser_topic_muse_arts_and_culture, #teaser_topic_health_care, #teaser_topic_technology, #teaser_topic_economy, #teaser_topic_science";
    a = ".home #market_snapshot_deluxe, .home #on_air, .home #most_popular_stories, .home #magazines, .home #more_top_news_container";
    c.EVENTTRACK.init()
})();
(function () {
    var a = BLOOMBERG.namespace("tracker.SearchAssist");
    a.trackEvent = function (d, c) {
        BLOOMBERG.tracker.EVENTTRACK.record("Search Assist Tracking", d, c)
    };

    function b(d, c) {
        d.each(function (f, g) {
            var i = $(this).find("a:first");
            var h = i.size() > 0 ? i[0].href : "";
            $(this).mousedown(function () {
                var e = BLOOMBERG.num.pad(f, 2);
                a.trackEvent(c + e, h)
            })
        })
    }
    a.registerRowEvent = function (c) {
        b($(c).find("tr.symac_symbols"), "symbols");
        b($(c).find("tr.symac_topics"), "topics");
        b($(c).find("tr.symac_news"), "news")
    };
    a.triggerRowEvent = function (c) {
        $(c).trigger("mousedown")
    }
})();
(function () {
    chart_data_ns = BLOOMBERG.namespace("market_summary");

    function a(c) {
        return c.replace(/^\s+|\s+$/g, "")
    }
    function b(d, c) {
        $("#market_summary_chart").attr("src", MARKET_SUMMARY_CHART_URL + d + ".png?" + CHART_TIME_STAMP);
        $("#market_summary_chart_link").attr("href", QUOTE_URL + d + ":IND");
        $("#marekt_summary_chart_title").html(c.toUpperCase())
    }
    chart_data_ns.set_default_chart = function () {
        var e = $(".filtered_index.us #market_snap_us, .filtered_index.europe #market_snap_europe, .filtered_index.asia #market_snap_asia");
        var c = a(e.find(".bsym_ticker a").html());
        var d = a(e.find(".ticker_symbol").val());
        b(d, c)
    };
    $("tr.market_summary_tr").live("mouseover", function () {
        $(this).attr("id", "chart_mouseover_tmp_id");
        var c = a($(this).find(".bsym_ticker a").html());
        var d = a($(this).find(".ticker_symbol").val());
        b(d, c)
    });
    $("tr.market_summary_tr").live("mouseout", function () {
        $(this).removeAttr("id")
    })
})();
(function () {
    var a = new Date();
    a.setFullYear(a.getFullYear() + 1);
    var d = BLOOMBERG.namespace("mobile"),
        i = "http://mobile.bloomberg.com/",
        e = "bbmobile",
        f = "1",
        h = "bloomberg.com",
        b = a.toGMTString(),
        g = null,
        c = null;
    d.is_mobile = function () {
        var j = g || navigator.userAgent || navigator.vendor || window.opera;
        return false
    };
    d.redirect_to_mobile = function () {
        var k = BLOOMBERG.util.Cookie.get(e) == f;
        var j = d.is_mobile();
        if (j && !k) {
            window.location = i
        }
    };
    d.drop_prefer_cookie = function () {
        var j = d.is_mobile();
        var k = /(\?|&)(from=mobile)/ig.test(window.location.search);
        var n = c || document.referrer;
        var m = /^((http|https):\/\/)?mobile.bloomberg.com/i.test(n);
        if (j && (k || m)) {
            BLOOMBERG.util.Cookie.set(e, f, b, "/", h)
        }
    };
    d.drop_cookie_or_redirect = function () {
        d.drop_prefer_cookie();
        d.redirect_to_mobile()
    };
    d.register_mobile_link = function () {
        $("#link_to_mobile_bb_com").live("click", function () {
            BLOOMBERG.util.Cookie.set(e, "", -1, "/", h);
            window.location = this.href;
            return false
        })
    };
    d.extend_cookie_expire_date = function () {
        var j = BLOOMBERG.util.Cookie.get(e);
        if (j) {
            BLOOMBERG.util.Cookie.set(e, j, b, "/", h)
        }
    };
    d.show_mobile_redirect_link = function () {
        if (BLOOMBERG.util.Cookie.get("bbmobile")) {
            var j = $('<a id="link_to_mobile_bb_com" href="http://mobile.bloomberg.com/">Make the mobile site my default</a>');
            $(".mobile-redirect").append(j)
        }
    }
})();
(function () {
    var a = BLOOMBERG.namespace("querystring");
    a.param_provided = function (b) {
        return new RegExp("(\\?|&)(" + b + ")(=|&)", "ig").test(window.location.search)
    }
})();
/*
 * Date Format 1.2.3
 * (c) 2007-2009 Steven Levithan <stevenlevithan.com>
 * MIT license
 *
 * Includes enhancements by Scott Trenda <scott.trenda.net>
 * and Kris Kowal <cixar.com/~kris.kowal/>
 *
 * Accepts a date, a mask, or a date and a mask.
 * Returns a formatted version of the given date.
 * The date defaults to the current date/time.
 * The mask defaults to dateFormat.masks.default.
 */
var dateFormat = function () {
        var a = /d{1,4}|m{1,4}|yy(?:yy)?|([HhMsTt])\1?|[LloSZ]|"[^"]*"|'[^']*'/g,
            b = /([PMCEA])([SDP])(T)/i,
            c = /\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\d{4})?)\b/g,
            e = /[^-+\dA-Z]/g,
            d = function (g, f) {
                g = String(g);
                f = f || 2;
                while (g.length < f) {
                    g = "0" + g
                }
                return g
            };
        return function (j, z, t) {
            var h = dateFormat;
            if (arguments.length == 1 && Object.prototype.toString.call(j) == "[object String]" && !/\d/.test(j)) {
                z = j;
                j = undefined
            }
            j = j ? new Date(j) : new Date;
            if (isNaN(j)) {
                throw SyntaxError("invalid date")
            }
            z = String(h.masks[z] || z || h.masks["default"]);
            if (z.slice(0, 4) == "UTC:") {
                z = z.slice(4);
                t = true
            }
            var v = t ? "getUTC" : "get",
                p = j[v + "Date"](),
                f = j[v + "Day"](),
                k = j[v + "Month"](),
                r = j[v + "FullYear"](),
                u = j[v + "Hours"](),
                n = j[v + "Minutes"](),
                w = j[v + "Seconds"](),
                q = j[v + "Milliseconds"](),
                g = t ? 0 : j.getTimezoneOffset(),
                i = {
                    d: p,
                    dd: d(p),
                    ddd: h.i18n.dayNames[f],
                    dddd: h.i18n.dayNames[f + 7],
                    m: k + 1,
                    mm: d(k + 1),
                    mmm: h.i18n.monthNames[k],
                    mmmm: h.i18n.monthNames[k + 12],
                    yy: String(r).slice(2),
                    yyyy: r,
                    h: u % 12 || 12,
                    hh: d(u % 12 || 12),
                    H: u,
                    HH: d(u),
                    M: n,
                    MM: d(n),
                    s: w,
                    ss: d(w),
                    l: d(q, 3),
                    L: d(q > 99 ? Math.round(q / 10) : q),
                    t: u < 12 ? "a" : "p",
                    tt: u < 12 ? "am" : "pm",
                    T: u < 12 ? "A" : "P",
                    TT: u < 12 ? "AM" : "PM",
                    Z: t ? "UTC" : (String(j).match(c) || [""]).pop().replace(e, "").replace(b, "$1$3").replace("UTC", "GMT"),
                    o: (g > 0 ? "-" : "+") + d(Math.floor(Math.abs(g) / 60) * 100 + Math.abs(g) % 60, 4),
                    S: ["th", "st", "nd", "rd"][p % 10 > 3 ? 0 : (p % 100 - p % 10 != 10) * p % 10]
                };
            return z.replace(a, function (m) {
                return m in i ? i[m] : m.slice(1, m.length - 1)
            })
        }
    }();
dateFormat.masks = {
    "default": "ddd mmm dd yyyy HH:MM:ss",
    shortDate: "m/d/yy",
    mediumDate: "mmm d, yyyy",
    longDate: "mmmm d, yyyy",
    fullDate: "dddd, mmmm d, yyyy",
    shortTime: "h:MM TT",
    mediumTime: "h:MM:ss TT",
    longTime: "h:MM:ss TT Z",
    isoDate: "yyyy-mm-dd",
    isoTime: "HH:MM:ss",
    isoDateTime: "yyyy-mm-dd'T'HH:MM:ss",
    isoUtcDateTime: "UTC:yyyy-mm-dd'T'HH:MM:ss'Z'"
};
dateFormat.i18n = {
    dayNames: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
    monthNames: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec", "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]
};
Date.prototype.format = function (a, b) {
    return dateFormat(this, a, b)
};
(function () {
    var b = BLOOMBERG.namespace("pagination");

    function a(f, d, c, g) {
        var j = f * d + 1;
        var i = j + d - 1;
        if (i > c) {
            i = c
        }
        var h = j + "-" + i;
        var e;
        if (j == 1) {
            e = g
        } else {
            e = g + j + "/"
        }
        return ' <a href="' + e + '">' + h + "</a>"
    }
    b.collapse_links = function (d) {
        var e = 10;
        var f = d.find("*").not(".prev_page, .next_page");
        var o = f.size();
        if (o <= e) {
            return
        }
        var m = parseInt(d.find(".current").text());
        var j = Math.floor((m - 1) / e);
        var n = j + 2;
        var c = d.find("a:not('.prev_page, .next_page'):first").attr("href");
        var k = c.replace(/\d+\/?$/, "");
        f.each(function (i, q) {
            var r = i + 1;
            if (r <= j * e || r > (n - 1) * e) {
                $(this).hide()
            }
        });
        var h = "";
        for (var g = 0; g < j; g++) {
            h += a(g, e, o, k)
        }
        d.find(".prev_page").after(h);
        var p = "";
        for (var g = n - 1; g < Math.ceil((o) / e); g++) {
            p += a(g, e, o, k)
        }
        d.find(".next_page").before(p)
    }
})();
$.fn.paginateCollapse = function () {
    this.each(function () {
        BLOOMBERG.pagination.collapse_links($(this))
    })
};
(function () {
    var a = BLOOMBERG,
        b = a.namespace("mentor");
    b.switch_mentor_video = function (e, c) {
        var d = new SWFObject(BLOOMBERG.url.CombinePath(BLOOMBERG.global_var.image_domain, "/flash/BloombergMediaPlayer.swf"), "bbmp", "100%", "100%", "10", "#000000");
        d.addParam("allowFullScreen", "true");
        d.addParam("allowscriptaccess", "always");
        d.addParam("wmode", "opaque");
        d.addVariable("autoplay", "true");
        d.addVariable("file_url", a.video.generate_url_from_fvid(c));
        if (a._autoplay) {
            d.addVariable("autoplay", "true")
        }
        if (a._video_url) {
            d.addVariable("file_url", a._video_url)
        } else {
            if (a._asset_id) {
                d.addVariable("asset_ids", a._asset_id)
            } else {
                if (c) {
                    d.addVariable("file_url", a.video.generate_url_from_fvid(c))
                }
            }
        }
        if (a._site) {
            d.addVariable("site", a._site)
        }
        if (a._zone) {
            d.addVariable("zone", a._zone)
        }
        d.addVariable("EnableLogging", "true");
        d.addVariable("LoggingDomain", "www.bloomberg.com");
        d.addVariable("sz", "1x1");
        d.addVariable("tile", "1");
        d.addVariable("title", a._title);
        d.addVariable("description", a._description);
        d.addVariable("GoogleUA", BLOOMBERG.global_var.gaTrackAcct);
        d.write(e)
    }
})();
(function () {
    var a = BLOOMBERG.namespace("referrer");
    a.extract_name = function (c, d) {
        if (c == null) {
            return ""
        }
        var b = "";
        if (c.starts_with(d)) {
            b = c.replace(d, "");
            if (b.ends_with("/")) {
                b = b.substring(0, b.length - 1)
            }
            if (b.indexOf("/") != -1) {
                b = b.substring(0, b.indexOf("/"))
            }
        }
        return b
    };
    a.sponsor_referrer = function () {
        if (typeof (document.referrer) != "undefined" && document.referrer != "") {
            if (document.referrer.match(/^https?:\/\/([^.]*\.)*?bloomberg.com(:\d+)?\/q$/)) {
                return "queue"
            }
        }
        return null
    };
    a.topic_referrer = function () {
        var b = a.extract_name(document.URL, BLOOMBERG.global_var.topic_links_prefix);
        if (b != null && b != "") {
            return b
        }
        return a.extract_name(document.referrer, BLOOMBERG.global_var.topic_links_prefix)
    }
})();
(function () {
    var a = BLOOMBERG.namespace("bbp2");
    a.is_phase_2 = function () {
        var b;
        switch (BLOOMBERG.util.Cookie.get(BLOOMBERG.global_var.phase_2_cookie_key)) {
        case "0":
            b = 0;
            break;
        case "1":
            b = 1;
            break;
        default:
            b = -1;
            break
        }
        return b
    }
})();
(function () {
    var i = BLOOMBERG.namespace("bbswitch");
    var g = {};
    var c = typeof (QUnit) != "undefined";
    if (c) {
        i.internal_obj = g
    }
    var r = BLOOMBERG.util.Cookie;
    g.cookie_domain = "Bloomberg.com";
    var k = "bb_scp";
    var j = "bb_sct";
    var a = 30;
    var e = {};
    var b = {};

    function p(t, v, u) {
        if (u) {
            r.setEndOfSession(t, v, "/", g.cookie_domain)
        } else {
            var s = new Date();
            s.setFullYear(s.getFullYear() + 1);
            r.set(t, v, s, "/", g.cookie_domain)
        }
    }
    function q(s) {
        return Math.floor(s / a)
    }
    function o(u, s) {
        var t = r.get(u);
        if (s && t.length > 0) {
            p(u, t)
        }
        if (t.length == 0) {
            t = "0"
        }
        return parseInt(t)
    }
    function m(s, u) {
        var t = Math.pow(2, u);
        return (s | t)
    }
    function d(s, u) {
        var t = Math.pow(2, a) - 1 - Math.pow(2, u);
        return (s & t)
    }
    function h(B, A, y) {
        var z = y ? j : k;
        var s = y ? b : e;
        var w = s[B];
        if (typeof (w) == "undefined") {
            return
        }
        var t = q(w);
        w = w % a;
        var u = z + t;
        var v = o(u);
        if (A) {
            v = m(v, w)
        } else {
            v = d(v, w)
        }
        p(u, v, y)
    }
    function n(s, u) {
        var t = Math.pow(2, u);
        return (s & t) > 0
    }
    function f(B, z) {
        var A = z ? j : k;
        var s = z ? b : e;
        var w = s[B];
        if (typeof (w) == "undefined") {
            return false
        }
        var t = q(w);
        w = w % a;
        var u = A + t;
        var v = o(u, !z);
        var y = n(v, w);
        return y
    }
    i.initialize = function (s) {
        var v = {
            p_switch_names: [],
            t_switch_names: []
        };
        $.extend(v, s);
        for (var u = 0; u < v.p_switch_names.length; u++) {
            var t = v.p_switch_names[u];
            e[t] = u
        }
        for (var u = 0; u < v.t_switch_names.length; u++) {
            var t = v.t_switch_names[u];
            b[t] = u
        }
    };
    i.set = function (s, u) {
        var t = typeof (e[s]) == "undefined";
        h(s, u, t)
    };
    i.get = function (s) {
        var t = typeof (e[s]) == "undefined";
        return f(s, t)
    };
    if (BLOOMBERG.global_var && BLOOMBERG.global_var.switch_config) {
        i.initialize(BLOOMBERG.global_var.switch_config)
    }
})();
(function () {
    var a = BLOOMBERG.namespace("lead_video");
    a.is_iphone_ipad_user = function () {
        var b = navigator.userAgent || navigator.vendor || window.opera;
        return /\bipad\b/i.test(b) || /\biphone\b/i.test(b)
    };
    a.vil_receiveOoyalaEvent = function (c, b, d) {
        if (c !== "vil_blp_ooyala_player") {
            return
        }
        switch (b) {
        case "playerEmbedded":
            BLOOMBERG.global_var.vid_playing = true;
            break;
        case "playComplete":
            BLOOMBERG.global_var.vid_playing = false;
            break
        }
    };
    a.initialize = function (b) {
        $("#lead_video_play").mousedown(function () {
            var c = $("#vil_video_url").attr("href");
            BLOOMBERG.tracker.EVENTTRACK.record("Module Link Tracking", b, c)
        });
        $("#lead_video_play").click(function () {
            $("#lead_video_container").show();
            $("#lead_video_play").hide()
        });
        if (a.is_iphone_ipad_user()) {
            if ($("#lead_video_container.liv_player").length > 0) {
                if ($("#lead_video_play").length > 0) {
                    $("#lead_video_play").hide()
                }
                if ($("#lead_video").length > 0) {
                    $("#lead_video").hide()
                }
                if ($(".with_lead_video").length > 0) {
                    $(".with_lead_video").removeClass("with_lead_video")
                }
            }
        }
    }
})();
(function () {
    var c = typeof (QUnit) != "undefined";
    var h = BLOOMBERG.namespace("test.noir_trans");
    var f = "opt",
        a = "no-opt",
        e = ["opt-out", "C1"];
    var k = BLOOMBERG.util.Cookie;
    var j = "bloomberg.com",
        b = Date.nextYear().toGMTString();
    if (c) {
        j = ""
    }
    var d = {
        C1: "C1S",
        B1: "B1S",
        W1: "W1S",
        C1S: "C1",
        B1S: "B1",
        W1S: "W1",
        "opt-in": "opt-out",
        "opt-out": "opt-in",
        "no-opt": "opt-out",
        "": "opt-out"
    };

    function i() {
        return k.get(f)
    }
    function g() {
        var m = k.get(f);
        if (m === "") {
            m = a
        }
        k.set(f, m, b, "/", j)
    }
    h.get_opt_status = i;
    h.in_black_cds_bucket = function () {
        return i() == "B1"
    };
    h.in_white_cds_bucket = function () {
        return i() == "W1"
    };
    h.in_noir_bucket = function () {
        var m = i();
        return e.contains(m)
    };
    h.is_in_cds_bucket = function () {
        var m = i();
        return (["B1", "W1"]).contains(m)
    };
    h.is_in_popup_bucket = function () {
        var m = i();
        return (["B1", "W1", "B1S", "W1S"]).contains(m)
    };
    h.is_in_noir_trans_bucket = function () {
        var m = i();
        return (["B1", "W1", "C1", "B1S", "W1S", "C1S"]).contains(m)
    };
    h.in_std_white_from_cds = function () {
        var m = i();
        return (["B1S", "W1S"]).contains(m)
    };
    h.opt_in_out = function () {
        var m = i();
        var n = d[m];
        if (n) {
            k.set(f, n, b, "/", j)
        }
        return n
    };
    h.set_opt_bucket = function (m) {
        k.set(f, m, b, "/", j);
        window.location.href = BLOOMBERG.global_var.inSite
    };
    g()
})();
(function () {
    var c = BLOOMBERG.namespace("noir_2_qv"),
        h = BLOOMBERG.namespace("test.noir_trans"),
        g = BLOOMBERG.namespace("bbswitch"),
        a = BLOOMBERG.namespace("querystring");
    var d = typeof (QUnit) != "undefined";
    var b = {};
    if (d) {
        c.internal_obj = b
    }
    var e = false;

    function f() {
        var i = (BLOOMBERG.global_var && BLOOMBERG.global_var.whiteSiteHN) || "www.bloomberg.com";
        return window.location.hostname == i && window.location.pathname == "/"
    }
    b.redirect_user = function () {
        if (f() && g.get("like_qv") && !a.param_provided("qv")) {
            window.location.pathname = "/quickview/"
        }
    };
    c.modify_nav_link = function () {
        if (e) {
            return
        }
        if (g.get("like_qv")) {
            var i = $("#nav_home a").attr("href") + "?qv=1";
            $("#nav_home a").attr("href", i)
        }
        e = true
    };
    c.initialize = function () {
        var i = false;
        if (BLOOMBERG.global_var && BLOOMBERG.global_var.disable_noir_www_redirect) {
            i = h.in_noir_bucket()
        }
        if ((h.is_in_cds_bucket() || i) && !g.get("noir_2_qv")) {
            g.set("noir_2_qv", true);
            g.set("mks_more_p", true);
            g.set("like_qv", true)
        }
        b.redirect_user()
    };
    c.initialize();
    $(function () {
        if (!d) {
            c.modify_nav_link()
        }
    })
})();
(function () {
    var a = BLOOMBERG.namespace("ind_job_widget");
    a.initialize = function () {
        var b = $("#ind_job_widget .ind_job_search input.search_input");
        b.each(function () {
            if ($(this).val() === "") {
                $(this).val($(this).attr("data-default"))
            }
            if ($(this).val() != $(this).attr("data-default")) {
                $(this).addClass("focus_text")
            }
        });
        b.focus(function () {
            if ($(this).val() === $(this).attr("data-default")) {
                $(this).val("")
            }
            $(this).addClass("focus_text")
        });
        b.blur(function () {
            if ($(this).val() === "") {
                $(this).val($(this).attr("data-default"))
            }
            if ($(this).val() == $(this).attr("data-default")) {
                $(this).removeClass("focus_text")
            }
        })
    };
    a.pre_process = function () {
        var b = $("#ind_job_widget .ind_job_search input.search_input");
        b.each(function () {
            if ($(this).val() === $(this).attr("data-default")) {
                $(this).val("")
            }
        })
    }
})();
(function () {
    var d = BLOOMBERG.namespace("live_stream");
    var b = {};
    var c = typeof (QUnit) != "undefined";
    if (c) {
        d.internal_obj = b
    }
    var a = {
        us: BLOOMBERG.global_var.live_stream_us || "d3MzYwMjoS4f85a0xfQrxDFebezasnkN",
        europe: BLOOMBERG.global_var.live_stream_europe || "41NDYwMjoAX-XqGCy1PYOso_K5JHYUHa",
        asia: BLOOMBERG.global_var.live_stream_asia || "A3NDYwMjrxuAk9iHbmNGbDNGV59SvMRF"
    };
    b.get_default_tab_key = function (f) {
        var e = window.location.hash.toLowerCase();
        if (e.length > 0) {
            e = e.substring(1);
            if (typeof (a[e]) === "undefined") {
                e = f
            }
        } else {
            e = f
        }
        return e
    };
    b.is_on_tv_page = function () {
        var e = window.location.pathname.toLowerCase();
        return e == "/tv/" || e == "/tv"
    };
    d.set_default_tab = function (e) {
        if (!b.is_on_tv_page()) {
            return
        }
        var f = b.get_default_tab_key("us");
        $(e).addClass(f)
    };
    d.get_embed_code = function (g) {
        if (!b.is_on_tv_page()) {
            return g
        }
        var f = b.get_default_tab_key("");
        if (f.length > 0) {
            var e = a[f];
            if (typeof (e) === "undefined") {
                e = g
            }
            return e
        } else {
            return g
        }
    }
})();
(function () {
    var a = BLOOMBERG.namespace("ind_tree_view");
    a.initialize = function () {
        $("#ind_tree_view .ind_category").addClass("ind_collapse");
        $("#ind_tree_view h3").click(function () {
            var b = $(this).closest("li");
            var c = b.hasClass("ind_collapse");
            $("#ind_tree_view .ind_category").addClass("ind_collapse");
            if (c) {
                b.removeClass("ind_collapse")
            } else {
                b.addClass("ind_collapse")
            }
        })
    }
})();
$.fn.centerText = function (a) {
    return this.each(function () {
        var b = {
            parent_sel: "a",
            child_sel: "p"
        };
        $.extend(b, a);
        var d = $(this),
            c = (d.find(b.parent_sel).height() - d.find(b.child_sel).height()) / 2;
        d.find(b.child_sel).css("padding-top", c + "px")
    })
};
(function () {
    var d = BLOOMBERG.namespace("tabbed_video_widget");

    function a(k) {
        $(".tabbed_video .tabbed_content ul").html("");
        var m = k.length;
        for (var j = 0; j <= m; j++) {
            var h = (j == 0) ? "playing" : "";
            var g = parseFloat(k[j].time);
            var e = Math.floor(g / 60) + ":" + Math.ceil(g % 60);
            var f = k[j].description.split("(");
            $(".tabbed_video .tabbed_content ul").append('<li><a href="#' + k[j].embedCode + '" class="' + h + '">' + k[j].title + "<span>(" + e + ") " + f[0] + "</span></a></li>")
        }
        $(".tabbed_video .tabbed_content").removeClass("loading")
    }
    d.tabbed_video_callback = function (f, e, h) {
        switch (e) {
        case "apiReady":
            var g = document.getElementById("tabbed_ooyala_player").getLineup();
            a(g);
            break;
        case "embedCodeChanged":
            break;
        case "loadComplete":
            break;
        default:
        }
    };

    function b(g) {
        g.preventDefault();
        $(this).parents("ul").find("a.playing").removeClass("playing");
        $(this).addClass("playing");
        var f = $(this).attr("href").split("#");
        document.getElementById("tabbed_ooyala_player").setQueryStringParameters({
            embedCode: f[1],
            autoplay: 1
        })
    }
    function c(g) {
        g.preventDefault();
        $(this).parents("ul").find("a.active").removeClass("active");
        $(this).addClass("active");
        $(".tabbed_video .tabbed_content ul").html("");
        $(".tabbed_video .tabbed_content").addClass("loading");
        var f = $(this).attr("href").replace("#", "");
        document.getElementById("tabbed_ooyala_player").setQueryStringParameters({
            embedCode: f,
            autoplay: 0
        })
    }
    d.init = function () {
        $(".tabbed_video .tabbed_content ul li a").live("click", b);
        $(".tabbed_video ul.tabs li a").bind("click", c)
    };
    $(document).ready(function () {
        BLOOMBERG.tabbed_video_widget.init()
    })
})();
$(document).ready(function () {
    $("#slideshow_thumbnails_container ul.tabs li a").bind("click", function () {
        $(this).parents("ul").find("a.active").removeClass("active");
        $(this).addClass("active");
        $("#slideshow_thumbnails_container .thumb_container").hide();
        $("#slideshow_thumbnails_container #" + $(this).parents("li").attr("class")).show()
    })
});
$.fn.extend({
    tabificate: function () {
        var a = $(this);
        $(this).find(".tabs a").bind("click", function (b) {
            b.preventDefault();
            a.find(".tabs a").removeClass("active");
            a.find(".panes div").hide();
            $(this).addClass("active");
            a.find(".panes div").eq($(this).parent().index()).show()
        });
        $(this).find(".tabs a").eq(0).addClass("active");
        $(this).find(".panes div").hide();
        $(this).find(".panes div").eq(0).show();
        return this
    }
});
var AD_RND_X = "001234567890";
AD_RND_X = "1234567890";
var AD_RND_X = new String(Math.random());
AD_RND_X = AD_RND_X.substring(2, 11);
var _global_ads_on_page = [];
var kPos = 1;
var ValueBannerSizeOrder = "random";
var ValueBannerType = "";
var ValueCategory = "";
var ValueHCat = "";

function DM_onSegsAvailable(a, d) {
    var e = "";
    var c = a.length - 1;
    for (var b = 0; b <= c; b++) {
        e += a[b] + ((b == c) ? "" : "&")
    }
    document.cookie = "BT=" + e.replace(/K05539_/gi, "") + "; path=/"
}
function getCookie(a) {
    var b = a + "=";
    if (document.cookie.length > 0) {
        offset = document.cookie.indexOf(b);
        if (offset != -1) {
            offset += b.length;
            end = document.cookie.indexOf(";", offset);
            if (end == -1) {
                end = document.cookie.length
            }
            return unescape(document.cookie.substring(offset, end))
        }
    }
}
function QString(a) {
    var c = null;
    for (var b = 0; b < QString.keys.length; b++) {
        if (QString.keys[b] == a) {
            c = QString.values[b];
            break
        }
    }
    return c
}
QString.keys = new Array();
QString.values = new Array();

function QStringParse() {
    var d = window.location.search.substring(1);
    var c = d.split("&");
    var e = -1;
    var a;
    for (var b = 0; b < c.length; b++) {
        e = c[b].indexOf("=");
        if (e > -1) {
            a = c[b].substring(0, e);
            QString.keys[QString.keys.length] = a.toUpperCase();
            QString.values[QString.values.length] = c[b].substring(e + 1)
        }
    }
}
QStringParse();

function include(a) {
    document.write('<script type="text/javascript" src="' + a + '"><\/script>');
    return false
}
OAS_sitepage = "";
OAS_target = "_top";
OAS_url = "http://ads.bloomberg.com/";
OAS_listpos = false;
OAS_version = (navigator.userAgent.indexOf("Mozilla/3") != -1 || (navigator.userAgent.indexOf("Mozilla/4.0 WebTV") != -1)) ? 10 : 11;

function AD_INIT(a, c, d) {
    var b = getCookie("BT");
    OAS_listpos = a;
    if (typeof b == "undefined" || b == "null") {
        b = ""
    }
    if (typeof c == "undefined" || c == "null") {
        c = ""
    }
    OAS_query = ((c) ? c + "&" : "") + ((b) ? b : "");
    OAS_base = (QString("TESTAD") == "0") ? "test.bloomberg.com" : (QString("TESTAD") == "1") ? "test1.bloomberg.com" : (QString("TESTAD") == "2") ? "test2.bloomberg.com" : (QString("TESTAD") == "3") ? "test3.bloomberg.com" : (QString("TESTAD") == "4") ? "test4.bloomberg.com" : (QString("TESTAD") == "5") ? "test5.bloomberg.com" : (QString("TESTAD") == "6") ? "test6.bloomberg.com" : "bloomberg";
    OAS_sitepage = OAS_base + d;
    if (OAS_version >= 11) {
        include(OAS_url + "adstream_mjx.ads/" + OAS_sitepage + "/1" + AD_RND_X + "@" + OAS_listpos + "?" + OAS_query)
    }
}
function OAS_NORMAL(a) {
    document.write('<A HREF="' + OAS_url + "click_nx.ads/" + OAS_sitepage + "/1" + AD_RND_X + "@" + OAS_listpos + "!" + a + "?" + OAS_query + '" TARGET=' + OAS_target + ">");
    document.write('<IMG SRC="' + OAS_url + "adstream_nx.ads/" + OAS_sitepage + "/1" + AD_RND_X + "@" + OAS_listpos + "!" + a + "?" + OAS_query + '" BORDER=0></A>')
}
function CallAd(a, i, g, b, h, c, f) {
    var d = a.split("|");
    if (a == "pop") {
        return true
    }
    if (g == "10" && b == "100") {
        return true
    }
    if (d[0].toUpperCase() == "JP") {
        var e = (i != "text") ? "ad.jp.doubleclick.net" : "ad.doubleclick.net";
        SITE = d[1];
        CHAR = 'charset="Shift_JIS"';
        if (typeof i == "undefined" || i == "null") {
            i = ""
        }
        if (typeof g == "undefined" || g == "null") {
            return true
        }
        if (typeof b == "undefined" || b == "null") {
            return true
        }
        if (typeof c == "undefined" || c == "null") {
            c = ""
        }
        if (typeof h == "undefined" || h == "null") {
            return true
        }
        if (c != "") {
            c = c + ";"
        }
        if (h != "") {
            h = "tile=" + h + ";"
        }
        document.write('<SCRIPT LANGUAGE="JavaScript1.1" SRC="http://' + e + "/adj/" + SITE + "/" + i + ";abr=!webtv;sz=" + g + "x" + b + ";" + c + h + "ord=" + AD_RND_X + '?"' + CHAR + "></SCRIPT>");
        if (i != "text") {
            document.write("<SCRIPT>");
            document.write('if ((!document.images && navigator.userAgent.indexOf("Mozilla/2.") >= 0) || navigator.userAgent.indexOf("WebTV") >= 0) {');
            document.write("document.write('<A HREF=\"http://" + e + "/jump/" + SITE + "/" + i + ";sz=" + g + "x" + b + ";" + c + h + "ord=" + AD_RND_X + "?\">');");
            document.write("document.write('<IMG SRC=\"http://" + e + "/ad/" + SITE + "/" + i + ";sz=" + g + "x" + b + ";" + c + h + "ord=" + AD_RND_X + '?" border=0 height="' + b + '" width="' + g + "\"></A>') }")
        }
        document.write("</SCRIPT>")
    } else {
        if (OAS_listpos && QString("TESTAD") != 99) {
            if (OAS_version >= 11 && typeof OAS_RICH == "function") {
                OAS_RICH(i);
                _global_ads_on_page.push([i, "rich"])
            } else {
                OAS_NORMAL(i);
                _global_ads_on_page.push(i, "normal")
            }
        }
    }
}
var interstitialStatus = 0;

function loadInterstitial() {
    if (interstitialStatus === 0) {
        $("#backgroundInterstitial").css({
            opacity: "1.0"
        });
        $("#backgroundInterstitial").show();
        $("#showInterstitial").show();
        $("html").css({
            overflow: "hidden"
        });
        interstitialStatus = 1
    }
}
function centerInterstitial() {
    var a = document.documentElement.clientHeight;
    $("#showInterstitial").css({
        top: 0,
        left: 0,
        width: "100%"
    });
    $("#backgroundInterstitial").css({
        height: a
    })
}
function disableInterstitial() {
    if (interstitialStatus == 1) {
        $("html").css({
            overflow: "auto"
        });
        $("#backgroundInterstitial").hide();
        $("#showInterstitial").hide();
        window.scrollTo(0, 1);
        window.scrollTo(0, 0);
        $("#content").css({
            display: "block"
        });
        $("#leader_board").css({
            display: "block"
        });
        interstitialStatus = 0
    }
}
$(document).ready(function () {
    if (interstitialStatus == 1) {
        $("#content").css({
            display: "none"
        });
        $("#leader_board").css({
            display: "none"
        })
    }
});

function initInterstitialAd() {
    var b = document.cookie.split(";");
    var k = 0;
    var i = 0;
    var a = new Date();
    var j = (navigator.cookieEnabled) ? true : false;
    var h = window.location.search.substring(1);
    var g = h.split("&");
    if (typeof navigator.cookieEnabled == "undefined" && !j) {
        document.cookie = "test";
        j = (document.cookie == "test") ? true : false;
        document.cookie = ""
    }
    if (!j) {
        return (true)
    }
    var c = "";
    if (location.href.match("news")) {
        c = "NEWS="
    }
    if (location.href.match("markets")) {
        c = "MKTD="
    }
    if (location.href.match("personal-finance")) {
        c = "PERF="
    }
    if (location.href.match("tv")) {
        c = "BBTV="
    }
    if (location.href.match("radio")) {
        c = "RDIO="
    }
    var e = (new Date()).getTime();
    var f = e;
    for (k = 0; k < b.length; k++) {
        if (b[k].indexOf(c) != -1) {
            var d = b[k].indexOf(c);
            f = b[k].substr(d + 7, 14);
            i = 1
        }
    }
    if (i < 1 || (e - f) > 21600000) {
        x = (x + ",x90");
        bbg_show_int = true
    } else {
        no_dfp_interstitial = "true"
    }
}
function displayInterstitialAd() {
    var b = new Date();
    var a = new Date(b.getTime() - (1000 * 60 * 60 * b.getHours()) + (1000 * 60 * 60 * 24));
    var d = (new Date()).getTime();
    var c = "";
    if (location.href.match("news")) {
        c = "NEWS=1-"
    }
    if (location.href.match("markets")) {
        c = "MKTD=1-"
    }
    if (location.href.match("personal-finance")) {
        c = "PERF=1-"
    }
    if (location.href.match("tv")) {
        c = "BBTV=1-"
    }
    if (location.href.match("radio")) {
        c = "RDIO=1-"
    }
    document.cookie = c + d + "; expires=" + a.toGMTString() + "; domain=bloomberg.com";
    centerInterstitial();
    loadInterstitial();
    $(function () {
        window.setTimeout("disableInterstitial()", 20000)
    })
}
function introJump() {
    document.write('<script type="text/javascript"">var noad=1;<\/script>')
}
function HideIntroAd() {
    if ($("#intro_ad").find("img[src*='empty.gif']").length > 0) {
        document.write('<script type="text/javascript"">var noad=1;<\/script>')
    }
}
function CallDfpAd(e, b, d, g, f, c) {
    if (e == "pop") {
        return true
    }
    var a = "ad.doubleclick.net";
    CHAR = 'charset="Shift_JIS"';
    if (typeof story_ni_code_dfp == "undefined" || story_ni_code_dfp == "null") {
        story_ni_code_dfp = ""
    }
    if (typeof b == "undefined" || b == "null") {
        b = ""
    }
    if (typeof market_status_val == "undefined" || market_status_val == "null") {
        market_status_val = ""
    }
    if (typeof topic_refer_name == "undefined" || topic_refer_name == "null") {
        topic_refer_name = ""
    }
    if (typeof topic_refer_key == "undefined" || topic_refer_key == "null") {
        topic_refer_key = ""
    }
    if (typeof sponsor_name == "undefined" || sponsor_name == null) {
        sponsor_name = ""
    }
    if (typeof sponsor_key == "undefined" || sponsor_key == null) {
        sponsor_key = ""
    }
    if (typeof c == "undefined" || c == "null") {
        c = ""
    }
    if (typeof d == "undefined" || d == "null") {
        return true
    }
    if (typeof f == "undefined" || f == "null" || f == "") {
        f = ""
    }
    if (typeof g == "undefined" || g == "null") {
        return true
    }
    if (f != "") {
        f = f + ";"
    }
    if (g != "") {
        g = "tile=" + g + ";"
    }
    b = b + market_status_val + story_ni_code_dfp + c;
    document.write('<SCRIPT LANGUAGE="JavaScript1.1" SRC="http://' + a + "/adj/" + f + "url=" + page_url + ";sz=" + d + ";" + b + ";" + g + "ord=" + AD_RND_X + '?"></SCRIPT>')
}
function disableDfpInterstitial() {
    $("html").css({
        overflow: "auto"
    });
    $("#backgroundInterstitial").hide();
    $("#showInterstitial").hide();
    window.scrollTo(0, 1);
    window.scrollTo(0, 0);
    $("#content").css({
        display: "block"
    });
    $("#leader_board").css({
        display: "block"
    });
    interstitialStatus = 0
}
function get_debug_param(b) {
    b = b.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
    var a = "[\\?&]" + b + "=([^&#]*)";
    var d = new RegExp(a);
    var c = d.exec(window.location.href);
    if (c == null) {
        return ""
    } else {
        return c[1]
    }
}
var postContentType = "application/x-www-form-urlencoded";

function createAJAXRequestor() {
    try {
        return new XMLHttpRequest()
    } catch (b) {
        try {
            return new ActiveXObject("Msxml2.XMLHTTP")
        } catch (b) {
            try {
                return new ActiveXObject("Microsoft.XMLHTTP")
            } catch (b) {
                return null
            }
        }
    }
}
function sendAJAXRequest(i, h, f, j, g) {
    if ((i == undefined) || (i == null)) {
        return
    }
    i.onreadystatechange = g;
    i.open(h, f);
    i.onreadystatechange = g;
    if (j != null) {
        i.setRequestHeader("Content-Type", postContentType);
        i.setRequestHeader("Content-Length", j.length)
    }
    i.send(j)
}
function callAJAXRequest(h, g, f, e) {
    if ((h == undefined) || (h == null)) {
        return
    }
    h.open(g, f, false);
    if (e != null) {
        h.setRequestHeader("Content-Type", postContentType);
        h.setRequestHeader("Content-Length", e.length)
    }
    h.send(e)
}
function showAJAXResponse(e, g, f) {
    if ((e.readyState == 4) && (e.status == 200)) {
        var h = e.responseText;
        if ((f == undefined) || (f == null) || (h.search(f) >= 0)) {
            document.getElementById(g).innerHTML = h
        }
    }
}
function passAJAXResponse(c, d) {
    if ((c.readyState == 4) && (c.status == 200)) {
        d(c.responseText)
    }
}
var symac_enable_new_site_search = true;
var symac_disable_gsa_search = BLOOMBERG && BLOOMBERG.global_var && BLOOMBERG.global_var.disable_gsa_search;
var symac_getSuggestionsUrl = (BLOOMBERG && BLOOMBERG.dev) ? "/search_assist/" : "/apps/data?pid=symautocomplete&Query=";
var symac_inputKeyword = "";
var symac_sentKeyword = "";
var symac_resultKeyword = "";
var symac_totalpositions = 0;
var symac_suggestionMaxLength = 200;
var symac_delaySendTimer = null;
var symac_position = -1;
var symac_oCache = new Object();
var symac_cachesize = 100;
var symac_httpRequestor = createAJAXRequestor();
var symac_delaySendMsec = 100;
var symac_defaultText = "Search News, Quotes and Opinion";
var symac_skipSendCount = 0;
var symac_skipSendMax = 5;
var newsSearchURL = "http://search.bloomberg.com/search?site=wnews&client=wnews&output=xml_no_dtd&ie=UTF-8&oe=UTF-8&filter=p&getfields=wnnis&sort=date:D:S:d1&lr=-lang_ja&proxystylesheet=wnews&partialfields=-wnnis:NOAVSYND&q=";
var search_url_prefix = "http://search.bloomberg.com/search?";
var new_newsSearchURL = "http://search1.bloomberg.com/search/?content_type=all&page=1&q=";
var sitemapSearchURL = "http://search1.bloomberg.com/search?content_type=site_page&q=";

function symac_handleFocus() {
    var a = document.getElementById("symac_keyword");
    a.value = "";
    a.className = "symac_normalText";
    symac_inputKeyword = "";
    symac_resultKeyword = "";
    symac_position = -1;
    BLOOMBERG.tracker.SearchAssist.trackEvent("Focus on search box", "")
}
function symac_setPrompt() {
    var a = document.getElementById("symac_keyword");
    a.value = symac_defaultText;
    a.className = "symac_grayText"
}
function symac_delayhandleLoseFocus(a) {
    symac_setPrompt();
    setTimeout("symac_hideSuggestions()", 500)
}
function symac_addToCache(a, d) {
    var b = 0;
    for (var c in symac_oCache) {
        b++
    }
    if (b >= symac_cachesize) {
        symac_oCache = new Object()
    }
    symac_oCache[a] = d
}
function symac_changeResults() {
    if (symac_resultKeyword == symac_inputKeyword) {
        return
    }
    if (symac_inputKeyword == "") {
        symac_hideSuggestions();
        symac_resultKeyword = symac_inputKeyword;
        return
    }
    var a = symac_oCache[symac_inputKeyword];
    if (a) {
        symac_displayResults(a);
        symac_resultKeyword = symac_inputKeyword;
        return
    }
    if (symac_delaySendTimer != null) {
        clearTimeout(symac_delaySendTimer)
    }
    symac_delaySendTimer = setTimeout("symac_sendRequest()", symac_delaySendMsec)
}
function symac_sendRequest() {
    symac_delaySendTimer = null;
    if (symac_inputKeyword == "") {
        return
    }
    if (symac_skipSendCount++ < symac_skipSendMax && symac_httpRequestor && (symac_httpRequestor.readyState > 0 && symac_httpRequestor.readyState < 4)) {
        return
    }
    symac_skipSendCount = 0;
    symac_sentKeyword = symac_inputKeyword;
    symac_directRequest(symac_sentKeyword)
}
function symac_directRequest(a) {
    if (window.bbabsurls) {
        document.domain = "bloomberg.com";
        document.getElementById("symac_ajaxRequestorFrame").contentWindow.symacproxy_sendRequest(a)
    } else {
        sendAJAXRequest(symac_httpRequestor, "GET", symac_getSuggestionsUrl + encodeURIComponent(a), null, function () {
            passAJAXResponse(symac_httpRequestor, symac_gotResponse)
        })
    }
}
function symac_gotResponse(a) {
    if (a.indexOf("symac_suggestTable") > 0 || a.indexOf("noresults") > 0) {
        symac_addToCache(symac_sentKeyword, a)
    }
    symac_changeResults()
}
function symac_displayResults(c) {
    var m = document.getElementById("symac_suggest");
    m.innerHTML = c;
    m.style.visibility = "visible";
    var j = $("#symac_suggestTable a[href^=" + search_url_prefix + "]");
    if (j.length > 0) {
        j[0].onclick = null;
        j.click(function (o) {
            o.preventDefault()
        });
        var k = j.closest("tr");
        if (k.length > 0) {
            k[0].onclick = null;
            k.click(function () {
                var o = j.attr("href");
                symac_navigate_url(o)
            })
        }
    }
    var h = $("#symac_suggestTable .symac_topics a");
    if (h.length > 0) {
        h[0].onclick = null;
        h.slice(0, 1).click(function (o) {
            o.preventDefault()
        });
        var i = h.closest("tr");
        if (i.length > 0) {
            i[0].onclick = null;
            i.slice(0, 1).click(function () {
                var p = h.attr("href");
                var o = get_sitemap_url(h[0], p);
                symac_navigate_url(o)
            })
        }
    }
    var n = symac_enable_new_site_search ? new_newsSearchURL : newsSearchURL;
    var g = document.getElementById("symac_keyword").value;
    n = n + g;
    var f = document.getElementById("symac_suggestTable");
    if (f) {
        if (symac_disable_gsa_search) {
            $("#symac_suggestTable tr.symac_news").remove();
            var e = f.rows.length;
            var d = '<tr onmouseover="symac_handleOnMouseOver(this);" onclick="location.href=document.getElementById( \'symac_a' + e + '\' ).href;" id="symac_tr' + e + '" class="symac_news symac_separatorRow"><td align="left" colspan="2" class="col1"><a onclick="return false;" href="' + n + '" id="symac_a' + e + '"><img width="8" height="8" border="0" src="http://cdn.images.bloomberg.com/r06/homepage/arrow-green-blue.gif" alt="">  News </a></td></tr>';
            $("#symac_suggestTable tbody").append(d);
            e += 1;
            var b = '<tr onmouseover="symac_handleOnMouseOver(this);" onclick="location.href=document.getElementById( \'symac_a' + e + '\' ).href;" id="symac_tr' + e + '" class="symac_news odd symac_resultRow"><td align="left" colspan="2" class="col1"><a onclick="return false;" href="' + n + '" id="symac_a' + e + '">Search news</a></td></tr>';
            $("#symac_suggestTable tbody").append(b)
        }
        symac_totalpositions = f.rows.length;
        symac_position = document.getElementById("symac_hltposition").value;
        symac_highlightKeyword(symac_position);
        BLOOMBERG.tracker.SearchAssist.registerRowEvent(f)
    } else {
        symac_totalpositions = 0;
        symac_position = -1
    }
    $("#symac_suggest #noresults").remove();
    var a = $("#symac_suggest");
    if (a.length > 0) {
        a.append('<div id="sym_see_all"><a id="sym_see_all_anchor" href="' + n + '">See all search results</a></div>')
    }
}
function get_sitemap_url(d, b) {
    var a = b;
    var e = $("#symac_suggestTable .symac_topics a");
    var c = symac_inputKeyword;
    if (symac_enable_new_site_search && e.length > 0 && e[0] == d && c.length > 0) {
        a = sitemapSearchURL + encodeURIComponent(c)
    }
    return a
}
function symac_handleKeyUp(c) {
    c = (!c) ? window.event : c;
    target = (!c.target) ? c.srcElement : c.target;
    if (target.nodeType == 3) {
        target = target.parentNode
    }
    code = (c.charCode) ? c.charCode : ((c.keyCode) ? c.keyCode : ((c.which) ? c.which : 0));
    if (c.type == "keydown") {
        if (code == 13) {
            var a = document.getElementById("symac_keyword").value;
            symac_delayhandleLoseFocus();
            document.getElementById("symac_keyword").blur();
            if (symac_position >= 0) {
                BLOOMBERG.tracker.SearchAssist.triggerRowEvent(document.getElementById("symac_tr" + symac_position));
                var f = document.getElementById("symac_a" + symac_position);
                var b = f.href;
                var d = get_sitemap_url(f, b);
                symac_navigate_url(d)
            } else {
                if (symac_trim(a) != "") {
                    BLOOMBERG.tracker.SearchAssist.trackEvent("Search", a);
                    symac_perform_site_search(a)
                }
            }
            try {
                window.event.cancelBubble = true;
                event.returnValue = false
            } catch (c) {}
        }
    }
    if (c.type == "keyup") {
        if (code == 13) {} else {
            if (code == 40) {
                oldTR = document.getElementById("symac_tr" + symac_position++);
                if (symac_position == symac_totalpositions) {
                    symac_position = 0
                }
                newTR = document.getElementById("symac_tr" + symac_position);
                symac_highlightRow(oldTR, false);
                symac_highlightRow(newTR, true)
            } else {
                if (code == 38) {
                    oldTR = document.getElementById("symac_tr" + symac_position--);
                    if (symac_position == -1) {
                        symac_position = symac_totalpositions - 1
                    }
                    newTR = document.getElementById("symac_tr" + symac_position);
                    symac_highlightRow(oldTR, false);
                    symac_highlightRow(newTR, true)
                } else {
                    var a = document.getElementById("symac_keyword").value;
                    a = symac_normalizeKeyword(a);
                    if (a == symac_inputKeyword) {
                        return
                    }
                    symac_deselectAll();
                    symac_position = -1;
                    symac_inputKeyword = a;
                    symac_changeResults()
                }
            }
        }
    }
}
function symac_perform_site_search(a) {
    if (a && a.length > 0) {
        var b = symac_enable_new_site_search ? new_newsSearchURL : newsSearchURL;
        window.location.href = b + encodeURIComponent(a)
    }
}
function symac_get_keyword_from_url(b) {
    var c = b.match("[?&]q=([^&$]*)");
    var a = "";
    if (c) {
        a = decodeURIComponent(c[1])
    }
    return a
}
function symac_navigate_url(b) {
    if (b.indexOf(search_url_prefix) == 0) {
        var a = symac_get_keyword_from_url(b);
        symac_perform_site_search(a)
    } else {
        window.location.href = b
    }
}
function symac_deselectAll() {
    for (var b = 0; b < symac_totalpositions; b++) {
        var a = document.getElementById("symac_tr" + b);
        symac_highlightRow(a, false)
    }
}
function symac_handleOnMouseOver(a) {
    symac_deselectAll();
    symac_highlightRow(a, true);
    symac_position = a.id.substring(8, a.id.length)
}
function symac_hideSuggestions() {
    var a = document.getElementById("symac_suggest");
    a.style.visibility = "hidden"
}
function symac_highlightKeyword(a) {
    symac_deselectAll();
    symac_position = a;
    var b = document.getElementById("symac_tr" + a);
    symac_highlightRow(b, true)
}
function symac_highlightRow(c, b) {
    var a = c.className.indexOf("_highlight");
    if (b && a < 0) {
        c.className = c.className + "_highlight"
    } else {
        if (!b && a > 0) {
            c.className = c.className.substring(0, a)
        }
    }
}
function symac_normalizeKeyword(a) {
    a = a.replace(/ +/g, " ");
    a = a.replace(/^ +/, "");
    a = a.replace(/ +$/, "");
    return a
}
function symac_trim(a) {
    a = a.replace(/^\s+|\s+$/g, "");
    return a
}
function TickerScoller(b, f, c, a) {
    this.name = b;
    this.id = f;
    this.shiftBy = c ? c : 1;
    this.interval = a ? a : 100;
    this.runId = null;
    this.div = document.getElementById(f);
    var e = this.div.firstChild;
    var d;
    while (e) {
        d = e.nextSibling;
        if (e.nodeType == 3) {
            this.div.removeChild(e)
        }
        e = d
    }
    this.left = 0;
    this.shiftLeftAt = this.div.firstChild.offsetWidth;
    this.div.style.height = this.div.firstChild.offsetHeight;
    this.div.style.width = 2 * screen.availWidth;
    this.div.style.visibility = "visible"
}
function startTicker() {
    this.stop();
    this.left -= this.shiftBy;
    if (this.left <= -this.shiftLeftAt) {
        this.left = 0;
        this.div.appendChild(this.div.firstChild);
        this.shiftLeftAt = this.div.firstChild.offsetWidth
    }
    this.div.style.left = (this.left + "px");
    this.runId = setTimeout(this.name + ".start()", this.interval)
}
function stopTicker() {
    if (this.runId) {
        clearTimeout(this.runId)
    }
    this.runId = null
}
function changeTickerInterval(a) {
    if (typeof (a) == "string") {
        a = parseInt("0" + a, 1000)
    }
    if (typeof (a) == "number" && a > 0) {
        this.interval = a
    }
    this.stop();
    this.start()
}
TickerScoller.prototype.start = startTicker;
TickerScoller.prototype.stop = stopTicker;
TickerScoller.prototype.changeInterval = changeTickerInterval;
jQuery.fn.combobox = function (a) {
    var b = {
        comboboxContainerClass: null,
        comboboxValueContainerClass: null,
        comboboxValueContentClass: null,
        comboboxDropDownButtonClass: null,
        comboboxDropDownClass: null,
        comboboxDropDownItemClass: null,
        comboboxDropDownItemHoverClass: null,
        comboboxDropDownGroupItemHeaderClass: null,
        comboboxDropDownGroupItemContainerClass: null,
        animationType: "slide",
        width: "120px"
    };
    if (a) {
        jQuery.extend(b, a)
    }
    this.onChange = function () {};
    return this.each(function () {
        var am = jQuery(this);
        var P = null;
        var al = "border-left: solid 2px #777;border-top: solid 2px #777;border-right: solid 1px #ccc;border-bottom: solid 1px #ccc;";
        var ae = "padding:0;";
        var ai = null;
        var ac = "list-style-type:none;min-height:15px;padding-top:0;margin:0;";
        var ah = "cursor:default;padding:2px;background:#fff;border-right:solid 1px #000;border-bottom:solid 1px #000;border-left:solid 1px #aaa;border-top:solid 1px #aaa;overflow:auto";
        var K = "display:block;";
        var af = "cursor:default;padding-left:2px;font-weight:normal;font-style:normal;";
        var H = "list-style-type:none;";
        var F = "padding-left:10px;margin-left:0;";
        var ag = "";
        var r = "font-style:italic;font-weight:bold;";
        var q = null;
        var E = "position:relative;overflow:hidden;";
        var N = null;
        var M = "float:left;position:absolute;cursor:default;overflow:hidden;";
        var an = null;
        var v = "overflow:hidden;width: 16px;height: 18px;color:#000;background: #D6D3CE;,font-family: verdana;font-size: 10px;cursor: default;text-align: center;vertical-align:middle;";
        var X = "background-repeat:no-repeat;float:right;";
        var ad = "padding-left:0px;padding-top:1px;width:12px;height:13px;border-right:solid 2px #404040;border-bottom:solid 2px #404040;border-left:solid 2px #f0f0f0;border-top:solid 2px #f0f0f0";
        var T = "padding-left:1px;padding-top:3px;width:12px;height:13px;border:solid 1px #808080";
        var o = "&#9660;";
        var h = null;
        var g = null;
        var ak = false;
        var G = 0;
        var A = null;
        String.format = function () {
            var ap = null;
            if (arguments.length != 0) {
                ap = arguments[0];
                for (var ao = 1; ao < arguments.length; ao++) {
                    var aq = new RegExp("\\{" + (ao - 1) + "\\}", "gm");
                    ap = ap.replace(aq, arguments[ao])
                }
            }
            return ap
        };

        function t(ao, ap) {
            var aq = (ao.outerWidth() - ao.width());
            ao.width(ap - aq)
        }
        function L(ap, ao) {
            var aq = (ap.outerHeight() - ap.height());
            ap.height(ao - aq)
        }
        function j() {
            var ao = "";
            if (b.comboboxValueContainerClass) {
                ao = String.format("<div class='{0}' style='{1}'></div>", b.comboboxValueContainerClass, E)
            } else {
                ao = String.format("<div style='{0}'></div>", E)
            }
            var aq = "";
            if (b.comboboxValueContentClass) {
                aq = String.format("<div class='{0}' style='{1}'></div>", b.comboboxValueContentClass, M)
            } else {
                aq = String.format("<div style='{0}'></div>", M)
            }
            var ap = "";
            if (b.comboboxDropDownButtonClass) {
                ap = String.format("<div class='{1}' style='{0}'></div>", X, b.comboboxDropDownButtonClass)
            } else {
                ap = String.format("<div style='{0}'>{1}</div>", (X + v), o)
            }
            N = jQuery(aq);
            an = jQuery(ap);
            q = jQuery(ao);
            q.appendTo(P);
            N.appendTo(q);
            an.appendTo(q);
            m(0)
        }
        function C(aw) {
            var ao = "";
            var av = null;
            var au = "";
            var at = null;
            var ar = "";
            var aq = "option";
            if (aw.is("option")) {
                au = aw.text();
                at = aw.val();
                if (b.comboboxDropDownItemClass) {
                    av = b.comboboxDropDownItemClass;
                    ar = K
                } else {
                    ar = (K + af)
                }
                if (av) {
                    ao = String.format("<li style='{0}' class='{1}'>{2}</li>", ar, av, au)
                } else {
                    ao = String.format("<li style='{0}'>{1}</li>", ar, au)
                }
            } else {
                au = aw.attr("label");
                at = aw.attr("class");
                aq = "optgroup";
                if (b.comboboxDropDownGroupItemHeaderClass) {
                    av = b.comboboxDropDownGroupItemHeaderClass;
                    ar = ag
                } else {
                    ar = (ag + r)
                }
                if (av) {
                    ao = String.format("<li><span style='{0}' class='{1}'>{2}</span></li>", ar, av, au)
                } else {
                    ao = String.format("<li><span style='{0}'>{1}</span></li>", ar, au)
                }
            }
            var ap = jQuery(ao);
            ap.css("display", "inline");
            ap[0].dataValue = at;
            ap[0].dataType = aq;
            ap[0].title = au;
            return ap
        }
        function B(ao, ap) {
            ap.each(function () {
                var au = jQuery(this);
                var aw = C(au);
                ao.append(aw);
                var at = aw.offset().left;
                at -= A.left;
                if (at < 0) {
                    at = 0
                }
                var ar = (at + aw.outerWidth());
                if (ar > G) {
                    G = ar
                }
                I(aw, K);
                if (au.is("optgroup")) {
                    var aq = "";
                    if (b.comboboxDropDownGroupItemContainerClass) {
                        aq = String.format("<ul style='{0}' class='{1}'></ul>", H, b.comboboxDropDownGroupItemContainerClass)
                    } else {
                        aq = String.format("<ul style='{0}'></ul>", (H + F))
                    }
                    var av = jQuery(aq);
                    aw.append(av);
                    B(av, au.children())
                }
            })
        }
        function s() {
            var ao = am.children();
            h = null;
            g = null;
            if (ai) {
                ai.empty()
            } else {
                var ap = "";
                if (b.comboboxDropDownClass) {
                    ap = String.format("<ul class='{0}' style='{1}'></ul>", b.comboboxDropDownClass, ac)
                } else {
                    ap = String.format("<ul style='{0}'></ul>", (ac + ah))
                }
                ai = jQuery(ap);
                ai.appendTo(P);
                ai.attr("tabIndex", 0)
            }
            if (ao.length > 0) {
                G = 0;
                A = ai.offset();
                B(ai, ao)
            }
        }
        function I(ao, at) {
            var ar = at.split(";");
            if (ar.length > 0) {
                for (var aq = 0; aq < ar.length; aq++) {
                    var au = ar[aq];
                    var ap = au.split(":");
                    ao.css(ap[0], ap[1])
                }
            }
        }
        function m(ar) {
            if (b.comboboxDropDownButtonClass) {
                var aq = an.width();
                var at = ar * aq;
                var ao = String.format("-{0}px 0px", at);
                an.css("background-position", ao)
            } else {
                var ap = ad;
                if (ar == 1) {
                    ap = T
                }
                I(an, ap)
            }
        }
        function n() {
            var ao = P.outerWidth();
            if (ao < G) {
                ao = G
            }
            ai.width(ao)
        }
        function z() {
            var ap = N.outerHeight();
            var ao = q.height();
            var aq = ((ao - ap) / 2);
            if (aq < 0) {
                aq = 0
            }
            N.css("top", aq)
        }
        function u() {
            P.width(b.width);
            var ar = P.width();
            t(q, ar);
            var aq = (q.width() - an.outerWidth());
            t(N, aq);
            var ao = an.outerHeight();
            L(q, ao);
            ai.css("position", "absolute");
            ai.css("z-index", "20000");
            n();
            var at = ai.offset().left;
            var ap = (at - (P.outerWidth() - P.width()));
            ai.hide()
        }
        function aa() {
            jQuery("*", ai).not("ul").not("span").not("[dataType='optgroup']").each(function () {
                var ao = jQuery(this);
                ao.click(function (ap) {
                    ap.stopPropagation();
                    y(ao)
                });
                ao.mouseover(function () {
                    D(ao)
                });
                ao.mouseout(function () {
                    R(ao)
                })
            })
        }
        function O() {
            ai.blur(function (ao) {
                ao.stopPropagation();
                c()
            })
        }
        function f() {
            P.click(function (ao) {
                W()
            })
        }
        function k() {
            P.unbind("click")
        }
        function aj() {
            P.keydown(function (ao) {
                ao.preventDefault();
                d(ao)
            });
            f();
            O();
            aa()
        }
        function i() {
            var ap = false;
            var ao = am[0];
            if (ao.length > 0) {
                var aq = ao[ao.selectedIndex].text;
                N.text(aq);
                N.attr("title", aq);
                z();
                if (g) {
                    if (g != am.val()) {
                        ap = true
                    }
                }
                g = am.val();
                if (ap) {
                    am.change()
                }
                if (h) {
                    p(h, false)
                }
                h = jQuery("li[dataValue='" + g + "']", ai);
                p(h, true)
            }
        }
        function p(ap, ao) {
            if (ap) {
                if (b.comboboxDropDownItemHoverClass) {
                    if (ao) {
                        ap.addClass(b.comboboxDropDownItemHoverClass)
                    } else {
                        ap.removeClass(b.comboboxDropDownItemHoverClass)
                    }
                } else {
                    if (ao) {
                        ap.css("background", "#000");
                        ap.css("color", "#fff")
                    } else {
                        ap.css("background", "");
                        ap.css("color", "")
                    }
                }
            }
        }
        function e() {
            var ao = "";
            if (b.comboboxContainerClass) {
                ao = String.format("<div class='{0}' style='{1}'></div>", b.comboboxContainerClass, ae)
            } else {
                ao = String.format("<div style='{0}' style='{1}'></div>", al, ae)
            }
            P = jQuery(ao);
            am.before(P);
            P.append(am);
            am.hide();
            P.attr("tabIndex", 0)
        }
        function J() {
            e();
            j();
            s();
            u();
            aj();
            i()
        }
        function U() {
            ai.focus()
        }
        function S() {
            P.focus();
            f()
        }
        function Z(ao) {
            ai.animate({
                height: "toggle",
                top: ao
            }, "fast", U)
        }
        function Y(ao) {
            ai.animate({
                height: "toggle",
                top: ao
            }, "fast", S)
        }
        function Q() {
            var ap = P.position().top;
            var at = ai.outerHeight();
            var ar = (ap + P.outerHeight());
            var au = jQuery(window).scrollTop();
            var av = jQuery(window).height();
            var ao = (av - (ar - au));
            var aq;
            aq = ar;
            ak = false;
            if (ao < at) {
                if ((ap - au) > at) {
                    aq = (ap - at);
                    ak = true
                }
            }
            return aq
        }
        function w(ar) {
            if (ar) {
                if (ai.is(":hidden")) {
                    k();
                    p(h, true);
                    m(1);
                    var ap = Q();
                    ai.css("top", ap);
                    switch (b.animationType) {
                    case "slide":
                        if (ak) {
                            var ao = P.position().top;
                            var aq = P.outerHeight();
                            ai.css("top", (ao - aq));
                            Z(ap)
                        } else {
                            ai.slideDown("fast", U)
                        }
                        break;
                    case "fade":
                        ai.fadeIn("fast", U);
                        break;
                    default:
                        ai.show();
                        U()
                    }
                }
            } else {
                if (ai.is(":visible")) {
                    m(0);
                    switch (b.animationType) {
                    case "slide":
                        if (ak) {
                            ao = P.position().top;
                            dropdownListHeight = ai.height();
                            Y(ao - P.outerHeight())
                        } else {
                            ai.slideUp("fast", S)
                        }
                        break;
                    case "fade":
                        ai.fadeOut("fast", S);
                        break;
                    default:
                        ai.hide();
                        S()
                    }
                }
            }
        }
        function ab(ar) {
            var ao = am[0];
            var ap = ao.selectedIndex;
            var aq = -1;
            var at = ao.length - 1;
            switch (ar) {
            case ":next":
                aq = ap + 1;
                if (aq > at) {
                    aq = at
                }
                break;
            case ":previous":
                aq = ap - 1;
                if (aq < 0) {
                    aq = 0
                }
                break;
            case ":first":
                aq = 0;
                break;
            case ":last":
                aq = at;
                break
            }
            ao.selectedIndex = aq;
            i()
        }
        function V() {
            return ai.is(":visible")
        }
        am.combobox.updateSelection = function () {
            i()
        };
        am.combobox.update = function () {
            s();
            n();
            aa();
            i()
        };

        function W() {
            if (ai.is(":hidden")) {
                w(true)
            } else {
                w(false)
            }
        }
        function c() {
            if (ai.is(":visible")) {
                w(false)
            }
        }
        function y(ao) {
            am.val(ao[0].dataValue);
            i();
            w(false)
        }
        function D(ao) {
            p(h, false);
            p(ao, true)
        }
        function R(ao) {
            p(ao, false)
        }
        function d(ao) {
            switch (ao.which) {
            case 33:
            case 36:
                ab(":first");
                break;
            case 34:
            case 35:
                ab(":last");
                break;
            case 37:
                ab(":previous");
                break;
            case 38:
                if (ao.altKey) {
                    w(!(V()))
                } else {
                    ab(":previous")
                }
                break;
            case 39:
                ab(":next");
                break;
            case 40:
                if (ao.altKey) {
                    w(!(V()))
                } else {
                    ab(":next")
                }
                break;
            case 27:
            case 13:
                w(false);
                break;
            case 9:
                ai.blur();
                $(window)[0].focus();
                break
            }
            ao.cancelBubble = true
        }
        J()
    })
};
jQuery.fn.elementlocation = function () {
    var c = 0;
    var a = 0;
    var b = this;
    do {
        c += b.attr("offsetLeft");
        a += b.attr("offsetTop");
        b = b.offsetParent()
    } while (b.attr("tagName") != "BODY");
    return ({
        x: c,
        y: a
    })
};

function ShowLargeAd(d, e) {
    var f = "mksa";
    var a = "bloomberg.com";
    var g = BLOOMBERG.util.Cookie.get("mksad");
    $("#top_long_ad").css("background", "url('" + d + "')");
    $("#top_long_ad").click(function (j) {
        var i = $("#top_long_ad").elementlocation();
        var h = j.pageX - i.x;
        var k = j.pageY - i.y;
        if (k > 72 && h < 150) {
            expandRight()
        } else {
            window.open(e, "_largecustomer")
        }
        j.preventDefault()
    });
    if (!g) {
        var c = new Date();
        var b = new Date().setDate(c.getDate() + 1);
        BLOOMBERG.util.Cookie.set("mksad", "1", b, "/", a);
        $(".topadcontainer").css("display", "block");
        $("#top_long_ad").css("display", "block");
        window.setTimeout(function () {
            expandRight()
        }, 7000)
    } else {
        $("#top_long_ad").hide();
        $(".topadcontainer").hide();
        $("#top_long_ad").css("marginLeft", "970px")
    }
}
function expandLeft() {
    var a = $("#top_long_ad");
    a.show();
    $(".topadcontainer").show();
    a.animate({
        marginLeft: "0px"
    }, 1000, function () {})
}
function expandRight() {
    var a = $("#top_long_ad");
    a.animate({
        marginLeft: parseInt(a.css("marginLeft"), 10) == 0 ? a.outerWidth() : 0
    }, 1000, function () {
        a.hide();
        $(".topadcontainer").hide()
    })
}
function ShowSmallAd(a, b) {
    $("#right_top_ad").append($("<img/>").attr({
        src: a
    }));
    $("#right_top_ad").click(function (f) {
        var d = $("img", "#right_top_ad").elementlocation();
        var c = f.pageX - d.x;
        var g = f.pageY - d.y;
        if (g > 72) {
            expandLeft()
        } else {
            window.open(b, "_largecustomer")
        }
        f.preventDefault()
    })
}
var ticker = null;
$(document).ready(function () {
    var i = BLOOMBERG.namespace("mks");
    var h = BLOOMBERG.bbswitch;
    var m = false;
    var g = false;

    function a(r) {
        var t = "#symbol_" + r.symbol.replace(":", "_");
        var q = $(t);
        if (q.length > 0) {
            q.removeClass("clstsu");
            q.removeClass("clstsd");
            if (r.symbol.indexOf(":GOV") > 0) {
                if (r.yield_change > 0) {
                    q.addClass("clstsu")
                } else {
                    q.addClass("clstsd")
                }
            } else {
                if (r.change > 0) {
                    q.addClass("clstsu")
                } else {
                    q.addClass("clstsd")
                }
            }
            var o = r.percent_change;
            var p = r.last;
            var s = e(r.symbol) ? 4 : 2;
            o = o.toFixed(s) + "%";
            p = p.toFixed(s);
            q.find(".value_change").text(o);
            q.find(".last_price").text(p)
        }
    }
    function e(p) {
        var o = {
            "EURUSD:IND": "cur"
        };
        return o[p] == "cur"
    }
    function c(p) {
        for (var o = 0; o < p.length; o++) {
            a(p[o])
        }
    }
    var b = "mks_disable_scroll";
    var f = h.get(b);

    function k() {
        if ($("#tickerID").length > 0) {
            ticker = new TickerScoller("ticker", "tickerID", 1, 0);
            if (!f) {
                ticker.start();
                m = true;
                $("#customizeBtn").attr("class", "pause")
            } else {
                m = false;
                $("#customizeBtn").attr("class", "resume")
            }
        }
    }
    $(".market_combo").change(function (o) {
        cur_indices = get_selected_tickers();
        callRailsDataForIndex(cur_indices)
    });
    $("#customizeBtn").click(function () {
        if (m) {
            m = false;
            h.set(b, true);
            ticker.stop();
            $("#customizeBtn").attr("class", "resume");
            BLOOMBERG.tracker.EVENTTRACK.record("Module Link Tracking", "ScrollingTicker_pause", "")
        } else {
            m = true;
            h.set(b, false);
            ticker.start();
            $("#customizeBtn").attr("class", "pause");
            BLOOMBERG.tracker.EVENTTRACK.record("Module Link Tracking", "ScrollingTicker_resume", "")
        }
    });
    $(".market_combo").combobox({
        comboboxContainerClass: "comboboxContainer",
        comboboxValueContainerClass: "comboboxValueContainer",
        comboboxValueContentClass: "comboboxValueContent",
        comboboxDropDownClass: "comboboxDropDownContainer",
        comboboxDropDownButtonClass: "comboboxDropDownButton",
        comboboxDropDownItemClass: "comboboxItem",
        comboboxDropDownItemHoverClass: "comboboxItemHover",
        comboboxDropDownGroupItemHeaderClass: "comboboxGroupItemHeader",
        comboboxDropDownGroupItemContainerClass: "comboboxGroupItemContainer",
        animationType: "none",
        width: "90px"
    });

    function j() {
        if (g) {
            chart.xAxis[0].options.tickInterval = 3600 * 1000 * 2;
            $("#market_snapshot_deluxe").addClass("more_data_open");
            chart.setSize("395", "70", false)
        } else {
            chart.xAxis[0].options.tickInterval = 3600 * 1000;
            $("#market_snapshot_deluxe").removeClass("more_data_open");
            chart.setSize("850", "70", false)
        }
    }
    var d = "mks_more_p";
    g = h.get(d);
    if (g) {
        $("#market_snapshot_deluxe").addClass("more_data_open")
    }
    i.more_data_open = function () {
        return g
    };
    $("#moredata").click(function () {
        g = !g;
        j();
        if (g) {
            h.set(d, true);
            BLOOMBERG.tracker.EVENTTRACK.record("Module Link Tracking", "MKS_more_data", "")
        } else {
            h.set(d, false);
            BLOOMBERG.tracker.EVENTTRACK.record("Module Link Tracking", "MKS_less_data", "")
        }
    });
    var n;
    $(".ticker_holder").hover(function () {
        n = m;
        ticker.stop()
    }, function () {
        m = n;
        m ? ticker.start() : ticker.stop()
    });
    $("ul.tabs").not(".ntab").tabs("div.panes > div");
    k()
});
(function (b) {
    function a(e, c, d) {
        if (c > e.length - 1) {
            return e
        }
        return e.substr(0, c) + d + e.substr(c + 1)
    }
    b.normalNames = function (d) {
        var c = new Object();
        b.each(d, function (e, f) {
            var g = e;
            if (g.indexOf("font") == 0) {
                g = a(g, 4, g.charAt(4).toLowerCase())
            }
            g = g.replace("font", "font-");
            c[g] = f
        });
        return c
    };
    b.textMetrics = function (g, j) {
        var e = 0,
            c = 0;
        var i = document.createElement("div");
        document.body.appendChild(i);
        b(i).css({
            position: "absolute",
            left: -1000,
            top: -1000,
            display: "none"
        });
        b(i).html(g);
        var f = ["font-size", "font-style", "font-weight", "font-family", "line-height", "text-transform", "letter-spacing"];
        b(f).each(function () {
            var h = this.toString();
            b(i).css(h, j[h])
        });
        e = b(i).outerHeight();
        c = b(i).outerWidth();
        b(i).remove();
        var d = {
            height: e,
            width: c + 3
        };
        return d
    }
})(jQuery);
var HOUR = 60 * 60;
var YEARS = HOUR * 24 * 365;
var MONTHS = YEARS / 12;
var BASE_URL = "wbetest1.bloomberg.com:8080/";
var CALC_CHANGE = false;
var cur_indices;
var all_data_low = 0;
var all_data_high = 0;
var allRects = new Object();

function getEpoch(a) {
    return ((a.getTime() - a.getMilliseconds()) / 1000)
}
function convertEpochToHuman(a) {
    var b = new Date();
    if (a < 10000000000) {
        a *= 1000
    }
    b.setTime(a);
    return b
}
var options;
var chart;
$(document).ready(function () {
    if ($("#asia_combo").length == 0) {
        return false
    }
    $.extend(Highcharts.Renderer.prototype.symbols, {
        "triangle-left": function (o, j, g) {
            var f = o;
            var n = j + 1.33 * g;
            var d = o - g;
            var k = j - 0.67 * g;
            var c = o + g;
            var h = j - 0.67 * g;
            var m = ((f + d + c) / 3);
            var i = ((n + k + h) / 3);
            var e = [];
            e[0] = m - n + i;
            e[1] = i + f - m;
            e[2] = m - k + i;
            e[3] = i + d - m;
            e[4] = m - h + i;
            e[5] = i + c - m;
            return ["M", e[0], e[1], "L", e[2], e[3], e[4], e[5], "Z"]
        },
        "triangle-left-simple": function (b, g, a, f) {
            var e = b - f;
            var d = g + (a / 2);
            var c = g + a;
            return ["M", b, g, "L", e, d, b, c, "Z"]
        }
    });
    Highcharts.Series.prototype.drawDataLabels = BB_DrawLabels;
    Highcharts.Chart.prototype.callbacks.push(function () {});
    options = {
        global: {
            useUTC: true
        },
        colors: ["#660099", "#0054a1", "#990000", "#DF5353", "#aaeeee", "#ff0066", "#eeaaee", "#55BF3B", "#DF5353", "#7798BF", "#aaeeee"],
        chart: {
            renderTo: "container_marketsnp_chart",
            spacingTop: -3,
            spacingBottom: 0,
            spacingLeft: 1,
            spacingRight: 10,
            plotBorderWidth: 1,
            plotBorderColor: "#cccccc",
            events: {
                load: function () {
                    return;
                    var b = 1;
                    var a = this.series[b];
                    if (1 == 0) {
                        setInterval(function () {
                            if (last_date_time[b] > 1000) {
                                last_date_time[b] = (parseInt(last_date_time[b]) + 60);
                                var c = parseInt(last_date_time[b]) * 1000;
                                var d = Math.random();
                                a.addPoint([c, d], true, true)
                            }
                        }, 10000)
                    }
                }
            }
        },
        title: {
            text: null
        },
        xAxis: [{
            lineWidth: 0,
            title: {
                text: null
            },
            type: "datetime",
            tickInterval: 3600 * 1000,
            tickWidth: 0,
            value: 0,
            opposite: true,
            gridLineWidth: 1,
            gridLineColor: "#cccccc",
            labels: {
                align: "left",
                x: 1,
                y: -3,
                style: {
                    fontWeight: "normal",
                    fontSize: "9px",
                    fontFamily: "Arial",
                    color: "#999"
                },
                formatter: function () {
                    return BLOOMBERG.date.chartDateFormatter(this.value)
                }
            },
            dateTimeLabelFormats: {
                hour: "%l%P"
            },
            dataLabels: {
                enabled: false,
                style: {
                    fontWeight: "normal",
                    fontSize: "9px",
                    fontFamily: "Arial"
                }
            },
            enableMouseTracking: false

        }],
        yAxis: {
            gridLineWidth: 0,
            startOnTick: false,
            endOnTick: false,
            title: {
                text: null
            },
            opposite: true,
            labels: {
                align: "left",
                x: 2,
                y: 4,
                style: {
                    fontWeight: "normal",
                    fontSize: "9px",
                    fontFamily: "Arial",
                    color: "#666666"
                },
                formatter: function (a) {
                    return this.value == 0 ? "0%" : ""
                }
            },
            showFirstLabel: false,
            plotLines: [{
                color: "#666666",
                width: 2,
                value: 0,
                dashStyle: "Dash"
            }]
        },
        legend: {
            enabled: false
        },
        tooltip: {
            shared: true,
            crosshairs: true,
            enabled: false
        },
        plotOptions: {
            series: {
                cursor: "pointer",
                point: {
                    events: {
                        click: function () {
                            return;
                            hs.htmlExpand(null, {
                                pageOrigin: {
                                    x: this.pageX,
                                    y: this.pageY
                                },
                                headingText: this.series.name,
                                maincontentText: Highcharts.dateFormat("%A, %b %e, %Y", this.x) + ":<br/> " + this.y + " visits",
                                width: 200
                            })
                        }
                    }
                },
                marker: {
                    enabled: false
                },
                states: {
                    hover: {
                        enabled: false
                    }
                },
                dataLabels: {
                    enabled: true,
                    color: "#fff",
                    backgroundColor: "rgba(255, 0, 255, .85)",
                    style: {
                        fontWeight: "bold",
                        fontSize: "11px",
                        fontFamily: "Arial",
                        lineHeight: "16px"
                    }
                }
            }
        },
        exporting: {
            enabled: false
        },
        credits: {
            enabled: false
        },
        series: [{
            lineWidth: 1.2,
            shadow: false,
            marker: {
                radius: 4
            },
            name: "Hang Seng"
        }, {
            lineWidth: 1.2,
            shadow: false,
            name: "DAX"
        }, {
            lineWidth: 1.2,
            shadow: false,
            name: "S&P"
        }]
    };
    getAllIntraday(new Date(), 24)
});
var last_time_start = 0;
var last_time_end = 0;

function get_selected_tickers() {
    return [$("#asia_combo").val(), $("#euro_combo").val(), $("#us_combo").val()]
}
function getAllIntraday(c, d) {
    var a = getEpoch(c) + (HOUR * 2);
    var b = a - (d * HOUR);
    last_time_end = a;
    last_time_start = b;
    cur_indices = get_selected_tickers();
    callRailsDataForIndex(cur_indices)
}
function convertTime(b) {
    var a = convertEpochToHuman(b);
    return Highcharts.dateFormat("%Y%m%d%H%M%S", a, false)
}
function update_intraday_line(m, q, g) {
    var p = [];
    if (m && m.points && m.points[0]) {
        var n = m.points.length - 1;
        var b = m.points[n][0];
        var h = m.points[n][1];
        var j = 0;
        var f;
        for (var k = n; k > 1; k--) {
            var c = m.points[k][0];
            var a = (c - b);
            var o = new Date();
            var e = (c * 1000);
            var r = ((o.getTimezoneOffset() * 60 * 1000));
            e -= r;
            if (CALC_CHANGE) {
                f = ((m.points[k][1] - h) / h) * 100
            } else {
                f = m.points[k][1]
            }
            if (f > all_data_high) {
                all_data_high = f
            }
            if (f < all_data_low) {
                all_data_low = f
            }
            o.setTime(e);
            if (Math.abs(a) > HOUR * 3) {
                if (true == true) {
                    p[k] = [e + (60 * 1000), null];
                    j = -1
                } else {
                    break
                }
            }
            p[k + j] = [e, f];
            b = c;
            last_date_time[q] = parseInt(b)
        }
        if (j > 0) {}
    } else {}
    p = p.reverse();
    options.series[q].data = p
}
function get_chart_width() {
    return BLOOMBERG.mks.more_data_open() ? 395 : 850
}
function get_x_interval() {
    return BLOOMBERG.mks.more_data_open() ? 3600 * 1000 * 2 : 3600 * 1000
}
function draw_chart() {
    options.chart.width = get_chart_width();
    options.xAxis[0].tickInterval = get_x_interval();
    chart = new Highcharts.Chart(options);
    var c = chart.xAxis[0].getExtremes();
    var e = c.dataMax;
    var j = (e - (21 * HOUR * 1000));
    var f = (e + (2.5 * HOUR * 1000));
    var i = chart.yAxis[0].getExtremes();
    var k = i.dataMin;
    var b = i.dataMax;
    var g = b - k,
        a = g * 0.125,
        h = k - a,
        d = b + a;
    chart.xAxis[0].setExtremes(j, f, true);
    chart.yAxis[0].setExtremes(h, d, true)
}
var last_date_time = [0, 0, 0];

function callDataForIndex(d, a, e, c) {
    var b = "http://" + BASE_URL + "/?secs=" + convertSymbol(d) + "&type=intraday&start=" + convertTime(e) + "&end=" + convertTime(c);
    last_date_time = [0, 0, 0];
    jQuery.get(b, null, function (f) {
        update_intraday_line(f, a, d)
    }, "json")
}
function getShort(a) {
    switch (a) {
    case "UKX":
        return "FTSE 100";
    case "CCMP":
        return "NASDAQ";
    case "NKY":
        return "NIKKEI";
    case "INDU":
        return "DOW";
    case "HSI":
        return "HANG SENG";
    case "SPX":
        return "S&P 500";
    case "SX5E":
        return "STOXX 50";
    case "TPX":
        return "TOPIX";
    default:
        return a
    }
}
var mks_region_mapping = {
    "NKY:IND": "mks_asian_last_price",
    "TPX:IND": "mks_asian_last_price",
    "HSI:IND": "mks_asian_last_price",
    "SX5E:IND": "mks_euro_last_price",
    "UKX:IND": "mks_euro_last_price",
    "DAX:IND": "mks_euro_last_price",
    "INDU:IND": "mks_us_last_price",
    "SPX:IND": "mks_us_last_price",
    "CCMP:IND": "mks_us_last_price"
};

function getSeriesId(a) {
    switch (a.header.Security) {
    case "INDU:IND":
        return 2;
    case "CCMP:IND":
        return 2;
    case "SPX:IND":
        return 2;
    case "SX5E:IND":
        return 1;
    case "UKX:IND":
        return 1;
    case "DAX:IND":
        return 1;
    default:
        return 0
    }
}
function getTickerSymbol(a) {
    switch (a) {
    case "NIKKEI":
        return "NKY:IND";
    case "TOPIX":
        return "TPX:IND";
    case "HANG SENG":
        return "HSI:IND";
    case "STOXX 50":
        return "SX5E:IND";
    case "FTSE 100":
        return "UKX:IND";
    case "DAX":
        return "DAX:IND";
    case "DOW":
        return "INDU:IND";
    case "S&P 500":
        return "SPX:IND";
    case "NASDAQ":
        return "CCMP:IND";
    default:
        return a
    }
}
var mks_last_values;

function callRailsDataForIndex(b) {
    var a = "/market_snapshot/" + b.join("-");
    mks_last_values = {};
    jQuery.get(a, null, function (e) {
        for (var c = 0; c < e.length; c++) {
            var f = getSeriesId(e[c]);
            var d = getShort(e[c].header.Security.split(":")[0]);
            if (chart && (chart.series != undefined)) {
                chart.series[f].name = d
            }
            options.series[f].name = d;
            update_last_price(e[c]);
            if (e[c].points.length > 0) {
                mks_last_values[options.series[f].name] = e[c].points[e[c].points.length - 1][1]
            }
            update_intraday_line(e[c], f, e[c].header.Security)
        }
        allRects = new Object();
        draw_chart()
    }, "json")
}
function update_last_price(b) {
    var f = BLOOMBERG.global_var.display_percent_change_on_mksnap_chart_labels;
    var g = mks_region_mapping[b.header.Security];
    if (g) {
        var c = $("#" + g);
        var a = null;
        var e = null;
        if (b.points.length > 0) {
            c.removeClass("mkt_no_trades");
            c.html("");
            a = b.points[b.points.length - 1][1];
            e = b.points[b.points.length - 1][0]
        } else {
            c.addClass("mkt_no_trades");
            c.html("No trades in current view")
        }
        if (a) {
            if (f == false) {
                var d = "";
                if (a >= 0) {
                    c.addClass("mks_up");
                    d = "+"
                } else {
                    c.removeClass("mks_up")
                }
                c.html(d + a.toFixed(2) + "%")
            }
        }
    }
}
function convertSymbol(a) {
    a = a.replace(" ", ":");
    a = a.replace("INDEX", "IND");
    a = a.replace("COMDTY", "COM");
    return a
}
function fix_bad_price(a) {
    if (a < -9999) {
        return ""
    }
    return a
}
function roundNumber(b, c) {
    var a = Math.round(b * Math.pow(10, c)) / Math.pow(10, c);
    return a
}
function callDataForTicker(c, e, a, d) {
    var b = "http://" + BASE_URL + "/?secs=" + convertSymbol(e) + "&type=SNAPSHOT";
    jQuery.get(b, null, function (i) {
        var g = "";
        if (i == undefined) {
            a.parent().remove();
            return
        }
        a.text(i.last);
        if (i.last > 0) {
            a.parent().addClass("clstsu")
        } else {
            a.parent().addClass("clstsd")
        }
        if (d) {
            d.children("#symbol_name").text(c);
            var j = i.last - i.close;
            var f = 100 * (i.last - i.close) / i.last;
            var h = i.last;
            j = roundNumber(j, 3);
            f = roundNumber(f, 3);
            h = roundNumber(h, 3);
            d.children("#value_amount").text(j);
            d.children("#value_change").text(f);
            d.children("#last_price").text(h);
            if (i.last > 0) {
                d.children("#last_price").addClass("stkup");
                d.children("#ask_price").addClass("stkup")
            } else {
                d.children("#last_price").addClass("stkdwn");
                d.children("#ask_price").addClass("stkdwn")
            }
        }
    }, "json")
}
function repositionRect(c, a) {
    var b = 16;
    var d = 0;
    if (c.y < 12) {
        if (a >= 0) {
            d = b
        }
    } else {
        if (c.y > 28) {
            if (a < 0) {
                d = -b
            }
        } else {
            d = a > 0 ? b : -b
        }
    }
    return d
}
function checkOverlappingRects(c, a) {
    if (a == null || a.length == 0) {
        return
    }
    var b = 0;
    c.X2 = c.x + c.width;
    c.Y2 = c.y + c.height;
    $.each(a, function (d, e) {
        if (c.name != e.name) {
            e.X2 = e.x + e.width;
            e.Y2 = e.y + e.height;
            if (c.x < e.X2 && c.X2 > e.x && c.y < e.Y2 && c.Y2 > e.y) {
                b = mks_last_values[c.name] > mks_last_values[e.name] ? -1 : 1
            }
        }
    });
    return b
}
function BB_DrawLabels() {
    if (this.options.dataLabels.enabled) {
        var f = this,
            p, n, e = f.data,
            q = f.options.dataLabels,
            m, i = f.dataLabelsGroup,
            k = f.chart,
            b = k.inverted,
            d = f.type,
            c;
        var g = "highcharts-";
        var j = "visible";
        var a = "hidden";
        var h = Highcharts.pick;
        var o = Highcharts.each;
        if (!i) {
            i = f.dataLabelsGroup = k.renderer.g(g + "data-labels").attr({
                visibility: f.visible ? j : a,
                zIndex: 5
            }).translate(k.plotLeft, k.plotTop).add()
        }
        f.dataLabelsGroup.empty();
        c = q.color;
        if (c == "auto") {
            c = null
        }
        q.style.color = h(c, f.color);
        q.backgroundColor = f.color;
        o(e, function (J, L) {
            var w = J.barX,
                y = w && w + J.barW / 2 || J.plotX || -999,
                v = h(J.plotY, -999),
                r = J.dataLabel,
                K = q.align;
            var P = true;
            P = (e.length - 1 == L);
            m = q.formatter.call({
                x: J.x,
                y: J.y,
                series: f,
                point: J,
                percentage: J.percentage,
                total: J.total || J.stackTotal
            });
            p = (b ? k.plotWidth - v : y) + q.x;
            n = (b ? k.plotHeight - y : v) + q.y;
            if (r) {
                r.animate({
                    x: p,
                    y: n
                })
            } else {
                if (P) {
                    var H = 0;
                    var t = 0;
                    var Q = 0;
                    var E = 0;
                    var O = f.name;
                    var C = BLOOMBERG.global_var.display_percent_change_on_mksnap_chart_labels;
                    if (C == true) {
                        var D = (J.y > 0 ? "+" : "");
                        var F = "#symbol_" + getTickerSymbol(f.name).replace(":", "_") + " .value_change";
                        var s = $(F);
                        if (s.html() != null) {
                            var M = $(F).html().strip()
                        }
                        if (M == null) {
                            O = f.name + " " + D + J.y + "%"
                        } else {
                            O = f.name + " " + M
                        }
                        if ($("#market_snapshot_deluxe").hasClass("more_data_open")) {
                            O = f.name
                        }
                    }
                    var G = $.textMetrics(O, $.normalNames(q.style));
                    var u = Math.floor(p);
                    var z = new Object();
                    z.x = u + 7;
                    z.y = n;
                    z.width = G.width;
                    z.height = 14;
                    z.name = f.name;
                    var A = 0;
                    var B = checkOverlappingRects(z, allRects);
                    if (B != 0) {
                        A = repositionRect(z, B);
                        z.y += A;
                        attribs = {
                            "stroke-width": 1,
                            zIndex: 2,
                            fill: "none",
                            stroke: "#666"
                        };
                        attribs.dashstyle = "dot";
                        var I = k.renderer.path(["M", u, n + 6, "L", u, n + 6, z.x - (z.height / 2), z.y + (z.height / 2)]).attr(attribs).add(i)
                    }
                    k.renderer.g("tooltip").attr({
                        zIndex: 8
                    }).add(i);
                    k.renderer.symbol("triangle-left-simple", z.x, z.y, z.height, 7).attr({
                        fill: q.backgroundColor,
                        "stroke-width": Q
                    }).add(i).shadow(false);
                    var N = "series_rect";
                    k.renderer.rect(z.x, z.y, z.width, z.height, t, Q).attr({
                        fill: q.backgroundColor,
                        "stroke-width": Q
                    }).add(i).shadow(false);
                    allRects[f.name] = z;
                    k.renderer.text(O, u + 8, n + 11 + A).attr({
                        zIndex: 1
                    }).css(q.style).add(i)
                }
            }
            if (b && !q.y) {
                r.attr({
                    y: n + parseInt(r.styles.lineHeight) * 0.9 - r.getBBox().height / 2
                })
            }
        })
    }
}
/*
 Highcharts JS v2.1.2 (2011-01-12)

 (c) 2009-2010 Torstein H?nsi

 License: www.highcharts.com/license
*/
(function () {
    function aQ(y, t) {
        y || (y = {});
        for (var L in t) {
            y[L] = t[L]
        }
        return y
    }
    function aa(y, t) {
        return parseInt(y, t || 10)
    }
    function aw(t) {
        return typeof t == "string"
    }
    function Z(t) {
        return typeof t == "object"
    }
    function am(t) {
        return typeof t == "number"
    }
    function aM(y, t) {
        for (var L = y.length; L--;) {
            if (y[L] == t) {
                y.splice(L, 1);
                break
            }
        }
    }
    function an(t) {
        return t !== J && t !== null
    }
    function d(y, t, ab) {
        var V, L;
        if (aw(t)) {
            if (an(ab)) {
                y.setAttribute(t, ab)
            } else {
                if (y && y.getAttribute) {
                    L = y.getAttribute(t)
                }
            }
        } else {
            if (an(t) && Z(t)) {
                for (V in t) {
                    y.setAttribute(V, t[V])
                }
            }
        }
        return L
    }
    function at(t) {
        if (!t || t.constructor != Array) {
            t = [t]
        }
        return t
    }
    function N() {
        var y = arguments,
            t, V, L = y.length;
        for (t = 0; t < L; t++) {
            V = y[t];
            if (typeof V !== "undefined" && V !== null) {
                return V
            }
        }
    }
    function ah(y) {
        var t = "",
            L;
        for (L in y) {
            t += a0(L) + ":" + y[L] + ";"
        }
        return t
    }
    function p(y, t) {
        if (a1) {
            if (t && t.opacity !== J) {
                t.filter = "alpha(opacity=" + t.opacity * 100 + ")"
            }
        }
        aQ(y.style, t)
    }
    function h(y, t, ab, V, L) {
        y = aE.createElement(y);
        t && aQ(y, t);
        L && p(y, {
            padding: 0,
            border: aO,
            margin: 0
        });
        ab && p(y, ab);
        V && V.appendChild(y);
        return y
    }
    function F(y, t) {
        aI = N(y, t.animation)
    }
    function aH() {
        var t = u.global.useUTC;
        ap = t ? Date.UTC : function (y, bb, ad, ab, V, L) {
            return (new Date(y, bb, N(ad, 1), N(ab, 0), N(V, 0), N(L, 0))).getTime()
        };
        av = t ? "getUTCMinutes" : "getMinutes";
        aF = t ? "getUTCHours" : "getHours";
        al = t ? "getUTCDay" : "getDay";
        X = t ? "getUTCDate" : "getDate";
        U = t ? "getUTCMonth" : "getMonth";
        E = t ? "getUTCFullYear" : "getFullYear";
        ao = t ? "setUTCMinutes" : "setMinutes";
        T = t ? "setUTCHours" : "setHours";
        R = t ? "setUTCDate" : "setDate";
        D = t ? "setUTCMonth" : "setMonth";
        i = t ? "setUTCFullYear" : "setFullYear"
    }
    function k(t) {
        a6 || (a6 = h(o));
        t && a6.appendChild(t);
        a6.innerHTML = ""
    }
    function r(y, t) {
        var L = function () {};
        L.prototype = new y;
        aQ(L.prototype, t);
        return L
    }
    function a3(y, t, bb, ad) {
        var ab = u.lang;
        y = y;
        var V = isNaN(t = aG(t)) ? 2 : t;
        t = bb === undefined ? ab.decimalPoint : bb;
        ad = ad === undefined ? ab.thousandsSep : ad;
        ab = y < 0 ? "-" : "";
        bb = aa(y = aG(+y || 0).toFixed(V)) + "";
        var L = (L = bb.length) > 3 ? L % 3 : 0;
        return ab + (L ? bb.substr(0, L) + ad : "") + bb.substr(L).replace(/(\d{3})(?=\d)/g, "$1" + ad) + (V ? t + aG(y - bb).toFixed(V).slice(2) : "")
    }
    function aN() {}
    function aL(bK, bI) {
        function bH(dm, dq) {
            function db(da, dc) {
                this.pos = da;
                this.minor = dc;
                this.isNew = true;
                dc || this.addLabel()
            }
            function dd(da) {
                if (da) {
                    this.options = da;
                    this.id = da.id
                }
                return this
            }
            function cD() {
                var da = [],
                    dw = [],
                    dc;
                dp = de = null;
                ct = [];
                P(cl, function (dB) {
                    dc = false;
                    P(["xAxis", "yAxis"], function (dD) {
                        if (dB.isCartesian && (dD == "xAxis" && cs || dD == "yAxis" && !cs) && (dB.options[dD] == dq.index || dB.options[dD] === J && dq.index === 0)) {
                            dB[dD] = dh;
                            ct.push(dB);
                            dc = true
                        }
                    });
                    if (!dB.visible && bt.ignoreHiddenSeries) {
                        dc = false
                    }
                    if (dc) {
                        var dx, dC, dy, dA, dz;
                        if (!cs) {
                            dx = dB.options.stacking;
                            cz = dx == "percent";
                            if (dx) {
                                dA = dB.type + N(dB.options.stack, "");
                                dz = "-" + dA;
                                dB.stackKey = dA;
                                dC = da[dA] || [];
                                da[dA] = dC;
                                dy = dw[dz] || [];
                                dw[dz] = dy
                            }
                            if (cz) {
                                dp = 0;
                                de = 99
                            }
                        }
                        if (dB.isCartesian) {
                            P(dB.data, function (dE) {
                                var dH = dE.x,
                                    dG = dE.y,
                                    dD = dG < 0,
                                    dF = dD ? dy : dC;
                                dD = dD ? dz : dA;
                                if (dp === null) {
                                    dp = de = dE[cJ]
                                }
                                if (cs) {
                                    if (dH > de) {
                                        de = dH
                                    } else {
                                        if (dH < dp) {
                                            dp = dH
                                        }
                                    }
                                } else {
                                    if (an(dG)) {
                                        if (dx) {
                                            dF[dH] = an(dF[dH]) ? dF[dH] + dG : dG
                                        }
                                        dG = dF ? dF[dH] : dG;
                                        dE = N(dE.low, dG);
                                        if (!cz) {
                                            if (dG > de) {
                                                de = dG
                                            } else {
                                                if (dE < dp) {
                                                    dp = dE
                                                }
                                            }
                                        }
                                        if (dx) {
                                            c8[dD] || (c8[dD] = {});
                                            c8[dD][dH] = {
                                                total: dG,
                                                cum: dG
                                            }
                                        }
                                    }
                                }
                            });
                            if (/(area|column|bar)/.test(dB.type) && !cs) {
                                if (dp >= 0) {
                                    dp = 0;
                                    cw = true
                                } else {
                                    if (de < 0) {
                                        de = 0;
                                        dj = true
                                    }
                                }
                            }
                        }
                    }
                })
            }
            function cS(da, dw) {
                var dc;
                dg = dw ? 1 : aV.pow(10, ba(aV.log(da) / aV.LN10));
                dc = da / dg;
                if (!dw) {
                    dw = [1, 2, 2.5, 5, 10];
                    if (dq.allowDecimals === false) {
                        if (dg == 1) {
                            dw = [1, 2, 5, 10]
                        } else {
                            if (dg <= 0.1) {
                                dw = [1 / dg]
                            }
                        }
                    }
                }
                for (var dx = 0; dx < dw.length; dx++) {
                    da = dw[dx];
                    if (dc <= (dw[dx] + (dw[dx + 1] || dw[dx])) / 2) {
                        break
                    }
                }
                da *= dg;
                return da
            }
            function cH(da) {
                var dc;
                dc = da;
                if (an(dg)) {
                    dc = (dg < 1 ? aj(1 / dg) : 1) * 10;
                    dc = aj(da * dc) / dc
                }
                return dc
            }
            function cR() {
                var dE, dy, dc, dA, dD = dq.tickInterval,
                    dz = dq.tickPixelInterval;
                dE = dq.maxZoom || (cs ? au(dm.smallestInterval * 5, de - dp) : null);
                cO = cE ? bW : cp;
                if (c1) {
                    dc = dm[cs ? "xAxis" : "yAxis"][dq.linkedTo];
                    dA = dc.getExtremes();
                    cI = N(dA.min, dA.dataMin);
                    cB = N(dA.max, dA.dataMax)
                } else {
                    cI = N(cu, dq.min, dp);
                    cB = N(dn, dq.max, de)
                }
                if (cB - cI < dE) {
                    dA = (dE - cB + cI) / 2;
                    cI = a8(cI - dA, N(dq.min, cI - dA), dp);
                    cB = au(cI + dE, N(dq.max, cI + dE), de)
                }
                if (!dt && !cz && !c1 && an(cI) && an(cB)) {
                    dE = cB - cI || 1;
                    if (!an(dq.min) && !an(cu) && c4 && (dp < 0 || !cw)) {
                        cI -= dE * c4
                    }
                    if (!an(dq.max) && !an(dn) && cW && (de > 0 || !dj)) {
                        cB += dE * cW
                    }
                }
                cK = cI == cB ? 1 : c1 && !dD && dz == dc.options.tickPixelInterval ? dc.tickInterval : N(dD, dt ? 1 : (cB - cI) * dz / cO);
                if (!cF && !an(dq.tickInterval)) {
                    cK = cS(cK)
                }
                dh.tickInterval = cK;
                dk = dq.minorTickInterval === "auto" && cK ? cK / 5 : dq.minorTickInterval;
                if (cF) {
                    cT = [];
                    dD = u.global.useUTC;
                    var dG = 1000 / Y,
                        dx = 60000 / Y,
                        dC = 3600000 / Y;
                    dz = 86400000 / Y;
                    dE = 604800000 / Y;
                    dA = 2592000000 / Y;
                    var dH = 31556952000 / Y,
                        da = [
                            ["second", dG, [1, 2, 5, 10, 15, 30]],
                            ["minute", dx, [1, 2, 5, 10, 15, 30]],
                            ["hour", dC, [1, 2, 3, 4, 6, 8, 12]],
                            ["day", dz, [1, 2]],
                            ["week", dE, [1, 2]],
                            ["month", dA, [1, 2, 3, 4, 6]],
                            ["year", dH, null]
                        ],
                        dB = da[6],
                        dF = dB[1],
                        dw = dB[2];
                    for (dc = 0; dc < da.length; dc++) {
                        dB = da[dc];
                        dF = dB[1];
                        dw = dB[2];
                        if (da[dc + 1]) {
                            if (cK <= (dF * dw[dw.length - 1] + da[dc + 1][1]) / 2) {
                                break
                            }
                        }
                    }
                    if (dF == dH && cK < 5 * dF) {
                        dw = [1, 2, 5]
                    }
                    da = cS(cK / dF, dw);
                    dw = new Date(cI * Y);
                    dw.setMilliseconds(0);
                    if (dF >= dG) {
                        dw.setSeconds(dF >= dx ? 0 : da * ba(dw.getSeconds() / da))
                    }
                    if (dF >= dx) {
                        dw[ao](dF >= dC ? 0 : da * ba(dw[av]() / da))
                    }
                    if (dF >= dC) {
                        dw[T](dF >= dz ? 0 : da * ba(dw[aF]() / da))
                    }
                    if (dF >= dz) {
                        dw[R](dF >= dA ? 1 : da * ba(dw[X]() / da))
                    }
                    if (dF >= dA) {
                        dw[D](dF >= dH ? 0 : da * ba(dw[U]() / da));
                        dy = dw[E]()
                    }
                    if (dF >= dH) {
                        dy -= dy % da;
                        dw[i](dy)
                    }
                    dF == dE && dw[R](dw[X]() - dw[al]() + dq.startOfWeek);
                    dc = 1;
                    dy = dw[E]();
                    dG = dw.getTime() / Y;
                    dx = dw[U]();
                    for (dC = dw[X](); dG < cB && dc < bW;) {
                        cT.push(dG);
                        if (dF == dH) {
                            dG = ap(dy + dc * da, 0) / Y
                        } else {
                            if (dF == dA) {
                                dG = ap(dy, dx + dc * da) / Y
                            } else {
                                if (!dD && (dF == dz || dF == dE)) {
                                    dG = ap(dy, dx, dC + dc * da * (dF == dz ? 1 : 7))
                                } else {
                                    dG += dF * da
                                }
                            }
                        }
                        dc++
                    }
                    cT.push(dG);
                    cY = dq.dateTimeLabelFormats[dB[0]]
                } else {
                    dc = ba(cI / cK) * cK;
                    dy = A(cB / cK) * cK;
                    cT = [];
                    for (dc = cH(dc); dc <= dy;) {
                        cT.push(dc);
                        dc = cH(dc + cK)
                    }
                }
                if (!c1) {
                    if (dt || cs && dm.hasColumn) {
                        dy = (dt ? 1 : cK) * 0.5;
                        if (dt || !an(N(dq.min, cu))) {
                            cI -= dy
                        }
                        if (dt || !an(N(dq.max, dn))) {
                            cB += dy
                        }
                    }
                    dy = cT[0];
                    dc = cT[cT.length - 1];
                    if (dq.startOnTick) {
                        cI = dy
                    } else {
                        cI > dy && cT.shift()
                    }
                    if (dq.endOnTick) {
                        cB = dc
                    } else {
                        cB < dc && cT.pop()
                    }
                    bl || (bl = {
                        x: 0,
                        y: 0
                    });
                    if (!cF && cT.length > bl[cJ]) {
                        bl[cJ] = cT.length
                    }
                }
            }
            function di() {
                var da, dc;
                c9 = cI;
                c6 = cB;
                cD();
                cR();
                cr = cN;
                cN = cO / (cB - cI || 1);
                if (!cs) {
                    for (da in c8) {
                        for (dc in c8[da]) {
                            c8[da][dc].cum = c8[da][dc].total
                        }
                    }
                }
                if (!dh.isDirty) {
                    dh.isDirty = cI != c9 || cB != c6
                }
            }
            function cU(da) {
                da = (new dd(da)).render();
                cG.push(da);
                return da
            }
            function ds() {
                var da = dq.title,
                    dy = dq.alternateGridColor,
                    dx = dq.lineWidth,
                    dz, dc, dA = dm.hasRendered,
                    dw = dA && an(c9) && !isNaN(c9);
                dz = ct.length && an(cI) && an(cB);
                cO = cE ? bW : cp;
                cN = cO / (cB - cI || 1);
                cX = cE ? bQ : bn;
                if (dz || c1) {
                    if (dk && !dt) {
                        for (dz = cI + (cT[0] - cI) % dk; dz <= cB; dz += dk) {
                            cL[dz] || (cL[dz] = new db(dz, true));
                            dw && cL[dz].isNew && cL[dz].render(null, true);
                            cL[dz].isActive = true;
                            cL[dz].render()
                        }
                    }
                    P(cT, function (dC, dB) {
                        if (!c1 || dC >= cI && dC <= cB) {
                            dw && cv[dC].isNew && cv[dC].render(dB, true);
                            cv[dC].isActive = true;
                            cv[dC].render(dB)
                        }
                    });
                    dy && P(cT, function (dC, dB) {
                        if (dB % 2 === 0 && dC < cB) {
                            cP[dC] || (cP[dC] = new dd);
                            cP[dC].options = {
                                from: dC,
                                to: cT[dB + 1] !== J ? cT[dB + 1] : cB,
                                color: dy
                            };
                            cP[dC].render();
                            cP[dC].isActive = true
                        }
                    });
                    dA || P((dq.plotLines || []).concat(dq.plotBands || []), function (dB) {
                        cG.push((new dd(dB)).render())
                    })
                }
                P([cv, cL, cP], function (dC) {
                    for (var dB in dC) {
                        if (dC[dB].isActive) {
                            dC[dB].isActive = false
                        } else {
                            dC[dB].destroy();
                            delete dC[dB]
                        }
                    }
                });
                if (dx) {
                    dz = bQ + (c2 ? bW : 0) + cA;
                    dc = b6 - bn - (c2 ? cp : 0) + cA;
                    dz = cd.crispLine([O, cE ? bQ : dz, cE ? dc : ca, aK, cE ? bP - b7 : dz, cE ? dc : b6 - bn], dx);
                    if (cV) {
                        cV.animate({
                            d: dz
                        })
                    } else {
                        cV = cd.path(dz).attr({
                            stroke: dq.lineColor,
                            "stroke-width": dx,
                            zIndex: 7
                        }).add()
                    }
                }
                if (dh.axisTitle) {
                    dz = cE ? bQ : ca;
                    dx = aa(da.style.fontSize || 12);
                    dz = {
                        low: dz + (cE ? 0 : cO),
                        middle: dz + cO / 2,
                        high: dz + (cE ? cO : 0)
                    }[da.align];
                    dx = (cE ? ca + cp : bQ) + (cE ? 1 : -1) * (c2 ? -1 : 1) * du + (cM == 2 ? dx : 0);
                    dh.axisTitle[dA ? "animate" : "attr"]({
                        x: cE ? dz : dx + (c2 ? bW : 0) + cA + (da.x || 0),
                        y: cE ? dx - (c2 ? cp : 0) + cA : dz + (da.y || 0)
                    })
                }
                dh.isDirty = false
            }
            function cZ(da) {
                for (var dc = 0; dc < cG.length; dc++) {
                    cG[dc].id == da && cG[dc].destroy()
                }
            }
            var cs = dq.isX,
                c2 = dq.opposite,
                cE = ad ? !cs : cs,
                cM = cE ? c2 ? 0 : 2 : c2 ? 1 : 3,
                c8 = {};
            dq = s(cs ? n : aZ, [K, v, m, e][cM], dq);
            var dh = this,
                cF = dq.type == "datetime",
                cA = dq.offset || 0,
                cJ = cs ? "x" : "y",
                cO, cN, cr, cX = cE ? bQ : bn,
                cy, cC, df, cx, cV, dp, de, ct, cu, dn, cB = null,
                cI = null,
                c9, c6, c4 = dq.minPadding,
                cW = dq.maxPadding,
                c1 = an(dq.linkedTo),
                cw, dj, cz, dl = dq.events,
                cQ, cG = [],
                cK, dk, dg, cT, cv = {},
                cL = {},
                cP = {},
                dv, c7, du, cY, dt = dq.categories,
                c3 = dq.labels.formatter ||
            function () {
                var da = this.value;
                return cY ? a9(cY, da) : cK % 1000000 === 0 ? da / 1000000 + "M" : cK % 1000 === 0 ? da / 1000 + "k" : !dt && da >= 1000 ? a3(da, 0) : da
            }, c0 = cE && dq.labels.staggerLines, dr = dq.reversed, c5 = dt && dq.tickmarkPlacement == "between" ? 0.5 : 0;
            db.prototype = {
                addLabel: function () {
                    var da = this.pos,
                        dx = dq.labels,
                        dw = !(da == cI && !N(dq.showFirstLabel, 1) || da == cB && !N(dq.showLastLabel, 0)),
                        dy, dc = this.label;
                    da = c3.call({
                        isFirst: da == cT[0],
                        isLast: da == cT[cT.length - 1],
                        dateTimeLabelFormat: cY,
                        value: dt && dt[da] ? dt[da] : da
                    });
                    dy = dy && {
                        width: dy - 2 * (dx.padding || 10) + aX
                    };
                    if (dc === J) {
                        this.label = an(da) && dw && dx.enabled ? cd.text(da, 0, 0).attr({
                            align: dx.align,
                            rotation: dx.rotation
                        }).css(aQ(dy, dx.style)).add(df) : null
                    } else {
                        dc && dc.attr({
                            text: da
                        }).css(dy)
                    }
                },
                getLabelSize: function () {
                    var da = this.label;
                    return da ? (this.labelBBox = da.getBBox())[cE ? "height" : "width"] : 0
                },
                render: function (dE, dy) {
                    var dc = !this.minor,
                        dA = this.label,
                        dD = this.pos,
                        dz = dq.labels,
                        dH = this.gridLine,
                        dx = dc ? dq.gridLineWidth : dq.minorGridLineWidth,
                        dC = dc ? dq.gridLineColor : dq.minorGridLineColor,
                        dK = dc ? dq.gridLineDashStyle : dq.minorGridLineDashStyle,
                        da = this.mark,
                        dB = dc ? dq.tickLength : dq.minorTickLength,
                        dF = dc ? dq.tickWidth : dq.minorTickWidth || 0,
                        dw = dc ? dq.tickColor : dq.minorTickColor,
                        dG = dc ? dq.tickPosition : dq.minorTickPosition;
                    dc = dz.step;
                    var dJ = dy && b5 || b6,
                        dI;
                    dI = cE ? cy(dD + c5, null, null, dy) + cX : bQ + cA + (c2 ? (dy && bT || bP) - b7 - bQ : 0);
                    dJ = cE ? dJ - bn + cA - (c2 ? cp : 0) : dJ - cy(dD + c5, null, null, dy) - cX;
                    if (dx) {
                        dD = cC(dD + c5, dx, dy);
                        if (dH === J) {
                            dH = {
                                stroke: dC,
                                "stroke-width": dx
                            };
                            if (dK) {
                                dH.dashstyle = dK
                            }
                            this.gridLine = dH = dx ? cd.path(dD).attr(dH).add(cx) : null
                        }
                        dH && dD && dH.animate({
                            d: dD
                        })
                    }
                    if (dF) {
                        if (dG == "inside") {
                            dB = -dB
                        }
                        if (c2) {
                            dB = -dB
                        }
                        dx = cd.crispLine([O, dI, dJ, aK, dI + (cE ? 0 : -dB), dJ + (cE ? dB : 0)], dF);
                        if (da) {
                            da.animate({
                                d: dx
                            })
                        } else {
                            this.mark = cd.path(dx).attr({
                                stroke: dw,
                                "stroke-width": dF
                            }).add(df)
                        }
                    }
                    if (dA) {
                        dI = dI + dz.x - (c5 && cE ? c5 * cN * (dr ? -1 : 1) : 0);
                        dJ = dJ + dz.y - (c5 && !cE ? c5 * cN * (dr ? 1 : -1) : 0);
                        an(dz.y) || (dJ += parseInt(dA.styles.lineHeight) * 0.9 - dA.getBBox().height / 2);
                        if (c0) {
                            dJ += dE % c0 * 16
                        }
                        if (dc) {
                            dA[dE % dc ? "hide" : "show"]()
                        }
                        dA[this.isNew ? "attr" : "animate"]({
                            x: dI,
                            y: dJ
                        })
                    }
                    this.isNew = false
                },
                destroy: function () {
                    for (var da in this) {
                        this[da] && this[da].destroy && this[da].destroy()
                    }
                }
            };
            dd.prototype = {
                render: function () {
                    var dE = this,
                        dy = dE.options,
                        dc = dy.label,
                        dA = dE.label,
                        dD = dy.width,
                        dz = dy.to,
                        dH, dx = dy.from,
                        dC = dy.dashStyle,
                        dI = dE.svgElem,
                        da = [],
                        dB, dF, dw = dy.color;
                    dF = dy.zIndex;
                    var dG = dy.events;
                    if (dD) {
                        da = cC(dy.value, dD);
                        dy = {
                            stroke: dw,
                            "stroke-width": dD
                        };
                        if (dC) {
                            dy.dashstyle = dC
                        }
                    } else {
                        if (an(dx) && an(dz)) {
                            dx = a8(dx, cI);
                            dz = au(dz, cB);
                            dH = cC(dz);
                            if ((da = cC(dx)) && dH) {
                                da.push(dH[4], dH[5], dH[1], dH[2])
                            } else {
                                da = null
                            }
                            dy = {
                                fill: dw
                            }
                        } else {
                            return
                        }
                    }
                    if (an(dF)) {
                        dy.zIndex = dF
                    }
                    if (dI) {
                        if (da) {
                            dI.animate({
                                d: da
                            }, null, dI.onGetPath)
                        } else {
                            dI.hide();
                            dI.onGetPath = function () {
                                dI.show()
                            }
                        }
                    } else {
                        if (da && da.length) {
                            dE.svgElem = dI = cd.path(da).attr(dy).add();
                            if (dG) {
                                dC = function (dJ) {
                                    dI.on(dJ, function (dK) {
                                        dG[dJ].apply(dE, [dK])
                                    })
                                };
                                for (dB in dG) {
                                    dC(dB)
                                }
                            }
                        }
                    }
                    if (dc && an(dc.text) && da && da.length && bW > 0 && cp > 0) {
                        dc = s({
                            align: cE && dH && "center",
                            x: cE ? !dH && 4 : 10,
                            verticalAlign: !cE && dH && "middle",
                            y: cE ? dH ? 16 : 10 : dH ? 6 : -4,
                            rotation: cE && !dH && 90
                        }, dc);
                        if (!dA) {
                            dE.label = dA = cd.text(dc.text, 0, 0).attr({
                                align: dc.textAlign || dc.align,
                                rotation: dc.rotation,
                                zIndex: dF
                            }).css(dc.style).add()
                        }
                        dH = [da[1], da[4], da[6] || da[1]];
                        da = [da[2], da[5], da[7] || da[2]];
                        dB = au.apply(aV, dH);
                        dF = au.apply(aV, da);
                        dA.align(dc, false, {
                            x: dB,
                            y: dF,
                            width: a8.apply(aV, dH) - dB,
                            height: a8.apply(aV, da) - dF
                        });
                        dA.show()
                    } else {
                        dA && dA.hide()
                    }
                    return dE
                },
                destroy: function () {
                    for (var da in this) {
                        this[da] && this[da].destroy && this[da].destroy();
                        delete this[da]
                    }
                    aM(cG, this)
                }
            };
            cy = function (da, dy, dx, dz) {
                var dc = 1,
                    dA = 0,
                    dw = dz ? cr : cN;
                dz = dz ? c9 : cI;
                dw || (dw = cN);
                if (dx) {
                    dc *= -1;
                    dA = cO
                }
                if (dr) {
                    dc *= -1;
                    dA -= dc * cO
                }
                if (dy) {
                    if (dr) {
                        da = cO - da
                    }
                    da = da / dw + dz
                } else {
                    da = dc * (da - dz) * dw + dA
                }
                return da
            };
            cC = function (dB, dw, da) {
                var dy, dA, dx;
                dB = cy(dB, null, null, da);
                var dC = da && b5 || b6,
                    dc = da && bT || bP,
                    dz;
                da = dA = aj(dB + cX);
                dy = dx = aj(dC - dB - cX);
                if (isNaN(dB)) {
                    dz = true
                } else {
                    if (cE) {
                        dy = ca;
                        dx = dC - bn;
                        if (da < bQ || da > bQ + bW) {
                            dz = true
                        }
                    } else {
                        da = bQ;
                        dA = dc - b7;
                        if (dy < ca || dy > ca + cp) {
                            dz = true
                        }
                    }
                }
                return dz ? null : cd.crispLine([O, da, dy, aK, dA, dx], dw || 0)
            };
            if (ad && cs && dr === J) {
                dr = true
            }
            aQ(dh, {
                addPlotBand: cU,
                addPlotLine: cU,
                adjustTickAmount: function () {
                    if (bl && !cF && !dt && !c1) {
                        var da = dv,
                            dc = cT.length;
                        dv = bl[cJ];
                        if (dc < dv) {
                            for (; cT.length < dv;) {
                                cT.push(cH(cT[cT.length - 1] + cK))
                            }
                            cN *= (dc - 1) / (dv - 1);
                            cB = cT[cT.length - 1]
                        }
                        if (an(da) && dv != da) {
                            dh.isDirty = true
                        }
                    }
                },
                categories: dt,
                getExtremes: function () {
                    return {
                        min: cI,
                        max: cB,
                        dataMin: dp,
                        dataMax: de
                    }
                },
                getPlotLinePath: cC,
                getThreshold: function (da) {
                    if (cI > da) {
                        da = cI
                    } else {
                        if (cB < da) {
                            da = cB
                        }
                    }
                    return cy(da, 0, 1)
                },
                isXAxis: cs,
                options: dq,
                plotLinesAndBands: cG,
                getOffset: function () {
                    var da = ct.length && an(cI) && an(cB),
                        dy = 0,
                        dx = 0,
                        dz = dq.title,
                        dc = dq.labels,
                        dA = [-1, 1, 1, -1][cM];
                    if (!df) {
                        df = cd.g("axis").attr({
                            zIndex: 7
                        }).add();
                        cx = cd.g("grid").attr({
                            zIndex: 1
                        }).add()
                    }
                    c7 = 0;
                    if (da || c1) {
                        P(cT, function (dB) {
                            if (cv[dB]) {
                                cv[dB].addLabel()
                            } else {
                                cv[dB] = new db(dB)
                            }
                            if (cM === 0 || cM == 2 || {
                                1: "left",
                                3: "right"
                            }[cM] == dc.align) {
                                c7 = a8(cv[dB].getLabelSize(), c7)
                            }
                        });
                        if (c0) {
                            c7 += (c0 - 1) * 16
                        }
                    } else {
                        for (var dw in cv) {
                            cv[dw].destroy();
                            delete cv[dw]
                        }
                    }
                    if (dz && dz.text) {
                        if (!dh.axisTitle) {
                            dh.axisTitle = cd.text(dz.text, 0, 0).attr({
                                zIndex: 7,
                                rotation: dz.rotation || 0,
                                align: dz.textAlign || {
                                    low: "left",
                                    middle: "center",
                                    high: "right"
                                }[dz.align]
                            }).css(dz.style).add()
                        }
                        dy = dh.axisTitle.getBBox()[cE ? "height" : "width"];
                        dx = N(dz.margin, cE ? 5 : 10)
                    }
                    cA = dA * (dq.offset || br[cM]);
                    du = c7 + (cM != 2 && c7 && dA * dq.labels[cE ? "y" : "x"]) + dx;
                    br[cM] = a8(br[cM], du + dy + dA * cA)
                },
                render: ds,
                setCategories: function (da, dc) {
                    dh.categories = dt = da;
                    P(ct, function (dw) {
                        dw.translate();
                        dw.setTooltipPoints(true)
                    });
                    dh.isDirty = true;
                    N(dc, true) && dm.redraw()
                },
                setExtremes: function (da, dw, dc, dx) {
                    F(dx, dm);
                    dc = N(dc, true);
                    ac(dh, "setExtremes", {
                        min: da,
                        max: dw
                    }, function () {
                        cu = da;
                        dn = dw;
                        dc && dm.redraw()
                    })
                },
                setScale: di,
                setTickPositions: cR,
                translate: cy,
                redraw: function () {
                    cb.resetTracker && cb.resetTracker();
                    ds();
                    P(cG, function (da) {
                        da.render()
                    });
                    P(ct, function (da) {
                        da.isDirty = true
                    })
                },
                removePlotBand: cZ,
                removePlotLine: cZ,
                reversed: dr,
                stacks: c8
            });
            for (cQ in dl) {
                ag(dh, cQ, dl[cQ])
            }
            di()
        }
        function bG() {
            var cr = {};
            return {
                add: function (cu, cs, ct, cv) {
                    if (!cr[cu]) {
                        cs = cd.text(cs, 0, 0).css(bK.toolbar.itemStyle).align({
                            align: "right",
                            x: -b7 - 20,
                            y: ca + 30
                        }).on("click", cv).attr({
                            align: "right",
                            zIndex: 20
                        }).add();
                        cr[cu] = cs
                    }
                },
                remove: function (cs) {
                    k(cr[cs].element);
                    cr[cs] = null
                }
            }
        }
        function bF(cH) {
            function cI() {
                var cM = this.points || at(this),
                    cP = cM[0].series.xAxis,
                    cO = this.x;
                cP = cP && cP.options.type == "datetime";
                var cL = aw(cO) || cP,
                    cN;
                cN = cL ? ['<span style="font-size: 10px">', cP ? a9("%A, %b %e, %Y", cO) : cO, "</span><br/>"] : [];
                P(cM, function (cQ) {
                    cN.push(cQ.point.tooltipFormatter(cL))
                });
                return cN.join("")
            }
            function cA(cL, cM) {
                cD = cz ? cL : (2 * cD + cL) / 3;
                cG = cz ? cM : (cG + cM) / 2;
                cF.translate(cD, cG);
                bw = aG(cL - cD) > 1 || aG(cM - cG) > 1 ?
                function () {
                    cA(cL, cM)
                } : null
            }
            function cC() {
                if (!cz) {
                    var cL = bu.hoverPoints;
                    cF.hide();
                    P(cJ, function (cM) {
                        cM && cM.hide()
                    });
                    cL && P(cL, function (cM) {
                        cM.setState()
                    });
                    bu.hoverPoints = null;
                    cz = true
                }
            }
            var cv, cK = cH.borderWidth,
                cy = cH.crosshairs,
                cJ = [],
                cs = cH.style,
                cr = cH.shared,
                ct = aa(cs.padding),
                cB = cK + ct,
                cz = true,
                cE, cw, cD = 0,
                cG = 0;
            cs.padding = 0;
            var cF = cd.g("tooltip").attr({
                zIndex: 8
            }).add(),
                cx = cd.rect(cB, cB, 0, 0, cH.borderRadius, cK).attr({
                    fill: cH.backgroundColor,
                    "stroke-width": cK
                }).add(cF).shadow(cH.shadow),
                cu = cd.text("", ct + cB, aa(cs.fontSize) + ct + cB).attr({
                    zIndex: 1
                }).css(cs).add(cF);
            cF.hide();
            return {
                shared: cr,
                refresh: function (cS) {
                    var cM, cT, cQ, cR = 0,
                        cP = {},
                        cO = [];
                    cQ = cS.tooltipPos;
                    cM = cH.formatter || cI;
                    cP = bu.hoverPoints;
                    var cL = function (cU) {
                            return {
                                series: cU.series,
                                point: cU,
                                x: cU.category,
                                y: cU.y,
                                percentage: cU.percentage,
                                total: cU.total || cU.stackTotal
                            }
                        };
                    if (cr) {
                        cP && P(cP, function (cU) {
                            cU.setState()
                        });
                        bu.hoverPoints = cS;
                        P(cS, function (cU) {
                            cU.setState(c);
                            cR += cU.plotY;
                            cO.push(cL(cU))
                        });
                        cT = cS[0].plotX;
                        cR = aj(cR) / cS.length;
                        cP = {
                            x: cS[0].category
                        };
                        cP.points = cO;
                        cS = cS[0]
                    } else {
                        cP = cL(cS)
                    }
                    cP = cM.call(cP);
                    cv = cS.series;
                    cT = cr ? cT : cS.plotX;
                    cR = cr ? cR : cS.plotY;
                    cM = aj(cQ ? cQ[0] : ad ? bW - cR : cT);
                    cT = aj(cQ ? cQ[1] : ad ? cp - cT : cR);
                    cQ = cr || !cS.series.isCartesian || bU(cM, cT);
                    if (cP === false || !cQ) {
                        cC()
                    } else {
                        if (cz) {
                            cF.show();
                            cz = false
                        }
                        cu.attr({
                            text: cP
                        });
                        cQ = cu.getBBox();
                        cE = cQ.width;
                        cw = cQ.height;
                        cx.attr({
                            width: cE + 2 * ct,
                            height: cw + 2 * ct,
                            stroke: cH.borderColor || cS.color || cv.color || "#606060"
                        });
                        cM = cM - cE + bQ - 25;
                        cT = cT - cw + ca + 10;
                        if (cM < 7) {
                            cM = 7;
                            cT -= 30
                        }
                        if (cT < 5) {
                            cT = 5
                        } else {
                            if (cT + cw > b6) {
                                cT = b6 - cw - 5
                            }
                        }
                        cA(aj(cM - cB), aj(cT - cB))
                    }
                    if (cy) {
                        cy = at(cy);
                        cT = cy.length;
                        for (var cN; cT--;) {
                            if (cy[cT] && (cN = cS.series[cT ? "yAxis" : "xAxis"])) {
                                cM = cN.getPlotLinePath(cS[cT ? "y" : "x"], 1);
                                if (cJ[cT]) {
                                    cJ[cT].attr({
                                        d: cM,
                                        visibility: a2
                                    })
                                } else {
                                    cQ = {
                                        "stroke-width": cy[cT].width || 1,
                                        stroke: cy[cT].color || "#C0C0C0",
                                        zIndex: 2
                                    };
                                    if (cy[cT].dashStyle) {
                                        cQ.dashstyle = cy[cT].dashStyle
                                    }
                                    cJ[cT] = cd.path(cM).attr(cQ).add()
                                }
                            }
                        }
                    }
                },
                hide: cC
            }
        }
        function bE(cs, ct) {
            function cB(cI) {
                var cG;
                cI = cI || aq.event;
                if (!cI.target) {
                    cI.target = cI.srcElement
                }
                cG = cI.touches ? cI.touches.item(0) : cI;
                if (cI.type != "mousemove" || aq.opera) {
                    for (var cH = bN, cJ = {
                        left: cH.offsetLeft,
                        top: cH.offsetTop
                    }; cH = cH.offsetParent;) {
                        cJ.left += cH.offsetLeft;
                        cJ.top += cH.offsetTop;
                        if (cH != aE.body && cH != aE.documentElement) {
                            cJ.left -= cH.scrollLeft;
                            cJ.top -= cH.scrollTop
                        }
                    }
                    bc = cJ
                }
                if (a1) {
                    cI.chartX = cI.x;
                    cI.chartY = cI.y
                } else {
                    if (cG.layerX === J) {
                        cI.chartX = cG.pageX - bc.left;
                        cI.chartY = cG.pageY - bc.top
                    } else {
                        cI.chartX = cI.layerX;
                        cI.chartY = cI.layerY
                    }
                }
                return cI
            }
            function cD(cH) {
                var cG = {
                    xAxis: [],
                    yAxis: []
                };
                P(bi, function (cJ) {
                    var cK = cJ.translate,
                        cI = cJ.isXAxis;
                    cG[cI ? "xAxis" : "yAxis"].push({
                        axis: cJ,
                        value: cK((ad ? !cI : cI) ? cH.chartX - bQ : cp - cH.chartY + ca, true)
                    })
                });
                return cG
            }
            function cu() {
                var cH = cs.hoverSeries,
                    cG = cs.hoverPoint;
                cG && cG.onMouseOut();
                cH && cH.onMouseOut();
                co && co.hide();
                bj = null
            }
            function cE() {
                if (cA) {
                    var cI = {
                        xAxis: [],
                        yAxis: []
                    },
                        cG = cA.getBBox(),
                        cH = cG.x - bQ,
                        cJ = cG.y - ca;
                    if (cr) {
                        P(bi, function (cM) {
                            var cL = cM.translate,
                                cO = cM.isXAxis,
                                cN = ad ? !cO : cO,
                                cK = cL(cN ? cH : cp - cJ - cG.height, true);
                            cL = cL(cN ? cH + cG.width : cp - cJ, true);
                            cI[cO ? "xAxis" : "yAxis"].push({
                                axis: cM,
                                min: au(cK, cL),
                                max: a8(cK, cL)
                            })
                        });
                        ac(cs, "selection", cI, V)
                    }
                    cA = cA.destroy()
                }
                cs.mouseIsDown = cm = cr = false;
                aJ(aE, a7 ? "touchend" : "mouseup", cE)
            }
            var cy, cF, cr, cA, cC = bt.zoomType,
                cz = /x/.test(cC),
                cw = /y/.test(cC),
                cx = cz && !ad || cw && ad,
                cv = cw && !ad || cz && ad;
            bM = function () {
                if (bq) {
                    bq.translate(bQ, ca);
                    ad && bq.attr({
                        width: cs.plotWidth,
                        height: cs.plotHeight
                    }).invert()
                } else {
                    cs.trackerGroup = bq = cd.g("tracker").attr({
                        zIndex: 9
                    }).add()
                }
            };
            bM();
            if (ct.enabled) {
                cs.tooltip = co = bF(ct)
            }(function () {
                var cH = true;
                bN.onmousedown = function (cI) {
                    cI = cB(cI);
                    cs.mouseIsDown = cm = true;
                    cy = cI.chartX;
                    cF = cI.chartY;
                    ag(aE, a7 ? "touchend" : "mouseup", cE)
                };
                var cG = function (cQ) {
                        if (!(cQ && cQ.touches && cQ.touches.length > 1)) {
                            cQ = cB(cQ);
                            if (!a7) {
                                cQ.returnValue = false
                            }
                            var cL = cQ.chartX,
                                cK = cQ.chartY,
                                cO = !bU(cL - bQ, cK - ca);
                            if (a7 && cQ.type == "touchstart") {
                                if (d(cQ.target, "isTracker")) {
                                    cs.runTrackerClick || cQ.preventDefault()
                                } else {
                                    !bY && !cO && cQ.preventDefault()
                                }
                            }
                            if (cO) {
                                cH || cu();
                                if (cL < bQ) {
                                    cL = bQ
                                } else {
                                    if (cL > bQ + bW) {
                                        cL = bQ + bW
                                    }
                                }
                                if (cK < ca) {
                                    cK = ca
                                } else {
                                    if (cK > ca + cp) {
                                        cK = ca + cp
                                    }
                                }
                            }
                            if (cm && cQ.type != "touchstart") {
                                if (cr = Math.sqrt(Math.pow(cy - cL, 2) + Math.pow(cF - cK, 2)) > 10) {
                                    if (by && (cz || cw) && bU(cy - bQ, cF - ca)) {
                                        cA || (cA = cd.rect(bQ, ca, cx ? 1 : bW, cv ? 1 : cp, 0).attr({
                                            fill: "rgba(69,114,167,0.25)",
                                            zIndex: 7
                                        }).add())
                                    }
                                    if (cA && cx) {
                                        cL = cL - cy;
                                        cA.attr({
                                            width: aG(cL),
                                            x: (cL > 0 ? 0 : cL) + cy
                                        })
                                    }
                                    if (cA && cv) {
                                        cK = cK - cF;
                                        cA.attr({
                                            height: aG(cK),
                                            y: (cK > 0 ? 0 : cK) + cF
                                        })
                                    }
                                }
                            } else {
                                if (!cO) {
                                    var cI;
                                    cK = cs.hoverPoint;
                                    cL = cs.hoverSeries;
                                    var cP, cM, cN = bP,
                                        cJ = ad ? cQ.chartY : cQ.chartX - bQ;
                                    if (co && ct.shared) {
                                        cI = [];
                                        cP = cl.length;
                                        for (cM = 0; cM < cP; cM++) {
                                            if (cl[cM].visible && cl[cM].tooltipPoints.length) {
                                                cQ = cl[cM].tooltipPoints[cJ];
                                                cQ._dist = aG(cJ - cQ.plotX);
                                                cN = au(cN, cQ._dist);
                                                cI.push(cQ)
                                            }
                                        }
                                        for (cP = cI.length; cP--;) {
                                            cI[cP]._dist > cN && cI.splice(cP, 1)
                                        }
                                        if (cI.length && cI[0].plotX != bj) {
                                            co.refresh(cI);
                                            bj = cI[0].plotX
                                        }
                                    }
                                    if (cL && cL.tracker) {
                                        (cQ = cL.tooltipPoints[cJ]) && cQ != cK && cQ.onMouseOver()
                                    }
                                }
                            }
                            return (cH = cO) || !by
                        }
                    };
                bN.onmousemove = cG;
                ag(bN, "mouseleave", cu);
                bN.ontouchstart = function (cI) {
                    if (cz || cw) {
                        bN.onmousedown(cI)
                    }
                    cG(cI)
                };
                bN.ontouchmove = cG;
                bN.ontouchend = function () {
                    cr && cu()
                };
                bN.onclick = function (cK) {
                    var cL = cs.hoverPoint;
                    cK = cB(cK);
                    cK.cancelBubble = true;
                    if (!cr) {
                        if (cL && d(cK.target, "isTracker")) {
                            var cJ = cL.plotX,
                                cI = cL.plotY;
                            aQ(cL, {
                                pageX: bc.left + bQ + (ad ? bW - cI : cJ),
                                pageY: bc.top + ca + (ad ? cp - cJ : cI)
                            });
                            ac(cL.series, "click", aQ(cK, {
                                point: cL
                            }));
                            cL.firePointEvent("click", cK)
                        } else {
                            aQ(cK, cD(cK));
                            bU(cK.chartX - bQ, cK.chartY - ca) && ac(cs, "click", cK)
                        }
                    }
                    cr = false
                }
            })();
            cg = setInterval(function () {
                bw && bw()
            }, 32);
            aQ(this, {
                zoomX: cz,
                zoomY: cw,
                resetTracker: cu
            })
        }
        function bD(cs) {
            var cu = cs.type || bt.type || bt.defaultSeriesType,
                cr = aR[cu],
                ct = bu.hasRendered;
            if (ct) {
                if (ad && cu == "column") {
                    cr = aR.bar
                } else {
                    if (!ad && cu == "bar") {
                        cr = aR.column
                    }
                }
            }
            cu = new cr;
            cu.init(bu, cs);
            if (!ct && cu.inverted) {
                ad = true
            }
            if (cu.isCartesian) {
                by = cu.isCartesian
            }
            cl.push(cu);
            return cu
        }
        function bB() {
            bt.alignTicks !== false && P(bi, function (cr) {
                cr.adjustTickAmount()
            });
            bl = null
        }
        function bz(cs) {
            var cu = bu.isDirtyLegend,
                cr, ct = bu.isDirtyBox,
                cv = cl.length,
                cw = cv,
                cx = bu.clipRect;
            for (F(cs, bu); cw--;) {
                cs = cl[cw];
                if (cs.isDirty && cs.options.stacking) {
                    cr = true;
                    break
                }
            }
            if (cr) {
                for (cw = cv; cw--;) {
                    cs = cl[cw];
                    if (cs.options.stacking) {
                        cs.isDirty = true
                    }
                }
            }
            P(cl, function (cy) {
                if (cy.isDirty) {
                    cy.cleanData();
                    cy.getSegments();
                    if (cy.options.legendType == "point") {
                        cu = true
                    }
                }
            });
            if (cu && cc.renderLegend) {
                cc.renderLegend();
                bu.isDirtyLegend = false
            }
            if (by) {
                if (!bg) {
                    bl = null;
                    P(bi, function (cy) {
                        cy.setScale()
                    })
                }
                bB();
                cf();
                P(bi, function (cy) {
                    if (cy.isDirty || ct) {
                        cy.redraw();
                        ct = true
                    }
                })
            }
            if (ct) {
                bX();
                bM();
                if (cx) {
                    b(cx);
                    cx.animate({
                        width: bu.plotSizeX,
                        height: bu.plotSizeY
                    })
                }
            }
            P(cl, function (cy) {
                if (cy.isDirty && cy.visible && (!cy.isCartesian || cy.xAxis)) {
                    cy.redraw()
                }
            });
            cb && cb.resetTracker && cb.resetTracker();
            ac(bu, "redraw")
        }
        function bx() {
            var cs = bK.xAxis || {},
                ct = bK.yAxis || {},
                cr;
            cs = at(cs);
            P(cs, function (cu, cv) {
                cu.index = cv;
                cu.isX = true
            });
            ct = at(ct);
            P(ct, function (cu, cv) {
                cu.index = cv
            });
            bi = cs.concat(ct);
            bu.xAxis = [];
            bu.yAxis = [];
            bi = C(bi, function (cu) {
                cr = new bH(bu, cu);
                bu[cr.isXAxis ? "xAxis" : "yAxis"].push(cr);
                return cr
            });
            bB()
        }
        function bv(cr, cs) {
            ab = s(bK.title, cr);
            b3 = s(bK.subtitle, cs);
            P([
                ["title", cr, ab],
                ["subtitle", cs, b3]
            ], function (ct) {
                var cu = ct[0],
                    cv = bu[cu],
                    cw = ct[1];
                ct = ct[2];
                if (cv && cw) {
                    cv.destroy();
                    cv = null
                }
                if (ct && ct.text && !cv) {
                    bu[cu] = cd.text(ct.text, 0, 0).attr({
                        align: ct.align,
                        "class": "highcharts-" + cu,
                        zIndex: 1
                    }).css(ct.style).add().align(ct, false, bL)
                }
            })
        }
        function bs() {
            bA = bt.renderTo;
            b2 = ax + W++;
            if (aw(bA)) {
                bA = aE.getElementById(bA)
            }
            bA.innerHTML = "";
            if (!bA.offsetWidth) {
                bh = bA.cloneNode(0);
                p(bh, {
                    position: a4,
                    top: "-9999px",
                    display: ""
                });
                aE.body.appendChild(bh)
            }
            ci = (bh || bA).offsetWidth;
            bp = (bh || bA).offsetHeight;
            bu.chartWidth = bP = bt.width || ci || 600;
            bu.chartHeight = b6 = bt.height || (bp > 19 ? bp : 400);
            bu.container = bN = h(o, {
                className: "highcharts-container" + (bt.className ? " " + bt.className : ""),
                id: b2
            }, aQ({
                position: ae,
                overflow: ay,
                width: bP + aX,
                height: b6 + aX,
                textAlign: "left"
            }, bt.style), bh || bA);
            bu.renderer = cd = bt.renderer == "SVG" ? new aC(bN, bP, b6) : new H(bN, bP, b6);
            var cr, cs;
            if (/Firefox/.test(q) && bN.getBoundingClientRect) {
                cr = function () {
                    p(bN, {
                        left: 0,
                        top: 0
                    });
                    cs = bN.getBoundingClientRect();
                    p(bN, {
                        left: -cs.left % 1 + aX,
                        top: -cs.top % 1 + aX
                    })
                };
                cr();
                ag(aq, "resize", cr);
                ag(bu, "destroy", function () {
                    aJ(aq, "resize", cr)
                })
            }
        }
        function bZ() {
            function cr() {
                var ct = bt.width || bA.offsetWidth,
                    cu = bt.height || bA.offsetHeight;
                if (ct && cu) {
                    if (ct != ci || cu != bp) {
                        clearTimeout(cs);
                        cs = setTimeout(function () {
                            bm(ct, cu, false)
                        }, 100)
                    }
                    ci = ct;
                    bp = cu
                }
            }
            var cs;
            ag(window, "resize", cr);
            ag(bu, "destroy", function () {
                aJ(window, "resize", cr)
            })
        }
        function bC() {
            var cs = bK.labels,
                ct = bK.credits,
                cr;
            bv();
            cc = bu.legend = new b8(bu);
            cf();
            P(bi, function (cu) {
                cu.setTickPositions(true)
            });
            bB();
            cf();
            bX();
            by && P(bi, function (cu) {
                cu.render()
            });
            if (!bu.seriesGroup) {
                bu.seriesGroup = cd.g("series-group").attr({
                    zIndex: 3
                }).add()
            }
            P(cl, function (cu) {
                cu.translate();
                cu.setTooltipPoints();
                cu.render()
            });
            cs.items && P(cs.items, function () {
                var cu = aQ(cs.style, this.style),
                    cv = aa(cu.left) + bQ,
                    cw = aa(cu.top) + ca + 12;
                delete cu.left;
                delete cu.top;
                cd.text(this.html, cv, cw).attr({
                    zIndex: 2
                }).css(cu).add()
            });
            if (!bu.toolbar) {
                bu.toolbar = bG(bu)
            }
            if (ct.enabled && !bu.credits) {
                cr = ct.href;
                cd.text(ct.text, 0, 0).on("click", function () {
                    if (cr) {
                        location.href = cr
                    }
                }).attr({
                    align: ct.position.align,
                    zIndex: 8
                }).css(ct.style).add().align(ct.position)
            }
            bM();
            bu.hasRendered = true;
            if (bh) {
                bA.appendChild(bN);
                k(bh)
            }
        }
        function bR() {
            var cr = cl.length,
                cs = bN && bN.parentNode;
            ac(bu, "destroy");
            aJ(aq, "unload", bR);
            aJ(bu);
            for (P(bi, function (ct) {
                aJ(ct)
            }); cr--;) {
                cl[cr].destroy()
            }
            bN.innerHTML = "";
            aJ(bN);
            cs && cs.removeChild(bN);
            bN = null;
            cd.alignedObjects = null;
            clearInterval(cg);
            for (cr in bu) {
                delete bu[cr]
            }
        }
        function bV() {
            if (!a && !aq.parent && aE.readyState != "complete") {
                aE.attachEvent("onreadystatechange", function () {
                    aE.detachEvent("onreadystatechange", bV);
                    bV()
                })
            } else {
                bs();
                bb();
                cn();
                P(bK.series || [], function (cr) {
                    bD(cr)
                });
                bu.inverted = ad = N(ad, bK.chart.inverted);
                bx();
                bu.render = bC;
                bu.tracker = cb = new bE(bu, bK.tooltip);
                bC();
                ac(bu, "load");
                bI && bI.apply(bu, [bu]);
                P(bu.callbacks, function (cr) {
                    cr.apply(bu, [bu])
                })
            }
        }
        n = s(n, u.xAxis);
        aZ = s(aZ, u.yAxis);
        u.xAxis = u.yAxis = null;
        bK = s(u, bK);
        var bt = bK.chart,
            b4 = bt.margin;
        b4 = Z(b4) ? b4 : [b4, b4, b4, b4];
        var bS = N(bt.marginTop, b4[0]),
            ck = N(bt.marginRight, b4[1]),
            L = N(bt.marginBottom, b4[2]),
            bd = N(bt.marginLeft, b4[3]),
            b0 = bt.spacingTop,
            bk = bt.spacingRight,
            ce = bt.spacingBottom,
            bO = bt.spacingLeft,
            bL, ab, b3, ca, b7, bn, bQ, br, bA, bh, bN, b2, ci, bp, bP, b6, bT, b5, b1, bJ, bo, be, bu = this,
            bY = (b4 = bt.events) && !! b4.click,
            cq, bU, co, cm, b9, bf, ch, cp, bW, cb, bq, bM, cc, y, cj, bc, by = bt.showAxes,
            bg = 0,
            bi = [],
            bl, cl = [],
            ad, cd, bw, cg, bj, bX, cf, bb, cn, bm, V, t, b8 = function (cP) {
                function cT(cZ, c2) {
                    var cX = cZ.legendItem,
                        cW = cZ.legendLine,
                        c1 = cZ.legendSymbol,
                        cY = cy.color,
                        c0 = c2 ? cB.itemStyle.color : cY;
                    cY = c2 ? cZ.color : cY;
                    cX && cX.css({
                        fill: c0
                    });
                    cW && cW.attr({
                        stroke: cY
                    });
                    c1 && c1.attr({
                        stroke: cY,
                        fill: cY
                    })
                }
                function cG(cZ, c1, cX) {
                    var cW = cZ.legendItem,
                        c0 = cZ.legendLine,
                        cY = cZ.legendSymbol;
                    cZ = cZ.checkbox;
                    cW && cW.attr({
                        x: c1,
                        y: cX
                    });
                    c0 && c0.translate(c1, cX - 4);
                    cY && cY.attr({
                        x: c1 + cY.xOff,
                        y: cX + cY.yOff
                    });
                    if (cZ) {
                        cZ.x = c1;
                        cZ.y = cX
                    }
                }
                function cI() {
                    P(cv, function (cW) {
                        var cX = cW.checkbox;
                        cX && p(cX, {
                            left: cS.attr("translateX") + cW.legendItemWidth + cX.x - 40 + aX,
                            top: cS.attr("translateY") + cX.y - 11 + aX
                        })
                    })
                }
                function cx(cZ) {
                    var c2, cX, cW, c1, cY, c0 = cZ.legendItem;
                    c1 = cZ.series || cZ;
                    if (!c0) {
                        cY = /^(bar|pie|area|column)$/.test(c1.type);
                        cZ.legendItem = c0 = cd.text(cB.labelFormatter.call(cZ), 0, 0).css(cZ.visible ? cC : cy).on("mouseover", function () {
                            cZ.setState(c);
                            c0.css(cK)
                        }).on("mouseout", function () {
                            c0.css(cZ.visible ? cC : cy);
                            cZ.setState()
                        }).on("click", function () {
                            var c4 = function () {
                                    cZ.setVisible()
                                };
                            cZ.firePointEvent ? cZ.firePointEvent("legendItemClick", null, c4) : ac(cZ, "legendItemClick", null, c4)
                        }).attr({
                            zIndex: 2
                        }).add(cS);
                        if (!cY && cZ.options && cZ.options.lineWidth) {
                            var c3 = cZ.options;
                            c1 = {
                                "stroke-width": c3.lineWidth,
                                zIndex: 2
                            };
                            if (c3.dashStyle) {
                                c1.dashstyle = c3.dashStyle
                            }
                            cZ.legendLine = cd.path([O, -cs - cr, 0, aK, -cr, 0]).attr(c1).add(cS)
                        }
                        if (cY) {
                            c2 = cd.rect(cX = -cs - cr, cW = -11, cs, 12, 2).attr({
                                "stroke-width": 0,
                                zIndex: 3
                            }).add(cS)
                        } else {
                            if (cZ.options && cZ.options.marker && cZ.options.marker.enabled) {
                                c2 = cd.symbol(cZ.symbol, cX = -cs / 2 - cr, cW = -4, cZ.options.marker.radius).attr(cZ.pointAttr[S]).attr({
                                    zIndex: 3
                                }).add(cS)
                            }
                        }
                        if (c2) {
                            c2.xOff = cX;
                            c2.yOff = cW
                        }
                        cZ.legendSymbol = c2;
                        cT(cZ, cZ.visible);
                        if (cZ.options && cZ.options.showCheckbox) {
                            cZ.checkbox = h("input", {
                                type: "checkbox",
                                checked: cZ.selected,
                                defaultChecked: cZ.selected
                            }, cB.itemCheckboxStyle, bN);
                            ag(cZ.checkbox, "click", function (c4) {
                                ac(cZ, "checkboxClick", {
                                    checked: c4.target.checked
                                }, function () {
                                    cZ.select()
                                })
                            })
                        }
                    }
                    c2 = c0.getBBox();
                    cX = cZ.legendItemWidth = cB.itemWidth || cs + cr + c2.width + cO;
                    cL = c2.height;
                    if (cU && cw - cA + cX > (cR || bP - 2 * cJ - cA)) {
                        cw = cA;
                        cF += cL
                    }
                    cN = cF;
                    cG(cZ, cw, cF);
                    if (cU) {
                        cw += cX
                    } else {
                        cF += cL
                    }
                    cQ = cR || a8(cU ? cw - cA : cX, cQ);
                    cv.push(cZ)
                }
                function cV() {
                    cw = cA;
                    cF = cM;
                    cN = cQ = 0;
                    cv = [];
                    cS || (cS = cd.g("legend").attr({
                        zIndex: 7
                    }).add());
                    cu && cD.reverse();
                    P(cD, function (cZ) {
                        if (cZ.options.showInLegend) {
                            P(cZ.options.legendType == "point" ? cZ.data : [cZ], cx)
                        }
                    });
                    cu && cD.reverse();
                    y = cR || cQ;
                    cj = cN - cM + cL;
                    if (ct || cE) {
                        y += 2 * cJ;
                        cj += 2 * cJ;
                        if (cz) {
                            y > 0 && cj > 0 && cz.animate({
                                width: y,
                                height: cj
                            })
                        } else {
                            cz = cd.rect(0, 0, y, cj, cB.borderRadius, ct || 0).attr({
                                stroke: cB.borderColor,
                                "stroke-width": ct || 0,
                                fill: cE || aO
                            }).add(cS).shadow(cB.shadow)
                        }
                        cz[cv.length ? "show" : "hide"]()
                    }
                    for (var cX = ["left", "right", "top", "bottom"], cY, cW = 4; cW--;) {
                        cY = cX[cW];
                        if (cH[cY] && cH[cY] != "auto") {
                            cB[cW < 2 ? "align" : "verticalAlign"] = cY;
                            cB[cW < 2 ? "x" : "y"] = aa(cH[cY]) * (cW % 2 ? -1 : 1)
                        }
                    }
                    cS.align(aQ(cB, {
                        width: y,
                        height: cj
                    }), true, bL);
                    bg || cI()
                }
                var cB = cP.options.legend;
                if (cB.enabled) {
                    var cU = cB.layout == "horizontal",
                        cs = cB.symbolWidth,
                        cr = cB.symbolPadding,
                        cv, cH = cB.style,
                        cC = cB.itemStyle,
                        cK = cB.itemHoverStyle,
                        cy = cB.itemHiddenStyle,
                        cJ = aa(cH.padding),
                        cO = 20,
                        cM = 18,
                        cA = 4 + cJ + cs + cr,
                        cw, cF, cN, cL = 0,
                        cz, ct = cB.borderWidth,
                        cE = cB.backgroundColor,
                        cS, cQ, cR = cB.width,
                        cD = cP.series,
                        cu = cB.reversed;
                    cV();
                    ag(cP, "endResize", cI);
                    return {
                        colorizeItem: cT,
                        destroyItem: function (cW) {
                            var cX = cW.checkbox;
                            P(["legendItem", "legendLine", "legendSymbol"], function (cY) {
                                cW[cY] && cW[cY].destroy()
                            });
                            cX && k(cW.checkbox)
                        },
                        renderLegend: cV
                    }
                }
            };
        bU = function (cr, cs) {
            return cr >= 0 && cr <= bW && cs >= 0 && cs <= cp
        };
        t = function () {
            ac(bu, "selection", {
                resetSelection: true
            }, V);
            bu.toolbar.remove("zoom")
        };
        V = function (cs) {
            var ct = u.lang,
                cr = bu.pointCount < 100;
            bu.toolbar.add("zoom", ct.resetZoom, ct.resetZoomTitle, t);
            !cs || cs.resetSelection ? P(bi, function (cu) {
                cu.setExtremes(null, null, false, cr)
            }) : P(cs.xAxis.concat(cs.yAxis), function (cu) {
                var cv = cu.axis;
                if (bu.tracker[cv.isXAxis ? "zoomX" : "zoomY"]) {
                    cv.setExtremes(cu.min, cu.max, false, cr)
                }
            });
            bz()
        };
        cf = function () {
            var cs = bK.legend,
                cu = N(cs.margin, 10),
                cr = cs.x,
                ct = cs.y,
                cv = cs.align,
                cw = cs.verticalAlign,
                cx;
            bb();
            if ((bu.title || bu.subtitle) && !an(bS)) {
                if (cx = a8(bu.title && !ab.floating && !ab.verticalAlign && ab.y || 0, bu.subtitle && !b3.floating && !b3.verticalAlign && b3.y || 0)) {
                    ca = a8(ca, cx + N(ab.margin, 15) + b0)
                }
            }
            if (cs.enabled && !cs.floating) {
                if (cv == "right") {
                    an(ck) || (b7 = a8(b7, y - cr + cu + bk))
                } else {
                    if (cv == "left") {
                        an(bd) || (bQ = a8(bQ, y + cr + cu + bO))
                    } else {
                        if (cw == "top") {
                            an(bS) || (ca = a8(ca, cj + ct + cu + b0))
                        } else {
                            if (cw == "bottom") {
                                an(L) || (bn = a8(bn, cj - ct + cu + ce))
                            }
                        }
                    }
                }
            }
            by && P(bi, function (cy) {
                cy.getOffset()
            });
            an(bd) || (bQ += br[3]);
            an(bS) || (ca += br[0]);
            an(L) || (bn += br[2]);
            an(ck) || (b7 += br[1]);
            cn()
        };
        bm = function (cs, cu, cr) {
            var ct = bu.title,
                cv = bu.subtitle;
            bg += 1;
            F(cr, bu);
            b5 = b6;
            bT = bP;
            bP = aj(cs);
            b6 = aj(cu);
            p(bN, {
                width: bP + aX,
                height: b6 + aX
            });
            cd.setSize(bP, b6, cr);
            bW = bP - bQ - b7;
            cp = b6 - ca - bn;
            bl = null;
            P(bi, function (cw) {
                cw.isDirty = true;
                cw.setScale()
            });
            P(cl, function (cw) {
                cw.isDirty = true
            });
            bu.isDirtyLegend = true;
            bu.isDirtyBox = true;
            cf();
            ct && ct.align(null, null, bL);
            cv && cv.align(null, null, bL);
            bz(cr);
            b5 = null;
            ac(bu, "resize");
            setTimeout(function () {
                ac(bu, "endResize", null, function () {
                    bg -= 1
                })
            }, aI && aI.duration || 500)
        };
        cn = function () {
            bu.plotLeft = bQ = aj(bQ);
            bu.plotTop = ca = aj(ca);
            bu.plotWidth = bW = aj(bP - bQ - b7);
            bu.plotHeight = cp = aj(b6 - ca - bn);
            bu.plotSizeX = ad ? cp : bW;
            bu.plotSizeY = ad ? bW : cp;
            bL = {
                x: bO,
                y: b0,
                width: bP - bO - bk,
                height: b6 - b0 - ce
            }
        };
        bb = function () {
            ca = N(bS, b0);
            b7 = N(ck, bk);
            bn = N(L, ce);
            bQ = N(bd, bO);
            br = [0, 0, 0, 0]
        };
        bX = function () {
            var cs = bt.borderWidth || 0,
                cu = bt.backgroundColor,
                cr = bt.plotBackgroundColor,
                ct = bt.plotBackgroundImage,
                cv, cw = {
                    x: bQ,
                    y: ca,
                    width: bW,
                    height: cp
                };
            cv = cs + (bt.shadow ? 8 : 0);
            if (cs || cu) {
                if (b1) {
                    b1.animate({
                        width: bP - cv,
                        height: b6 - cv
                    })
                } else {
                    b1 = cd.rect(cv / 2, cv / 2, bP - cv, b6 - cv, bt.borderRadius, cs).attr({
                        stroke: bt.borderColor,
                        "stroke-width": cs,
                        fill: cu || aO
                    }).add().shadow(bt.shadow)
                }
            }
            if (cr) {
                if (bJ) {
                    bJ.animate(cw)
                } else {
                    bJ = cd.rect(bQ, ca, bW, cp, 0).attr({
                        fill: cr
                    }).add().shadow(bt.plotShadow)
                }
            }
            if (ct) {
                if (bo) {
                    bo.animate(cw)
                } else {
                    bo = cd.image(ct, bQ, ca, bW, cp).add()
                }
            }
            if (bt.plotBorderWidth) {
                if (be) {
                    be.animate(cw)
                } else {
                    be = cd.rect(bQ, ca, bW, cp, 0, bt.plotBorderWidth).attr({
                        stroke: bt.plotBorderColor,
                        "stroke-width": bt.plotBorderWidth,
                        zIndex: 4
                    }).add()
                }
            }
            bu.isDirtyBox = false
        };
        M = aP = 0;
        ag(aq, "unload", bR);
        bt.reflow !== false && ag(bu, "load", bZ);
        if (b4) {
            for (cq in b4) {
                ag(bu, cq, b4[cq])
            }
        }
        bu.options = bK;
        bu.series = cl;
        bu.addSeries = function (cs, cu, cr) {
            var ct;
            if (cs) {
                F(cr, bu);
                cu = N(cu, true);
                ac(bu, "addSeries", {
                    options: cs
                }, function () {
                    ct = bD(cs);
                    ct.isDirty = true;
                    bu.isDirtyLegend = true;
                    cu && bu.redraw()
                })
            }
            return ct
        };
        bu.animation = N(bt.animation, true);
        bu.destroy = bR;
        bu.get = function (cs) {
            var cu, cr, ct;
            for (cu = 0; cu < bi.length; cu++) {
                if (bi[cu].options.id == cs) {
                    return bi[cu]
                }
            }
            for (cu = 0; cu < cl.length; cu++) {
                if (cl[cu].options.id == cs) {
                    return cl[cu]
                }
            }
            for (cu = 0; cu < cl.length; cu++) {
                ct = cl[cu].data;
                for (cr = 0; cr < ct.length; cr++) {
                    if (ct[cr].id == cs) {
                        return ct[cr]
                    }
                }
            }
            return null
        };
        bu.getSelectedPoints = function () {
            var cr = [];
            P(cl, function (cs) {
                cr = cr.concat(az(cs.data, function (ct) {
                    return ct.selected
                }))
            });
            return cr
        };
        bu.getSelectedSeries = function () {
            return az(cl, function (cr) {
                return cr.selected
            })
        };
        bu.hideLoading = function () {
            w(b9, {
                opacity: 0
            }, {
                duration: bK.loading.hideDuration,
                complete: function () {
                    p(b9, {
                        display: aO
                    })
                }
            });
            ch = false
        };
        bu.isInsidePlot = bU;
        bu.redraw = bz;
        bu.setSize = bm;
        bu.setTitle = bv;
        bu.showLoading = function (cr) {
            var cs = bK.loading;
            if (!b9) {
                b9 = h(o, {
                    className: "highcharts-loading"
                }, aQ(cs.style, {
                    left: bQ + aX,
                    top: ca + aX,
                    width: bW + aX,
                    height: cp + aX,
                    zIndex: 10,
                    display: aO
                }), bN);
                bf = h("span", null, cs.labelStyle, b9)
            }
            bf.innerHTML = cr || bK.lang.loading;
            if (!ch) {
                p(b9, {
                    opacity: 0,
                    display: ""
                });
                w(b9, {
                    opacity: cs.style.opacity
                }, {
                    duration: cs.showDuration
                });
                ch = true
            }
        };
        bu.pointCount = 0;
        bV()
    }
    var aE = document,
        aq = window,
        aV = Math,
        aj = aV.round,
        ba = aV.floor,
        A = aV.ceil,
        a8 = aV.max,
        au = aV.min,
        aG = aV.abs,
        af = aV.cos,
        aU = aV.sin,
        aD = aV.PI,
        aS = aD * 2 / 360,
        q = navigator.userAgent,
        a1 = /msie/i.test(q) && !aq.opera,
        aT = aE.documentMode == 8,
        ak = /AppleWebKit/.test(q),
        a = aq.SVGAngle || aE.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure", "1.1"),
        a7 = "ontouchstart" in aE.documentElement,
        aP, M, Q = {},
        W = 0,
        Y = 1,
        a6, u, a9, aI, f, J, o = "div",
        a4 = "absolute",
        ae = "relative",
        ay = "hidden",
        ax = "highcharts-",
        a2 = "visible",
        aX = "px",
        aO = "none",
        O = "M",
        aK = "L",
        aB = "rgba(192,192,192," + (a ? 0.000001 : 0.002) + ")",
        S = "",
        c = "hover",
        ap, av, aF, al, X, U, E, ao, T, R, D, i, B = aq.HighchartsAdapter,
        ar = B || {},
        P = ar.each,
        az = ar.grep,
        C = ar.map,
        s = ar.merge,
        a0 = ar.hyphenate,
        ag = ar.addEvent,
        aJ = ar.removeEvent,
        ac = ar.fireEvent,
        w = ar.animate,
        b = ar.stop,
        aR = {};
    B && B.init && B.init();
    if (!B && aq.jQuery) {
        var j = jQuery;
        P = function (y, t) {
            for (var V = 0, L = y.length; V < L; V++) {
                if (t.call(y[V], y[V], V, y) === false) {
                    return V
                }
            }
        };
        az = j.grep;
        C = function (y, t) {
            for (var ab = [], V = 0, L = y.length; V < L; V++) {
                ab[V] = t.call(y[V], y[V], V, y)
            }
            return ab
        };
        s = function () {
            var t = arguments;
            return j.extend(true, null, t[0], t[1], t[2], t[3])
        };
        a0 = function (t) {
            return t.replace(/([A-Z])/g, function (y, L) {
                return "-" + L.toLowerCase()
            })
        };
        ag = function (y, t, L) {
            j(y).bind(t, L)
        };
        aJ = function (y, t, V) {
            var L = aE.removeEventListener ? "removeEventListener" : "detachEvent";
            if (aE[L] && !y[L]) {
                y[L] = function () {}
            }
            j(y).unbind(t, V)
        };
        ac = function (y, t, ad, ab) {
            var V = j.Event(t),
                L = "detached" + t;
            aQ(V, ad);
            if (y[t]) {
                y[L] = y[t];
                y[t] = null
            }
            j(y).trigger(V);
            if (y[L]) {
                y[t] = y[L];
                y[L] = null
            }
            ab && !V.isDefaultPrevented() && ab(V)
        };
        w = function (y, t, V) {
            var L = j(y);
            if (t.d) {
                y.toD = t.d;
                t.d = 1
            }
            L.stop();
            L.animate(t, V)
        };
        b = function (t) {
            j(t).stop()
        };
        j.extend(j.easing, {
            easeOutQuad: function (y, t, ab, V, L) {
                return -V * (t /= L) * (t - 2) + ab
            }
        });
        var z = jQuery.fx.step._default,
            g = jQuery.fx.prototype.cur;
        j.fx.step._default = function (y) {
            var t = y.elem;
            t.attr ? t.attr(y.prop, y.now) : z.apply(this, arguments)
        };
        j.fx.step.d = function (y) {
            var t = y.elem;
            if (!y.started) {
                var L = f.init(t, t.d, t.toD);
                y.start = L[0];
                y.end = L[1];
                y.started = true
            }
            t.attr("d", f.step(y.start, y.end, y.pos, t.toD))
        };
        j.fx.prototype.cur = function () {
            var t = this.elem;
            return t.attr ? t.attr(this.prop) : g.apply(this, arguments)
        }
    }
    f = {
        init: function (be, bd, bc) {
            bd = bd || "";
            var bb = be.shift,
                ad = bd.indexOf("C") > -1,
                ab = ad ? 7 : 3,
                V;
            bd = bd.split(" ");
            bc = [].concat(bc);
            var L, y, t = function (bf) {
                    for (V = bf.length; V--;) {
                        bf[V] == O && bf.splice(V + 1, 0, bf[V + 1], bf[V + 2], bf[V + 1], bf[V + 2])
                    }
                };
            if (ad) {
                t(bd);
                t(bc)
            }
            if (be.isArea) {
                L = bd.splice(bd.length - 6, 6);
                y = bc.splice(bc.length - 6, 6)
            }
            if (bb) {
                bc = [].concat(bc).splice(0, ab).concat(bc);
                be.shift = false
            }
            if (bd.length) {
                for (be = bc.length; bd.length < be;) {
                    bb = [].concat(bd).splice(bd.length - ab, ab);
                    if (ad) {
                        bb[ab - 6] = bb[ab - 2];
                        bb[ab - 5] = bb[ab - 1]
                    }
                    bd = bd.concat(bb)
                }
            }
            if (L) {
                bd = bd.concat(L);
                bc = bc.concat(y)
            }
            return [bd, bc]
        },
        step: function (y, t, ad, ab) {
            var V = [],
                L = y.length;
            if (ad == 1) {
                V = ab
            } else {
                if (L == t.length && ad < 1) {
                    for (; L--;) {
                        ab = parseFloat(y[L]);
                        V[L] = isNaN(ab) ? y[L] : ad * parseFloat(t[L] - ab) + ab
                    }
                } else {
                    V = t
                }
            }
            return V
        }
    };
    B = {
        enabled: true,
        align: "center",
        x: 0,
        y: 15,
        style: {
            color: "#666",
            fontSize: "11px",
            lineHeight: "14px"
        }
    };
    u = {
        colors: ["#4572A7", "#AA4643", "#89A54E", "#80699B", "#3D96AE", "#DB843D", "#92A8CD", "#A47D7C", "#B5CA92"],
        symbols: ["circle", "diamond", "square", "triangle", "triangle-down"],
        lang: {
            loading: "Loading...",
            months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
            weekdays: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
            decimalPoint: ".",
            resetZoom: "Reset zoom",
            resetZoomTitle: "Reset zoom level 1:1",
            thousandsSep: ","
        },
        global: {
            useUTC: true
        },
        chart: {
            borderColor: "#4572A7",
            borderRadius: 5,
            defaultSeriesType: "line",
            ignoreHiddenSeries: true,
            spacingTop: 10,
            spacingRight: 10,
            spacingBottom: 15,
            spacingLeft: 10,
            style: {
                fontFamily: '"Lucida Grande", "Lucida Sans Unicode", Verdana, Arial, Helvetica, sans-serif',
                fontSize: "12px"
            },
            backgroundColor: "#FFFFFF",
            plotBorderColor: "#C0C0C0"
        },
        title: {
            text: "Chart title",
            align: "center",
            y: 15,
            style: {
                color: "#3E576F",
                fontSize: "16px"
            }
        },
        subtitle: {
            text: "",
            align: "center",
            y: 30,
            style: {
                color: "#6D869F"
            }
        },
        plotOptions: {
            line: {
                allowPointSelect: false,
                showCheckbox: false,
                animation: {
                    duration: 1000
                },
                events: {},
                lineWidth: 2,
                shadow: true,
                marker: {
                    enabled: true,
                    lineWidth: 0,
                    radius: 4,
                    lineColor: "#FFFFFF",
                    states: {
                        hover: {},
                        select: {
                            fillColor: "#FFFFFF",
                            lineColor: "#000000",
                            lineWidth: 2
                        }
                    }
                },
                point: {
                    events: {}
                },
                dataLabels: s(B, {
                    enabled: false,
                    y: -6,
                    formatter: function () {
                        return this.y
                    }
                }),
                showInLegend: true,
                states: {
                    hover: {
                        marker: {}
                    },
                    select: {
                        marker: {}
                    }
                },
                stickyTracking: true
            }
        },
        labels: {
            style: {
                position: a4,
                color: "#3E576F"
            }
        },
        legend: {
            enabled: true,
            align: "center",
            layout: "horizontal",
            labelFormatter: function () {
                return this.name
            },
            borderWidth: 1,
            borderColor: "#909090",
            borderRadius: 5,
            shadow: false,
            style: {
                padding: "5px"
            },
            itemStyle: {
                cursor: "pointer",
                color: "#3E576F"
            },
            itemHoverStyle: {
                cursor: "pointer",
                color: "#000000"
            },
            itemHiddenStyle: {
                color: "#C0C0C0"
            },
            itemCheckboxStyle: {
                position: a4,
                width: "13px",
                height: "13px"
            },
            symbolWidth: 16,
            symbolPadding: 5,
            verticalAlign: "bottom",
            x: 0,
            y: 0
        },
        loading: {
            hideDuration: 100,
            labelStyle: {
                fontWeight: "bold",
                position: ae,
                top: "1em"
            },
            showDuration: 100,
            style: {
                position: a4,
                backgroundColor: "white",
                opacity: 0.5,
                textAlign: "center"
            }
        },
        tooltip: {
            enabled: true,
            backgroundColor: "rgba(255, 255, 255, .85)",
            borderWidth: 2,
            borderRadius: 5,
            shadow: true,
            snap: a7 ? 25 : 10,
            style: {
                color: "#333333",
                fontSize: "12px",
                padding: "5px",
                whiteSpace: "nowrap"
            }
        },
        toolbar: {
            itemStyle: {
                color: "#4572A7",
                cursor: "pointer"
            }
        },
        credits: {
            enabled: true,
            text: "Highcharts.com",
            href: "http://www.highcharts.com",
            position: {
                align: "right",
                x: -10,
                verticalAlign: "bottom",
                y: -5
            },
            style: {
                cursor: "pointer",
                color: "#909090",
                fontSize: "10px"
            }
        }
    };
    var n = {
        dateTimeLabelFormats: {
            second: "%H:%M:%S",
            minute: "%H:%M",
            hour: "%H:%M",
            day: "%e. %b",
            week: "%e. %b",
            month: "%b '%y",
            year: "%Y"
        },
        endOnTick: false,
        gridLineColor: "#C0C0C0",
        labels: B,
        lineColor: "#C0D0E0",
        lineWidth: 1,
        max: null,
        min: null,
        minPadding: 0.01,
        maxPadding: 0.01,
        minorGridLineColor: "#E0E0E0",
        minorGridLineWidth: 1,
        minorTickColor: "#A0A0A0",
        minorTickLength: 2,
        minorTickPosition: "outside",
        startOfWeek: 1,
        startOnTick: false,
        tickColor: "#C0D0E0",
        tickLength: 5,
        tickmarkPlacement: "between",
        tickPixelInterval: 100,
        tickPosition: "outside",
        tickWidth: 1,
        title: {
            align: "middle",
            style: {
                color: "#6D869F",
                fontWeight: "bold"
            }
        },
        type: "linear"
    },
        aZ = s(n, {
            endOnTick: true,
            gridLineWidth: 1,
            tickPixelInterval: 72,
            showLastLabel: true,
            labels: {
                align: "right",
                x: -8,
                y: 3
            },
            lineWidth: 0,
            maxPadding: 0.05,
            minPadding: 0.05,
            startOnTick: true,
            tickWidth: 0,
            title: {
                rotation: 270,
                text: "Y-values"
            }
        }),
        e = {
            labels: {
                align: "right",
                x: -8,
                y: null
            },
            title: {
                rotation: 270
            }
        },
        v = {
            labels: {
                align: "left",
                x: 8,
                y: null
            },
            title: {
                rotation: 90
            }
        },
        m = {
            labels: {
                align: "center",
                x: 0,
                y: 14
            },
            title: {
                rotation: 0
            }
        },
        K = s(m, {
            labels: {
                y: -5
            }
        }),
        I = u.plotOptions;
    B = I.line;
    I.spline = s(B);
    I.scatter = s(B, {
        lineWidth: 0,
        states: {
            hover: {
                lineWidth: 0
            }
        }
    });
    I.area = s(B, {});
    I.areaspline = s(I.area);
    I.column = s(B, {
        borderColor: "#FFFFFF",
        borderWidth: 1,
        borderRadius: 0,
        groupPadding: 0.2,
        marker: null,
        pointPadding: 0.1,
        minPointLength: 0,
        states: {
            hover: {
                brightness: 0.1,
                shadow: false
            },
            select: {
                color: "#C0C0C0",
                borderColor: "#000000",
                shadow: false
            }
        }
    });
    I.bar = s(I.column, {
        dataLabels: {
            align: "left",
            x: 5,
            y: 0
        }
    });
    I.pie = s(B, {
        borderColor: "#FFFFFF",
        borderWidth: 1,
        center: ["50%", "50%"],
        colorByPoint: true,
        dataLabels: {
            distance: 30,
            enabled: true,
            formatter: function () {
                return this.point.name
            },
            y: 5
        },
        legendType: "point",
        marker: null,
        size: "75%",
        showInLegend: false,
        slicedOffset: 10,
        states: {
            hover: {
                brightness: 0.1,
                shadow: false
            }
        }
    });
    aH();
    var ai = function (y) {
            var t = [],
                L;
            (function (V) {
                if (L = /rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]?(?:\.[0-9]+)?)\s*\)/.exec(V)) {
                    t = [aa(L[1]), aa(L[2]), aa(L[3]), parseFloat(L[4], 10)]
                } else {
                    if (L = /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(V)) {
                        t = [aa(L[1], 16), aa(L[2], 16), aa(L[3], 16), 1]
                    }
                }
            })(y);
            return {
                get: function (V) {
                    return t && !isNaN(t[0]) ? V == "rgb" ? "rgb(" + t[0] + "," + t[1] + "," + t[2] + ")" : V == "a" ? t[3] : "rgba(" + t.join(",") + ")" : y
                },
                brighten: function (ab) {
                    if (am(ab) && ab !== 0) {
                        var V;
                        for (V = 0; V < 3; V++) {
                            t[V] += aa(ab * 255);
                            if (t[V] < 0) {
                                t[V] = 0
                            }
                            if (t[V] > 255) {
                                t[V] = 255
                            }
                        }
                    }
                    return this
                },
                setOpacity: function (V) {
                    t[3] = V;
                    return this
                }
            }
        };
    a9 = function (bg, bf, be) {
        function bc(bh) {
            return bh.toString().replace(/^([0-9])$/, "0$1")
        }
        if (!an(bf) || isNaN(bf)) {
            return "Invalid date"
        }
        bg = N(bg, "%Y-%m-%d %H:%M:%S");
        bf = new Date(bf * Y);
        var bb = bf[aF](),
            ad = bf[al](),
            ab = bf[X](),
            V = bf[U](),
            L = bf[E](),
            y = u.lang,
            t = y.weekdays;
        y = y.months;
        bf = {
            a: t[ad].substr(0, 3),
            A: t[ad],
            d: bc(ab),
            e: ab,
            b: y[V].substr(0, 3),
            B: y[V],
            m: bc(V + 1),
            y: L.toString().substr(2, 2),
            Y: L,
            H: bc(bb),
            I: bc(bb % 12 || 12),
            l: bb % 12 || 12,
            M: bc(bf[av]()),
            p: bb < 12 ? "AM" : "PM",
            P: bb < 12 ? "am" : "pm",
            S: bc(bf.getSeconds())
        };
        for (var bd in bf) {
            bg = bg.replace("%" + bd, bf[bd])
        }
        return be ? bg.substr(0, 1).toUpperCase() + bg.substr(1) : bg
    };
    aN.prototype = {
        init: function (y, t) {
            this.element = aE.createElementNS("http://www.w3.org/2000/svg", t);
            this.renderer = y
        },
        animate: function (y, t, L) {
            if (t = N(t, aI, true)) {
                t = s(t);
                if (L) {
                    t.complete = L
                }
                w(this, y, t)
            } else {
                this.attr(y);
                L && L()
            }
        },
        attr: function (bg, bf) {
            var be, bc, bb, ad, ab = this.element,
                V = ab.nodeName,
                L = this.renderer,
                y, t = this.shadows,
                bd, bh = this;
            if (aw(bg) && an(bf)) {
                be = bg;
                bg = {};
                bg[be] = bf
            }
            if (aw(bg)) {
                be = bg;
                if (V == "circle") {
                    be = {
                        x: "cx",
                        y: "cy"
                    }[be] || be
                } else {
                    if (be == "strokeWidth") {
                        be = "stroke-width"
                    }
                }
                bh = d(ab, be) || this[be] || 0;
                if (be != "d" && be != "visibility") {
                    bh = parseFloat(bh)
                }
            } else {
                for (be in bg) {
                    y = false;
                    bc = bg[be];
                    if (be == "d") {
                        if (bc && bc.join) {
                            bc = bc.join(" ")
                        }
                        if (/(NaN| {2}|^$)/.test(bc)) {
                            bc = "M 0 0"
                        }
                        this.d = bc
                    } else {
                        if (be == "x" && V == "text") {
                            for (bb = 0; bb < ab.childNodes.length; bb++) {
                                ad = ab.childNodes[bb];
                                d(ad, "x") == d(ab, "x") && d(ad, "x", bc)
                            }
                            if (this.rotation) {
                                d(ab, "transform", "rotate(" + this.rotation + " " + bc + " " + aa(bg.y || d(ab, "y")) + ")")
                            }
                        } else {
                            if (be == "fill") {
                                bc = L.color(bc, ab, be)
                            } else {
                                if (V == "circle" && (be == "x" || be == "y")) {
                                    be = {
                                        x: "cx",
                                        y: "cy"
                                    }[be] || be
                                } else {
                                    if (be == "translateX" || be == "translateY" || be == "rotation" || be == "verticalAlign") {
                                        this[be] = bc;
                                        this.updateTransform();
                                        y = true
                                    } else {
                                        if (be == "stroke") {
                                            bc = L.color(bc, ab, be)
                                        } else {
                                            if (be == "dashstyle") {
                                                be = "stroke-dasharray";
                                                if (bc) {
                                                    bc = bc.toLowerCase().replace("shortdashdotdot", "3,1,1,1,1,1,").replace("shortdashdot", "3,1,1,1").replace("shortdot", "1,1,").replace("shortdash", "3,1,").replace("longdash", "8,3,").replace(/dot/g, "1,3,").replace("dash", "4,3,").replace(/,$/, "").split(",");
                                                    for (bb = bc.length; bb--;) {
                                                        bc[bb] = aa(bc[bb]) * bg["stroke-width"]
                                                    }
                                                    bc = bc.join(",")
                                                }
                                            } else {
                                                if (be == "isTracker") {
                                                    this[be] = bc
                                                } else {
                                                    if (be == "width") {
                                                        bc = aa(bc)
                                                    } else {
                                                        if (be == "align") {
                                                            be = "text-anchor";
                                                            bc = {
                                                                left: "start",
                                                                center: "middle",
                                                                right: "end"
                                                            }[bc]
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                    if (be == "strokeWidth") {
                        be = "stroke-width"
                    }
                    if (ak && be == "stroke-width" && bc === 0) {
                        bc = 0.000001
                    }
                    if (this.symbolName && /^(x|y|r|start|end|innerR)/.test(be)) {
                        if (!bd) {
                            this.symbolAttr(bg);
                            bd = true
                        }
                        y = true
                    }
                    if (t && /^(width|height|visibility|x|y|d)$/.test(be)) {
                        for (bb = t.length; bb--;) {
                            d(t[bb], be, bc)
                        }
                    }
                    if (be == "text") {
                        this.textStr = bc;
                        L.buildText(this)
                    } else {
                        y || d(ab, be, bc)
                    }
                }
            }
            return bh
        },
        symbolAttr: function (t) {
            this.x = N(t.x, this.x);
            this.y = N(t.y, this.y);
            this.r = N(t.r, this.r);
            this.start = N(t.start, this.start);
            this.end = N(t.end, this.end);
            this.width = N(t.width, this.width);
            this.height = N(t.height, this.height);
            this.innerR = N(t.innerR, this.innerR);
            this.attr({
                d: this.renderer.symbols[this.symbolName](this.x, this.y, this.r, {
                    start: this.start,
                    end: this.end,
                    width: this.width,
                    height: this.height,
                    innerR: this.innerR
                })
            })
        },
        clip: function (t) {
            return this.attr("clip-path", "url(" + this.renderer.url + "#" + t.id + ")")
        },
        css: function (y) {
            var t = this.element;
            if (y && y.color) {
                y.fill = y.color
            }
            y = aQ(this.styles, y);
            a1 && !a ? p(this.element, y) : this.attr({
                style: ah(y)
            });
            this.styles = y;
            y.width && t.nodeName == "text" && this.added && this.renderer.buildText(this);
            return this
        },
        on: function (y, t) {
            var L = t;
            if (a7 && y == "click") {
                y = "touchstart";
                L = function (V) {
                    V.preventDefault();
                    t()
                }
            }
            this.element["on" + y] = L;
            return this
        },
        translate: function (y, t) {
            return this.attr({
                translateX: y,
                translateY: t
            })
        },
        invert: function () {
            this.inverted = true;
            this.updateTransform();
            return this
        },
        updateTransform: function () {
            var y = this.translateX || 0,
                t = this.translateY || 0,
                ab = this.inverted,
                V = this.rotation,
                L = [];
            if (ab) {
                y += this.attr("width");
                t += this.attr("height")
            }
            if (y || t) {
                L.push("translate(" + y + "," + t + ")")
            }
            if (ab) {
                L.push("rotate(90) scale(-1,1)")
            } else {
                V && L.push("rotate(" + V + " " + this.x + " " + this.y + ")")
            }
            L.length && d(this.element, "transform", L.join(" "))
        },
        toFront: function () {
            var t = this.element;
            t.parentNode.appendChild(t);
            return this
        },
        align: function (y, t, bc) {
            if (y) {
                this.alignOptions = y;
                this.alignByTranslate = t;
                bc || this.renderer.alignedObjects.push(this)
            } else {
                y = this.alignOptions;
                t = this.alignByTranslate
            }
            bc = N(bc, this.renderer);
            var bb = y.align,
                ad = y.verticalAlign,
                ab = (bc.x || 0) + (y.x || 0),
                V = (bc.y || 0) + (y.y || 0),
                L = {};
            if (/^(right|center)$/.test(bb)) {
                ab += (bc.width - (y.width || 0)) / {
                    right: 1,
                    center: 2
                }[bb]
            }
            L[t ? "translateX" : "x"] = ab;
            if (/^(bottom|middle)$/.test(ad)) {
                V += (bc.height - (y.height || 0)) / ({
                    bottom: 1,
                    middle: 2
                }[ad] || 1)
            }
            L[t ? "translateY" : "y"] = V;
            this[this.placed ? "animate" : "attr"](L);
            this.placed = true;
            return this
        },
        getBBox: function () {
            var y, t, ad, ab = this.rotation,
                V = ab * aS;
            try {
                y = aQ({}, this.element.getBBox())
            } catch (L) {
                y = {
                    width: 0,
                    height: 0
                }
            }
            t = y.width;
            ad = y.height;
            if (ab) {
                y.width = aG(ad * aU(V)) + aG(t * af(V));
                y.height = aG(ad * af(V)) + aG(t * aU(V))
            }
            return y
        },
        show: function () {
            return this.attr({
                visibility: a2
            })
        },
        hide: function () {
            return this.attr({
                visibility: ay
            })
        },
        add: function (bd) {
            var bc = this.renderer,
                bb = bd || bc,
                ad = bb.element || bc.box,
                ab = ad.childNodes,
                V = this.element,
                L = d(V, "zIndex"),
                y = this.textStr,
                t;
            this.parentInverted = bd && bd.inverted;
            if (L) {
                bb.handleZ = true;
                L = aa(L)
            }
            if (bb.handleZ) {
                for (t = 0; t < ab.length; t++) {
                    bd = ab[t];
                    bb = d(bd, "zIndex");
                    if (bd != V && (aa(bb) > L || !an(L) && an(bb))) {
                        ad.insertBefore(V, bd);
                        return this
                    }
                }
            }
            if (y !== undefined) {
                bc.buildText(this);
                this.added = true
            }
            ad.appendChild(V);
            return this
        },
        destroy: function () {
            var y = this.element || {},
                t = this.shadows,
                V = y.parentNode,
                L;
            y.onclick = y.onmouseout = y.onmouseover = y.onmousemove = null;
            b(this);
            V && V.removeChild(y);
            t && P(t, function (ab) {
                (V = ab.parentNode) && V.removeChild(ab)
            });
            aM(this.renderer.alignedObjects, this);
            for (L in this) {
                delete this[L]
            }
            return null
        },
        empty: function () {
            for (var y = this.element, t = y.childNodes, L = t.length; L--;) {
                y.removeChild(t[L])
            }
        },
        shadow: function (y) {
            var t = [],
                ab, V = this.element,
                L = this.parentInverted ? "(-1,-1)" : "(1,1)";
            if (y) {
                for (y = 1; y <= 3; y++) {
                    ab = V.cloneNode(0);
                    d(ab, {
                        isShadow: "true",
                        stroke: "rgb(0, 0, 0)",
                        "stroke-opacity": 0.05 * y,
                        "stroke-width": 7 - 2 * y,
                        transform: "translate" + L,
                        fill: aO
                    });
                    V.parentNode.insertBefore(ab, V);
                    t.push(ab)
                }
                this.shadows = t
            }
            return this
        }
    };
    var aC = function () {
            this.init.apply(this, arguments)
        };
    aC.prototype = {
        init: function (y, t, ab) {
            var V = location,
                L;
            this.Element = aN;
            L = this.createElement("svg").attr({
                xmlns: "http://www.w3.org/2000/svg",
                version: "1.1"
            });
            y.appendChild(L.element);
            this.box = L.element;
            this.boxWrapper = L;
            this.alignedObjects = [];
            this.url = a1 ? "" : V.href.replace(/#.*?$/, "");
            this.defs = this.createElement("defs").add();
            this.setSize(t, ab, false)
        },
        createElement: function (y) {
            var t = new this.Element;
            t.init(this, y);
            return t
        },
        buildText: function (be) {
            var bd = be.element,
                bc = N(be.textStr, "").toString().replace(/<(b|strong)>/g, '<span style="font-weight:bold">').replace(/<(i|em)>/g, '<span style="font-style:italic">').replace(/<a/g, "<span").replace(/<\/(b|strong|i|em|a)>/g, "</span>").split(/<br[^>]?>/g),
                bb = bd.childNodes,
                ad = /style="([^"]+)"/,
                ab = /href="([^"]+)"/,
                V = d(bd, "x"),
                L = (be = be.styles) && aa(be.width),
                y = be && be.lineHeight,
                t;
            for (be = bb.length; be--;) {
                bd.removeChild(bb[be])
            }
            L && this.box.appendChild(bd);
            P(bc, function (bj, bi) {
                var bh, bf = 0,
                    bg;
                bj = bj.replace(/<span/g, "|||<span").replace(/<\/span>/g, "</span>|||");
                bh = bj.split("|||");
                P(bh, function (bm) {
                    if (bm !== "" || bh.length == 1) {
                        var bn = {},
                            bk = aE.createElementNS("http://www.w3.org/2000/svg", "tspan");
                        ad.test(bm) && d(bk, "style", bm.match(ad)[1].replace(/(;| |^)color([ :])/, "$1fill$2"));
                        if (ab.test(bm)) {
                            d(bk, "onclick", 'location.href="' + bm.match(ab)[1] + '"');
                            p(bk, {
                                cursor: "pointer"
                            })
                        }
                        bm = bm.replace(/<(.|\n)*?>/g, "") || " ";
                        bk.appendChild(aE.createTextNode(bm));
                        if (bf) {
                            bn.dx = 3
                        } else {
                            bn.x = V
                        }
                        if (!bf) {
                            if (bi) {
                                bg = aa(window.getComputedStyle(t, null).getPropertyValue("line-height"));
                                if (isNaN(bg)) {
                                    bg = y || t.offsetHeight || 18
                                }
                                d(bk, "dy", bg)
                            }
                            t = bk
                        }
                        d(bk, bn);
                        bd.appendChild(bk);
                        bf++;
                        if (L) {
                            bm = bm.replace(/-/g, "- ").split(" ");
                            for (var bo, bl = []; bm.length || bl.length;) {
                                bo = bd.getBBox().width;
                                bn = bo > L;
                                if (!bn || bm.length == 1) {
                                    bm = bl;
                                    bl = [];
                                    bk = aE.createElementNS("http://www.w3.org/2000/svg", "tspan");
                                    d(bk, {
                                        x: V,
                                        dy: y || 16
                                    });
                                    bd.appendChild(bk);
                                    if (bo > L) {
                                        L = bo
                                    }
                                } else {
                                    bk.removeChild(bk.firstChild);
                                    bl.unshift(bm.pop())
                                }
                                bk.appendChild(aE.createTextNode(bm.join(" ").replace(/- /g, "-")))
                            }
                        }
                    }
                })
            })
        },
        crispLine: function (y, t) {
            if (y[1] == y[4]) {
                y[1] = y[4] = aj(y[1]) + t % 2 / 2
            }
            if (y[2] == y[5]) {
                y[2] = y[5] = aj(y[2]) + t % 2 / 2
            }
            return y
        },
        path: function (t) {
            return this.createElement("path").attr({
                d: t,
                fill: aO
            })
        },
        circle: function (y, t, L) {
            y = Z(y) ? y : {
                x: y,
                y: t,
                r: L
            };
            return this.createElement("circle").attr(y)
        },
        arc: function (y, t, ad, ab, V, L) {
            if (Z(y)) {
                t = y.y;
                ad = y.r;
                ab = y.innerR;
                V = y.start;
                L = y.end;
                y = y.x
            }
            return this.symbol("arc", y || 0, t || 0, ad || 0, {
                innerR: ab || 0,
                start: V || 0,
                end: L || 0
            })
        },
        rect: function (y, t, bb, ad, ab, V) {
            if (arguments.length > 1) {
                var L = (V || 0) % 2 / 2;
                y = aj(y || 0) + L;
                t = aj(t || 0) + L;
                bb = aj((bb || 0) - 2 * L);
                ad = aj((ad || 0) - 2 * L)
            }
            L = Z(y) ? y : {
                x: y,
                y: t,
                width: a8(bb, 0),
                height: a8(ad, 0)
            };
            return this.createElement("rect").attr(aQ(L, {
                rx: ab || L.r,
                ry: ab || L.r,
                fill: aO
            }))
        },
        setSize: function (y, t, ab) {
            var V = this.alignedObjects,
                L = V.length;
            this.width = y;
            this.height = t;
            for (this.boxWrapper[N(ab, true) ? "animate" : "attr"]({
                width: y,
                height: t
            }); L--;) {
                V[L].align()
            }
        },
        g: function (t) {
            return this.createElement("g").attr(an(t) && {
                "class": ax + t
            })
        },
        image: function (y, t, ad, ab, V) {
            var L = {
                preserveAspectRatio: aO
            };
            arguments.length > 1 && aQ(L, {
                x: t,
                y: ad,
                width: ab,
                height: V
            });
            L = this.createElement("image").attr(L);
            L.element.setAttributeNS("http://www.w3.org/1999/xlink", "href", y);
            return L
        },
        symbol: function (y, t, bc, bb, ad) {
            var ab, V = this.symbols[y];
            V = V && V(t, bc, bb, ad);
            var L = /^url\((.*?)\)$/;
            if (V) {
                ab = this.path(V);
                aQ(ab, {
                    symbolName: y,
                    x: t,
                    y: bc,
                    r: bb
                });
                ad && aQ(ab, ad)
            } else {
                if (L.test(y)) {
                    y = y.match(L)[1];
                    ab = this.image(y).attr({
                        x: t,
                        y: bc
                    });
                    h("img", {
                        onload: function () {
                            var bd = Q[this.src] || [this.width, this.height];
                            ab.attr({
                                width: bd[0],
                                height: bd[1]
                            }).translate(-aj(bd[0] / 2), -aj(bd[1] / 2))
                        },
                        src: y
                    })
                } else {
                    ab = this.circle(t, bc, bb)
                }
            }
            return ab
        },
        symbols: {
            square: function (y, t, L) {
                L = 0.707 * L;
                return [O, y - L, t - L, aK, y + L, t - L, y + L, t + L, y - L, t + L, "Z"]
            },
            triangle: function (y, t, L) {
                return [O, y, t - 1.33 * L, aK, y + L, t + 0.67 * L, y - L, t + 0.67 * L, "Z"]
            },
            "triangle-down": function (y, t, L) {
                return [O, y, t + 1.33 * L, aK, y - L, t - 0.67 * L, y + L, t - 0.67 * L, "Z"]
            },
            diamond: function (y, t, L) {
                return [O, y, t - L, aK, y + L, t, y, t + L, y - L, t, "Z"]
            },
            arc: function (be, bd, bc, bb) {
                var ad = bb.start,
                    ab = bb.end - 0.000001,
                    V = bb.innerR,
                    L = af(ad),
                    y = aU(ad),
                    t = af(ab);
                ab = aU(ab);
                bb = bb.end - ad < aD ? 0 : 1;
                return [O, be + bc * L, bd + bc * y, "A", bc, bc, 0, bb, 1, be + bc * t, bd + bc * ab, aK, be + V * t, bd + V * ab, "A", V, V, 0, bb, 0, be + V * L, bd + V * y, "Z"]
            }
        },
        clipRect: function (y, t, ad, ab) {
            var V = ax + W++,
                L = this.createElement("clipPath").attr({
                    id: V
                }).add(this.defs);
            y = this.rect(y, t, ad, ab, 0).add(L);
            y.id = V;
            return y
        },
        color: function (bd, bc, bb) {
            var ad, ab = /^rgba/;
            if (bd && bd.linearGradient) {
                var V = this;
                bc = bd.linearGradient;
                bb = ax + W++;
                var L, y, t;
                L = V.createElement("linearGradient").attr({
                    id: bb,
                    gradientUnits: "userSpaceOnUse",
                    x1: bc[0],
                    y1: bc[1],
                    x2: bc[2],
                    y2: bc[3]
                }).add(V.defs);
                P(bd.stops, function (be) {
                    if (ab.test(be[1])) {
                        ad = ai(be[1]);
                        y = ad.get("rgb");
                        t = ad.get("a")
                    } else {
                        y = be[1];
                        t = 1
                    }
                    V.createElement("stop").attr({
                        offset: be[0],
                        "stop-color": y,
                        "stop-opacity": t
                    }).add(L)
                });
                return "url(" + this.url + "#" + bb + ")"
            } else {
                if (ab.test(bd)) {
                    ad = ai(bd);
                    d(bc, bb + "-opacity", ad.get("a"));
                    return ad.get("rgb")
                } else {
                    return bd
                }
            }
        },
        text: function (y, t, V) {
            var L = u.chart.style;
            t = aj(N(t, 0));
            V = aj(N(V, 0));
            y = this.createElement("text").attr({
                x: t,
                y: V,
                text: y
            }).css({
                "font-family": L.fontFamily,
                "font-size": L.fontSize
            });
            y.x = t;
            y.y = V;
            return y
        }
    };
    var G;
    if (!a) {
        var aY = r(aN, {
            init: function (y, t) {
                var V = ["<", t, ' filled="f" stroked="f"'],
                    L = ["position: ", a4, ";"];
                if (t == "shape" || t == o) {
                    L.push("left:0;top:0;width:10px;height:10px;")
                }
                if (aT) {
                    L.push("visibility: ", t == o ? ay : a2)
                }
                V.push(' style="', L.join(""), '"/>');
                if (t) {
                    V = t == o || t == "span" || t == "img" ? V.join("") : y.prepVML(V);
                    this.element = h(V)
                }
                this.renderer = y
            },
            add: function (y) {
                var t = this.renderer,
                    V = this.element,
                    L = t.box;
                L = y ? y.element || y : L;
                y && y.inverted && t.invertChild(V, L);
                aT && L.gVis == ay && p(V, {
                    visibility: ay
                });
                L.appendChild(V);
                this.added = true;
                this.alignOnAdd && this.updateTransform();
                return this
            },
            attr: function (bh, bg) {
                var bf, bd, bc, bb = this.element || {},
                    ad = bb.style,
                    ab = bb.nodeName,
                    V = this.renderer,
                    L = this.symbolName,
                    t, be, bi = this.shadows,
                    y = this;
                if (aw(bh) && an(bg)) {
                    bf = bh;
                    bh = {};
                    bh[bf] = bg
                }
                if (aw(bh)) {
                    bf = bh;
                    y = bf == "strokeWidth" || bf == "stroke-width" ? this.strokeweight : this[bf]
                } else {
                    for (bf in bh) {
                        bd = bh[bf];
                        t = false;
                        if (L && /^(x|y|r|start|end|width|height|innerR)/.test(bf)) {
                            if (!be) {
                                this.symbolAttr(bh);
                                be = true
                            }
                            t = true
                        } else {
                            if (bf == "d") {
                                bd = bd || [];
                                this.d = bd.join(" ");
                                bc = bd.length;
                                for (t = []; bc--;) {
                                    t[bc] = am(bd[bc]) ? aj(bd[bc] * 10) - 5 : bd[bc] == "Z" ? "x" : bd[bc]
                                }
                                bd = t.join(" ") || "x";
                                bb.path = bd;
                                if (bi) {
                                    for (bc = bi.length; bc--;) {
                                        bi[bc].path = bd
                                    }
                                }
                                t = true
                            } else {
                                if (bf == "zIndex" || bf == "visibility") {
                                    if (aT && bf == "visibility" && ab == "DIV") {
                                        bb.gVis = bd;
                                        t = bb.childNodes;
                                        for (bc = t.length; bc--;) {
                                            p(t[bc], {
                                                visibility: bd
                                            })
                                        }
                                        if (bd == a2) {
                                            bd = null
                                        }
                                    }
                                    if (bd) {
                                        ad[bf] = bd
                                    }
                                    t = true
                                } else {
                                    if (/^(width|height)$/.test(bf)) {
                                        if (this.updateClipping) {
                                            this[bf] = bd;
                                            this.updateClipping()
                                        } else {
                                            ad[bf] = bd
                                        }
                                        t = true
                                    } else {
                                        if (/^(x|y)$/.test(bf)) {
                                            this[bf] = bd;
                                            if (bb.tagName == "SPAN") {
                                                this.updateTransform()
                                            } else {
                                                ad[{
                                                    x: "left",
                                                    y: "top"
                                                }[bf]] = bd
                                            }
                                        } else {
                                            if (bf == "class") {
                                                bb.className = bd
                                            } else {
                                                if (bf == "stroke") {
                                                    bd = V.color(bd, bb, bf);
                                                    bf = "strokecolor"
                                                } else {
                                                    if (bf == "stroke-width" || bf == "strokeWidth") {
                                                        bb.stroked = bd ? true : false;
                                                        bf = "strokeweight";
                                                        this[bf] = bd;
                                                        if (am(bd)) {
                                                            bd += aX
                                                        }
                                                    } else {
                                                        if (bf == "dashstyle") {
                                                            (bb.getElementsByTagName("stroke")[0] || h(V.prepVML(["<stroke/>"]), null, null, bb))[bf] = bd || "solid";
                                                            this.dashstyle = bd;
                                                            t = true
                                                        } else {
                                                            if (bf == "fill") {
                                                                if (ab == "SPAN") {
                                                                    ad.color = bd
                                                                } else {
                                                                    bb.filled = bd != aO ? true : false;
                                                                    bd = V.color(bd, bb, bf);
                                                                    bf = "fillcolor"
                                                                }
                                                            } else {
                                                                if (bf == "translateX" || bf == "translateY" || bf == "rotation" || bf == "align") {
                                                                    if (bf == "align") {
                                                                        bf = "textAlign"
                                                                    }
                                                                    this[bf] = bd;
                                                                    this.updateTransform();
                                                                    t = true
                                                                } else {
                                                                    if (bf == "text") {
                                                                        bb.innerHTML = bd;
                                                                        t = true
                                                                    }
                                                                }
                                                            }
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                        if (bi && bf == "visibility") {
                            for (bc = bi.length; bc--;) {
                                bi[bc].style[bf] = bd
                            }
                        }
                        if (!t) {
                            if (aT) {
                                bb[bf] = bd
                            } else {
                                d(bb, bf, bd)
                            }
                        }
                    }
                }
                return y
            },
            clip: function (y) {
                var t = this,
                    L = y.members;
                L.push(t);
                t.destroyClip = function () {
                    aM(L, t)
                };
                return t.css(y.getCSS(t.inverted))
            },
            css: function (y) {
                var t = this.element;
                (t = y && y.width && t.tagName == "SPAN") && aQ(y, {
                    display: "block",
                    whiteSpace: "normal"
                });
                this.styles = aQ(this.styles, y);
                p(this.element, y);
                t && this.updateTransform();
                return this
            },
            destroy: function () {
                this.destroyClip && this.destroyClip();
                aN.prototype.destroy.apply(this)
            },
            empty: function () {
                for (var y = this.element.childNodes, t = y.length, L; t--;) {
                    L = y[t];
                    L.parentNode.removeChild(L)
                }
            },
            getBBox: function () {
                var t = this.element;
                if (t.nodeName == "text") {
                    t.style.position = a4
                }
                return {
                    x: t.offsetLeft,
                    y: t.offsetTop,
                    width: t.offsetWidth,
                    height: t.offsetHeight
                }
            },
            on: function (y, t) {
                this.element["on" + y] = function () {
                    var L = aq.event;
                    L.target = L.srcElement;
                    t(L)
                };
                return this
            },
            updateTransform: function () {
                if (this.added) {
                    var bj = this,
                        bi = bj.element,
                        bg = bj.translateX || 0,
                        be = bj.translateY || 0,
                        bd = bj.x || 0,
                        bc = bj.y || 0,
                        bb = bj.textAlign || "left",
                        ad = {
                            left: 0,
                            center: 0.5,
                            right: 1
                        }[bb],
                        ab = bb && bb != "left";
                    if (bg || be) {
                        bj.css({
                            marginLeft: bg,
                            marginTop: be
                        })
                    }
                    bj.inverted && P(bi.childNodes, function (bm) {
                        bj.renderer.invertChild(bm, bi)
                    });
                    if (bi.tagName == "SPAN") {
                        var V, t;
                        bg = bj.rotation;
                        var bf;
                        V = 0;
                        be = 1;
                        var bl = 0,
                            y, L = bj.xCorr || 0,
                            bh = bj.yCorr || 0,
                            bk = [bg, bb, bi.innerHTML, bi.style.width].join(",");
                        if (bk != bj.cTT) {
                            if (an(bg)) {
                                V = bg * aS;
                                be = af(V);
                                bl = aU(V);
                                p(bi, {
                                    filter: bg ? ["progid:DXImageTransform.Microsoft.Matrix(M11=", be, ", M12=", -bl, ", M21=", bl, ", M22=", be, ", sizingMethod='auto expand')"].join("") : aO
                                })
                            }
                            V = bi.offsetWidth;
                            t = bi.offsetHeight;
                            bf = aj(aa(bi.style.fontSize || 12) * 1.2);
                            L = be < 0 && -V;
                            bh = bl < 0 && -t;
                            y = be * bl < 0;
                            L += bl * bf * (y ? 1 - ad : ad);
                            bh -= be * bf * (bg ? y ? ad : 1 - ad : 1);
                            if (ab) {
                                L -= V * ad * (be < 0 ? -1 : 1);
                                if (bg) {
                                    bh -= t * ad * (bl < 0 ? -1 : 1)
                                }
                                p(bi, {
                                    textAlign: bb
                                })
                            }
                            bj.xCorr = L;
                            bj.yCorr = bh
                        }
                        p(bi, {
                            left: bd + L,
                            top: bc + bh
                        });
                        bj.cTT = bk
                    }
                } else {
                    this.alignOnAdd = true
                }
            },
            shadow: function (y) {
                var t = [],
                    bc = this.element,
                    bb = this.renderer,
                    ad, ab = bc.style,
                    V, L = bc.path;
                if ("" + bc.path === "") {
                    L = "x"
                }
                if (y) {
                    for (y = 1; y <= 3; y++) {
                        V = ['<shape isShadow="true" strokeweight="', 7 - 2 * y, '" filled="false" path="', L, '" coordsize="100,100" style="', bc.style.cssText, '" />'];
                        ad = h(bb.prepVML(V), null, {
                            left: aa(ab.left) + 1,
                            top: aa(ab.top) + 1
                        });
                        V = ['<stroke color="black" opacity="', 0.05 * y, '"/>'];
                        h(bb.prepVML(V), null, null, ad);
                        bc.parentNode.insertBefore(ad, bc);
                        t.push(ad)
                    }
                    this.shadows = t
                }
                return this
            }
        });
        G = function () {
            this.init.apply(this, arguments)
        };
        G.prototype = s(aC.prototype, {
            isIE8: q.indexOf("MSIE 8.0") > -1,
            init: function (y, t, V) {
                var L;
                this.Element = aY;
                this.alignedObjects = [];
                L = this.createElement(o);
                y.appendChild(L.element);
                this.box = L.element;
                this.boxWrapper = L;
                this.setSize(t, V, false);
                if (!aE.namespaces.hcv) {
                    aE.namespaces.add("hcv", "urn:schemas-microsoft-com:vml");
                    aE.createStyleSheet().cssText = "hcv\\:fill, hcv\\:path, hcv\\:shape, hcv\\:stroke{ behavior:url(#default#VML); display: inline-block; } "
                }
            },
            clipRect: function (y, t, ab, V) {
                var L = this.createElement();
                return aQ(L, {
                    members: [],
                    left: y,
                    top: t,
                    width: ab,
                    height: V,
                    getCSS: function (be) {
                        var bd = this.top,
                            bc = this.left,
                            bb = bc + this.width,
                            ad = bd + this.height;
                        bd = {
                            clip: "rect(" + aj(be ? bc : bd) + "px," + aj(be ? ad : bb) + "px," + aj(be ? bb : ad) + "px," + aj(be ? bd : bc) + "px)"
                        };
                        !be && aT && aQ(bd, {
                            width: bb + aX,
                            height: ad + aX
                        });
                        return bd
                    },
                    updateClipping: function () {
                        P(L.members, function (ad) {
                            ad.css(L.getCSS(ad.inverted))
                        })
                    }
                })
            },
            color: function (bg, bf, be) {
                var bc, bb = /^rgba/;
                if (bg && bg.linearGradient) {
                    var ad, ab, V = bg.linearGradient,
                        L, y, t, bd;
                    P(bg.stops, function (bi, bh) {
                        if (bb.test(bi[1])) {
                            bc = ai(bi[1]);
                            ad = bc.get("rgb");
                            ab = bc.get("a")
                        } else {
                            ad = bi[1];
                            ab = 1
                        }
                        if (bh) {
                            t = ad;
                            bd = ab
                        } else {
                            L = ad;
                            y = ab
                        }
                    });
                    bg = 90 - aV.atan((V[3] - V[1]) / (V[2] - V[0])) * 180 / aD;
                    be = ["<", be, ' colors="0% ', L, ",100% ", t, '" angle="', bg, '" opacity="', bd, '" o:opacity2="', y, '" type="gradient" focus="100%" />'];
                    h(this.prepVML(be), null, null, bf)
                } else {
                    if (bb.test(bg) && bf.tagName != "IMG") {
                        bc = ai(bg);
                        be = ["<", be, ' opacity="', bc.get("a"), '"/>'];
                        h(this.prepVML(be), null, null, bf);
                        return bc.get("rgb")
                    } else {
                        return bg
                    }
                }
            },
            prepVML: function (y) {
                var t = this.isIE8;
                y = y.join("");
                if (t) {
                    y = y.replace("/>", ' xmlns="urn:schemas-microsoft-com:vml" />');
                    y = y.indexOf('style="') == -1 ? y.replace("/>", ' style="display:inline-block;behavior:url(#default#VML);" />') : y.replace('style="', 'style="display:inline-block;behavior:url(#default#VML);')
                } else {
                    y = y.replace("<", "<hcv:")
                }
                return y
            },
            text: function (y, t, V) {
                var L = u.chart.style;
                return this.createElement("span").attr({
                    text: y,
                    x: aj(t),
                    y: aj(V)
                }).css({
                    whiteSpace: "nowrap",
                    fontFamily: L.fontFamily,
                    fontSize: L.fontSize
                })
            },
            path: function (t) {
                return this.createElement("shape").attr({
                    coordsize: "100 100",
                    d: t
                })
            },
            circle: function (y, t, L) {
                return this.path(this.symbols.circle(y, t, L))
            },
            g: function (y) {
                var t;
                if (y) {
                    t = {
                        className: ax + y,
                        "class": ax + y
                    }
                }
                return this.createElement(o).attr(t)
            },
            image: function (y, t, ad, ab, V) {
                var L = this.createElement("img").attr({
                    src: y
                });
                arguments.length > 1 && L.css({
                    left: t,
                    top: ad,
                    width: ab,
                    height: V
                });
                return L
            },
            rect: function (y, t, bb, ad, ab, V) {
                if (arguments.length > 1) {
                    var L = (V || 0) % 2 / 2;
                    y = aj(y || 0) + L;
                    t = aj(t || 0) + L;
                    bb = aj((bb || 0) - 2 * L);
                    ad = aj((ad || 0) - 2 * L)
                }
                if (Z(y)) {
                    t = y.y;
                    bb = y.width;
                    ad = y.height;
                    ab = y.r;
                    y = y.x
                }
                return this.symbol("rect", y || 0, t || 0, ab || 0, {
                    width: bb || 0,
                    height: ad || 0
                })
            },
            invertChild: function (y, t) {
                var L = t.style;
                p(y, {
                    flip: "x",
                    left: aa(L.width) - 10,
                    top: aa(L.height) - 10,
                    rotation: -90
                })
            },
            symbols: {
                arc: function (be, bd, bc, bb) {
                    var ad = bb.start,
                        ab = bb.end,
                        V = af(ad),
                        L = aU(ad),
                        y = af(ab),
                        t = aU(ab);
                    bb = bb.innerR;
                    if (ab - ad === 0) {
                        return ["x"]
                    } else {
                        if (ab - ad == 2 * aD) {
                            y = -0.07 / bc
                        }
                    }
                    return ["wa", be - bc, bd - bc, be + bc, bd + bc, be + bc * V, bd + bc * L, be + bc * y, bd + bc * t, "at", be - bb, bd - bb, be + bb, bd + bb, be + bb * y, bd + bb * t, be + bb * V, bd + bb * L, "x", "e"]
                },
                circle: function (y, t, L) {
                    return ["wa", y - L, t - L, y + L, t + L, y + L, t, y + L, t, "e"]
                },
                rect: function (y, t, bb, ad) {
                    var ab = ad.width;
                    ad = ad.height;
                    var V = y + ab,
                        L = t + ad;
                    bb = au(bb, ab, ad);
                    return [O, y + bb, t, aK, V - bb, t, "wa", V - 2 * bb, t, V, t + 2 * bb, V - bb, t, V, t + bb, aK, V, L - bb, "wa", V - 2 * bb, L - 2 * bb, V, L, V, L - bb, V - bb, L, aK, y + bb, L, "wa", y, L - 2 * bb, y + 2 * bb, L, y + bb, L, y, L - bb, aK, y, t + bb, "wa", y, t, y + 2 * bb, t + 2 * bb, y, t + bb, y + bb, t, "x", "e"]
                }
            }
        })
    }
    var H = a ? aC : G;
    aL.prototype.callbacks = [];
    var aA = function () {};
    aA.prototype = {
        init: function (y, t) {
            var L;
            this.series = y;
            this.applyOptions(t);
            this.pointAttr = {};
            if (y.options.colorByPoint) {
                L = y.chart.options.colors;
                if (!this.options) {
                    this.options = {}
                }
                this.color = this.options.color = this.color || L[aP++];
                if (aP >= L.length) {
                    aP = 0
                }
            }
            y.chart.pointCount++;
            return this
        },
        applyOptions: function (y) {
            var t = this.series;
            this.config = y;
            if (am(y) || y === null) {
                this.y = y
            } else {
                if (Z(y) && !am(y.length)) {
                    aQ(this, y);
                    this.options = y
                } else {
                    if (aw(y[0])) {
                        this.name = y[0];
                        this.y = y[1]
                    } else {
                        if (am(y[0])) {
                            this.x = y[0];
                            this.y = y[1]
                        }
                    }
                }
            }
            if (this.x === J) {
                this.x = t.autoIncrement()
            }
        },
        destroy: function () {
            var y = this,
                t = y.series,
                L;
            t.chart.pointCount--;
            y == t.chart.hoverPoint && y.onMouseOut();
            t.chart.hoverPoints = null;
            aJ(y);
            P(["graphic", "tracker", "group", "dataLabel", "connector"], function (V) {
                y[V] && y[V].destroy()
            });
            y.legendItem && y.series.chart.legend.destroyItem(y);
            for (L in y) {
                y[L] = null
            }
        },
        select: function (y, t) {
            var V = this,
                L = V.series.chart;
            V.selected = y = N(y, !V.selected);
            V.firePointEvent(y ? "select" : "unselect");
            V.setState(y && "select");
            t || P(L.getSelectedPoints(), function (ab) {
                if (ab.selected && ab != V) {
                    ab.selected = false;
                    ab.setState(S);
                    ab.firePointEvent("unselect")
                }
            })
        },
        onMouseOver: function () {
            var y = this.series.chart,
                t = y.tooltip,
                L = y.hoverPoint;
            L && L != this && L.onMouseOut();
            this.firePointEvent("mouseOver");
            t && !t.shared && t.refresh(this);
            this.setState(c);
            y.hoverPoint = this
        },
        onMouseOut: function () {
            this.firePointEvent("mouseOut");
            this.setState();
            this.series.chart.hoverPoint = null
        },
        tooltipFormatter: function (y) {
            var t = this.series;
            return ['<span style="color:' + t.color + '">', this.name || t.name, "</span>: ", !y ? "<b>x = " + (this.name || this.x) + ",</b> " : "", "<b>", !y ? "y = " : "", this.y, "</b><br/>"].join("")
        },
        update: function (y, t, ad) {
            var ab = this,
                V = ab.series,
                L = V.chart;
            F(ad, L);
            t = N(t, true);
            ab.firePointEvent("update", {
                options: y
            }, function () {
                ab.applyOptions(y);
                V.isDirty = true;
                t && L.redraw()
            })
        },
        remove: function (y, t) {
            var ad = this,
                ab = ad.series,
                V = ab.chart,
                L = ab.data;
            F(t, V);
            y = N(y, true);
            ad.firePointEvent("remove", null, function () {
                aM(L, ad);
                ad.destroy();
                ab.isDirty = true;
                y && V.redraw()
            })
        },
        firePointEvent: function (y, t, ab) {
            var V = this,
                L = this.series.options;
            if (L.point.events[y] || V.options && V.options.events && V.options.events[y]) {
                this.importEvents()
            }
            if (y == "click" && L.allowPointSelect) {
                ab = function (ad) {
                    V.select(null, ad.ctrlKey || ad.metaKey || ad.shiftKey)
                }
            }
            ac(this, y, t, ab)
        },
        importEvents: function () {
            if (!this.hasImportedEvents) {
                var y = s(this.series.options.point, this.options).events,
                    t;
                this.events = y;
                for (t in y) {
                    ag(this, t, y[t])
                }
                this.hasImportedEvents = true
            }
        },
        setState: function (bd) {
            var bc = this.series,
                bb = bc.options.states,
                ad = I[bc.type].marker && bc.options.marker,
                ab = ad && !ad.enabled,
                V = (ad = ad && ad.states[bd]) && ad.enabled === false,
                L = bc.stateMarkerGraphic,
                y = bc.chart,
                t = this.pointAttr;
            bd || (bd = S);
            if (!(bd == this.state || this.selected && bd != "select" || bb[bd] && bb[bd].enabled === false || bd && (V || ab && !ad.enabled))) {
                if (this.graphic) {
                    this.graphic.attr(t[bd])
                } else {
                    if (bd) {
                        if (!L) {
                            bc.stateMarkerGraphic = L = y.renderer.circle(0, 0, t[bd].r).attr(t[bd]).add(bc.group)
                        }
                        L.translate(this.plotX, this.plotY)
                    }
                    if (L) {
                        L[bd ? "show" : "hide"]()
                    }
                }
                this.state = bd
            }
        }
    };
    var a5 = function () {};
    a5.prototype = {
        isCartesian: true,
        type: "line",
        pointClass: aA,
        pointAttrToOptions: {
            stroke: "lineColor",
            "stroke-width": "lineWidth",
            fill: "fillColor",
            r: "radius"
        },
        init: function (y, t) {
            var V, L;
            L = y.series.length;
            this.chart = y;
            t = this.setOptions(t);
            aQ(this, {
                index: L,
                options: t,
                name: t.name || "Series " + (L + 1),
                state: S,
                pointAttr: {},
                visible: t.visible !== false,
                selected: t.selected === true
            });
            L = t.events;
            for (V in L) {
                ag(this, V, L[V])
            }
            if (L && L.click || t.point && t.point.events && t.point.events.click || t.allowPointSelect) {
                y.runTrackerClick = true
            }
            this.getColor();
            this.getSymbol();
            this.setData(t.data, false)
        },
        autoIncrement: function () {
            var y = this.options,
                t = this.xIncrement;
            t = N(t, y.pointStart, 0);
            this.pointInterval = N(this.pointInterval, y.pointInterval, 1);
            this.xIncrement = t + this.pointInterval;
            return t
        },
        cleanData: function () {
            var y = this.chart,
                t = this.data,
                bb, ad, ab = y.smallestInterval,
                V, L;
            t.sort(function (bd, bc) {
                return bd.x - bc.x
            });
            for (L = t.length - 1; L >= 0; L--) {
                t[L - 1] && t[L - 1].x == t[L].x && t.splice(L - 1, 1)
            }
            for (L = t.length - 1; L >= 0; L--) {
                if (t[L - 1]) {
                    V = t[L].x - t[L - 1].x;
                    if (ad === J || V < ad) {
                        ad = V;
                        bb = L
                    }
                }
            }
            if (ab === J || ad < ab) {
                y.smallestInterval = ad
            }
            this.closestPoints = bb
        },
        getSegments: function () {
            var y = -1,
                t = [],
                L = this.data;
            P(L, function (ab, V) {
                if (ab.y === null) {
                    V > y + 1 && t.push(L.slice(y + 1, V));
                    y = V
                } else {
                    V == L.length - 1 && t.push(L.slice(y + 1, V + 1))
                }
            });
            this.segments = t
        },
        setOptions: function (y) {
            var t = this.chart.options.plotOptions;
            return s(t[this.type], t.series, y)
        },
        getColor: function () {
            var t = this.chart.options.colors;
            this.color = this.options.color || t[aP++] || "#0000ff";
            if (aP >= t.length) {
                aP = 0
            }
        },
        getSymbol: function () {
            var t = this.chart.options.symbols;
            this.symbol = this.options.marker.symbol || t[M++];
            if (M >= t.length) {
                M = 0
            }
        },
        addPoint: function (y, t, bc, bb) {
            var ad = this.data,
                ab = this.graph,
                V = this.area,
                L = this.chart;
            y = (new this.pointClass).init(this, y);
            F(bb, L);
            if (ab && bc) {
                ab.shift = bc
            }
            if (V) {
                V.shift = bc;
                V.isArea = true
            }
            t = N(t, true);
            ad.push(y);
            bc && ad[0].remove(false);
            this.isDirty = true;
            t && L.redraw()
        },
        setData: function (y, t) {
            var bb = this,
                ad = bb.data,
                ab = bb.initialColor,
                V = bb.chart,
                L = ad && ad.length || 0;
            bb.xIncrement = null;
            if (an(ab)) {
                aP = ab
            }
            for (y = C(at(y || []), function (bc) {
                return (new bb.pointClass).init(bb, bc)
            }); L--;) {
                ad[L].destroy()
            }
            bb.data = y;
            bb.cleanData();
            bb.getSegments();
            bb.isDirty = true;
            V.isDirtyBox = true;
            N(t, true) && V.redraw(false)
        },
        remove: function (y, t) {
            var V = this,
                L = V.chart;
            y = N(y, true);
            if (!V.isRemoving) {
                V.isRemoving = true;
                ac(V, "remove", null, function () {
                    V.destroy();
                    L.isDirtyLegend = L.isDirtyBox = true;
                    y && L.redraw(t)
                })
            }
            V.isRemoving = false
        },
        translate: function () {
            for (var bf = this.chart, be = this.options.stacking, bd = this.xAxis.categories, bc = this.yAxis, bb = this.data, ad = bb.length; ad--;) {
                var ab = bb[ad],
                    V = ab.x,
                    L = ab.y,
                    y = ab.low,
                    t = bc.stacks[(L < 0 ? "-" : "") + this.stackKey];
                ab.plotX = this.xAxis.translate(V);
                if (be && this.visible && t[V]) {
                    y = t[V];
                    V = y.total;
                    y.cum = y = y.cum - L;
                    L = y + L;
                    if (be == "percent") {
                        y = V ? y * 100 / V : 0;
                        L = V ? L * 100 / V : 0
                    }
                    ab.percentage = V ? ab.y * 100 / V : 0;
                    ab.stackTotal = V
                }
                if (an(y)) {
                    ab.yBottom = bc.translate(y, 0, 1)
                }
                if (L !== null) {
                    ab.plotY = bc.translate(L, 0, 1)
                }
                ab.clientX = bf.inverted ? bf.plotHeight - ab.plotX : ab.plotX;
                ab.category = bd && bd[ab.x] !== J ? bd[ab.x] : ab.x
            }
        },
        setTooltipPoints: function (y) {
            var t = this.chart,
                bc = t.inverted,
                bb = [],
                ad = aj((bc ? t.plotTop : t.plotLeft) + t.plotSizeX),
                ab, V, L = [];
            if (y) {
                this.tooltipPoints = null
            }
            P(this.segments, function (bd) {
                bb = bb.concat(bd)
            });
            if (this.xAxis && this.xAxis.reversed) {
                bb = bb.reverse()
            }
            P(bb, function (be, bd) {
                ab = bb[bd - 1] ? bb[bd - 1].high + 1 : 0;
                for (V = be.high = bb[bd + 1] ? ba((be.plotX + (bb[bd + 1] ? bb[bd + 1].plotX : ad)) / 2) : ad; ab <= V;) {
                    L[bc ? ad - ab++ : ab++] = be
                }
            });
            this.tooltipPoints = L
        },
        onMouseOver: function () {
            var y = this.chart,
                t = y.hoverSeries;
            if (!(!a7 && y.mouseIsDown)) {
                t && t != this && t.onMouseOut();
                this.options.events.mouseOver && ac(this, "mouseOver");
                this.tracker && this.tracker.toFront();
                this.setState(c);
                y.hoverSeries = this
            }
        },
        onMouseOut: function () {
            var y = this.options,
                t = this.chart,
                V = t.tooltip,
                L = t.hoverPoint;
            L && L.onMouseOut();
            this && y.events.mouseOut && ac(this, "mouseOut");
            V && !y.stickyTracking && V.hide();
            this.setState();
            t.hoverSeries = null
        },
        animate: function (y) {
            var t = this.chart,
                V = this.clipRect,
                L = this.options.animation;
            if (L && !Z(L)) {
                L = {}
            }
            if (y) {
                if (!V.isAnimating) {
                    V.attr("width", 0);
                    V.isAnimating = true
                }
            } else {
                V.animate({
                    width: t.plotSizeX
                }, L);
                this.animate = null
            }
        },
        drawPoints: function () {
            var bd, bc = this.data,
                bb = this.chart,
                ad, ab, V, L, y, t;
            if (this.options.marker.enabled) {
                for (V = bc.length; V--;) {
                    L = bc[V];
                    ad = L.plotX;
                    ab = L.plotY;
                    t = L.graphic;
                    if (ab !== J && !isNaN(ab)) {
                        bd = L.pointAttr[L.selected ? "select" : S];
                        y = bd.r;
                        if (t) {
                            t.animate({
                                x: ad,
                                y: ab,
                                r: y
                            })
                        } else {
                            L.graphic = bb.renderer.symbol(N(L.marker && L.marker.symbol, this.symbol), ad, ab, y).attr(bd).add(this.group)
                        }
                    }
                }
            }
        },
        convertAttribs: function (y, t, bc, bb) {
            var ad = this.pointAttrToOptions,
                ab, V, L = {};
            y = y || {};
            t = t || {};
            bc = bc || {};
            bb = bb || {};
            for (ab in ad) {
                V = ad[ab];
                L[ab] = N(y[V], t[ab], bc[ab], bb[ab])
            }
            return L
        },
        getAttribs: function () {
            var bg = this,
                bf = I[bg.type].marker ? bg.options.marker : bg.options,
                be = bf.states,
                bc = be[c],
                bb, ad = bg.color,
                ab = {
                    stroke: ad,
                    fill: ad
                },
                V = bg.data,
                L = [],
                y, t = bg.pointAttrToOptions;
            if (bg.options.marker) {
                bc.radius = bc.radius || bf.radius + 2;
                bc.lineWidth = bc.lineWidth || bf.lineWidth + 1
            } else {
                bc.color = bc.color || ai(bc.color || ad).brighten(bc.brightness).get()
            }
            L[S] = bg.convertAttribs(bf, ab);
            P([c, "select"], function (bh) {
                L[bh] = bg.convertAttribs(be[bh], L[S])
            });
            bg.pointAttr = L;
            for (ad = V.length; ad--;) {
                ab = V[ad];
                if ((bf = ab.options && ab.options.marker || ab.options) && bf.enabled === false) {
                    bf.radius = 0
                }
                bb = false;
                if (ab.options) {
                    for (var bd in t) {
                        if (an(bf[t[bd]])) {
                            bb = true
                        }
                    }
                }
                if (bb) {
                    y = [];
                    be = bf.states || {};
                    bb = be[c] = be[c] || {};
                    if (!bg.options.marker) {
                        bb.color = ai(bb.color || ab.options.color).brighten(bb.brightness || bc.brightness).get()
                    }
                    y[S] = bg.convertAttribs(bf, L[S]);
                    y[c] = bg.convertAttribs(be[c], L[c], y[S]);
                    y.select = bg.convertAttribs(be.select, L.select, y[S])
                } else {
                    y = L
                }
                ab.pointAttr = y
            }
        },
        destroy: function () {
            var y = this,
                t = y.chart,
                ab = /\/5[0-9\.]+ Safari\//.test(q),
                V, L;
            aJ(y);
            y.legendItem && y.chart.legend.destroyItem(y);
            P(y.data, function (ad) {
                ad.destroy()
            });
            P(["area", "graph", "dataLabelsGroup", "group", "tracker"], function (ad) {
                if (y[ad]) {
                    V = ab && ad == "group" ? "hide" : "destroy";
                    y[ad][V]()
                }
            });
            if (t.hoverSeries == y) {
                t.hoverSeries = null
            }
            aM(t.series, y);
            for (L in y) {
                delete y[L]
            }
        },
        drawDataLabels: function () {
            if (this.options.dataLabels.enabled) {
                var bf = this,
                    be, bd, bc = bf.data,
                    bb = bf.options.dataLabels,
                    ad, ab = bf.dataLabelsGroup,
                    V = bf.chart,
                    L = V.inverted,
                    y = bf.type,
                    t;
                if (!ab) {
                    ab = bf.dataLabelsGroup = V.renderer.g(ax + "data-labels").attr({
                        visibility: bf.visible ? a2 : ay,
                        zIndex: 5
                    }).translate(V.plotLeft, V.plotTop).add()
                }
                t = bb.color;
                if (t == "auto") {
                    t = null
                }
                bb.style.color = N(t, bf.color);
                P(bc, function (bk) {
                    var bj = bk.barX;
                    bj = bj && bj + bk.barW / 2 || bk.plotX || -999;
                    var bh = N(bk.plotY, -999),
                        bi = bk.dataLabel,
                        bg = bb.align;
                    ad = bb.formatter.call({
                        x: bk.x,
                        y: bk.y,
                        series: bf,
                        point: bk,
                        percentage: bk.percentage,
                        total: bk.total || bk.stackTotal
                    });
                    be = (L ? V.plotWidth - bh : bj) + bb.x;
                    bd = (L ? V.plotHeight - bj : bh) + bb.y;
                    if (y == "column") {
                        be += {
                            left: -1,
                            right: 1
                        }[bg] * bk.barW / 2 || 0
                    }
                    if (bi) {
                        bi.animate({
                            x: be,
                            y: bd
                        })
                    } else {
                        if (ad) {
                            bi = bk.dataLabel = V.renderer.text(ad, be, bd).attr({
                                align: bg,
                                rotation: bb.rotation,
                                zIndex: 1
                            }).css(bb.style).add(ab)
                        }
                    }
                    L && !bb.y && bi.attr({
                        y: bd + parseInt(bi.styles.lineHeight) * 0.9 - bi.getBBox().height / 2
                    })
                })
            }
        },
        drawGraph: function () {
            var bj = this,
                bi = bj.options,
                bg = bj.graph,
                be = [],
                bd, bc = bj.area,
                bb = bj.group,
                ad = bi.lineColor || bj.color,
                ab = bi.lineWidth,

                V = bi.dashStyle,
                t, bf = bj.chart.renderer,
                bk = bj.yAxis.getThreshold(bi.threshold || 0),
                y = /^area/.test(bj.type),
                L = [],
                bh = [];
            P(bj.segments, function (bn) {
                t = [];
                P(bn, function (bp, bq) {
                    if (bj.getPointSpline) {
                        t.push.apply(t, bj.getPointSpline(bn, bp, bq))
                    } else {
                        t.push(bq ? aK : O);
                        bq && bi.step && t.push(bp.plotX, bn[bq - 1].plotY);
                        t.push(bp.plotX, bp.plotY)
                    }
                });
                if (bn.length > 1) {
                    be = be.concat(t)
                } else {
                    L.push(bn[0])
                }
                if (y) {
                    var bl = [],
                        bo, bm = t.length;
                    for (bo = 0; bo < bm; bo++) {
                        bl.push(t[bo])
                    }
                    bm == 3 && bl.push(aK, t[1], t[2]);
                    if (bi.stacking && bj.type != "areaspline") {
                        for (bo = bn.length - 1; bo >= 0; bo--) {
                            bl.push(bn[bo].plotX, bn[bo].yBottom)
                        }
                    } else {
                        bl.push(aK, bn[bn.length - 1].plotX, bk, aK, bn[0].plotX, bk)
                    }
                    bh = bh.concat(bl)
                }
            });
            bj.graphPath = be;
            bj.singlePoints = L;
            if (y) {
                bd = N(bi.fillColor, ai(bj.color).setOpacity(bi.fillOpacity || 0.75).get());
                if (bc) {
                    bc.animate({
                        d: bh
                    })
                } else {
                    bj.area = bj.chart.renderer.path(bh).attr({
                        fill: bd
                    }).add(bb)
                }
            }
            if (bg) {
                bg.animate({
                    d: be
                })
            } else {
                if (ab) {
                    bg = {
                        stroke: ad,
                        "stroke-width": ab
                    };
                    if (V) {
                        bg.dashstyle = V
                    }
                    bj.graph = bf.path(be).attr(bg).add(bb).shadow(bi.shadow)
                }
            }
        },
        render: function () {
            var y = this,
                t = y.chart,
                bc, bb, ad = y.options,
                ab = ad.animation,
                V = ab && y.animate;
            ab = V ? ab && ab.duration || 500 : 0;
            var L = y.clipRect;
            bb = t.renderer;
            if (!L) {
                L = y.clipRect = !t.hasRendered && t.clipRect ? t.clipRect : bb.clipRect(0, 0, t.plotSizeX, t.plotSizeY);
                if (!t.clipRect) {
                    t.clipRect = L
                }
            }
            if (!y.group) {
                bc = y.group = bb.g("series");
                if (t.inverted) {
                    bb = function () {
                        bc.attr({
                            width: t.plotWidth,
                            height: t.plotHeight
                        }).invert()
                    };
                    bb();
                    ag(t, "resize", bb)
                }
                bc.clip(y.clipRect).attr({
                    visibility: y.visible ? a2 : ay,
                    zIndex: ad.zIndex
                }).translate(t.plotLeft, t.plotTop).add(t.seriesGroup)
            }
            y.drawDataLabels();
            V && y.animate(true);
            y.getAttribs();
            y.drawGraph && y.drawGraph();
            y.drawPoints();
            y.options.enableMouseTracking !== false && y.drawTracker();
            V && y.animate();
            setTimeout(function () {
                L.isAnimating = false;
                if ((bc = y.group) && L != t.clipRect && L.renderer) {
                    bc.clip(y.clipRect = t.clipRect);
                    L.destroy()
                }
            }, ab);
            y.isDirty = false
        },
        redraw: function () {
            var y = this.chart,
                t = this.group;
            if (t) {
                y.inverted && t.attr({
                    width: y.plotWidth,
                    height: y.plotHeight
                });
                t.animate({
                    translateX: y.plotLeft,
                    translateY: y.plotTop
                })
            }
            this.translate();
            this.setTooltipPoints(true);
            this.render()
        },
        setState: function (y) {
            var t = this.options,
                V = this.graph,
                L = t.states;
            t = t.lineWidth;
            y = y || S;
            if (this.state != y) {
                this.state = y;
                if (!(L[y] && L[y].enabled === false)) {
                    if (y) {
                        t = L[y].lineWidth || t + 1
                    }
                    if (V && !V.dashstyle) {
                        V.attr({
                            "stroke-width": t
                        }, y ? 0 : 500)
                    }
                }
            }
        },
        setVisible: function (be, bd) {
            var bc = this.chart,
                bb = this.legendItem,
                ad = this.group,
                ab = this.tracker,
                V = this.dataLabelsGroup,
                L, y = this.data,
                t = bc.options.chart.ignoreHiddenSeries;
            L = this.visible;
            L = (this.visible = be = be === J ? !L : be) ? "show" : "hide";
            ad && ad[L]();
            if (ab) {
                ab[L]()
            } else {
                for (ad = y.length; ad--;) {
                    ab = y[ad];
                    ab.tracker && ab.tracker[L]()
                }
            }
            V && V[L]();
            bb && bc.legend.colorizeItem(this, be);
            this.isDirty = true;
            this.options.stacking && P(bc.series, function (bf) {
                if (bf.options.stacking && bf.visible) {
                    bf.isDirty = true
                }
            });
            if (t) {
                bc.isDirtyBox = true
            }
            bd !== false && bc.redraw();
            ac(this, L)
        },
        show: function () {
            this.setVisible(true)
        },
        hide: function () {
            this.setVisible(false)
        },
        select: function (t) {
            this.selected = t = t === J ? !this.selected : t;
            if (this.checkbox) {
                this.checkbox.checked = t
            }
            ac(this, t ? "select" : "unselect")
        },
        drawTracker: function () {
            var be = this,
                bd = be.options,
                bc = [].concat(be.graphPath),
                bb = bc.length,
                ad = be.chart,
                ab = ad.options.tooltip.snap,
                V = be.tracker,
                L = bd.cursor;
            L = L && {
                cursor: L
            };
            var y = be.singlePoints,
                t;
            if (bb) {
                for (t = bb + 1; t--;) {
                    bc[t] == O && bc.splice(t + 1, 0, bc[t + 1] - ab, bc[t + 2], aK);
                    if (t && bc[t] == O || t == bb) {
                        bc.splice(t, 0, aK, bc[t - 2] + ab, bc[t - 1])
                    }
                }
            }
            for (t = 0; t < y.length; t++) {
                bb = y[t];
                bc.push(O, bb.plotX - ab, bb.plotY, aK, bb.plotX + ab, bb.plotY)
            }
            if (V) {
                V.attr({
                    d: bc
                })
            } else {
                be.tracker = ad.renderer.path(bc).attr({
                    isTracker: true,
                    stroke: aB,
                    fill: aO,
                    "stroke-width": bd.lineWidth + 2 * ab,
                    visibility: be.visible ? a2 : ay,
                    zIndex: 1
                }).on(a7 ? "touchstart" : "mouseover", function () {
                    ad.hoverSeries != be && be.onMouseOver()
                }).on("mouseout", function () {
                    bd.stickyTracking || be.onMouseOut()
                }).css(L).add(ad.trackerGroup)
            }
        }
    };
    G = r(a5);
    aR.line = G;
    G = r(a5, {
        type: "area"
    });
    aR.area = G;
    G = r(a5, {
        type: "spline",
        getPointSpline: function (bg, bf, be) {
            var bc = bf.plotX,
                bb = bf.plotY,
                ad = bg[be - 1],
                ab = bg[be + 1],
                V, L, y, t;
            if (be && be < bg.length - 1) {
                bg = ad.plotY;
                y = ab.plotX;
                ab = ab.plotY;
                var bd;
                V = (1.5 * bc + ad.plotX) / 2.5;
                L = (1.5 * bb + bg) / 2.5;
                y = (1.5 * bc + y) / 2.5;
                t = (1.5 * bb + ab) / 2.5;
                bd = (t - L) * (y - bc) / (y - V) + bb - t;
                L += bd;
                t += bd;
                if (L > bg && L > bb) {
                    L = a8(bg, bb);
                    t = 2 * bb - L
                } else {
                    if (L < bg && L < bb) {
                        L = au(bg, bb);
                        t = 2 * bb - L
                    }
                }
                if (t > ab && t > bb) {
                    t = a8(ab, bb);
                    L = 2 * bb - t
                } else {
                    if (t < ab && t < bb) {
                        t = au(ab, bb);
                        L = 2 * bb - t
                    }
                }
                bf.rightContX = y;
                bf.rightContY = t
            }
            if (be) {
                bf = ["C", ad.rightContX || ad.plotX, ad.rightContY || ad.plotY, V || bc, L || bb, bc, bb];
                ad.rightContX = ad.rightContY = null
            } else {
                bf = [O, bc, bb]
            }
            return bf
        }
    });
    aR.spline = G;
    G = r(G, {
        type: "areaspline"
    });
    aR.areaspline = G;
    var aW = r(a5, {
        type: "column",
        pointAttrToOptions: {
            stroke: "borderColor",
            "stroke-width": "borderWidth",
            fill: "color",
            r: "borderRadius"
        },
        init: function () {
            a5.prototype.init.apply(this, arguments);
            var y = this,
                t = y.chart;
            t.hasColumn = true;
            t.hasRendered && P(t.series, function (L) {
                if (L.type == y.type) {
                    L.isDirty = true
                }
            })
        },
        translate: function () {
            var bj = this,
                bi = bj.chart,
                bg = 0,
                be = bj.xAxis.reversed,
                bd = bj.xAxis.categories,
                bc = {},
                bb, ad;
            a5.prototype.translate.apply(bj);
            P(bi.series, function (bm) {
                if (bm.type == bj.type) {
                    if (bm.options.stacking) {
                        bb = bm.stackKey;
                        if (bc[bb] === J) {
                            bc[bb] = bg++
                        }
                        ad = bc[bb]
                    } else {
                        ad = bg++
                    }
                    bm.columnIndex = ad
                }
            });
            var ab = bj.options,
                V = bj.data,
                t = bj.closestPoints;
            bi = aG(V[1] ? V[t].plotX - V[t - 1].plotX : bi.plotSizeX / (bd ? bd.length : 1));
            bd = bi * ab.groupPadding;
            t = (bi - 2 * bd) / bg;
            var bf = ab.pointWidth,
                bl = an(bf) ? (t - bf) / 2 : t * ab.pointPadding,
                y = N(bf, t - 2 * bl),
                L = bl + (bd + ((be ? bg - bj.columnIndex : bj.columnIndex) || 0) * t - bi / 2) * (be ? -1 : 1),
                bh = bj.yAxis.getThreshold(ab.threshold || 0),
                bk = N(ab.minPointLength, 5);
            P(V, function (bm) {
                var bs = bm.plotY,
                    bn = bm.yBottom || bh,
                    bp = bm.plotX + L,
                    br = A(au(bs, bn)),
                    bq = A(a8(bs, bn) - br),
                    bo;
                if (aG(bq) < bk) {
                    if (bk) {
                        bq = bk;
                        br = aG(br - bh) > bk ? bn - bk : bh - (bs <= bh ? bk : 0)
                    }
                    bo = br - 3
                }
                aQ(bm, {
                    barX: bp,
                    barY: br,
                    barW: y,
                    barH: bq
                });
                bm.shapeType = "rect";
                bm.shapeArgs = {
                    x: bp,
                    y: br,
                    width: y,
                    height: bq,
                    r: ab.borderRadius
                };
                bm.trackerArgs = an(bo) && s(bm.shapeArgs, {
                    height: a8(6, bq + 3),
                    y: bo
                })
            })
        },
        getSymbol: function () {},
        drawGraph: function () {},
        drawPoints: function () {
            var y = this,
                t = y.options,
                ab = y.chart.renderer,
                V, L;
            P(y.data, function (bb) {
                var ad = bb.plotY;
                if (ad !== J && !isNaN(ad)) {
                    V = bb.graphic;
                    L = bb.shapeArgs;
                    if (V) {
                        b(V);
                        V.animate(L)
                    } else {
                        bb.graphic = ab[bb.shapeType](L).attr(bb.pointAttr[bb.selected ? "select" : S]).add(y.group).shadow(t.shadow)
                    }
                }
            })
        },
        drawTracker: function () {
            var bd = this,
                bc = bd.chart,
                bb = bc.renderer,
                ad, ab, V = +new Date,
                L = bd.options.cursor,
                y = L && {
                    cursor: L
                },
                t;
            P(bd.data, function (be) {
                ab = be.tracker;
                ad = be.trackerArgs || be.shapeArgs;
                if (be.y !== null) {
                    if (ab) {
                        ab.attr(ad)
                    } else {
                        be.tracker = bb[be.shapeType](ad).attr({
                            isTracker: V,
                            fill: aB,
                            visibility: bd.visible ? a2 : ay,
                            zIndex: 1
                        }).on(a7 ? "touchstart" : "mouseover", function (bf) {
                            t = bf.relatedTarget || bf.fromElement;
                            bc.hoverSeries != bd && d(t, "isTracker") != V && bd.onMouseOver();
                            be.onMouseOver()
                        }).on("mouseout", function (bf) {
                            if (!bd.options.stickyTracking) {
                                t = bf.relatedTarget || bf.toElement;
                                d(t, "isTracker") != V && bd.onMouseOut()
                            }
                        }).css(y).add(bc.trackerGroup)
                    }
                }
            })
        },
        animate: function (y) {
            var t = this,
                L = t.data;
            if (!y) {
                P(L, function (ab) {
                    var V = ab.graphic;
                    if (V) {
                        V.attr({
                            height: 0,
                            y: t.yAxis.translate(0, 0, 1)
                        });
                        V.animate({
                            height: ab.barH,
                            y: ab.barY
                        }, t.options.animation)
                    }
                });
                t.animate = null
            }
        },
        remove: function () {
            var y = this,
                t = y.chart;
            t.hasRendered && P(t.series, function (L) {
                if (L.type == y.type) {
                    L.isDirty = true
                }
            });
            a5.prototype.remove.apply(y, arguments)
        }
    });
    aR.column = aW;
    G = r(aW, {
        type: "bar",
        init: function (t) {
            t.inverted = this.inverted = true;
            aW.prototype.init.apply(this, arguments)
        }
    });
    aR.bar = G;
    G = r(a5, {
        type: "scatter",
        translate: function () {
            var t = this;
            a5.prototype.translate.apply(t);
            P(t.data, function (y) {
                y.shapeType = "circle";
                y.shapeArgs = {
                    x: y.plotX,
                    y: y.plotY,
                    r: t.chart.options.tooltip.snap
                }
            })
        },
        drawTracker: function () {
            var y = this,
                t = y.options.cursor,
                V = t && {
                    cursor: t
                },
                L;
            P(y.data, function (ab) {
                (L = ab.graphic) && L.attr({
                    isTracker: true
                }).on("mouseover", function () {
                    y.onMouseOver();
                    ab.onMouseOver()
                }).on("mouseout", function () {
                    y.options.stickyTracking || y.onMouseOut()
                }).css(V)
            })
        },
        cleanData: function () {}
    });
    aR.scatter = G;
    G = r(aA, {
        init: function () {
            aA.prototype.init.apply(this, arguments);
            var y = this,
                t;
            aQ(y, {
                visible: y.visible !== false,
                name: N(y.name, "Slice")
            });
            t = function () {
                y.slice()
            };
            ag(y, "select", t);
            ag(y, "unselect", t);
            return y
        },
        setVisible: function (y) {
            var t = this.series.chart,
                ad = this.tracker,
                ab = this.dataLabel,
                V = this.connector,
                L;
            L = (this.visible = y = y === J ? !this.visible : y) ? "show" : "hide";
            this.group[L]();
            ad && ad[L]();
            ab && ab[L]();
            V && V[L]();
            this.legendItem && t.legend.colorizeItem(this, y)
        },
        slice: function (y, t, ab) {
            var V = this.series.chart,
                L = this.slicedTranslation;
            F(ab, V);
            N(t, true);
            y = this.sliced = an(y) ? y : !this.sliced;
            this.group.animate({
                translateX: y ? L[0] : V.plotLeft,
                translateY: y ? L[1] : V.plotTop
            })
        }
    });
    G = r(a5, {
        type: "pie",
        isCartesian: false,
        pointClass: G,
        pointAttrToOptions: {
            stroke: "borderColor",
            "stroke-width": "borderWidth",
            fill: "color"
        },
        getColor: function () {
            this.initialColor = aP
        },
        animate: function () {
            var t = this;
            P(t.data, function (y) {
                var V = y.graphic;
                y = y.shapeArgs;
                var L = -aD / 2;
                if (V) {
                    V.attr({
                        r: 0,
                        start: L,
                        end: L
                    });
                    V.animate({
                        r: y.r,
                        start: y.start,
                        end: y.end
                    }, t.options.animation)
                }
            });
            t.animate = null
        },
        translate: function () {
            var bo = 0,
                bn = -0.25,
                bm = this.options,
                bl = bm.slicedOffset,
                bk = bl + bm.borderWidth,
                bj = bm.center,
                bi = this.chart,
                bh = bi.plotWidth,
                bg = bi.plotHeight,
                bf, bd, ab, bb = this.data,
                be = 2 * aD,
                y, V = au(bh, bg),
                ad, bc, L, t = bm.dataLabels.distance;
            bj.push(bm.size, bm.innerSize || 0);
            bj = C(bj, function (bp, bq) {
                return (ad = /%$/.test(bp)) ? [bh, bg, V, V][bq] * aa(bp) / 100 : bp
            });
            this.getX = function (bp, bq) {
                ab = aV.asin((bp - bj[1]) / (bj[2] / 2 + t));
                return bj[0] + (bq ? -1 : 1) * af(ab) * (bj[2] / 2 + t)
            };
            this.center = bj;
            P(bb, function (bp) {
                bo += bp.y
            });
            P(bb, function (bp) {
                y = bo ? bp.y / bo : 0;
                bf = aj(bn * be * 1000) / 1000;
                bn += y;
                bd = aj(bn * be * 1000) / 1000;
                bp.shapeType = "arc";
                bp.shapeArgs = {
                    x: bj[0],
                    y: bj[1],
                    r: bj[2] / 2,
                    innerR: bj[3] / 2,
                    start: bf,
                    end: bd
                };
                ab = (bd + bf) / 2;
                bp.slicedTranslation = C([af(ab) * bl + bi.plotLeft, aU(ab) * bl + bi.plotTop], aj);
                bc = af(ab) * bj[2] / 2;
                L = aU(ab) * bj[2] / 2;
                bp.tooltipPos = [bj[0] + bc * 0.7, bj[1] + L * 0.7];
                bp.labelPos = [bj[0] + bc + af(ab) * t, bj[1] + L + aU(ab) * t, bj[0] + bc + af(ab) * bk, bj[1] + L + aU(ab) * bk, bj[0] + bc, bj[1] + L, t < 0 ? "center" : ab < be / 4 ? "left" : "right", ab];
                bp.percentage = y * 100;
                bp.total = bo
            });
            this.setTooltipPoints()
        },
        render: function () {
            this.getAttribs();
            this.drawPoints();
            this.options.enableMouseTracking !== false && this.drawTracker();
            this.drawDataLabels();
            this.options.animation && this.animate && this.animate();
            this.isDirty = false
        },
        drawPoints: function () {
            var y = this.chart,
                t = y.renderer,
                ad, ab, V, L;
            P(this.data, function (bb) {
                ab = bb.graphic;
                L = bb.shapeArgs;
                V = bb.group;
                if (!V) {
                    V = bb.group = t.g("point").attr({
                        zIndex: 5
                    }).add()
                }
                ad = bb.sliced ? bb.slicedTranslation : [y.plotLeft, y.plotTop];
                V.translate(ad[0], ad[1]);
                if (ab) {
                    ab.animate(L)
                } else {
                    bb.graphic = t.arc(L).attr(aQ(bb.pointAttr[S], {
                        "stroke-linejoin": "round"
                    })).add(bb.group)
                }
                bb.visible === false && bb.setVisible(false)
            })
        },
        drawDataLabels: function () {
            var bq = this.data,
                bp, bo = this.chart,
                bn = this.options.dataLabels,
                bm = N(bn.connectorPadding, 10),
                bl = N(bn.connectorWidth, 1),
                bk, bj, bi = bn.distance > 0,
                bh, bf, bb = this.center[1],
                bd = [
                    [],
                    [],
                    [],
                    []
                ],
                bg, y, ad, bc, be, L, t, V = 4,
                ab;
            a5.prototype.drawDataLabels.apply(this);
            P(bq, function (bs) {
                var br = bs.labelPos[7];
                bd[br < 0 ? 0 : br < aD / 2 ? 1 : br < aD ? 2 : 3].push(bs)
            });
            bd[1].reverse();
            bd[3].reverse();
            for (t = function (bs, br) {
                return bs.y > br.y
            }; V--;) {
                bq = 0;
                bp = [].concat(bd[V]);
                bp.sort(t);
                for (ab = bp.length; ab--;) {
                    bp[ab].rank = ab
                }
                for (bc = 0; bc < 2; bc++) {
                    bf = (L = V % 3) ? 9999 : -9999;
                    be = L ? -1 : 1;
                    for (ab = 0; ab < bd[V].length; ab++) {
                        bp = bd[V][ab];
                        if (bk = bp.dataLabel) {
                            bj = bp.labelPos;
                            ad = a2;
                            bg = bj[0];
                            y = bj[1];
                            bh || (bh = bk && bk.getBBox().height);
                            if (bi) {
                                if (bc && bp.rank < bq) {
                                    ad = ay
                                } else {
                                    if (!L && y < bf + bh || L && y > bf - bh) {
                                        y = bf + be * bh;
                                        bg = this.getX(y, V > 1);
                                        if (!L && y + bh > bb || L && y - bh < bb) {
                                            if (bc) {
                                                ad = ay
                                            } else {
                                                bq++
                                            }
                                        }
                                    }
                                }
                            }
                            if (bp.visible === false) {
                                ad = ay
                            }
                            if (ad == a2) {
                                bf = y
                            }
                            if (bc) {
                                bk.attr({
                                    visibility: ad,
                                    align: bj[6]
                                })[bk.moved ? "animate" : "attr"]({
                                    x: bg + bn.x + ({
                                        left: bm,
                                        right: -bm
                                    }[bj[6]] || 0),
                                    y: y + bn.y
                                });
                                bk.moved = true;
                                if (bi && bl) {
                                    bk = bp.connector;
                                    bj = [O, bg + (bj[6] == "left" ? 5 : -5), y, aK, bg, y, aK, bj[2], bj[3], aK, bj[4], bj[5]];
                                    if (bk) {
                                        bk.animate({
                                            d: bj
                                        });
                                        bk.attr("visibility", ad)
                                    } else {
                                        bp.connector = bk = this.chart.renderer.path(bj).attr({
                                            "stroke-width": bl,
                                            stroke: bn.connectorColor || "#606060",
                                            visibility: ad,
                                            zIndex: 3
                                        }).translate(bo.plotLeft, bo.plotTop).add()
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        drawTracker: aW.prototype.drawTracker,
        getSymbol: function () {}
    });
    aR.pie = G;
    aq.Highcharts = {
        Chart: aL,
        dateFormat: a9,
        pathAnim: f,
        getOptions: function () {
            return u
        },
        numberFormat: a3,
        Point: aA,
        Color: ai,
        Renderer: H,
        seriesTypes: aR,
        setOptions: function (t) {
            u = s(u, t);
            aH();
            return u
        },
        Series: a5,
        addEvent: ag,
        createElement: h,
        discardElement: k,
        css: p,
        each: P,
        extend: aQ,
        map: C,
        merge: s,
        pick: N,
        extendClass: r,
        version: "2.1.2"
    }
})();
(function () {
    var b = BLOOMBERG.namespace("nonstop_news");
    var f = BLOOMBERG.bbswitch;
    var d = "nsn_active_p";
    var a = {};
    var c = typeof (QUnit) != "undefined";
    b.internal_obj = a;
    a.nonstop_news_queue = [];
    a.get_data_interval = 30000;
    a.add_story_interval = 7000;
    a.update_ago_time_interval = 30000;
    a.last_get_data_date = new Date();
    a.last_add_story_date = new Date();
    a.last_update_ago_time_date = new Date(0);
    a.execute_interval = 2000;
    a.maximum_num_of_records = 6;
    a.refetch_data_threshold = 3;
    a.latest_story_time = new Date(0);
    a.update_t = null;
    a.paused = !f.get(d);

    function e() {
        if (a.paused) {
            $("#non_stop_news_module_container").removeClass("non_stop_news_header");
            $("#non_stop_news_module_container").addClass("more_top_news_header")
        } else {
            $("#non_stop_news_module_container").removeClass("more_top_news_header");
            $("#non_stop_news_module_container").addClass("non_stop_news_header")
        }
    }
    b.pause = function () {
        a.paused = true
    };
    b.resume = function () {
        a.paused = false
    };
    b.register_events = function () {
        e();
        $("#non_stop_news_module h3.more_top_news_header").click(function () {
            a.paused = true;
            f.set(d, false);
            BLOOMBERG.tracker.EVENTTRACK.record("Module Link Tracking", "Headlines tab click", "");
            a.debug_info("status changed to:paused=>" + a.paused.toString());
            return false
        });
        $("#non_stop_news_module h3.non_stop_news_header").click(function () {
            a.paused = false;
            f.set(d, true);
            BLOOMBERG.tracker.EVENTTRACK.record("Module Link Tracking", "NSN tab click", "");
            a.debug_info("status changed to:paused=>" + a.paused.toString());
            return false
        });
        $("#non_stop_stories_container").mouseover(function () {
            a.paused = true;
            a.debug_info("status changed to:paused=>" + a.paused.toString())
        });
        $("#non_stop_stories_container").mouseout(function () {
            a.paused = false;
            a.debug_info("status changed to:paused=>" + a.paused.toString())
        })
    };
    b.initialize = function (g) {
        var h = {
            number_of_stories: 6
        };
        $.extend(h, g);
        a.maximum_num_of_records = h.number_of_stories
    };
    b.start_nonstop_stories = function () {
        a.set_existing_latest_story_time();
        if (!a.paused) {
            var g;
            g = new Date();
            if (g - a.last_update_ago_time_date >= a.update_ago_time_interval) {
                a.update_ago_time();
                a.last_update_ago_time_date = new Date()
            }
            if (g - a.last_add_story_date >= a.add_story_interval) {
                a.push_story_to_ui()
            }
            if (a.nonstop_news_queue.length <= a.refetch_data_threshold) {
                a.fill_non_stop_stories()
            }
        } else {
            a.debug_info("paused...")
        }
        if (a.update_t) {
            clearTimeout(a.update_t)
        }
        a.update_t = setTimeout(b.start_nonstop_stories, a.execute_interval)
    };
    a.debug_info = function (g) {};
    a.get_ago_time_format = BLOOMBERG.date.ago_time_format;
    a.get_story_hash_from_array = function (h) {
        var j = {};
        for (var k = 0; k < h.length; k++) {
            var g = h[k];
            j[g.suid] = g
        }
        return j
    };
    a.get_date_from_number = function (g) {
        return new Date(1000 * g)
    };
    a.get_number_from_date = function (g) {
        return Math.floor(g.getTime() / 1000)
    };
    a.set_existing_latest_story_time = function () {
        var g = a.nonstop_news_queue.concat(a.get_existing_stories());
        if (g.length > 0) {
            a.debug_info("before:" + a.latest_story_time.toString());
            a.latest_story_time = g[0].story_time;
            a.debug_info(g[0]);
            a.debug_info("after:" + a.latest_story_time.toString())
        }
    };
    a.push_story_to_ui = function () {
        var h;
        h = a.get_existing_stories();
        var k = a.get_story_hash_from_array(h);
        if (a.nonstop_news_queue.length > 0) {
            var g = a.nonstop_news_queue.pop();
            a.debug_info("popping story from queue:" + g.headline);
            a.remove_story_from_ui(g.suid);
            a.prepend_story_to_ui(g);
            a.last_add_story_date = new Date()
        }
        h = a.get_existing_stories();
        for (var j = a.maximum_num_of_records; j < h.length; j++) {
            a.remove_story_from_ui(h[j].suid);
            a.debug_info("removing story from ui: " + h[j].headline)
        }
    };
    a.get_existing_story_hash = function () {
        var j = {};
        var h = a.nonstop_news_queue.concat(a.get_existing_stories());
        for (var m = 0; m < h.length; m++) {
            var g = h[m];
            var k = g.suid + "|" + Math.floor(g.story_time.getTime() / 1000);
            j[k] = g
        }
        return j
    };
    a.get_stories_from_service = function (g) {
        $.getJSON("/rapi/homepage/non_stop_news", g)
    };
    a.fill_non_stop_stories = function () {
        var g = new Date();
        if (g - a.last_get_data_date < a.get_data_interval) {
            a.debug_info("less than interval, continue");
            return
        }
        a.debug_info("trying to get story...");
        a.debug_info(g - a.last_get_data_date);
        a.last_get_data_date = new Date();
        var h = a.get_existing_story_hash();
        a.get_stories_from_service(function (n) {
            var m = [];
            while (n.length > 0) {
                var i = n.pop();
                var o = a.get_date_from_number(i.story_time_int);
                var j = a.get_date_from_number(i.story_created_at);
                i.story_time = o;
                i.story_created_at = j;
                delete i.story_time_int;
                if (i.story_time > a.latest_story_time) {
                    m.unshift(i)
                } else {
                    if (i.story_time.getTime() == a.latest_story_time.getTime()) {
                        var k = i.suid + "|" + Math.floor(i.story_time.getTime() / 1000);
                        if (!h[k]) {
                            m.unshift(i)
                        }
                    }
                }
            }
            if (m.length > 0) {
                a.latest_story_time = m[0].story_time
            }
            a.nonstop_news_queue = m.concat(a.nonstop_news_queue)
        })
    };
    a.get_ago_time_format_extended = function (n, h) {
        var g = parseInt(n),
            k = parseInt(h),
            i = a.get_date_from_number(n),
            m = a.get_ago_time_format(i),
            j;
        if (m !== "") {
            if (g - k <= 15) {
                j = "Published " + m
            } else {
                j = "Updated " + m
            }
        }
        return j
    };
    a.update_ago_time = function () {
        $("#non_stop_stories_container .news_group .story_link").each(function (h) {
            var g = $(this).attr("story_time_int"),
                j = $(this).attr("story_created_at"),
                i = a.get_ago_time_format_extended(g, j);
            $(this).parent().find(".timestamp").html(i)
        })
    };
    a.prepend_story_to_ui = function (g) {
        var h = $("<div>").addClass("news_item exclusive clearfix bar");
        var m = $("<a>").addClass("story_link bar"),
            n = a.get_number_from_date(g.story_time),
            i = a.get_number_from_date(g.story_created_at);
        m.attr("href", g.url).html(g.headline);
        m.addClass("q");
        m.attr("data-type", "Story");
        m.attr("data-id", g.suid);
        m.attr("suid", g.suid).attr("story_time_int", n);
        m.attr("suid", g.suid).attr("story_created_at", i);
        var k = a.get_ago_time_format_extended(n, i);
        m.attr("onmousedown", 'return $(this).dynamicModuleLinkTracking("non_stop_stories_container", true);');
        h.append(m);
        h.append($("<p>").addClass("timestamp").html(k));
        var j = $("<li>").append(h).hide();
        $("#non_stop_stories_container .news_group").prepend(j);
        j.slideDown(400, function () {
            $(this).effect("highlight", {}, 5000)
        });
        if (BLOOMBERG.queue) {
            BLOOMBERG.queue.refresh_icon("#non_stop_stories_container")
        }
    };
    a.get_existing_stories = function () {
        var g = [];
        $("#non_stop_stories_container .news_group .story_link").each(function (h) {
            g.push({
                url: $(this).attr("href"),
                suid: $(this).attr("suid"),
                headline: $.trim($(this).html()),
                story_time: a.get_date_from_number($(this).attr("story_time_int")),
                story_created_at: a.get_date_from_number($(this).attr("story_created_at"))
            })
        });
        return g
    };
    a.re
