function H() {
    var x = navigator && navigator.userAgent && /\bMSIE 6\./.test(navigator.userAgent);
    H = function () {
        return x
    };
    return x
}(function () {
    function x(b) {
        b = b.split(/ /g);
        var a = {};
        for (var c = b.length; --c >= 0;) {
            var d = b[c];
            if (d) a[d] = null
        }
        return a
    }
    var y = "break continue do else for if return while ",
        U = y + "auto case char const default double enum extern float goto int long register short signed sizeof static struct switch typedef union unsigned void volatile ",
        D = U + "catch class delete false import new operator private protected public this throw true try ",
        I = D + "alignof align_union asm axiom bool concept concept_map const_cast constexpr decltype dynamic_cast explicit export friend inline late_check mutable namespace nullptr reinterpret_cast static_assert static_cast template typeid typename typeof using virtual wchar_t where ",
        J = D + "boolean byte extends final finally implements import instanceof null native package strictfp super synchronized throws transient ",
        V = J + "as base by checked decimal delegate descending event fixed foreach from group implicit in interface internal into is lock object out override orderby params readonly ref sbyte sealed stackalloc string select uint ulong unchecked unsafe ushort var ",
        K = D + "debugger eval export function get null set undefined var with Infinity NaN ",
        L = "caller delete die do dump elsif eval exit foreach for goto if import last local my next no our print package redo require sub undef unless until use wantarray while BEGIN END ",
        M = y + "and as assert class def del elif except exec finally from global import in is lambda nonlocal not or pass print raise try with yield False True None ",
        N = y + "alias and begin case class def defined elsif end ensure false in module next nil not or redo rescue retry self super then true undef unless until when yield BEGIN END ",
        O = y + "case done elif esac eval fi function in local set then until ",
        W = I + V + K + L + M + N + O;

    function X(b) {
        return b >= "a" && b <= "z" || b >= "A" && b <= "Z"
    }
    function u(b, a, c, d) {
        b.unshift(c, d || 0);
        try {
            a.splice.apply(a, b)
        } finally {
            b.splice(0, 2)
        }
    }
    var Y = (function () {
        var b = ["!", "!=", "!==", "#", "%", "%=", "&", "&&", "&&=", "&=", "(", "*", "*=", "+=", ",", "-=", "->", "/", "/=", ":", "::", ";", "<", "<<", "<<=", "<=", "=", "==", "===", ">", ">=", ">>", ">>=", ">>>", ">>>=", "?", "@", "[", "^", "^=", "^^", "^^=", "{", "|", "|=", "||", "||=", "~", "break", "case", "continue", "delete", "do", "else", "finally", "instanceof", "return", "throw", "try", "typeof"],
            a = "(?:(?:(?:^|[^0-9.])\\.{1,3})|(?:(?:^|[^\\+])\\+)|(?:(?:^|[^\\-])-)";
        for (var c = 0; c < b.length; ++c) {
            var d = b[c];
            a += X(d.charAt(0)) ? "|\\b" + d : "|" + d.replace(/([^=<>:&])/g, "\\$1")
        }
        a += "|^)\\s*$";
        return new RegExp(a)
    })(),
        P = /&/g,
        Q = /</g,
        R = />/g,
        Z = /\"/g;

    function $(b) {
        return b.replace(P, "&amp;").replace(Q, "&lt;").replace(R, "&gt;").replace(Z, "&quot;")
    }
    function E(b) {
        return b.replace(P, "&amp;").replace(Q, "&lt;").replace(R, "&gt;")
    }
    var aa = /&lt;/g,
        ba = /&gt;/g,
        ca = /&apos;/g,
        da = /&quot;/g,
        ea = /&amp;/g,
        fa = /&nbsp;/g;

    function ga(b) {
        var a = b.indexOf("&");
        if (a < 0) return b;
        for (--a;
        (a = b.indexOf("&#", a + 1)) >= 0;) {
            var c = b.indexOf(";", a);
            if (c >= 0) {
                var d = b.substring(a + 3, c),
                    g = 10;
                if (d && d.charAt(0) === "x") {
                    d = d.substring(1);
                    g = 16
                }
                var e = parseInt(d, g);
                if (!isNaN(e)) b = b.substring(0, a) + String.fromCharCode(e) + b.substring(c + 1)
            }
        }
        return b.replace(aa, "<").replace(ba, ">").replace(ca, "'").replace(da, '"').replace(ea, "&").replace(fa, " ")
    }
    function S(b) {
        return "XMP" === b.tagName
    }

    function z(b, a) {
        switch (b.nodeType) {
        case 1:
            var c = b.tagName.toLowerCase();
            a.push("<", c);
            for (var d = 0; d < b.attributes.length; ++d) {
                var g = b.attributes[d];
                if (!g.specified) continue;
                a.push(" ");
                z(g, a)
            }
            a.push(">");
            for (var e = b.firstChild; e; e = e.nextSibling) z(e, a);
            if (b.firstChild || !/^(?:br|link|img)$/.test(c)) a.push("</", c, ">");
            break;
        case 2:
            a.push(b.name.toLowerCase(), '="', $(b.value), '"');
            break;
        case 3:
        case 4:
            a.push(E(b.nodeValue));
            break
        }
    }
    var F = null;

    function ha(b) {
        if (null === F) {
            var a = document.createElement("PRE");
            a.appendChild(document.createTextNode('<!DOCTYPE foo PUBLIC "foo bar">\n<foo />'));
            F = !/</.test(a.innerHTML)
        }
        if (F) {
            var c = b.innerHTML;
            if (S(b)) c = E(c);
            return c
        }
        var d = [];
        for (var g = b.firstChild; g; g = g.nextSibling) z(g, d);
        return d.join("")
    }
    function ia(b) {
        var a = 0;
        return function (c) {
            var d = null,
                g = 0;
            for (var e = 0, h = c.length; e < h; ++e) {
                var f = c.charAt(e);
                switch (f) {
                case "\t":
                    if (!d) d = [];
                    d.push(c.substring(g, e));
                    var i = b - a % b;
                    a += i;
                    for (; i >= 0; i -= "  ".length) d.push("  ".substring(0, i));
                    g = e + 1;
                    break;
                case "\n":
                    a = 0;
                    break;
                default:
                    ++a
                }
            }
            if (!d) return c;
            d.push(c.substring(g));
            return d.join("")
        }
    }
    var ja = /(?:[^<]+|<!--[\s\S]*?--\>|<!\[CDATA\[([\s\S]*?)\]\]>|<\/?[a-zA-Z][^>]*>|<)/g,
        ka = /^<!--/,
        la = /^<\[CDATA\[/,
        ma = /^<br\b/i;

    function na(b) {
        var a = b.match(ja),
            c = [],
            d = 0,
            g = [];
        if (a) for (var e = 0, h = a.length; e < h; ++e) {
            var f = a[e];
            if (f.length > 1 && f.charAt(0) === "<") {
                if (ka.test(f)) continue;
                if (la.test(f)) {
                    c.push(f.substring(9, f.length - 3));
                    d += f.length - 12
                } else if (ma.test(f)) {
                    c.push("\n");
                    ++d
                } else g.push(d, f)
            } else {
                var i = ga(f);
                c.push(i);
                d += i.length
            }
        }
        return {
            source: c.join(""),
            tags: g
        }
    }
    function v(b, a) {
        var c = {};
        (function () {
            var g = b.concat(a);
            for (var e = g.length; --e >= 0;) {
                var h = g[e],
                    f = h[3];
                if (f) for (var i = f.length; --i >= 0;) c[f.charAt(i)] = h
            }
        })();
        var d = a.length;
        return function (g, e) {
            e = e || 0;
            var h = [e, "pln"],
                f = "",
                i = 0,
                j = g;
            while (j.length) {
                var o, m = null,
                    k, l = c[j.charAt(0)];
                if (l) {
                    k = j.match(l[1]);
                    m = k[0];
                    o = l[0]
                } else {
                    for (var n = 0; n < d; ++n) {
                        l = a[n];
                        var p = l[2];
                        if (p && !p.test(f)) continue;
                        k = j.match(l[1]);
                        if (k) {
                            m = k[0];
                            o = l[0];
                            break
                        }
                    }
                    if (!m) {
                        o = "pln";
                        m = j.substring(0, 1)
                    }
                }
                h.push(e + i, o);
                i += m.length;
                j = j.substring(m.length);
                if (o !== "com" && /\S/.test(m)) f = m
            }
            return h
        }
    }
    var oa = v([], [
        ["pln", /^[^<]+/, null],
        ["dec", /^<!\w[^>]*(?:>|$)/, null],
        ["com", /^<!--[\s\S]*?(?:--\>|$)/, null],
        ["src", /^<\?[\s\S]*?(?:\?>|$)/, null],
        ["src", /^<%[\s\S]*?(?:%>|$)/, null],
        ["src", /^<(script|style|xmp)\b[^>]*>[\s\S]*?<\/\1\b[^>]*>/i, null],
        ["tag", /^<\/?\w[^<>]*>/, null]
    ]);

    function pa(b) {
        var a = oa(b);
        for (var c = 0; c < a.length; c += 2) if (a[c + 1] === "src") {
            var d, g;
            d = a[c];
            g = c + 2 < a.length ? a[c + 2] : b.length;
            var e = b.substring(d, g),
                h = e.match(/^(<[^>]*>)([\s\S]*)(<\/[^>]*>)$/);
            if (h) a.splice(c, 2, d, "tag", d + h[1].length, "src", d + h[1].length + (h[2] || "").length, "tag")
        }
        return a
    }
    var qa = v([
        ["atv", /^\'[^\']*(?:\'|$)/, null, "'"],
        ["atv", /^\"[^\"]*(?:\"|$)/, null, '"'],
        ["pun", /^[<>\/=]+/, null, "<>/="]
    ], [
        ["tag", /^[\w:\-]+/, /^</],
        ["atv", /^[\w\-]+/, /^=/],
        ["atn", /^[\w:\-]+/, null],
        ["pln", /^\s+/, null, " \t\r\n"]
    ]);

    function ra(b, a) {
        for (var c = 0; c < a.length; c += 2) {
            var d = a[c + 1];
            if (d === "tag") {
                var g, e;
                g = a[c];
                e = c + 2 < a.length ? a[c + 2] : b.length;
                var h = b.substring(g, e),
                    f = qa(h, g);
                u(f, a, c, 2);
                c += f.length - 2
            }
        }
        return a
    }
    function r(b) {
        var a = [],
            c = [];
        if (b.tripleQuotedStrings) a.push(["str", /^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/, null, "'\""]);
        else if (b.multiLineStrings) a.push(["str", /^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/, null, "'\"`"]);
        else a.push(["str", /^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/, null, "\"'"]);
        c.push(["pln", /^(?:[^\'\"\`\/\#]+)/, null, " \r\n"]);
        if (b.hashComments) a.push(["com", /^#[^\r\n]*/, null, "#"]);
        if (b.cStyleComments) c.push(["com", /^\/\/[^\r\n]*/, null]);
        if (b.regexLiterals) c.push(["str", /^\/(?:[^\\\*\/\[]|\\[\s\S]|\[(?:[^\]\\]|\\.)*(?:\]|$))+(?:\/|$)/, Y]);
        if (b.cStyleComments) c.push(["com", /^\/\*[\s\S]*?(?:\*\/|$)/, null]);
        var d = x(b.keywords);
        b = null;
        var g = v(a, c),
            e = v([], [
                ["pln", /^\s+/, null, " \r\n"],
                ["pln", /^[a-z_$@][a-z_$@0-9]*/i, null],
                ["lit", /^0x[a-f0-9]+[a-z]/i, null],
                ["lit", /^(?:\d(?:_\d+)*\d*(?:\.\d*)?|\.\d+)(?:e[+\-]?\d+)?[a-z]*/i, null, "123456789"],
                ["pun", /^[^\s\w\.$@]+/, null]
            ]);

        function h(f, i) {
            for (var j = 0; j < i.length; j += 2) {
                var o = i[j + 1];
                if (o === "pln") {
                    var m, k, l, n;
                    m = i[j];
                    k = j + 2 < i.length ? i[j + 2] : f.length;
                    l = f.substring(m, k);
                    n = e(l, m);
                    for (var p = 0, t = n.length; p < t; p += 2) {
                        var w = n[p + 1];
                        if (w === "pln") {
                            var A = n[p],
                                B = p + 2 < t ? n[p + 2] : l.length,
                                s = f.substring(A, B);
                            if (s === ".") n[p + 1] = "pun";
                            else if (s in d) n[p + 1] = "kwd";
                            else if (/^@?[A-Z][A-Z$]*[a-z][A-Za-z$]*$/.test(s)) n[p + 1] = s.charAt(0) === "@" ? "lit" : "typ"
                        }
                    }
                    u(n, i, j, 2);
                    j += n.length - 2
                }
            }
            return i
        }
        return function (f) {
            var i = g(f);
            i = h(f, i);
            return i
        }
    }
    var G = r({
        keywords: W,
        hashComments: true,
        cStyleComments: true,
        multiLineStrings: true,
        regexLiterals: true
    });

    function sa(b, a) {
        for (var c = 0; c < a.length; c += 2) {
            var d = a[c + 1];
            if (d === "src") {
                var g, e;
                g = a[c];
                e = c + 2 < a.length ? a[c + 2] : b.length;
                var h = G(b.substring(g, e));
                for (var f = 0, i = h.length; f < i; f += 2) h[f] += g;
                u(h, a, c, 2);
                c += h.length - 2
            }
        }
        return a
    }
    function ta(b, a) {
        var c = false;
        for (var d = 0; d < a.length; d += 2) {
            var g = a[d + 1],
                e, h;
            if (g === "atn") {
                e = a[d];
                h = d + 2 < a.length ? a[d + 2] : b.length;
                c = /^on|^style$/i.test(b.substring(e, h))
            } else if (g === "atv") {
                if (c) {
                    e = a[d];
                    h = d + 2 < a.length ? a[d + 2] : b.length;
                    var f = b.substring(e, h),
                        i = f.length,
                        j = i >= 2 && /^[\"\']/.test(f) && f.charAt(0) === f.charAt(i - 1),
                        o, m, k;
                    if (j) {
                        m = e + 1;
                        k = h - 1;
                        o = f
                    } else {
                        m = e + 1;
                        k = h - 1;
                        o = f.substring(1, f.length - 1)
                    }
                    var l = G(o);
                    for (var n = 0, p = l.length; n < p; n += 2) l[n] += m;
                    if (j) {
                        l.push(k, "atv");
                        u(l, a, d + 2, 0)
                    } else u(l, a, d, 2)
                }
                c = false
            }
        }
        return a
    }
    function ua(b) {
        var a = pa(b);
        a = ra(b, a);
        a = sa(b, a);
        a = ta(b, a);
        return a
    }
    function va(b, a, c) {
        var d = [],
            g = 0,
            e = null,
            h = null,
            f = 0,
            i = 0,
            j = ia(8);

        function o(k) {
            if (k > g) {
                if (e && e !== h) {
                    d.push("</span>");
                    e = null
                }
                if (!e && h) {
                    e = h;
                    d.push('<span class="', e, '">')
                }
                var l = E(j(b.substring(g, k))).replace(/(\r\n?|\n| ) /g, "$1&nbsp;").replace(/\r\n?|\n/g, "<br />");
                d.push(l);
                g = k
            }
        }
        while (true) {
            var m;
            m = f < a.length ? (i < c.length ? a[f] <= c[i] : true) : false;
            if (m) {
                o(a[f]);
                if (e) {
                    d.push("</span>");
                    e = null
                }
                d.push(a[f + 1]);
                f += 2
            } else if (i < c.length) {
                o(c[i]);
                h = c[i + 1];
                i += 2
            } else break
        }
        o(b.length);
        if (e) d.push("</span>");
        return d.join("")
    }
    var C = {};

    function q(b, a) {
        for (var c = a.length; --c >= 0;) {
            var d = a[c];
            if (!C.hasOwnProperty(d)) C[d] = b;
            else if ("console" in window) console.log("cannot override language handler %s", d)
        }
    }
    q(G, ["default-code"]);
    q(ua, ["default-markup", "html", "htm", "xhtml", "xml", "xsl"]);
    q(r({
        keywords: I,
        hashComments: true,
        cStyleComments: true
    }), ["c", "cc", "cpp", "cs", "cxx", "cyc"]);
    q(r({
        keywords: J,
        cStyleComments: true
    }), ["java"]);
    q(r({
        keywords: O,
        hashComments: true,
        multiLineStrings: true
    }), ["bsh", "csh", "sh"]);
    q(r({
        keywords: M,
        hashComments: true,
        multiLineStrings: true,
        tripleQuotedStrings: true
    }), ["cv", "py"]);
    q(r({
        keywords: L,
        hashComments: true,
        multiLineStrings: true,
        regexLiterals: true
    }), ["perl", "pl", "pm"]);
    q(r({
        keywords: N,
        hashComments: true,
        multiLineStrings: true,
        regexLiterals: true
    }), ["rb"]);
    q(r({
        keywords: K,
        cStyleComments: true,
        regexLiterals: true
    }), ["js"]);

    function T(b, a) {
        try {
            var c = na(b),
                d = c.source,
                g = c.tags;
            if (!C.hasOwnProperty(a)) a = /^\s*</.test(d) ? "default-markup" : "default-code";
            var e = C[a].call({}, d);
            return va(d, g, e)
        } catch (h) {
            if ("console" in window) {
                console.log(h);
                console.trace()
            }
            return b
        }
    }
    function wa(b) {
        var a = H(),
            c = [document.getElementsByTagName("pre"), document.getElementsByTagName("code"), document.getElementsByTagName("xmp")],
            d = [];
        for (var g = 0; g < c.length; ++g) for (var e = 0; e < c[g].length; ++e) d.push(c[g][e]);
        c = null;
        var h = 0;

        function f() {
            var i = (new Date).getTime() + 250;
            for (; h < d.length && (new Date).getTime() < i; h++) {
                var j = d[h];
                if (j.className && j.className.indexOf("prettyprint") >= 0) {
                    var o = j.className.match(/\blang-(\w+)\b/);
                    if (o) o = o[1];
                    var m = false;
                    for (var k = j.parentNode; k; k = k.parentNode) if ((k.tagName === "pre" || k.tagName === "code" || k.tagName === "xmp") && k.className && k.className.indexOf("prettyprint") >= 0) {
                        m = true;
                        break
                    }
                    if (!m) {
                        var l = ha(j);
                        l = l.replace(/(?:\r\n?|\n)$/, "");
                        var n = T(l, o);
                        if (!S(j)) j.innerHTML = n;
                        else {
                            var p = document.createElement("PRE");
                            for (var t = 0; t < j.attributes.length; ++t) {
                                var w = j.attributes[t];
                                if (w.specified) p.setAttribute(w.name, w.value)
                            }
                            p.innerHTML = n;
                            j.parentNode.replaceChild(p, j);
                            p = j
                        }
                        if (a && j.tagName === "PRE") {
                            var A = j.getElementsByTagName("br");
                            for (var B = A.length; --B >= 0;) {
                                var s = A[B];
                                s.parentNode.replaceChild(document.createTextNode("\r\n"), s)
                            }
                        }
                    }
                }
            }
            if (h < d.length) setTimeout(f, 250);
            else if (b) b()
        }
        f()
    }
    window.PR_normalizedHtml = z;
    window.prettyPrintOne = T;
    window.prettyPrint = wa;
    window.PR = {
        createSimpleLexer: v,
        registerLangHandler: q,
        sourceDecorator: r,
        PR_ATTRIB_NAME: "atn",
        PR_ATTRIB_VALUE: "atv",
        PR_COMMENT: "com",
        PR_DECLARATION: "dec",
        PR_KEYWORD: "kwd",
        PR_LITERAL: "lit",
        PR_PLAIN: "pln",
        PR_PUNCTUATION: "pun",
        PR_SOURCE: "src",
        PR_STRING: "str",
        PR_TAG: "tag",
        PR_TYPE: "typ"
    }
})();
