! function() {
    "use strict";
    let e = "lc,34,7n,7,7b,19,,,,2,,2,,,20,b,1c,l,g,,2t,7,2,6,2,2,,4,z,,u,r,2j,b,1m,9,9,,o,4,,9,,3,,5,17,3,3b,f,,w,1j,,,,4,8,4,,3,7,a,2,t,,1m,,,,2,4,8,,9,,a,2,q,,2,2,1l,,4,2,4,2,2,3,3,,u,2,3,,b,2,1l,,4,5,,2,4,,k,2,m,6,,,1m,,,2,,4,8,,7,3,a,2,u,,1n,,,,c,,9,,14,,3,,1l,3,5,3,,4,7,2,b,2,t,,1m,,2,,2,,3,,5,2,7,2,b,2,s,2,1l,2,,,2,4,8,,9,,a,2,t,,20,,4,,2,3,,,8,,29,,2,7,c,8,2q,,2,9,b,6,22,2,r,,,,,,1j,e,,5,,2,5,b,,10,9,,2u,4,,6,,2,2,2,p,2,4,3,g,4,d,,2,2,6,,f,,jj,3,qa,3,t,3,t,2,u,2,1s,2,,7,8,,2,b,9,,19,3,3b,2,y,,3a,3,4,2,9,,6,3,63,2,2,,1m,,,7,,,,,2,8,6,a,2,,1c,h,1r,4,1c,7,,,5,,14,9,c,2,w,4,2,2,,3,1k,,,2,3,,,3,1m,8,2,2,48,3,,d,,7,4,,6,,3,2,5i,1m,,5,ek,,5f,x,2da,3,3x,,2o,w,fe,6,2x,2,n9w,4,,a,w,2,28,2,7k,,3,,4,,p,2,5,,47,2,q,i,d,,12,8,p,b,1a,3,1c,,2,4,2,2,13,,1v,6,2,2,2,2,c,,8,,1b,,1f,,,3,2,2,5,2,,,16,2,8,,6m,,2,,4,,fn4,,kh,g,g,g,a6,2,gt,,6a,,45,5,1ae,3,,2,5,4,14,3,4,,4l,2,fx,4,ar,2,49,b,4w,,1i,f,1k,3,1d,4,2,2,1x,3,10,5,,8,1q,,c,2,1g,9,a,4,2,,2n,3,2,,,2,6,,4g,,3,8,l,2,1l,2,,,,,m,,e,7,3,5,5f,8,2,3,,,n,,29,,2,6,,,2,,,2,,2,6j,,2,4,6,2,,2,r,2,2d,8,2,,,2,2y,,,,2,6,,,2t,3,2,4,,5,77,9,,2,6t,,a,2,,,4,,40,4,2,2,4,,w,a,14,6,2,4,8,,9,6,2,3,1a,d,,2,ba,7,,6,,,2a,m,2,7,,2,,2,3e,6,3,,,2,,7,,,20,2,3,,,,9n,2,f0b,5,1n,7,t4,,1r,4,29,,f5k,2,43q,,,3,4,5,8,8,2,7,u,4,44,3,1iz,1j,4,1e,8,,e,,m,5,,f,11s,7,,h,2,7,,2,,5,79,7,c5,4,15s,7,31,7,240,5,gx7k,2o,3k,6o".split(",").map((e => e ? parseInt(e, 36) : 1));
    for (let t = 1; t < e.length; t++) e[t] += e[t - 1];

    function t(t) {
        for (let n = 1; n < e.length; n += 2)
            if (e[n] > t) return e[n - 1] <= t;
        return !1
    }

    function n(e) {
        return e >= 127462 && e <= 127487
    }

    function r(e, t, n = !0) {
        return (n ? i : a)(e, t)
    }

    function i(e, r) {
        if (r == e.length) return r;
        r && o(e.charCodeAt(r)) && s(e.charCodeAt(r - 1)) && r--;
        let i = O(e, r);
        for (r += l(i); r < e.length;) {
            let a = O(e, r);
            if (8205 == i || 8205 == a || t(a)) r += l(a), i = a;
            else {
                if (!n(a)) break; {
                    let t = 0,
                        i = r - 2;
                    for (; i >= 0 && n(O(e, i));) t++, i -= 2;
                    if (t % 2 == 0) break;
                    r += 2
                }
            }
        }
        return r
    }

    function a(e, t) {
        for (; t > 0;) {
            let n = i(e, t - 2);
            if (n < t) return n;
            t--
        }
        return 0
    }

    function o(e) {
        return e >= 56320 && e < 57344
    }

    function s(e) {
        return e >= 55296 && e < 56320
    }

    function O(e, t) {
        let n = e.charCodeAt(t);
        if (!s(n) || t + 1 == e.length) return n;
        let r = e.charCodeAt(t + 1);
        return o(r) ? r - 56320 + (n - 55296 << 10) + 65536 : n
    }

    function l(e) {
        return e < 65536 ? 1 : 2
    }

    function c(e, t, n) {
        for (let i = 0; i < e.length;) 9 == e.charCodeAt(i) ? (t += n - t % n, i++) : (t++, i = r(e, i));
        return t
    }

    function u(e, t, n, i) {
        for (let a = 0; a < e.length;) {
            if (t >= n) return {
                offset: a,
                leftOver: 0
            };
            t += 9 == e.charCodeAt(a) ? i - t % i : 1, a = r(e, a)
        }
        return {
            offset: e.length,
            leftOver: n - t
        }
    }
    class d {
        constructor() {}
        lineAt(e) {
            if (e < 0 || e > this.length) throw new RangeError(`Invalid position ${e} in document of length ${this.length}`);
            return this.lineInner(e, !1, 1, 0)
        }
        line(e) {
            if (e < 1 || e > this.lines) throw new RangeError(`Invalid line number ${e} in ${this.lines}-line document`);
            return this.lineInner(e, !0, 1, 0)
        }
        replace(e, t, n) {
            let r = [];
            return this.decompose(0, e, r, 2), n.length && n.decompose(0, n.length, r, 3), this.decompose(t, this.length, r, 1), h.from(r, this.length - (t - e) + n.length)
        }
        append(e) {
            return this.replace(this.length, this.length, e)
        }
        slice(e, t = this.length) {
            let n = [];
            return this.decompose(e, t, n, 0), h.from(n, t - e)
        }
        eq(e) {
            if (e == this) return !0;
            if (e.length != this.length || e.lines != this.lines) return !1;
            let t = new g(this),
                n = new g(e);
            for (;;) {
                if (t.next(), n.next(), t.lineBreak != n.lineBreak || t.done != n.done || t.value != n.value) return !1;
                if (t.done) return !0
            }
        }
        iter(e = 1) {
            return new g(this, e)
        }
        iterRange(e, t = this.length) {
            return new Q(this, e, t)
        }
        toString() {
            return this.sliceString(0)
        }
        toJSON() {
            let e = [];
            return this.flatten(e), e
        }
        static of (e) {
            if (0 == e.length) throw new RangeError("A document must have at least one line");
            return 1 != e.length || e[0] ? e.length <= 32 ? new p(e) : h.from(p.split(e, [])) : d.empty
        }
    }
    "undefined" != typeof Symbol && (d.prototype[Symbol.iterator] = function() {
        return this.iter()
    });
    class p extends d {
        constructor(e, t = function(e) {
            let t = -1;
            for (let n of e) t += n.length + 1;
            return t
        }(e)) {
            super(), this.text = e, this.length = t
        }
        get lines() {
            return this.text.length
        }
        get children() {
            return null
        }
        lineInner(e, t, n, r) {
            for (let i = 0;; i++) {
                let a = this.text[i],
                    o = r + a.length;
                if ((t ? n : o) >= e) return new b(r, o, n, a);
                r = o + 1, n++
            }
        }
        decompose(e, t, n, r) {
            let i = e <= 0 && t >= this.length ? this : new p(m(this.text, e, t), Math.min(t, this.length) - Math.max(0, e));
            if (1 & r) {
                let e = n.pop(),
                    t = f(i.text, e.text.slice(), 0, i.length);
                if (t.length <= 32) n.push(new p(t, e.length + i.length));
                else {
                    let e = t.length >> 1;
                    n.push(new p(t.slice(0, e)), new p(t.slice(e)))
                }
            } else n.push(i)
        }
        replace(e, t, n) {
            if (!(n instanceof p)) return super.replace(e, t, n);
            let r = f(this.text, f(n.text, m(this.text, 0, e)), t),
                i = this.length + n.length - (t - e);
            return r.length <= 32 ? new p(r, i) : h.from(p.split(r, []), i)
        }
        sliceString(e, t = this.length, n = "\n") {
            let r = "";
            for (let i = 0, a = 0; i <= t && a < this.text.length; a++) {
                let o = this.text[a],
                    s = i + o.length;
                i > e && a && (r += n), e < s && t > i && (r += o.slice(Math.max(0, e - i), t - i)), i = s + 1
            }
            return r
        }
        flatten(e) {
            for (let t of this.text) e.push(t)
        }
        static split(e, t) {
            let n = [],
                r = -1;
            for (let i of e) n.push(i), r += i.length + 1, 32 == n.length && (t.push(new p(n, r)), n = [], r = -1);
            return r > -1 && t.push(new p(n, r)), t
        }
    }
    class h extends d {
        constructor(e, t) {
            super(), this.children = e, this.length = t, this.lines = 0;
            for (let t of e) this.lines += t.lines
        }
        lineInner(e, t, n, r) {
            for (let i = 0;; i++) {
                let a = this.children[i],
                    o = r + a.length,
                    s = n + a.lines - 1;
                if ((t ? s : o) >= e) return a.lineInner(e, t, n, r);
                r = o + 1, n = s + 1
            }
        }
        decompose(e, t, n, r) {
            for (let i = 0, a = 0; a <= t && i < this.children.length; i++) {
                let o = this.children[i],
                    s = a + o.length;
                if (e <= s && t >= a) {
                    let i = r & ((a <= e ? 1 : 0) | (s >= t ? 2 : 0));
                    a >= e && s <= t && !i ? n.push(o) : o.decompose(e - a, t - a, n, i)
                }
                a = s + 1
            }
        }
        replace(e, t, n) {
            if (n.lines < this.lines)
                for (let r = 0, i = 0; r < this.children.length; r++) {
                    let a = this.children[r],
                        o = i + a.length;
                    if (e >= i && t <= o) {
                        let s = a.replace(e - i, t - i, n),
                            O = this.lines - a.lines + s.lines;
                        if (s.lines < O >> 4 && s.lines > O >> 6) {
                            let i = this.children.slice();
                            return i[r] = s, new h(i, this.length - (t - e) + n.length)
                        }
                        return super.replace(i, o, s)
                    }
                    i = o + 1
                }
            return super.replace(e, t, n)
        }
        sliceString(e, t = this.length, n = "\n") {
            let r = "";
            for (let i = 0, a = 0; i < this.children.length && a <= t; i++) {
                let o = this.children[i],
                    s = a + o.length;
                a > e && i && (r += n), e < s && t > a && (r += o.sliceString(e - a, t - a, n)), a = s + 1
            }
            return r
        }
        flatten(e) {
            for (let t of this.children) t.flatten(e)
        }
        static from(e, t = e.reduce(((e, t) => e + t.length + 1), -1)) {
            let n = 0;
            for (let t of e) n += t.lines;
            if (n < 32) {
                let n = [];
                for (let t of e) t.flatten(n);
                return new p(n, t)
            }
            let r = Math.max(32, n >> 5),
                i = r << 1,
                a = r >> 1,
                o = [],
                s = 0,
                O = -1,
                l = [];

            function c(e) {
                let t;
                if (e.lines > i && e instanceof h)
                    for (let t of e.children) c(t);
                else e.lines > a && (s > a || !s) ? (u(), o.push(e)) : e instanceof p && s && (t = l[l.length - 1]) instanceof p && e.lines + t.lines <= 32 ? (s += e.lines, O += e.length + 1, l[l.length - 1] = new p(t.text.concat(e.text), t.length + 1 + e.length)) : (s + e.lines > r && u(), s += e.lines, O += e.length + 1, l.push(e))
            }

            function u() {
                0 != s && (o.push(1 == l.length ? l[0] : h.from(l, O)), O = -1, s = l.length = 0)
            }
            for (let t of e) c(t);
            return u(), 1 == o.length ? o[0] : new h(o, t)
        }
    }

    function f(e, t, n = 0, r = 1e9) {
        for (let i = 0, a = 0, o = !0; a < e.length && i <= r; a++) {
            let s = e[a],
                O = i + s.length;
            O >= n && (O > r && (s = s.slice(0, r - i)), i < n && (s = s.slice(n - i)), o ? (t[t.length - 1] += s, o = !1) : t.push(s)), i = O + 1
        }
        return t
    }

    function m(e, t, n) {
        return f(e, [""], t, n)
    }
    d.empty = new p([""], 0);
    class g {
        constructor(e, t = 1) {
            this.dir = t, this.done = !1, this.lineBreak = !1, this.value = "", this.nodes = [e], this.offsets = [t > 0 ? 0 : e instanceof p ? e.text.length : e.children.length]
        }
        next(e = 0) {
            for (;;) {
                let t = this.nodes.length - 1;
                if (t < 0) return this.done = !0, this.value = "", this.lineBreak = !1, this;
                let n = this.nodes[t],
                    r = this.offsets[t],
                    i = n instanceof p ? n.text.length : n.children.length;
                if (r == (this.dir > 0 ? i : 0)) this.nodes.pop(), this.offsets.pop();
                else if (this.lineBreak || r == (this.dir > 0 ? 0 : i))
                    if (n instanceof p) {
                        let i = n.text[r - (this.dir < 0 ? 1 : 0)];
                        if (this.offsets[t] = r += this.dir, this.lineBreak = !1, i.length > Math.max(0, e)) return this.value = 0 == e ? i : this.dir > 0 ? i.slice(e) : i.slice(0, i.length - e), this;
                        e -= i.length
                    } else {
                        let i = n.children[this.dir > 0 ? r : r - 1];
                        this.offsets[t] = r + this.dir, this.lineBreak = !1, e > i.length ? e -= i.length : (this.nodes.push(i), this.offsets.push(this.dir > 0 ? 0 : i instanceof p ? i.text.length : i.children.length))
                    }
                else {
                    if (this.lineBreak = !0, 0 == e) return this.value = "\n", this;
                    e--
                }
            }
        }
    }
    class Q {
        constructor(e, t, n) {
            this.value = "", this.cursor = new g(e, t > n ? -1 : 1), t > n ? (this.skip = e.length - t, this.limit = t - n) : (this.skip = t, this.limit = n - t)
        }
        next(e = 0) {
            if (this.limit <= 0) this.limit = -1;
            else {
                let {
                    value: t,
                    lineBreak: n,
                    done: r
                } = this.cursor.next(this.skip + e);
                this.skip = 0, this.value = t;
                let i = n ? 1 : t.length;
                i > this.limit && (this.value = this.cursor.dir > 0 ? t.slice(0, this.limit) : t.slice(i - this.limit)), r || 0 == this.value.length ? this.limit = -1 : this.limit -= this.value.length
            }
            return this
        }
        get lineBreak() {
            return this.cursor.lineBreak
        }
        get done() {
            return this.limit < 0
        }
    }
    class b {
        constructor(e, t, n, r) {
            this.from = e, this.to = t, this.number = n, this.text = r
        }
        get length() {
            return this.to - this.from
        }
    }
    const x = /\r\n?|\n/;
    var P = function(e) {
        return e[e.Simple = 0] = "Simple", e[e.TrackDel = 1] = "TrackDel", e[e.TrackBefore = 2] = "TrackBefore", e[e.TrackAfter = 3] = "TrackAfter", e
    }(P || (P = {}));
    class w {
        constructor(e) {
            this.sections = e
        }
        get length() {
            let e = 0;
            for (let t = 0; t < this.sections.length; t += 2) e += this.sections[t];
            return e
        }
        get newLength() {
            let e = 0;
            for (let t = 0; t < this.sections.length; t += 2) {
                let n = this.sections[t + 1];
                e += n < 0 ? this.sections[t] : n
            }
            return e
        }
        get empty() {
            return 0 == this.sections.length || 2 == this.sections.length && this.sections[1] < 0
        }
        iterGaps(e) {
            for (let t = 0, n = 0, r = 0; t < this.sections.length;) {
                let i = this.sections[t++],
                    a = this.sections[t++];
                a < 0 ? (e(n, r, i), r += i) : r += a, n += i
            }
        }
        iterChangedRanges(e, t = !1) {
            S(this, e, t)
        }
        get invertedDesc() {
            let e = [];
            for (let t = 0; t < this.sections.length;) {
                let n = this.sections[t++],
                    r = this.sections[t++];
                r < 0 ? e.push(n, r) : e.push(r, n)
            }
            return new w(e)
        }
        composeDesc(e) {
            return this.empty ? e : e.empty ? this : X(this, e)
        }
        mapDesc(e, t = !1) {
            return e.empty ? this : _(this, e, t)
        }
        mapPos(e, t = -1, n = P.Simple) {
            let r = 0,
                i = 0;
            for (let a = 0; a < this.sections.length;) {
                let o = this.sections[a++],
                    s = this.sections[a++],
                    O = r + o;
                if (s < 0) {
                    if (O > e) return i + (e - r);
                    i += o
                } else {
                    if (n != P.Simple && O >= e && (n == P.TrackDel && r < e && O > e || n == P.TrackBefore && r < e || n == P.TrackAfter && O > e)) return null;
                    if (O > e || O == e && t < 0 && !o) return e == r || t < 0 ? i : i + s;
                    i += s
                }
                r = O
            }
            if (e > r) throw new RangeError(`Position ${e} is out of range for changeset of length ${r}`);
            return i
        }
        touchesRange(e, t = e) {
            for (let n = 0, r = 0; n < this.sections.length && r <= t;) {
                let i = r + this.sections[n++];
                if (this.sections[n++] >= 0 && r <= t && i >= e) return !(r < e && i > t) || "cover";
                r = i
            }
            return !1
        }
        toString() {
            let e = "";
            for (let t = 0; t < this.sections.length;) {
                let n = this.sections[t++],
                    r = this.sections[t++];
                e += (e ? " " : "") + n + (r >= 0 ? ":" + r : "")
            }
            return e
        }
        toJSON() {
            return this.sections
        }
        static fromJSON(e) {
            if (!Array.isArray(e) || e.length % 2 || e.some((e => "number" != typeof e))) throw new RangeError("Invalid JSON representation of ChangeDesc");
            return new w(e)
        }
    }
    class k extends w {
        constructor(e, t) {
            super(e), this.inserted = t
        }
        apply(e) {
            if (this.length != e.length) throw new RangeError("Applying change set to a document with the wrong length");
            return S(this, ((t, n, r, i, a) => e = e.replace(r, r + (n - t), a)), !1), e
        }
        mapDesc(e, t = !1) {
            return _(this, e, t, !0)
        }
        invert(e) {
            let t = this.sections.slice(),
                n = [];
            for (let r = 0, i = 0; r < t.length; r += 2) {
                let a = t[r],
                    o = t[r + 1];
                if (o >= 0) {
                    t[r] = o, t[r + 1] = a;
                    let s = r >> 1;
                    for (; n.length < s;) n.push(d.empty);
                    n.push(a ? e.slice(i, i + a) : d.empty)
                }
                i += a
            }
            return new k(t, n)
        }
        compose(e) {
            return this.empty ? e : e.empty ? this : X(this, e, !0)
        }
        map(e, t = !1) {
            return e.empty ? this : _(this, e, t, !0)
        }
        iterChanges(e, t = !1) {
            S(this, e, t)
        }
        get desc() {
            return new w(this.sections)
        }
        filter(e) {
            let t = [],
                n = [],
                r = [],
                i = new T(this);
            e: for (let a = 0, o = 0;;) {
                let s = a == e.length ? 1e9 : e[a++];
                for (; o < s || o == s && 0 == i.len;) {
                    if (i.done) break e;
                    let e = Math.min(i.len, s - o);
                    y(r, e, -1);
                    let a = -1 == i.ins ? -1 : 0 == i.off ? i.ins : 0;
                    y(t, e, a), a > 0 && v(n, t, i.text), i.forward(e), o += e
                }
                let O = e[a++];
                for (; o < O;) {
                    if (i.done) break e;
                    let e = Math.min(i.len, O - o);
                    y(t, e, -1), y(r, e, -1 == i.ins ? -1 : 0 == i.off ? i.ins : 0), i.forward(e), o += e
                }
            }
            return {
                changes: new k(t, n),
                filtered: new w(r)
            }
        }
        toJSON() {
            let e = [];
            for (let t = 0; t < this.sections.length; t += 2) {
                let n = this.sections[t],
                    r = this.sections[t + 1];
                r < 0 ? e.push(n) : 0 == r ? e.push([n]) : e.push([n].concat(this.inserted[t >> 1].toJSON()))
            }
            return e
        }
        static of (e, t, n) {
            let r = [],
                i = [],
                a = 0,
                o = null;

            function s(e = !1) {
                if (!e && !r.length) return;
                a < t && y(r, t - a, -1);
                let n = new k(r, i);
                o = o ? o.compose(n.map(o)) : n, r = [], i = [], a = 0
            }
            return function e(O) {
                if (Array.isArray(O))
                    for (let t of O) e(t);
                else if (O instanceof k) {
                    if (O.length != t) throw new RangeError(`Mismatched change set length (got ${O.length}, expected ${t})`);
                    s(), o = o ? o.compose(O.map(o)) : O
                } else {
                    let {
                        from: e,
                        to: o = e,
                        insert: l
                    } = O;
                    if (e > o || e < 0 || o > t) throw new RangeError(`Invalid change range ${e} to ${o} (in doc of length ${t})`);
                    let c = l ? "string" == typeof l ? d.of(l.split(n || x)) : l : d.empty,
                        u = c.length;
                    if (e == o && 0 == u) return;
                    e < a && s(), e > a && y(r, e - a, -1), y(r, o - e, u), v(i, r, c), a = o
                }
            }(e), s(!o), o
        }
        static empty(e) {
            return new k(e ? [e, -1] : [], [])
        }
        static fromJSON(e) {
            if (!Array.isArray(e)) throw new RangeError("Invalid JSON representation of ChangeSet");
            let t = [],
                n = [];
            for (let r = 0; r < e.length; r++) {
                let i = e[r];
                if ("number" == typeof i) t.push(i, -1);
                else {
                    if (!Array.isArray(i) || "number" != typeof i[0] || i.some(((e, t) => t && "string" != typeof e))) throw new RangeError("Invalid JSON representation of ChangeSet");
                    if (1 == i.length) t.push(i[0], 0);
                    else {
                        for (; n.length < r;) n.push(d.empty);
                        n[r] = d.of(i.slice(1)), t.push(i[0], n[r].length)
                    }
                }
            }
            return new k(t, n)
        }
    }

    function y(e, t, n, r = !1) {
        if (0 == t && n <= 0) return;
        let i = e.length - 2;
        i >= 0 && n <= 0 && n == e[i + 1] ? e[i] += t : 0 == t && 0 == e[i] ? e[i + 1] += n : r ? (e[i] += t, e[i + 1] += n) : e.push(t, n)
    }

    function v(e, t, n) {
        if (0 == n.length) return;
        let r = t.length - 2 >> 1;
        if (r < e.length) e[e.length - 1] = e[e.length - 1].append(n);
        else {
            for (; e.length < r;) e.push(d.empty);
            e.push(n)
        }
    }

    function S(e, t, n) {
        let r = e.inserted;
        for (let i = 0, a = 0, o = 0; o < e.sections.length;) {
            let s = e.sections[o++],
                O = e.sections[o++];
            if (O < 0) i += s, a += s;
            else {
                let l = i,
                    c = a,
                    u = d.empty;
                for (; l += s, c += O, O && r && (u = u.append(r[o - 2 >> 1])), !(n || o == e.sections.length || e.sections[o + 1] < 0);) s = e.sections[o++], O = e.sections[o++];
                t(i, l, a, c, u), i = l, a = c
            }
        }
    }

    function _(e, t, n, r = !1) {
        let i = [],
            a = r ? [] : null,
            o = new T(e),
            s = new T(t);
        for (let e = 0, t = 0;;)
            if (-1 == o.ins) e += o.len, o.next();
            else if (-1 == s.ins && t < e) {
            let n = Math.min(s.len, e - t);
            s.forward(n), y(i, n, -1), t += n
        } else if (s.ins >= 0 && (o.done || t < e || t == e && (s.len < o.len || s.len == o.len && !n))) {
            for (y(i, s.ins, -1); e > t && !o.done && e + o.len < t + s.len;) e += o.len, o.next();
            t += s.len, s.next()
        } else {
            if (!(o.ins >= 0)) {
                if (o.done && s.done) return a ? new k(i, a) : new w(i);
                throw new Error("Mismatched change set lengths")
            } {
                let n = 0,
                    r = e + o.len;
                for (;;)
                    if (s.ins >= 0 && t > e && t + s.len < r) n += s.ins, t += s.len, s.next();
                    else {
                        if (!(-1 == s.ins && t < r)) break; {
                            let e = Math.min(s.len, r - t);
                            n += e, s.forward(e), t += e
                        }
                    }
                y(i, n, o.ins), a && v(a, i, o.text), e = r, o.next()
            }
        }
    }

    function X(e, t, n = !1) {
        let r = [],
            i = n ? [] : null,
            a = new T(e),
            o = new T(t);
        for (let e = !1;;) {
            if (a.done && o.done) return i ? new k(r, i) : new w(r);
            if (0 == a.ins) y(r, a.len, 0, e), a.next();
            else if (0 != o.len || o.done) {
                if (a.done || o.done) throw new Error("Mismatched change set lengths"); {
                    let t = Math.min(a.len2, o.len),
                        n = r.length;
                    if (-1 == a.ins) {
                        let n = -1 == o.ins ? -1 : o.off ? 0 : o.ins;
                        y(r, t, n, e), i && n && v(i, r, o.text)
                    } else -1 == o.ins ? (y(r, a.off ? 0 : a.len, t, e), i && v(i, r, a.textBit(t))) : (y(r, a.off ? 0 : a.len, o.off ? 0 : o.ins, e), i && !o.off && v(i, r, o.text));
                    e = (a.ins > t || o.ins >= 0 && o.len > t) && (e || r.length > n), a.forward2(t), o.forward(t)
                }
            } else y(r, 0, o.ins, e), i && v(i, r, o.text), o.next()
        }
    }
    class T {
        constructor(e) {
            this.set = e, this.i = 0, this.next()
        }
        next() {
            let {
                sections: e
            } = this.set;
            this.i < e.length ? (this.len = e[this.i++], this.ins = e[this.i++]) : (this.len = 0, this.ins = -2), this.off = 0
        }
        get done() {
            return -2 == this.ins
        }
        get len2() {
            return this.ins < 0 ? this.len : this.ins
        }
        get text() {
            let {
                inserted: e
            } = this.set, t = this.i - 2 >> 1;
            return t >= e.length ? d.empty : e[t]
        }
        textBit(e) {
            let {
                inserted: t
            } = this.set, n = this.i - 2 >> 1;
            return n >= t.length && !e ? d.empty : t[n].slice(this.off, null == e ? void 0 : this.off + e)
        }
        forward(e) {
            e == this.len ? this.next() : (this.len -= e, this.off += e)
        }
        forward2(e) {
            -1 == this.ins ? this.forward(e) : e == this.ins ? this.next() : (this.ins -= e, this.off += e)
        }
    }
    class R {
        constructor(e, t, n) {
            this.from = e, this.to = t, this.flags = n
        }
        get anchor() {
            return 16 & this.flags ? this.to : this.from
        }
        get head() {
            return 16 & this.flags ? this.from : this.to
        }
        get empty() {
            return this.from == this.to
        }
        get assoc() {
            return 4 & this.flags ? -1 : 8 & this.flags ? 1 : 0
        }
        get bidiLevel() {
            let e = 3 & this.flags;
            return 3 == e ? null : e
        }
        get goalColumn() {
            let e = this.flags >> 5;
            return 33554431 == e ? void 0 : e
        }
        map(e, t = -1) {
            let n = e.mapPos(this.from, t),
                r = e.mapPos(this.to, t);
            return n == this.from && r == this.to ? this : new R(n, r, this.flags)
        }
        extend(e, t = e) {
            if (e <= this.anchor && t >= this.anchor) return W.range(e, t);
            let n = Math.abs(e - this.anchor) > Math.abs(t - this.anchor) ? e : t;
            return W.range(this.anchor, n)
        }
        eq(e) {
            return this.anchor == e.anchor && this.head == e.head
        }
        toJSON() {
            return {
                anchor: this.anchor,
                head: this.head
            }
        }
        static fromJSON(e) {
            if (!e || "number" != typeof e.anchor || "number" != typeof e.head) throw new RangeError("Invalid JSON representation for SelectionRange");
            return W.range(e.anchor, e.head)
        }
    }
    class W {
        constructor(e, t = 0) {
            this.ranges = e, this.mainIndex = t
        }
        map(e, t = -1) {
            return e.empty ? this : W.create(this.ranges.map((n => n.map(e, t))), this.mainIndex)
        }
        eq(e) {
            if (this.ranges.length != e.ranges.length || this.mainIndex != e.mainIndex) return !1;
            for (let t = 0; t < this.ranges.length; t++)
                if (!this.ranges[t].eq(e.ranges[t])) return !1;
            return !0
        }
        get main() {
            return this.ranges[this.mainIndex]
        }
        asSingle() {
            return 1 == this.ranges.length ? this : new W([this.main])
        }
        addRange(e, t = !0) {
            return W.create([e].concat(this.ranges), t ? 0 : this.mainIndex + 1)
        }
        replaceRange(e, t = this.mainIndex) {
            let n = this.ranges.slice();
            return n[t] = e, W.create(n, this.mainIndex)
        }
        toJSON() {
            return {
                ranges: this.ranges.map((e => e.toJSON())),
                main: this.mainIndex
            }
        }
        static fromJSON(e) {
            if (!e || !Array.isArray(e.ranges) || "number" != typeof e.main || e.main >= e.ranges.length) throw new RangeError("Invalid JSON representation for EditorSelection");
            return new W(e.ranges.map((e => R.fromJSON(e))), e.main)
        }
        static single(e, t = e) {
            return new W([W.range(e, t)], 0)
        }
        static create(e, t = 0) {
            if (0 == e.length) throw new RangeError("A selection needs at least one range");
            for (let n = 0, r = 0; r < e.length; r++) {
                let i = e[r];
                if (i.empty ? i.from <= n : i.from < n) return q(e.slice(), t);
                n = i.to
            }
            return new W(e, t)
        }
        static cursor(e, t = 0, n, r) {
            return new R(e, e, (0 == t ? 0 : t < 0 ? 4 : 8) | (null == n ? 3 : Math.min(2, n)) | (null != r ? r : 33554431) << 5)
        }
        static range(e, t, n) {
            let r = (null != n ? n : 33554431) << 5;
            return t < e ? new R(t, e, 16 | r) : new R(e, t, r)
        }
    }

    function q(e, t = 0) {
        let n = e[t];
        e.sort(((e, t) => e.from - t.from)), t = e.indexOf(n);
        for (let n = 1; n < e.length; n++) {
            let r = e[n],
                i = e[n - 1];
            if (r.empty ? r.from <= i.to : r.from < i.to) {
                let a = i.from,
                    o = Math.max(r.to, i.to);
                n <= t && t--, e.splice(--n, 2, r.anchor > r.head ? W.range(o, a) : W.range(a, o))
            }
        }
        return new W(e, t)
    }

    function Y(e, t) {
        for (let n of e.ranges)
            if (n.to > t) throw new RangeError("Selection points outside of document")
    }
    let z = 0;
    class Z {
        constructor(e, t, n, r, i) {
            this.combine = e, this.compareInput = t, this.compare = n, this.isStatic = r, this.extensions = i, this.id = z++, this.default = e([])
        }
        static define(e = {}) {
            return new Z(e.combine || (e => e), e.compareInput || ((e, t) => e === t), e.compare || (e.combine ? (e, t) => e === t : E), !!e.static, e.enables)
        } of (e) {
            return new I([], this, 0, e)
        }
        compute(e, t) {
            if (this.isStatic) throw new Error("Can't compute a static facet");
            return new I(e, this, 1, t)
        }
        computeN(e, t) {
            if (this.isStatic) throw new Error("Can't compute a static facet");
            return new I(e, this, 2, t)
        }
        from(e, t) {
            return t || (t = e => e), this.compute([e], (n => t(n.field(e))))
        }
    }

    function E(e, t) {
        return e == t || e.length == t.length && e.every(((e, n) => e === t[n]))
    }
    class I {
        constructor(e, t, n, r) {
            this.dependencies = e, this.facet = t, this.type = n, this.value = r, this.id = z++
        }
        dynamicSlot(e) {
            var t;
            let n = this.value,
                r = this.facet.compareInput,
                i = e[this.id] >> 1,
                a = 2 == this.type,
                o = !1,
                s = !1,
                O = [];
            for (let n of this.dependencies) "doc" == n ? o = !0 : "selection" == n ? s = !0 : 0 == (1 & (null !== (t = e[n.id]) && void 0 !== t ? t : 1)) && O.push(e[n.id]);
            return (e, t) => {
                if (!t || t.reconfigured) return e.values[i] = n(e), 1; {
                    if (!(o && t.docChanged || s && (t.docChanged || t.selection) || O.some((t => (1 & J(e, t)) > 0)))) return 0;
                    let l = n(e),
                        c = t.startState.values[i];
                    return (a ? function(e, t, n) {
                        if (e.length != t.length) return !1;
                        for (let r = 0; r < e.length; r++)
                            if (!n(e[r], t[r])) return !1;
                        return !0
                    }(l, c, r) : r(l, c)) ? 0 : (e.values[i] = l, 1)
                }
            }
        }
    }

    function U(e, t, n) {
        let r = n.map((t => e[t.id])),
            i = n.map((e => e.type)),
            a = r.filter((e => !(1 & e))),
            o = e[t.id] >> 1;
        return (e, n) => {
            let s = n ? n.reconfigured ? n.startState.config.address[t.id] : o << 1 : null,
                O = null == s;
            for (let t of a) 1 & J(e, t) && (O = !0);
            if (!O) return 0;
            let l = [];
            for (let t = 0; t < r.length; t++) {
                let n = K(e, r[t]);
                if (2 == i[t])
                    for (let e of n) l.push(e);
                else l.push(n)
            }
            let c = t.combine(l);
            return null != s && t.compare(c, K(n.startState, s)) ? 0 : (e.values[o] = c, 1)
        }
    }

    function V(e, t) {
        let n = e.config.address[t];
        return null == n ? null : n >> 1
    }
    const j = Z.define({
        static: !0
    });
    class A {
        constructor(e, t, n, r, i) {
            this.id = e, this.createF = t, this.updateF = n, this.compareF = r, this.spec = i, this.provides = void 0
        }
        static define(e) {
            let t = new A(z++, e.create, e.update, e.compare || ((e, t) => e === t), e);
            return e.provide && (t.provides = e.provide(t)), t
        }
        create(e) {
            let t = e.facet(j).find((e => e.field == this));
            return ((null == t ? void 0 : t.create) || this.createF)(e)
        }
        slot(e) {
            let t = e[this.id] >> 1;
            return (e, n) => {
                if (!n || n.reconfigured && null == V(n.startState, this.id)) return e.values[t] = this.create(e), 1;
                let r, i = 0;
                n.reconfigured ? (r = n.startState.values[V(n.startState, this.id)], i = 1) : r = n.startState.values[t];
                let a = this.updateF(r, n);
                return i || this.compareF(r, a) || (i = 1), i && (e.values[t] = a), i
            }
        }
        init(e) {
            return [this, j.of({
                field: this,
                create: e
            })]
        }
        get extension() {
            return this
        }
    }
    const C = 2,
        G = 1,
        L = 0;

    function N(e) {
        return t => new M(t, e)
    }
    const D = {
        fallback: N(3),
        default: N(C),
        extend: N(G),
        override: N(L)
    };
    class M {
        constructor(e, t) {
            this.inner = e, this.prec = t
        }
    }
    class B { of (e) {
            return new F(this, e)
        }
        reconfigure(e) {
            return B.reconfigure.of({
                compartment: this,
                extension: e
            })
        }
        get(e) {
            return e.config.compartments.get(this)
        }
    }
    class F {
        constructor(e, t) {
            this.compartment = e, this.inner = t
        }
    }
    class H {
        constructor(e, t, n, r, i) {
            for (this.base = e, this.compartments = t, this.dynamicSlots = n, this.address = r, this.staticValues = i, this.statusTemplate = []; this.statusTemplate.length < n.length;) this.statusTemplate.push(0)
        }
        staticFacet(e) {
            let t = this.address[e.id];
            return null == t ? e.default : this.staticValues[t >> 1]
        }
        static resolve(e, t, n) {
            let r = [],
                i = Object.create(null),
                a = new Map;
            for (let n of function(e, t, n) {
                    let r = [
                            [],
                            [],
                            [],
                            []
                        ],
                        i = new Map;

                    function a(e, o) {
                        let s = i.get(e);
                        if (null != s) {
                            if (s >= o) return;
                            let t = r[s].indexOf(e);
                            t > -1 && r[s].splice(t, 1), e instanceof F && n.delete(e.compartment)
                        }
                        if (i.set(e, o), Array.isArray(e))
                            for (let t of e) a(t, o);
                        else if (e instanceof F) {
                            if (n.has(e.compartment)) throw new RangeError("Duplicate use of compartment in extensions");
                            let r = t.get(e.compartment) || e.inner;
                            n.set(e.compartment, r), a(r, o)
                        } else if (e instanceof M) a(e.inner, e.prec);
                        else if (e instanceof A) r[o].push(e), e.provides && a(e.provides, o);
                        else if (e instanceof I) r[o].push(e), e.facet.extensions && a(e.facet.extensions, o);
                        else {
                            let t = e.extension;
                            if (!t) throw new Error(`Unrecognized extension value in extension set (${e}). This sometimes happens because multiple instances of @codemirror/state are loaded, breaking instanceof checks.`);
                            a(t, o)
                        }
                    }
                    return a(e, C), r.reduce(((e, t) => e.concat(t)))
                }(e, t, a)) n instanceof A ? r.push(n) : (i[n.facet.id] || (i[n.facet.id] = [])).push(n);
            let o = Object.create(null),
                s = [],
                O = [];
            for (let e of r) o[e.id] = O.length << 1, O.push((t => e.slot(t)));
            for (let e in i) {
                let t = i[e],
                    r = t[0].facet;
                if (t.every((e => 0 == e.type))) {
                    o[r.id] = s.length << 1 | 1;
                    let e = r.combine(t.map((e => e.value))),
                        i = n ? n.config.address[r.id] : null;
                    if (null != i) {
                        let t = K(n, i);
                        r.compare(e, t) && (e = t)
                    }
                    s.push(e)
                } else {
                    for (let e of t) 0 == e.type ? (o[e.id] = s.length << 1 | 1, s.push(e.value)) : (o[e.id] = O.length << 1, O.push((t => e.dynamicSlot(t))));
                    o[r.id] = O.length << 1, O.push((e => U(e, r, t)))
                }
            }
            return new H(e, a, O.map((e => e(o))), o, s)
        }
    }

    function J(e, t) {
        if (1 & t) return 2;
        let n = t >> 1,
            r = e.status[n];
        if (4 == r) throw new Error("Cyclic dependency between fields and/or facets");
        if (2 & r) return r;
        e.status[n] = 4;
        let i = e.config.dynamicSlots[n](e, e.applying);
        return e.status[n] = 2 | i
    }

    function K(e, t) {
        return 1 & t ? e.config.staticValues[t >> 1] : e.values[t >> 1]
    }
    const ee = Z.define(),
        te = Z.define({
            combine: e => e.some((e => e)),
            static: !0
        }),
        ne = Z.define({
            combine: e => e.length ? e[0] : void 0,
            static: !0
        }),
        re = Z.define(),
        ie = Z.define(),
        ae = Z.define();
    class oe {
        constructor(e, t) {
            this.type = e, this.value = t
        }
        static define() {
            return new se
        }
    }
    class se { of (e) {
            return new oe(this, e)
        }
    }
    class Oe {
        constructor(e) {
            this.map = e
        } of (e) {
            return new le(this, e)
        }
    }
    class le {
        constructor(e, t) {
            this.type = e, this.value = t
        }
        map(e) {
            let t = this.type.map(this.value, e);
            return void 0 === t ? void 0 : t == this.value ? this : new le(this.type, t)
        }
        is(e) {
            return this.type == e
        }
        static define(e = {}) {
            return new Oe(e.map || (e => e))
        }
        static mapEffects(e, t) {
            if (!e.length) return e;
            let n = [];
            for (let r of e) {
                let e = r.map(t);
                e && n.push(e)
            }
            return n
        }
    }
    le.reconfigure = le.define(), le.appendConfig = le.define();
    class ce {
        constructor(e, t, n, r, i, a) {
            this.startState = e, this.changes = t, this.selection = n, this.effects = r, this.annotations = i, this.scrollIntoView = a, this._doc = null, this._state = null, n && Y(n, t.newLength), i.some((e => e.type == ce.time)) || (this.annotations = i.concat(ce.time.of(Date.now())))
        }
        get newDoc() {
            return this._doc || (this._doc = this.changes.apply(this.startState.doc))
        }
        get newSelection() {
            return this.selection || this.startState.selection.map(this.changes)
        }
        get state() {
            return this._state || this.startState.applyTransaction(this), this._state
        }
        annotation(e) {
            for (let t of this.annotations)
                if (t.type == e) return t.value
        }
        get docChanged() {
            return !this.changes.empty
        }
        get reconfigured() {
            return this.startState.config != this.state.config
        }
    }

    function ue(e, t) {
        let n = [];
        for (let r = 0, i = 0;;) {
            let a, o;
            if (r < e.length && (i == t.length || t[i] >= e[r])) a = e[r++], o = e[r++];
            else {
                if (!(i < t.length)) return n;
                a = t[i++], o = t[i++]
            }!n.length || n[n.length - 1] < a ? n.push(a, o) : n[n.length - 1] < o && (n[n.length - 1] = o)
        }
    }

    function de(e, t, n) {
        var r;
        let i, a, o;
        return n ? (i = t.changes, a = k.empty(t.changes.length), o = e.changes.compose(t.changes)) : (i = t.changes.map(e.changes), a = e.changes.mapDesc(t.changes, !0), o = e.changes.compose(i)), {
            changes: o,
            selection: t.selection ? t.selection.map(a) : null === (r = e.selection) || void 0 === r ? void 0 : r.map(i),
            effects: le.mapEffects(e.effects, i).concat(le.mapEffects(t.effects, a)),
            annotations: e.annotations.length ? e.annotations.concat(t.annotations) : t.annotations,
            scrollIntoView: e.scrollIntoView || t.scrollIntoView
        }
    }

    function pe(e, t, n) {
        let r = t.selection;
        return {
            changes: t.changes instanceof k ? t.changes : k.of(t.changes || [], n, e.facet(ne)),
            selection: r && (r instanceof W ? r : W.single(r.anchor, r.head)),
            effects: me(t.effects),
            annotations: me(t.annotations),
            scrollIntoView: !!t.scrollIntoView
        }
    }

    function he(e, t, n) {
        let r = pe(e, t.length ? t[0] : {}, e.doc.length);
        t.length && !1 === t[0].filter && (n = !1);
        for (let i = 1; i < t.length; i++) {
            !1 === t[i].filter && (n = !1);
            let a = !!t[i].sequential;
            r = de(r, pe(e, t[i], a ? r.changes.newLength : e.doc.length), a)
        }
        let i = new ce(e, r.changes, r.selection, r.effects, r.annotations, r.scrollIntoView);
        return function(e) {
            let t = e.startState,
                n = t.facet(ae),
                r = e;
            for (let i = n.length - 1; i >= 0; i--) {
                let a = n[i](e);
                a && Object.keys(a).length && (r = de(e, pe(t, a, e.changes.newLength), !0))
            }
            return r == e ? e : new ce(t, e.changes, e.selection, r.effects, r.annotations, r.scrollIntoView)
        }(n ? function(e) {
            let t = e.startState,
                n = !0;
            for (let r of t.facet(re)) {
                let t = r(e);
                if (!1 === t) {
                    n = !1;
                    break
                }
                Array.isArray(t) && (n = !0 === n ? t : ue(n, t))
            }
            if (!0 !== n) {
                let r, i;
                if (!1 === n) i = e.changes.invertedDesc, r = k.empty(t.doc.length);
                else {
                    let t = e.changes.filter(n);
                    r = t.changes, i = t.filtered.invertedDesc
                }
                e = new ce(t, r, e.selection && e.selection.map(i), le.mapEffects(e.effects, i), e.annotations, e.scrollIntoView)
            }
            let r = t.facet(ie);
            for (let n = r.length - 1; n >= 0; n--) {
                let i = r[n](e);
                e = i instanceof ce ? i : Array.isArray(i) && 1 == i.length && i[0] instanceof ce ? i[0] : he(t, me(i), !1)
            }
            return e
        }(i) : i)
    }
    ce.time = oe.define(), ce.userEvent = oe.define(), ce.addToHistory = oe.define(), ce.remote = oe.define();
    const fe = [];

    function me(e) {
        return null == e ? fe : Array.isArray(e) ? e : [e]
    }
    var ge = function(e) {
        return e[e.Word = 0] = "Word", e[e.Space = 1] = "Space", e[e.Other = 2] = "Other", e
    }(ge || (ge = {}));
    const Qe = /[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/;
    let $e;
    try {
        $e = new RegExp("[\\p{Alphabetic}\\p{Number}_]", "u")
    } catch (e) {}

    function be(e) {
        return t => {
            if (!/\S/.test(t)) return ge.Space;
            if (function(e) {
                    if ($e) return $e.test(e);
                    for (let t = 0; t < e.length; t++) {
                        let n = e[t];
                        if (/\w/.test(n) || n > "" && (n.toUpperCase() != n.toLowerCase() || Qe.test(n))) return !0
                    }
                    return !1
                }(t)) return ge.Word;
            for (let n = 0; n < e.length; n++)
                if (t.indexOf(e[n]) > -1) return ge.Word;
            return ge.Other
        }
    }
    class xe {
        constructor(e, t, n, r = null) {
            if (this.config = e, this.doc = t, this.selection = n, this.applying = null, this.status = e.statusTemplate.slice(), r && r.startState.config == e) this.values = r.startState.values.slice();
            else if (this.values = e.dynamicSlots.map((e => null)), r)
                for (let t in e.address) {
                    let n = e.address[t],
                        i = r.startState.config.address[t];
                    null != i && 0 == (1 & n) && (this.values[n >> 1] = K(r.startState, i))
                }
            this.applying = r, r && (r._state = this);
            for (let e = 0; e < this.config.dynamicSlots.length; e++) J(this, e << 1);
            this.applying = null
        }
        field(e, t = !0) {
            let n = this.config.address[e.id];
            if (null != n) return J(this, n), K(this, n);
            if (t) throw new RangeError("Field is not present in this state")
        }
        update(...e) {
            return he(this, e, !0)
        }
        applyTransaction(e) {
            let t = this.config,
                {
                    base: n,
                    compartments: r
                } = t;
            for (let i of e.effects) i.is(B.reconfigure) ? (t && (r = new Map, t.compartments.forEach(((e, t) => r.set(t, e))), t = null), r.set(i.value.compartment, i.value.extension)) : i.is(le.reconfigure) ? (t = null, n = i.value) : i.is(le.appendConfig) && (t = null, n = me(n).concat(i.value));
            new xe(t || H.resolve(n, r, this), e.newDoc, e.newSelection, e)
        }
        replaceSelection(e) {
            return "string" == typeof e && (e = this.toText(e)), this.changeByRange((t => ({
                changes: {
                    from: t.from,
                    to: t.to,
                    insert: e
                },
                range: W.cursor(t.from + e.length)
            })))
        }
        changeByRange(e) {
            let t = this.selection,
                n = e(t.ranges[0]),
                r = this.changes(n.changes),
                i = [n.range],
                a = me(n.effects);
            for (let n = 1; n < t.ranges.length; n++) {
                let o = e(t.ranges[n]),
                    s = this.changes(o.changes),
                    O = s.map(r);
                for (let e = 0; e < n; e++) i[e] = i[e].map(O);
                let l = r.mapDesc(s, !0);
                i.push(o.range.map(l)), r = r.compose(O), a = le.mapEffects(a, O).concat(le.mapEffects(me(o.effects), l))
            }
            return {
                changes: r,
                selection: W.create(i, t.mainIndex),
                effects: a
            }
        }
        changes(e = []) {
            return e instanceof k ? e : k.of(e, this.doc.length, this.facet(xe.lineSeparator))
        }
        toText(e) {
            return d.of(e.split(this.facet(xe.lineSeparator) || x))
        }
        sliceDoc(e = 0, t = this.doc.length) {
            return this.doc.sliceString(e, t, this.lineBreak)
        }
        facet(e) {
            let t = this.config.address[e.id];
            return null == t ? e.default : (J(this, t), K(this, t))
        }
        toJSON(e) {
            let t = {
                doc: this.sliceDoc(),
                selection: this.selection.toJSON()
            };
            if (e)
                for (let n in e) {
                    let r = e[n];
                    r instanceof A && (t[n] = r.spec.toJSON(this.field(e[n]), this))
                }
            return t
        }
        static fromJSON(e, t = {}, n) {
            if (!e || "string" != typeof e.doc) throw new RangeError("Invalid JSON representation for EditorState");
            let r = [];
            if (n)
                for (let t in n) {
                    let i = n[t],
                        a = e[t];
                    r.push(i.init((e => i.spec.fromJSON(a, e))))
                }
            return xe.create({
                doc: e.doc,
                selection: W.fromJSON(e.selection),
                extensions: t.extensions ? r.concat([t.extensions]) : r
            })
        }
        static create(e = {}) {
            let t = H.resolve(e.extensions || [], new Map),
                n = e.doc instanceof d ? e.doc : d.of((e.doc || "").split(t.staticFacet(xe.lineSeparator) || x)),
                r = e.selection ? e.selection instanceof W ? e.selection : W.single(e.selection.anchor, e.selection.head) : W.single(0);
            return Y(r, n.length), t.staticFacet(te) || (r = r.asSingle()), new xe(t, n, r)
        }
        get tabSize() {
            return this.facet(xe.tabSize)
        }
        get lineBreak() {
            return this.facet(xe.lineSeparator) || "\n"
        }
        phrase(e) {
            for (let t of this.facet(xe.phrases))
                if (Object.prototype.hasOwnProperty.call(t, e)) return t[e];
            return e
        }
        languageDataAt(e, t) {
            let n = [];
            for (let r of this.facet(ee))
                for (let i of r(this, t)) Object.prototype.hasOwnProperty.call(i, e) && n.push(i[e]);
            return n
        }
        charCategorizer(e) {
            return be(this.languageDataAt("wordChars", e).join(""))
        }
        wordAt(e) {
            let {
                text: t,
                from: n,
                length: i
            } = this.doc.lineAt(e), a = this.charCategorizer(e), o = e - n, s = e - n;
            for (; o > 0;) {
                let e = r(t, o, !1);
                if (a(t.slice(e, o)) != ge.Word) break;
                o = e
            }
            for (; s < i;) {
                let e = r(t, s);
                if (a(t.slice(s, e)) != ge.Word) break;
                s = e
            }
            return o == s ? W.range(o + n, s + n) : null
        }
    }

    function Pe(e, t, n = {}) {
        let r = {};
        for (let t of e)
            for (let e of Object.keys(t)) {
                let i = t[e],
                    a = r[e];
                if (void 0 === a) r[e] = i;
                else if (a === i || void 0 === i);
                else {
                    if (!Object.hasOwnProperty.call(n, e)) throw new Error("Config merge conflict for field " + e);
                    r[e] = n[e](a, i)
                }
            }
        for (let e in t) void 0 === r[e] && (r[e] = t[e]);
        return r
    }
    xe.allowMultipleSelections = te, xe.tabSize = Z.define({
        combine: e => e.length ? e[0] : 4
    }), xe.lineSeparator = ne, xe.phrases = Z.define(), xe.languageData = ee, xe.changeFilter = re, xe.transactionFilter = ie, xe.transactionExtender = ae, B.reconfigure = le.define();
    const we = "undefined" == typeof Symbol ? "__ͼ" : Symbol.for("ͼ"),
        ke = "undefined" == typeof Symbol ? "__styleSet" + Math.floor(1e8 * Math.random()) : Symbol("styleSet"),
        ye = "undefined" != typeof globalThis ? globalThis : "undefined" != typeof window ? window : {};
    class ve {
        constructor(e, t) {
            this.rules = [];
            let {
                finish: n
            } = t || {};

            function r(e) {
                return /^@/.test(e) ? [e] : e.split(/,\s*/)
            }

            function i(e, t, a, o) {
                let s = [],
                    O = /^@(\w+)\b/.exec(e[0]),
                    l = O && "keyframes" == O[1];
                if (O && null == t) return a.push(e[0] + ";");
                for (let n in t) {
                    let o = t[n];
                    if (/&/.test(n)) i(n.split(/,\s*/).map((t => e.map((e => t.replace(/&/, e))))).reduce(((e, t) => e.concat(t))), o, a);
                    else if (o && "object" == typeof o) {
                        if (!O) throw new RangeError("The value of a property (" + n + ") should be a primitive value.");
                        i(r(n), o, s, l)
                    } else null != o && s.push(n.replace(/_.*/, "").replace(/[A-Z]/g, (e => "-" + e.toLowerCase())) + ": " + o + ";")
                }(s.length || l) && a.push((!n || O || o ? e : e.map(n)).join(", ") + " {" + s.join(" ") + "}")
            }
            for (let t in e) i(r(t), e[t], this.rules)
        }
        getRules() {
            return this.rules.join("\n")
        }
        static newName() {
            let e = ye[we] || 1;
            return ye[we] = e + 1, "ͼ" + e.toString(36)
        }
        static mount(e, t) {
            (e[ke] || new _e(e)).mount(Array.isArray(t) ? t : [t])
        }
    }
    let Se = null;
    class _e {
        constructor(e) {
            if (!e.head && e.adoptedStyleSheets && "undefined" != typeof CSSStyleSheet) {
                if (Se) return e.adoptedStyleSheets = [Se.sheet].concat(e.adoptedStyleSheets), e[ke] = Se;
                this.sheet = new CSSStyleSheet, e.adoptedStyleSheets = [this.sheet].concat(e.adoptedStyleSheets), Se = this
            } else {
                this.styleTag = (e.ownerDocument || e).createElement("style");
                let t = e.head || e;
                t.insertBefore(this.styleTag, t.firstChild)
            }
            this.modules = [], e[ke] = this
        }
        mount(e) {
            let t = this.sheet,
                n = 0,
                r = 0;
            for (let i = 0; i < e.length; i++) {
                let a = e[i],
                    o = this.modules.indexOf(a);
                if (o < r && o > -1 && (this.modules.splice(o, 1), r--, o = -1), -1 == o) {
                    if (this.modules.splice(r++, 0, a), t)
                        for (let e = 0; e < a.rules.length; e++) t.insertRule(a.rules[e], n++)
                } else {
                    for (; r < o;) n += this.modules[r++].rules.length;
                    n += a.rules.length, r++
                }
            }
            if (!t) {
                let e = "";
                for (let t = 0; t < this.modules.length; t++) e += this.modules[t].getRules() + "\n";
                this.styleTag.textContent = e
            }
        }
    }
    class Xe {
        eq(e) {
            return this == e
        }
        range(e, t = e) {
            return new Te(e, t, this)
        }
    }
    Xe.prototype.startSide = Xe.prototype.endSide = 0, Xe.prototype.point = !1, Xe.prototype.mapMode = P.TrackDel;
    class Te {
        constructor(e, t, n) {
            this.from = e, this.to = t, this.value = n
        }
    }

    function Re(e, t) {
        return e.from - t.from || e.value.startSide - t.value.startSide
    }
    class We {
        constructor(e, t, n, r) {
            this.from = e, this.to = t, this.value = n, this.maxPoint = r
        }
        get length() {
            return this.to[this.to.length - 1]
        }
        findIndex(e, t, n = 1e9 * t, r = 0) {
            if (e <= 0) return r;
            let i = t < 0 ? this.to : this.from;
            for (let a = r, o = i.length;;) {
                if (a == o) return a;
                let r = a + o >> 1,
                    s = i[r] - e || (t < 0 ? this.value[r].startSide : this.value[r].endSide) - n;
                if (r == a) return s >= 0 ? a : o;
                s >= 0 ? o = r : a = r + 1
            }
        }
        between(e, t, n, r) {
            for (let i = this.findIndex(t, -1), a = this.findIndex(n, 1, void 0, i); i < a; i++)
                if (!1 === r(this.from[i] + e, this.to[i] + e, this.value[i])) return !1
        }
        map(e, t) {
            let n = [],
                r = [],
                i = [],
                a = -1,
                o = -1;
            for (let s = 0; s < this.value.length; s++) {
                let O, l, c = this.value[s],
                    u = this.from[s] + e,
                    d = this.to[s] + e;
                if (u == d) {
                    let e = t.mapPos(u, c.startSide, c.mapMode);
                    if (null == e) continue;
                    O = l = e
                } else if (O = t.mapPos(u, c.startSide), l = t.mapPos(d, c.endSide), O > l || O == l && c.startSide > 0 && c.endSide <= 0) continue;
                (l - O || c.endSide - c.startSide) < 0 || (a < 0 && (a = O), c.point && (o = Math.max(o, l - O)), n.push(c), r.push(O - a), i.push(l - a))
            }
            return {
                mapped: n.length ? new We(r, i, n, o) : null,
                pos: a
            }
        }
    }
    class qe {
        constructor(e, t, n = qe.empty, r) {
            this.chunkPos = e, this.chunk = t, this.nextLayer = n, this.maxPoint = r
        }
        get length() {
            let e = this.chunk.length - 1;
            return e < 0 ? 0 : Math.max(this.chunkEnd(e), this.nextLayer.length)
        }
        get size() {
            if (this.isEmpty) return 0;
            let e = this.nextLayer.size;
            for (let t of this.chunk) e += t.value.length;
            return e
        }
        chunkEnd(e) {
            return this.chunkPos[e] + this.chunk[e].length
        }
        update(e) {
            let {
                add: t = [],
                sort: n = !1,
                filterFrom: r = 0,
                filterTo: i = this.length
            } = e, a = e.filter;
            if (0 == t.length && !a) return this;
            if (n && t.slice().sort(Re), this.isEmpty) return t.length ? qe.of(t) : this;
            let o = new Ze(this, null, -1).goto(0),
                s = 0,
                O = [],
                l = new Ye;
            for (; o.value || s < t.length;)
                if (s < t.length && (o.from - t[s].from || o.startSide - t[s].value.startSide) >= 0) {
                    let e = t[s++];
                    l.addInner(e.from, e.to, e.value) || O.push(e)
                } else 1 == o.rangeIndex && o.chunkIndex < this.chunk.length && (s == t.length || this.chunkEnd(o.chunkIndex) < t[s].from) && (!a || r > this.chunkEnd(o.chunkIndex) || i < this.chunkPos[o.chunkIndex]) && l.addChunk(this.chunkPos[o.chunkIndex], this.chunk[o.chunkIndex]) ? o.nextChunk() : ((!a || r > o.to || i < o.from || a(o.from, o.to, o.value)) && (l.addInner(o.from, o.to, o.value) || O.push(new Te(o.from, o.to, o.value))), o.next());
            return l.finishInner(this.nextLayer.isEmpty && !O.length ? qe.empty : this.nextLayer.update({
                add: O,
                filter: a,
                filterFrom: r,
                filterTo: i
            }))
        }
        map(e) {
            if (0 == e.length || this.isEmpty) return this;
            let t = [],
                n = [],
                r = -1;
            for (let i = 0; i < this.chunk.length; i++) {
                let a = this.chunkPos[i],
                    o = this.chunk[i],
                    s = e.touchesRange(a, a + o.length);
                if (!1 === s) r = Math.max(r, o.maxPoint), t.push(o), n.push(e.mapPos(a));
                else if (!0 === s) {
                    let {
                        mapped: i,
                        pos: s
                    } = o.map(a, e);
                    i && (r = Math.max(r, i.maxPoint), t.push(i), n.push(s))
                }
            }
            let i = this.nextLayer.map(e);
            return 0 == t.length ? i : new qe(n, t, i, r)
        }
        between(e, t, n) {
            if (!this.isEmpty) {
                for (let r = 0; r < this.chunk.length; r++) {
                    let i = this.chunkPos[r],
                        a = this.chunk[r];
                    if (t >= i && e <= i + a.length && !1 === a.between(i, e - i, t - i, n)) return
                }
                this.nextLayer.between(e, t, n)
            }
        }
        iter(e = 0) {
            return Ee.from([this]).goto(e)
        }
        get isEmpty() {
            return this.nextLayer == this
        }
        static iter(e, t = 0) {
            return Ee.from(e).goto(t)
        }
        static compare(e, t, n, r, i = -1) {
            let a = e.filter((e => e.maxPoint >= 500 || !e.isEmpty && t.indexOf(e) < 0 && e.maxPoint >= i)),
                o = t.filter((t => t.maxPoint >= 500 || !t.isEmpty && e.indexOf(t) < 0 && t.maxPoint >= i)),
                s = ze(a, o),
                O = new Ue(a, s, i),
                l = new Ue(o, s, i);
            n.iterGaps(((e, t, n) => Ve(O, e, l, t, n, r))), n.empty && 0 == n.length && Ve(O, 0, l, 0, 0, r)
        }
        static eq(e, t, n = 0, r) {
            null == r && (r = 1e9);
            let i = e.filter((e => !e.isEmpty && t.indexOf(e) < 0)),
                a = t.filter((t => !t.isEmpty && e.indexOf(t) < 0));
            if (i.length != a.length) return !1;
            if (!i.length) return !0;
            let o = ze(i, a),
                s = new Ue(i, o, 0).goto(n),
                O = new Ue(a, o, 0).goto(n);
            for (;;) {
                if (s.to != O.to || !je(s.active, O.active) || s.point && (!O.point || !s.point.eq(O.point))) return !1;
                if (s.to >= r) return !0;
                s.next(), O.next()
            }
        }
        static spans(e, t, n, r, i = -1) {
            let a = new Ue(e, null, i).goto(t),
                o = t,
                s = a.openStart;
            for (;;) {
                let e = Math.min(a.to, n);
                if (a.point ? (r.point(o, e, a.point, a.activeForPoint(a.to), s), s = a.openEnd(e) + (a.to > e ? 1 : 0)) : e > o && (r.span(o, e, a.active, s), s = a.openEnd(e)), a.to > n) break;
                o = a.to, a.next()
            }
            return s
        }
        static of (e, t = !1) {
            let n = new Ye;
            for (let r of e instanceof Te ? [e] : t ? e.slice().sort(Re) : e) n.add(r.from, r.to, r.value);
            return n.finish()
        }
    }
    qe.empty = new qe([], [], null, -1), qe.empty.nextLayer = qe.empty;
    class Ye {
        constructor() {
            this.chunks = [], this.chunkPos = [], this.chunkStart = -1, this.last = null, this.lastFrom = -1e9, this.lastTo = -1e9, this.from = [], this.to = [], this.value = [], this.maxPoint = -1, this.setMaxPoint = -1, this.nextLayer = null
        }
        finishChunk(e) {
            this.chunks.push(new We(this.from, this.to, this.value, this.maxPoint)), this.chunkPos.push(this.chunkStart), this.chunkStart = -1, this.setMaxPoint = Math.max(this.setMaxPoint, this.maxPoint), this.maxPoint = -1, e && (this.from = [], this.to = [], this.value = [])
        }
        add(e, t, n) {
            this.addInner(e, t, n) || (this.nextLayer || (this.nextLayer = new Ye)).add(e, t, n)
        }
        addInner(e, t, n) {
            let r = e - this.lastTo || n.startSide - this.last.endSide;
            if (r <= 0 && (e - this.lastFrom || n.startSide - this.last.startSide) < 0) throw new Error("Ranges must be added sorted by `from` position and `startSide`");
            return !(r < 0) && (250 == this.from.length && this.finishChunk(!0), this.chunkStart < 0 && (this.chunkStart = e), this.from.push(e - this.chunkStart), this.to.push(t - this.chunkStart), this.last = n, this.lastFrom = e, this.lastTo = t, this.value.push(n), n.point && (this.maxPoint = Math.max(this.maxPoint, t - e)), !0)
        }
        addChunk(e, t) {
            if ((e - this.lastTo || t.value[0].startSide - this.last.endSide) < 0) return !1;
            this.from.length && this.finishChunk(!0), this.setMaxPoint = Math.max(this.setMaxPoint, t.maxPoint), this.chunks.push(t), this.chunkPos.push(e);
            let n = t.value.length - 1;
            return this.last = t.value[n], this.lastFrom = t.from[n] + e, this.lastTo = t.to[n] + e, !0
        }
        finish() {
            return this.finishInner(qe.empty)
        }
        finishInner(e) {
            if (this.from.length && this.finishChunk(!1), 0 == this.chunks.length) return e;
            let t = new qe(this.chunkPos, this.chunks, this.nextLayer ? this.nextLayer.finishInner(e) : e, this.setMaxPoint);
            return this.from = null, t
        }
    }

    function ze(e, t) {
        let n = new Map;
        for (let t of e)
            for (let e = 0; e < t.chunk.length; e++) t.chunk[e].maxPoint < 500 && n.set(t.chunk[e], t.chunkPos[e]);
        let r = new Set;
        for (let e of t)
            for (let t = 0; t < e.chunk.length; t++) n.get(e.chunk[t]) == e.chunkPos[t] && r.add(e.chunk[t]);
        return r
    }
    class Ze {
        constructor(e, t, n, r = 0) {
            this.layer = e, this.skip = t, this.minPoint = n, this.rank = r
        }
        get startSide() {
            return this.value ? this.value.startSide : 0
        }
        get endSide() {
            return this.value ? this.value.endSide : 0
        }
        goto(e, t = -1e9) {
            return this.chunkIndex = this.rangeIndex = 0, this.gotoInner(e, t, !1), this
        }
        gotoInner(e, t, n) {
            for (; this.chunkIndex < this.layer.chunk.length;) {
                let t = this.layer.chunk[this.chunkIndex];
                if (!(this.skip && this.skip.has(t) || this.layer.chunkEnd(this.chunkIndex) < e || t.maxPoint < this.minPoint)) break;
                this.chunkIndex++, n = !1
            }
            let r = this.chunkIndex == this.layer.chunk.length ? 0 : this.layer.chunk[this.chunkIndex].findIndex(e - this.layer.chunkPos[this.chunkIndex], -1, t);
            (!n || this.rangeIndex < r) && (this.rangeIndex = r), this.next()
        }
        forward(e, t) {
            (this.to - e || this.endSide - t) < 0 && this.gotoInner(e, t, !0)
        }
        next() {
            for (;;) {
                if (this.chunkIndex == this.layer.chunk.length) {
                    this.from = this.to = 1e9, this.value = null;
                    break
                } {
                    let e = this.layer.chunkPos[this.chunkIndex],
                        t = this.layer.chunk[this.chunkIndex],
                        n = e + t.from[this.rangeIndex];
                    if (this.from = n, this.to = e + t.to[this.rangeIndex], this.value = t.value[this.rangeIndex], ++this.rangeIndex == t.value.length) {
                        if (this.chunkIndex++, this.skip)
                            for (; this.chunkIndex < this.layer.chunk.length && this.skip.has(this.layer.chunk[this.chunkIndex]);) this.chunkIndex++;
                        this.rangeIndex = 0
                    }
                    if (this.minPoint < 0 || this.value.point && this.to - this.from >= this.minPoint) break
                }
            }
        }
        nextChunk() {
            this.chunkIndex++, this.rangeIndex = 0, this.next()
        }
        compare(e) {
            return this.from - e.from || this.startSide - e.startSide || this.to - e.to || this.endSide - e.endSide
        }
    }
    class Ee {
        constructor(e) {
            this.heap = e
        }
        static from(e, t = null, n = -1) {
            let r = [];
            for (let i = 0; i < e.length; i++)
                for (let a = e[i]; !a.isEmpty; a = a.nextLayer) a.maxPoint >= n && r.push(new Ze(a, t, n, i));
            return 1 == r.length ? r[0] : new Ee(r)
        }
        get startSide() {
            return this.value ? this.value.startSide : 0
        }
        goto(e, t = -1e9) {
            for (let n of this.heap) n.goto(e, t);
            for (let e = this.heap.length >> 1; e >= 0; e--) Ie(this.heap, e);
            return this.next(), this
        }
        forward(e, t) {
            for (let n of this.heap) n.forward(e, t);
            for (let e = this.heap.length >> 1; e >= 0; e--) Ie(this.heap, e);
            (this.to - e || this.value.endSide - t) < 0 && this.next()
        }
        next() {
            if (0 == this.heap.length) this.from = this.to = 1e9, this.value = null, this.rank = -1;
            else {
                let e = this.heap[0];
                this.from = e.from, this.to = e.to, this.value = e.value, this.rank = e.rank, e.value && e.next(), Ie(this.heap, 0)
            }
        }
    }

    function Ie(e, t) {
        for (let n = e[t];;) {
            let r = 1 + (t << 1);
            if (r >= e.length) break;
            let i = e[r];
            if (r + 1 < e.length && i.compare(e[r + 1]) >= 0 && (i = e[r + 1], r++), n.compare(i) < 0) break;
            e[r] = n, e[t] = i, t = r
        }
    }
    class Ue {
        constructor(e, t, n) {
            this.minPoint = n, this.active = [], this.activeTo = [], this.activeRank = [], this.minActive = -1, this.point = null, this.pointFrom = 0, this.pointRank = 0, this.to = -1e9, this.endSide = 0, this.openStart = -1, this.cursor = Ee.from(e, t, n)
        }
        goto(e, t = -1e9) {
            return this.cursor.goto(e, t), this.active.length = this.activeTo.length = this.activeRank.length = 0, this.minActive = -1, this.to = e, this.endSide = t, this.openStart = -1, this.next(), this
        }
        forward(e, t) {
            for (; this.minActive > -1 && (this.activeTo[this.minActive] - e || this.active[this.minActive].endSide - t) < 0;) this.removeActive(this.minActive);
            this.cursor.forward(e, t)
        }
        removeActive(e) {
            Ae(this.active, e), Ae(this.activeTo, e), Ae(this.activeRank, e), this.minActive = Ge(this.active, this.activeTo)
        }
        addActive(e) {
            let t = 0,
                {
                    value: n,
                    to: r,
                    rank: i
                } = this.cursor;
            for (; t < this.activeRank.length && this.activeRank[t] <= i;) t++;
            Ce(this.active, t, n), Ce(this.activeTo, t, r), Ce(this.activeRank, t, i), e && Ce(e, t, this.cursor.from), this.minActive = Ge(this.active, this.activeTo)
        }
        next() {
            let e = this.to,
                t = this.point;
            this.point = null;
            let n = this.openStart < 0 ? [] : null,
                r = 0;
            for (;;) {
                let i = this.minActive;
                if (i > -1 && (this.activeTo[i] - this.cursor.from || this.active[i].endSide - this.cursor.startSide) < 0) {
                    if (this.activeTo[i] > e) {
                        this.to = this.activeTo[i], this.endSide = this.active[i].endSide;
                        break
                    }
                    this.removeActive(i), n && Ae(n, i)
                } else {
                    if (!this.cursor.value) {
                        this.to = this.endSide = 1e9;
                        break
                    }
                    if (this.cursor.from > e) {
                        this.to = this.cursor.from, this.endSide = this.cursor.startSide;
                        break
                    } {
                        let i = this.cursor.value;
                        if (i.point) {
                            if (!(t && this.cursor.to == this.to && this.cursor.from < this.cursor.to && i.endSide == this.endSide)) {
                                this.point = i, this.pointFrom = this.cursor.from, this.pointRank = this.cursor.rank, this.to = this.cursor.to, this.endSide = i.endSide, this.cursor.from < e && (r = 1), this.cursor.next(), this.to > e && this.forward(this.to, this.endSide);
                                break
                            }
                            this.cursor.next()
                        } else this.addActive(n), this.cursor.next()
                    }
                }
            }
            if (n) {
                let t = 0;
                for (; t < n.length && n[t] < e;) t++;
                this.openStart = t + r
            }
        }
        activeForPoint(e) {
            if (!this.active.length) return this.active;
            let t = [];
            for (let n = this.active.length - 1; n >= 0 && !(this.activeRank[n] < this.pointRank); n--)(this.activeTo[n] > e || this.activeTo[n] == e && this.active[n].endSide > this.point.endSide) && t.push(this.active[n]);
            return t.reverse()
        }
        openEnd(e) {
            let t = 0;
            for (let n = this.activeTo.length - 1; n >= 0 && this.activeTo[n] > e; n--) t++;
            return t
        }
    }

    function Ve(e, t, n, r, i, a) {
        e.goto(t), n.goto(r);
        let o = r + i,
            s = r,
            O = r - t;
        for (;;) {
            let t = e.to + O - n.to || e.endSide - n.endSide,
                r = t < 0 ? e.to + O : n.to,
                i = Math.min(r, o);
            if (e.point || n.point ? e.point && n.point && (e.point == n.point || e.point.eq(n.point)) || a.comparePoint(s, i, e.point, n.point) : i > s && !je(e.active, n.active) && a.compareRange(s, i, e.active, n.active), r > o) break;
            s = r, t <= 0 && e.next(), t >= 0 && n.next()
        }
    }

    function je(e, t) {
        if (e.length != t.length) return !1;
        for (let n = 0; n < e.length; n++)
            if (e[n] != t[n] && !e[n].eq(t[n])) return !1;
        return !0
    }

    function Ae(e, t) {
        for (let n = t, r = e.length - 1; n < r; n++) e[n] = e[n + 1];
        e.pop()
    }

    function Ce(e, t, n) {
        for (let n = e.length - 1; n >= t; n--) e[n + 1] = e[n];
        e[t] = n
    }

    function Ge(e, t) {
        let n = -1,
            r = 1e9;
        for (let i = 0; i < t.length; i++)(t[i] - r || e[i].endSide - e[n].endSide) < 0 && (n = i, r = t[i]);
        return n
    }
    for (var Le = {
            8: "Backspace",
            9: "Tab",
            10: "Enter",
            12: "NumLock",
            13: "Enter",
            16: "Shift",
            17: "Control",
            18: "Alt",
            20: "CapsLock",
            27: "Escape",
            32: " ",
            33: "PageUp",
            34: "PageDown",
            35: "End",
            36: "Home",
            37: "ArrowLeft",
            38: "ArrowUp",
            39: "ArrowRight",
            40: "ArrowDown",
            44: "PrintScreen",
            45: "Insert",
            46: "Delete",
            59: ";",
            61: "=",
            91: "Meta",
            92: "Meta",
            106: "*",
            107: "+",
            108: ",",
            109: "-",
            110: ".",
            111: "/",
            144: "NumLock",
            145: "ScrollLock",
            160: "Shift",
            161: "Shift",
            162: "Control",
            163: "Control",
            164: "Alt",
            165: "Alt",
            173: "-",
            186: ";",
            187: "=",
            188: ",",
            189: "-",
            190: ".",
            191: "/",
            192: "`",
            219: "[",
            220: "\\",
            221: "]",
            222: "'",
            229: "q"
        }, Ne = {
            48: ")",
            49: "!",
            50: "@",
            51: "#",
            52: "$",
            53: "%",
            54: "^",
            55: "&",
            56: "*",
            57: "(",
            59: ":",
            61: "+",
            173: "_",
            186: ":",
            187: "+",
            188: "<",
            189: "_",
            190: ">",
            191: "?",
            192: "~",
            219: "{",
            220: "|",
            221: "}",
            222: '"',
            229: "Q"
        }, De = "undefined" != typeof navigator && /Chrome\/(\d+)/.exec(navigator.userAgent), Me = "undefined" != typeof navigator && /Apple Computer/.test(navigator.vendor), Be = "undefined" != typeof navigator && /Gecko\/\d+/.test(navigator.userAgent), Fe = "undefined" != typeof navigator && /Mac/.test(navigator.platform), He = "undefined" != typeof navigator && /MSIE \d|Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(navigator.userAgent), Je = De && (Fe || +De[1] < 57) || Be && Fe, Ke = 0; Ke < 10; Ke++) Le[48 + Ke] = Le[96 + Ke] = String(Ke);
    for (Ke = 1; Ke <= 24; Ke++) Le[Ke + 111] = "F" + Ke;
    for (Ke = 65; Ke <= 90; Ke++) Le[Ke] = String.fromCharCode(Ke + 32), Ne[Ke] = String.fromCharCode(Ke);
    for (var et in Le) Ne.hasOwnProperty(et) || (Ne[et] = Le[et]);

    function tt(e) {
        return e.getSelection ? e.getSelection() : document.getSelection()
    }

    function nt(e, t) {
        return !!t && e.contains(1 != t.nodeType ? t.parentNode : t)
    }

    function rt(e, t) {
        if (!t.anchorNode) return !1;
        try {
            return nt(e, t.anchorNode)
        } catch (e) {
            return !1
        }
    }

    function it(e) {
        return 3 == e.nodeType ? mt(e, 0, e.nodeValue.length).getClientRects() : 1 == e.nodeType ? e.getClientRects() : []
    }

    function at(e, t, n, r) {
        return !!n && (st(e, t, n, r, -1) || st(e, t, n, r, 1))
    }

    function ot(e) {
        for (var t = 0;; t++)
            if (!(e = e.previousSibling)) return t
    }

    function st(e, t, n, r, i) {
        for (;;) {
            if (e == n && t == r) return !0;
            if (t == (i < 0 ? 0 : Ot(e))) {
                if ("DIV" == e.nodeName) return !1;
                let n = e.parentNode;
                if (!n || 1 != n.nodeType) return !1;
                t = ot(e) + (i < 0 ? 0 : 1), e = n
            } else {
                if (1 != e.nodeType) return !1;
                if (1 == (e = e.childNodes[t + (i < 0 ? -1 : 0)]).nodeType && "false" == e.contentEditable) return !1;
                t = i < 0 ? Ot(e) : 0
            }
        }
    }

    function Ot(e) {
        return 3 == e.nodeType ? e.nodeValue.length : e.childNodes.length
    }
    const lt = {
        left: 0,
        right: 0,
        top: 0,
        bottom: 0
    };

    function ct(e, t) {
        let n = t ? e.left : e.right;
        return {
            left: n,
            right: n,
            top: e.top,
            bottom: e.bottom
        }
    }

    function ut(e) {
        return {
            left: 0,
            right: e.innerWidth,
            top: 0,
            bottom: e.innerHeight
        }
    }
    class dt {
        constructor() {
            this.anchorNode = null, this.anchorOffset = 0, this.focusNode = null, this.focusOffset = 0
        }
        eq(e) {
            return this.anchorNode == e.anchorNode && this.anchorOffset == e.anchorOffset && this.focusNode == e.focusNode && this.focusOffset == e.focusOffset
        }
        set(e) {
            this.anchorNode = e.anchorNode, this.anchorOffset = e.anchorOffset, this.focusNode = e.focusNode, this.focusOffset = e.focusOffset
        }
    }
    let pt, ht = null;

    function ft(e) {
        if (e.setActive) return e.setActive();
        if (ht) return e.focus(ht);
        let t = [];
        for (let n = e; n && (t.push(n, n.scrollTop, n.scrollLeft), n != n.ownerDocument); n = n.parentNode);
        if (e.focus(null == ht ? {
                get preventScroll() {
                    return ht = {
                        preventScroll: !0
                    }, !0
                }
            } : void 0), !ht) {
            ht = !1;
            for (let e = 0; e < t.length;) {
                let n = t[e++],
                    r = t[e++],
                    i = t[e++];
                n.scrollTop != r && (n.scrollTop = r), n.scrollLeft != i && (n.scrollLeft = i)
            }
        }
    }

    function mt(e, t, n = t) {
        let r = pt || (pt = document.createRange());
        return r.setEnd(e, n), r.setStart(e, t), r
    }

    function gt(e, t, n) {
        let r = {
                key: t,
                code: t,
                keyCode: n,
                which: n,
                cancelable: !0
            },
            i = new KeyboardEvent("keydown", r);
        i.synthetic = !0, e.dispatchEvent(i);
        let a = new KeyboardEvent("keyup", r);
        return a.synthetic = !0, e.dispatchEvent(a), i.defaultPrevented || a.defaultPrevented
    }
    class Qt {
        constructor(e, t, n = !0) {
            this.node = e, this.offset = t, this.precise = n
        }
        static before(e, t) {
            return new Qt(e.parentNode, ot(e), t)
        }
        static after(e, t) {
            return new Qt(e.parentNode, ot(e) + 1, t)
        }
    }
    const $t = [];
    class bt {
        constructor() {
            this.parent = null, this.dom = null, this.dirty = 2
        }
        get editorView() {
            if (!this.parent) throw new Error("Accessing view in orphan content view");
            return this.parent.editorView
        }
        get overrideDOMText() {
            return null
        }
        get posAtStart() {
            return this.parent ? this.parent.posBefore(this) : 0
        }
        get posAtEnd() {
            return this.posAtStart + this.length
        }
        posBefore(e) {
            let t = this.posAtStart;
            for (let n of this.children) {
                if (n == e) return t;
                t += n.length + n.breakAfter
            }
            throw new RangeError("Invalid child in posBefore")
        }
        posAfter(e) {
            return this.posBefore(e) + e.length
        }
        coordsAt(e, t) {
            return null
        }
        sync(e) {
            var t;
            if (2 & this.dirty) {
                let n = this.dom,
                    r = null;
                for (let i of this.children) {
                    if (i.dirty) {
                        let a = r ? r.nextSibling : n.firstChild;
                        i.dom || !a || (null === (t = bt.get(a)) || void 0 === t ? void 0 : t.parent) || i.reuseDOM(a), i.sync(e), i.dirty = 0
                    }
                    e && e.node == n && r != i.dom && (e.written = !0), Pt(n, r, i.dom), r = i.dom
                }
                let i = r ? r.nextSibling : n.firstChild;
                for (i && e && e.node == n && (e.written = !0); i;) i = xt(i)
            } else if (1 & this.dirty)
                for (let t of this.children) t.dirty && (t.sync(e), t.dirty = 0)
        }
        reuseDOM(e) {
            return !1
        }
        localPosFromDOM(e, t) {
            let n;
            if (e == this.dom) n = this.dom.childNodes[t];
            else {
                let r = 0 == Ot(e) ? 0 : 0 == t ? -1 : 1;
                for (;;) {
                    let t = e.parentNode;
                    if (t == this.dom) break;
                    0 == r && t.firstChild != t.lastChild && (r = e == t.firstChild ? -1 : 1), e = t
                }
                n = r < 0 ? e : e.nextSibling
            }
            if (n == this.dom.firstChild) return 0;
            for (; n && !bt.get(n);) n = n.nextSibling;
            if (!n) return this.length;
            for (let e = 0, t = 0;; e++) {
                let r = this.children[e];
                if (r.dom == n) return t;
                t += r.length + r.breakAfter
            }
        }
        domBoundsAround(e, t, n = 0) {
            let r = -1,
                i = -1,
                a = -1,
                o = -1;
            for (let s = 0, O = n, l = n; s < this.children.length; s++) {
                let n = this.children[s],
                    c = O + n.length;
                if (O < e && c > t) return n.domBoundsAround(e, t, O);
                if (c >= e && -1 == r && (r = s, i = O), O > t && n.dom.parentNode == this.dom) {
                    a = s, o = l;
                    break
                }
                l = c, O = c + n.breakAfter
            }
            return {
                from: i,
                to: o < 0 ? n + this.length : o,
                startDOM: (r ? this.children[r - 1].dom.nextSibling : null) || this.dom.firstChild,
                endDOM: a < this.children.length && a >= 0 ? this.children[a].dom : null
            }
        }
        markDirty(e = !1) {
            2 & this.dirty || (this.dirty |= 2, this.markParentsDirty(e))
        }
        markParentsDirty(e) {
            for (let t = this.parent; t; t = t.parent) {
                if (e && (t.dirty |= 2), 1 & t.dirty) return;
                t.dirty |= 1, e = !1
            }
        }
        setParent(e) {
            this.parent != e && (this.parent = e, this.dirty && this.markParentsDirty(!0))
        }
        setDOM(e) {
            this.dom = e, e.cmView = this
        }
        get rootView() {
            for (let e = this;;) {
                let t = e.parent;
                if (!t) return e;
                e = t
            }
        }
        replaceChildren(e, t, n = $t) {
            this.markDirty();
            for (let n = e; n < t; n++) {
                let e = this.children[n];
                e.parent == this && (e.parent = null)
            }
            this.children.splice(e, t - e, ...n);
            for (let e = 0; e < n.length; e++) n[e].setParent(this)
        }
        ignoreMutation(e) {
            return !1
        }
        ignoreEvent(e) {
            return !1
        }
        childCursor(e = this.length) {
            return new wt(this.children, e, this.children.length)
        }
        childPos(e, t = 1) {
            return this.childCursor().findPos(e, t)
        }
        toString() {
            let e = this.constructor.name.replace("View", "");
            return e + (this.children.length ? "(" + this.children.join() + ")" : this.length ? "[" + ("Text" == e ? this.text : this.length) + "]" : "") + (this.breakAfter ? "#" : "")
        }
        static get(e) {
            return e.cmView
        }
    }

    function xt(e) {
        let t = e.nextSibling;
        return e.parentNode.removeChild(e), t
    }

    function Pt(e, t, n) {
        let r = t ? t.nextSibling : e.firstChild;
        if (n.parentNode == e)
            for (; r != n;) r = xt(r);
        else e.insertBefore(n, r)
    }
    bt.prototype.breakAfter = 0;
    class wt {
        constructor(e, t, n) {
            this.children = e, this.pos = t, this.i = n, this.off = 0
        }
        findPos(e, t = 1) {
            for (;;) {
                if (e > this.pos || e == this.pos && (t > 0 || 0 == this.i || this.children[this.i - 1].breakAfter)) return this.off = e - this.pos, this;
                let n = this.children[--this.i];
                this.pos -= n.length + n.breakAfter
            }
        }
    }
    let [kt, yt] = "undefined" != typeof navigator ? [navigator, document] : [{
        userAgent: "",
        vendor: "",
        platform: ""
    }, {
        documentElement: {
            style: {}
        }
    }];
    const vt = /Edge\/(\d+)/.exec(kt.userAgent),
        St = /MSIE \d/.test(kt.userAgent),
        _t = /Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(kt.userAgent),
        Xt = !!(St || _t || vt),
        Tt = !Xt && /gecko\/(\d+)/i.test(kt.userAgent),
        Rt = !Xt && /Chrome\/(\d+)/.exec(kt.userAgent),
        Wt = "webkitFontSmoothing" in yt.documentElement.style,
        qt = !Xt && /Apple Computer/.test(kt.vendor);
    var Yt = {
        mac: /Mac/.test(kt.platform),
        ie: Xt,
        ie_version: St ? yt.documentMode || 6 : _t ? +_t[1] : vt ? +vt[1] : 0,
        gecko: Tt,
        gecko_version: Tt ? +(/Firefox\/(\d+)/.exec(kt.userAgent) || [0, 0])[1] : 0,
        chrome: !!Rt,
        chrome_version: Rt ? +Rt[1] : 0,
        ios: qt && (/Mobile\/\w+/.test(kt.userAgent) || kt.maxTouchPoints > 2),
        android: /Android\b/.test(kt.userAgent),
        webkit: Wt,
        safari: qt,
        webkit_version: Wt ? +(/\bAppleWebKit\/(\d+)/.exec(navigator.userAgent) || [0, 0])[1] : 0,
        tabSize: null != yt.documentElement.style.tabSize ? "tab-size" : "-moz-tab-size"
    };
    const zt = [];
    class Zt extends bt {
        become(e) {
            return !1
        }
        getSide() {
            return 0
        }
    }
    Zt.prototype.children = zt;
    class Et extends Zt {
        constructor(e) {
            super(), this.text = e
        }
        get length() {
            return this.text.length
        }
        createDOM(e) {
            this.setDOM(e || document.createTextNode(this.text))
        }
        sync(e) {
            this.dom || this.createDOM(), this.dom.nodeValue != this.text && (e && e.node == this.dom && (e.written = !0), this.dom.nodeValue = this.text)
        }
        reuseDOM(e) {
            return 3 == e.nodeType && (this.createDOM(e), !0)
        }
        merge(e, t, n) {
            return (!n || n instanceof Et && !(this.length - (t - e) + n.length > 256)) && (this.text = this.text.slice(0, e) + (n ? n.text : "") + this.text.slice(t), this.markDirty(), !0)
        }
        slice(e) {
            return new Et(this.text.slice(e))
        }
        localPosFromDOM(e, t) {
            return e == this.dom ? t : t ? this.text.length : 0
        }
        domAtPos(e) {
            return new Qt(this.dom, e)
        }
        domBoundsAround(e, t, n) {
            return {
                from: n,
                to: n + this.length,
                startDOM: this.dom,
                endDOM: this.dom.nextSibling
            }
        }
        coordsAt(e, t) {
            return Ut(this.dom, e, t)
        }
    }
    class It extends Zt {
        constructor(e, t = [], n = 0) {
            super(), this.mark = e, this.children = t, this.length = n;
            for (let e of t) e.setParent(this)
        }
        createDOM() {
            let e = document.createElement(this.mark.tagName);
            if (this.mark.class && (e.className = this.mark.class), this.mark.attrs)
                for (let t in this.mark.attrs) e.setAttribute(t, this.mark.attrs[t]);
            this.setDOM(e)
        }
        sync(e) {
            this.dom || this.createDOM(), super.sync(e)
        }
        merge(e, t, n, r, i) {
            return (!n || !(!(n instanceof It && n.mark.eq(this.mark)) || e && r <= 0 || t < this.length && i <= 0)) && (At(this, e, t, n ? n.children : zt, r - 1, i - 1), this.markDirty(), !0)
        }
        slice(e) {
            return new It(this.mark, function(e, t) {
                let n = [],
                    r = 0;
                for (let i of e) {
                    let e = r + i.length;
                    e > t && n.push(r < t ? i.slice(t - r) : i), r = e
                }
                return n
            }(this.children, e), this.length - e)
        }
        domAtPos(e) {
            return Ct(this.dom, this.children, e)
        }
        coordsAt(e, t) {
            return Lt(this, e, t)
        }
    }

    function Ut(e, t, n) {
        let r = e.nodeValue.length;
        t > r && (t = r);
        let i = t,
            a = t,
            o = 0;
        0 == t && n < 0 || t == r && n >= 0 ? Yt.chrome || Yt.gecko || (t ? (i--, o = 1) : (a++, o = -1)) : n < 0 ? i-- : a++;
        let s = mt(e, i, a).getClientRects();
        if (!s.length) return lt;
        let O = s[(o ? o < 0 : n >= 0) ? 0 : s.length - 1];
        return Yt.safari && !o && 0 == O.width && (O = Array.prototype.find.call(s, (e => e.width)) || O), o ? ct(O, o < 0) : O
    }
    class Vt extends Zt {
        constructor(e, t, n) {
            super(), this.widget = e, this.length = t, this.side = n
        }
        static create(e, t, n) {
            return new(e.customView || Vt)(e, t, n)
        }
        slice(e) {
            return Vt.create(this.widget, this.length - e, this.side)
        }
        sync() {
            this.dom && this.widget.updateDOM(this.dom) || (this.setDOM(this.widget.toDOM(this.editorView)), this.dom.contentEditable = "false")
        }
        getSide() {
            return this.side
        }
        merge(e, t, n, r, i) {
            return !(n && (!(n instanceof Vt && this.widget.compare(n.widget)) || e > 0 && r <= 0 || t < this.length && i <= 0)) && (this.length = e + (n ? n.length : 0) + (this.length - t), !0)
        }
        become(e) {
            return e.length == this.length && e instanceof Vt && e.side == this.side && this.widget.constructor == e.widget.constructor && (this.widget.eq(e.widget) || this.markDirty(!0), this.widget = e.widget, !0)
        }
        ignoreMutation() {
            return !0
        }
        ignoreEvent(e) {
            return this.widget.ignoreEvent(e)
        }
        get overrideDOMText() {
            if (0 == this.length) return d.empty;
            let e = this;
            for (; e.parent;) e = e.parent;
            let t = e.editorView,
                n = t && t.state.doc,
                r = this.posAtStart;
            return n ? n.slice(r, r + this.length) : d.empty
        }
        domAtPos(e) {
            return 0 == e ? Qt.before(this.dom) : Qt.after(this.dom, e == this.length)
        }
        domBoundsAround() {
            return null
        }
        coordsAt(e, t) {
            let n = this.dom.getClientRects(),
                r = null;
            if (!n.length) return lt;
            for (let t = e > 0 ? n.length - 1 : 0; r = n[t], !(e > 0 ? 0 == t : t == n.length - 1 || r.top < r.bottom); t += e > 0 ? -1 : 1);
            return 0 == e && t > 0 || e == this.length && t <= 0 ? r : ct(r, 0 == e)
        }
    }
    class jt extends Vt {
        domAtPos(e) {
            return new Qt(this.widget.text, e)
        }
        sync() {
            this.dom || this.setDOM(this.widget.toDOM())
        }
        localPosFromDOM(e, t) {
            return t ? 3 == e.nodeType ? Math.min(t, this.length) : this.length : 0
        }
        ignoreMutation() {
            return !1
        }
        get overrideDOMText() {
            return null
        }
        coordsAt(e, t) {
            return Ut(this.widget.text, e, t)
        }
    }

    function At(e, t, n, r, i, a) {
        let o = e.childCursor(),
            {
                i: s,
                off: O
            } = o.findPos(n, 1),
            {
                i: l,
                off: c
            } = o.findPos(t, -1),
            u = t - n;
        for (let e of r) u += e.length;
        e.length += u;
        let {
            children: d
        } = e;
        if (l == s && c) {
            let e = d[l];
            if (1 == r.length && e.merge(c, O, r[0], i, a)) return;
            if (0 == r.length) return void e.merge(c, O, null, i, a);
            let t = e.slice(O);
            t.merge(0, 0, r[r.length - 1], 0, a) ? r[r.length - 1] = t : r.push(t), s++, a = O = 0
        }
        if (O) {
            let e = d[s];
            r.length && e.merge(0, O, r[r.length - 1], 0, a) ? (r.pop(), a = r.length ? 0 : i) : e.merge(0, O, null, 0, 0)
        } else s < d.length && r.length && d[s].merge(0, 0, r[r.length - 1], 0, a) && (r.pop(), a = r.length ? 0 : i);
        if (c) {
            let e = d[l];
            r.length && e.merge(c, e.length, r[0], i, 0) ? (r.shift(), i = r.length ? 0 : a) : e.merge(c, e.length, null, 0, 0), l++
        } else if (l && r.length) {
            let e = d[l - 1];
            e.merge(e.length, e.length, r[0], i, 0) && (r.shift(), i = r.length ? 0 : a)
        }
        for (; l < s && r.length && d[s - 1].become(r[r.length - 1]);) r.pop(), s--, a = r.length ? 0 : i;
        for (; l < s && r.length && d[l].become(r[0]);) r.shift(), l++, i = r.length ? 0 : a;
        !r.length && l && s < d.length && i && a && d[s].merge(0, 0, d[l - 1], i, a) && l--, (r.length || l != s) && e.replaceChildren(l, s, r)
    }

    function Ct(e, t, n) {
        let r = 0;
        for (let i = 0; r < t.length; r++) {
            let a = t[r],
                o = i + a.length;
            if (!(o == i && a.getSide() <= 0)) {
                if (n > i && n < o && a.dom.parentNode == e) return a.domAtPos(n - i);
                if (n <= i) break;
                i = o
            }
        }
        for (; r > 0; r--) {
            let n = t[r - 1].dom;
            if (n.parentNode == e) return Qt.after(n)
        }
        return new Qt(e, 0)
    }

    function Gt(e, t, n) {
        let r, {
            children: i
        } = e;
        n > 0 && t instanceof It && i.length && (r = i[i.length - 1]) instanceof It && r.mark.eq(t.mark) ? Gt(r, t.children[0], n - 1) : (i.push(t), t.setParent(e)), e.length += t.length
    }

    function Lt(e, t, n) {
        for (let r = 0, i = 0; i < e.children.length; i++) {
            let a = e.children[i],
                o = r + a.length;
            if (!(o == r && a.getSide() <= 0)) {
                if (n <= 0 || o == e.length ? o >= t : o > t) return a.coordsAt(t - r, n);
                r = o
            }
        }
        let r = e.dom.lastChild;
        if (!r) return e.dom.getBoundingClientRect();
        let i = it(r);
        return i[i.length - 1]
    }

    function Nt(e, t) {
        for (let n in e) "class" == n && t.class ? t.class += " " + e.class : "style" == n && t.style ? t.style += ";" + e.style : t[n] = e[n];
        return t
    }

    function Dt(e, t) {
        if (e == t) return !0;
        if (!e || !t) return !1;
        let n = Object.keys(e),
            r = Object.keys(t);
        if (n.length != r.length) return !1;
        for (let i of n)
            if (-1 == r.indexOf(i) || e[i] !== t[i]) return !1;
        return !0
    }

    function Mt(e, t, n) {
        if (t)
            for (let r in t) n && r in n || e.removeAttribute(r);
        if (n)
            for (let r in n) t && t[r] == n[r] || e.setAttribute(r, n[r])
    }
    class Bt {
        eq(e) {
            return !1
        }
        updateDOM(e) {
            return !1
        }
        compare(e) {
            return this == e || this.constructor == e.constructor && this.eq(e)
        }
        get estimatedHeight() {
            return -1
        }
        ignoreEvent(e) {
            return !0
        }
        get customView() {
            return null
        }
    }
    var Ft = function(e) {
        return e[e.Text = 0] = "Text", e[e.WidgetBefore = 1] = "WidgetBefore", e[e.WidgetAfter = 2] = "WidgetAfter", e[e.WidgetRange = 3] = "WidgetRange", e
    }(Ft || (Ft = {}));
    class Ht extends Xe {
        constructor(e, t, n, r) {
            super(), this.startSide = e, this.endSide = t, this.widget = n, this.spec = r
        }
        get heightRelevant() {
            return !1
        }
        static mark(e) {
            return new Jt(e)
        }
        static widget(e) {
            let t = e.side || 0;
            return e.block && (t += 200000001 * (t > 0 ? 1 : -1)), new en(e, t, t, !!e.block, e.widget || null, !1)
        }
        static replace(e) {
            let t = !!e.block,
                {
                    start: n,
                    end: r
                } = tn(e);
            return new en(e, t ? -2e8 * (n ? 2 : 1) : 1e8 * (n ? -1 : 1), t ? 2e8 * (r ? 2 : 1) : 1e8 * (r ? 1 : -1), t, e.widget || null, !0)
        }
        static line(e) {
            return new Kt(e)
        }
        static set(e, t = !1) {
            return qe.of(e, t)
        }
        hasHeight() {
            return !!this.widget && this.widget.estimatedHeight > -1
        }
    }
    Ht.none = qe.empty;
    class Jt extends Ht {
        constructor(e) {
            let {
                start: t,
                end: n
            } = tn(e);
            super(1e8 * (t ? -1 : 1), 1e8 * (n ? 1 : -1), null, e), this.tagName = e.tagName || "span", this.class = e.class || "", this.attrs = e.attributes || null
        }
        eq(e) {
            return this == e || e instanceof Jt && this.tagName == e.tagName && this.class == e.class && Dt(this.attrs, e.attrs)
        }
        range(e, t = e) {
            if (e >= t) throw new RangeError("Mark decorations may not be empty");
            return super.range(e, t)
        }
    }
    Jt.prototype.point = !1;
    class Kt extends Ht {
        constructor(e) {
            super(-1e8, -1e8, null, e)
        }
        eq(e) {
            return e instanceof Kt && Dt(this.spec.attributes, e.spec.attributes)
        }
        range(e, t = e) {
            if (t != e) throw new RangeError("Line decoration ranges must be zero-length");
            return super.range(e, t)
        }
    }
    Kt.prototype.mapMode = P.TrackBefore, Kt.prototype.point = !0;
    class en extends Ht {
        constructor(e, t, n, r, i, a) {
            super(t, n, i, e), this.block = r, this.isReplace = a, this.mapMode = r ? t < 0 ? P.TrackBefore : P.TrackAfter : P.TrackDel
        }
        get type() {
            return this.startSide < this.endSide ? Ft.WidgetRange : this.startSide < 0 ? Ft.WidgetBefore : Ft.WidgetAfter
        }
        get heightRelevant() {
            return this.block || !!this.widget && this.widget.estimatedHeight >= 5
        }
        eq(e) {
            return e instanceof en && function(e, t) {
                return e == t || !!(e && t && e.compare(t))
            }(this.widget, e.widget) && this.block == e.block && this.startSide == e.startSide && this.endSide == e.endSide
        }
        range(e, t = e) {
            if (this.isReplace && (e > t || e == t && this.startSide > 0 && this.endSide < 0)) throw new RangeError("Invalid range for replacement decoration");
            if (!this.isReplace && t != e) throw new RangeError("Widget decorations can only have zero-length ranges");
            return super.range(e, t)
        }
    }

    function tn(e) {
        let {
            inclusiveStart: t,
            inclusiveEnd: n
        } = e;
        return null == t && (t = e.inclusive), null == n && (n = e.inclusive), {
            start: t || !1,
            end: n || !1
        }
    }

    function nn(e, t, n, r = 0) {
        let i = n.length - 1;
        i >= 0 && n[i] + r > e ? n[i] = Math.max(n[i], t) : n.push(e, t)
    }
    en.prototype.point = !0;
    class rn extends bt {
        constructor() {
            super(...arguments), this.children = [], this.length = 0, this.prevAttrs = void 0, this.attrs = null, this.breakAfter = 0
        }
        merge(e, t, n, r, i, a) {
            if (n) {
                if (!(n instanceof rn)) return !1;
                this.dom || n.transferDOM(this)
            }
            return r && this.setDeco(n ? n.attrs : null), At(this, e, t, n ? n.children : an, i, a), !0
        }
        split(e) {
            let t = new rn;
            if (t.breakAfter = this.breakAfter, 0 == this.length) return t;
            let {
                i: n,
                off: r
            } = this.childPos(e);
            r && (t.append(this.children[n].slice(r), 0), this.children[n].merge(r, this.children[n].length, null, 0, 0), n++);
            for (let e = n; e < this.children.length; e++) t.append(this.children[e], 0);
            for (; n > 0 && 0 == this.children[n - 1].length;) this.children[n - 1].parent = null, n--;
            return this.children.length = n, this.markDirty(), this.length = e, t
        }
        transferDOM(e) {
            this.dom && (e.setDOM(this.dom), e.prevAttrs = void 0 === this.prevAttrs ? this.attrs : this.prevAttrs, this.prevAttrs = void 0, this.dom = null)
        }
        setDeco(e) {
            Dt(this.attrs, e) || (this.dom && (this.prevAttrs = this.attrs, this.markDirty()), this.attrs = e)
        }
        append(e, t) {
            Gt(this, e, t)
        }
        addLineDeco(e) {
            let t = e.spec.attributes;
            t && (this.attrs = Nt(t, this.attrs || {}))
        }
        domAtPos(e) {
            return Ct(this.dom, this.children, e)
        }
        sync(e) {
            this.dom || (this.setDOM(document.createElement("div")), this.dom.className = "cm-line", this.prevAttrs = this.attrs ? null : void 0), void 0 !== this.prevAttrs && (Mt(this.dom, this.prevAttrs, this.attrs), this.dom.classList.add("cm-line"), this.prevAttrs = void 0), super.sync(e);
            let t = this.dom.lastChild;
            if (!t || "BR" != t.nodeName && bt.get(t) instanceof Vt && (!Yt.ios || !this.children.some((e => e instanceof Et)))) {
                let e = document.createElement("BR");
                e.cmIgnore = !0, this.dom.appendChild(e)
            }
        }
        measureTextSize() {
            if (0 == this.children.length || this.length > 20) return null;
            let e = 0;
            for (let t of this.children) {
                if (!(t instanceof Et)) return null;
                let n = it(t.dom);
                if (1 != n.length) return null;
                e += n[0].width
            }
            return {
                lineHeight: this.dom.getBoundingClientRect().height,
                charWidth: e / this.length
            }
        }
        coordsAt(e, t) {
            return Lt(this, e, t)
        }
        match(e) {
            return !1
        }
        get type() {
            return Ft.Text
        }
        static find(e, t) {
            for (let n = 0, r = 0;; n++) {
                let i = e.children[n],
                    a = r + i.length;
                if (a >= t) {
                    if (i instanceof rn) return i;
                    if (i.length) return null
                }
                r = a + i.breakAfter
            }
        }
    }
    const an = [];
    class on extends bt {
        constructor(e, t, n) {
            super(), this.widget = e, this.length = t, this.type = n, this.breakAfter = 0
        }
        merge(e, t, n, r, i, a) {
            return !(n && (!(n instanceof on && this.widget.compare(n.widget)) || e > 0 && i <= 0 || t < this.length && a <= 0)) && (this.length = e + (n ? n.length : 0) + (this.length - t), !0)
        }
        domAtPos(e) {
            return 0 == e ? Qt.before(this.dom) : Qt.after(this.dom, e == this.length)
        }
        split(e) {
            let t = this.length - e;
            return this.length = e, new on(this.widget, t, this.type)
        }
        get children() {
            return an
        }
        sync() {
            this.dom && this.widget.updateDOM(this.dom) || (this.setDOM(this.widget.toDOM(this.editorView)), this.dom.contentEditable = "false")
        }
        get overrideDOMText() {
            return this.parent ? this.parent.view.state.doc.slice(this.posAtStart, this.posAtEnd) : d.empty
        }
        domBoundsAround() {
            return null
        }
        match(e) {
            return e instanceof on && e.type == this.type && e.widget.constructor == this.widget.constructor && (e.widget.eq(this.widget) || this.markDirty(!0), this.widget = e.widget, this.length = e.length, this.breakAfter = e.breakAfter, !0)
        }
        ignoreMutation() {
            return !0
        }
        ignoreEvent(e) {
            return this.widget.ignoreEvent(e)
        }
    }
    class sn {
        constructor(e, t, n) {
            this.doc = e, this.pos = t, this.end = n, this.content = [], this.curLine = null, this.breakAtStart = 0, this.openStart = -1, this.openEnd = -1, this.text = "", this.textOff = 0, this.cursor = e.iter(), this.skip = t
        }
        posCovered() {
            if (0 == this.content.length) return !this.breakAtStart && this.doc.lineAt(this.pos).from != this.pos;
            let e = this.content[this.content.length - 1];
            return !(e.breakAfter || e instanceof on && e.type == Ft.WidgetBefore)
        }
        getLine() {
            return this.curLine || this.content.push(this.curLine = new rn), this.curLine
        }
        addWidget(e) {
            this.curLine = null, this.content.push(e)
        }
        finish() {
            this.posCovered() || this.getLine()
        }
        wrapMarks(e, t) {
            for (let n of t) e = new It(n, [e], e.length);
            return e
        }
        buildText(e, t, n) {
            for (; e > 0;) {
                if (this.textOff == this.text.length) {
                    let {
                        value: t,
                        lineBreak: n,
                        done: r
                    } = this.cursor.next(this.skip);
                    if (this.skip = 0, r) throw new Error("Ran out of text content when drawing inline views");
                    if (n) {
                        this.posCovered() || this.getLine(), this.content.length ? this.content[this.content.length - 1].breakAfter = 1 : this.breakAtStart = 1, this.curLine = null, e--;
                        continue
                    }
                    this.text = t, this.textOff = 0
                }
                let r = Math.min(this.text.length - this.textOff, e, 512);
                this.getLine().append(this.wrapMarks(new Et(this.text.slice(this.textOff, this.textOff + r)), t), n), this.textOff += r, e -= r, n = 0
            }
        }
        span(e, t, n, r) {
            this.buildText(t - e, n, r), this.pos = t, this.openStart < 0 && (this.openStart = r)
        }
        point(e, t, n, r, i) {
            let a = t - e;
            if (n instanceof en)
                if (n.block) {
                    let {
                        type: e
                    } = n;
                    e != Ft.WidgetAfter || this.posCovered() || this.getLine(), this.addWidget(new on(n.widget || new On("div"), a, e))
                } else {
                    let e = this.wrapMarks(Vt.create(n.widget || new On("span"), a, n.startSide), r);
                    this.getLine().append(e, i)
                }
            else this.doc.lineAt(this.pos).from == this.pos && this.getLine().addLineDeco(n);
            a && (this.textOff + a <= this.text.length ? this.textOff += a : (this.skip += a - (this.text.length - this.textOff), this.text = "", this.textOff = 0), this.pos = t), this.openStart < 0 && (this.openStart = i)
        }
        static build(e, t, n, r) {
            let i = new sn(e, t, n);
            return i.openEnd = qe.spans(r, t, n, i), i.openStart < 0 && (i.openStart = i.openEnd), i.finish(), i
        }
    }
    class On extends Bt {
        constructor(e) {
            super(), this.tag = e
        }
        eq(e) {
            return e.tag == this.tag
        }
        toDOM() {
            return document.createElement(this.tag)
        }
        updateDOM(e) {
            return e.nodeName.toLowerCase() == this.tag
        }
    }
    const ln = [],
        cn = Z.define(),
        un = Z.define(),
        dn = Z.define(),
        pn = Z.define(),
        hn = Z.define(),
        fn = Z.define();

    function mn(e, t, n) {
        let r = e.facet(pn);
        r.length ? r[0](t) : window.onerror && window.onerror(String(t), n, void 0, void 0, t)
    }
    const gn = Z.define({
        combine: e => !e.length || e[0]
    });
    class Qn {
        constructor(e, t) {
            this.field = e, this.get = t
        }
    }
    class $n {
        from(e) {
            return new Qn(this, e)
        }
        static define() {
            return new $n
        }
    }
    $n.decorations = $n.define(), $n.atomicRanges = $n.define(), $n.scrollMargins = $n.define();
    let bn = 0;
    const xn = Z.define();
    class Pn {
        constructor(e, t, n) {
            this.id = e, this.create = t, this.fields = n, this.extension = xn.of(this)
        }
        static define(e, t) {
            let {
                eventHandlers: n,
                provide: r,
                decorations: i
            } = t || {}, a = [];
            if (r)
                for (let e of Array.isArray(r) ? r : [r]) a.push(e);
            return n && a.push(wn.from((e => ({
                plugin: e,
                handlers: n
            })))), i && a.push($n.decorations.from(i)), new Pn(bn++, e, a)
        }
        static fromClass(e, t) {
            return Pn.define((t => new e(t)), t)
        }
    }
    const wn = $n.define();
    class kn {
        constructor(e) {
            this.spec = e, this.mustUpdate = null, this.value = null
        }
        takeField(e, t) {
            for (let {
                    field: n,
                    get: r
                } of this.spec.fields) n == e && t.push(r(this.value))
        }
        update(e) {
            if (this.value) {
                if (this.mustUpdate) {
                    let e = this.mustUpdate;
                    if (this.mustUpdate = null, !this.value.update) return this;
                    try {
                        this.value.update(e)
                    } catch (t) {
                        if (mn(e.state, t, "CodeMirror plugin crashed"), this.value.destroy) try {
                            this.value.destroy()
                        } catch (e) {}
                        return kn.dummy
                    }
                }
            } else try {
                this.value = this.spec.create(e)
            } catch (t) {
                return mn(e.state, t, "CodeMirror plugin crashed"), kn.dummy
            }
            return this
        }
        destroy(e) {
            var t;
            if (null === (t = this.value) || void 0 === t ? void 0 : t.destroy) try {
                this.value.destroy()
            } catch (t) {
                mn(e.state, t, "CodeMirror plugin crashed")
            }
        }
    }
    kn.dummy = new kn(Pn.define((() => ({}))));
    const yn = Z.define({
            combine: e => e.reduce(((e, t) => Nt(t, e)), {})
        }),
        vn = Z.define({
            combine: e => e.reduce(((e, t) => Nt(t, e)), {})
        }),
        Sn = Z.define(),
        _n = Z.define();
    class Xn {
        constructor(e, t, n, r) {
            this.fromA = e, this.toA = t, this.fromB = n, this.toB = r
        }
        join(e) {
            return new Xn(Math.min(this.fromA, e.fromA), Math.max(this.toA, e.toA), Math.min(this.fromB, e.fromB), Math.max(this.toB, e.toB))
        }
        addToSet(e) {
            let t = e.length,
                n = this;
            for (; t > 0; t--) {
                let r = e[t - 1];
                if (!(r.fromA > n.toA)) {
                    if (r.toA < n.fromA) break;
                    n = n.join(r), e.splice(t - 1, 1)
                }
            }
            return e.splice(t, 0, n), e
        }
        static extendWithRanges(e, t) {
            if (0 == t.length) return e;
            let n = [];
            for (let r = 0, i = 0, a = 0, o = 0;; r++) {
                let s = r == e.length ? null : e[r],
                    O = a - o,
                    l = s ? s.fromB : 1e9;
                for (; i < t.length && t[i] < l;) {
                    let e = t[i],
                        r = t[i + 1],
                        a = Math.max(o, e),
                        s = Math.min(l, r);
                    if (a <= s && new Xn(a + O, s + O, a, s).addToSet(n), r > l) break;
                    i += 2
                }
                if (!s) return n;
                new Xn(s.fromA, s.toA, s.fromB, s.toB).addToSet(n), a = s.toA, o = s.toB
            }
        }
    }
    class Tn {
        constructor(e, t, n = ln) {
            this.view = e, this.state = t, this.transactions = n, this.flags = 0, this.startState = e.state, this.changes = k.empty(this.startState.doc.length);
            for (let e of n) this.changes = this.changes.compose(e.changes);
            let r = [];
            this.changes.iterChangedRanges(((e, t, n, i) => r.push(new Xn(e, t, n, i)))), this.changedRanges = r;
            let i = e.hasFocus;
            i != e.inputState.notifiedFocused && (e.inputState.notifiedFocused = i, this.flags |= 1), this.docChanged && (this.flags |= 2)
        }
        get viewportChanged() {
            return (4 & this.flags) > 0
        }
        get heightChanged() {
            return (2 & this.flags) > 0
        }
        get geometryChanged() {
            return this.docChanged || (18 & this.flags) > 0
        }
        get focusChanged() {
            return (1 & this.flags) > 0
        }
        get docChanged() {
            return this.transactions.some((e => e.docChanged))
        }
        get selectionSet() {
            return this.transactions.some((e => e.selection))
        }
        get empty() {
            return 0 == this.flags && 0 == this.transactions.length
        }
    }
    class Rn extends bt {
        constructor(e) {
            super(), this.view = e, this.compositionDeco = Ht.none, this.decorations = [], this.minWidth = 0, this.minWidthFrom = 0, this.minWidthTo = 0, this.impreciseAnchor = null, this.impreciseHead = null, this.setDOM(e.contentDOM), this.children = [new rn], this.children[0].setParent(this), this.updateInner([new Xn(0, 0, 0, e.state.doc.length)], this.updateDeco(), 0)
        }
        get root() {
            return this.view.root
        }
        get editorView() {
            return this.view
        }
        get length() {
            return this.view.state.doc.length
        }
        update(e) {
            let t = e.changedRanges;
            this.minWidth > 0 && t.length && (t.every((({
                fromA: e,
                toA: t
            }) => t < this.minWidthFrom || e > this.minWidthTo)) ? (this.minWidthFrom = e.changes.mapPos(this.minWidthFrom, 1), this.minWidthTo = e.changes.mapPos(this.minWidthTo, 1)) : this.minWidth = 0), this.view.inputState.composing < 0 ? this.compositionDeco = Ht.none : e.transactions.length && (this.compositionDeco = function(e, t) {
                let n = e.observer.selectionRange,
                    r = n.focusNode && Yn(n.focusNode, n.focusOffset, 0);
                if (!r) return Ht.none;
                let i, a, o = e.docView.nearest(r),
                    s = r;
                if (o instanceof Zt) {
                    for (; o.parent instanceof Zt;) o = o.parent;
                    i = o.posAtStart, a = i + o.length, s = o.dom
                } else {
                    if (!(o instanceof rn)) return Ht.none; {
                        for (; s.parentNode != o.dom;) s = s.parentNode;
                        let e = s.previousSibling;
                        for (; e && !bt.get(e);) e = e.previousSibling;
                        i = a = e ? bt.get(e).posAtEnd : o.posAtStart
                    }
                }
                let O = t.mapPos(i, 1),
                    l = Math.max(O, t.mapPos(a, -1)),
                    c = r.nodeValue,
                    {
                        state: u
                    } = e;
                if (l - O < c.length)
                    if (u.sliceDoc(O, Math.min(u.doc.length, O + c.length)) == c) l = O + c.length;
                    else {
                        if (u.sliceDoc(Math.max(0, l - c.length), l) != c) return Ht.none;
                        O = l - c.length
                    }
                else if (u.sliceDoc(O, l) != c) return Ht.none;
                return Ht.set(Ht.replace({
                    widget: new qn(s, r)
                }).range(O, l))
            }(this.view, e.changes));
            let n = (Yt.ie || Yt.chrome) && !this.compositionDeco.size && e && e.state.doc.lines != e.startState.doc.lines,
                r = this.decorations,
                i = this.updateDeco(),
                a = function(e, t, n) {
                    let r = new zn;
                    return qe.compare(e, t, n, r), r.changes
                }(r, i, e.changes);
            t = Xn.extendWithRanges(t, a);
            let o = e.transactions.some((e => "pointerselection" == e.annotation(ce.userEvent)));
            return 0 == this.dirty && 0 == t.length && !(12 & e.flags) && e.state.selection.main.from >= this.view.viewport.from && e.state.selection.main.to <= this.view.viewport.to ? (this.updateSelection(n, o), !1) : (this.updateInner(t, i, e.startState.doc.length, n, o), !0)
        }
        updateInner(e, t, n, r = !1, i = !1) {
            this.updateChildren(e, t, n);
            let {
                observer: a
            } = this.view;
            a.ignore((() => {
                this.dom.style.height = this.view.viewState.domHeight + "px", this.dom.style.minWidth = this.minWidth ? this.minWidth + "px" : "";
                let e = Yt.chrome || Yt.ios ? {
                    node: a.selectionRange.focusNode,
                    written: !1
                } : void 0;
                this.sync(e), this.dirty = 0, e && (e.written || a.selectionRange.focusNode != e.node) && (r = !0), this.updateSelection(r, i), this.dom.style.height = ""
            }))
        }
        updateChildren(e, t, n) {
            let r = this.childCursor(n);
            for (let n = e.length - 1;; n--) {
                let i = n >= 0 ? e[n] : null;
                if (!i) break;
                let {
                    fromA: a,
                    toA: o,
                    fromB: s,
                    toB: O
                } = i, {
                    content: l,
                    breakAtStart: c,
                    openStart: u,
                    openEnd: d
                } = sn.build(this.view.state.doc, s, O, t), {
                    i: p,
                    off: h
                } = r.findPos(o, 1), {
                    i: f,
                    off: m
                } = r.findPos(a, -1);
                this.replaceRange(f, m, p, h, l, c, u, d)
            }
        }
        replaceRange(e, t, n, r, i, a, o, s) {
            let O = this.children[e],
                l = i.length ? i[i.length - 1] : null,
                c = l ? l.breakAfter : a;
            if (e == n && !a && !c && i.length < 2 && O.merge(t, r, i.length ? l : null, 0 == t, o, s)) return;
            let u = this.children[n];
            for (r < u.length || u.children.length && 0 == u.children[u.children.length - 1].length ? (e == n && (u = u.split(r), r = 0), !c && l && u.merge(0, r, l, !0, 0, s) ? i[i.length - 1] = u : ((r || u.children.length && 0 == u.children[0].length) && u.merge(0, r, null, !1, 0, s), i.push(u))) : u.breakAfter && (l ? l.breakAfter = 1 : a = 1), n++, O.breakAfter = a, t > 0 && (!a && i.length && O.merge(t, O.length, i[0], !1, o, 0) ? O.breakAfter = i.shift().breakAfter : (t < O.length || O.children.length && 0 == O.children[O.children.length - 1].length) && O.merge(t, O.length, null, !1, o, 0), e++); e < n && i.length;)
                if (this.children[n - 1].match(i[i.length - 1])) n--, i.pop();
                else {
                    if (!this.children[e].match(i[0])) break;
                    e++, i.shift()
                }(e < n || i.length) && this.replaceChildren(e, n, i)
        }
        updateSelection(e = !1, t = !1) {
            if (!t && !this.mayControlSelection() || Yt.ios && this.view.inputState.rapidCompositionStart) return;
            let n = this.view.state.selection.main,
                r = this.domAtPos(n.anchor),
                i = n.empty ? r : this.domAtPos(n.head);
            if (Yt.gecko && n.empty && (1 == (a = r).node.nodeType && a.node.firstChild && (0 == a.offset || "false" == a.node.childNodes[a.offset - 1].contentEditable) && (a.offset == a.node.childNodes.length || "false" == a.node.childNodes[a.offset].contentEditable))) {
                let t = document.createTextNode("");
                this.view.observer.ignore((() => r.node.insertBefore(t, r.node.childNodes[r.offset] || null))), r = i = new Qt(t, 0), e = !0
            }
            var a;
            let o = this.view.observer.selectionRange;
            !e && o.focusNode && at(r.node, r.offset, o.anchorNode, o.anchorOffset) && at(i.node, i.offset, o.focusNode, o.focusOffset) || (this.view.observer.ignore((() => {
                let e = tt(this.root);
                if (n.empty) {
                    if (Yt.gecko) {
                        let e = (t = r.node, a = r.offset, 1 != t.nodeType ? 0 : (a && "false" == t.childNodes[a - 1].contentEditable ? 1 : 0) | (a < t.childNodes.length && "false" == t.childNodes[a].contentEditable ? 2 : 0));
                        if (e && 3 != e) {
                            let t = Yn(r.node, r.offset, 1 == e ? 1 : -1);
                            t && (r = new Qt(t, 1 == e ? 0 : t.nodeValue.length))
                        }
                    }
                    e.collapse(r.node, r.offset), null != n.bidiLevel && null != o.cursorBidiLevel && (o.cursorBidiLevel = n.bidiLevel)
                } else if (e.extend) e.collapse(r.node, r.offset), e.extend(i.node, i.offset);
                else {
                    let t = document.createRange();
                    n.anchor > n.head && ([r, i] = [i, r]), t.setEnd(i.node, i.offset), t.setStart(r.node, r.offset), e.removeAllRanges(), e.addRange(t)
                }
                var t, a
            })), this.view.observer.setSelectionRange(r, i)), this.impreciseAnchor = r.precise ? null : new Qt(o.anchorNode, o.anchorOffset), this.impreciseHead = i.precise ? null : new Qt(o.focusNode, o.focusOffset)
        }
        enforceCursorAssoc() {
            if (this.view.composing) return;
            let e = this.view.state.selection.main,
                t = tt(this.root);
            if (!e.empty || !e.assoc || !t.modify) return;
            let n = rn.find(this, e.head);
            if (!n) return;
            let r = n.posAtStart;
            if (e.head == r || e.head == r + n.length) return;
            let i = this.coordsAt(e.head, -1),
                a = this.coordsAt(e.head, 1);
            if (!i || !a || i.bottom > a.top) return;
            let o = this.domAtPos(e.head + e.assoc);
            t.collapse(o.node, o.offset), t.modify("move", e.assoc < 0 ? "forward" : "backward", "lineboundary")
        }
        mayControlSelection() {
            return this.view.state.facet(gn) ? this.root.activeElement == this.dom : rt(this.dom, this.view.observer.selectionRange)
        }
        nearest(e) {
            for (let t = e; t;) {
                let e = bt.get(t);
                if (e && e.rootView == this) return e;
                t = t.parentNode
            }
            return null
        }
        posFromDOM(e, t) {
            let n = this.nearest(e);
            if (!n) throw new RangeError("Trying to find position for a DOM position outside of the document");
            return n.localPosFromDOM(e, t) + n.posAtStart
        }
        domAtPos(e) {
            let {
                i: t,
                off: n
            } = this.childCursor().findPos(e, -1);
            for (; t < this.children.length - 1;) {
                let e = this.children[t];
                if (n < e.length || e instanceof rn) break;
                t++, n = 0
            }
            return this.children[t].domAtPos(n)
        }
        coordsAt(e, t) {
            for (let n = this.length, r = this.children.length - 1;; r--) {
                let i = this.children[r],
                    a = n - i.breakAfter - i.length;
                if (e > a || e == a && i.type != Ft.WidgetBefore && i.type != Ft.WidgetAfter && (!r || 2 == t || this.children[r - 1].breakAfter || this.children[r - 1].type == Ft.WidgetBefore && t > -2)) return i.coordsAt(e - a, t);
                n = a
            }
        }
        measureVisibleLineHeights() {
            let e = [],
                {
                    from: t,
                    to: n
                } = this.view.viewState.viewport,
                r = Math.max(this.view.scrollDOM.clientWidth, this.minWidth) + 1;
            for (let i = 0, a = 0; a < this.children.length; a++) {
                let o = this.children[a],
                    s = i + o.length;
                if (s > n) break;
                if (i >= t) {
                    e.push(o.dom.getBoundingClientRect().height);
                    let t = o.dom.scrollWidth;
                    t > r && (this.minWidth = r = t, this.minWidthFrom = i, this.minWidthTo = s)
                }
                i = s + o.breakAfter
            }
            return e
        }
        measureTextSize() {
            for (let e of this.children)
                if (e instanceof rn) {
                    let t = e.measureTextSize();
                    if (t) return t
                }
            let e, t, n = document.createElement("div");
            return n.className = "cm-line", n.textContent = "abc def ghi jkl mno pqr stu", this.view.observer.ignore((() => {
                this.dom.appendChild(n);
                let r = it(n.firstChild)[0];
                e = n.getBoundingClientRect().height, t = r ? r.width / 27 : 7, n.remove()
            })), {
                lineHeight: e,
                charWidth: t
            }
        }
        childCursor(e = this.length) {
            let t = this.children.length;
            return t && (e -= this.children[--t].length), new wt(this.children, e, t)
        }
        computeBlockGapDeco() {
            let e = [],
                t = this.view.viewState;
            for (let n = 0, r = 0;; r++) {
                let i = r == t.viewports.length ? null : t.viewports[r],
                    a = i ? i.from - 1 : this.length;
                if (a > n) {
                    let r = t.lineAt(a, 0).bottom - t.lineAt(n, 0).top;
                    e.push(Ht.replace({
                        widget: new Wn(r),
                        block: !0,
                        inclusive: !0
                    }).range(n, a))
                }
                if (!i) break;
                n = i.to + 1
            }
            return Ht.set(e)
        }
        updateDeco() {
            return this.decorations = [...this.view.pluginField($n.decorations), ...this.view.state.facet(Sn), this.compositionDeco, this.computeBlockGapDeco(), this.view.viewState.lineGapDeco]
        }
        scrollPosIntoView(e, t) {
            let n = this.coordsAt(e, t);
            if (!n) return;
            let r = 0,
                i = 0,
                a = 0,
                o = 0;
            for (let e of this.view.pluginField($n.scrollMargins))
                if (e) {
                    let {
                        left: t,
                        right: n,
                        top: s,
                        bottom: O
                    } = e;
                    null != t && (r = Math.max(r, t)), null != n && (i = Math.max(i, n)), null != s && (a = Math.max(a, s)), null != O && (o = Math.max(o, O))
                }! function(e, t) {
                let n = e.ownerDocument.defaultView;
                for (let r = e.parentNode; r;)
                    if (1 == r.nodeType) {
                        let e, i = r == document.body;
                        if (i) e = ut(n);
                        else {
                            if (r.scrollHeight <= r.clientHeight && r.scrollWidth <= r.clientWidth) {
                                r = r.parentNode;
                                continue
                            }
                            let t = r.getBoundingClientRect();
                            e = {
                                left: t.left,
                                right: t.left + r.clientWidth,
                                top: t.top,
                                bottom: t.top + r.clientHeight
                            }
                        }
                        let a = 0,
                            o = 0;
                        if (t.top < e.top ? o = -(e.top - t.top + 5) : t.bottom > e.bottom && (o = t.bottom - e.bottom + 5), t.left < e.left ? a = -(e.left - t.left + 5) : t.right > e.right && (a = t.right - e.right + 5), a || o)
                            if (i) n.scrollBy(a, o);
                            else {
                                if (o) {
                                    let e = r.scrollTop;
                                    r.scrollTop += o, o = r.scrollTop - e
                                }
                                if (a) {
                                    let e = r.scrollLeft;
                                    r.scrollLeft += a, a = r.scrollLeft - e
                                }
                                t = {
                                    left: t.left - a,
                                    top: t.top - o,
                                    right: t.right - a,
                                    bottom: t.bottom - o
                                }
                            }
                        if (i) break;
                        r = r.assignedSlot || r.parentNode
                    } else {
                        if (11 != r.nodeType) break;
                        r = r.host
                    }
            }(this.dom, {
                left: n.left - r,
                top: n.top - a,
                right: n.right + i,
                bottom: n.bottom + o
            })
        }
    }
    class Wn extends Bt {
        constructor(e) {
            super(), this.height = e
        }
        toDOM() {
            let e = document.createElement("div");
            return this.updateDOM(e), e
        }
        eq(e) {
            return e.height == this.height
        }
        updateDOM(e) {
            return e.style.height = this.height + "px", !0
        }
        get estimatedHeight() {
            return this.height
        }
    }
    class qn extends Bt {
        constructor(e, t) {
            super(), this.top = e, this.text = t
        }
        eq(e) {
            return this.top == e.top && this.text == e.text
        }
        toDOM() {
            return this.top
        }
        ignoreEvent() {
            return !1
        }
        get customView() {
            return jt
        }
    }

    function Yn(e, t, n) {
        for (;;) {
            if (3 == e.nodeType) return e;
            if (1 == e.nodeType && t > 0 && n <= 0) t = Ot(e = e.childNodes[t - 1]);
            else {
                if (!(1 == e.nodeType && t < e.childNodes.length && n >= 0)) return null;
                e = e.childNodes[t], t = 0
            }
        }
    }
    class zn {
        constructor() {
            this.changes = []
        }
        compareRange(e, t) {
            nn(e, t, this.changes)
        }
        comparePoint(e, t) {
            nn(e, t, this.changes)
        }
    }
    var Zn = function(e) {
        return e[e.LTR = 0] = "LTR", e[e.RTL = 1] = "RTL", e
    }(Zn || (Zn = {}));
    const En = Zn.LTR,
        In = Zn.RTL;

    function Un(e) {
        let t = [];
        for (let n = 0; n < e.length; n++) t.push(1 << +e[n]);
        return t
    }
    const Vn = Un("88888888888888888888888888888888888666888888787833333333337888888000000000000000000000000008888880000000000000000000000000088888888888888888888888888888888888887866668888088888663380888308888800000000000000000000000800000000000000000000000000000008"),
        jn = Un("4444448826627288999999999992222222222222222222222222222222222222222222222229999999999999999999994444444444644222822222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222999999949999999229989999223333333333"),
        An = Object.create(null),
        Cn = [];
    for (let e of ["()", "[]", "{}"]) {
        let t = e.charCodeAt(0),
            n = e.charCodeAt(1);
        An[t] = n, An[n] = -t
    }

    function Gn(e) {
        return e <= 247 ? Vn[e] : 1424 <= e && e <= 1524 ? 2 : 1536 <= e && e <= 1785 ? jn[e - 1536] : 1774 <= e && e <= 2220 ? 4 : 8192 <= e && e <= 8203 || 8204 == e ? 256 : 1
    }
    const Ln = /[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/;
    class Nn {
        constructor(e, t, n) {
            this.from = e, this.to = t, this.level = n
        }
        get dir() {
            return this.level % 2 ? In : En
        }
        side(e, t) {
            return this.dir == t == e ? this.to : this.from
        }
        static find(e, t, n, r) {
            let i = -1;
            for (let a = 0; a < e.length; a++) {
                let o = e[a];
                if (o.from <= t && o.to >= t) {
                    if (o.level == n) return a;
                    (i < 0 || (0 != r ? r < 0 ? o.from < t : o.to > t : e[i].level > o.level)) && (i = a)
                }
            }
            if (i < 0) throw new RangeError("Index out of range");
            return i
        }
    }
    const Dn = [];

    function Mn(e) {
        return [new Nn(0, e, 0)]
    }
    let Bn = "";

    function Fn(e, t, n, i, a) {
        var o;
        let s = i.head - e.from,
            O = -1;
        if (0 == s) {
            if (!a || !e.length) return null;
            t[0].level != n && (s = t[0].side(!1, n), O = 0)
        } else if (s == e.length) {
            if (a) return null;
            let e = t[t.length - 1];
            e.level != n && (s = e.side(!0, n), O = t.length - 1)
        }
        O < 0 && (O = Nn.find(t, s, null !== (o = i.bidiLevel) && void 0 !== o ? o : -1, i.assoc));
        let l = t[O];
        s == l.side(a, n) && (l = t[O += a ? 1 : -1], s = l.side(!a, n));
        let c = a == (l.dir == n),
            u = r(e.text, s, c);
        if (Bn = e.text.slice(Math.min(s, u), Math.max(s, u)), u != l.side(a, n)) return W.cursor(u + e.from, c ? -1 : 1, l.level);
        let d = O == (a ? t.length - 1 : 0) ? null : t[O + (a ? 1 : -1)];
        return d || l.level == n ? d && d.level < l.level ? W.cursor(d.side(!a, n) + e.from, a ? 1 : -1, d.level) : W.cursor(u + e.from, a ? -1 : 1, l.level) : W.cursor(a ? e.to : e.from, a ? -1 : 1, n)
    }

    function Hn(e, t) {
        return t.left > e ? t.left - e : Math.max(0, e - t.right)
    }

    function Jn(e, t) {
        return t.top > e ? t.top - e : Math.max(0, e - t.bottom)
    }

    function Kn(e, t) {
        return e.top < t.bottom - 1 && e.bottom > t.top + 1
    }

    function er(e, t) {
        return t < e.top ? {
            top: t,
            left: e.left,
            right: e.right,
            bottom: e.bottom
        } : e
    }

    function tr(e, t) {
        return t > e.bottom ? {
            top: e.top,
            left: e.left,
            right: e.right,
            bottom: t
        } : e
    }

    function nr(e, t, n) {
        let r, i, a, o, s, O, l, c;
        for (let u = e.firstChild; u; u = u.nextSibling) {
            let e = it(u);
            for (let d = 0; d < e.length; d++) {
                let p = e[d];
                i && Kn(i, p) && (p = er(tr(p, i.bottom), i.top));
                let h = Hn(t, p),
                    f = Jn(n, p);
                if (0 == h && 0 == f) return 3 == u.nodeType ? rr(u, t, n) : nr(u, t, n);
                (!r || o > f || o == f && a > h) && (r = u, i = p, a = h, o = f), 0 == h ? n > p.bottom && (!l || l.bottom < p.bottom) ? (s = u, l = p) : n < p.top && (!c || c.top > p.top) && (O = u, c = p) : l && Kn(l, p) ? l = tr(l, p.bottom) : c && Kn(c, p) && (c = er(c, p.top))
            }
        }
        if (l && l.bottom >= n ? (r = s, i = l) : c && c.top <= n && (r = O, i = c), !r) return {
            node: e,
            offset: 0
        };
        let u = Math.max(i.left, Math.min(i.right, t));
        return 3 == r.nodeType ? rr(r, u, n) : a || "true" != r.contentEditable ? {
            node: e,
            offset: Array.prototype.indexOf.call(e.childNodes, r) + (t >= (i.left + i.right) / 2 ? 1 : 0)
        } : nr(r, u, n)
    }

    function rr(e, t, n) {
        let r = e.nodeValue.length,
            i = -1,
            a = 1e9,
            o = 0;
        for (let s = 0; s < r; s++) {
            let r = mt(e, s, s + 1).getClientRects();
            for (let O = 0; O < r.length; O++) {
                let l = r[O];
                if (l.top == l.bottom) continue;
                o || (o = t - l.left);
                let c = (l.top > n ? l.top - n : n - l.bottom) - 1;
                if (l.left - 1 <= t && l.right + 1 >= t && c < a) {
                    let n = t >= (l.left + l.right) / 2,
                        r = n;
                    if (Yt.chrome || Yt.gecko) {
                        mt(e, s).getBoundingClientRect().left == l.right && (r = !n)
                    }
                    if (c <= 0) return {
                        node: e,
                        offset: s + (r ? 1 : 0)
                    };
                    i = s + (r ? 1 : 0), a = c
                }
            }
        }
        return {
            node: e,
            offset: i > -1 ? i : o > 0 ? e.nodeValue.length : 0
        }
    }

    function ir(e, {
        x: t,
        y: n
    }, r = -1) {
        let i, a = e.contentDOM.getBoundingClientRect(),
            o = e.defaultLineHeight / 2;
        for (let t = !1;;) {
            if (i = e.blockAtHeight(n, a.top), i.top > n || i.bottom < n) {
                if (r = i.top > n ? -1 : 1, n = Math.min(i.bottom - o, Math.max(i.top + o, n)), t) return null;
                t = !0
            }
            if (i.type == Ft.Text) break;
            n = r > 0 ? i.bottom + o : i.top - o
        }
        let s = i.from;
        if (s < e.viewport.from) return 0 == e.viewport.from ? 0 : null;
        if (s > e.viewport.to) return e.viewport.to == e.state.doc.length ? e.state.doc.length : null;
        t = Math.max(a.left + 1, Math.min(a.right - 1, t));
        let O, l = e.root,
            c = l.elementFromPoint(t, n),
            u = -1;
        if (c && e.contentDOM.contains(c) && !(e.docView.nearest(c) instanceof Vt))
            if (l.caretPositionFromPoint) {
                let e = l.caretPositionFromPoint(t, n);
                e && ({
                    offsetNode: O,
                    offset: u
                } = e)
            } else if (l.caretRangeFromPoint) {
            let e = l.caretRangeFromPoint(t, n);
            e && (({
                startContainer: O,
                startOffset: u
            } = e), Yt.safari && function(e, t, n) {
                let r;
                if (3 != e.nodeType || t != (r = e.nodeValue.length)) return !1;
                for (let t = e.nextSibling; t; t = t.nextSibling)
                    if (1 != t.nodeType || "BR" != t.nodeName) return !1;
                return mt(e, r - 1, r).getBoundingClientRect().left > n
            }(O, u, t) && (O = void 0))
        }
        if (!O || !e.docView.dom.contains(O)) {
            let r = rn.find(e.docView, s);
            ({
                node: O,
                offset: u
            } = nr(r.dom, t, n))
        }
        return e.docView.posFromDOM(O, u)
    }

    function ar(e, t, n, r) {
        let i = e.state.doc.lineAt(t.head),
            a = e.bidiSpans(i);
        for (let o = t, s = null;;) {
            let t = Fn(i, a, e.textDirection, o, n),
                O = Bn;
            if (!t) {
                if (i.number == (n ? e.state.doc.lines : 1)) return o;
                O = "\n", i = e.state.doc.line(i.number + (n ? 1 : -1)), a = e.bidiSpans(i), t = W.cursor(n ? i.from : i.to)
            }
            if (s) {
                if (!s(O)) return o
            } else {
                if (!r) return t;
                s = r(O)
            }
            o = t
        }
    }

    function or(e, t, n) {
        let r = e.pluginField($n.atomicRanges);
        for (;;) {
            let e = !1;
            for (let i of r) i.between(n.from - 1, n.from + 1, ((r, i, a) => {
                n.from > r && n.from < i && (n = t.from > n.from ? W.cursor(r, 1) : W.cursor(i, -1), e = !0)
            }));
            if (!e) return n
        }
    }
    class sr {
        constructor(e) {
            this.lastKeyCode = 0, this.lastKeyTime = 0, this.pendingIOSKey = null, this.lastSelectionOrigin = null, this.lastSelectionTime = 0, this.lastEscPress = 0, this.lastContextMenu = 0, this.scrollHandlers = [], this.registeredEvents = [], this.customHandlers = [], this.composing = -1, this.compositionEndedAt = 0, this.rapidCompositionStart = !1, this.mouseSelection = null;
            for (let t in ur) {
                let n = ur[t];
                e.contentDOM.addEventListener(t, (r => {
                    "keydown" == t && this.keydown(e, r) || cr(e, r) && !this.ignoreDuringComposition(r) && (this.mustFlushObserver(r) && e.observer.forceFlush(), this.runCustomHandlers(t, e, r) ? r.preventDefault() : n(e, r))
                })), this.registeredEvents.push(t)
            }
            this.notifiedFocused = e.hasFocus, this.ensureHandlers(e), Yt.safari && e.contentDOM.addEventListener("input", (() => null))
        }
        setSelectionOrigin(e) {
            this.lastSelectionOrigin = e, this.lastSelectionTime = Date.now()
        }
        ensureHandlers(e) {
            let t = this.customHandlers = e.pluginField(wn);
            for (let n of t)
                for (let t in n.handlers) this.registeredEvents.indexOf(t) < 0 && "scroll" != t && (this.registeredEvents.push(t), e.contentDOM.addEventListener(t, (n => {
                    cr(e, n) && this.runCustomHandlers(t, e, n) && n.preventDefault()
                })))
        }
        runCustomHandlers(e, t, n) {
            for (let r of this.customHandlers) {
                let i = r.handlers[e],
                    a = !1;
                if (i) {
                    try {
                        a = i.call(r.plugin, n, t)
                    } catch (e) {
                        mn(t.state, e)
                    }
                    if (a || n.defaultPrevented) return Yt.android && "keydown" == e && 13 == n.keyCode && t.observer.flushSoon(), !0
                }
            }
            return !1
        }
        runScrollHandlers(e, t) {
            for (let n of this.customHandlers) {
                let r = n.handlers.scroll;
                if (r) try {
                    r.call(n.plugin, t, e)
                } catch (t) {
                    mn(e.state, t)
                }
            }
        }
        keydown(e, t) {
            return this.lastKeyCode = t.keyCode, this.lastKeyTime = Date.now(), !!this.screenKeyEvent(e, t) || !(!Yt.ios || 13 != t.keyCode && 8 != t.keyCode || t.ctrlKey || t.altKey || t.metaKey || t.synthetic) && (this.pendingIOSKey = 13 == t.keyCode ? "enter" : "backspace", setTimeout((() => this.flushIOSKey(e)), 250), !0)
        }
        flushIOSKey(e) {
            if (!this.pendingIOSKey) return !1;
            let t = e.contentDOM,
                n = this.pendingIOSKey;
            return this.pendingIOSKey = null, "enter" == n ? gt(t, "Enter", 13) : gt(t, "Backspace", 8)
        }
        ignoreDuringComposition(e) {
            return !!/^key/.test(e.type) && (this.composing > 0 || !!(Yt.safari && Date.now() - this.compositionEndedAt < 500) && (this.compositionEndedAt = 0, !0))
        }
        screenKeyEvent(e, t) {
            let n = 9 == t.keyCode && Date.now() < this.lastEscPress + 2e3;
            return 27 == t.keyCode ? this.lastEscPress = Date.now() : Or.indexOf(t.keyCode) < 0 && (this.lastEscPress = 0), n
        }
        mustFlushObserver(e) {
            return "keydown" == e.type && 229 != e.keyCode || "compositionend" == e.type && !Yt.ios
        }
        startMouseSelection(e, t, n) {
            this.mouseSelection && this.mouseSelection.destroy(), this.mouseSelection = new lr(this, e, t, n)
        }
        update(e) {
            this.mouseSelection && this.mouseSelection.update(e), e.transactions.length && (this.lastKeyCode = this.lastSelectionTime = 0)
        }
        destroy() {
            this.mouseSelection && this.mouseSelection.destroy()
        }
    }
    const Or = [16, 17, 18, 20, 91, 92, 224, 225];
    class lr {
        constructor(e, t, n, r) {
            this.inputState = e, this.view = t, this.style = r, this.lastEvent = n;
            let i = t.contentDOM.ownerDocument;
            i.addEventListener("mousemove", this.move = this.move.bind(this)), i.addEventListener("mouseup", this.up = this.up.bind(this)), this.extend = n.shiftKey, this.multiple = t.state.facet(xe.allowMultipleSelections) && function(e, t) {
                let n = e.state.facet(cn);
                return n.length ? n[0](t) : Yt.mac ? t.metaKey : t.ctrlKey
            }(t, n), this.dragMove = function(e, t) {
                let n = e.state.facet(un);
                return n.length ? n[0](t) : Yt.mac ? !t.altKey : !t.ctrlKey
            }(t, n), this.dragging = !! function(e, t) {
                let {
                    main: n
                } = e.state.selection;
                if (n.empty) return !1;
                let r = tt(e.root);
                if (0 == r.rangeCount) return !0;
                let i = r.getRangeAt(0).getClientRects();
                for (let e = 0; e < i.length; e++) {
                    let n = i[e];
                    if (n.left <= t.clientX && n.right >= t.clientX && n.top <= t.clientY && n.bottom >= t.clientY) return !0
                }
                return !1
            }(t, n) && null, !1 === this.dragging && (n.preventDefault(), this.select(n))
        }
        move(e) {
            if (0 == e.buttons) return this.destroy();
            !1 === this.dragging && this.select(this.lastEvent = e)
        }
        up(e) {
            null == this.dragging && this.select(this.lastEvent), this.dragging || e.preventDefault(), this.destroy()
        }
        destroy() {
            let e = this.view.contentDOM.ownerDocument;
            e.removeEventListener("mousemove", this.move), e.removeEventListener("mouseup", this.up), this.inputState.mouseSelection = null
        }
        select(e) {
            let t = this.style.get(e, this.extend, this.multiple);
            t.eq(this.view.state.selection) && t.main.assoc == this.view.state.selection.main.assoc || this.view.dispatch({
                selection: t,
                annotations: ce.userEvent.of("pointerselection"),
                scrollIntoView: !0
            })
        }
        update(e) {
            e.docChanged && this.dragging && (this.dragging = this.dragging.map(e.changes)), this.style.update(e) && setTimeout((() => this.select(this.lastEvent)), 20)
        }
    }

    function cr(e, t) {
        if (!t.bubbles) return !0;
        if (t.defaultPrevented) return !1;
        for (let n, r = t.target; r != e.contentDOM; r = r.parentNode)
            if (!r || 11 == r.nodeType || (n = bt.get(r)) && n.ignoreEvent(t)) return !1;
        return !0
    }
    const ur = Object.create(null),
        dr = Yt.ie && Yt.ie_version < 15 || Yt.ios && Yt.webkit_version < 604;

    function pr(e, t) {
        let n, {
                state: r
            } = e,
            i = 1,
            a = r.toText(t),
            o = a.lines == r.selection.ranges.length;
        if (yr && r.selection.ranges.every((e => e.empty)) && yr == a.toString()) {
            let e = -1;
            n = r.changeByRange((n => {
                let s = r.doc.lineAt(n.from);
                if (s.from == e) return {
                    range: n
                };
                e = s.from;
                let O = r.toText((o ? a.line(i++).text : t) + r.lineBreak);
                return {
                    changes: {
                        from: s.from,
                        insert: O
                    },
                    range: W.cursor(n.from + O.length)
                }
            }))
        } else n = o ? r.changeByRange((e => {
            let t = a.line(i++);
            return {
                changes: {
                    from: e.from,
                    to: e.to,
                    insert: t.text
                },
                range: W.cursor(e.from + t.length)
            }
        })) : r.replaceSelection(a);
        e.dispatch(n, {
            annotations: ce.userEvent.of("paste"),
            scrollIntoView: !0
        })
    }
    ur.keydown = (e, t) => {
        e.inputState.setSelectionOrigin("keyboardselection")
    };
    let hr = 0;

    function fr(e, t, n, i) {
        if (1 == i) return W.cursor(t, n);
        if (2 == i) return function(e, t, n = 1) {
            let i = e.charCategorizer(t),
                a = e.doc.lineAt(t),
                o = t - a.from;
            if (0 == a.length) return W.cursor(t);
            0 == o ? n = 1 : o == a.length && (n = -1);
            let s = o,
                O = o;
            n < 0 ? s = r(a.text, o, !1) : O = r(a.text, o);
            let l = i(a.text.slice(s, O));
            for (; s > 0;) {
                let e = r(a.text, s, !1);
                if (i(a.text.slice(e, s)) != l) break;
                s = e
            }
            for (; O < a.length;) {
                let e = r(a.text, O);
                if (i(a.text.slice(O, e)) != l) break;
                O = e
            }
            return W.range(s + a.from, O + a.from)
        }(e.state, t, n); {
            let n = rn.find(e.docView, t),
                r = e.state.doc.lineAt(n ? n.posAtEnd : t),
                i = n ? n.posAtStart : r.from,
                a = n ? n.posAtEnd : r.to;
            return a < e.state.doc.length && a == r.to && a++, W.range(i, a)
        }
    }
    ur.touchstart = (e, t) => {
        hr = Date.now(), e.inputState.setSelectionOrigin("pointerselection")
    }, ur.touchmove = e => {
        e.inputState.setSelectionOrigin("pointerselection")
    }, ur.mousedown = (e, t) => {
        if (e.observer.flush(), hr > Date.now() - 2e3) return;
        let n = null;
        for (let r of e.state.facet(dn))
            if (n = r(e, t), n) break;
        n || 0 != t.button || (n = function(e, t) {
            let n = $r(e, t),
                r = function(e) {
                    if (!br) return e.detail;
                    let t = xr,
                        n = wr;
                    return xr = e, wr = Date.now(), Pr = !t || n > Date.now() - 400 && Math.abs(t.clientX - e.clientX) < 2 && Math.abs(t.clientY - e.clientY) < 2 ? (Pr + 1) % 3 : 1
                }(t),
                i = e.state.selection,
                a = n,
                o = t;
            return {
                update(e) {
                    e.changes && (n && (n.pos = e.changes.mapPos(n.pos)), i = i.map(e.changes), o = null)
                },
                get(t, s, O) {
                    let l;
                    if (o && t.clientX == o.clientX && t.clientY == o.clientY ? l = a : (l = a = $r(e, t), o = t), !l || !n) return i;
                    let c = fr(e, l.pos, l.bias, r);
                    if (n.pos != l.pos && !s) {
                        let t = fr(e, n.pos, n.bias, r),
                            i = Math.min(t.from, c.from),
                            a = Math.max(t.to, c.to);
                        c = i < c.from ? W.range(i, a) : W.range(a, i)
                    }
                    return s ? i.replaceRange(i.main.extend(c.from, c.to)) : O ? i.addRange(c) : W.create([c])
                }
            }
        }(e, t)), n && (e.root.activeElement != e.contentDOM && e.observer.ignore((() => ft(e.contentDOM))), e.inputState.startMouseSelection(e, t, n))
    };
    let mr = (e, t) => e >= t.top && e <= t.bottom,
        gr = (e, t, n) => mr(t, n) && e >= n.left && e <= n.right;

    function Qr(e, t, n, r) {
        let i = rn.find(e.docView, t);
        if (!i) return 1;
        let a = t - i.posAtStart;
        if (0 == a) return 1;
        if (a == i.length) return -1;
        let o = i.coordsAt(a, -1);
        if (o && gr(n, r, o)) return -1;
        let s = i.coordsAt(a, 1);
        return s && gr(n, r, s) ? 1 : o && mr(r, o) ? -1 : 1
    }

    function $r(e, t) {
        let n = e.posAtCoords({
            x: t.clientX,
            y: t.clientY
        });
        return null == n ? null : {
            pos: n,
            bias: Qr(e, n, t.clientX, t.clientY)
        }
    }
    const br = Yt.ie && Yt.ie_version <= 11;
    let xr = null,
        Pr = 0,
        wr = 0;

    function kr(e, t, n, r) {
        let i = e.posAtCoords({
            x: t.clientX,
            y: t.clientY
        });
        if (null == i || !n) return;
        t.preventDefault();
        let {
            mouseSelection: a
        } = e.inputState, o = r && a && a.dragging && a.dragMove ? {
            from: a.dragging.from,
            to: a.dragging.to
        } : null, s = {
            from: i,
            insert: n
        }, O = e.state.changes(o ? [o, s] : s);
        e.focus(), e.dispatch({
            changes: O,
            selection: {
                anchor: O.mapPos(i, -1),
                head: O.mapPos(i, 1)
            },
            annotations: ce.userEvent.of("drop")
        })
    }
    ur.dragstart = (e, t) => {
        let {
            selection: {
                main: n
            }
        } = e.state, {
            mouseSelection: r
        } = e.inputState;
        r && (r.dragging = n), t.dataTransfer && (t.dataTransfer.setData("Text", e.state.sliceDoc(n.from, n.to)), t.dataTransfer.effectAllowed = "copyMove")
    }, ur.drop = (e, t) => {
        if (!t.dataTransfer || !e.state.facet(gn)) return;
        let n = t.dataTransfer.files;
        if (n && n.length) {
            t.preventDefault();
            let r = Array(n.length),
                i = 0,
                a = () => {
                    ++i == n.length && kr(e, t, r.filter((e => null != e)).join(e.state.lineBreak), !1)
                };
            for (let e = 0; e < n.length; e++) {
                let t = new FileReader;
                t.onerror = a, t.onload = () => {
                    /[\x00-\x08\x0e-\x1f]{2}/.test(t.result) || (r[e] = t.result), a()
                }, t.readAsText(n[e])
            }
        } else kr(e, t, t.dataTransfer.getData("Text"), !0)
    }, ur.paste = (e, t) => {
        if (!e.state.facet(gn)) return;
        e.observer.flush();
        let n = dr ? null : t.clipboardData,
            r = n && n.getData("text/plain");
        r ? (pr(e, r), t.preventDefault()) : function(e) {
            let t = e.dom.parentNode;
            if (!t) return;
            let n = t.appendChild(document.createElement("textarea"));
            n.style.cssText = "position: fixed; left: -10000px; top: 10px", n.focus(), setTimeout((() => {
                e.focus(), n.remove(), pr(e, n.value)
            }), 50)
        }(e)
    };
    let yr = null;

    function vr(e, t) {
        if (e.docView.compositionDeco.size) {
            e.inputState.rapidCompositionStart = t;
            try {
                e.update([])
            } finally {
                e.inputState.rapidCompositionStart = !1
            }
        }
    }
    ur.copy = ur.cut = (e, t) => {
        let {
            text: n,
            ranges: r,
            linewise: i
        } = function(e) {
            let t = [],
                n = [],
                r = !1;
            for (let r of e.selection.ranges) r.empty || (t.push(e.sliceDoc(r.from, r.to)), n.push(r));
            if (!t.length) {
                let i = -1;
                for (let {
                        from: r
                    } of e.selection.ranges) {
                    let a = e.doc.lineAt(r);
                    a.number > i && (t.push(a.text), n.push({
                        from: a.from,
                        to: Math.min(e.doc.length, a.to + 1)
                    })), i = a.number
                }
                r = !0
            }
            return {
                text: t.join(e.lineBreak),
                ranges: n,
                linewise: r
            }
        }(e.state);
        if (!n) return;
        yr = i ? n : null;
        let a = dr ? null : t.clipboardData;
        a ? (t.preventDefault(), a.clearData(), a.setData("text/plain", n)) : function(e, t) {
            let n = e.dom.parentNode;
            if (!n) return;
            let r = n.appendChild(document.createElement("textarea"));
            r.style.cssText = "position: fixed; left: -10000px; top: 10px", r.value = t, r.focus(), r.selectionEnd = t.length, r.selectionStart = 0, setTimeout((() => {
                r.remove(), e.focus()
            }), 50)
        }(e, n), "cut" == t.type && e.state.facet(gn) && e.dispatch({
            changes: r,
            scrollIntoView: !0,
            annotations: ce.userEvent.of("cut")
        })
    }, ur.focus = ur.blur = e => {
        setTimeout((() => {
            e.hasFocus != e.inputState.notifiedFocused && e.update([])
        }), 10)
    }, ur.beforeprint = e => {
        e.viewState.printing = !0, e.requestMeasure(), setTimeout((() => {
            e.viewState.printing = !1, e.requestMeasure()
        }), 2e3)
    }, ur.compositionstart = ur.compositionupdate = e => {
        e.inputState.composing < 0 && (e.docView.compositionDeco.size && (e.observer.flush(), vr(e, !0)), e.inputState.composing = 0)
    }, ur.compositionend = e => {
        e.inputState.composing = -1, e.inputState.compositionEndedAt = Date.now(), setTimeout((() => {
            e.inputState.composing < 0 && vr(e, !1)
        }), 50)
    }, ur.contextmenu = e => {
        e.inputState.lastContextMenu = Date.now()
    };
    const Sr = ["pre-wrap", "normal", "pre-line"];
    class _r {
        constructor() {
            this.doc = d.empty, this.lineWrapping = !1, this.direction = Zn.LTR, this.heightSamples = {}, this.lineHeight = 14, this.charWidth = 7, this.lineLength = 30, this.heightChanged = !1
        }
        heightForGap(e, t) {
            let n = this.doc.lineAt(t).number - this.doc.lineAt(e).number + 1;
            return this.lineWrapping && (n += Math.ceil((t - e - n * this.lineLength * .5) / this.lineLength)), this.lineHeight * n
        }
        heightForLine(e) {
            if (!this.lineWrapping) return this.lineHeight;
            return (1 + Math.max(0, Math.ceil((e - this.lineLength) / (this.lineLength - 5)))) * this.lineHeight
        }
        setDoc(e) {
            return this.doc = e, this
        }
        mustRefresh(e, t, n) {
            let r = !1;
            for (let t = 0; t < e.length; t++) {
                let n = e[t];
                n < 0 ? t++ : this.heightSamples[Math.floor(10 * n)] || (r = !0, this.heightSamples[Math.floor(10 * n)] = !0)
            }
            return r || Sr.indexOf(t) > -1 != this.lineWrapping || this.direction != n
        }
        refresh(e, t, n, r, i, a) {
            let o = Sr.indexOf(e) > -1,
                s = Math.round(n) != Math.round(this.lineHeight) || this.lineWrapping != o || this.direction != t;
            if (this.lineWrapping = o, this.direction = t, this.lineHeight = n, this.charWidth = r, this.lineLength = i, s) {
                this.heightSamples = {};
                for (let e = 0; e < a.length; e++) {
                    let t = a[e];
                    t < 0 ? e++ : this.heightSamples[Math.floor(10 * t)] = !0
                }
            }
            return s
        }
    }
    class Xr {
        constructor(e, t) {
            this.from = e, this.heights = t, this.index = 0
        }
        get more() {
            return this.index < this.heights.length
        }
    }
    class Tr {
        constructor(e, t, n, r, i) {
            this.from = e, this.length = t, this.top = n, this.height = r, this.type = i
        }
        get to() {
            return this.from + this.length
        }
        get bottom() {
            return this.top + this.height
        }
        join(e) {
            let t = (Array.isArray(this.type) ? this.type : [this]).concat(Array.isArray(e.type) ? e.type : [e]);
            return new Tr(this.from, this.length + e.length, this.top, this.height + e.height, t)
        }
    }
    var Rr = function(e) {
        return e[e.ByPos = 0] = "ByPos", e[e.ByHeight = 1] = "ByHeight", e[e.ByPosNoHeight = 2] = "ByPosNoHeight", e
    }(Rr || (Rr = {}));
    class Wr {
        constructor(e, t, n = 2) {
            this.length = e, this.height = t, this.flags = n
        }
        get outdated() {
            return (2 & this.flags) > 0
        }
        set outdated(e) {
            this.flags = (e ? 2 : 0) | -3 & this.flags
        }
        setHeight(e, t) {
            this.height != t && (Math.abs(this.height - t) > 1e-4 && (e.heightChanged = !0), this.height = t)
        }
        replace(e, t, n) {
            return Wr.of(n)
        }
        decomposeLeft(e, t) {
            t.push(this)
        }
        decomposeRight(e, t) {
            t.push(this)
        }
        applyChanges(e, t, n, r) {
            let i = this;
            for (let a = r.length - 1; a >= 0; a--) {
                let {
                    fromA: o,
                    toA: s,
                    fromB: O,
                    toB: l
                } = r[a], c = i.lineAt(o, Rr.ByPosNoHeight, t, 0, 0), u = c.to >= s ? c : i.lineAt(s, Rr.ByPosNoHeight, t, 0, 0);
                for (l += u.to - s, s = u.to; a > 0 && c.from <= r[a - 1].toA;) o = r[a - 1].fromA, O = r[a - 1].fromB, a--, o < c.from && (c = i.lineAt(o, Rr.ByPosNoHeight, t, 0, 0));
                O += c.from - o, o = c.from;
                let d = Ir.build(n, e, O, l);
                i = i.replace(o, s, d)
            }
            return i.updateHeight(n, 0)
        }
        static empty() {
            return new Yr(0, 0)
        }
        static of (e) {
            if (1 == e.length) return e[0];
            let t = 0,
                n = e.length,
                r = 0,
                i = 0;
            for (;;)
                if (t == n)
                    if (r > 2 * i) {
                        let i = e[t - 1];
                        i.break ? e.splice(--t, 1, i.left, null, i.right) : e.splice(--t, 1, i.left, i.right), n += 1 + i.break, r -= i.size
                    } else {
                        if (!(i > 2 * r)) break; {
                            let t = e[n];
                            t.break ? e.splice(n, 1, t.left, null, t.right) : e.splice(n, 1, t.left, t.right), n += 2 + t.break, i -= t.size
                        }
                    }
            else if (r < i) {
                let n = e[t++];
                n && (r += n.size)
            } else {
                let t = e[--n];
                t && (i += t.size)
            }
            let a = 0;
            return null == e[t - 1] ? (a = 1, t--) : null == e[t] && (a = 1, n++), new Zr(Wr.of(e.slice(0, t)), a, Wr.of(e.slice(n)))
        }
    }
    Wr.prototype.size = 1;
    class qr extends Wr {
        constructor(e, t, n) {
            super(e, t), this.type = n
        }
        blockAt(e, t, n, r) {
            return new Tr(r, this.length, n, this.height, this.type)
        }
        lineAt(e, t, n, r, i) {
            return this.blockAt(0, n, r, i)
        }
        forEachLine(e, t, n, r, i, a) {
            a(this.blockAt(0, n, r, i))
        }
        updateHeight(e, t = 0, n = !1, r) {
            return r && r.from <= t && r.more && this.setHeight(e, r.heights[r.index++]), this.outdated = !1, this
        }
        toString() {
            return `block(${this.length})`
        }
    }
    class Yr extends qr {
        constructor(e, t) {
            super(e, t, Ft.Text), this.collapsed = 0, this.widgetHeight = 0
        }
        replace(e, t, n) {
            let r = n[0];
            return 1 == n.length && (r instanceof Yr || r instanceof zr && 4 & r.flags) && Math.abs(this.length - r.length) < 10 ? (r instanceof zr ? r = new Yr(r.length, this.height) : r.height = this.height, this.outdated || (r.outdated = !1), r) : Wr.of(n)
        }
        updateHeight(e, t = 0, n = !1, r) {
            return r && r.from <= t && r.more ? this.setHeight(e, r.heights[r.index++]) : (n || this.outdated) && this.setHeight(e, Math.max(this.widgetHeight, e.heightForLine(this.length - this.collapsed))), this.outdated = !1, this
        }
        toString() {
            return `line(${this.length}${this.collapsed?-this.collapsed:""}${this.widgetHeight?":"+this.widgetHeight:""})`
        }
    }
    class zr extends Wr {
        constructor(e) {
            super(e, 0)
        }
        lines(e, t) {
            let n = e.lineAt(t).number,
                r = e.lineAt(t + this.length).number;
            return {
                firstLine: n,
                lastLine: r,
                lineHeight: this.height / (r - n + 1)
            }
        }
        blockAt(e, t, n, r) {
            let {
                firstLine: i,
                lastLine: a,
                lineHeight: o
            } = this.lines(t, r), s = Math.max(0, Math.min(a - i, Math.floor((e - n) / o))), {
                from: O,
                length: l
            } = t.line(i + s);
            return new Tr(O, l, n + o * s, o, Ft.Text)
        }
        lineAt(e, t, n, r, i) {
            if (t == Rr.ByHeight) return this.blockAt(e, n, r, i);
            if (t == Rr.ByPosNoHeight) {
                let {
                    from: t,
                    to: r
                } = n.lineAt(e);
                return new Tr(t, r - t, 0, 0, Ft.Text)
            }
            let {
                firstLine: a,
                lineHeight: o
            } = this.lines(n, i), {
                from: s,
                length: O,
                number: l
            } = n.lineAt(e);
            return new Tr(s, O, r + o * (l - a), o, Ft.Text)
        }
        forEachLine(e, t, n, r, i, a) {
            let {
                firstLine: o,
                lineHeight: s
            } = this.lines(n, i);
            for (let O = Math.max(e, i), l = Math.min(i + this.length, t); O <= l;) {
                let t = n.lineAt(O);
                O == e && (r += s * (t.number - o)), a(new Tr(t.from, t.length, r, s, Ft.Text)), r += s, O = t.to + 1
            }
        }
        replace(e, t, n) {
            let r = this.length - t;
            if (r > 0) {
                let e = n[n.length - 1];
                e instanceof zr ? n[n.length - 1] = new zr(e.length + r) : n.push(null, new zr(r - 1))
            }
            if (e > 0) {
                let t = n[0];
                t instanceof zr ? n[0] = new zr(e + t.length) : n.unshift(new zr(e - 1), null)
            }
            return Wr.of(n)
        }
        decomposeLeft(e, t) {
            t.push(new zr(e - 1), null)
        }
        decomposeRight(e, t) {
            t.push(null, new zr(this.length - e - 1))
        }
        updateHeight(e, t = 0, n = !1, r) {
            let i = t + this.length;
            if (r && r.from <= t + this.length && r.more) {
                let n = [],
                    a = Math.max(t, r.from);
                for (r.from > t && n.push(new zr(r.from - t - 1).updateHeight(e, t)); a <= i && r.more;) {
                    let t = e.doc.lineAt(a).length;
                    n.length && n.push(null);
                    let i = new Yr(t, r.heights[r.index++]);
                    i.outdated = !1, n.push(i), a += t + 1
                }
                return a <= i && n.push(null, new zr(i - a).updateHeight(e, a)), e.heightChanged = !0, Wr.of(n)
            }
            return (n || this.outdated) && (this.setHeight(e, e.heightForGap(t, t + this.length)), this.outdated = !1), this
        }
        toString() {
            return `gap(${this.length})`
        }
    }
    class Zr extends Wr {
        constructor(e, t, n) {
            super(e.length + t + n.length, e.height + n.height, t | (e.outdated || n.outdated ? 2 : 0)), this.left = e, this.right = n, this.size = e.size + n.size
        }
        get break() {
            return 1 & this.flags
        }
        blockAt(e, t, n, r) {
            let i = n + this.left.height;
            return e < i || 0 == this.right.height ? this.left.blockAt(e, t, n, r) : this.right.blockAt(e, t, i, r + this.left.length + this.break)
        }
        lineAt(e, t, n, r, i) {
            let a = r + this.left.height,
                o = i + this.left.length + this.break,
                s = t == Rr.ByHeight ? e < a || 0 == this.right.height : e < o,
                O = s ? this.left.lineAt(e, t, n, r, i) : this.right.lineAt(e, t, n, a, o);
            if (this.break || (s ? O.to < o : O.from > o)) return O;
            let l = t == Rr.ByPosNoHeight ? Rr.ByPosNoHeight : Rr.ByPos;
            return s ? O.join(this.right.lineAt(o, l, n, a, o)) : this.left.lineAt(o, l, n, r, i).join(O)
        }
        forEachLine(e, t, n, r, i, a) {
            let o = r + this.left.height,
                s = i + this.left.length + this.break;
            if (this.break) e < s && this.left.forEachLine(e, t, n, r, i, a), t >= s && this.right.forEachLine(e, t, n, o, s, a);
            else {
                let O = this.lineAt(s, Rr.ByPos, n, r, i);
                e < O.from && this.left.forEachLine(e, O.from - 1, n, r, i, a), O.to >= e && O.from <= t && a(O), t > O.to && this.right.forEachLine(O.to + 1, t, n, o, s, a)
            }
        }
        replace(e, t, n) {
            let r = this.left.length + this.break;
            if (t < r) return this.balanced(this.left.replace(e, t, n), this.right);
            if (e > this.left.length) return this.balanced(this.left, this.right.replace(e - r, t - r, n));
            let i = [];
            e > 0 && this.decomposeLeft(e, i);
            let a = i.length;
            for (let e of n) i.push(e);
            if (e > 0 && Er(i, a - 1), t < this.length) {
                let e = i.length;
                this.decomposeRight(t, i), Er(i, e)
            }
            return Wr.of(i)
        }
        decomposeLeft(e, t) {
            let n = this.left.length;
            if (e <= n) return this.left.decomposeLeft(e, t);
            t.push(this.left), this.break && (n++, e >= n && t.push(null)), e > n && this.right.decomposeLeft(e - n, t)
        }
        decomposeRight(e, t) {
            let n = this.left.length,
                r = n + this.break;
            if (e >= r) return this.right.decomposeRight(e - r, t);
            e < n && this.left.decomposeRight(e, t), this.break && e < r && t.push(null), t.push(this.right)
        }
        balanced(e, t) {
            return e.size > 2 * t.size || t.size > 2 * e.size ? Wr.of(this.break ? [e, null, t] : [e, t]) : (this.left = e, this.right = t, this.height = e.height + t.height, this.outdated = e.outdated || t.outdated, this.size = e.size + t.size, this.length = e.length + this.break+t.length, this)
        }
        updateHeight(e, t = 0, n = !1, r) {
            let {
                left: i,
                right: a
            } = this, o = t + i.length + this.break, s = null;
            return r && r.from <= t + i.length && r.more ? s = i = i.updateHeight(e, t, n, r) : i.updateHeight(e, t, n), r && r.from <= o + a.length && r.more ? s = a = a.updateHeight(e, o, n, r) : a.updateHeight(e, o, n), s ? this.balanced(i, a) : (this.height = this.left.height + this.right.height, this.outdated = !1, this)
        }
        toString() {
            return this.left + (this.break ? " " : "-") + this.right
        }
    }

    function Er(e, t) {
        let n, r;
        null == e[t] && (n = e[t - 1]) instanceof zr && (r = e[t + 1]) instanceof zr && e.splice(t - 1, 3, new zr(n.length + 1 + r.length))
    }
    class Ir {
        constructor(e, t) {
            this.pos = e, this.oracle = t, this.nodes = [], this.lineStart = -1, this.lineEnd = -1, this.covering = null, this.writtenTo = e
        }
        get isCovered() {
            return this.covering && this.nodes[this.nodes.length - 1] == this.covering
        }
        span(e, t) {
            if (this.lineStart > -1) {
                let e = Math.min(t, this.lineEnd),
                    n = this.nodes[this.nodes.length - 1];
                n instanceof Yr ? n.length += e - this.pos : (e > this.pos || !this.isCovered) && this.nodes.push(new Yr(e - this.pos, -1)), this.writtenTo = e, t > e && (this.nodes.push(null), this.writtenTo++, this.lineStart = -1)
            }
            this.pos = t
        }
        point(e, t, n) {
            if (e < t || n.heightRelevant) {
                let r = n.widget ? Math.max(0, n.widget.estimatedHeight) : 0,
                    i = t - e;
                n.block ? this.addBlock(new qr(i, r, n.type)) : (i || r >= 5) && this.addLineDeco(r, i)
            } else t > e && this.span(e, t);
            this.lineEnd > -1 && this.lineEnd < this.pos && (this.lineEnd = this.oracle.doc.lineAt(this.pos).to)
        }
        enterLine() {
            if (this.lineStart > -1) return;
            let {
                from: e,
                to: t
            } = this.oracle.doc.lineAt(this.pos);
            this.lineStart = e, this.lineEnd = t, this.writtenTo < e && ((this.writtenTo < e - 1 || null == this.nodes[this.nodes.length - 1]) && this.nodes.push(this.blankContent(this.writtenTo, e - 1)), this.nodes.push(null)), this.pos > e && this.nodes.push(new Yr(this.pos - e, -1)), this.writtenTo = this.pos
        }
        blankContent(e, t) {
            let n = new zr(t - e);
            return this.oracle.doc.lineAt(e).to == t && (n.flags |= 4), n
        }
        ensureLine() {
            this.enterLine();
            let e = this.nodes.length ? this.nodes[this.nodes.length - 1] : null;
            if (e instanceof Yr) return e;
            let t = new Yr(0, -1);
            return this.nodes.push(t), t
        }
        addBlock(e) {
            this.enterLine(), e.type != Ft.WidgetAfter || this.isCovered || this.ensureLine(), this.nodes.push(e), this.writtenTo = this.pos = this.pos + e.length, e.type != Ft.WidgetBefore && (this.covering = e)
        }
        addLineDeco(e, t) {
            let n = this.ensureLine();
            n.length += t, n.collapsed += t, n.widgetHeight = Math.max(n.widgetHeight, e), this.writtenTo = this.pos = this.pos + t
        }
        finish(e) {
            let t = 0 == this.nodes.length ? null : this.nodes[this.nodes.length - 1];
            !(this.lineStart > -1) || t instanceof Yr || this.isCovered ? (this.writtenTo < this.pos || null == t) && this.nodes.push(this.blankContent(this.writtenTo, this.pos)) : this.nodes.push(new Yr(0, -1));
            let n = e;
            for (let e of this.nodes) e instanceof Yr && e.updateHeight(this.oracle, n), n += e ? e.length : 1;
            return this.nodes
        }
        static build(e, t, n, r) {
            let i = new Ir(n, e);
            return qe.spans(t, n, r, i, 0), i.finish(n)
        }
    }
    class Ur {
        constructor() {
            this.changes = []
        }
        compareRange() {}
        comparePoint(e, t, n, r) {
            (e < t || n && n.heightRelevant || r && r.heightRelevant) && nn(e, t, this.changes, 5)
        }
    }
    class Vr {
        constructor(e, t, n) {
            this.from = e, this.to = t, this.size = n
        }
        static same(e, t) {
            if (e.length != t.length) return !1;
            for (let n = 0; n < e.length; n++) {
                let r = e[n],
                    i = t[n];
                if (r.from != i.from || r.to != i.to || r.size != i.size) return !1
            }
            return !0
        }
        draw(e) {
            return Ht.replace({
                widget: new jr(this.size, e)
            }).range(this.from, this.to)
        }
    }
    class jr extends Bt {
        constructor(e, t) {
            super(), this.size = e, this.vertical = t
        }
        eq(e) {
            return e.size == this.size && e.vertical == this.vertical
        }
        toDOM() {
            let e = document.createElement("div");
            return this.vertical ? e.style.height = this.size + "px" : (e.style.width = this.size + "px", e.style.height = "2px", e.style.display = "inline-block"), e
        }
        get estimatedHeight() {
            return this.vertical ? this.size : -1
        }
    }
    class Ar {
        constructor(e) {
            this.state = e, this.pixelViewport = {
                left: 0,
                right: window.innerWidth,
                top: 0,
                bottom: 0
            }, this.inView = !0, this.paddingTop = 0, this.paddingBottom = 0, this.contentWidth = 0, this.heightOracle = new _r, this.scaler = Dr, this.scrollTo = null, this.printing = !1, this.visibleRanges = [], this.mustEnforceCursorAssoc = !1, this.heightMap = Wr.empty().applyChanges(e.facet(Sn), d.empty, this.heightOracle.setDoc(e.doc), [new Xn(0, 0, 0, e.doc.length)]), this.viewport = this.getViewport(0, null), this.updateForViewport(), this.lineGaps = this.ensureLineGaps([]), this.lineGapDeco = Ht.set(this.lineGaps.map((e => e.draw(!1)))), this.computeVisibleRanges()
        }
        updateForViewport() {
            let e = [this.viewport],
                {
                    main: t
                } = this.state.selection;
            for (let n = 0; n <= 1; n++) {
                let r = n ? t.head : t.anchor;
                if (!e.some((({
                        from: e,
                        to: t
                    }) => r >= e && r <= t))) {
                    let {
                        from: t,
                        to: n
                    } = this.lineAt(r, 0);
                    e.push(new Cr(t, n))
                }
            }
            this.viewports = e.sort(((e, t) => e.from - t.from)), this.scaler = this.heightMap.height <= 7e6 ? Dr : new Mr(this.heightOracle.doc, this.heightMap, this.viewports)
        }
        update(e, t = null) {
            let n = this.state;
            this.state = e.state;
            let r = this.state.facet(Sn),
                i = e.changedRanges,
                a = Xn.extendWithRanges(i, function(e, t, n) {
                    let r = new Ur;
                    return qe.compare(e, t, n, r, 0), r.changes
                }(e.startState.facet(Sn), r, e ? e.changes : k.empty(this.state.doc.length))),
                o = this.heightMap.height;
            this.heightMap = this.heightMap.applyChanges(r, n.doc, this.heightOracle.setDoc(this.state.doc), a), this.heightMap.height != o && (e.flags |= 2);
            let s = a.length ? this.mapViewport(this.viewport, e.changes) : this.viewport;
            (t && (t.head < s.from || t.head > s.to) || !this.viewportIsAppropriate(s)) && (s = this.getViewport(0, t)), s.eq(this.viewport) || (this.viewport = s, e.flags |= 4), this.updateForViewport(), (this.lineGaps.length || this.viewport.to - this.viewport.from > 15e3) && (e.flags |= this.updateLineGaps(this.ensureLineGaps(this.mapLineGaps(this.lineGaps, e.changes)))), this.computeVisibleRanges(), t && (this.scrollTo = t), !this.mustEnforceCursorAssoc && e.selectionSet && e.view.lineWrapping && e.state.selection.main.empty && e.state.selection.main.assoc && (this.mustEnforceCursorAssoc = !0)
        }
        measure(e, t) {
            let n = e.dom,
                r = "",
                i = Zn.LTR;
            if (!t) {
                let e = window.getComputedStyle(n);
                r = e.whiteSpace, i = "rtl" == e.direction ? Zn.RTL : Zn.LTR, this.paddingTop = parseInt(e.paddingTop) || 0, this.paddingBottom = parseInt(e.paddingBottom) || 0
            }
            let a = this.printing ? {
                    top: -1e8,
                    bottom: 1e8,
                    left: -1e8,
                    right: 1e8
                } : function(e, t) {
                    let n = e.getBoundingClientRect(),
                        r = Math.max(0, n.left),
                        i = Math.min(innerWidth, n.right),
                        a = Math.max(0, n.top),
                        o = Math.min(innerHeight, n.bottom);
                    for (let t = e.parentNode; t;)
                        if (1 == t.nodeType) {
                            let e = window.getComputedStyle(t);
                            if ((t.scrollHeight > t.clientHeight || t.scrollWidth > t.clientWidth) && "visible" != e.overflow) {
                                let e = t.getBoundingClientRect();
                                r = Math.max(r, e.left), i = Math.min(i, e.right), a = Math.max(a, e.top), o = Math.min(o, e.bottom)
                            }
                            t = "absolute" == e.position || "fixed" == e.position ? t.offsetParent : t.parentNode
                        } else {
                            if (11 != t.nodeType) break;
                            t = t.host
                        }
                    return {
                        left: r - n.left,
                        right: i - n.left,
                        top: a - (n.top + t),
                        bottom: o - (n.top + t)
                    }
                }(n, this.paddingTop),
                o = a.top - this.pixelViewport.top,
                s = a.bottom - this.pixelViewport.bottom;
            if (this.pixelViewport = a, this.inView = this.pixelViewport.bottom > this.pixelViewport.top && this.pixelViewport.right > this.pixelViewport.left, !this.inView) return 0;
            let O = e.measureVisibleLineHeights(),
                l = !1,
                c = 0,
                u = 0,
                d = this.heightOracle;
            if (!t) {
                let t = e.dom.clientWidth;
                if (d.mustRefresh(O, r, i) || d.lineWrapping && Math.abs(t - this.contentWidth) > d.charWidth) {
                    let {
                        lineHeight: n,
                        charWidth: a
                    } = e.measureTextSize();
                    l = d.refresh(r, i, n, a, t / a, O), l && (e.minWidth = 0, u |= 16)
                }
                this.contentWidth != t && (this.contentWidth = t, u |= 16), o > 0 && s > 0 ? c = Math.max(o, s) : o < 0 && s < 0 && (c = Math.min(o, s))
            }
            if (d.heightChanged = !1, this.heightMap = this.heightMap.updateHeight(d, 0, l, new Xr(this.viewport.from, O)), d.heightChanged && (u |= 2), !this.viewportIsAppropriate(this.viewport, c) || this.scrollTo && (this.scrollTo.head < this.viewport.from || this.scrollTo.head > this.viewport.to)) {
                let e = this.getViewport(c, this.scrollTo);
                e.from == this.viewport.from && e.to == this.viewport.to || (this.viewport = e, u |= 4)
            }
            return this.updateForViewport(), (this.lineGaps.length || this.viewport.to - this.viewport.from > 15e3) && (u |= this.updateLineGaps(this.ensureLineGaps(l ? [] : this.lineGaps))), this.computeVisibleRanges(), this.mustEnforceCursorAssoc && (this.mustEnforceCursorAssoc = !1, e.enforceCursorAssoc()), u
        }
        get visibleTop() {
            return this.scaler.fromDOM(this.pixelViewport.top, 0)
        }
        get visibleBottom() {
            return this.scaler.fromDOM(this.pixelViewport.bottom, 0)
        }
        getViewport(e, t) {
            let n = .5 - Math.max(-.5, Math.min(.5, e / 1e3 / 2)),
                r = this.heightMap,
                i = this.state.doc,
                {
                    visibleTop: a,
                    visibleBottom: o
                } = this,
                s = new Cr(r.lineAt(a - 1e3 * n, Rr.ByHeight, i, 0, 0).from, r.lineAt(o + 1e3 * (1 - n), Rr.ByHeight, i, 0, 0).to);
            if (t)
                if (t.head < s.from) {
                    let {
                        top: e
                    } = r.lineAt(t.head, Rr.ByPos, i, 0, 0);
                    s = new Cr(r.lineAt(e - 500, Rr.ByHeight, i, 0, 0).from, r.lineAt(e + (o - a) + 500, Rr.ByHeight, i, 0, 0).to)
                } else if (t.head > s.to) {
                let {
                    bottom: e
                } = r.lineAt(t.head, Rr.ByPos, i, 0, 0);
                s = new Cr(r.lineAt(e - (o - a) - 500, Rr.ByHeight, i, 0, 0).from, r.lineAt(e + 500, Rr.ByHeight, i, 0, 0).to)
            }
            return s
        }
        mapViewport(e, t) {
            let n = t.mapPos(e.from, -1),
                r = t.mapPos(e.to, 1);
            return new Cr(this.heightMap.lineAt(n, Rr.ByPos, this.state.doc, 0, 0).from, this.heightMap.lineAt(r, Rr.ByPos, this.state.doc, 0, 0).to)
        }
        viewportIsAppropriate({
            from: e,
            to: t
        }, n = 0) {
            let {
                top: r
            } = this.heightMap.lineAt(e, Rr.ByPos, this.state.doc, 0, 0), {
                bottom: i
            } = this.heightMap.lineAt(t, Rr.ByPos, this.state.doc, 0, 0), {
                visibleTop: a,
                visibleBottom: o
            } = this;
            return (0 == e || r <= a - Math.max(10, Math.min(-n, 250))) && (t == this.state.doc.length || i >= o + Math.max(10, Math.min(n, 250))) && r > a - 2e3 && i < o + 2e3
        }
        mapLineGaps(e, t) {
            if (!e.length || t.empty) return e;
            let n = [];
            for (let r of e) t.touchesRange(r.from, r.to) || n.push(new Vr(t.mapPos(r.from), t.mapPos(r.to), r.size));
            return n
        }
        ensureLineGaps(e) {
            let t = [];
            return this.heightOracle.direction != Zn.LTR || this.heightMap.forEachLine(this.viewport.from, this.viewport.to, this.state.doc, 0, 0, (n => {
                if (n.length < 1e4) return;
                let r, i, a = function(e, t, n) {
                    let r = [],
                        i = e,
                        a = 0;
                    qe.spans(n.facet(Sn), e, t, {
                        span() {},
                        point(e, t) {
                            e > i && (r.push({
                                from: i,
                                to: e
                            }), a += e - i), i = t
                        }
                    }, 20), i < t && (r.push({
                        from: i,
                        to: t
                    }), a += t - i);
                    return {
                        total: a,
                        ranges: r
                    }
                }(n.from, n.to, this.state);
                if (a.total < 1e4) return;
                if (this.heightOracle.lineWrapping) r = n.from != this.viewport.from ? n.from : Gr(a, (this.visibleTop - n.top) / n.height), i = n.to != this.viewport.to ? n.to : Gr(a, (this.visibleBottom - n.top) / n.height);
                else {
                    let e = a.total * this.heightOracle.charWidth;
                    r = Gr(a, this.pixelViewport.left / e), i = Gr(a, this.pixelViewport.right / e)
                }
                let o = this.state.selection.main;
                o.from <= r && o.to >= n.from && (r = o.from), o.from <= n.to && o.to >= i && (i = o.to);
                let s = r - 1e4,
                    O = i + 1e4;
                s > n.from + 5e3 && t.push(Nr(e, (e => e.from == n.from && e.to > s - 5e3 && e.to < s + 5e3)) || new Vr(n.from, s, this.gapSize(n, s, !0, a))), O < n.to - 5e3 && t.push(Nr(e, (e => e.to == n.to && e.from > O - 5e3 && e.from < O + 5e3)) || new Vr(O, n.to, this.gapSize(n, O, !1, a)))
            })), t
        }
        gapSize(e, t, n, r) {
            if (this.heightOracle.lineWrapping) {
                let i = e.height * Lr(r, t);
                return n ? i : e.height - i
            } {
                let e = Lr(r, t);
                return r.total * this.heightOracle.charWidth * (n ? e : 1 - e)
            }
        }
        updateLineGaps(e) {
            return Vr.same(e, this.lineGaps) ? 0 : (this.lineGaps = e, this.lineGapDeco = Ht.set(e.map((e => e.draw(this.heightOracle.lineWrapping)))), 8)
        }
        computeVisibleRanges() {
            let e = this.state.facet(Sn);
            this.lineGaps.length && (e = e.concat(this.lineGapDeco));
            let t = [];
            qe.spans(e, this.viewport.from, this.viewport.to, {
                span(e, n) {
                    t.push({
                        from: e,
                        to: n
                    })
                },
                point() {}
            }, 20), this.visibleRanges = t
        }
        lineAt(e, t) {
            return t += this.paddingTop, Br(this.heightMap.lineAt(e, Rr.ByPos, this.state.doc, t, 0), this.scaler, t)
        }
        lineAtHeight(e, t) {
            return t += this.paddingTop, Br(this.heightMap.lineAt(this.scaler.fromDOM(e, t), Rr.ByHeight, this.state.doc, t, 0), this.scaler, t)
        }
        blockAtHeight(e, t) {
            return t += this.paddingTop, Br(this.heightMap.blockAt(this.scaler.fromDOM(e, t), this.state.doc, t, 0), this.scaler, t)
        }
        forEachLine(e, t, n, r) {
            return r += this.paddingTop, this.heightMap.forEachLine(e, t, this.state.doc, r, 0, 1 == this.scaler.scale ? n : e => n(Br(e, this.scaler, r)))
        }
        get contentHeight() {
            return this.domHeight + this.paddingTop + this.paddingBottom
        }
        get domHeight() {
            return this.scaler.toDOM(this.heightMap.height, this.paddingTop)
        }
    }
    class Cr {
        constructor(e, t) {
            this.from = e, this.to = t
        }
        eq(e) {
            return this.from == e.from && this.to == e.to
        }
    }

    function Gr({
        total: e,
        ranges: t
    }, n) {
        if (n <= 0) return t[0].from;
        if (n >= 1) return t[t.length - 1].to;
        let r = Math.floor(e * n);
        for (let e = 0;; e++) {
            let {
                from: n,
                to: i
            } = t[e], a = i - n;
            if (r <= a) return n + r;
            r -= a
        }
    }

    function Lr(e, t) {
        let n = 0;
        for (let {
                from: r,
                to: i
            } of e.ranges) {
            if (t <= i) {
                n += t - r;
                break
            }
            n += i - r
        }
        return n / e.total
    }

    function Nr(e, t) {
        for (let n of e)
            if (t(n)) return n
    }
    const Dr = {
        toDOM: e => e,
        fromDOM: e => e,
        scale: 1
    };
    class Mr {
        constructor(e, t, n) {
            let r = 0,
                i = 0,
                a = 0;
            this.viewports = n.map((({
                from: n,
                to: i
            }) => {
                let a = t.lineAt(n, Rr.ByPos, e, 0, 0).top,
                    o = t.lineAt(i, Rr.ByPos, e, 0, 0).bottom;
                return r += o - a, {
                    from: n,
                    to: i,
                    top: a,
                    bottom: o,
                    domTop: 0,
                    domBottom: 0
                }
            })), this.scale = (7e6 - r) / (t.height - r);
            for (let e of this.viewports) e.domTop = a + (e.top - i) * this.scale, a = e.domBottom = e.domTop + (e.bottom - e.top), i = e.bottom
        }
        toDOM(e, t) {
            e -= t;
            for (let n = 0, r = 0, i = 0;; n++) {
                let a = n < this.viewports.length ? this.viewports[n] : null;
                if (!a || e < a.top) return i + (e - r) * this.scale + t;
                if (e <= a.bottom) return a.domTop + (e - a.top) + t;
                r = a.bottom, i = a.domBottom
            }
        }
        fromDOM(e, t) {
            e -= t;
            for (let n = 0, r = 0, i = 0;; n++) {
                let a = n < this.viewports.length ? this.viewports[n] : null;
                if (!a || e < a.domTop) return r + (e - i) / this.scale + t;
                if (e <= a.domBottom) return a.top + (e - a.domTop) + t;
                r = a.bottom, i = a.domBottom
            }
        }
    }

    function Br(e, t, n) {
        if (1 == t.scale) return e;
        let r = t.toDOM(e.top, n),
            i = t.toDOM(e.bottom, n);
        return new Tr(e.from, e.length, r, i - r, Array.isArray(e.type) ? e.type.map((e => Br(e, t, n))) : e.type)
    }
    const Fr = Z.define({
            combine: e => e.join(" ")
        }),
        Hr = Z.define({
            combine: e => e.indexOf(!0) > -1
        }),
        Jr = ve.newName(),
        Kr = ve.newName(),
        ei = ve.newName(),
        ti = {
            "&light": "." + Kr,
            "&dark": "." + ei
        };

    function ni(e, t, n) {
        return new ve(t, {
            finish: t => /&/.test(t) ? t.replace(/&\w*/, (t => {
                if ("&" == t) return e;
                if (!n || !n[t]) throw new RangeError(`Unsupported selector: ${t}`);
                return n[t]
            })) : e + " " + t
        })
    }
    const ri = ni("." + Jr, {
            "&": {
                position: "relative !important",
                boxSizing: "border-box",
                "&.cm-focused": {
                    outline: "1px dotted #212121"
                },
                display: "flex !important",
                flexDirection: "column"
            },
            ".cm-scroller": {
                display: "flex !important",
                alignItems: "flex-start !important",
                fontFamily: "monospace",
                lineHeight: 1.4,
                height: "100%",
                overflowX: "auto",
                position: "relative",
                zIndex: 0
            },
            ".cm-content": {
                margin: 0,
                flexGrow: 2,
                minHeight: "100%",
                display: "block",
                whiteSpace: "pre",
                wordWrap: "normal",
                boxSizing: "border-box",
                padding: "4px 0",
                outline: "none"
            },
            ".cm-lineWrapping": {
                whiteSpace: "pre-wrap",
                overflowWrap: "anywhere"
            },
            "&light .cm-content": {
                caretColor: "black"
            },
            "&dark .cm-content": {
                caretColor: "white"
            },
            ".cm-line": {
                display: "block",
                padding: "0 2px 0 4px"
            },
            ".cm-selectionLayer": {
                zIndex: -1,
                contain: "size style"
            },
            ".cm-selectionBackground": {
                position: "absolute"
            },
            "&light .cm-selectionBackground": {
                background: "#d9d9d9"
            },
            "&dark .cm-selectionBackground": {
                background: "#222"
            },
            "&light.cm-focused .cm-selectionBackground": {
                background: "#d7d4f0"
            },
            "&dark.cm-focused .cm-selectionBackground": {
                background: "#233"
            },
            ".cm-cursorLayer": {
                zIndex: 100,
                contain: "size style",
                pointerEvents: "none"
            },
            "&.cm-focused .cm-cursorLayer": {
                animation: "steps(1) cm-blink 1.2s infinite"
            },
            "@keyframes cm-blink": {
                "0%": {},
                "50%": {
                    visibility: "hidden"
                },
                "100%": {}
            },
            "@keyframes cm-blink2": {
                "0%": {},
                "50%": {
                    visibility: "hidden"
                },
                "100%": {}
            },
            ".cm-cursor": {
                position: "absolute",
                borderLeft: "1.2px solid black",
                marginLeft: "-0.6px",
                pointerEvents: "none",
                display: "none"
            },
            "&dark .cm-cursor": {
                borderLeftColor: "#444"
            },
            "&.cm-focused .cm-cursor": {
                display: "block"
            },
            "&light .cm-activeLine": {
                backgroundColor: "#f3f9ff"
            },
            "&dark .cm-activeLine": {
                backgroundColor: "#223039"
            },
            "&light .cm-specialChar": {
                color: "red"
            },
            "&dark .cm-specialChar": {
                color: "#f78"
            },
            ".cm-tab": {
                display: "inline-block",
                overflow: "hidden",
                verticalAlign: "bottom"
            },
            ".cm-placeholder": {
                color: "#888",
                display: "inline-block"
            },
            ".cm-button": {
                verticalAlign: "middle",
                color: "inherit",
                fontSize: "70%",
                padding: ".2em 1em",
                borderRadius: "3px"
            },
            "&light .cm-button": {
                backgroundImage: "linear-gradient(#eff1f5, #d9d9df)",
                border: "1px solid #888",
                "&:active": {
                    backgroundImage: "linear-gradient(#b4b4b4, #d0d3d6)"
                }
            },
            "&dark .cm-button": {
                backgroundImage: "linear-gradient(#393939, #111)",
                border: "1px solid #888",
                "&:active": {
                    backgroundImage: "linear-gradient(#111, #333)"
                }
            },
            ".cm-textfield": {
                verticalAlign: "middle",
                color: "inherit",
                fontSize: "70%",
                border: "1px solid silver",
                padding: ".2em .5em"
            },
            "&light .cm-textfield": {
                backgroundColor: "white"
            },
            "&dark .cm-textfield": {
                border: "1px solid #555",
                backgroundColor: "inherit"
            }
        }, ti),
        ii = {
            childList: !0,
            characterData: !0,
            subtree: !0,
            characterDataOldValue: !0
        },
        ai = Yt.ie && Yt.ie_version <= 11;
    class oi {
        constructor(e, t, n) {
            this.view = e, this.onChange = t, this.onScrollChanged = n, this.active = !1, this.ignoreSelection = new dt, this.delayedFlush = -1, this.queue = [], this.lastFlush = 0, this.scrollTargets = [], this.intersection = null, this.intersecting = !1, this._selectionRange = null, this.parentCheck = -1, this.dom = e.contentDOM, this.observer = new MutationObserver((t => {
                for (let e of t) this.queue.push(e);
                this._selectionRange = null, (Yt.ie && Yt.ie_version <= 11 || Yt.ios && e.composing) && t.some((e => "childList" == e.type && e.removedNodes.length || "characterData" == e.type && e.oldValue.length > e.target.nodeValue.length)) ? this.flushSoon() : this.flush()
            })), ai && (this.onCharData = e => {
                this.queue.push({
                    target: e.target,
                    type: "characterData",
                    oldValue: e.prevValue
                }), this.flushSoon()
            }), this.onSelectionChange = this.onSelectionChange.bind(this), this.start(), this.onScroll = this.onScroll.bind(this), window.addEventListener("scroll", this.onScroll), "function" == typeof IntersectionObserver && (this.intersection = new IntersectionObserver((e => {
                this.parentCheck < 0 && (this.parentCheck = setTimeout(this.listenForScroll.bind(this), 1e3)), e[e.length - 1].intersectionRatio > 0 != this.intersecting && (this.intersecting = !this.intersecting, this.intersecting != this.view.inView && this.onScrollChanged(document.createEvent("Event")))
            }), {}), this.intersection.observe(this.dom)), this.listenForScroll()
        }
        onScroll(e) {
            this.intersecting && this.flush(), this.onScrollChanged(e)
        }
        onSelectionChange(e) {
            this.lastFlush < Date.now() - 50 && (this._selectionRange = null);
            let {
                view: t
            } = this, n = this.selectionRange;
            if (t.state.facet(gn) ? t.root.activeElement != this.dom : !rt(t.dom, n)) return;
            let r = n.anchorNode && t.docView.nearest(n.anchorNode);
            r && r.ignoreEvent(e) || (Yt.ie && Yt.ie_version <= 11 && !t.state.selection.main.empty && n.focusNode && at(n.focusNode, n.focusOffset, n.anchorNode, n.anchorOffset) ? this.flushSoon() : this.flush())
        }
        get selectionRange() {
            if (!this._selectionRange) {
                let {
                    root: e
                } = this.view, t = tt(e);
                Yt.safari && 11 == e.nodeType && function() {
                    let e = document.activeElement;
                    for (; e && e.shadowRoot;) e = e.shadowRoot.activeElement;
                    return e
                }() == this.view.contentDOM && (t = function(e) {
                    let t = null;

                    function n(e) {
                        e.preventDefault(), e.stopImmediatePropagation(), t = e.getTargetRanges()[0]
                    }
                    if (e.contentDOM.addEventListener("beforeinput", n, !0), document.execCommand("indent"), e.contentDOM.removeEventListener("beforeinput", n, !0), !t) return null;
                    let r = t.startContainer,
                        i = t.startOffset,
                        a = t.endContainer,
                        o = t.endOffset,
                        s = e.docView.domAtPos(e.state.selection.main.anchor);
                    at(s.node, s.offset, a, o) && ([r, i, a, o] = [a, o, r, i]);
                    return {
                        anchorNode: r,
                        anchorOffset: i,
                        focusNode: a,
                        focusOffset: o
                    }
                }(this.view) || t), this._selectionRange = t
            }
            return this._selectionRange
        }
        setSelectionRange(e, t) {
            var n;
            (null === (n = this._selectionRange) || void 0 === n ? void 0 : n.type) || (this._selectionRange = {
                anchorNode: e.node,
                anchorOffset: e.offset,
                focusNode: t.node,
                focusOffset: t.offset
            })
        }
        listenForScroll() {
            this.parentCheck = -1;
            let e = 0,
                t = null;
            for (let n = this.dom; n;)
                if (1 == n.nodeType) !t && e < this.scrollTargets.length && this.scrollTargets[e] == n ? e++ : t || (t = this.scrollTargets.slice(0, e)), t && t.push(n), n = n.assignedSlot || n.parentNode;
                else {
                    if (11 != n.nodeType) break;
                    n = n.host
                }
            if (e < this.scrollTargets.length && !t && (t = this.scrollTargets.slice(0, e)), t) {
                for (let e of this.scrollTargets) e.removeEventListener("scroll", this.onScroll);
                for (let e of this.scrollTargets = t) e.addEventListener("scroll", this.onScroll)
            }
        }
        ignore(e) {
            if (!this.active) return e();
            try {
                return this.stop(), e()
            } finally {
                this.start(), this.clear()
            }
        }
        start() {
            this.active || (this.observer.observe(this.dom, ii), this.dom.ownerDocument.addEventListener("selectionchange", this.onSelectionChange), ai && this.dom.addEventListener("DOMCharacterDataModified", this.onCharData), this.active = !0)
        }
        stop() {
            this.active && (this.active = !1, this.observer.disconnect(), this.dom.ownerDocument.removeEventListener("selectionchange", this.onSelectionChange), ai && this.dom.removeEventListener("DOMCharacterDataModified", this.onCharData))
        }
        clearSelection() {
            this.ignoreSelection.set(this.selectionRange)
        }
        clear() {
            this.observer.takeRecords(), this.queue.length = 0, this.clearSelection()
        }
        flushSoon() {
            this.delayedFlush < 0 && (this.delayedFlush = window.setTimeout((() => {
                this.delayedFlush = -1, this.flush()
            }), 20))
        }
        forceFlush() {
            this.delayedFlush >= 0 && (window.clearTimeout(this.delayedFlush), this.delayedFlush = -1, this.flush())
        }
        flush() {
            if (this.delayedFlush >= 0) return;
            this.lastFlush = Date.now();
            let e = this.queue;
            for (let t of this.observer.takeRecords()) e.push(t);
            e.length && (this.queue = []);
            let t = this.selectionRange,
                n = !this.ignoreSelection.eq(t) && rt(this.dom, t);
            if (0 == e.length && !n) return;
            let r = -1,
                i = -1,
                a = !1;
            for (let t of e) {
                let e = this.readMutation(t);
                e && (e.typeOver && (a = !0), -1 == r ? ({
                    from: r,
                    to: i
                } = e) : (r = Math.min(e.from, r), i = Math.max(e.to, i)))
            }
            let o = this.view.state;
            (r > -1 || n) && this.onChange(r, i, a), this.view.state == o && (this.view.docView.dirty && (this.ignore((() => this.view.docView.sync())), this.view.docView.dirty = 0), this.view.docView.updateSelection()), this.clearSelection()
        }
        readMutation(e) {
            let t = this.view.docView.nearest(e.target);
            if (!t || t.ignoreMutation(e)) return null;
            if (t.markDirty(), "childList" == e.type) {
                let n = si(t, e.previousSibling || e.target.previousSibling, -1),
                    r = si(t, e.nextSibling || e.target.nextSibling, 1);
                return {
                    from: n ? t.posAfter(n) : t.posAtStart,
                    to: r ? t.posBefore(r) : t.posAtEnd,
                    typeOver: !1
                }
            }
            return {
                from: t.posAtStart,
                to: t.posAtEnd,
                typeOver: e.target.nodeValue == e.oldValue
            }
        }
        destroy() {
            this.stop(), this.intersection && this.intersection.disconnect();
            for (let e of this.scrollTargets) e.removeEventListener("scroll", this.onScroll);
            window.removeEventListener("scroll", this.onScroll), clearTimeout(this.parentCheck)
        }
    }

    function si(e, t, n) {
        for (; t;) {
            let r = bt.get(t);
            if (r && r.parent == e) return r;
            let i = t.parentNode;
            t = i != e.dom ? i : n > 0 ? t.nextSibling : t.previousSibling
        }
        return null
    }

    function Oi(e, t, n, r) {
        let i, a, o, s = e.state.selection.main;
        if (t > -1 && (o = e.docView.domBoundsAround(t, n, 0))) {
            let {
                from: t,
                to: n
            } = o, r = e.docView.impreciseHead || e.docView.impreciseAnchor ? [] : function(e) {
                let t = [];
                if (e.root.activeElement != e.contentDOM) return t;
                let {
                    anchorNode: n,
                    anchorOffset: r,
                    focusNode: i,
                    focusOffset: a
                } = e.observer.selectionRange;
                n && (t.push(new ui(n, r)), i == n && a == r || t.push(new ui(i, a)));
                return t
            }(e), O = new li(r, e);
            O.readRange(o.startDOM, o.endDOM), a = function(e, t) {
                if (0 == e.length) return null;
                let n = e[0].pos,
                    r = 2 == e.length ? e[1].pos : n;
                return n > -1 && r > -1 ? W.single(n + t, r + t) : null
            }(r, t);
            let l = s.from,
                c = null;
            (8 === e.inputState.lastKeyCode && e.inputState.lastKeyTime > Date.now() - 100 || Yt.android && O.text.length < n - t) && (l = s.to, c = "end");
            let u = function(e, t, n, r) {
                let i = Math.min(e.length, t.length),
                    a = 0;
                for (; a < i && e.charCodeAt(a) == t.charCodeAt(a);) a++;
                if (a == i && e.length == t.length) return null;
                let o = e.length,
                    s = t.length;
                for (; o > 0 && s > 0 && e.charCodeAt(o - 1) == t.charCodeAt(s - 1);) o--, s--;
                if ("end" == r) {
                    n -= o + Math.max(0, a - Math.min(o, s)) - a
                }
                if (o < a && e.length < t.length) {
                    a -= n <= a && n >= o ? a - n : 0, s = a + (s - o), o = a
                } else if (s < a) {
                    a -= n <= a && n >= s ? a - n : 0, o = a + (o - s), s = a
                }
                return {
                    from: a,
                    toA: o,
                    toB: s
                }
            }(e.state.sliceDoc(t, n), O.text, l - t, c);
            u && (i = {
                from: t + u.from,
                to: t + u.toA,
                insert: e.state.toText(O.text.slice(u.from, u.toB))
            })
        } else if (e.hasFocus || !e.state.facet(gn)) {
            let t = e.observer.selectionRange,
                {
                    impreciseHead: n,
                    impreciseAnchor: r
                } = e.docView,
                i = n && n.node == t.focusNode && n.offset == t.focusOffset || !nt(e.contentDOM, t.focusNode) ? e.state.selection.main.head : e.docView.posFromDOM(t.focusNode, t.focusOffset),
                o = r && r.node == t.anchorNode && r.offset == t.anchorOffset || !nt(e.contentDOM, t.anchorNode) ? e.state.selection.main.anchor : e.docView.posFromDOM(t.anchorNode, t.anchorOffset);
            i == s.head && o == s.anchor || (a = W.single(o, i))
        }
        if (i || a)
            if (!i && r && !s.empty && a && a.main.empty ? i = {
                    from: s.from,
                    to: s.to,
                    insert: e.state.doc.slice(s.from, s.to)
                } : i && i.from >= s.from && i.to <= s.to && (i.from != s.from || i.to != s.to) && s.to - s.from - (i.to - i.from) <= 4 && (i = {
                    from: s.from,
                    to: s.to,
                    insert: e.state.doc.slice(s.from, i.from).append(i.insert).append(e.state.doc.slice(i.to, s.to))
                }), i) {
                let t = e.state;
                if (Yt.android && (i.from == s.from && i.to == s.to && 1 == i.insert.length && 2 == i.insert.lines && gt(e.contentDOM, "Enter", 13) || i.from == s.from - 1 && i.to == s.to && 0 == i.insert.length && gt(e.contentDOM, "Backspace", 8) || i.from == s.from && i.to == s.to + 1 && 0 == i.insert.length && gt(e.contentDOM, "Delete", 46)) || Yt.ios && e.inputState.flushIOSKey(e)) return;
                let n, r = i.insert.toString();
                if (e.state.facet(fn).some((t => t(e, i.from, i.to, r)))) return;
                if (e.inputState.composing >= 0 && e.inputState.composing++, i.from >= s.from && i.to <= s.to && i.to - i.from >= (s.to - s.from) / 3 && (!a || a.main.empty && a.main.from == i.from + i.insert.length)) {
                    let r = s.from < i.from ? t.sliceDoc(s.from, i.from) : "",
                        a = s.to > i.to ? t.sliceDoc(i.to, s.to) : "";
                    n = t.replaceSelection(e.state.toText(r + i.insert.sliceString(0, void 0, e.state.lineBreak) + a))
                } else {
                    let e = t.changes(i);
                    n = {
                        changes: e,
                        selection: a && !t.selection.main.eq(a.main) && a.main.to <= e.newLength ? t.selection.replaceRange(a.main) : void 0
                    }
                }
                e.dispatch(n, {
                    scrollIntoView: !0,
                    annotations: ce.userEvent.of("input")
                })
            } else if (a && !a.main.eq(s)) {
            let t, n = !1;
            e.inputState.lastSelectionTime > Date.now() - 50 && ("keyboardselection" == e.inputState.lastSelectionOrigin ? n = !0 : t = ce.userEvent.of(e.inputState.lastSelectionOrigin)), e.dispatch({
                selection: a,
                scrollIntoView: n,
                annotations: t
            })
        }
    }
    class li {
        constructor(e, t) {
            this.points = e, this.view = t, this.text = "", this.lineBreak = t.state.lineBreak
        }
        readRange(e, t) {
            if (!e) return;
            let n = e.parentNode;
            for (let r = e;;) {
                this.findPointBefore(n, r), this.readNode(r);
                let e = r.nextSibling;
                if (e == t) break;
                let i = bt.get(r),
                    a = bt.get(e);
                ((i ? i.breakAfter : ci(r)) || (a ? a.breakAfter : ci(e)) && ("BR" != r.nodeName || r.cmIgnore)) && (this.text += this.lineBreak), r = e
            }
            this.findPointBefore(n, t)
        }
        readNode(e) {
            if (e.cmIgnore) return;
            let t, n = bt.get(e),
                r = n && n.overrideDOMText;
            null != r ? t = r.sliceString(0, void 0, this.lineBreak) : 3 == e.nodeType ? t = e.nodeValue : "BR" == e.nodeName ? t = e.nextSibling ? this.lineBreak : "" : 1 == e.nodeType && this.readRange(e.firstChild, null), null != t && (this.findPointIn(e, t.length), this.text += t, Yt.chrome && 13 == this.view.inputState.lastKeyCode && !e.nextSibling && /\n\n$/.test(this.text) && (this.text = this.text.slice(0, -1)))
        }
        findPointBefore(e, t) {
            for (let n of this.points) n.node == e && e.childNodes[n.offset] == t && (n.pos = this.text.length)
        }
        findPointIn(e, t) {
            for (let n of this.points) n.node == e && (n.pos = this.text.length + Math.min(n.offset, t))
        }
    }

    function ci(e) {
        return 1 == e.nodeType && /^(DIV|P|LI|UL|OL|BLOCKQUOTE|DD|DT|H\d|SECTION|PRE)$/.test(e.nodeName)
    }
    class ui {
        constructor(e, t) {
            this.node = e, this.offset = t, this.pos = -1
        }
    }
    class di {
        constructor(e = {}) {
            this.plugins = [], this.editorAttrs = {}, this.contentAttrs = {}, this.bidiCache = [], this.updateState = 2, this.measureScheduled = -1, this.measureRequests = [], this.contentDOM = document.createElement("div"), this.scrollDOM = document.createElement("div"), this.scrollDOM.tabIndex = -1, this.scrollDOM.className = "cm-scroller", this.scrollDOM.appendChild(this.contentDOM), this.announceDOM = document.createElement("div"), this.announceDOM.style.cssText = "position: absolute; top: -10000px", this.announceDOM.setAttribute("aria-live", "polite"), this.dom = document.createElement("div"), this.dom.appendChild(this.announceDOM), this.dom.appendChild(this.scrollDOM), this._dispatch = e.dispatch || (e => this.update([e])), this.dispatch = this.dispatch.bind(this), this.root = e.root || document, this.viewState = new Ar(e.state || xe.create()), this.plugins = this.state.facet(xn).map((e => new kn(e).update(this))), this.observer = new oi(this, ((e, t, n) => {
                Oi(this, e, t, n)
            }), (e => {
                this.inputState.runScrollHandlers(this, e), this.observer.intersecting && this.measure()
            })), this.inputState = new sr(this), this.docView = new Rn(this), this.mountStyles(), this.updateAttrs(), this.updateState = 0, window.addEventListener("resize", (() => {
                -1 == fi && (fi = setTimeout(mi, 50))
            })), this.requestMeasure(), e.parent && e.parent.appendChild(this.dom)
        }
        get state() {
            return this.viewState.state
        }
        get viewport() {
            return this.viewState.viewport
        }
        get visibleRanges() {
            return this.viewState.visibleRanges
        }
        get inView() {
            return this.viewState.inView
        }
        get composing() {
            return this.inputState.composing > 0
        }
        dispatch(...e) {
            this._dispatch(1 == e.length && e[0] instanceof ce ? e[0] : this.state.update(...e))
        }
        update(e) {
            if (0 != this.updateState) throw new Error("Calls to EditorView.update are not allowed while an update is in progress");
            let t, n, r = !1,
                i = this.state;
            for (let t of e) {
                if (t.startState != i) throw new RangeError("Trying to update state with a transaction that doesn't start from the previous state.");
                i = t.state
            }
            if (i.facet(xe.phrases) != this.state.facet(xe.phrases)) return this.setState(i);
            t = new Tn(this, i, e);
            try {
                this.updateState = 2, n = e.some((e => e.scrollIntoView)) ? i.selection.main : null, this.viewState.update(t, n), this.bidiCache = Qi.update(this.bidiCache, t.changes), t.empty || (this.updatePlugins(t), this.inputState.update(t)), r = this.docView.update(t), this.state.facet(_n) != this.styleModules && this.mountStyles(), this.updateAttrs(), this.showAnnouncements(e)
            } finally {
                this.updateState = 0
            }
            if ((r || n || this.viewState.mustEnforceCursorAssoc) && this.requestMeasure(), !t.empty)
                for (let e of this.state.facet(hn)) e(t)
        }
        setState(e) {
            if (0 != this.updateState) throw new Error("Calls to EditorView.setState are not allowed while an update is in progress");
            this.updateState = 2;
            try {
                for (let e of this.plugins) e.destroy(this);
                this.viewState = new Ar(e), this.plugins = e.facet(xn).map((e => new kn(e).update(this))), this.docView = new Rn(this), this.inputState.ensureHandlers(this), this.mountStyles(), this.updateAttrs(), this.bidiCache = []
            } finally {
                this.updateState = 0
            }
            this.requestMeasure()
        }
        updatePlugins(e) {
            let t = e.startState.facet(xn),
                n = e.state.facet(xn);
            if (t != n) {
                let r = [];
                for (let i of n) {
                    let n = t.indexOf(i);
                    if (n < 0) r.push(new kn(i));
                    else {
                        let t = this.plugins[n];
                        t.mustUpdate = e, r.push(t)
                    }
                }
                for (let t of this.plugins) t.mustUpdate != e && t.destroy(this);
                this.plugins = r, this.inputState.ensureHandlers(this)
            } else
                for (let t of this.plugins) t.mustUpdate = e;
            for (let e = 0; e < this.plugins.length; e++) this.plugins[e] = this.plugins[e].update(this)
        }
        measure() {
            this.measureScheduled > -1 && cancelAnimationFrame(this.measureScheduled), this.measureScheduled = -1;
            let e = null;
            try {
                for (let t = 0;; t++) {
                    this.updateState = 1;
                    let n = this.viewState.measure(this.docView, t > 0),
                        r = this.measureRequests;
                    if (!n && !r.length && null == this.viewState.scrollTo) break;
                    if (this.measureRequests = [], t > 5) break;
                    let i = r.map((e => {
                            try {
                                return e.read(this)
                            } catch (e) {
                                return mn(this.state, e), gi
                            }
                        })),
                        a = new Tn(this, this.state);
                    a.flags |= n, e ? e.flags |= n : e = a, this.updateState = 2, a.empty || (this.updatePlugins(a), this.inputState.update(a)), this.updateAttrs(), n && this.docView.update(a);
                    for (let e = 0; e < r.length; e++)
                        if (i[e] != gi) try {
                            r[e].write(i[e], this)
                        } catch (e) {
                            mn(this.state, e)
                        }
                    if (this.viewState.scrollTo && (this.docView.scrollPosIntoView(this.viewState.scrollTo.head, this.viewState.scrollTo.assoc), this.viewState.scrollTo = null), !(4 & n) && 0 == this.measureRequests.length) break
                }
            } finally {
                this.updateState = 0
            }
            if (this.measureScheduled = -1, e && !e.empty)
                for (let t of this.state.facet(hn)) t(e)
        }
        get themeClasses() {
            return Jr + " " + (this.state.facet(Hr) ? ei : Kr) + " " + this.state.facet(Fr)
        }
        updateAttrs() {
            let e = Nt(this.state.facet(yn), {
                class: "cm-editor cm-wrap" + (this.hasFocus ? " cm-focused " : " ") + this.themeClasses
            });
            Mt(this.dom, this.editorAttrs, e), this.editorAttrs = e;
            let t = Nt(this.state.facet(vn), {
                spellcheck: "false",
                autocorrect: "off",
                autocapitalize: "off",
                contenteditable: String(this.state.facet(gn)),
                class: "cm-content",
                id: "cm-content",
                style: `${Yt.tabSize}: ${this.state.tabSize}`,
                role: "textbox",
                "aria-multiline": "true"
            });
            Mt(this.contentDOM, this.contentAttrs, t), this.contentAttrs = t
        }
        showAnnouncements(e) {
            let t = !0;
            for (let n of e)
                for (let e of n.effects)
                    if (e.is(di.announce)) {
                        t && (this.announceDOM.textContent = ""), t = !1, this.announceDOM.appendChild(document.createElement("div")).textContent = e.value
                    }
        }
        mountStyles() {
            this.styleModules = this.state.facet(_n), ve.mount(this.root, this.styleModules.concat(ri).reverse())
        }
        readMeasured() {
            if (2 == this.updateState) throw new Error("Reading the editor layout isn't allowed during an update");
            0 == this.updateState && this.measureScheduled > -1 && this.measure()
        }
        requestMeasure(e) {
            if (this.measureScheduled < 0 && (this.measureScheduled = requestAnimationFrame((() => this.measure()))), e) {
                if (null != e.key)
                    for (let t = 0; t < this.measureRequests.length; t++)
                        if (this.measureRequests[t].key === e.key) return void(this.measureRequests[t] = e);
                this.measureRequests.push(e)
            }
        }
        pluginField(e) {
            let t = [];
            for (let n of this.plugins) n.update(this).takeField(e, t);
            return t
        }
        plugin(e) {
            for (let t of this.plugins)
                if (t.spec == e) return t.update(this).value;
            return null
        }
        blockAtHeight(e, t) {
            return this.readMeasured(), this.viewState.blockAtHeight(e, hi(t, this.contentDOM))
        }
        visualLineAtHeight(e, t) {
            return this.readMeasured(), this.viewState.lineAtHeight(e, hi(t, this.contentDOM))
        }
        viewportLines(e, t) {
            let {
                from: n,
                to: r
            } = this.viewport;
            this.viewState.forEachLine(n, r, e, hi(t, this.contentDOM))
        }
        visualLineAt(e, t = 0) {
            return this.viewState.lineAt(e, t)
        }
        get contentHeight() {
            return this.viewState.contentHeight
        }
        moveByChar(e, t, n) {
            return or(this, e, ar(this, e, t, n))
        }
        moveByGroup(e, t) {
            return or(this, e, ar(this, e, t, (t => function(e, t, n) {
                let r = e.state.charCategorizer(t),
                    i = r(n);
                return e => {
                    let t = r(e);
                    return i == ge.Space && (i = t), i == t
                }
            }(this, e.head, t))))
        }
        moveToLineBoundary(e, t, n = !0) {
            return function(e, t, n, r) {
                let i = e.state.doc.lineAt(t.head),
                    a = r && e.lineWrapping ? e.coordsAtPos(t.assoc < 0 && t.head > i.from ? t.head - 1 : t.head) : null;
                if (a) {
                    let t = e.dom.getBoundingClientRect(),
                        r = e.posAtCoords({
                            x: n == (e.textDirection == Zn.LTR) ? t.right - 1 : t.left + 1,
                            y: (a.top + a.bottom) / 2
                        });
                    if (null != r) return W.cursor(r, n ? -1 : 1)
                }
                let o = rn.find(e.docView, t.head),
                    s = o ? n ? o.posAtEnd : o.posAtStart : n ? i.to : i.from;
                return W.cursor(s, n ? -1 : 1)
            }(this, e, t, n)
        }
        moveVertically(e, t, n) {
            return or(this, e, function(e, t, n, r) {
                var i;
                let a = t.head,
                    o = n ? 1 : -1;
                if (a == (n ? e.state.doc.length : 0)) return W.cursor(a);
                let s = e.coordsAtPos(a);
                if (s) {
                    let n = e.dom.getBoundingClientRect(),
                        O = null !== (i = t.goalColumn) && void 0 !== i ? i : s.left - n.left,
                        l = n.left + O,
                        c = null != r ? r : e.defaultLineHeight >> 1;
                    for (let t = o < 0 ? s.top : s.bottom, n = 0; n < 50; n += 10) {
                        let r = ir(e, {
                            x: l,
                            y: t + (c + n) * o
                        }, o);
                        if (null == r) break;
                        if (r != a) return W.cursor(r, void 0, void 0, O)
                    }
                }
                let {
                    doc: O
                } = e.state, l = O.lineAt(a), d = e.state.tabSize, p = t.goalColumn, h = 0;
                if (null == p) {
                    for (const e = O.iterRange(l.from, a); !e.next().done;) h = c(e.value, h, d);
                    p = h * e.defaultCharacterWidth
                } else h = Math.round(p / e.defaultCharacterWidth);
                if (o < 0 && 0 == l.from) return W.cursor(0);
                if (o > 0 && l.to == O.length) return W.cursor(l.to);
                let f = O.line(l.number + o),
                    m = f.from,
                    g = 0;
                for (const e = O.iterRange(f.from, f.to); g >= h && !e.next().done;) {
                    const {
                        offset: t,
                        leftOver: n
                    } = u(e.value, g, h, d);
                    g = h - n, m += t
                }
                return W.cursor(m, void 0, void 0, p)
            }(this, e, t, n))
        }
        scrollPosIntoView(e) {
            this.viewState.scrollTo = W.cursor(e), this.requestMeasure()
        }
        domAtPos(e) {
            return this.docView.domAtPos(e)
        }
        posAtDOM(e, t = 0) {
            return this.docView.posFromDOM(e, t)
        }
        posAtCoords(e) {
            return this.readMeasured(), ir(this, e)
        }
        coordsAtPos(e, t = 1) {
            this.readMeasured();
            let n = this.docView.coordsAt(e, t);
            if (!n || n.left == n.right) return n;
            let r = this.state.doc.lineAt(e),
                i = this.bidiSpans(r);
            return ct(n, i[Nn.find(i, e - r.from, -1, t)].dir == Zn.LTR == t > 0)
        }
        get defaultCharacterWidth() {
            return this.viewState.heightOracle.charWidth
        }
        get defaultLineHeight() {
            return this.viewState.heightOracle.lineHeight
        }
        get textDirection() {
            return this.viewState.heightOracle.direction
        }
        get lineWrapping() {
            return this.viewState.heightOracle.lineWrapping
        }
        bidiSpans(e) {
            if (e.length > pi) return Mn(e.length);
            let t = this.textDirection;
            for (let n of this.bidiCache)
                if (n.from == e.from && n.dir == t) return n.order;
            let n = function(e, t) {
                let n = e.length,
                    r = t == En ? 1 : 2,
                    i = t == En ? 2 : 1;
                if (!e || 1 == r && !Ln.test(e)) return Mn(n);
                for (let t = 0, i = r, a = r; t < n; t++) {
                    let n = Gn(e.charCodeAt(t));
                    512 == n ? n = i : 8 == n && 4 == a && (n = 16), Dn[t] = 4 == n ? 2 : n, 7 & n && (a = n), i = n
                }
                for (let e = 0, t = r, i = r; e < n; e++) {
                    let r = Dn[e];
                    if (128 == r) e < n - 1 && t == Dn[e + 1] && 24 & t ? r = Dn[e] = t : Dn[e] = 256;
                    else if (64 == r) {
                        let r = e + 1;
                        for (; r < n && 64 == Dn[r];) r++;
                        let a = e && 8 == t || r < n && 8 == Dn[r] ? 1 == i ? 1 : 8 : 256;
                        for (let t = e; t < r; t++) Dn[t] = a;
                        e = r - 1
                    } else 8 == r && 1 == i && (Dn[e] = 1);
                    t = r, 7 & r && (i = r)
                }
                for (let t, a, o, s = 0, O = 0, l = 0; s < n; s++)
                    if (a = An[t = e.charCodeAt(s)])
                        if (a < 0) {
                            for (let e = O - 3; e >= 0; e -= 3)
                                if (Cn[e + 1] == -a) {
                                    let t = Cn[e + 2],
                                        n = 2 & t ? r : 4 & t ? 1 & t ? i : r : 0;
                                    n && (Dn[s] = Dn[Cn[e]] = n), O = e;
                                    break
                                }
                        } else {
                            if (189 == Cn.length) break;
                            Cn[O++] = s, Cn[O++] = t, Cn[O++] = l
                        }
                else if (2 == (o = Dn[s]) || 1 == o) {
                    let e = o == r;
                    l = e ? 0 : 1;
                    for (let t = O - 3; t >= 0; t -= 3) {
                        let n = Cn[t + 2];
                        if (2 & n) break;
                        if (e) Cn[t + 2] |= 2;
                        else {
                            if (4 & n) break;
                            Cn[t + 2] |= 4
                        }
                    }
                }
                for (let e = 0; e < n; e++)
                    if (256 == Dn[e]) {
                        let t = e + 1;
                        for (; t < n && 256 == Dn[t];) t++;
                        let i = 1 == (e ? Dn[e - 1] : r),
                            a = i == (1 == (t < n ? Dn[t] : r)) ? i ? 1 : 2 : r;
                        for (let n = e; n < t; n++) Dn[n] = a;
                        e = t - 1
                    }
                let a = [];
                if (1 == r)
                    for (let e = 0; e < n;) {
                        let t = e,
                            r = 1 != Dn[e++];
                        for (; e < n && r == (1 != Dn[e]);) e++;
                        if (r)
                            for (let n = e; n > t;) {
                                let e = n,
                                    r = 2 != Dn[--n];
                                for (; n > t && r == (2 != Dn[n - 1]);) n--;
                                a.push(new Nn(n, e, r ? 2 : 1))
                            } else a.push(new Nn(t, e, 0))
                    } else
                        for (let e = 0; e < n;) {
                            let t = e,
                                r = 2 == Dn[e++];
                            for (; e < n && r == (2 == Dn[e]);) e++;
                            a.push(new Nn(t, e, r ? 1 : 2))
                        }
                return a
            }(e.text, this.textDirection);
            return this.bidiCache.push(new Qi(e.from, e.to, t, n)), n
        }
        get hasFocus() {
            var e;
            return (document.hasFocus() || Yt.safari && (null === (e = this.inputState) || void 0 === e ? void 0 : e.lastContextMenu) > Date.now() - 3e4) && this.root.activeElement == this.contentDOM
        }
        focus() {
            this.observer.ignore((() => {
                ft(this.contentDOM), this.docView.updateSelection()
            }))
        }
        destroy() {
            for (let e of this.plugins) e.destroy(this);
            this.inputState.destroy(), this.dom.remove(), this.observer.destroy(), this.measureScheduled > -1 && cancelAnimationFrame(this.measureScheduled)
        }
        static domEventHandlers(e) {
            return Pn.define((() => ({})), {
                eventHandlers: e
            })
        }
        static theme(e, t) {
            let n = ve.newName(),
                r = [Fr.of(n), _n.of(ni(`.${n}`, e))];
            return t && t.dark && r.push(Hr.of(!0)), r
        }
        static baseTheme(e) {
            return D.fallback(_n.of(ni("." + Jr, e, ti)))
        }
    }
    di.styleModule = _n, di.inputHandler = fn, di.exceptionSink = pn, di.updateListener = hn, di.editable = gn, di.mouseSelectionStyle = dn, di.dragMovesSelection = un, di.clickAddsSelectionRange = cn, di.decorations = Sn, di.contentAttributes = vn, di.editorAttributes = yn, di.lineWrapping = di.contentAttributes.of({
        class: "cm-lineWrapping"
    }), di.announce = le.define();
    const pi = 4096;

    function hi(e, t) {
        return null == e ? t.getBoundingClientRect().top : e
    }
    let fi = -1;

    function mi() {
        fi = -1;
        let e = document.querySelectorAll(".cm-content");
        for (let t = 0; t < e.length; t++) {
            let n = bt.get(e[t]);
            n && n.editorView.requestMeasure()
        }
    }
    const gi = {};
    class Qi {
        constructor(e, t, n, r) {
            this.from = e, this.to = t, this.dir = n, this.order = r
        }
        static update(e, t) {
            if (t.empty) return e;
            let n = [],
                r = e.length ? e[e.length - 1].dir : Zn.LTR;
            for (let i = Math.max(0, e.length - 10); i < e.length; i++) {
                let a = e[i];
                a.dir != r || t.touchesRange(a.from, a.to) || n.push(new Qi(t.mapPos(a.from, 1), t.mapPos(a.to, -1), a.dir, a.order))
            }
            return n
        }
    }
    const $i = "undefined" == typeof navigator ? "key" : /Mac/.test(navigator.platform) ? "mac" : /Win/.test(navigator.platform) ? "win" : /Linux|X11/.test(navigator.platform) ? "linux" : "key";

    function bi(e, t, n) {
        return t.altKey && (e = "Alt-" + e), t.ctrlKey && (e = "Ctrl-" + e), t.metaKey && (e = "Meta-" + e), !1 !== n && t.shiftKey && (e = "Shift-" + e), e
    }
    const xi = di.domEventHandlers({
            keydown: (e, t) => function(e, t, n, r) {
                let i = function(e) {
                        var t = !(Je && (e.ctrlKey || e.altKey || e.metaKey) || (Me || He) && e.shiftKey && e.key && 1 == e.key.length) && e.key || (e.shiftKey ? Ne : Le)[e.keyCode] || e.key || "Unidentified";
                        return "Esc" == t && (t = "Escape"), "Del" == t && (t = "Delete"), "Left" == t && (t = "ArrowLeft"), "Up" == t && (t = "ArrowUp"), "Right" == t && (t = "ArrowRight"), "Down" == t && (t = "ArrowDown"), t
                    }(t),
                    a = 1 == i.length && " " != i,
                    o = "",
                    s = !1;
                ki && ki.view == n && ki.scope == r && (o = ki.prefix + " ", (s = Or.indexOf(t.keyCode) < 0) && (ki = null));
                let O, l = e => {
                        if (e) {
                            for (let t of e.commands)
                                if (t(n)) return !0;
                            e.preventDefault && (s = !0)
                        }
                        return !1
                    },
                    c = e[r];
                if (c) {
                    if (l(c[o + bi(i, t, !a)])) return !0;
                    if (a && (t.shiftKey || t.altKey || t.metaKey) && (O = Le[t.keyCode]) && O != i) {
                        if (l(c[o + bi(O, t, !0)])) return !0
                    } else if (a && t.shiftKey && l(c[o + bi(i, t, !0)])) return !0
                }
                return s
            }(function(e) {
                let t = e.facet(Pi),
                    n = wi.get(t);
                n || wi.set(t, n = function(e, t = $i) {
                    let n = Object.create(null),
                        r = Object.create(null),
                        i = (e, t) => {
                            let n = r[e];
                            if (null == n) r[e] = t;
                            else if (n != t) throw new Error("Key binding " + e + " is used both as a regular binding and as a multi-stroke prefix")
                        },
                        a = (e, r, a, o) => {
                            let s = n[e] || (n[e] = Object.create(null)),
                                O = r.split(/ (?!$)/).map((e => function(e, t) {
                                    const n = e.split(/-(?!$)/);
                                    let r, i, a, o, s = n[n.length - 1];
                                    "Space" == s && (s = " ");
                                    for (let e = 0; e < n.length - 1; ++e) {
                                        const s = n[e];
                                        if (/^(cmd|meta|m)$/i.test(s)) o = !0;
                                        else if (/^a(lt)?$/i.test(s)) r = !0;
                                        else if (/^(c|ctrl|control)$/i.test(s)) i = !0;
                                        else if (/^s(hift)?$/i.test(s)) a = !0;
                                        else {
                                            if (!/^mod$/i.test(s)) throw new Error("Unrecognized modifier name: " + s);
                                            "mac" == t ? o = !0 : i = !0
                                        }
                                    }
                                    return r && (s = "Alt-" + s), i && (s = "Ctrl-" + s), o && (s = "Meta-" + s), a && (s = "Shift-" + s), s
                                }(e, t)));
                            for (let t = 1; t < O.length; t++) {
                                let n = O.slice(0, t).join(" ");
                                i(n, !0), s[n] || (s[n] = {
                                    preventDefault: !0,
                                    commands: [t => {
                                        let r = ki = {
                                            view: t,
                                            prefix: n,
                                            scope: e
                                        };
                                        return setTimeout((() => {
                                            ki == r && (ki = null)
                                        }), 4e3), !0
                                    }]
                                })
                            }
                            let l = O.join(" ");
                            i(l, !1);
                            let c = s[l] || (s[l] = {
                                preventDefault: !1,
                                commands: []
                            });
                            c.commands.push(a), o && (c.preventDefault = !0)
                        };
                    for (let n of e) {
                        let e = n[t] || n.key;
                        if (e)
                            for (let t of n.scope ? n.scope.split(" ") : ["editor"]) a(t, e, n.run, n.preventDefault), n.shift && a(t, "Shift-" + e, n.shift, n.preventDefault)
                    }
                    return n
                }(t.reduce(((e, t) => e.concat(t)), [])));
                return n
            }(t.state), e, t, "editor")
        }),
        Pi = Z.define({
            enables: xi
        }),
        wi = new WeakMap;
    let ki = null;
    const yi = Ht.line({
            attributes: {
                class: "cm-activeLine"
            }
        }),
        vi = Pn.fromClass(class {
            constructor(e) {
                this.decorations = this.getDeco(e)
            }
            update(e) {
                (e.docChanged || e.selectionSet) && (this.decorations = this.getDeco(e.view))
            }
            getDeco(e) {
                let t = -1,
                    n = [];
                for (let r of e.state.selection.ranges) {
                    if (!r.empty) return Ht.none;
                    let i = e.visualLineAt(r.head);
                    i.from > t && (n.push(yi.range(i.from)), t = i.from)
                }
                return Ht.set(n)
            }
        }, {
            decorations: e => e.decorations
        }),
        Si = 1024;
    let _i = 0;
    const Xi = new WeakMap;
    class Ti {
        constructor({
            deserialize: e
        } = {}) {
            this.id = _i++, this.deserialize = e || (() => {
                throw new Error("This node type doesn't define a deserialize function")
            })
        }
        static string() {
            return new Ti({
                deserialize: e => e
            })
        }
        static number() {
            return new Ti({
                deserialize: Number
            })
        }
        static flag() {
            return new Ti({
                deserialize: () => !0
            })
        }
        set(e, t) {
            return e[this.id] = t, e
        }
        add(e) {
            return "function" != typeof e && (e = Wi.match(e)), t => {
                let n = e(t);
                return void 0 === n ? null : [this, n]
            }
        }
    }
    Ti.closedBy = new Ti({
        deserialize: e => e.split(" ")
    }), Ti.openedBy = new Ti({
        deserialize: e => e.split(" ")
    }), Ti.group = new Ti({
        deserialize: e => e.split(" ")
    });
    const Ri = Object.create(null);
    class Wi {
        constructor(e, t, n, r = 0) {
            this.name = e, this.props = t, this.id = n, this.flags = r
        }
        static define(e) {
            let t = e.props && e.props.length ? Object.create(null) : Ri,
                n = (e.top ? 1 : 0) | (e.skipped ? 2 : 0) | (e.error ? 4 : 0) | (null == e.name ? 8 : 0),
                r = new Wi(e.name || "", t, e.id, n);
            if (e.props)
                for (let n of e.props) Array.isArray(n) || (n = n(r)), n && n[0].set(t, n[1]);
            return r
        }
        prop(e) {
            return this.props[e.id]
        }
        get isTop() {
            return (1 & this.flags) > 0
        }
        get isSkipped() {
            return (2 & this.flags) > 0
        }
        get isError() {
            return (4 & this.flags) > 0
        }
        get isAnonymous() {
            return (8 & this.flags) > 0
        }
        is(e) {
            if ("string" == typeof e) {
                if (this.name == e) return !0;
                let t = this.prop(Ti.group);
                return !!t && t.indexOf(e) > -1
            }
            return this.id == e
        }
        static match(e) {
            let t = Object.create(null);
            for (let n in e)
                for (let r of n.split(" ")) t[r] = e[n];
            return e => {
                for (let n = e.prop(Ti.group), r = -1; r < (n ? n.length : 0); r++) {
                    let i = t[r < 0 ? e.name : n[r]];
                    if (i) return i
                }
            }
        }
    }
    Wi.none = new Wi("", Object.create(null), 0, 8);
    class qi {
        constructor(e) {
            this.types = e;
            for (let t = 0; t < e.length; t++)
                if (e[t].id != t) throw new RangeError("Node type ids should correspond to array positions when creating a node set")
        }
        extend(...e) {
            let t = [];
            for (let n of this.types) {
                let r = null;
                for (let t of e) {
                    let e = t(n);
                    e && (r || (r = Object.assign({}, n.props)), e[0].set(r, e[1]))
                }
                t.push(r ? new Wi(n.name, r, n.id, n.flags) : n)
            }
            return new qi(t)
        }
    }
    class Yi {
        constructor(e, t, n, r) {
            this.type = e, this.children = t, this.positions = n, this.length = r
        }
        toString() {
            let e = this.children.map((e => e.toString())).join();
            return this.type.name ? (/\W/.test(this.type.name) && !this.type.isError ? JSON.stringify(this.type.name) : this.type.name) + (e.length ? "(" + e + ")" : "") : e
        }
        cursor(e, t = 0) {
            let n = null != e && Xi.get(this) || this.topNode,
                r = new ji(n);
            return null != e && (r.moveTo(e, t), Xi.set(this, r._tree)), r
        }
        fullCursor() {
            return new ji(this.topNode, !0)
        }
        get topNode() {
            return new Ei(this, 0, 0, null)
        }
        resolve(e, t = 0) {
            return this.cursor(e, t).node
        }
        iterate(e) {
            let {
                enter: t,
                leave: n,
                from: r = 0,
                to: i = this.length
            } = e;
            for (let e = this.cursor();;) {
                let a = !1;
                if (e.from <= i && e.to >= r && (e.type.isAnonymous || !1 !== t(e.type, e.from, e.to))) {
                    if (e.firstChild()) continue;
                    e.type.isAnonymous || (a = !0)
                }
                for (; a && n && n(e.type, e.from, e.to), a = e.type.isAnonymous, !e.nextSibling();) {
                    if (!e.parent()) return;
                    a = !0
                }
            }
        }
        balance(e = Si) {
            return this.children.length <= Gi ? this : Li(this.type, Wi.none, this.children, this.positions, 0, this.children.length, 0, e, this.length, 0)
        }
        static build(e) {
            return function(e) {
                var t;
                let {
                    buffer: n,
                    nodeSet: r,
                    topID: i = 0,
                    maxBufferLength: a = Si,
                    reused: o = [],
                    minRepeatType: s = r.types.length
                } = e, O = Array.isArray(n) ? new Ci(n, n.length) : n, l = r.types, c = 0;

                function u(e, t, n, i, h) {
                    let {
                        id: f,
                        start: m,
                        end: g,
                        size: Q
                    } = O, $ = m - e;
                    if (Q < 0) return -1 == Q ? (n.push(o[f]), i.push($)) : c = f, void O.next();
                    let b, x, P = l[f];
                    if (g - m <= a && (x = d(O.pos - t, h))) {
                        let t = new Uint16Array(x.size - x.skip),
                            n = O.pos - x.size,
                            i = t.length;
                        for (; O.pos > n;) i = p(x.start, t, i, h);
                        b = new Zi(t, g - x.start, r, h < 0 ? Wi.none : l[h]), $ = x.start - e
                    } else {
                        let e = O.pos - Q;
                        O.next();
                        let t = [],
                            n = [],
                            r = f >= s ? f : -1;
                        for (; O.pos > e;) O.id == r ? O.next() : u(m, e, t, n, r);
                        t.reverse(), n.reverse(), b = r > -1 && t.length > Gi ? Li(P, P, t, n, 0, t.length, 0, a, g - m, c) : zi(new Yi(P, t, n, g - m), c)
                    }
                    n.push(b), i.push($)
                }

                function d(e, t) {
                    let n = O.fork(),
                        r = 0,
                        i = 0,
                        o = 0,
                        l = n.end - a,
                        c = {
                            size: 0,
                            start: 0,
                            skip: 0
                        };
                    e: for (let a = n.pos - e; n.pos > a;) {
                        if (n.id == t) {
                            c.size = r, c.start = i, c.skip = o, o += 4, r += 4, n.next();
                            continue
                        }
                        let e = n.size,
                            O = n.pos - e;
                        if (e < 0 || O < a || n.start < l) break;
                        let u = n.id >= s ? 4 : 0,
                            d = n.start;
                        for (n.next(); n.pos > O;) {
                            if (n.size < 0) break e;
                            n.id >= s && (u += 4), n.next()
                        }
                        i = d, r += e, o += u
                    }
                    return (t < 0 || r == e) && (c.size = r, c.start = i, c.skip = o), c.size > 4 ? c : void 0
                }

                function p(e, t, n, r) {
                    let {
                        id: i,
                        start: a,
                        end: o,
                        size: l
                    } = O;
                    if (O.next(), i == r) return n;
                    let c = n;
                    if (l > 4) {
                        let i = O.pos - (l - 4);
                        for (; O.pos > i;) n = p(e, t, n, r)
                    }
                    return i < s && (t[--n] = c, t[--n] = o - e, t[--n] = a - e, t[--n] = i), n
                }
                let h = [],
                    f = [];
                for (; O.pos > 0;) u(e.start || 0, 0, h, f, -1);
                let m = null !== (t = e.length) && void 0 !== t ? t : h.length ? f[0] + h[0].length : 0;
                return new Yi(l[i], h.reverse(), f.reverse(), m)
            }(e)
        }
    }

    function zi(e, t) {
        return t && (e.contextHash = t), e
    }
    Yi.empty = new Yi(Wi.none, [], [], 0);
    class Zi {
        constructor(e, t, n, r = Wi.none) {
            this.buffer = e, this.length = t, this.set = n, this.type = r
        }
        toString() {
            let e = [];
            for (let t = 0; t < this.buffer.length;) e.push(this.childString(t)), t = this.buffer[t + 3];
            return e.join(",")
        }
        childString(e) {
            let t = this.buffer[e],
                n = this.buffer[e + 3],
                r = this.set.types[t],
                i = r.name;
            if (/\W/.test(i) && !r.isError && (i = JSON.stringify(i)), n == (e += 4)) return i;
            let a = [];
            for (; e < n;) a.push(this.childString(e)), e = this.buffer[e + 3];
            return i + "(" + a.join(",") + ")"
        }
        findChild(e, t, n, r) {
            let {
                buffer: i
            } = this, a = -1;
            for (let o = e; o != t; o = i[o + 3])
                if (-1e8 != r) {
                    let e = i[o + 1],
                        t = i[o + 2];
                    if (n > 0) {
                        if (t > r && (a = o), t > r) break
                    } else if (e < r && (a = o), t >= r) break
                } else if (a = o, n > 0) break;
            return a
        }
    }
    class Ei {
        constructor(e, t, n, r) {
            this.node = e, this.from = t, this.index = n, this._parent = r
        }
        get type() {
            return this.node.type
        }
        get name() {
            return this.node.type.name
        }
        get to() {
            return this.from + this.node.length
        }
        nextChild(e, t, n, r = !1) {
            for (let i = this;;) {
                for (let {
                        children: a,
                        positions: o
                    } = i.node, s = t > 0 ? a.length : -1; e != s; e += t) {
                    let s = a[e],
                        O = o[e] + i.from;
                    if (-1e8 == n || !(t < 0 ? O >= n : O + s.length <= n))
                        if (s instanceof Zi) {
                            let r = s.findChild(0, s.buffer.length, t, -1e8 == n ? -1e8 : n - O);
                            if (r > -1) return new Vi(new Ui(i, s, e, O), null, r)
                        } else if (r || !s.type.isAnonymous || Ai(s)) {
                        let a = new Ei(s, O, e, i);
                        return r || !a.type.isAnonymous ? a : a.nextChild(t < 0 ? s.children.length - 1 : 0, t, n)
                    }
                }
                if (r || !i.type.isAnonymous) return null;
                if (e = i.index + t, i = i._parent, !i) return null
            }
        }
        get firstChild() {
            return this.nextChild(0, 1, -1e8)
        }
        get lastChild() {
            return this.nextChild(this.node.children.length - 1, -1, -1e8)
        }
        childAfter(e) {
            return this.nextChild(0, 1, e)
        }
        childBefore(e) {
            return this.nextChild(this.node.children.length - 1, -1, e)
        }
        nextSignificantParent() {
            let e = this;
            for (; e.type.isAnonymous && e._parent;) e = e._parent;
            return e
        }
        get parent() {
            return this._parent ? this._parent.nextSignificantParent() : null
        }
        get nextSibling() {
            return this._parent ? this._parent.nextChild(this.index + 1, 1, -1) : null
        }
        get prevSibling() {
            return this._parent ? this._parent.nextChild(this.index - 1, -1, -1) : null
        }
        get cursor() {
            return new ji(this)
        }
        resolve(e, t = 0) {
            return this.cursor.moveTo(e, t).node
        }
        getChild(e, t = null, n = null) {
            let r = Ii(this, e, t, n);
            return r.length ? r[0] : null
        }
        getChildren(e, t = null, n = null) {
            return Ii(this, e, t, n)
        }
        toString() {
            return this.node.toString()
        }
    }

    function Ii(e, t, n, r) {
        let i = e.cursor,
            a = [];
        if (!i.firstChild()) return a;
        if (null != n)
            for (; !i.type.is(n);)
                if (!i.nextSibling()) return a;
        for (;;) {
            if (null != r && i.type.is(r)) return a;
            if (i.type.is(t) && a.push(i.node), !i.nextSibling()) return null == r ? a : []
        }
    }
    class Ui {
        constructor(e, t, n, r) {
            this.parent = e, this.buffer = t, this.index = n, this.start = r
        }
    }
    class Vi {
        constructor(e, t, n) {
            this.context = e, this._parent = t, this.index = n, this.type = e.buffer.set.types[e.buffer.buffer[n]]
        }
        get name() {
            return this.type.name
        }
        get from() {
            return this.context.start + this.context.buffer.buffer[this.index + 1]
        }
        get to() {
            return this.context.start + this.context.buffer.buffer[this.index + 2]
        }
        child(e, t) {
            let {
                buffer: n
            } = this.context, r = n.findChild(this.index + 4, n.buffer[this.index + 3], e, -1e8 == t ? -1e8 : t - this.context.start);
            return r < 0 ? null : new Vi(this.context, this, r)
        }
        get firstChild() {
            return this.child(1, -1e8)
        }
        get lastChild() {
            return this.child(-1, -1e8)
        }
        childAfter(e) {
            return this.child(1, e)
        }
        childBefore(e) {
            return this.child(-1, e)
        }
        get parent() {
            return this._parent || this.context.parent.nextSignificantParent()
        }
        externalSibling(e) {
            return this._parent ? null : this.context.parent.nextChild(this.context.index + e, e, -1)
        }
        get nextSibling() {
            let {
                buffer: e
            } = this.context, t = e.buffer[this.index + 3];
            return t < (this._parent ? e.buffer[this._parent.index + 3] : e.buffer.length) ? new Vi(this.context, this._parent, t) : this.externalSibling(1)
        }
        get prevSibling() {
            let {
                buffer: e
            } = this.context, t = this._parent ? this._parent.index + 4 : 0;
            return this.index == t ? this.externalSibling(-1) : new Vi(this.context, this._parent, e.findChild(t, this.index, -1, -1e8))
        }
        get cursor() {
            return new ji(this)
        }
        resolve(e, t = 0) {
            return this.cursor.moveTo(e, t).node
        }
        toString() {
            return this.context.buffer.childString(this.index)
        }
        getChild(e, t = null, n = null) {
            let r = Ii(this, e, t, n);
            return r.length ? r[0] : null
        }
        getChildren(e, t = null, n = null) {
            return Ii(this, e, t, n)
        }
    }
    class ji {
        constructor(e, t = !1) {
            if (this.full = t, this.buffer = null, this.stack = [], this.index = 0, this.bufferNode = null, e instanceof Ei) this.yieldNode(e);
            else {
                this._tree = e.context.parent, this.buffer = e.context;
                for (let t = e._parent; t; t = t._parent) this.stack.unshift(t.index);
                this.bufferNode = e, this.yieldBuf(e.index)
            }
        }
        get name() {
            return this.type.name
        }
        yieldNode(e) {
            return !!e && (this._tree = e, this.type = e.type, this.from = e.from, this.to = e.to, !0)
        }
        yieldBuf(e, t) {
            this.index = e;
            let {
                start: n,
                buffer: r
            } = this.buffer;
            return this.type = t || r.set.types[r.buffer[e]], this.from = n + r.buffer[e + 1], this.to = n + r.buffer[e + 2], !0
        }
        yield(e) {
            return !!e && (e instanceof Ei ? (this.buffer = null, this.yieldNode(e)) : (this.buffer = e.context, this.yieldBuf(e.index, e.type)))
        }
        toString() {
            return this.buffer ? this.buffer.buffer.childString(this.index) : this._tree.toString()
        }
        enter(e, t) {
            if (!this.buffer) return this.yield(this._tree.nextChild(e < 0 ? this._tree.node.children.length - 1 : 0, e, t, this.full));
            let {
                buffer: n
            } = this.buffer, r = n.findChild(this.index + 4, n.buffer[this.index + 3], e, -1e8 == t ? -1e8 : t - this.buffer.start);
            return !(r < 0) && (this.stack.push(this.index), this.yieldBuf(r))
        }
        firstChild() {
            return this.enter(1, -1e8)
        }
        lastChild() {
            return this.enter(-1, -1e8)
        }
        childAfter(e) {
            return this.enter(1, e)
        }
        childBefore(e) {
            return this.enter(-1, e)
        }
        parent() {
            if (!this.buffer) return this.yieldNode(this.full ? this._tree._parent : this._tree.parent);
            if (this.stack.length) return this.yieldBuf(this.stack.pop());
            let e = this.full ? this.buffer.parent : this.buffer.parent.nextSignificantParent();
            return this.buffer = null, this.yieldNode(e)
        }
        sibling(e) {
            if (!this.buffer) return !!this._tree._parent && this.yield(this._tree._parent.nextChild(this._tree.index + e, e, -1e8, this.full));
            let {
                buffer: t
            } = this.buffer, n = this.stack.length - 1;
            if (e < 0) {
                let e = n < 0 ? 0 : this.stack[n] + 4;
                if (this.index != e) return this.yieldBuf(t.findChild(e, this.index, -1, -1e8))
            } else {
                let e = t.buffer[this.index + 3];
                if (e < (n < 0 ? t.buffer.length : t.buffer[this.stack[n] + 3])) return this.yieldBuf(e)
            }
            return n < 0 && this.yield(this.buffer.parent.nextChild(this.buffer.index + e, e, -1e8, this.full))
        }
        nextSibling() {
            return this.sibling(1)
        }
        prevSibling() {
            return this.sibling(-1)
        }
        atLastNode(e) {
            let t, n, {
                buffer: r
            } = this;
            if (r) {
                if (e > 0) {
                    if (this.index < r.buffer.buffer.length) return !1
                } else
                    for (let e = 0; e < this.index; e++)
                        if (r.buffer.buffer[e + 3] < this.index) return !1;
                ({
                    index: t,
                    parent: n
                } = r)
            } else({
                index: t,
                _parent: n
            } = this._tree);
            for (; n;
                ({
                    index: t,
                    _parent: n
                } = n))
                for (let r = t + e, i = e < 0 ? -1 : n.node.children.length; r != i; r += e) {
                    let e = n.node.children[r];
                    if (this.full || !e.type.isAnonymous || e instanceof Zi || Ai(e)) return !1
                }
            return !0
        }
        move(e) {
            if (this.enter(e, -1e8)) return !0;
            for (;;) {
                if (this.sibling(e)) return !0;
                if (this.atLastNode(e) || !this.parent()) return !1
            }
        }
        next() {
            return this.move(1)
        }
        prev() {
            return this.move(-1)
        }
        moveTo(e, t = 0) {
            for (;
                (this.from == this.to || (t < 1 ? this.from >= e : this.from > e) || (t > -1 ? this.to <= e : this.to < e)) && this.parent(););
            for (; t < 0 ? this.childBefore(e) : this.childAfter(e);)
                if (this.from == this.to || (t < 1 ? this.from >= e : this.from > e) || (t > -1 ? this.to <= e : this.to < e)) {
                    this.parent();
                    break
                }
            return this
        }
        get node() {
            if (!this.buffer) return this._tree;
            let e = this.bufferNode,
                t = null,
                n = 0;
            if (e && e.context == this.buffer) e: for (let r = this.index, i = this.stack.length; i >= 0;) {
                for (let a = e; a; a = a._parent)
                    if (a.index == r) {
                        if (r == this.index) return a;
                        t = a, n = i + 1;
                        break e
                    }
                r = this.stack[--i]
            }
            for (let e = n; e < this.stack.length; e++) t = new Vi(this.buffer, t, this.stack[e]);
            return this.bufferNode = new Vi(this.buffer, t, this.index)
        }
        get tree() {
            return this.buffer ? null : this._tree.node
        }
    }

    function Ai(e) {
        return e.children.some((e => !e.type.isAnonymous || e instanceof Zi || Ai(e)))
    }
    class Ci {
        constructor(e, t) {
            this.buffer = e, this.index = t
        }
        get id() {
            return this.buffer[this.index - 4]
        }
        get start() {
            return this.buffer[this.index - 3]
        }
        get end() {
            return this.buffer[this.index - 2]
        }
        get size() {
            return this.buffer[this.index - 1]
        }
        get pos() {
            return this.index
        }
        next() {
            this.index -= 4
        }
        fork() {
            return new Ci(this.buffer, this.index)
        }
    }
    const Gi = 8;

    function Li(e, t, n, r, i, a, o, s, O, l) {
        let c = [],
            u = [];
        if (O <= s)
            for (let e = i; e < a; e++) c.push(n[e]), u.push(r[e] - o);
        else {
            let e = Math.max(s, Math.ceil(1.5 * O / Gi));
            for (let O = i; O < a;) {
                let i = O,
                    d = r[O];
                for (O++; O < a; O++) {
                    if (r[O] + n[O].length - d > e) break
                }
                if (O == i + 1) {
                    let r = n[i];
                    if (r instanceof Yi && r.type == t && r.length > e << 1) {
                        for (let e = 0; e < r.children.length; e++) c.push(r.children[e]), u.push(r.positions[e] + d - o);
                        continue
                    }
                    c.push(r)
                } else if (O == i + 1) c.push(n[i]);
                else {
                    let e = Li(t, t, n, r, i, O, d, s, r[O - 1] + n[O - 1].length - d, l);
                    t == Wi.none || Ni(e.children, t) || (e = zi(new Yi(Wi.none, e.children, e.positions, e.length), l)), c.push(e)
                }
                u.push(d - o)
            }
        }
        return zi(new Yi(e, c, u, O), l)
    }

    function Ni(e, t) {
        for (let n of e)
            if (n.type == t) return !0;
        return !1
    }
    class Di {
        constructor(e, t, n, r, i) {
            this.from = e, this.to = t, this.tree = n, this.offset = r, this.open = i
        }
        get openStart() {
            return (1 & this.open) > 0
        }
        get openEnd() {
            return (2 & this.open) > 0
        }
        static applyChanges(e, t, n = 128) {
            if (!t.length) return e;
            let r = [],
                i = 1,
                a = e.length ? e[0] : null,
                o = 0,
                s = 0,
                O = 0;
            for (;;) {
                let l = o < t.length ? t[o++] : null,
                    c = l ? l.fromA : 1e9;
                if (c - s >= n)
                    for (; a && a.from < c;) {
                        let t = a;
                        if (s >= t.from || c <= t.to || O) {
                            let e = Math.max(t.from, s) - O,
                                n = Math.min(t.to, c) - O;
                            t = e >= n ? null : new Di(e, n, t.tree, t.offset + O, (o > 0 ? 1 : 0) | (l ? 2 : 0))
                        }
                        if (t && r.push(t), a.to > c) break;
                        a = i < e.length ? e[i++] : null
                    }
                if (!l) break;
                s = l.toA, O = l.toA - l.toB
            }
            return r
        }
        static addTree(e, t = [], n = !1) {
            let r = [new Di(0, e.length, e, 0, n ? 2 : 0)];
            for (let n of t) n.to > e.length && r.push(n);
            return r
        }
    }

    function Mi(e) {
        return new Bi(e)
    }
    class Bi {
        constructor(e, t = e.length) {
            this.string = e, this.length = t
        }
        get(e) {
            return e < 0 || e >= this.length ? -1 : this.string.charCodeAt(e)
        }
        lineAfter(e) {
            if (e < 0) return "";
            let t = this.string.indexOf("\n", e);
            return this.string.slice(e, t < 0 ? this.length : Math.min(t, this.length))
        }
        read(e, t) {
            return this.string.slice(e, Math.min(this.length, t))
        }
        clip(e) {
            return new Bi(this.string, e)
        }
    }
    const Fi = new Ti;

    function Hi(e) {
        return Z.define({
            combine: e ? t => t.concat(e) : void 0
        })
    }
    class Ji {
        constructor(e, t, n, r = []) {
            this.data = e, this.topNode = n, xe.prototype.hasOwnProperty("tree") || Object.defineProperty(xe.prototype, "tree", {
                get() {
                    return ta(this)
                }
            }), this.parser = t, this.extension = [la.of(this), xe.languageData.of(((e, t) => e.facet(Ki(e, t))))].concat(r)
        }
        isActiveAt(e, t) {
            return Ki(e, t) == this.data
        }
        findRegions(e) {
            let t = e.facet(la);
            if ((null == t ? void 0 : t.data) == this.data) return [{
                from: 0,
                to: e.doc.length
            }];
            if (!t || !t.allowsNesting) return [];
            let n = [];
            return ta(e).iterate({
                enter: (e, t, r) => {
                    if (e.isTop && e.prop(Fi) == this.data) return n.push({
                        from: t,
                        to: r
                    }), !1
                }
            }), n
        }
        get allowsNesting() {
            return !0
        }
        parseString(e) {
            let t, n = d.of(e.split("\n")),
                r = this.parser.startParse(new na(n), 0, new ra(this.parser, xe.create({
                    doc: n
                }), [], Yi.empty, {
                    from: 0,
                    to: e.length
                }, [], null));
            for (; !(t = r.advance()););
            return t
        }
    }

    function Ki(e, t) {
        let n = e.facet(la);
        if (!n) return null;
        if (!n.allowsNesting) return n.data;
        let r = ta(e).resolve(t, -1);
        for (; r;) {
            let e = r.type.prop(Fi);
            if (e) return e;
            r = r.parent
        }
        return n.data
    }
    Ji.setState = le.define();
    class ea extends Ji {
        constructor(e, t) {
            super(e, t, t.topNode), this.parser = t
        }
        static define(e) {
            let t = Hi(e.languageData);
            return new ea(t, e.parser.configure({
                props: [Fi.add((e => e.isTop ? t : void 0))]
            }))
        }
        configure(e) {
            return new ea(this.data, this.parser.configure(e))
        }
        get allowsNesting() {
            return this.parser.hasNested
        }
    }

    function ta(e) {
        let t = e.field(Ji.state, !1);
        return t ? t.tree : Yi.empty
    }
    class na {
        constructor(e, t = e.length) {
            this.doc = e, this.length = t, this.cursorPos = 0, this.string = "", this.prevString = "", this.cursor = e.iter()
        }
        syncTo(e) {
            return e < this.cursorPos && (this.cursor = this.doc.iter(), this.cursorPos = 0), this.prevString = e == this.cursorPos ? this.string : "", this.string = this.cursor.next(e - this.cursorPos).value, this.cursorPos = e + this.string.length, this.cursorPos - this.string.length
        }
        get(e) {
            if (e >= this.length) return -1;
            let t = this.cursorPos - this.string.length;
            if (e < t || e >= this.cursorPos) {
                if (e < t && e >= t - this.prevString.length) return this.prevString.charCodeAt(e - (t - this.prevString.length));
                t = this.syncTo(e)
            }
            return this.string.charCodeAt(e - t)
        }
        lineAfter(e) {
            if (e >= this.length || e < 0) return "";
            let t = this.cursorPos - this.string.length;
            return (e < t || e >= this.cursorPos) && (t = this.syncTo(e)), this.cursor.lineBreak ? "" : this.string.slice(e - t, Math.min(this.length - t, this.string.length))
        }
        read(e, t) {
            let n = this.cursorPos - this.string.length;
            return e < n || t >= this.cursorPos ? this.doc.sliceString(e, t) : this.string.slice(e - n, t - n)
        }
        clip(e) {
            return new na(this.doc, e)
        }
    }
    class ra {
        constructor(e, t, n = [], r, i, a, o) {
            this.parser = e, this.state = t, this.fragments = n, this.tree = r, this.viewport = i, this.skipped = a, this.scheduleOn = o, this.parse = null, this.tempSkipped = []
        }
        work(e, t) {
            if (this.tree != Yi.empty && (null == t ? this.tree.length == this.state.doc.length : this.tree.length >= t)) return this.takeTree(), !0;
            this.parse || (this.parse = this.parser.startParse(new na(this.state.doc), 0, this));
            let n = Date.now() + e;
            for (;;) {
                let e = this.parse.advance();
                if (e) return this.fragments = this.withoutTempSkipped(Di.addTree(e)), this.parse = null, this.tree = e, !0;
                if (null != t && this.parse.pos >= t) return this.takeTree(), !0;
                if (Date.now() > n) return !1
            }
        }
        takeTree() {
            this.parse && this.parse.pos > this.tree.length && (this.tree = this.parse.forceFinish(), this.fragments = this.withoutTempSkipped(Di.addTree(this.tree, this.fragments, !0)))
        }
        withoutTempSkipped(e) {
            for (let t; t = this.tempSkipped.pop();) e = ia(e, t.from, t.to);
            return e
        }
        changes(e, t) {
            let {
                fragments: n,
                tree: r,
                viewport: i,
                skipped: a
            } = this;
            if (this.takeTree(), !e.empty) {
                let t = [];
                if (e.iterChangedRanges(((e, n, r, i) => t.push({
                        fromA: e,
                        toA: n,
                        fromB: r,
                        toB: i
                    }))), n = Di.applyChanges(n, t), r = Yi.empty, i = {
                        from: e.mapPos(i.from, -1),
                        to: e.mapPos(i.to, 1)
                    }, this.skipped.length) {
                    a = [];
                    for (let t of this.skipped) {
                        let n = e.mapPos(t.from, 1),
                            r = e.mapPos(t.to, -1);
                        n < r && a.push({
                            from: n,
                            to: r
                        })
                    }
                }
            }
            return new ra(this.parser, t, n, r, i, a, this.scheduleOn)
        }
        updateViewport(e) {
            this.viewport = e;
            let t = this.skipped.length;
            for (let t = 0; t < this.skipped.length; t++) {
                let {
                    from: n,
                    to: r
                } = this.skipped[t];
                n < e.to && r > e.from && (this.fragments = ia(this.fragments, n, r), this.skipped.splice(t--, 1))
            }
            return this.skipped.length < t
        }
        reset() {
            this.parse && (this.takeTree(), this.parse = null)
        }
        skipUntilInView(e, t) {
            this.skipped.push({
                from: e,
                to: t
            })
        }
        static getSkippingParser(e) {
            return {
                startParse: (t, n, r) => ({
                    pos: n,
                    advance() {
                        let i = r;
                        return i.tempSkipped.push({
                            from: n,
                            to: t.length
                        }), e && (i.scheduleOn = i.scheduleOn ? Promise.all([i.scheduleOn, e]) : e), this.pos = t.length, new Yi(Wi.none, [], [], t.length - n)
                    },
                    forceFinish() {
                        return this.advance()
                    }
                })
            }
        }
        movedPast(e) {
            return this.tree.length < e && this.parse && this.parse.pos >= e
        }
    }

    function ia(e, t, n) {
        return Di.applyChanges(e, [{
            fromA: t,
            toA: n,
            fromB: t,
            toB: n
        }])
    }
    ra.skippingParser = ra.getSkippingParser();
    class aa {
        constructor(e) {
            this.context = e, this.tree = e.tree
        }
        apply(e) {
            if (!e.docChanged) return this;
            let t = this.context.changes(e.changes, e.state),
                n = this.context.tree.length == e.startState.doc.length ? void 0 : Math.max(e.changes.mapPos(this.context.tree.length), t.viewport.to);
            return t.work(25, n) || t.takeTree(), new aa(t)
        }
        static init(e) {
            let t = new ra(e.facet(la).parser, e, [], Yi.empty, {
                from: 0,
                to: e.doc.length
            }, [], null);
            return t.work(25) || t.takeTree(), new aa(t)
        }
    }
    Ji.state = A.define({
        create: aa.init,
        update(e, t) {
            for (let e of t.effects)
                if (e.is(Ji.setState)) return e.value;
            return t.startState.facet(la) != t.state.facet(la) ? aa.init(t.state) : e.apply(t)
        }
    });
    let oa = "undefined" != typeof window && window.requestIdleCallback || ((e, {
            timeout: t
        }) => setTimeout(e, t)),
        sa = "undefined" != typeof window && window.cancelIdleCallback || clearTimeout;
    const Oa = Pn.fromClass(class {
            constructor(e) {
                this.view = e, this.working = -1, this.chunkEnd = -1, this.chunkBudget = -1, this.work = this.work.bind(this), this.scheduleWork()
            }
            update(e) {
                let t = this.view.state.field(Ji.state).context;
                e.viewportChanged && (t.updateViewport(e.view.viewport) && t.reset(), this.view.viewport.to > t.tree.length && this.scheduleWork()), e.docChanged && (this.view.hasFocus && (this.chunkBudget += 50), this.scheduleWork()), this.checkAsyncSchedule(t)
            }
            scheduleWork() {
                if (this.working > -1) return;
                let {
                    state: e
                } = this.view, t = e.field(Ji.state), n = t.context.fragments;
                t.tree.length >= e.doc.length && n.length && 0 == n[0].from && n[0].to >= e.doc.length || (this.working = oa(this.work, {
                    timeout: 500
                }))
            }
            work(e) {
                this.working = -1;
                let t = Date.now();
                if (this.chunkEnd < t && (this.chunkEnd < 0 || this.view.hasFocus) && (this.chunkEnd = t + 3e4, this.chunkBudget = 3e3), this.chunkBudget <= 0) return;
                let {
                    state: n,
                    viewport: {
                        to: r
                    }
                } = this.view, i = n.field(Ji.state);
                if (i.tree.length >= r + 1e6) return;
                let a = Math.min(this.chunkBudget, e ? Math.max(25, e.timeRemaining()) : 100),
                    o = i.context.work(a, r + 1e6);
                this.chunkBudget -= Date.now() - t, (o || this.chunkBudget <= 0 || i.context.movedPast(r)) && (i.context.takeTree(), this.view.dispatch({
                    effects: Ji.setState.of(new aa(i.context))
                })), !o && this.chunkBudget > 0 && this.scheduleWork(), this.checkAsyncSchedule(i.context)
            }
            checkAsyncSchedule(e) {
                e.scheduleOn && (e.scheduleOn.then((() => this.scheduleWork())), e.scheduleOn = null)
            }
            destroy() {
                this.working >= 0 && sa(this.working)
            }
        }, {
            eventHandlers: {
                focus() {
                    this.scheduleWork()
                }
            }
        }),
        la = Z.define({
            combine: e => e.length ? e[0] : null,
            enables: [Ji.state, Oa]
        });
    class ca {
        constructor(e, t = []) {
            this.language = e, this.support = t, this.extension = [e, t]
        }
    }
    class ua {
        constructor(e, t, n, r, i) {
            this.name = e, this.alias = t, this.extensions = n, this.filename = r, this.loadFunc = i, this.support = void 0, this.loading = null
        }
        load() {
            return this.loading || (this.loading = this.loadFunc().then((e => this.support = e), (e => {
                throw this.loading = null, e
            })))
        }
        static of (e) {
            return new ua(e.name, (e.alias || []).concat(e.name).map((e => e.toLowerCase())), e.extensions || [], e.filename, e.load)
        }
        static matchFilename(e, t) {
            for (let n of e)
                if (n.filename && n.filename.test(t)) return n;
            let n = /\.([^.]+)$/.exec(t);
            if (n)
                for (let t of e)
                    if (t.extensions.indexOf(n[1]) > -1) return t;
            return null
        }
        static matchLanguageName(e, t, n = !0) {
            t = t.toLowerCase();
            for (let n of e)
                if (n.alias.some((e => e == t))) return n;
            if (n)
                for (let n of e)
                    for (let e of n.alias) {
                        let r = t.indexOf(e);
                        if (r > -1 && (e.length > 2 || !/\w/.test(t[r - 1]) && !/\w/.test(t[r + e.length]))) return n
                    }
            return null
        }
    }
    const da = Z.define(),
        pa = Z.define({
            combine: e => {
                if (!e.length) return "  ";
                if (!/^(?: +|\t+)$/.test(e[0])) throw new Error("Invalid indent unit: " + JSON.stringify(e[0]));
                return e[0]
            }
        });

    function ha(e) {
        let t = e.facet(pa);
        return 9 == t.charCodeAt(0) ? e.tabSize * t.length : t.length
    }

    function fa(e, t) {
        let n = "",
            r = e.tabSize;
        if (9 == e.facet(pa).charCodeAt(0))
            for (; t >= r;) n += "\t", t -= r;
        for (let e = 0; e < t; e++) n += " ";
        return n
    }

    function ma(e, t) {
        e instanceof xe && (e = new ga(e));
        for (let n of e.state.facet(da)) {
            let r = n(e, t);
            if (null != r) return r
        }
        let n = ta(e.state);
        return n ? function(e, t, n) {
            let r = t.resolve(n);
            for (let e = r, t = n;;) {
                let n = e.childBefore(t);
                if (!n) break;
                n.type.isError && n.from == n.to ? (r = e, t = n.from) : (e = n, t = e.to + 1)
            }
            return ba(r, n, e)
        }(e, n, t) : null
    }
    class ga {
        constructor(e, t = {}) {
            this.state = e, this.options = t, this.unit = ha(e)
        }
        textAfterPos(e) {
            var t, n;
            let r = null === (t = this.options) || void 0 === t ? void 0 : t.simulateBreak;
            return e == r && (null === (n = this.options) || void 0 === n ? void 0 : n.simulateDoubleBreak) ? "" : this.state.sliceDoc(e, Math.min(e + 100, null != r && r > e ? r : 1e9, this.state.doc.lineAt(e).to))
        }
        column(e) {
            var t;
            let n = this.state.doc.lineAt(e),
                r = n.text.slice(0, e - n.from),
                i = this.countColumn(r, e - n.from),
                a = (null === (t = this.options) || void 0 === t ? void 0 : t.overrideIndentation) ? this.options.overrideIndentation(n.from) : -1;
            return a > -1 && (i += a - this.countColumn(r, r.search(/\S/))), i
        }
        countColumn(e, t) {
            return c(t < 0 ? e : e.slice(0, t), 0, this.state.tabSize)
        }
        lineIndent(e) {
            var t;
            let n = null === (t = this.options) || void 0 === t ? void 0 : t.overrideIndentation;
            if (n) {
                let t = n(e.from);
                if (t > -1) return t
            }
            return this.countColumn(e.text, e.text.search(/\S/))
        }
    }
    const Qa = new Ti;

    function $a(e) {
        let t = e.type.prop(Qa);
        if (t) return t;
        let n, r = e.firstChild;
        if (r && (n = r.type.prop(Ti.closedBy))) {
            let t = e.lastChild,
                r = t && n.indexOf(t.name) > -1;
            return e => ka(e, !0, 1, void 0, r && ! function(e) {
                var t, n;
                return e.pos == (null === (t = e.options) || void 0 === t ? void 0 : t.simulateBreak) && (null === (n = e.options) || void 0 === n ? void 0 : n.simulateDoubleBreak)
            }(e) ? t.from : void 0)
        }
        return null == e.parent ? xa : null
    }

    function ba(e, t, n) {
        for (; e; e = e.parent) {
            let r = $a(e);
            if (r) return r(new Pa(n, t, e))
        }
        return null
    }

    function xa() {
        return 0
    }
    class Pa extends ga {
        constructor(e, t, n) {
            super(e.state, e.options), this.base = e, this.pos = t, this.node = n
        }
        get textAfter() {
            return this.textAfterPos(this.pos)
        }
        get baseIndent() {
            let e = this.state.doc.lineAt(this.node.from);
            for (;;) {
                let t = this.node.resolve(e.from);
                for (; t.parent && t.parent.from == t.from;) t = t.parent;
                if (wa(t, this.node)) break;
                e = this.state.doc.lineAt(t.from)
            }
            return this.lineIndent(e)
        }
        continue () {
            let e = this.node.parent;
            return e ? ba(e, this.pos, this.base) : 0
        }
    }

    function wa(e, t) {
        for (let n = t; n; n = n.parent)
            if (e == n) return !0;
        return !1
    }

    function ka(e, t, n, r, i) {
        let a = e.textAfter,
            o = a.match(/^\s*/)[0].length,
            s = r && a.slice(o, o + r.length) == r || i == e.pos + o,
            O = t ? function(e) {
                var t;
                let n = e.node,
                    r = n.childAfter(n.from),
                    i = n.lastChild;
                if (!r) return null;
                let a = null === (t = e.options) || void 0 === t ? void 0 : t.simulateBreak,
                    o = e.state.doc.lineAt(r.from),
                    s = null == a || a <= o.from ? o.to : Math.min(o.to, a);
                for (let e = r.to;;) {
                    let t = n.childAfter(e);
                    if (!t || t == i) return null;
                    if (!t.type.isSkipped) return t.from < s ? r : null;
                    e = t.to
                }
            }(e) : null;
        return O ? s ? e.column(O.from) : e.column(O.to) : e.baseIndent + (s ? 0 : e.unit * n)
    }
    const ya = e => e.baseIndent;

    function va({
        except: e,
        units: t = 1
    } = {}) {
        return n => {
            let r = e && e.test(n.textAfter);
            return n.baseIndent + (r ? 0 : t * n.unit)
        }
    }
    const Sa = new Ti;

    function _a(e) {
        let t = e.firstChild,
            n = e.lastChild;
        return t && t.to < n.from ? {
            from: t.to,
            to: n.type.isError ? e.to : n.from
        } : null
    }
    const Xa = di.baseTheme({
            ".cm-matchingBracket": {
                color: "#0b0"
            },
            ".cm-nonmatchingBracket": {
                color: "#a22"
            }
        }),
        Ta = "()[]{}",
        Ra = Z.define({
            combine: e => Pe(e, {
                afterCursor: !0,
                brackets: Ta,
                maxScanDistance: 1e4
            })
        }),
        Wa = Ht.mark({
            class: "cm-matchingBracket"
        }),
        qa = Ht.mark({
            class: "cm-nonmatchingBracket"
        }),
        Ya = [A.define({
            create: () => Ht.none,
            update(e, t) {
                if (!t.docChanged && !t.selection) return e;
                let n = [],
                    r = t.state.facet(Ra);
                for (let e of t.state.selection.ranges) {
                    if (!e.empty) continue;
                    let i = Ea(t.state, e.head, -1, r) || e.head > 0 && Ea(t.state, e.head - 1, 1, r) || r.afterCursor && (Ea(t.state, e.head, 1, r) || e.head < t.state.doc.length && Ea(t.state, e.head + 1, -1, r));
                    if (!i) continue;
                    let a = i.matched ? Wa : qa;
                    n.push(a.range(i.start.from, i.start.to)), i.end && n.push(a.range(i.end.from, i.end.to))
                }
                return Ht.set(n, !0)
            },
            provide: e => di.decorations.from(e)
        }), Xa];

    function za(e = {}) {
        return [Ra.of(e), Ya]
    }

    function Za(e, t, n) {
        let r = e.prop(t < 0 ? Ti.openedBy : Ti.closedBy);
        if (r) return r;
        if (1 == e.name.length) {
            let r = n.indexOf(e.name);
            if (r > -1 && r % 2 == (t < 0 ? 1 : 0)) return [n[r + t]]
        }
        return null
    }

    function Ea(e, t, n, r = {}) {
        let i, a = r.maxScanDistance || 1e4,
            o = r.brackets || Ta,
            s = ta(e),
            O = s.resolve(t, n);
        return (i = Za(O.type, n, o)) ? function(e, t, n, r, i, a) {
            let o = r.parent,
                s = {
                    from: r.from,
                    to: r.to
                },
                O = 0,
                l = null == o ? void 0 : o.cursor;
            if (l && (n < 0 ? l.childBefore(r.from) : l.childAfter(r.to)))
                do {
                    if (n < 0 ? l.to <= r.from : l.from >= r.to) {
                        if (0 == O && i.indexOf(l.type.name) > -1) return {
                            start: s,
                            end: {
                                from: l.from,
                                to: l.to
                            },
                            matched: !0
                        };
                        if (Za(l.type, n, a)) O++;
                        else if (Za(l.type, -n, a) && (O--, 0 == O)) return {
                            start: s,
                            end: {
                                from: l.from,
                                to: l.to
                            },
                            matched: !1
                        }
                    }
                } while (n < 0 ? l.prevSibling() : l.nextSibling());
            return {
                start: s,
                matched: !1
            }
        }(0, 0, n, O, i, o) : function(e, t, n, r, i, a, o) {
            let s = n < 0 ? e.sliceDoc(t - 1, t) : e.sliceDoc(t, t + 1),
                O = o.indexOf(s);
            if (O < 0 || O % 2 == 0 != n > 0) return null;
            let l = {
                    from: n < 0 ? t - 1 : t,
                    to: n > 0 ? t + 1 : t
                },
                c = e.doc.iterRange(t, n > 0 ? e.doc.length : 0),
                u = 0;
            for (let e = 0; !c.next().done && e <= a;) {
                let a = c.value;
                n < 0 && (e += a.length);
                let s = t + e * n;
                for (let e = n > 0 ? 0 : a.length - 1, t = n > 0 ? a.length : -1; e != t; e += n) {
                    let t = o.indexOf(a[e]);
                    if (!(t < 0 || r.resolve(s + e, 1).type != i))
                        if (t % 2 == 0 == n > 0) u++;
                        else {
                            if (1 == u) return {
                                start: l,
                                end: {
                                    from: s + e,
                                    to: s + e + 1
                                },
                                matched: t >> 1 == O >> 1
                            };
                            u--
                        }
                }
                n > 0 && (e += a.length)
            }
            return c.done ? {
                start: l,
                matched: !1
            } : null
        }(e, t, n, s, O.type, a, o)
    }
    const Ia = {
            brackets: ["(", "[", "{", "'", '"'],
            before: ")]}'\":;>"
        },
        Ua = le.define({
            map(e, t) {
                let n = t.mapPos(e, -1, P.TrackAfter);
                return null == n ? void 0 : n
            }
        }),
        Va = le.define({
            map: (e, t) => t.mapPos(e)
        }),
        ja = new class extends Xe {};
    ja.startSide = 1, ja.endSide = -1;
    const Aa = A.define({
        create: () => qe.empty,
        update(e, t) {
            if (t.selection) {
                let n = t.state.doc.lineAt(t.selection.main.head).from,
                    r = t.startState.doc.lineAt(t.startState.selection.main.head).from;
                n != t.changes.mapPos(r, -1) && (e = qe.empty)
            }
            e = e.map(t.changes);
            for (let n of t.effects) n.is(Ua) ? e = e.update({
                add: [ja.range(n.value, n.value + 1)]
            }) : n.is(Va) && (e = e.update({
                filter: e => e != n.value
            }));
            return e
        }
    });
    const Ca = "()[]{}<>";

    function Ga(e) {
        for (let t = 0; t < Ca.length; t += 2)
            if (Ca.charCodeAt(t) == e) return Ca.charAt(t + 1);
        return function(e) {
            return e <= 65535 ? String.fromCharCode(e) : (e -= 65536, String.fromCharCode(55296 + (e >> 10), 56320 + (1023 & e)))
        }(e < 128 ? e : e + 1)
    }

    function La(e, t) {
        return e.languageDataAt("closeBrackets", t)[0] || Ia
    }

    function Na(e, t, n, r) {
        if (e.composing) return !1;
        let i = e.state.selection.main;
        if (r.length > 2 || 2 == r.length && 1 == l(O(r, 0)) || t != i.from || n != i.to) return !1;
        let a = function(e, t) {
            let n = La(e, e.selection.main.head),
                r = n.brackets || Ia.brackets;
            for (let i of r) {
                let a = Ga(O(i, 0));
                if (t == i) return a == i ? Ja(e, i, r.indexOf(i + i + i) > -1) : Fa(e, i, a, n.before || Ia.before);
                if (t == a && Ma(e, e.selection.main.from)) return Ha(e, i, a)
            }
            return null
        }(e.state, r);
        return !!a && (e.dispatch(a), !0)
    }
    const Da = [{
        key: "Backspace",
        run: ({
            state: e,
            dispatch: t
        }) => {
            let n = La(e, e.selection.main.head).brackets || Ia.brackets,
                r = null,
                i = e.changeByRange((t => {
                    if (t.empty) {
                        let r = function(e, t) {
                            let n = e.sliceString(t - 2, t);
                            return l(O(n, 0)) == n.length ? n : n.slice(1)
                        }(e.doc, t.head);
                        for (let i of n)
                            if (i == r && Ba(e.doc, t.head) == Ga(O(i, 0))) return {
                                changes: {
                                    from: t.head - i.length,
                                    to: t.head + i.length
                                },
                                range: W.cursor(t.head - i.length),
                                annotations: ce.userEvent.of("delete")
                            }
                    }
                    return {
                        range: r = t
                    }
                }));
            return r || t(e.update(i, {
                scrollIntoView: !0
            })), !r
        }
    }];

    function Ma(e, t) {
        let n = !1;
        return e.field(Aa).between(0, e.doc.length, (e => {
            e == t && (n = !0)
        })), n
    }

    function Ba(e, t) {
        let n = e.sliceString(t, t + 2);
        return n.slice(0, l(O(n, 0)))
    }

    function Fa(e, t, n, r) {
        let i = null,
            a = e.changeByRange((a => {
                if (!a.empty) return {
                    changes: [{
                        insert: t,
                        from: a.from
                    }, {
                        insert: n,
                        from: a.to
                    }],
                    effects: Ua.of(a.to + t.length),
                    range: W.range(a.anchor + t.length, a.head + t.length)
                };
                let o = Ba(e.doc, a.head);
                return !o || /\s/.test(o) || r.indexOf(o) > -1 ? {
                    changes: {
                        insert: t + n,
                        from: a.head
                    },
                    effects: Ua.of(a.head + t.length),
                    range: W.cursor(a.head + t.length)
                } : {
                    range: i = a
                }
            }));
        return i ? null : e.update(a, {
            scrollIntoView: !0,
            annotations: ce.userEvent.of("input")
        })
    }

    function Ha(e, t, n) {
        let r = null,
            i = e.selection.ranges.map((t => t.empty && Ba(e.doc, t.head) == n ? W.cursor(t.head + n.length) : r = t));
        return r ? null : e.update({
            selection: W.create(i, e.selection.mainIndex),
            scrollIntoView: !0,
            effects: e.selection.ranges.map((({
                from: e
            }) => Va.of(e)))
        })
    }

    function Ja(e, t, n) {
        let r = null,
            i = e.changeByRange((i => {
                if (!i.empty) return {
                    changes: [{
                        insert: t,
                        from: i.from
                    }, {
                        insert: t,
                        from: i.to
                    }],
                    effects: Ua.of(i.to + t.length),
                    range: W.range(i.anchor + t.length, i.head + t.length)
                };
                let a = i.head,
                    o = Ba(e.doc, a);
                if (o == t) {
                    if (Ka(e, a)) return {
                        changes: {
                            insert: t + t,
                            from: a
                        },
                        effects: Ua.of(a + t.length),
                        range: W.cursor(a + t.length)
                    };
                    if (Ma(e, a)) {
                        let r = n && e.sliceDoc(a, a + 3 * t.length) == t + t + t;
                        return {
                            range: W.cursor(a + t.length * (r ? 3 : 1)),
                            effects: Va.of(a)
                        }
                    }
                } else {
                    if (n && e.sliceDoc(a - 2 * t.length, a) == t + t && Ka(e, a - 2 * t.length)) return {
                        changes: {
                            insert: t + t + t + t,
                            from: a
                        },
                        effects: Ua.of(a + t.length),
                        range: W.cursor(a + t.length)
                    };
                    if (e.charCategorizer(a)(o) != ge.Word) {
                        let n = e.sliceDoc(a - 1, a);
                        if (n != t && e.charCategorizer(a)(n) != ge.Word) return {
                            changes: {
                                insert: t + t,
                                from: a
                            },
                            effects: Ua.of(a + t.length),
                            range: W.cursor(a + t.length)
                        }
                    }
                }
                return {
                    range: r = i
                }
            }));
        return r ? null : e.update(i, {
            scrollIntoView: !0,
            annotations: ce.userEvent.of("input")
        })
    }

    function Ka(e, t) {
        let n = ta(e).resolve(t + 1);
        return n.parent && n.from == t
    }

    function eo(e, t) {
        return W.create(e.ranges.map(t), e.mainIndex)
    }

    function to(e, t) {
        return e.update({
            selection: t,
            scrollIntoView: !0,
            annotations: ce.userEvent.of("keyboardselection")
        })
    }

    function no({
        state: e,
        dispatch: t
    }, n) {
        let r = eo(e.selection, n);
        return !r.eq(e.selection) && (t(to(e, r)), !0)
    }

    function ro(e, t) {
        return W.cursor(t ? e.to : e.from)
    }

    function io(e, t) {
        return no(e, (n => n.empty ? e.moveByChar(n, t) : ro(n, t)))
    }
    const ao = e => io(e, e.textDirection != Zn.LTR),
        oo = e => io(e, e.textDirection == Zn.LTR);

    function so(e, t) {
        return no(e, (n => n.empty ? e.moveByGroup(n, t) : ro(n, t)))
    }

    function Oo(e, t, n) {
        if (t.type.prop(n)) return !0;
        let r = t.to - t.from;
        return r && (r > 2 || /[^\s,.;:]/.test(e.sliceDoc(t.from, t.to))) || t.firstChild
    }

    function lo(e, t, n) {
        let r, i, a = ta(e).resolve(t.head),
            o = n ? Ti.closedBy : Ti.openedBy;
        for (let r = t.head;;) {
            let t = n ? a.childAfter(r) : a.childBefore(r);
            if (!t) break;
            Oo(e, t, o) ? a = t : r = n ? t.to : t.from
        }
        return i = a.type.prop(o) && (r = n ? Ea(e, a.from, 1) : Ea(e, a.to, -1)) && r.matched ? n ? r.end.to : r.end.from : n ? a.to : a.from, W.cursor(i, n ? -1 : 1)
    }

    function co(e, t) {
        return no(e, (n => n.empty ? e.moveVertically(n, t) : ro(n, t)))
    }
    const uo = e => co(e, !1),
        po = e => co(e, !0);

    function ho(e, t) {
        return no(e, (n => n.empty ? e.moveVertically(n, t, e.dom.clientHeight) : ro(n, t)))
    }
    const fo = e => ho(e, !1),
        mo = e => ho(e, !0);

    function go(e, t, n) {
        let r = e.visualLineAt(t.head),
            i = e.moveToLineBoundary(t, n);
        if (i.head == t.head && i.head != (n ? r.to : r.from) && (i = e.moveToLineBoundary(t, n, !1)), !n && i.head == r.from && r.length) {
            let n = /^\s*/.exec(e.state.sliceDoc(r.from, Math.min(r.from + 100, r.to)))[0].length;
            n && t.head != r.from + n && (i = W.cursor(r.from + n))
        }
        return i
    }
    const Qo = e => no(e, (t => go(e, t, !0))),
        $o = e => no(e, (t => go(e, t, !1)));

    function bo(e, t) {
        let n = eo(e.state.selection, (e => {
            let n = t(e);
            return W.range(e.anchor, n.head, n.goalColumn)
        }));
        return !n.eq(e.state.selection) && (e.dispatch(to(e.state, n)), !0)
    }

    function xo(e, t) {
        return bo(e, (n => e.moveByChar(n, t)))
    }
    const Po = e => xo(e, e.textDirection != Zn.LTR),
        wo = e => xo(e, e.textDirection == Zn.LTR);

    function ko(e, t) {
        return bo(e, (n => e.moveByGroup(n, t)))
    }

    function yo(e, t) {
        return bo(e, (n => e.moveVertically(n, t)))
    }
    const vo = e => yo(e, !1),
        So = e => yo(e, !0);

    function _o(e, t) {
        return bo(e, (n => e.moveVertically(n, t, e.dom.clientHeight)))
    }
    const Xo = e => _o(e, !1),
        To = e => _o(e, !0),
        Ro = e => bo(e, (t => go(e, t, !0))),
        Wo = e => bo(e, (t => go(e, t, !1))),
        qo = ({
            state: e,
            dispatch: t
        }) => (t(to(e, {
            anchor: 0
        })), !0),
        Yo = ({
            state: e,
            dispatch: t
        }) => (t(to(e, {
            anchor: e.doc.length
        })), !0),
        zo = ({
            state: e,
            dispatch: t
        }) => (t(to(e, {
            anchor: e.selection.main.anchor,
            head: 0
        })), !0),
        Zo = ({
            state: e,
            dispatch: t
        }) => (t(to(e, {
            anchor: e.selection.main.anchor,
            head: e.doc.length
        })), !0);

    function Eo({
        state: e,
        dispatch: t
    }, n) {
        let r = e.changeByRange((e => {
            let {
                from: t,
                to: r
            } = e;
            if (t == r) {
                let e = n(t);
                t = Math.min(t, e), r = Math.max(r, e)
            }
            return t == r ? {
                range: e
            } : {
                changes: {
                    from: t,
                    to: r
                },
                range: W.cursor(t)
            }
        }));
        return !r.changes.empty && (t(e.update(r, {
            scrollIntoView: !0,
            annotations: ce.userEvent.of("delete")
        })), !0)
    }
    const Io = (e, t, n) => Eo(e, (i => {
            let a, o, {
                    state: s
                } = e,
                u = s.doc.lineAt(i);
            if (!t && i > u.from && i < u.from + 200 && !/[^ \t]/.test(a = u.text.slice(0, i - u.from))) {
                if ("\t" == a[a.length - 1]) return i - 1;
                let e = c(a, 0, s.tabSize) % ha(s) || ha(s);
                for (let t = 0; t < e && " " == a[a.length - 1 - t]; t++) i--;
                return i
            }
            if (n) {
                let e = u.text.slice(i - u.from + (t ? 0 : -2), i - u.from + (t ? 2 : 0)),
                    n = e ? l(O(e, 0)) : 1;
                o = t ? Math.min(s.doc.length, i + n) : Math.max(0, i - n)
            } else o = r(u.text, i - u.from, t) + u.from;
            return o == i && u.number != (t ? s.doc.lines : 1) && (o += t ? 1 : -1), o
        })),
        Uo = e => Io(e, !1, !0),
        Vo = e => Io(e, !0, !1),
        jo = (e, t) => Eo(e, (n => {
            let i = n,
                {
                    state: a
                } = e,
                o = a.doc.lineAt(i),
                s = a.charCategorizer(i);
            for (let e = null;;) {
                if (i == (t ? o.to : o.from)) {
                    i == n && o.number != (t ? a.doc.lines : 1) && (i += t ? 1 : -1);
                    break
                }
                let O = r(o.text, i - o.from, t) + o.from,
                    l = o.text.slice(Math.min(i, O) - o.from, Math.max(i, O) - o.from),
                    c = s(l);
                if (null != e && c != e) break;
                " " == l && i == n || (e = c), i = O
            }
            return i
        })),
        Ao = e => jo(e, !1),
        Co = e => jo(e, !0),
        Go = e => Eo(e, (t => {
            let n = e.visualLineAt(t).to;
            return t < n ? n : Math.min(e.state.doc.length, t + 1)
        }));

    function Lo(e) {
        let t = [],
            n = -1;
        for (let r of e.selection.ranges) {
            let i = e.doc.lineAt(r.from),
                a = e.doc.lineAt(r.to);
            if (r.empty || r.to != a.from || (a = e.doc.lineAt(r.to - 1)), n >= i.number) {
                let e = t[t.length - 1];
                e.to = a.to, e.ranges.push(r)
            } else t.push({
                from: i.from,
                to: a.to,
                ranges: [r]
            });
            n = a.number + 1
        }
        return t
    }

    function No(e, t, n) {
        let r = [],
            i = [];
        for (let t of Lo(e)) {
            if (n ? t.to == e.doc.length : 0 == t.from) continue;
            let a = e.doc.lineAt(n ? t.to + 1 : t.from - 1),
                o = a.length + 1;
            if (n) {
                r.push({
                    from: t.to,
                    to: a.to
                }, {
                    from: t.from,
                    insert: a.text + e.lineBreak
                });
                for (let n of t.ranges) i.push(W.range(Math.min(e.doc.length, n.anchor + o), Math.min(e.doc.length, n.head + o)))
            } else {
                r.push({
                    from: a.from,
                    to: t.from
                }, {
                    from: t.to,
                    insert: e.lineBreak + a.text
                });
                for (let e of t.ranges) i.push(W.range(e.anchor - o, e.head - o))
            }
        }
        return !!r.length && (t(e.update({
            changes: r,
            scrollIntoView: !0,
            selection: W.create(i, e.selection.mainIndex)
        })), !0)
    }

    function Do(e, t, n) {
        let r = [];
        for (let t of Lo(e)) n ? r.push({
            from: t.from,
            insert: e.doc.slice(t.from, t.to) + e.lineBreak
        }) : r.push({
            from: t.to,
            insert: e.lineBreak + e.doc.slice(t.from, t.to)
        });
        return t(e.update({
            changes: r,
            scrollIntoView: !0
        })), !0
    }

    function Mo(e, t) {
        let n = -1;
        return e.changeByRange((r => {
            let i = [];
            for (let a = r.from; a <= r.to;) {
                let o = e.doc.lineAt(a);
                o.number > n && (r.empty || r.to > o.from) && (t(o, i, r), n = o.number), a = o.to + 1
            }
            let a = e.changes(i);
            return {
                changes: i,
                range: W.range(a.mapPos(r.anchor, 1), a.mapPos(r.head, 1))
            }
        }))
    }
    const Bo = ({
            state: e,
            dispatch: t
        }) => (t(e.update(Mo(e, ((t, n) => {
            n.push({
                from: t.from,
                insert: e.facet(pa)
            })
        })))), !0),
        Fo = ({
            state: e,
            dispatch: t
        }) => (t(e.update(Mo(e, ((t, n) => {
            let r = /^\s*/.exec(t.text)[0];
            if (!r) return;
            let i = c(r, 0, e.tabSize),
                a = 0,
                o = fa(e, Math.max(0, i - ha(e)));
            for (; a < r.length && a < o.length && r.charCodeAt(a) == o.charCodeAt(a);) a++;
            n.push({
                from: t.from + a,
                to: t.from + r.length,
                insert: o.slice(a)
            })
        })))), !0),
        Ho = [{
            key: "Alt-ArrowLeft",
            mac: "Ctrl-ArrowLeft",
            run: e => no(e, (t => lo(e.state, t, e.textDirection != Zn.LTR))),
            shift: e => bo(e, (t => lo(e.state, t, e.textDirection != Zn.LTR)))
        }, {
            key: "Alt-ArrowRight",
            mac: "Ctrl-ArrowRight",
            run: e => no(e, (t => lo(e.state, t, e.textDirection == Zn.LTR))),
            shift: e => bo(e, (t => lo(e.state, t, e.textDirection == Zn.LTR)))
        }, {
            key: "Alt-ArrowUp",
            run: ({
                state: e,
                dispatch: t
            }) => No(e, t, !1)
        }, {
            key: "Shift-Alt-ArrowUp",
            run: ({
                state: e,
                dispatch: t
            }) => Do(e, t, !1)
        }, {
            key: "Alt-ArrowDown",
            run: ({
                state: e,
                dispatch: t
            }) => No(e, t, !0)
        }, {
            key: "Shift-Alt-ArrowDown",
            run: ({
                state: e,
                dispatch: t
            }) => Do(e, t, !0)
        }, {
            key: "Escape",
            run: ({
                state: e,
                dispatch: t
            }) => {
                let n = e.selection,
                    r = null;
                return n.ranges.length > 1 ? r = W.create([n.main]) : n.main.empty || (r = W.create([W.cursor(n.main.head)])), !!r && (t(to(e, r)), !0)
            }
        }, {
            key: "Alt-l",
            mac: "Ctrl-l",
            run: ({
                state: e,
                dispatch: t
            }) => {
                let n = Lo(e).map((({
                    from: t,
                    to: n
                }) => W.range(t, Math.min(n + 1, e.doc.length))));
                return t(e.update({
                    selection: W.create(n),
                    annotations: ce.userEvent.of("keyboardselection")
                })), !0
            }
        }, {
            key: "Mod-i",
            run: ({
                state: e,
                dispatch: t
            }) => {
                let n = eo(e.selection, (t => {
                    var n;
                    let r = ta(e).resolve(t.head, 1);
                    for (; !(r.from < t.from && r.to >= t.to || r.to > t.to && r.from <= t.from) && (null === (n = r.parent) || void 0 === n ? void 0 : n.parent);) r = r.parent;
                    return W.range(r.to, r.from)
                }));
                return t(to(e, n)), !0
            },
            preventDefault: !0
        }, {
            key: "Mod-[",
            run: Fo
        }, {
            key: "Mod-]",
            run: Bo
        }, {
            key: "Mod-Alt-\\",
            run: ({
                state: e,
                dispatch: t
            }) => {
                let n = Object.create(null),
                    r = new ga(e, {
                        overrideIndentation: e => {
                            let t = n[e];
                            return null == t ? -1 : t
                        }
                    }),
                    i = Mo(e, ((t, i, a) => {
                        let o = ma(r, t.from);
                        if (null == o) return;
                        let s = /^\s*/.exec(t.text)[0],
                            O = fa(e, o);
                        (s != O || a.from < t.from + s.length) && (n[t.from] = o, i.push({
                            from: t.from,
                            to: t.from + s.length,
                            insert: O
                        }))
                    }));
                return i.changes.empty || t(e.update(i)), !0
            }
        }, {
            key: "Shift-Mod-k",
            run: e => {
                let {
                    state: t
                } = e, n = t.changes(Lo(t).map((({
                    from: e,
                    to: n
                }) => (e > 0 ? e-- : n < t.doc.length && n++, {
                    from: e,
                    to: n
                })))), r = eo(t.selection, (t => e.moveVertically(t, !0))).map(n);
                return e.dispatch({
                    changes: n,
                    selection: r,
                    scrollIntoView: !0
                }), !0
            }
        }, {
            key: "Shift-Mod-\\",
            run: ({
                state: e,
                dispatch: t
            }) => function(e, t, n) {
                let r = !1,
                    i = eo(e.selection, (t => {
                        let i = Ea(e, t.head, -1) || Ea(e, t.head, 1) || t.head > 0 && Ea(e, t.head - 1, 1) || t.head < e.doc.length && Ea(e, t.head + 1, -1);
                        if (!i || !i.end) return t;
                        r = !0;
                        let a = i.start.from == t.head ? i.end.to : i.end.from;
                        return n ? W.range(t.anchor, a) : W.cursor(a)
                    }));
                return !!r && (t(to(e, i)), !0)
            }(e, t, !1)
        }].concat([{
            key: "ArrowLeft",
            run: ao,
            shift: Po,
            preventDefault: !0
        }, {
            key: "Mod-ArrowLeft",
            mac: "Alt-ArrowLeft",
            run: e => so(e, e.textDirection != Zn.LTR),
            shift: e => ko(e, e.textDirection != Zn.LTR)
        }, {
            mac: "Cmd-ArrowLeft",
            run: $o,
            shift: Wo
        }, {
            key: "ArrowRight",
            run: oo,
            shift: wo,
            preventDefault: !0
        }, {
            key: "Mod-ArrowRight",
            mac: "Alt-ArrowRight",
            run: e => so(e, e.textDirection == Zn.LTR),
            shift: e => ko(e, e.textDirection == Zn.LTR)
        }, {
            mac: "Cmd-ArrowRight",
            run: Qo,
            shift: Ro
        }, {
            key: "ArrowUp",
            run: uo,
            shift: vo,
            preventDefault: !0
        }, {
            mac: "Cmd-ArrowUp",
            run: qo,
            shift: zo
        }, {
            mac: "Ctrl-ArrowUp",
            run: fo,
            shift: Xo
        }, {
            key: "ArrowDown",
            run: po,
            shift: So,
            preventDefault: !0
        }, {
            mac: "Cmd-ArrowDown",
            run: Yo,
            shift: Zo
        }, {
            mac: "Ctrl-ArrowDown",
            run: mo,
            shift: To
        }, {
            key: "PageUp",
            run: fo,
            shift: Xo
        }, {
            key: "PageDown",
            run: mo,
            shift: To
        }, {
            key: "Home",
            run: $o,
            shift: Wo
        }, {
            key: "Mod-Home",
            run: qo,
            shift: zo
        }, {
            key: "End",
            run: Qo,
            shift: Ro
        }, {
            key: "Mod-End",
            run: Yo,
            shift: Zo
        }, {
            key: "Enter",
            run: ({
                state: e,
                dispatch: t
            }) => {
                let n = e.changeByRange((({
                    from: t,
                    to: n
                }) => {
                    let r = t == n && function(e, t) {
                            if (/\(\)|\[\]|\{\}/.test(e.sliceDoc(t - 1, t + 1))) return {
                                from: t,
                                to: t
                            };
                            let n, r = ta(e).resolve(t),
                                i = r.childBefore(t),
                                a = r.childAfter(t);
                            return i && a && i.to <= t && a.from >= t && (n = i.type.prop(Ti.closedBy)) && n.indexOf(a.name) > -1 && e.doc.lineAt(i.to).from == e.doc.lineAt(a.from).from ? {
                                from: i.to,
                                to: a.from
                            } : null
                        }(e, t),
                        i = new ga(e, {
                            simulateBreak: t,
                            simulateDoubleBreak: !!r
                        }),
                        a = ma(i, t);
                    null == a && (a = /^\s*/.exec(e.doc.lineAt(t).text)[0].length);
                    let o = e.doc.lineAt(t);
                    for (; n < o.to && /\s/.test(o.text.slice(n - o.from, n + 1 - o.from));) n++;
                    r ? ({
                        from: t,
                        to: n
                    } = r) : t > o.from && t < o.from + 100 && !/\S/.test(o.text.slice(0, t)) && (t = o.from);
                    let s = ["", fa(e, a)];
                    return r && s.push(fa(e, i.lineIndent(o))), {
                        changes: {
                            from: t,
                            to: n,
                            insert: d.of(s)
                        },
                        range: W.cursor(t + 1 + s[1].length)
                    }
                }));
                return t(e.update(n, {
                    scrollIntoView: !0
                })), !0
            }
        }, {
            key: "Mod-a",
            run: ({
                state: e,
                dispatch: t
            }) => (t(e.update({
                selection: {
                    anchor: 0,
                    head: e.doc.length
                },
                annotations: ce.userEvent.of("keyboardselection")
            })), !0)
        }, {
            key: "Backspace",
            run: Uo,
            shift: Uo
        }, {
            key: "Delete",
            run: Vo,
            shift: Vo
        }, {
            key: "Mod-Backspace",
            mac: "Alt-Backspace",
            run: Ao
        }, {
            key: "Mod-Delete",
            mac: "Alt-Delete",
            run: Co
        }, {
            mac: "Mod-Backspace",
            run: e => Eo(e, (t => {
                let n = e.visualLineAt(t).from;
                return t > n ? n : Math.max(0, t - 1)
            }))
        }, {
            mac: "Mod-Delete",
            run: Go
        }].concat([{
            key: "Ctrl-b",
            run: ao,
            shift: Po,
            preventDefault: !0
        }, {
            key: "Ctrl-f",
            run: oo,
            shift: wo
        }, {
            key: "Ctrl-p",
            run: uo,
            shift: vo
        }, {
            key: "Ctrl-n",
            run: po,
            shift: So
        }, {
            key: "Ctrl-a",
            run: e => no(e, (t => W.cursor(e.visualLineAt(t.head).from, 1))),
            shift: e => bo(e, (t => W.cursor(e.visualLineAt(t.head).from)))
        }, {
            key: "Ctrl-e",
            run: e => no(e, (t => W.cursor(e.visualLineAt(t.head).to, -1))),
            shift: e => bo(e, (t => W.cursor(e.visualLineAt(t.head).to)))
        }, {
            key: "Ctrl-d",
            run: Vo
        }, {
            key: "Ctrl-h",
            run: e => Io(e, !1, !1)
        }, {
            key: "Ctrl-k",
            run: Go
        }, {
            key: "Alt-d",
            run: Co
        }, {
            key: "Ctrl-Alt-h",
            run: Ao
        }, {
            key: "Ctrl-o",
            run: ({
                state: e,
                dispatch: t
            }) => {
                let n = e.changeByRange((e => ({
                    changes: {
                        from: e.from,
                        to: e.to,
                        insert: d.of(["", ""])
                    },
                    range: W.cursor(e.from)
                })));
                return t(e.update(n, {
                    scrollIntoView: !0,
                    annotations: ce.userEvent.of("input")
                })), !0
            }
        }, {
            key: "Ctrl-t",
            run: ({
                state: e,
                dispatch: t
            }) => {
                let n = e.changeByRange((t => {
                    if (!t.empty || 0 == t.from || t.from == e.doc.length) return {
                        range: t
                    };
                    let n = t.from,
                        i = e.doc.lineAt(n),
                        a = n == i.from ? n - 1 : r(i.text, n - i.from, !1) + i.from,
                        o = n == i.to ? n + 1 : r(i.text, n - i.from, !0) + i.from;
                    return {
                        changes: {
                            from: a,
                            to: o,
                            insert: e.doc.slice(n, o).append(e.doc.slice(a, n))
                        },
                        range: W.cursor(o)
                    }
                }));
                return !n.changes.empty && (t(e.update(n, {
                    scrollIntoView: !0
                })), !0)
            }
        }, {
            key: "Alt-f",
            run: e => so(e, !0),
            shift: e => ko(e, !0)
        }, {
            key: "Alt-b",
            run: e => so(e, !1),
            shift: e => ko(e, !1)
        }, {
            key: "Alt-<",
            run: qo
        }, {
            key: "Alt->",
            run: Yo
        }, {
            key: "Ctrl-v",
            run: mo
        }, {
            key: "Alt-v",
            run: fo
        }].map((e => ({
            mac: e.key,
            run: e.run,
            shift: e.shift
        }))))),
        Jo = oe.define(),
        Ko = oe.define(),
        es = Z.define(),
        ts = Z.define({
            combine: e => Pe(e, {
                minDepth: 100,
                newGroupDelay: 500
            }, {
                minDepth: Math.max,
                newGroupDelay: Math.min
            })
        }),
        ns = A.define({
            create: () => gs.empty,
            update(e, t) {
                let n = t.state.facet(ts),
                    r = t.annotation(Jo);
                if (r) {
                    let i = ls.fromTransaction(t),
                        a = r.side,
                        o = 0 == a ? e.undone : e.done;
                    return o = i ? cs(o, o.length, n.minDepth, i) : ps(o, t.startState.selection), new gs(0 == a ? r.rest : o, 0 == a ? o : r.rest)
                }
                let i = t.annotation(Ko);
                if ("full" != i && "before" != i || (e = e.isolate()), !1 === t.annotation(ce.addToHistory)) return t.changes.empty ? e : e.addMapping(t.changes.desc);
                let a = ls.fromTransaction(t),
                    o = t.annotation(ce.time),
                    s = t.annotation(ce.userEvent);
                return a ? e = e.addChanges(a, o, s, n.newGroupDelay, n.minDepth) : t.selection && (e = e.addSelection(t.startState.selection, o, s, n.newGroupDelay)), "full" != i && "after" != i || (e = e.isolate()), e
            },
            toJSON: e => ({
                done: e.done.map((e => e.toJSON())),
                undone: e.undone.map((e => e.toJSON()))
            }),
            fromJSON: e => new gs(e.done.map(ls.fromJSON), e.undone.map(ls.fromJSON))
        });

    function rs(e = {}) {
        return [ns, ts.of(e), di.domEventHandlers({
            beforeinput: (e, t) => "historyUndo" == e.inputType ? as(t) : "historyRedo" == e.inputType && os(t)
        })]
    }

    function is(e, t) {
        return function({
            state: n,
            dispatch: r
        }) {
            let i = n.field(ns, !1);
            if (!i) return !1;
            let a = i.pop(e, n, t);
            return !!a && (r(a), !0)
        }
    }
    const as = is(0, !1),
        os = is(1, !1),
        ss = is(0, !0),
        Os = is(1, !0);
    class ls {
        constructor(e, t, n, r, i) {
            this.changes = e, this.effects = t, this.mapped = n, this.startSelection = r, this.selectionsAfter = i
        }
        setSelAfter(e) {
            return new ls(this.changes, this.effects, this.mapped, this.startSelection, e)
        }
        toJSON() {
            var e, t, n;
            return {
                changes: null === (e = this.changes) || void 0 === e ? void 0 : e.toJSON(),
                mapped: null === (t = this.mapped) || void 0 === t ? void 0 : t.toJSON(),
                startSelection: null === (n = this.startSelection) || void 0 === n ? void 0 : n.toJSON(),
                selectionsAfter: this.selectionsAfter.map((e => e.toJSON()))
            }
        }
        static fromJSON(e) {
            return new ls(e.changes && k.fromJSON(e.changes), [], e.mapped && w.fromJSON(e.mapped), e.startSelection && W.fromJSON(e.startSelection), e.selectionsAfter.map(W.fromJSON))
        }
        static fromTransaction(e) {
            let t = ds;
            for (let n of e.startState.facet(es)) {
                let r = n(e);
                r.length && (t = t.concat(r))
            }
            return !t.length && e.changes.empty ? null : new ls(e.changes.invert(e.startState.doc), t, void 0, e.startState.selection, ds)
        }
        static selection(e) {
            return new ls(void 0, ds, void 0, void 0, e)
        }
    }

    function cs(e, t, n, r) {
        let i = t + 1 > n + 20 ? t - n - 1 : 0,
            a = e.slice(i, t);
        return a.push(r), a
    }

    function us(e, t) {
        return e.length ? t.length ? e.concat(t) : e : t
    }
    const ds = [];

    function ps(e, t) {
        if (e.length) {
            let n = e[e.length - 1],
                r = n.selectionsAfter.slice(Math.max(0, n.selectionsAfter.length - 200));
            return r.length && r[r.length - 1].eq(t) ? e : (r.push(t), cs(e, e.length - 1, 1e9, n.setSelAfter(r)))
        }
        return [ls.selection([t])]
    }

    function hs(e) {
        let t = e[e.length - 1],
            n = e.slice();
        return n[e.length - 1] = t.setSelAfter(t.selectionsAfter.slice(0, t.selectionsAfter.length - 1)), n
    }

    function fs(e, t) {
        if (!e.length) return e;
        let n = e.length,
            r = ds;
        for (; n;) {
            let i = ms(e[n - 1], t, r);
            if (i.changes && !i.changes.empty || i.effects.length) {
                let t = e.slice(0, n);
                return t[n - 1] = i, t
            }
            t = i.mapped, n--, r = i.selectionsAfter
        }
        return r.length ? [ls.selection(r)] : ds
    }

    function ms(e, t, n) {
        let r = us(e.selectionsAfter.length ? e.selectionsAfter.map((e => e.map(t))) : ds, n);
        if (!e.changes) return ls.selection(r);
        let i = e.changes.map(t),
            a = t.mapDesc(e.changes, !0),
            o = e.mapped ? e.mapped.composeDesc(a) : a;
        return new ls(i, le.mapEffects(e.effects, t), o, e.startSelection.map(a), r)
    }
    class gs {
        constructor(e, t, n = 0, r) {
            this.done = e, this.undone = t, this.prevTime = n, this.prevUserEvent = r
        }
        isolate() {
            return this.prevTime ? new gs(this.done, this.undone) : this
        }
        addChanges(e, t, n, r, i) {
            let a = this.done,
                o = a[a.length - 1];
            return a = o && o.changes && t - this.prevTime < r && !o.selectionsAfter.length && !o.changes.empty && e.changes && function(e, t) {
                let n = [],
                    r = !1;
                return e.iterChangedRanges(((e, t) => n.push(e, t))), t.iterChangedRanges(((e, t, i, a) => {
                    for (let e = 0; e < n.length;) {
                        let t = n[e++],
                            o = n[e++];
                        a >= t && i <= o && (r = !0)
                    }
                })), r
            }(o.changes, e.changes) ? cs(a, a.length - 1, i, new ls(e.changes.compose(o.changes), us(e.effects, o.effects), o.mapped, o.startSelection, ds)) : cs(a, a.length, i, e), new gs(a, ds, t, n)
        }
        addSelection(e, t, n, r) {
            let i = this.done.length ? this.done[this.done.length - 1].selectionsAfter : ds;
            return i.length > 0 && t - this.prevTime < r && "keyboardselection" == n && this.prevUserEvent == n && function(e, t) {
                return e.ranges.length == t.ranges.length && 0 === e.ranges.filter(((e, n) => e.empty != t.ranges[n].empty)).length
            }(i[i.length - 1], e) ? this : new gs(ps(this.done, e), this.undone, t, n)
        }
        addMapping(e) {
            return new gs(fs(this.done, e), fs(this.undone, e), this.prevTime, this.prevUserEvent)
        }
        pop(e, t, n) {
            let r = 0 == e ? this.done : this.undone;
            if (0 == r.length) return null;
            let i = r[r.length - 1];
            if (n && i.selectionsAfter.length) return t.update({
                selection: i.selectionsAfter[i.selectionsAfter.length - 1],
                annotations: Jo.of({
                    side: e,
                    rest: hs(r)
                })
            });
            if (i.changes) {
                let n = 1 == r.length ? ds : r.slice(0, r.length - 1);
                return i.mapped && (n = fs(n, i.mapped)), t.update({
                    changes: i.changes,
                    selection: i.startSelection,
                    effects: i.effects,
                    annotations: Jo.of({
                        side: e,
                        rest: n
                    }),
                    filter: !1
                })
            }
            return null
        }
    }
    gs.empty = new gs(ds, ds);
    const Qs = [{
        key: "Mod-z",
        run: as,
        preventDefault: !0
    }, {
        key: "Mod-y",
        mac: "Mod-Shift-z",
        run: os,
        preventDefault: !0
    }, {
        key: "Mod-u",
        run: ss,
        preventDefault: !0
    }, {
        key: "Alt-u",
        mac: "Mod-Shift-u",
        run: Os,
        preventDefault: !0
    }];
    let $s = 0;
    class bs {
        constructor(e, t, n) {
            this.set = e, this.base = t, this.modified = n, this.id = $s++
        }
        static define(e) {
            if (null == e ? void 0 : e.base) throw new Error("Can not derive from a modified tag");
            let t = new bs([], null, []);
            if (t.set.push(t), e)
                for (let n of e.set) t.set.push(n);
            return t
        }
        static defineModifier() {
            let e = new Ps;
            return t => t.modified.indexOf(e) > -1 ? t : Ps.get(t.base || t, t.modified.concat(e).sort(((e, t) => e.id - t.id)))
        }
    }
    let xs = 0;
    class Ps {
        constructor() {
            this.instances = [], this.id = xs++
        }
        static get(e, t) {
            if (!t.length) return e;
            let n = t[0].instances.find((n => n.base == e && function(e, t) {
                return e.length == t.length && e.every(((e, n) => e == t[n]))
            }(t, n.modified)));
            if (n) return n;
            let r = [],
                i = new bs(r, e, t);
            for (let e of t) e.instances.push(i);
            let a = ws(t);
            for (let t of e.set)
                for (let e of a) r.push(Ps.get(t, e));
            return i
        }
    }

    function ws(e) {
        let t = [e];
        for (let n = 0; n < e.length; n++)
            for (let r of ws(e.slice(0, n).concat(e.slice(n + 1)))) t.push(r);
        return t
    }

    function ks(e) {
        let t = Object.create(null);
        for (let n in e) {
            let r = e[n];
            Array.isArray(r) || (r = [r]);
            for (let e of n.split(" "))
                if (e) {
                    let n = [],
                        i = 2,
                        a = e;
                    for (let t = 0;;) {
                        if ("..." == a && t > 0 && t + 3 == e.length) {
                            i = 1;
                            break
                        }
                        let r = /^"(?:[^"\\]|\\.)*?"|[^\/!]+/.exec(a);
                        if (!r) throw new RangeError("Invalid path: " + e);
                        if (n.push("*" == r[0] ? null : '"' == r[0][0] ? JSON.parse(r[0]) : r[0]), t += r[0].length, t == e.length) break;
                        let o = e[t++];
                        if (t == e.length && "!" == o) {
                            i = 0;
                            break
                        }
                        if ("/" != o) throw new RangeError("Invalid path: " + e);
                        a = e.slice(t)
                    }
                    let o = n.length - 1,
                        s = n[o];
                    if (!s) throw new RangeError("Invalid path: " + e);
                    let O = new Xs(r, i, o > 0 ? n.slice(0, o) : null);
                    t[s] = O.sort(t[s])
                }
        }
        return ys.add(t)
    }
    const ys = new Ti,
        vs = Z.define({
            combine: e => e.length ? Ts.combinedMatch(e) : null
        }),
        Ss = Z.define({
            combine: e => e.length ? e[0].match : null
        });

    function _s(e) {
        return e.facet(vs) || e.facet(Ss)
    }
    class Xs {
        constructor(e, t, n, r) {
            this.tags = e, this.mode = t, this.context = n, this.next = r
        }
        sort(e) {
            return !e || e.depth < this.depth ? (this.next = e, this) : (e.next = this.sort(e.next), e)
        }
        get depth() {
            return this.context ? this.context.length : 0
        }
    }
    class Ts {
        constructor(e, t) {
            let n;

            function r(e) {
                let t = ve.newName();
                return (n || (n = Object.create(null)))["." + t] = e, t
            }
            this.map = Object.create(null), this.all = "string" == typeof t.all ? t.all : t.all ? r(t.all) : null;
            for (let t of e) {
                let e = (t.class || r(Object.assign({}, t, {
                        tag: null
                    }))) + (this.all ? " " + this.all : ""),
                    n = t.tag;
                if (Array.isArray(n))
                    for (let t of n) this.map[t.id] = e;
                else this.map[n.id] = e
            }
            this.module = n ? new ve(n) : null, this.scope = t.scope || null, this.match = this.match.bind(this);
            let i = [Ws];
            this.module && i.push(di.styleModule.of(this.module)), this.extension = i.concat(vs.of(this)), this.fallback = i.concat(Ss.of(this))
        }
        match(e, t) {
            if (this.scope && t != this.scope) return null;
            for (let t of e.set) {
                let n = this.map[t.id];
                if (void 0 !== n) return t != e && (this.map[e.id] = n), n
            }
            return this.map[e.id] = this.all
        }
        static combinedMatch(e) {
            if (1 == e.length) return e[0].match;
            let t = e.some((e => e.scope)) ? void 0 : Object.create(null);
            return (n, r) => {
                let i = t && t[n.id];
                if (void 0 !== i) return i;
                let a = null;
                for (let t of e) {
                    let e = t.match(n, r);
                    e && (a = a ? a + " " + e : e)
                }
                return t && (t[n.id] = a), a
            }
        }
        static define(e, t) {
            return new Ts(e, t || {})
        }
        static get(e, t, n) {
            let r = _s(e);
            return r && r(t, n || Wi.none)
        }
    }
    class Rs {
        constructor(e) {
            this.markCache = Object.create(null), this.tree = ta(e.state), this.decorations = this.buildDeco(e, _s(e.state))
        }
        update(e) {
            let t = ta(e.state),
                n = _s(e.state),
                r = n != e.startState.facet(vs);
            t.length < e.view.viewport.to && !r ? this.decorations = this.decorations.map(e.changes) : (t != this.tree || e.viewportChanged || r) && (this.tree = t, this.decorations = this.buildDeco(e.view, n))
        }
        buildDeco(e, t) {
            if (!t || !this.tree.length) return Ht.none;
            let n = new Ye;
            for (let {
                    from: r,
                    to: i
                } of e.visibleRanges) Ys(this.tree, r, i, t, ((e, t, r) => {
                n.add(e, t, this.markCache[r] || (this.markCache[r] = Ht.mark({
                    class: r
                })))
            }));
            return n.finish()
        }
    }
    const Ws = D.fallback(Pn.fromClass(Rs, {
            decorations: e => e.decorations
        })),
        qs = [""];

    function Ys(e, t, n, r, i) {
        let a = t,
            o = "",
            s = e.topNode.cursor;

        function O(e, t) {
            o && i(a, e, o), a = e, o = t
        }! function e(i, a, l) {
            let {
                type: c,
                from: u,
                to: d
            } = s;
            if (u >= n || d <= t) return;
            qs[a] = c.name, c.isTop && (l = c);
            let p = i,
                h = c.prop(ys),
                f = !1;
            for (; h;) {
                if (!h.context || zs(h.context, qs, a)) {
                    for (let e of h.tags) {
                        let t = r(e, l);
                        t && (p && (p += " "), p += t, 1 == h.mode ? i += (i ? " " : "") + t : 0 == h.mode && (f = !0))
                    }
                    break
                }
                h = h.next
            }
            let m = u;
            if (!f && s.firstChild()) {
                do {
                    s.from > m && o != p && O(m, p), m = s.to, e(i, a + 1, l)
                } while (s.nextSibling());
                s.parent()
            }
            d > m && o != p && O(m, p)
        }("", 0, e.type), O(n, "")
    }

    function zs(e, t, n) {
        if (e.length > n - 1) return !1;
        for (let r = n - 1, i = e.length - 1; i >= 0; i--, r--) {
            let n = e[i];
            if (n && n != t[r]) return !1
        }
        return !0
    }
    const Zs = bs.define,
        Es = Zs(),
        Is = Zs(),
        Us = Zs(Is),
        Vs = Zs(),
        js = Zs(Vs),
        As = Zs(Vs),
        Cs = Zs(),
        Gs = Zs(Cs),
        Ls = Zs(),
        Ns = Zs(),
        Ds = Zs(),
        Ms = Zs(Ds),
        Bs = Zs(),
        Fs = {
            comment: Es,
            lineComment: Zs(Es),
            blockComment: Zs(Es),
            docComment: Zs(Es),
            name: Is,
            variableName: Zs(Is),
            typeName: Us,
            tagName: Zs(Us),
            propertyName: Zs(Is),
            className: Zs(Is),
            labelName: Zs(Is),
            namespace: Zs(Is),
            macroName: Zs(Is),
            literal: Vs,
            string: js,
            docString: Zs(js),
            character: Zs(js),
            number: As,
            integer: Zs(As),
            float: Zs(As),
            bool: Zs(Vs),
            regexp: Zs(Vs),
            escape: Zs(Vs),
            color: Zs(Vs),
            url: Zs(Vs),
            keyword: Ls,
            self: Zs(Ls),
            null: Zs(Ls),
            atom: Zs(Ls),
            unit: Zs(Ls),
            modifier: Zs(Ls),
            operatorKeyword: Zs(Ls),
            controlKeyword: Zs(Ls),
            definitionKeyword: Zs(Ls),
            operator: Ns,
            derefOperator: Zs(Ns),
            arithmeticOperator: Zs(Ns),
            logicOperator: Zs(Ns),
            bitwiseOperator: Zs(Ns),
            compareOperator: Zs(Ns),
            updateOperator: Zs(Ns),
            definitionOperator: Zs(Ns),
            typeOperator: Zs(Ns),
            controlOperator: Zs(Ns),
            punctuation: Ds,
            separator: Zs(Ds),
            bracket: Ms,
            angleBracket: Zs(Ms),
            squareBracket: Zs(Ms),
            paren: Zs(Ms),
            brace: Zs(Ms),
            content: Cs,
            heading: Gs,
            heading1: Zs(Gs),
            heading2: Zs(Gs),
            heading3: Zs(Gs),
            heading4: Zs(Gs),
            heading5: Zs(Gs),
            heading6: Zs(Gs),
            contentSeparator: Zs(Cs),
            list: Zs(Cs),
            quote: Zs(Cs),
            emphasis: Zs(Cs),
            strong: Zs(Cs),
            link: Zs(Cs),
            monospace: Zs(Cs),
            strikethrough: Zs(Cs),
            inserted: Zs(),
            deleted: Zs(),
            changed: Zs(),
            invalid: Zs(),
            meta: Bs,
            documentMeta: Zs(Bs),
            annotation: Zs(Bs),
            processingInstruction: Zs(Bs),
            definition: bs.defineModifier(),
            constant: bs.defineModifier(),
            function: bs.defineModifier(),
            standard: bs.defineModifier(),
            local: bs.defineModifier(),
            special: bs.defineModifier()
        };
    class Hs {
        constructor(e, t, n, r, i, a, o) {
            this.type = e, this.value = t, this.from = n, this.hash = r, this.end = i, this.children = a, this.positions = o
        }
        static create(e, t, n, r, i) {
            return new Hs(e, t, n, r + (r << 8) + e + (t << 4) | 0, i, [], [])
        }
        toTree(e, t = this.end) {
            let n = this.children.length - 1;
            n >= 0 && (t = Math.max(t, this.positions[n] + this.children[n].length + this.from));
            let r = new Yi(e.types[this.type], this.children, this.positions, t - this.from).balance(2048);
            return el(r.children, this.hash), r
        }
        copy() {
            return new Hs(this.type, this.value, this.from, this.hash, this.end, this.children.slice(), this.positions.slice())
        }
    }
    var Js;
    ! function(e) {
        e[e.Document = 1] = "Document", e[e.CodeBlock = 2] = "CodeBlock", e[e.FencedCode = 3] = "FencedCode", e[e.Blockquote = 4] = "Blockquote", e[e.HorizontalRule = 5] = "HorizontalRule", e[e.BulletList = 6] = "BulletList", e[e.OrderedList = 7] = "OrderedList", e[e.ListItem = 8] = "ListItem", e[e.ATXHeading1 = 9] = "ATXHeading1", e[e.ATXHeading2 = 10] = "ATXHeading2", e[e.ATXHeading3 = 11] = "ATXHeading3", e[e.ATXHeading4 = 12] = "ATXHeading4", e[e.ATXHeading5 = 13] = "ATXHeading5", e[e.ATXHeading6 = 14] = "ATXHeading6", e[e.SetextHeading1 = 15] = "SetextHeading1", e[e.SetextHeading2 = 16] = "SetextHeading2", e[e.HTMLBlock = 17] = "HTMLBlock", e[e.LinkReference = 18] = "LinkReference", e[e.Paragraph = 19] = "Paragraph", e[e.CommentBlock = 20] = "CommentBlock", e[e.ProcessingInstructionBlock = 21] = "ProcessingInstructionBlock", e[e.Escape = 22] = "Escape", e[e.Entity = 23] = "Entity", e[e.HardBreak = 24] = "HardBreak", e[e.Emphasis = 25] = "Emphasis", e[e.StrongEmphasis = 26] = "StrongEmphasis", e[e.Link = 27] = "Link", e[e.Image = 28] = "Image", e[e.InlineCode = 29] = "InlineCode", e[e.HTMLTag = 30] = "HTMLTag", e[e.Comment = 31] = "Comment", e[e.ProcessingInstruction = 32] = "ProcessingInstruction", e[e.URL = 33] = "URL", e[e.HeaderMark = 34] = "HeaderMark", e[e.QuoteMark = 35] = "QuoteMark", e[e.ListMark = 36] = "ListMark", e[e.LinkMark = 37] = "LinkMark", e[e.EmphasisMark = 38] = "EmphasisMark", e[e.CodeMark = 39] = "CodeMark", e[e.CodeInfo = 40] = "CodeInfo", e[e.LinkTitle = 41] = "LinkTitle", e[e.LinkLabel = 42] = "LinkLabel"
    }(Js || (Js = {}));
    class Ks {
        constructor(e, t) {
            this.start = e, this.content = t, this.marks = [], this.parsers = []
        }
    }
    class eO {
        constructor() {
            this.text = "", this.baseIndent = 0, this.basePos = 0, this.depth = 0, this.markers = [], this.pos = 0, this.indent = 0, this.next = -1
        }
        forward() {
            this.basePos > this.pos && this.forwardInner()
        }
        forwardInner() {
            let e = this.skipSpace(this.basePos);
            this.indent = this.countIndent(e, this.pos, this.indent), this.pos = e, this.next = e == this.text.length ? -1 : this.text.charCodeAt(e)
        }
        skipSpace(e) {
            return iO(this.text, e)
        }
        reset(e) {
            for (this.text = e, this.baseIndent = this.basePos = this.pos = this.indent = 0, this.forwardInner(), this.depth = 1; this.markers.length;) this.markers.pop()
        }
        moveBase(e) {
            this.basePos = e, this.baseIndent = this.countIndent(e, this.pos, this.indent)
        }
        moveBaseColumn(e) {
            this.baseIndent = e, this.basePos = this.findColumn(e)
        }
        addMarker(e) {
            this.markers.push(e)
        }
        countIndent(e, t = 0, n = 0) {
            for (let r = t; r < e; r++) n += 9 == this.text.charCodeAt(r) ? 4 - n % 4 : 1;
            return n
        }
        findColumn(e) {
            let t = 0;
            for (let n = 0; t < this.text.length && n < e; t++) n += 9 == this.text.charCodeAt(t) ? 4 - n % 4 : 1;
            return t
        }
        scrub() {
            if (!this.baseIndent) return this.text;
            let e = "";
            for (let t = 0; t < this.basePos; t++) e += " ";
            return e + this.text.slice(this.basePos)
        }
    }

    function tO(e, t, n) {
        if (n.pos == n.text.length || e != t.block && n.indent >= t.stack[n.depth + 1].value + n.baseIndent) return !0;
        if (n.indent >= n.baseIndent + 4) return !1;
        let r = (e.type == Js.OrderedList ? uO : cO)(n, t, !1);
        return r > 0 && (e.type != Js.BulletList || OO(n, t, !1) < 0) && n.text.charCodeAt(n.pos + r - 1) == e.value
    }
    const nO = {
        [Js.Blockquote]: (e, t, n) => 62 == n.next && (n.markers.push(IO(Js.QuoteMark, t.lineStart + n.pos, t.lineStart + n.pos + 1)), n.moveBase(n.pos + 1), e.end = t.lineStart + n.text.length, !0),
        [Js.ListItem]: (e, t, n) => !(n.indent < n.baseIndent + e.value && n.next > -1) && (n.moveBaseColumn(n.baseIndent + e.value), !0),
        [Js.OrderedList]: tO,
        [Js.BulletList]: tO,
        [Js.Document]: () => !0
    };

    function rO(e) {
        return 32 == e || 9 == e || 10 == e || 13 == e
    }

    function iO(e, t = 0) {
        for (; t < e.length && rO(e.charCodeAt(t));) t++;
        return t
    }

    function aO(e, t, n) {
        for (; t > n && rO(e.charCodeAt(t - 1));) t--;
        return t
    }

    function oO(e) {
        if (96 != e.next && 126 != e.next) return -1;
        let t = e.pos + 1;
        for (; t < e.text.length && e.text.charCodeAt(t) == e.next;) t++;
        if (t < e.pos + 3) return -1;
        if (96 == e.next)
            for (let n = t; n < e.text.length; n++)
                if (96 == e.text.charCodeAt(n)) return -1;
        return t
    }

    function sO(e) {
        return 62 != e.next ? -1 : 32 == e.text.charCodeAt(e.pos + 1) ? 2 : 1
    }

    function OO(e, t, n) {
        if (42 != e.next && 45 != e.next && 95 != e.next) return -1;
        let r = 1;
        for (let t = e.pos + 1; t < e.text.length; t++) {
            let n = e.text.charCodeAt(t);
            if (n == e.next) r++;
            else if (!rO(n)) return -1
        }
        return n && 45 == e.next && pO(e) > -1 && e.depth == t.stack.length || r < 3 ? -1 : 1
    }

    function lO(e, t) {
        return e.block.type == t || e.stack.length > 1 && e.stack[e.stack.length - 2].type == t
    }

    function cO(e, t, n) {
        return 45 != e.next && 43 != e.next && 42 != e.next || e.pos != e.text.length - 1 && !rO(e.text.charCodeAt(e.pos + 1)) || !(!n || lO(t, Js.BulletList) || e.skipSpace(e.pos + 2) < e.text.length) ? -1 : 1
    }

    function uO(e, t, n) {
        let r = e.pos,
            i = e.next;
        for (; i >= 48 && i <= 57;) {
            if (r++, r == e.text.length) return -1;
            i = e.text.charCodeAt(r)
        }
        return r == e.pos || r > e.pos + 9 || 46 != i && 41 != i || r < e.text.length - 1 && !rO(e.text.charCodeAt(r + 1)) || n && !lO(t, Js.OrderedList) && (e.skipSpace(r + 1) == e.text.length || r > e.pos + 1 || 49 != e.next) ? -1 : r + 1 - e.pos
    }

    function dO(e) {
        if (35 != e.next) return -1;
        let t = e.pos + 1;
        for (; t < e.text.length && 35 == e.text.charCodeAt(t);) t++;
        if (t < e.text.length && 32 != e.text.charCodeAt(t)) return -1;
        let n = t - e.pos;
        return n > 6 ? -1 : n
    }

    function pO(e) {
        if (45 != e.next && 61 != e.next || e.indent >= e.baseIndent + 4) return -1;
        let t = e.pos + 1;
        for (; t < e.text.length && e.text.charCodeAt(t) == e.next;) t++;
        let n = t;
        for (; t < e.text.length && rO(e.text.charCodeAt(t));) t++;
        return t == e.text.length ? n : -1
    }
    const hO = /^[ \t]*$/,
        fO = /-->/,
        mO = /\?>/,
        gO = [
            [/^<(?:script|pre|style)(?:\s|>|$)/i, /<\/(?:script|pre|style)>/i],
            [/^\s*<!--/, fO],
            [/^\s*<\?/, mO],
            [/^\s*<![A-Z]/, />/],
            [/^\s*<!\[CDATA\[/, /\]\]>/],
            [/^\s*<\/?(?:address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h1|h2|h3|h4|h5|h6|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul)(?:\s|\/?>|$)/i, hO],
            [/^\s*(?:<\/[a-z][\w-]*\s*>|<[a-z][\w-]*(\s+[a-z:_][\w-.]*(?:\s*=\s*(?:[^\s"'=<>`]+|'[^']*'|"[^"]*"))?)*\s*>)\s*$/i, hO]
        ];

    function QO(e, t, n) {
        if (60 != e.next) return -1;
        let r = e.text.slice(e.pos);
        for (let e = 0, t = gO.length - (n ? 1 : 0); e < t; e++)
            if (gO[e][0].test(r)) return e;
        return -1
    }

    function $O(e, t) {
        let n = e.countIndent(t, e.pos, e.indent),
            r = e.countIndent(e.skipSpace(t), t, n);
        return r >= n + 5 ? n + 1 : r
    }
    const bO = {
        LinkReference: void 0,
        IndentedCode(e, t) {
            let n = t.baseIndent + 4;
            if (t.indent < n) return !1;
            let r = t.findColumn(n),
                i = e.lineStart + r,
                a = e.lineStart + t.text.length,
                o = [],
                s = [];
            for (; e.nextLine() && !(t.depth < e.stack.length);)
                if (t.pos == t.text.length)
                    for (let e of t.markers) s.push(e);
                else {
                    if (t.indent < n) break;
                    if (s.length) {
                        for (let e of s) o.push(e);
                        s = []
                    }
                    for (let e of t.markers) o.push(e);
                    a = e.lineStart + t.text.length
                }
            s.length && (t.markers = s.concat(t.markers));
            let O = !o.length && e.parser.codeParser && e.parser.codeParser("");
            return O ? e.startNested(i, O.startParse(e.input.clip(a), i, e.parseContext), (t => new Yi(e.parser.nodeSet.types[Js.CodeBlock], [t], [0], a - i))) : e.addNode(e.buffer.writeElements(o, -i).finish(Js.CodeBlock, a - i), i), !0
        },
        FencedCode(e, t) {
            let n = oO(t);
            if (n < 0) return !1;
            let r = e.lineStart + t.pos,
                i = t.next,
                a = n - t.pos,
                o = t.skipSpace(n),
                s = aO(t.text, t.text.length, o),
                O = [IO(Js.CodeMark, r, r + a)],
                l = "";
            o < s && (O.push(IO(Js.CodeInfo, e.lineStart + o, e.lineStart + s)), l = t.text.slice(o, s));
            let c = O.length,
                u = c,
                d = e.lineStart + t.text.length + 1,
                p = -1;
            for (; e.nextLine() && !(t.depth < e.stack.length);) {
                for (let e of t.markers) O.push(e);
                let n = t.pos;
                if (t.indent - t.baseIndent < 4)
                    for (; n < t.text.length && t.text.charCodeAt(n) == i;) n++;
                if (n - t.pos >= a && t.skipSpace(n) == t.text.length) {
                    O.push(IO(Js.CodeMark, e.lineStart + t.pos, e.lineStart + n)), c++, p = e.lineStart - 1, e.nextLine();
                    break
                }
            }
            let h = e.prevLineEnd();
            p < 0 && (p = h);
            let f = O.length == c && e.parser.codeParser && e.parser.codeParser(l);
            return f && d < p ? e.startNested(r, f.startParse(e.input.clip(p), d, e.parseContext), (e => (O.splice(u, 0, new EO(e, d)), IO(Js.FencedCode, r, h, O)))) : e.addNode(e.buffer.writeElements(O, -r).finish(Js.FencedCode, e.prevLineEnd() - r), r), !0
        },
        Blockquote(e, t) {
            let n = sO(t);
            return !(n < 0) && (e.startContext(Js.Blockquote, t.pos), e.addNode(Js.QuoteMark, e.lineStart + t.pos, e.lineStart + t.pos + 1), t.moveBase(t.pos + n), null)
        },
        HorizontalRule(e, t) {
            if (OO(t, e, !1) < 0) return !1;
            let n = e.lineStart + t.pos;
            return e.nextLine(), e.addNode(Js.HorizontalRule, n), !0
        },
        BulletList(e, t) {
            let n = cO(t, e, !1);
            if (n < 0) return !1;
            e.block.type != Js.BulletList && e.startContext(Js.BulletList, t.basePos, t.next);
            let r = $O(t, t.pos + 1);
            return e.startContext(Js.ListItem, t.basePos, r - t.baseIndent), e.addNode(Js.ListMark, e.lineStart + t.pos, e.lineStart + t.pos + n), t.moveBaseColumn(r), null
        },
        OrderedList(e, t) {
            let n = uO(t, e, !1);
            if (n < 0) return !1;
            e.block.type != Js.OrderedList && e.startContext(Js.OrderedList, t.basePos, t.text.charCodeAt(t.pos + n - 1));
            let r = $O(t, t.pos + n);
            return e.startContext(Js.ListItem, t.basePos, r - t.baseIndent), e.addNode(Js.ListMark, e.lineStart + t.pos, e.lineStart + t.pos + n), t.moveBaseColumn(r), null
        },
        ATXHeading(e, t) {
            let n = dO(t);
            if (n < 0) return !1;
            let r = t.pos,
                i = e.lineStart + r,
                a = aO(t.text, t.text.length, r),
                o = a;
            for (; o > r && t.text.charCodeAt(o - 1) == t.next;) o--;
            o != a && o != r && rO(t.text.charCodeAt(o - 1)) || (o = t.text.length);
            let s = e.buffer.write(Js.HeaderMark, 0, n).writeElements(e.parser.parseInline(t.text.slice(r + n + 1, o), i + n + 1), -i);
            o < t.text.length && s.write(Js.HeaderMark, o - r, a - r);
            let O = s.finish(Js.ATXHeading1 - 1 + n, t.text.length - r);
            return e.nextLine(), e.addNode(O, i), !0
        },
        HTMLBlock(e, t) {
            let n = QO(t, 0, !1);
            if (n < 0) return !1;
            let r = e.lineStart + t.pos,
                i = gO[n][1],
                a = [],
                o = i != hO;
            for (; !i.test(t.text) && e.nextLine();) {
                if (t.depth < e.stack.length) {
                    o = !1;
                    break
                }
                for (let e of t.markers) a.push(e)
            }
            o && e.nextLine();
            let s = i == fO ? Js.CommentBlock : i == mO ? Js.ProcessingInstructionBlock : Js.HTMLBlock,
                O = e.prevLineEnd();
            return !a.length && s == Js.HTMLBlock && e.parser.htmlParser ? e.startNested(r, e.parser.htmlParser.startParse(e.input.clip(O), r, e.parseContext), (t => new Yi(e.parser.nodeSet.types[s], [t], [0], O - r))) : e.addNode(e.buffer.writeElements(a, -r).finish(s, O - r), r), !0
        },
        SetextHeading: void 0
    };
    class xO {
        constructor(e) {
            this.stage = 0, this.elts = [], this.pos = 0, this.start = e.start, this.advance(e.content)
        }
        nextLine(e, t, n) {
            if (-1 == this.stage) return !1;
            let r = n.content + "\n" + t.scrub(),
                i = this.advance(r);
            return i > -1 && i < r.length && this.complete(e, n, i)
        }
        finish(e, t) {
            return (2 == this.stage || 3 == this.stage) && iO(t.content, this.pos) == t.content.length && this.complete(e, t, t.content.length)
        }
        complete(e, t, n) {
            return e.addLeafElement(t, IO(Js.LinkReference, this.start, this.start + n, this.elts)), !0
        }
        nextStage(e) {
            return e ? (this.pos = e.to - this.start, this.elts.push(e), this.stage++, !0) : (!1 === e && (this.stage = -1), !1)
        }
        advance(e) {
            for (;;) {
                if (-1 == this.stage) return -1;
                if (0 == this.stage) {
                    if (!this.nextStage(FO(e, this.pos, this.start, !0))) return -1;
                    if (58 != e.charCodeAt(this.pos)) return this.stage = -1;
                    this.elts.push(IO(Js.LinkMark, this.pos + this.start, this.pos + this.start + 1)), this.pos++
                } else {
                    if (1 != this.stage) {
                        if (2 == this.stage) {
                            let t = iO(e, this.pos),
                                n = 0;
                            if (t > this.pos) {
                                let r = BO(e, t, this.start);
                                if (r) {
                                    let t = PO(e, r.to - this.start);
                                    t > 0 && (this.nextStage(r), n = t)
                                }
                            }
                            return n || (n = PO(e, this.pos)), n > 0 && n < e.length ? n : -1
                        }
                        return PO(e, this.pos)
                    }
                    if (!this.nextStage(MO(e, iO(e, this.pos), this.start))) return -1
                }
            }
        }
    }

    function PO(e, t) {
        for (; t < e.length; t++) {
            let n = e.charCodeAt(t);
            if (10 == n) break;
            if (!rO(n)) return -1
        }
        return t
    }
    class wO {
        nextLine(e, t, n) {
            let r = t.depth < e.stack.length ? -1 : pO(t),
                i = t.next;
            if (r < 0) return !1;
            let a = IO(Js.HeaderMark, e.lineStart + t.pos, e.lineStart + r);
            return e.nextLine(), e.addLeafElement(n, IO(61 == i ? Js.SetextHeading1 : Js.SetextHeading2, n.start, e.prevLineEnd(), [...e.parser.parseInline(n.content, n.start), a])), !0
        }
        finish() {
            return !1
        }
    }
    const kO = {
            LinkReference: (e, t) => 91 == t.content.charCodeAt(0) ? new xO(t) : null,
            SetextHeading: () => new wO
        },
        yO = [(e, t) => dO(t) >= 0, (e, t) => oO(t) >= 0, (e, t) => sO(t) >= 0, (e, t) => cO(t, e, !0) >= 0, (e, t) => uO(t, e, !0) >= 0, (e, t) => OO(t, e, !0) >= 0, (e, t) => QO(t, 0, !0) >= 0];
    class vO {
        constructor(e, t, n) {
            this.from = e, this.parse = t, this.finish = n
        }
    }
    class SO {
        constructor(e, t, n, r) {
            this.parser = e, this.input = t, this.parseContext = r, this.line = new eO, this.atEnd = !1, this.nested = null, this.lineStart = n, this.block = Hs.create(Js.Document, 0, this.lineStart, 0, 0), this.stack = [this.block], this.fragments = (null == r ? void 0 : r.fragments) ? new nl(r.fragments, t) : null, this.updateLine(t.lineAfter(this.lineStart))
        }
        get pos() {
            return this.nested ? this.nested.parse.pos : this.lineStart
        }
        advance() {
            if (this.nested) {
                let e = this.nested.parse.advance();
                if (e) {
                    let t = this.nested.finish(e);
                    t instanceof ZO && (t = t.toTree(this.parser.nodeSet)), this.addNode(t, this.nested.from), this.nested = null
                }
                return null
            }
            let {
                line: e
            } = this;
            for (;;) {
                for (; e.depth < this.stack.length;) this.finishContext();
                for (let t of e.markers) this.addNode(t.type, t.from, t.to);
                if (e.pos < e.text.length) break;
                if (!this.nextLine()) return this.finish()
            }
            if (this.fragments && this.reuseFragment(e.basePos)) return null;
            e: for (;;) {
                for (let t of this.parser.blockParsers)
                    if (t) {
                        let n = t(this, e);
                        if (0 != n) {
                            if (1 == n) return null;
                            e.forward();
                            continue e
                        }
                    }
                break
            }
            let t = new Ks(this.lineStart + e.pos, e.text.slice(e.pos));
            for (let e of this.parser.leafBlockParsers)
                if (e) {
                    let n = e(this, t);
                    n && t.parsers.push(n)
                }
            e: for (; this.nextLine() && e.pos != e.text.length;) {
                if (e.indent < e.baseIndent + 4)
                    for (let t of rl.endLeafBlock)
                        if (t(this, e)) break e;
                for (let n of t.parsers)
                    if (n.nextLine(this, e, t)) return null;
                t.content += "\n" + e.scrub();
                for (let n of e.markers) t.marks.push(n)
            }
            return this.finishLeaf(t), null
        }
        reuseFragment(e) {
            if (!this.fragments.moveTo(this.lineStart + e, this.lineStart) || !this.fragments.matches(this.block.hash)) return !1;
            let t = this.fragments.takeNodes(this);
            return !!t && (this.lineStart += t, this.lineStart < this.input.length ? (this.lineStart++, this.updateLine(this.input.lineAfter(this.lineStart))) : (this.atEnd = !0, this.updateLine("")), !0)
        }
        nextLine() {
            return this.lineStart += this.line.text.length, this.lineStart >= this.input.length ? (this.atEnd = !0, this.updateLine(""), !1) : (this.lineStart++, this.updateLine(this.input.lineAfter(this.lineStart)), !0)
        }
        updateLine(e) {
            let {
                line: t
            } = this;
            for (t.reset(e); t.depth < this.stack.length; t.depth++) {
                let e = this.stack[t.depth],
                    n = this.parser.skipContextMarkup[e.type];
                if (!n) throw new Error("Unhandled block context " + Js[e.type]);
                if (!n(e, this, t)) break;
                t.forward()
            }
        }
        prevLineEnd() {
            return this.atEnd ? this.lineStart : this.lineStart - 1
        }
        startContext(e, t, n = 0) {
            this.block = Hs.create(e, n, this.lineStart + t, this.block.hash, this.lineStart + this.line.text.length), this.stack.push(this.block)
        }
        startComposite(e, t, n = 0) {
            this.startContext(this.parser.getNodeType(e), t, n)
        }
        addNode(e, t, n) {
            "number" == typeof e && (e = new Yi(this.parser.nodeSet.types[e], YO, YO, (null != n ? n : this.prevLineEnd()) - t)), this.block.children.push(e), this.block.positions.push(t - this.block.from)
        }
        addElement(e) {
            this.block.children.push(e.toTree(this.parser.nodeSet)), this.block.positions.push(e.from - this.block.from)
        }
        addLeafElement(e, t) {
            this.addNode(this.buffer.writeElements(JO(t.children, e.marks), -t.from).finish(t.type, t.to - t.from), t.from)
        }
        startNested(e, t, n) {
            this.nested = new vO(e, t, n)
        }
        finishContext() {
            this.block = qO(this.stack, this.parser.nodeSet)
        }
        finish() {
            for (; this.stack.length > 1;) this.finishContext();
            return this.block.toTree(this.parser.nodeSet, this.lineStart)
        }
        forceFinish() {
            let e = this.stack.map((e => e.copy())),
                t = this.lineStart;
            if (this.nested) {
                let n = e[e.length - 1],
                    r = this.nested.finish(this.nested.parse.forceFinish());
                r instanceof ZO && (r = r.toTree(this.parser.nodeSet));
                let i = t - this.nested.from;
                r.length > i && (r = new Yi(r.type, r.children.filter(((e, t) => r.positions[t] <= i)), r.positions.filter((e => e <= i)), i)), n.children.push(r), n.positions.push(this.nested.from)
            }
            for (; e.length > 1;) qO(e, this.parser.nodeSet);
            return e[0].toTree(this.parser.nodeSet, t)
        }
        finishLeaf(e) {
            for (let t of e.parsers)
                if (t.finish(this, e)) return;
            let t = JO(this.parser.parseInline(e.content, e.start), e.marks);
            this.addNode(this.buffer.writeElements(t, -e.start).finish(Js.Paragraph, e.content.length), e.start)
        }
        elt(e, t, n, r) {
            return "string" == typeof e ? IO(this.parser.getNodeType(e), t, n, r) : new EO(e, t)
        }
        get buffer() {
            return new zO(this.parser.nodeSet)
        }
    }
    class _O {
        constructor(e, t, n, r, i, a, o, s, O, l) {
            this.nodeSet = e, this.codeParser = t, this.htmlParser = n, this.blockParsers = r, this.leafBlockParsers = i, this.blockNames = a, this.endLeafBlock = o, this.skipContextMarkup = s, this.inlineParsers = O, this.inlineNames = l, this.nodeTypes = Object.create(null);
            for (let t of e.types) this.nodeTypes[t.name] = t.id
        }
        startParse(e, t = 0, n = {}) {
            return new SO(this, e, t, n)
        }
        configure(e) {
            let t = TO(e);
            if (!t) return this;
            let {
                nodeSet: n,
                skipContextMarkup: r
            } = this, i = this.blockParsers.slice(), a = this.leafBlockParsers.slice(), o = this.blockNames.slice(), s = this.inlineParsers.slice(), O = this.inlineNames.slice(), l = this.endLeafBlock.slice();
            if (XO(t.defineNodes)) {
                r = Object.assign({}, r);
                let e = n.types.slice();
                for (let n of t.defineNodes) {
                    let {
                        name: t,
                        block: i,
                        composite: a
                    } = "string" == typeof n ? {
                        name: n
                    } : n;
                    if (e.some((e => e.name == t))) continue;
                    a && (r[e.length] = (e, t, n) => a(t, n, e.value));
                    let o = e.length,
                        s = a ? ["Block", "BlockContext"] : i ? o >= Js.ATXHeading1 && o <= Js.SetextHeading2 ? ["Block", "LeafBlock", "Heading"] : ["Block", "LeafBlock"] : void 0;
                    e.push(Wi.define({
                        id: o,
                        name: t,
                        props: s && [
                            [Ti.group, s]
                        ]
                    }))
                }
                n = new qi(e)
            }
            if (XO(t.props) && (n = n.extend(...t.props)), XO(t.remove))
                for (let e of t.remove) {
                    let t = this.blockNames.indexOf(e),
                        n = this.inlineNames.indexOf(e);
                    t > -1 && (i[t] = a[t] = void 0), n > -1 && (s[n] = void 0)
                }
            if (XO(t.parseBlock))
                for (let e of t.parseBlock) {
                    let t = o.indexOf(e.name);
                    if (t > -1) i[t] = e.parse, a[t] = e.leaf;
                    else {
                        let t = e.before ? RO(o, e.before) : e.after ? RO(o, e.after) + 1 : o.length - 1;
                        i.splice(t, 0, e.parse), a.splice(t, 0, e.leaf), o.splice(t, 0, e.name)
                    }
                    e.endLeaf && l.push(e.endLeaf)
                }
            if (XO(t.parseInline))
                for (let e of t.parseInline) {
                    let t = O.indexOf(e.name);
                    if (t > -1) s[t] = e.parse;
                    else {
                        let t = e.before ? RO(O, e.before) : e.after ? RO(O, e.after) + 1 : O.length - 1;
                        s.splice(t, 0, e.parse), O.splice(t, 0, e.name)
                    }
                }
            return new _O(n, t.codeParser || this.codeParser, t.htmlParser || this.htmlParser, i, a, o, l, r, s, O)
        }
        getNodeType(e) {
            let t = this.nodeTypes[e];
            if (null == t) throw new RangeError(`Unknown node type '${e}'`);
            return t
        }
        parseInline(e, t) {
            let n = new HO(this, e, t);
            e: for (let e = t; e < n.end;) {
                let t = n.char(e);
                for (let r of this.inlineParsers)
                    if (r) {
                        let i = r(n, t, e);
                        if (i >= 0) {
                            e = i;
                            continue e
                        }
                    }
                e++
            }
            return n.resolveMarkers(0)
        }
    }

    function XO(e) {
        return null != e && e.length > 0
    }

    function TO(e) {
        if (!Array.isArray(e)) return e;
        if (0 == e.length) return null;
        let t = TO(e[0]);
        if (1 == e.length) return t;
        let n = TO(e.slice(1));
        if (!n || !t) return t || n;
        let r = (e, t) => (e || YO).concat(t || YO);
        return {
            props: r(t.props, n.props),
            codeParser: n.codeParser || t.codeParser,
            htmlParser: n.htmlParser || t.htmlParser,
            defineNodes: r(t.defineNodes, n.defineNodes),
            parseBlock: r(t.parseBlock, n.parseBlock),
            parseInline: r(t.parseInline, n.parseInline),
            remove: r(t.remove, n.remove)
        }
    }

    function RO(e, t) {
        let n = e.indexOf(t);
        if (n < 0) throw new RangeError(`Position specified relative to unknown parser ${t}`);
        return n
    }
    let WO = [Wi.none];
    for (let e, t = 1; e = Js[t]; t++) WO[t] = Wi.define({
        id: t,
        name: e,
        props: t >= Js.Escape ? [] : [
            [Ti.group, t in nO ? ["Block", "BlockContext"] : ["Block", "LeafBlock"]]
        ]
    });

    function qO(e, t) {
        let n = e.pop(),
            r = e[e.length - 1];
        return r.children.push(n.toTree(t)), r.positions.push(n.from - r.from), r
    }
    const YO = [];
    class zO {
        constructor(e) {
            this.nodeSet = e, this.content = [], this.nodes = []
        }
        write(e, t, n, r = 0) {
            return this.content.push(e, t, n, 4 + 4 * r), this
        }
        writeElements(e, t = 0) {
            for (let n of e) n.writeTo(this, t);
            return this
        }
        finish(e, t) {
            return Yi.build({
                buffer: this.content,
                nodeSet: this.nodeSet,
                reused: this.nodes,
                topID: e,
                length: t
            })
        }
    }
    class ZO {
        constructor(e, t, n, r = YO) {
            this.type = e, this.from = t, this.to = n, this.children = r
        }
        writeTo(e, t) {
            let n = e.content.length;
            e.writeElements(this.children, t), e.content.push(this.type, this.from + t, this.to + t, e.content.length + 4 - n)
        }
        toTree(e) {
            return new zO(e).writeElements(this.children, -this.from).finish(this.type, this.to - this.from)
        }
    }
    class EO {
        constructor(e, t) {
            this.tree = e, this.from = t
        }
        get to() {
            return this.from + this.tree.length
        }
        get type() {
            return this.tree.type.id
        }
        get children() {
            return YO
        }
        writeTo(e, t) {
            e.nodes.push(this.tree), e.content.push(e.nodes.length - 1, this.from + t, this.to + t, -1)
        }
        toTree() {
            return this.tree
        }
    }

    function IO(e, t, n, r) {
        return new ZO(e, t, n, r)
    }
    const UO = {
            resolve: "Emphasis",
            mark: "EmphasisMark"
        },
        VO = {
            resolve: "Emphasis",
            mark: "EmphasisMark"
        },
        jO = {},
        AO = {};
    class CO {
        constructor(e, t, n, r) {
            this.type = e, this.from = t, this.to = n, this.side = r
        }
    }
    const GO = "!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~";
    let LO = /[!"#$%&'()*+,\-.\/:;<=>?@\[\\\]^_`{|}~\xA1\u2010-\u2027]/;
    try {
        LO = /[\p{Pc}|\p{Pd}|\p{Pe}|\p{Pf}|\p{Pi}|\p{Po}|\p{Ps}]/u
    } catch (e) {}
    const NO = {
        Escape(e, t, n) {
            if (92 != t || n == e.end - 1) return -1;
            let r = e.char(n + 1);
            for (let t = 0; t < GO.length; t++)
                if (GO.charCodeAt(t) == r) return e.append(IO(Js.Escape, n, n + 2));
            return -1
        },
        Entity(e, t, n) {
            if (38 != t) return -1;
            let r = /^(?:#\d+|#x[a-f\d]+|\w+);/i.exec(e.slice(n + 1, n + 31));
            return r ? e.append(IO(Js.Entity, n, n + 1 + r[0].length)) : -1
        },
        InlineCode(e, t, n) {
            if (96 != t || n && 96 == e.char(n - 1)) return -1;
            let r = n + 1;
            for (; r < e.end && 96 == e.char(r);) r++;
            let i = r - n,
                a = 0;
            for (; r < e.end; r++)
                if (96 == e.char(r)) {
                    if (a++, a == i && 96 != e.char(r + 1)) return e.append(IO(Js.InlineCode, n, r + 1, [IO(Js.CodeMark, n, n + i), IO(Js.CodeMark, r + 1 - i, r + 1)]))
                } else a = 0;
            return -1
        },
        HTMLTag(e, t, n) {
            if (60 != t || n == e.end - 1) return -1;
            let r = e.slice(n + 1, e.end),
                i = /^(?:[a-z][-\w+.]+:[^\s>]+|[a-z\d.!#$%&'*+/=?^_`{|}~-]+@[a-z\d](?:[a-z\d-]{0,61}[a-z\d])?(?:\.[a-z\d](?:[a-z\d-]{0,61}[a-z\d])?)*)>/i.exec(r);
            if (i) return e.append(IO(Js.URL, n, n + 1 + i[0].length));
            let a = /^!--[^>](?:-[^-]|[^-])*?-->/i.exec(r);
            if (a) return e.append(IO(Js.Comment, n, n + 1 + a[0].length));
            let o = /^\?[^]*?\?>/.exec(r);
            if (o) return e.append(IO(Js.ProcessingInstruction, n, n + 1 + o[0].length));
            let s = /^(?:![A-Z][^]*?>|!\[CDATA\[[^]*?\]\]>|\/\s*[a-zA-Z][\w-]*\s*>|\s*[a-zA-Z][\w-]*(\s+[a-zA-Z:_][\w-.:]*(?:\s*=\s*(?:[^\s"'=<>`]+|'[^']*'|"[^"]*"))?)*\s*(\/\s*)?>)/.exec(r);
            if (!s) return -1;
            let O = [];
            if (e.parser.htmlParser) {
                let t, r = e.parser.htmlParser.startParse(Mi(e.slice(n, n + 1 + s[0].length)), 0, {});
                for (; !(t = r.advance()););
                O = t.children.map(((e, r) => new EO(e, n + t.positions[r])))
            }
            return e.append(IO(Js.HTMLTag, n, n + 1 + s[0].length, O))
        },
        Emphasis(e, t, n) {
            if (95 != t && 42 != t) return -1;
            let r = n + 1;
            for (; e.char(r) == t;) r++;
            let i = e.slice(n - 1, n),
                a = e.slice(r, r + 1),
                o = LO.test(i),
                s = LO.test(a),
                O = /\s|^$/.test(i),
                l = /\s|^$/.test(a),
                c = !l && (!s || O || o),
                u = !O && (!o || l || s),
                d = c && (42 == t || !u || o),
                p = u && (42 == t || !c || s);
            return e.append(new CO(95 == t ? UO : VO, n, r, (d ? 1 : 0) | (p ? 2 : 0)))
        },
        HardBreak(e, t, n) {
            if (92 == t && 10 == e.char(n + 1)) return e.append(IO(Js.HardBreak, n, n + 2));
            if (32 == t) {
                let t = n + 1;
                for (; 32 == e.char(t);) t++;
                if (10 == e.char(t) && t >= n + 2) return e.append(IO(Js.HardBreak, n, t + 1))
            }
            return -1
        },
        Link: (e, t, n) => 91 == t ? e.append(new CO(jO, n, n + 1, 1)) : -1,
        Image: (e, t, n) => 33 == t && 91 == e.char(n + 1) ? e.append(new CO(AO, n, n + 2, 1)) : -1,
        LinkEnd(e, t, n) {
            if (93 != t) return -1;
            for (let t = e.parts.length - 1; t >= 0; t--) {
                let r = e.parts[t];
                if (r instanceof CO && (r.type == jO || r.type == AO)) {
                    if (!r.side || e.skipSpace(r.to) == n && !/[(\[]/.test(e.slice(n + 1, n + 2))) return e.parts[t] = null, -1;
                    let i = e.takeContent(t),
                        a = e.parts[t] = DO(e, i, r.type == jO ? Js.Link : Js.Image, r.from, n + 1);
                    if (r.type == jO)
                        for (let n = 0; n < t; n++) {
                            let t = e.parts[n];
                            t instanceof CO && t.type == jO && (t.side = 0)
                        }
                    return a.to
                }
            }
            return -1
        }
    };

    function DO(e, t, n, r, i) {
        let {
            text: a
        } = e, o = e.char(i), s = i;
        if (t.unshift(IO(Js.LinkMark, r, r + (n == Js.Image ? 2 : 1))), t.push(IO(Js.LinkMark, i - 1, i)), 40 == o) {
            let n, r = e.skipSpace(i + 1),
                o = MO(a, r - e.offset, e.offset);
            o && (r = e.skipSpace(o.to), n = BO(a, r - e.offset, e.offset), n && (r = e.skipSpace(n.to))), 41 == e.char(r) && (t.push(IO(Js.LinkMark, i, i + 1)), s = r + 1, o && t.push(o), n && t.push(n), t.push(IO(Js.LinkMark, r, s)))
        } else if (91 == o) {
            let n = FO(a, i - e.offset, e.offset, !1);
            n && (t.push(n), s = n.to)
        }
        return IO(n, r, s, t)
    }

    function MO(e, t, n) {
        if (60 == e.charCodeAt(t)) {
            for (let r = t + 1; r < e.length; r++) {
                let i = e.charCodeAt(r);
                if (62 == i) return IO(Js.URL, t + n, r + 1 + n);
                if (60 == i || 10 == i) return !1
            }
            return null
        } {
            let r = 0,
                i = t;
            for (let t = !1; i < e.length; i++) {
                let n = e.charCodeAt(i);
                if (rO(n)) break;
                if (t) t = !1;
                else if (40 == n) r++;
                else if (41 == n) {
                    if (!r) break;
                    r--
                } else 92 == n && (t = !0)
            }
            return i > t ? IO(Js.URL, t + n, i + n) : i == e.length && null
        }
    }

    function BO(e, t, n) {
        let r = e.charCodeAt(t);
        if (39 != r && 34 != r && 40 != r) return !1;
        let i = 40 == r ? 41 : r;
        for (let r = t + 1, a = !1; r < e.length; r++) {
            let o = e.charCodeAt(r);
            if (a) a = !1;
            else {
                if (o == i) return IO(Js.LinkTitle, t + n, r + 1 + n);
                92 == o && (a = !0)
            }
        }
        return null
    }

    function FO(e, t, n, r) {
        for (let i = !1, a = t + 1, o = Math.min(e.length, a + 999); a < o; a++) {
            let o = e.charCodeAt(a);
            if (i) i = !1;
            else {
                if (93 == o) return !r && IO(Js.LinkLabel, t + n, a + 1 + n);
                if (r && !rO(o) && (r = !1), 91 == o) return !1;
                92 == o && (i = !0)
            }
        }
        return null
    }
    class HO {
        constructor(e, t, n) {
            this.parser = e, this.text = t, this.offset = n, this.parts = []
        }
        char(e) {
            return e >= this.end ? -1 : this.text.charCodeAt(e - this.offset)
        }
        get end() {
            return this.offset + this.text.length
        }
        slice(e, t) {
            return this.text.slice(e - this.offset, t - this.offset)
        }
        append(e) {
            return this.parts.push(e), e.to
        }
        addDelimiter(e, t, n, r, i) {
            return this.append(new CO(e, t, n, (r ? 1 : 0) | (i ? 2 : 0)))
        }
        addElement(e) {
            return this.append(e)
        }
        resolveMarkers(e) {
            for (let t = e; t < this.parts.length; t++) {
                let n = this.parts[t];
                if (!(n instanceof CO && n.type.resolve && 2 & n.side)) continue;
                let r, i = n.type == UO || n.type == VO,
                    a = n.to - n.from,
                    o = t - 1;
                for (; o >= e; o--) {
                    let e = this.parts[o];
                    if (e instanceof CO && 1 & e.side && e.type == n.type && !(i && (1 & n.side || 2 & e.side) && (e.to - e.from + a) % 3 == 0 && ((e.to - e.from) % 3 || a % 3))) {
                        r = e;
                        break
                    }
                }
                if (!r) continue;
                let s = n.type.resolve,
                    O = [],
                    l = r.from,
                    c = n.to;
                if (i) {
                    let e = Math.min(2, r.to - r.from, a);
                    l = r.to - e, c = n.from + e, s = 1 == e ? "Emphasis" : "StrongEmphasis"
                }
                r.type.mark && O.push(this.elt(r.type.mark, l, r.to));
                for (let e = o + 1; e < t; e++) this.parts[e] instanceof ZO && O.push(this.parts[e]), this.parts[e] = null;
                n.type.mark && O.push(this.elt(n.type.mark, n.from, c));
                let u = this.elt(s, l, c, O);
                this.parts[o] = i && r.from != l ? new CO(r.type, r.from, l, r.side) : null, (this.parts[t] = i && n.to != c ? new CO(n.type, c, n.to, n.side) : null) ? this.parts.splice(t, 0, u) : this.parts[t] = u
            }
            let t = [];
            for (let n = e; n < this.parts.length; n++) {
                let e = this.parts[n];
                e instanceof ZO && t.push(e)
            }
            return t
        }
        findOpeningDelimiter(e) {
            for (let t = this.parts.length - 1; t >= 0; t--) {
                let n = this.parts[t];
                if (n instanceof CO && n.type == e) return t
            }
            return null
        }
        takeContent(e) {
            let t = this.resolveMarkers(e);
            return this.parts.length = e, t
        }
        skipSpace(e) {
            return iO(this.text, e - this.offset) + this.offset
        }
        elt(e, t, n, r) {
            return "string" == typeof e ? IO(this.parser.getNodeType(e), t, n, r) : new EO(e, t)
        }
    }

    function JO(e, t) {
        if (!t.length) return e;
        if (!e.length) return t;
        let n = e.slice(),
            r = 0;
        for (let e of t) {
            for (; r < n.length && n[r].to < e.to;) r++;
            if (r < n.length && n[r].from < e.from) {
                let t = n[r];
                t instanceof ZO && (n[r] = new ZO(t.type, t.from, t.to, JO(t.children, [e])))
            } else n.splice(r++, 0, e)
        }
        return n
    }
    const KO = new WeakMap;

    function el(e, t) {
        for (let n of e) KO.set(n, t), n instanceof Yi && n.type.isAnonymous && el(n.children, t)
    }
    const tl = [Js.CodeBlock, Js.ListItem, Js.OrderedList, Js.BulletList];
    class nl {
        constructor(e, t) {
            this.fragments = e, this.input = t, this.i = 0, this.fragment = null, this.fragmentEnd = -1, this.cursor = null, e.length && (this.fragment = e[this.i++])
        }
        nextFragment() {
            this.fragment = this.i < this.fragments.length ? this.fragments[this.i++] : null, this.cursor = null, this.fragmentEnd = -1
        }
        moveTo(e, t) {
            for (; this.fragment && this.fragment.to <= e;) this.nextFragment();
            if (!this.fragment || this.fragment.from > (e ? e - 1 : 0)) return !1;
            if (this.fragmentEnd < 0) {
                let e = this.fragment.to;
                for (; e > 0 && 10 != this.input.get(e - 1);) e--;
                this.fragmentEnd = e ? e - 1 : 0
            }
            let n = this.cursor;
            n || (n = this.cursor = this.fragment.tree.cursor(), n.firstChild());
            let r = e + this.fragment.offset;
            for (; n.to <= r;)
                if (!n.parent()) return !1;
            for (;;) {
                if (n.from >= r) return this.fragment.from <= t;
                if (!n.childAfter(r)) return !1
            }
        }
        matches(e) {
            let t = this.cursor.tree;
            return t && KO.get(t) == e
        }
        takeNodes(e) {
            let t = this.cursor,
                n = this.fragment.offset,
                r = e.lineStart,
                i = r,
                a = e.block.children.length,
                o = i,
                s = a;
            for (;;) {
                if (t.to - n >= this.fragmentEnd) {
                    if (t.type.isAnonymous && t.firstChild()) continue;
                    break
                }
                if (e.addNode(t.tree, t.from - n), t.type.is("Block") && (tl.indexOf(t.type.id) < 0 ? (i = t.to - n, a = e.block.children.length) : (i = o, a = s, o = t.to - n, s = e.block.children.length)), !t.nextSibling()) break
            }
            for (; e.block.children.length > a;) e.block.children.pop(), e.block.positions.pop();
            return i - r
        }
    }
    const rl = new _O(new qi(WO), null, null, Object.keys(bO).map((e => bO[e])), Object.keys(bO).map((e => kO[e])), Object.keys(bO), yO, nO, Object.keys(NO).map((e => NO[e])), Object.keys(NO)),
        il = {
            resolve: "Strikethrough",
            mark: "StrikethroughMark"
        },
        al = {
            defineNodes: ["Strikethrough", "StrikethroughMark"],
            parseInline: [{
                name: "Strikethrough",
                parse: (e, t, n) => 126 != t || 126 != e.char(n + 1) ? -1 : e.addDelimiter(il, n, n + 2, !0, !0),
                after: "Emphasis"
            }]
        };

    function ol(e, t, n = 0, r, i = 0) {
        let a = 0,
            o = !0,
            s = -1,
            O = -1,
            l = !1,
            c = () => {
                r.push(e.elt("TableCell", i + s, i + O, e.parser.parseInline(t.slice(s, O), i + s)))
            };
        for (let u = n; u < t.length; u++) {
            let n = t.charCodeAt(u);
            124 != n || l ? (l || 32 != n && 9 != n) && (s < 0 && (s = u), O = u + 1) : ((!o || s > -1) && a++, o = !1, r && (s > -1 && c(), r.push(e.elt("TableDelimiter", u + i, u + i + 1))), s = O = -1), l = !l && 92 == n
        }
        return s > -1 && (a++, r && c()), a
    }
    class sl {
        constructor() {
            this.rows = null
        }
        nextLine(e, t, n) {
            if (null == this.rows) {
                let r;
                if (this.rows = !1, (45 == t.next || 58 == t.next || 124 == t.next) && /^\|?(\s*:?-+:?\s*\|)+(\s*:?-+:?\s*)?$/.test(r = t.text.slice(t.pos))) {
                    let i = [];
                    ol(e, n.content, 0, i, n.start) == ol(e, r, t.pos) && (this.rows = [e.elt("TableHeader", n.start, n.start + n.content.length, i), e.elt("TableDelimiter", e.lineStart + t.pos, e.lineStart + t.text.length)])
                }
            } else if (this.rows) {
                let n = [];
                ol(e, t.text, t.pos, n, e.lineStart), this.rows.push(e.elt("TableRow", e.lineStart + t.pos, e.lineStart + t.text.length, n))
            }
            return !1
        }
        finish(e, t) {
            return !!this.rows && (this.emit(e, t), !0)
        }
        emit(e, t) {
            e.addLeafElement(t, e.elt("Table", t.start, t.start + t.content.length, this.rows))
        }
    }
    const Ol = {
        defineNodes: [{
            name: "Table",
            block: !0
        }, "TableHeader", "TableRow", "TableCell", "TableDelimiter"],
        parseBlock: [{
            name: "Table",
            leaf: (e, t) => function(e, t) {
                for (let n = t; n < e.length; n++) {
                    let t = e.charCodeAt(n);
                    if (124 == t) return !0;
                    92 == t && n++
                }
                return !1
            }(t.content, 0) ? new sl : null,
            before: "SetextHeading"
        }]
    };
    class ll {
        nextLine() {
            return !1
        }
        finish(e, t) {
            return e.addLeafElement(t, e.elt("Task", t.start, t.start + t.content.length, [e.elt("TaskMarker", t.start, t.start + 3), ...e.parser.parseInline(t.content.slice(3), t.start + 3)])), !0
        }
    }
    const cl = [Ol, {
        defineNodes: [{
            name: "Task",
            block: !0
        }, "TaskMarker"],
        parseBlock: [{
            name: "TaskList",
            leaf: (e, t) => /^\[[ xX]\]/.test(t.content) && "ListItem" == e.parser.nodeSet.types[e.block.type].name ? new ll : null,
            after: "SetextHeading"
        }]
    }, al];

    function ul(e, t, n) {
        return (r, i, a) => {
            if (i != e || r.char(a + 1) == e) return -1;
            let o = [r.elt(n, a, a + 1)];
            for (let i = a + 1; i < r.end; i++) {
                let s = r.char(i);
                if (s == e) return r.addElement(r.elt(t, a, i + 1, o.concat(r.elt(n, i, i + 1))));
                if (92 == s && o.push(r.elt("Escape", i, 2 + i++)), rO(s)) break
            }
            return -1
        }
    }
    const dl = {
            defineNodes: ["Superscript", "SuperscriptMark"],
            parseInline: [{
                name: "Superscript",
                parse: ul(94, "Superscript", "SuperscriptMark")
            }]
        },
        pl = {
            defineNodes: ["Subscript", "SubscriptMark"],
            parseInline: [{
                name: "Subscript",
                parse: ul(126, "Subscript", "SubscriptMark")
            }]
        },
        hl = {
            defineNodes: ["Emoji"],
            parseInline: [{
                name: "Emoji",
                parse(e, t, n) {
                    let r;
                    return 58 == t && (r = /^[a-zA-Z_0-9]+:/.exec(e.slice(n + 1, e.end))) ? e.addElement(e.elt("Emoji", n, n + 1 + r[0].length)) : -1
                }
            }]
        };
    class fl {
        constructor(e, t, n, r, i, a, o, s, O, l) {
            this.p = e, this.stack = t, this.state = n, this.reducePos = r, this.pos = i, this.score = a, this.buffer = o, this.bufferBase = s, this.curContext = O, this.parent = l
        }
        toString() {
            return `[${this.stack.filter(((e,t)=>t%3==0)).concat(this.state)}]@${this.pos}${this.score?"!"+this.score:""}`
        }
        static start(e, t, n = 0) {
            let r = e.parser.context;
            return new fl(e, [], t, n, n, 0, [], 0, r ? new ml(r, r.start) : null, null)
        }
        get context() {
            return this.curContext ? this.curContext.context : null
        }
        pushState(e, t) {
            this.stack.push(this.state, t, this.bufferBase + this.buffer.length), this.state = e
        }
        reduce(e) {
            let t = e >> 19,
                n = 65535 & e,
                {
                    parser: r
                } = this.p,
                i = r.dynamicPrecedence(n);
            if (i && (this.score += i), 0 == t) return n < r.minRepeatTerm && this.storeNode(n, this.reducePos, this.reducePos, 4, !0), this.pushState(r.getGoto(this.state, n, !0), this.reducePos), void this.reduceContext(n);
            let a = this.stack.length - 3 * (t - 1) - (262144 & e ? 6 : 0),
                o = this.stack[a - 2],
                s = this.stack[a - 1],
                O = this.bufferBase + this.buffer.length - s;
            if (n < r.minRepeatTerm || 131072 & e) {
                let e = r.stateFlag(this.state, 1) ? this.pos : this.reducePos;
                this.storeNode(n, o, e, O + 4, !0)
            }
            if (262144 & e) this.state = this.stack[a];
            else {
                let e = this.stack[a - 3];
                this.state = r.getGoto(e, n, !0)
            }
            for (; this.stack.length > a;) this.stack.pop();
            this.reduceContext(n)
        }
        storeNode(e, t, n, r = 4, i = !1) {
            if (0 == e) {
                let e = this,
                    r = this.buffer.length;
                if (0 == r && e.parent && (r = e.bufferBase - e.parent.bufferBase, e = e.parent), r > 0 && 0 == e.buffer[r - 4] && e.buffer[r - 1] > -1) {
                    if (t == n) return;
                    if (e.buffer[r - 2] >= t) return void(e.buffer[r - 2] = n)
                }
            }
            if (i && this.pos != n) {
                let i = this.buffer.length;
                if (i > 0 && 0 != this.buffer[i - 4])
                    for (; i > 0 && this.buffer[i - 2] > n;) this.buffer[i] = this.buffer[i - 4], this.buffer[i + 1] = this.buffer[i - 3], this.buffer[i + 2] = this.buffer[i - 2], this.buffer[i + 3] = this.buffer[i - 1], i -= 4, r > 4 && (r -= 4);
                this.buffer[i] = e, this.buffer[i + 1] = t, this.buffer[i + 2] = n, this.buffer[i + 3] = r
            } else this.buffer.push(e, t, n, r)
        }
        shift(e, t, n) {
            if (131072 & e) this.pushState(65535 & e, this.pos);
            else if (0 == (262144 & e)) {
                let r = this.pos,
                    i = e,
                    {
                        parser: a
                    } = this.p;
                (n > this.pos || t <= a.maxNode) && (this.pos = n, a.stateFlag(i, 1) || (this.reducePos = n)), this.pushState(i, r), t <= a.maxNode && this.buffer.push(t, r, n, 4), this.shiftContext(t)
            } else t <= this.p.parser.maxNode && this.buffer.push(t, this.pos, n, 4), this.pos = n
        }
        apply(e, t, n) {
            65536 & e ? this.reduce(e) : this.shift(e, t, n)
        }
        useNode(e, t) {
            let n = this.p.reused.length - 1;
            (n < 0 || this.p.reused[n] != e) && (this.p.reused.push(e), n++);
            let r = this.pos;
            this.reducePos = this.pos = r + e.length, this.pushState(t, r), this.buffer.push(n, r, this.reducePos, -1), this.curContext && this.updateContext(this.curContext.tracker.reuse(this.curContext.context, e, this.p.input, this))
        }
        split() {
            let e = this,
                t = e.buffer.length;
            for (; t > 0 && e.buffer[t - 2] > e.reducePos;) t -= 4;
            let n = e.buffer.slice(t),
                r = e.bufferBase + t;
            for (; e && r == e.bufferBase;) e = e.parent;
            return new fl(this.p, this.stack.slice(), this.state, this.reducePos, this.pos, this.score, n, r, this.curContext, e)
        }
        recoverByDelete(e, t) {
            let n = e <= this.p.parser.maxNode;
            n && this.storeNode(e, this.pos, t), this.storeNode(0, this.pos, t, n ? 8 : 4), this.pos = this.reducePos = t, this.score -= 200
        }
        canShift(e) {
            for (let t = new Ql(this);;) {
                let n = this.p.parser.stateSlot(t.top, 4) || this.p.parser.hasAction(t.top, e);
                if (0 == (65536 & n)) return !0;
                if (0 == n) return !1;
                t.reduce(n)
            }
        }
        get ruleStart() {
            for (let e = this.state, t = this.stack.length;;) {
                let n = this.p.parser.stateSlot(e, 5);
                if (!(65536 & n)) return 0;
                if (t -= 3 * (n >> 19), (65535 & n) < this.p.parser.minRepeatTerm) return this.stack[t + 1];
                e = this.stack[t]
            }
        }
        startOf(e, t) {
            let n = this.state,
                r = this.stack.length,
                {
                    parser: i
                } = this.p;
            for (;;) {
                let a = i.stateSlot(n, 5),
                    o = a >> 19,
                    s = 65535 & a;
                if (e.indexOf(s) > -1) {
                    let e = r - 3 * (a >> 19),
                        n = this.stack[e + 1];
                    if (null == t || t > n) return n
                }
                if (0 == r) return null;
                0 == o ? (r -= 3, n = this.stack[r]) : (r -= 3 * (o - 1), n = i.getGoto(this.stack[r - 3], s, !0))
            }
        }
        recoverByInsert(e) {
            if (this.stack.length >= 300) return [];
            let t = this.p.parser.nextStates(this.state);
            if (t.length > 8 || this.stack.length >= 120) {
                let n = [];
                for (let r, i = 0; i < t.length; i += 2)(r = t[i + 1]) != this.state && this.p.parser.hasAction(r, e) && n.push(t[i], r);
                if (this.stack.length < 120)
                    for (let e = 0; n.length < 8 && e < t.length; e += 2) {
                        let r = t[e + 1];
                        n.some(((e, t) => 1 & t && e == r)) || n.push(t[e], r)
                    }
                t = n
            }
            let n = [];
            for (let e = 0; e < t.length && n.length < 4; e += 2) {
                let r = t[e + 1];
                if (r == this.state) continue;
                let i = this.split();
                i.storeNode(0, i.pos, i.pos, 4, !0), i.pushState(r, this.pos), i.shiftContext(t[e]), i.score -= 200, n.push(i)
            }
            return n
        }
        forceReduce() {
            let e = this.p.parser.stateSlot(this.state, 5);
            return 0 != (65536 & e) && (this.p.parser.validAction(this.state, e) || (this.storeNode(0, this.reducePos, this.reducePos, 4, !0), this.score -= 100), this.reduce(e), !0)
        }
        forceAll() {
            for (; !this.p.parser.stateFlag(this.state, 2) && this.forceReduce(););
            return this
        }
        get deadEnd() {
            if (3 != this.stack.length) return !1;
            let {
                parser: e
            } = this.p;
            return 65535 == e.data[e.stateSlot(this.state, 1)] && !e.stateSlot(this.state, 4)
        }
        restart() {
            this.state = this.stack[0], this.stack.length = 0
        }
        sameState(e) {
            if (this.state != e.state || this.stack.length != e.stack.length) return !1;
            for (let t = 0; t < this.stack.length; t += 3)
                if (this.stack[t] != e.stack[t]) return !1;
            return !0
        }
        get parser() {
            return this.p.parser
        }
        dialectEnabled(e) {
            return this.p.parser.dialect.flags[e]
        }
        shiftContext(e) {
            this.curContext && this.updateContext(this.curContext.tracker.shift(this.curContext.context, e, this.p.input, this))
        }
        reduceContext(e) {
            this.curContext && this.updateContext(this.curContext.tracker.reduce(this.curContext.context, e, this.p.input, this))
        }
        emitContext() {
            let e = this.curContext;
            if (!e.tracker.strict) return;
            let t = this.buffer.length - 1;
            (t < 0 || -2 != this.buffer[t]) && this.buffer.push(e.hash, this.reducePos, this.reducePos, -2)
        }
        updateContext(e) {
            if (e != this.curContext.context) {
                let t = new ml(this.curContext.tracker, e);
                t.hash != this.curContext.hash && this.emitContext(), this.curContext = t
            }
        }
    }
    class ml {
        constructor(e, t) {
            this.tracker = e, this.context = t, this.hash = e.hash(t)
        }
    }
    var gl;
    ! function(e) {
        e[e.Token = 200] = "Token", e[e.Reduce = 100] = "Reduce", e[e.MaxNext = 4] = "MaxNext", e[e.MaxInsertStackDepth = 300] = "MaxInsertStackDepth", e[e.DampenInsertStackDepth = 120] = "DampenInsertStackDepth"
    }(gl || (gl = {}));
    class Ql {
        constructor(e) {
            this.stack = e, this.top = e.state, this.rest = e.stack, this.offset = this.rest.length
        }
        reduce(e) {
            let t = 65535 & e,
                n = e >> 19;
            0 == n ? (this.rest == this.stack.stack && (this.rest = this.rest.slice()), this.rest.push(this.top, 0, 0), this.offset += 3) : this.offset -= 3 * (n - 1);
            let r = this.stack.p.parser.getGoto(this.rest[this.offset - 3], t, !0);
            this.top = r
        }
    }
    class $l {
        constructor(e, t, n) {
            this.stack = e, this.pos = t, this.index = n, this.buffer = e.buffer, 0 == this.index && this.maybeNext()
        }
        static create(e) {
            return new $l(e, e.bufferBase + e.buffer.length, e.buffer.length)
        }
        maybeNext() {
            let e = this.stack.parent;
            null != e && (this.index = this.stack.bufferBase - e.bufferBase, this.stack = e, this.buffer = e.buffer)
        }
        get id() {
            return this.buffer[this.index - 4]
        }
        get start() {
            return this.buffer[this.index - 3]
        }
        get end() {
            return this.buffer[this.index - 2]
        }
        get size() {
            return this.buffer[this.index - 1]
        }
        next() {
            this.index -= 4, this.pos -= 4, 0 == this.index && this.maybeNext()
        }
        fork() {
            return new $l(this.stack, this.pos, this.index)
        }
    }
    class bl {
        constructor() {
            this.start = -1, this.value = -1, this.end = -1
        }
        accept(e, t) {
            this.value = e, this.end = t
        }
    }
    class xl {
        constructor(e, t) {
            this.data = e, this.id = t
        }
        token(e, t, n) {
            ! function(e, t, n, r, i) {
                let a = 0,
                    o = 1 << i,
                    s = r.p.parser.dialect;
                e: for (let i = n.start; 0 != (o & e[a]);) {
                    let O = e[a + 1];
                    for (let t = a + 3; t < O; t += 2)
                        if ((e[t + 1] & o) > 0) {
                            let a = e[t];
                            if (s.allows(a) && (-1 == n.value || n.value == a || r.p.parser.overrides(a, n.value))) {
                                n.accept(a, i);
                                break
                            }
                        }
                    let l = t.get(i++);
                    for (let t = 0, n = e[a + 2]; t < n;) {
                        let r = t + n >> 1,
                            i = O + r + (r << 1),
                            o = e[i],
                            s = e[i + 1];
                        if (l < o) n = r;
                        else {
                            if (!(l >= s)) {
                                a = e[i + 2];
                                continue e
                            }
                            t = r + 1
                        }
                    }
                    break
                }
            }(this.data, e, t, n, this.id)
        }
    }
    xl.prototype.contextual = xl.prototype.fallback = xl.prototype.extend = !1;
    class Pl {
        constructor(e, t = {}) {
            this.token = e, this.contextual = !!t.contextual, this.fallback = !!t.fallback, this.extend = !!t.extend
        }
    }

    function wl(e, t = Uint16Array) {
        if ("string" != typeof e) return e;
        let n = null;
        for (let r = 0, i = 0; r < e.length;) {
            let a = 0;
            for (;;) {
                let t = e.charCodeAt(r++),
                    n = !1;
                if (126 == t) {
                    a = 65535;
                    break
                }
                t >= 92 && t--, t >= 34 && t--;
                let i = t - 32;
                if (i >= 46 && (i -= 46, n = !0), a += i, n) break;
                a *= 46
            }
            n ? n[i++] = a : n = new t(a)
        }
        return n
    }
    const kl = "undefined" != typeof process && /\bparse\b/.test(process.env.LOG);
    let yl = null;

    function vl(e, t, n) {
        let r = e.cursor(t);
        for (;;)
            if (!(n < 0 ? r.childBefore(t) : r.childAfter(t)))
                for (;;) {
                    if ((n < 0 ? r.to < t : r.from > t) && !r.type.isError) return n < 0 ? Math.max(0, Math.min(r.to - 1, t - 5)) : Math.min(e.length, Math.max(r.from + 1, t + 5));
                    if (n < 0 ? r.prevSibling() : r.nextSibling()) break;
                    if (!r.parent()) return n < 0 ? 0 : e.length
                }
    }
    class Sl {
        constructor(e) {
            this.fragments = e, this.i = 0, this.fragment = null, this.safeFrom = -1, this.safeTo = -1, this.trees = [], this.start = [], this.index = [], this.nextFragment()
        }
        nextFragment() {
            let e = this.fragment = this.i == this.fragments.length ? null : this.fragments[this.i++];
            if (e) {
                for (this.safeFrom = e.openStart ? vl(e.tree, e.from + e.offset, 1) - e.offset : e.from, this.safeTo = e.openEnd ? vl(e.tree, e.to + e.offset, -1) - e.offset : e.to; this.trees.length;) this.trees.pop(), this.start.pop(), this.index.pop();
                this.trees.push(e.tree), this.start.push(-e.offset), this.index.push(0), this.nextStart = this.safeFrom
            } else this.nextStart = 1e9
        }
        nodeAt(e) {
            if (e < this.nextStart) return null;
            for (; this.fragment && this.safeTo <= e;) this.nextFragment();
            if (!this.fragment) return null;
            for (;;) {
                let t = this.trees.length - 1;
                if (t < 0) return this.nextFragment(), null;
                let n = this.trees[t],
                    r = this.index[t];
                if (r == n.children.length) {
                    this.trees.pop(), this.start.pop(), this.index.pop();
                    continue
                }
                let i = n.children[r],
                    a = this.start[t] + n.positions[r];
                if (a > e) return this.nextStart = a, null;
                if (a == e && a + i.length <= this.safeTo) return a == e && a >= this.safeFrom ? i : null;
                i instanceof Zi ? (this.index[t]++, this.nextStart = a + i.length) : (this.index[t]++, a + i.length >= e && (this.trees.push(i), this.start.push(a), this.index.push(0)))
            }
        }
    }
    class _l extends bl {
        constructor() {
            super(...arguments), this.extended = -1, this.mask = 0, this.context = 0
        }
        clear(e) {
            this.start = e, this.value = this.extended = -1
        }
    }
    const Xl = new bl;
    class Tl {
        constructor(e) {
            this.tokens = [], this.mainToken = Xl, this.actions = [], this.tokens = e.tokenizers.map((e => new _l))
        }
        getActions(e, t) {
            let n = 0,
                r = null,
                {
                    parser: i
                } = e.p,
                {
                    tokenizers: a
                } = i,
                o = i.stateSlot(e.state, 3),
                s = e.curContext ? e.curContext.hash : 0;
            for (let i = 0; i < a.length; i++) {
                if (0 == (1 << i & o)) continue;
                let O = a[i],
                    l = this.tokens[i];
                if ((!r || O.fallback) && ((O.contextual || l.start != e.pos || l.mask != o || l.context != s) && (this.updateCachedToken(l, O, e, t), l.mask = o, l.context = s), 0 != l.value)) {
                    let t = n;
                    if (l.extended > -1 && (n = this.addActions(e, l.extended, l.end, n)), n = this.addActions(e, l.value, l.end, n), !O.extend && (r = l, n > t)) break
                }
            }
            for (; this.actions.length > n;) this.actions.pop();
            return r || (r = Xl, r.start = e.pos, e.pos == t.length ? r.accept(e.p.parser.eofTerm, e.pos) : r.accept(0, e.pos + 1)), this.mainToken = r, this.actions
        }
        updateCachedToken(e, t, n, r) {
            if (e.clear(n.pos), t.token(r, e, n), e.value > -1) {
                let {
                    parser: t
                } = n.p;
                for (let i = 0; i < t.specialized.length; i++)
                    if (t.specialized[i] == e.value) {
                        let a = t.specializers[i](r.read(e.start, e.end), n);
                        if (a >= 0 && n.p.parser.dialect.allows(a >> 1)) {
                            0 == (1 & a) ? e.value = a >> 1 : e.extended = a >> 1;
                            break
                        }
                    }
            } else n.pos == r.length ? e.accept(n.p.parser.eofTerm, n.pos) : e.accept(0, n.pos + 1)
        }
        putAction(e, t, n, r) {
            for (let t = 0; t < r; t += 3)
                if (this.actions[t] == e) return r;
            return this.actions[r++] = e, this.actions[r++] = t, this.actions[r++] = n, r
        }
        addActions(e, t, n, r) {
            let {
                state: i
            } = e, {
                parser: a
            } = e.p, {
                data: o
            } = a;
            for (let e = 0; e < 2; e++)
                for (let s = a.stateSlot(i, e ? 2 : 1);; s += 3) {
                    if (65535 == o[s]) {
                        if (1 != o[s + 1]) {
                            0 == r && 2 == o[s + 1] && (r = this.putAction(Il(o, s + 1), t, n, r));
                            break
                        }
                        s = Il(o, s + 2)
                    }
                    o[s] == t && (r = this.putAction(Il(o, s + 1), t, n, r))
                }
            return r
        }
    }
    var Rl;
    ! function(e) {
        e[e.Distance = 5] = "Distance", e[e.MaxRemainingPerStep = 3] = "MaxRemainingPerStep", e[e.MinBufferLengthPrune = 200] = "MinBufferLengthPrune", e[e.ForceReduceLimit = 10] = "ForceReduceLimit"
    }(Rl || (Rl = {}));
    class Wl {
        constructor(e, t, n, r) {
            this.parser = e, this.input = t, this.startPos = n, this.context = r, this.pos = 0, this.recovering = 0, this.nextStackID = 9812, this.nested = null, this.nestEnd = 0, this.nestWrap = null, this.reused = [], this.tokens = new Tl(e), this.topTerm = e.top[1], this.stacks = [fl.start(this, e.top[0], this.startPos)];
            let i = null == r ? void 0 : r.fragments;
            this.fragments = i && i.length ? new Sl(i) : null
        }
        advance() {
            if (this.nested) {
                let e = this.nested.advance();
                return this.pos = this.nested.pos, e && (this.finishNested(this.stacks[0], e), this.nested = null), null
            }
            let e, t, n, r = this.stacks,
                i = this.pos,
                a = this.stacks = [];
            for (let o = 0; o < r.length; o++) {
                let s, O = r[o];
                for (;;) {
                    if (O.pos > i) a.push(O);
                    else if (s = this.checkNest(O))(!n || n.stack.score < O.score) && (n = s);
                    else {
                        if (this.advanceStack(O, a, r)) continue; {
                            e || (e = [], t = []), e.push(O);
                            let n = this.tokens.mainToken;
                            t.push(n.value, n.end)
                        }
                    }
                    break
                }
            }
            if (n) return this.startNested(n), null;
            if (!a.length) {
                let t = e && function(e) {
                    let t = null;
                    for (let n of e) n.pos == n.p.input.length && n.p.parser.stateFlag(n.state, 2) && (!t || t.score < n.score) && (t = n);
                    return t
                }(e);
                if (t) return this.stackToTree(t);
                if (this.parser.strict) throw new SyntaxError("No parse at " + i);
                this.recovering || (this.recovering = 5)
            }
            if (this.recovering && e) {
                let n = this.runRecovery(e, t, a);
                if (n) return this.stackToTree(n.forceAll())
            }
            if (this.recovering) {
                let e = 1 == this.recovering ? 1 : 3 * this.recovering;
                if (a.length > e)
                    for (a.sort(((e, t) => t.score - e.score)); a.length > e;) a.pop();
                a.some((e => e.reducePos > i)) && this.recovering--
            } else if (a.length > 1) e: for (let e = 0; e < a.length - 1; e++) {
                let t = a[e];
                for (let n = e + 1; n < a.length; n++) {
                    let r = a[n];
                    if (t.sameState(r) || t.buffer.length > 200 && r.buffer.length > 200) {
                        if (!((t.score - r.score || t.buffer.length - r.buffer.length) > 0)) {
                            a.splice(e--, 1);
                            continue e
                        }
                        a.splice(n--, 1)
                    }
                }
            }
            this.pos = a[0].pos;
            for (let e = 1; e < a.length; e++) a[e].pos < this.pos && (this.pos = a[e].pos);
            return null
        }
        advanceStack(e, t, n) {
            let r = e.pos,
                {
                    input: i,
                    parser: a
                } = this;
            kl && this.stackID(e);
            if (this.fragments) {
                let t = e.curContext && e.curContext.tracker.strict,
                    n = t ? e.curContext.hash : 0;
                for (let i = this.fragments.nodeAt(r); i;) {
                    let r = this.parser.nodeSet.types[i.type.id] == i.type ? a.getGoto(e.state, i.type.id) : -1;
                    if (r > -1 && i.length && (!t || (i.contextHash || 0) == n)) return e.useNode(i, r), !0;
                    if (!(i instanceof Yi) || 0 == i.children.length || i.positions[0] > 0) break;
                    let o = i.children[0];
                    if (!(o instanceof Yi)) break;
                    i = o
                }
            }
            let o = a.stateSlot(e.state, 4);
            if (o > 0) return e.reduce(o), !0;
            let s = this.tokens.getActions(e, i);
            for (let i = 0; i < s.length;) {
                let a = s[i++],
                    o = s[i++],
                    O = s[i++],
                    l = i == s.length || !n,
                    c = l ? e : e.split();
                if (c.apply(a, o, O), l) return !0;
                c.pos > r ? t.push(c) : n.push(c)
            }
            return !1
        }
        advanceFully(e, t) {
            let n = e.pos;
            for (;;) {
                let r = this.checkNest(e);
                if (r) return r;
                if (!this.advanceStack(e, null, null)) return !1;
                if (e.pos > n) return ql(e, t), !0
            }
        }
        runRecovery(e, t, n) {
            let r, i = null,
                a = !1;
            for (let o = 0; o < e.length; o++) {
                let s = e[o],
                    O = t[o << 1],
                    l = t[1 + (o << 1)],
                    c = kl ? this.stackID(s) + " -> " : "";
                if (s.deadEnd) {
                    if (a) continue;
                    a = !0, s.restart();
                    let e = this.advanceFully(s, n);
                    if (e) {
                        !0 !== e && (r = e);
                        continue
                    }
                }
                let u = s.split(),
                    d = c;
                for (let e = 0; u.forceReduce() && e < 10; e++) {
                    let e = this.advanceFully(u, n);
                    if (e) {
                        !0 !== e && (r = e);
                        break
                    }
                    kl && (d = this.stackID(u) + " -> ")
                }
                for (let e of s.recoverByInsert(O)) this.advanceFully(e, n);
                this.input.length > s.pos ? (l == s.pos && (l++, O = 0), s.recoverByDelete(O, l), ql(s, n)) : (!i || i.score < s.score) && (i = s)
            }
            if (i) return i;
            if (r)
                for (let e of this.stacks)
                    if (e.score > r.stack.score) {
                        r = void 0;
                        break
                    }
            return r && this.startNested(r), null
        }
        forceFinish() {
            let e = this.stacks[0].split();
            return this.nested && this.finishNested(e, this.nested.forceFinish()), this.stackToTree(e.forceAll())
        }
        stackToTree(e, t = e.pos) {
            return this.parser.context && e.emitContext(), Yi.build({
                buffer: $l.create(e),
                nodeSet: this.parser.nodeSet,
                topID: this.topTerm,
                maxBufferLength: this.parser.bufferLength,
                reused: this.reused,
                start: this.startPos,
                length: t - this.startPos,
                minRepeatType: this.parser.minRepeatTerm
            })
        }
        checkNest(e) {
            let t = this.parser.findNested(e.state);
            if (!t) return null;
            let n = t.value;
            return "function" == typeof n && (n = n(this.input, e)), n ? {
                stack: e,
                info: t,
                spec: n
            } : null
        }
        startNested(e) {
            let {
                stack: t,
                info: n,
                spec: r
            } = e;
            this.stacks = [t], this.nestEnd = this.scanForNestEnd(t, n.end, r.filterEnd), this.nestWrap = "number" == typeof r.wrapType ? this.parser.nodeSet.types[r.wrapType] : r.wrapType || null, r.startParse ? this.nested = r.startParse(this.input.clip(this.nestEnd), t.pos, this.context) : this.finishNested(t)
        }
        scanForNestEnd(e, t, n) {
            for (let r = e.pos; r < this.input.length; r++)
                if (Xl.start = r, Xl.value = -1, t.token(this.input, Xl, e), Xl.value > -1 && (!n || n(this.input.read(r, Xl.end)))) return r;
            return this.input.length
        }
        finishNested(e, t) {
            this.nestWrap ? t = new Yi(this.nestWrap, t ? [t] : [], t ? [0] : [], this.nestEnd - e.pos) : t || (t = new Yi(Wi.none, [], [], this.nestEnd - e.pos));
            let n = this.parser.findNested(e.state);
            e.useNode(t, this.parser.getGoto(e.state, n.placeholder, !0))
        }
        stackID(e) {
            let t = (yl || (yl = new WeakMap)).get(e);
            return t || yl.set(e, t = String.fromCodePoint(this.nextStackID++)), t + e
        }
    }

    function ql(e, t) {
        for (let n = 0; n < t.length; n++) {
            let r = t[n];
            if (r.pos == e.pos && r.sameState(e)) return void(t[n].score < e.score && (t[n] = e))
        }
        t.push(e)
    }
    class Yl {
        constructor(e, t, n) {
            this.source = e, this.flags = t, this.disabled = n
        }
        allows(e) {
            return !this.disabled || 0 == this.disabled[e]
        }
    }
    const zl = e => e;
    class Zl {
        constructor(e) {
            this.start = e.start, this.shift = e.shift || zl, this.reduce = e.reduce || zl, this.reuse = e.reuse || zl, this.hash = e.hash, this.strict = !1 !== e.strict
        }
    }
    class El {
        constructor(e) {
            if (this.bufferLength = Si, this.strict = !1, this.cachedDialect = null, 13 != e.version) throw new RangeError(`Parser version (${e.version}) doesn't match runtime version (13)`);
            let t = wl(e.tokenData),
                n = e.nodeNames.split(" ");
            this.minRepeatTerm = n.length, this.context = e.context;
            for (let t = 0; t < e.repeatNodeCount; t++) n.push("");
            let r = [];
            for (let e = 0; e < n.length; e++) r.push([]);

            function i(e, t, n) {
                r[e].push([t, t.deserialize(String(n))])
            }
            if (e.nodeProps)
                for (let t of e.nodeProps) {
                    let e = t[0];
                    for (let n = 1; n < t.length;) {
                        let r = t[n++];
                        if (r >= 0) i(r, e, t[n++]);
                        else {
                            let a = t[n + -r];
                            for (let o = -r; o > 0; o--) i(t[n++], e, a);
                            n++
                        }
                    }
                }
            if (this.specialized = new Uint16Array(e.specialized ? e.specialized.length : 0), this.specializers = [], e.specialized)
                for (let t = 0; t < e.specialized.length; t++) this.specialized[t] = e.specialized[t].term, this.specializers[t] = e.specialized[t].get;
            this.states = wl(e.states, Uint32Array), this.data = wl(e.stateData), this.goto = wl(e.goto);
            let a = Object.keys(e.topRules).map((t => e.topRules[t][1]));
            this.nodeSet = new qi(n.map(((t, n) => Wi.define({
                name: n >= this.minRepeatTerm ? void 0 : t,
                id: n,
                props: r[n],
                top: a.indexOf(n) > -1,
                error: 0 == n,
                skipped: e.skippedNodes && e.skippedNodes.indexOf(n) > -1
            })))), this.maxTerm = e.maxTerm, this.tokenizers = e.tokenizers.map((e => "number" == typeof e ? new xl(t, e) : e)), this.topRules = e.topRules, this.nested = (e.nested || []).map((([e, t, n, r]) => ({
                name: e,
                value: t,
                end: new xl(wl(n), 0),
                placeholder: r
            }))), this.dialects = e.dialects || {}, this.dynamicPrecedences = e.dynamicPrecedences || null, this.tokenPrecTable = e.tokenPrec, this.termNames = e.termNames || null, this.maxNode = this.nodeSet.types.length - 1, this.dialect = this.parseDialect(), this.top = this.topRules[Object.keys(this.topRules)[0]]
        }
        parse(e, t = 0, n = {}) {
            "string" == typeof e && (e = Mi(e));
            let r = new Wl(this, e, t, n);
            for (;;) {
                let e = r.advance();
                if (e) return e
            }
        }
        startParse(e, t = 0, n = {}) {
            return "string" == typeof e && (e = Mi(e)), new Wl(this, e, t, n)
        }
        getGoto(e, t, n = !1) {
            let r = this.goto;
            if (t >= r[0]) return -1;
            for (let i = r[t + 1];;) {
                let t = r[i++],
                    a = 1 & t,
                    o = r[i++];
                if (a && n) return o;
                for (let n = i + (t >> 1); i < n; i++)
                    if (r[i] == e) return o;
                if (a) return -1
            }
        }
        hasAction(e, t) {
            let n = this.data;
            for (let r = 0; r < 2; r++)
                for (let i, a = this.stateSlot(e, r ? 2 : 1);; a += 3) {
                    if (65535 == (i = n[a])) {
                        if (1 != n[a + 1]) {
                            if (2 == n[a + 1]) return Il(n, a + 2);
                            break
                        }
                        i = n[a = Il(n, a + 2)]
                    }
                    if (i == t || 0 == i) return Il(n, a + 1)
                }
            return 0
        }
        stateSlot(e, t) {
            return this.states[6 * e + t]
        }
        stateFlag(e, t) {
            return (this.stateSlot(e, 0) & t) > 0
        }
        findNested(e) {
            let t = this.stateSlot(e, 0);
            return 4 & t ? this.nested[t >> 10] : null
        }
        validAction(e, t) {
            if (t == this.stateSlot(e, 4)) return !0;
            for (let n = this.stateSlot(e, 1);; n += 3) {
                if (65535 == this.data[n]) {
                    if (1 != this.data[n + 1]) return !1;
                    n = Il(this.data, n + 2)
                }
                if (t == Il(this.data, n + 1)) return !0
            }
        }
        nextStates(e) {
            let t = [];
            for (let n = this.stateSlot(e, 1);; n += 3) {
                if (65535 == this.data[n]) {
                    if (1 != this.data[n + 1]) break;
                    n = Il(this.data, n + 2)
                }
                if (0 == (1 & this.data[n + 2])) {
                    let e = this.data[n + 1];
                    t.some(((t, n) => 1 & n && t == e)) || t.push(this.data[n], e)
                }
            }
            return t
        }
        overrides(e, t) {
            let n = Ul(this.data, this.tokenPrecTable, t);
            return n < 0 || Ul(this.data, this.tokenPrecTable, e) < n
        }
        configure(e) {
            let t = Object.assign(Object.create(El.prototype), this);
            if (e.props && (t.nodeSet = this.nodeSet.extend(...e.props)), e.top) {
                let n = this.topRules[e.top];
                if (!n) throw new RangeError(`Invalid top rule name ${e.top}`);
                t.top = n
            }
            return e.tokenizers && (t.tokenizers = this.tokenizers.map((t => {
                let n = e.tokenizers.find((e => e.from == t));
                return n ? n.to : t
            }))), e.dialect && (t.dialect = this.parseDialect(e.dialect)), e.nested && (t.nested = this.nested.map((t => Object.prototype.hasOwnProperty.call(e.nested, t.name) ? {
                name: t.name,
                value: e.nested[t.name],
                end: t.end,
                placeholder: t.placeholder
            } : t))), null != e.strict && (t.strict = e.strict), null != e.bufferLength && (t.bufferLength = e.bufferLength), t
        }
        getName(e) {
            return this.termNames ? this.termNames[e] : String(e <= this.maxNode && this.nodeSet.types[e].name || e)
        }
        get eofTerm() {
            return this.maxNode + 1
        }
        get hasNested() {
            return this.nested.length > 0
        }
        get topNode() {
            return this.nodeSet.types[this.top[1]]
        }
        dynamicPrecedence(e) {
            let t = this.dynamicPrecedences;
            return null == t ? 0 : t[e] || 0
        }
        parseDialect(e) {
            if (this.cachedDialect && this.cachedDialect.source == e) return this.cachedDialect;
            let t = Object.keys(this.dialects),
                n = t.map((() => !1));
            if (e)
                for (let r of e.split(" ")) {
                    let e = t.indexOf(r);
                    e >= 0 && (n[e] = !0)
                }
            let r = null;
            for (let e = 0; e < t.length; e++)
                if (!n[e])
                    for (let n, i = this.dialects[t[e]]; 65535 != (n = this.data[i++]);)(r || (r = new Uint8Array(this.maxTerm + 1)))[n] = 1;
            return this.cachedDialect = new Yl(e, n, r)
        }
        static deserialize(e) {
            return new El(e)
        }
    }

    function Il(e, t) {
        return e[t] | e[t + 1] << 16
    }

    function Ul(e, t, n) {
        for (let r, i = t; 65535 != (r = e[i]); i++)
            if (r == n) return i - t;
        return -1
    }
    const Vl = {
            area: !0,
            base: !0,
            br: !0,
            col: !0,
            command: !0,
            embed: !0,
            frame: !0,
            hr: !0,
            img: !0,
            input: !0,
            keygen: !0,
            link: !0,
            meta: !0,
            param: !0,
            source: !0,
            track: !0,
            wbr: !0,
            menuitem: !0
        },
        jl = {
            dd: !0,
            li: !0,
            optgroup: !0,
            option: !0,
            p: !0,
            rp: !0,
            rt: !0,
            tbody: !0,
            td: !0,
            tfoot: !0,
            th: !0,
            tr: !0
        },
        Al = {
            dd: {
                dd: !0,
                dt: !0
            },
            dt: {
                dd: !0,
                dt: !0
            },
            li: {
                li: !0
            },
            option: {
                option: !0,
                optgroup: !0
            },
            optgroup: {
                optgroup: !0
            },
            p: {
                address: !0,
                article: !0,
                aside: !0,
                blockquote: !0,
                dir: !0,
                div: !0,
                dl: !0,
                fieldset: !0,
                footer: !0,
                form: !0,
                h1: !0,
                h2: !0,
                h3: !0,
                h4: !0,
                h5: !0,
                h6: !0,
                header: !0,
                hgroup: !0,
                hr: !0,
                menu: !0,
                nav: !0,
                ol: !0,
                p: !0,
                pre: !0,
                section: !0,
                table: !0,
                ul: !0
            },
            rp: {
                rp: !0,
                rt: !0
            },
            rt: {
                rp: !0,
                rt: !0
            },
            tbody: {
                tbody: !0,
                tfoot: !0
            },
            td: {
                td: !0,
                th: !0
            },
            tfoot: {
                tbody: !0
            },
            th: {
                td: !0,
                th: !0
            },
            thead: {
                tbody: !0,
                tfoot: !0
            },
            tr: {
                tr: !0
            }
        };

    function Cl(e) {
        return 45 == e || 46 == e || 58 == e || e >= 65 && e <= 90 || 95 == e || e >= 97 && e <= 122 || e >= 161
    }

    function Gl(e) {
        return 9 == e || 10 == e || 13 == e || 32 == e
    }
    let Ll = null,
        Nl = null,
        Dl = 0;

    function Ml(e, t) {
        if (Dl == t && Nl == e) return Ll;
        let n = e.get(t);
        for (; Gl(n);) n = e.get(++t);
        let r = t;
        for (; Cl(n);) n = e.get(++t);
        return Nl = e, Dl = t, Ll = t > r ? e.read(r, t).toLowerCase() : n == Bl || n == Fl ? void 0 : null
    }
    const Bl = 63,
        Fl = 33;

    function Hl(e, t) {
        this.name = e, this.parent = t, this.hash = t ? t.hash : 0;
        for (let t = 0; t < e.length; t++) this.hash += (this.hash << 4) + e.charCodeAt(t) + (e.charCodeAt(t) << 8)
    }
    const Jl = new Zl({
            start: null,
            shift: (e, t, n, r) => 1 == t ? new Hl(Ml(n, r.pos) || "", e) : e,
            reduce: (e, t) => 11 == t && e ? e.parent : e,
            reuse(e, t, n, r) {
                let i = t.type.id;
                return 1 == i || 12 == i ? new Hl(Ml(n, r.pos - t.length + 1) || "", e) : e
            },
            hash: e => e ? e.hash : 0,
            strict: !1
        }),
        Kl = new Pl(((e, t, n) => {
            let r, i = t.start,
                a = e.get(i);
            if (a < 0 && n.context && t.accept(34, t.start), 60 != a) return;
            i++, (r = 47 == e.get(i)) && i++;
            let o = Ml(e, i);
            if (void 0 === o) return;
            if (!o) return t.accept(r ? 4 : 1, i);
            let s = n.context ? n.context.name : null;
            if (r) {
                if (o == s) return t.accept(2, i);
                if (s && jl[s]) return t.accept(34, t.start);
                if (n.dialectEnabled(0)) return t.accept(2, i);
                for (let e = n.context; e; e = e.parent)
                    if (e.name == o) return;
                t.accept(3, i)
            } else s && Al[s] && Al[s][o] ? t.accept(34, t.start) : t.accept(1, i)
        })),
        ec = new Pl(((e, t, n) => {
            let r = e.get(t.start),
                i = t.start + 1;
            if (47 == r) {
                if (62 != e.get(i)) return;
                i++
            } else if (62 != r) return;
            n.context && Vl[n.context.name] && t.accept(5, i)
        })),
        tc = new Pl(((e, t) => {
            let n = t.start,
                r = 0;
            for (;;) {
                let t = e.get(n);
                if (t < 0) break;
                if (n++, t == "--\x3e".charCodeAt(r)) {
                    if (r++, 3 == r) {
                        n -= 3;
                        break
                    }
                } else r = 0
            }
            n > t.start && t.accept(35, n)
        })),
        nc = /^<\/?\s*([\.\-\:\w\xa1-\uffff]+)/;

    function rc(e) {
        let t = nc.exec(e);
        return t ? t[1].toLowerCase() : null
    }

    function ic(e) {
        let t = nc.exec(e),
            n = {};
        if (t) {
            let r, i = /\s*([\.\-\:\w\xa1-\uffff]+)\s*(?:=\s*(?:"([^"]*)"|'([^']*)'|([^\s=<>"'/]+)))?/g;
            for (i.lastIndex = t.index + t[0].length; r = i.exec(e);) n[r[1]] = r[4] || r[3] || r[2] || r[1]
        }
        return n
    }

    function ac(e) {
        return t => rc(t) == e
    }

    function oc(e) {
        let t = null;
        for (let n of e) t || (t = Object.create(null)), (t[n.tag] || (t[n.tag] = [])).push({
            attrs: n.attrs,
            value: {
                filterEnd: ac(n.tag),
                startParse: n.parser.startParse.bind(n.parser)
            }
        });
        return function(e, n) {
            let r, i, a = e.read(n.ruleStart, n.pos),
                o = rc(a);
            if (!o) return null;
            if (t && (r = t[o]))
                for (let e of r)
                    if (!e.attrs || e.attrs(i || (i = ic(a)))) return e.value;
            return "script" == o || "textarea" == o || "style" == o ? {
                filterEnd: ac(o),
                wrapType: 26
            } : null
        }
    }
    const sc = oc([]);

    function Oc(e) {
        return {
            elementContent: oc(e)
        }
    }
    const lc = El.deserialize({
            version: 13,
            states: "'OOVOXOOOwQ`O'#ChS!kOXO'#CgOOOP'#Cg'#CgO!uOdO'#CrO!}Q`O'#CtOOOP'#DS'#DSOOOP'#Cw'#CwQVOXOOO#SQrO,59SOOOP'#C{'#C{O#_OXO'#DXO#iOPO,59ROOOS'#C|'#C|O#qOdO,59^OOOP,59^,59^O#yQ`O,59`OOOP-E6u-E6uO$OQrO'#CjOOQQ'#Cx'#CxO$^QrO1G.nOOOP1G.n1G.nOOOP1G.w1G.wOOOP-E6y-E6yO$iQ`O'#CpOOOP1G.m1G.mOOOS-E6z-E6zOOOP1G.x1G.xOOOP1G.z1G.zO$nQ!bO,59UOOQQ-E6v-E6vOOOP7+$Y7+$YOOOP7+$c7+$cO$yQ`O,59[O%OO#tO'#CmO%^O&jO'#CmOOQQ1G.p1G.pOOOP1G.v1G.vOOOO'#Cy'#CyO%lO#tO,59XOOQQ,59X,59XOOOO'#Cz'#CzO%zO&jO,59XOOOO-E6w-E6wOOQQ1G.s1G.sOOOO-E6x-E6x",
            stateData: "&b~OuOS~OPPORTOSUOVUOWUOXUOYUOgUOiVO|SO~O]XO~OPPORTOSUOVUOWUOXUOYUOgUO|SO~OQ{Pr{P~P|Os]O}_O~O]`O~OTfO_bOceO~OQ{Xr{X~P|OQhOriO~Os]O}kO~OclO~O`mOT^X_^Xc^X~OTpO_bOcoO~O]qO~ObtOwrOysO~OcuO~OWvOXvOwxOxvO~OWyOXyOyxOzyO~OWvOXvOw|OxvO~OWyOXyOy|OzyO~OXWY|gi|~",
            goto: "#l|PPPPPPPPPPP}!TP!ZPP!_PP!b!e}P}PP!k!q!w!}#T#ZPPPPP#aPPPP#iXUOQWZXQOQWZTcXdRtmRi[XROQWZQWORaWQdXRndQwrR{wQzsR}zQZQRgZQ^SRj^SVOWTYQZR[Q",
            nodeNames: "⚠ StartTag StartCloseTag StartCloseTag IncompleteCloseTag SelfCloseEndTag Document Text EntityReference CharacterReference InvalidEntity Element OpenTag TagName Attribute AttributeName Is AttributeValue UnquotedAttributeValue EndTag CloseTag SelfClosingTag Comment ProcessingInst MismatchedCloseTag DoctypeDecl RawText",
            maxTerm: 45,
            context: Jl,
            nodeProps: [
                [Ti.closedBy, -2, 1, 2, "EndTag SelfCloseEndTag", 12, "CloseTag"],
                [Ti.openedBy, 5, "StartTag", 19, "StartTag StartCloseTag", 20, "OpenTag"]
            ],
            skippedNodes: [0, 26],
            repeatNodeCount: 6,
            tokenData: "!#b!aR!WOX$kXY)sYZ)sZ]$k]^)s^p$kpq)sqr$krs*zsv$kvw+dwx2yx}$k}!O3f!O!P$k!P!Q7_!Q![$k![!]8u!]!^$k!^!_>b!_!`!!p!`!a8T!a!c$k!c!}8u!}#R$k#R#S8u#S#T$k#T#o8u#o$f$k$f$g&R$g%W$k%W%o8u%o%p$k%p&a8u&a&b$k&b1p8u1p4U$k4U4d8u4d4e$k4e$IS8u$IS$I`$k$I`$Ib8u$Ib$Kh$k$Kh%#t8u%#t&/x$k&/x&Et8u&Et&FV$k&FV;'S8u;'S;:j<t;:j?&r$k?&r?Ah8u?Ah?BY$k?BY?Mn8u?Mn~$k!Z$vcVPbWx`zpOX$kXZ&RZ]$k]^&R^p$kpq&Rqr$krs&qsv$kvw)Rwx'rx!P$k!P!Q&R!Q!^$k!^!_(k!_!a&R!a$f$k$f$g&R$g~$k!R&[VVPx`zpOr&Rrs&qsv&Rwx'rx!^&R!^!_(k!_~&Rq&xTVPzpOv&qwx'Xx!^&q!^!_'g!_~&qP'^RVPOv'Xw!^'X!_~'Xp'lQzpOv'gx~'ga'yUVPx`Or'rrs'Xsv'rw!^'r!^!_(]!_~'r`(bRx`Or(]sv(]w~(]!Q(rTx`zpOr(krs'gsv(kwx(]x~(kW)WXbWOX)RZ])R^p)Rqr)Rsw)Rx!P)R!Q!^)R!a$f)R$g~)R!a*O^VPx`zpu^OX&RXY)sYZ)sZ]&R]^)s^p&Rpq)sqr&Rrs&qsv&Rwx'rx!^&R!^!_(k!_~&R!Z+TTwhVPzpOv&qwx'Xx!^&q!^!_'g!_~&q!Z+kbbWYPOX,sXZ.QZ],s]^.Q^p,sqr,srs.Qst/]tw,swx.Qx!P,s!P!Q.Q!Q!],s!]!^)R!^!a.Q!a$f,s$f$g.Q$g~,s!Z,xbbWOX,sXZ.QZ],s]^.Q^p,sqr,srs.Qst)Rtw,swx.Qx!P,s!P!Q.Q!Q!],s!]!^.i!^!a.Q!a$f,s$f$g.Q$g~,s!R.TTOp.Qqs.Qt!].Q!]!^.d!^~.Q!R.iOW!R!Z.pXbWW!ROX)RZ])R^p)Rqr)Rsw)Rx!P)R!Q!^)R!a$f)R$g~)R!Z/babWOX0gXZ1qZ]0g]^1q^p0gqr0grs1qsw0gwx1qx!P0g!P!Q1q!Q!]0g!]!^)R!^!a1q!a$f0g$f$g1q$g~0g!Z0labWOX0gXZ1qZ]0g]^1q^p0gqr0grs1qsw0gwx1qx!P0g!P!Q1q!Q!]0g!]!^2V!^!a1q!a$f0g$f$g1q$g~0g!R1tSOp1qq!]1q!]!^2Q!^~1q!R2VOX!R!Z2^XbWX!ROX)RZ])R^p)Rqr)Rsw)Rx!P)R!Q!^)R!a$f)R$g~)R!Z3SUyxVPx`Or'rrs'Xsv'rw!^'r!^!_(]!_~'r!]3qeVPbWx`zpOX$kXZ&RZ]$k]^&R^p$kpq&Rqr$krs&qsv$kvw)Rwx'rx}$k}!O5S!O!P$k!P!Q&R!Q!^$k!^!_(k!_!a&R!a$f$k$f$g&R$g~$k!]5_dVPbWx`zpOX$kXZ&RZ]$k]^&R^p$kpq&Rqr$krs&qsv$kvw)Rwx'rx!P$k!P!Q&R!Q!^$k!^!_(k!_!`&R!`!a6m!a$f$k$f$g&R$g~$k!T6xVVPx`zp}QOr&Rrs&qsv&Rwx'rx!^&R!^!_(k!_~&R!X7hXVPx`zpOr&Rrs&qsv&Rwx'rx!^&R!^!_(k!_!`&R!`!a8T!a~&R!X8`VcUVPx`zpOr&Rrs&qsv&Rwx'rx!^&R!^!_(k!_~&R!a9U!Y_S]QVPbWx`zpOX$kXZ&RZ]$k]^&R^p$kpq&Rqr$krs&qsv$kvw)Rwx'rx}$k}!O8u!O!P8u!P!Q&R!Q![8u![!]8u!]!^$k!^!_(k!_!a&R!a!c$k!c!}8u!}#R$k#R#S8u#S#T$k#T#o8u#o$f$k$f$g&R$g$}$k$}%O8u%O%W$k%W%o8u%o%p$k%p&a8u&a&b$k&b1p8u1p4U8u4U4d8u4d4e$k4e$IS8u$IS$I`$k$I`$Ib8u$Ib$Je$k$Je$Jg8u$Jg$Kh$k$Kh%#t8u%#t&/x$k&/x&Et8u&Et&FV$k&FV;'S8u;'S;:j<t;:j?&r$k?&r?Ah8u?Ah?BY$k?BY?Mn8u?Mn~$k!a=PeVPbWx`zpOX$kXZ&RZ]$k]^&R^p$kpq&Rqr$krs&qsv$kvw)Rwx'rx!P$k!P!Q&R!Q!^$k!^!_(k!_!a&R!a$f$k$f$g&R$g;=`$k;=`<%l8u<%l~$k!R>iWx`zpOq(kqr?Rrs'gsv(kwx(]x!a(k!a!bKj!b~(k!R?YZx`zpOr(krs'gsv(kwx(]x}(k}!O?{!O!f(k!f!gAR!g#W(k#W#XGz#X~(k!R@SVx`zpOr(krs'gsv(kwx(]x}(k}!O@i!O~(k!R@rTx`zp|POr(krs'gsv(kwx(]x~(k!RAYVx`zpOr(krs'gsv(kwx(]x!q(k!q!rAo!r~(k!RAvVx`zpOr(krs'gsv(kwx(]x!e(k!e!fB]!f~(k!RBdVx`zpOr(krs'gsv(kwx(]x!v(k!v!wBy!w~(k!RCQVx`zpOr(krs'gsv(kwx(]x!{(k!{!|Cg!|~(k!RCnVx`zpOr(krs'gsv(kwx(]x!r(k!r!sDT!s~(k!RD[Vx`zpOr(krs'gsv(kwx(]x!g(k!g!hDq!h~(k!RDxWx`zpOrDqrsEbsvDqvwEvwxFfx!`Dq!`!aGb!a~DqqEgTzpOvEbvxEvx!`Eb!`!aFX!a~EbPEyRO!`Ev!`!aFS!a~EvPFXOiPqF`QzpiPOv'gx~'gaFkVx`OrFfrsEvsvFfvwEvw!`Ff!`!aGQ!a~FfaGXRx`iPOr(]sv(]w~(]!RGkTx`zpiPOr(krs'gsv(kwx(]x~(k!RHRVx`zpOr(krs'gsv(kwx(]x#c(k#c#dHh#d~(k!RHoVx`zpOr(krs'gsv(kwx(]x#V(k#V#WIU#W~(k!RI]Vx`zpOr(krs'gsv(kwx(]x#h(k#h#iIr#i~(k!RIyVx`zpOr(krs'gsv(kwx(]x#m(k#m#nJ`#n~(k!RJgVx`zpOr(krs'gsv(kwx(]x#d(k#d#eJ|#e~(k!RKTVx`zpOr(krs'gsv(kwx(]x#X(k#X#YDq#Y~(k!RKqWx`zpOrKjrsLZsvKjvwLowxNPx!aKj!a!b! g!b~KjqL`TzpOvLZvxLox!aLZ!a!bM^!b~LZPLrRO!aLo!a!bL{!b~LoPMORO!`Lo!`!aMX!a~LoPM^OgPqMcTzpOvLZvxLox!`LZ!`!aMr!a~LZqMyQzpgPOv'gx~'gaNUVx`OrNPrsLosvNPvwLow!aNP!a!bNk!b~NPaNpVx`OrNPrsLosvNPvwLow!`NP!`!a! V!a~NPa! ^Rx`gPOr(]sv(]w~(]!R! nWx`zpOrKjrsLZsvKjvwLowxNPx!`Kj!`!a!!W!a~Kj!R!!aTx`zpgPOr(krs'gsv(kwx(]x~(k!V!!{V`SVPx`zpOr&Rrs&qsv&Rwx'rx!^&R!^!_(k!_~&R",
            tokenizers: [Kl, ec, tc, 0, 1, 2, 3, 4, 5],
            topRules: {
                Document: [0, 6]
            },
            nested: [
                ["elementContent", sc, "%S~RP!^!_U~XP!P!Q[~_dXY[YZ[]^[pq[![!]!m!c!}!m#R#S!m#T#o!m%W%o!m%p&a!m&b1p!m4U4d!m4e$IS!m$I`$Ib!m$Kh%#t!m&/x&Et!m&FV;'S!m;'S;:j$|?&r?Ah!m?BY?Mn!m~!pkXY$eYZ$e]^$epq$e}!O!m!O!P!m!Q![!m![!]!m!`!a$w!c!}!m#R#S!m#T#o!m$}%O!m%W%o!m%p&a!m&b1p!m1p4U!m4U4d!m4e$IS!m$I`$Ib!m$Je$Jg!m$Kh%#t!m&/x&Et!m&FV;'S!m;'S;:j$|?&r?Ah!m?BY?Mn!m~$hTXY$eYZ$e]^$epq$e!`!a$w~$|Oq~~%PP;=`<%l!m", 43]
            ],
            dialects: {
                noMatch: 0
            },
            tokenPrec: 240
        }),
        cc = [9, 10, 11, 12, 13, 32, 133, 160, 5760, 8192, 8193, 8194, 8195, 8196, 8197, 8198, 8199, 8200, 8201, 8202, 8232, 8233, 8239, 8287, 12288];

    function uc(e) {
        return e >= 65 && e <= 90 || e >= 97 && e <= 122 || e >= 161
    }

    function dc(e) {
        return e >= 48 && e <= 57
    }
    const pc = new Pl(((e, t) => {
            let n = t.start,
                r = n,
                i = !1;
            for (;;) {
                let a = e.get(r);
                if (!(uc(a) || 45 == a || 95 == a || i && dc(a))) {
                    i && t.accept(40 == a ? 93 : 94, r);
                    break
                }!i && (45 != a || r > n) && (i = !0), r++
            }
        })),
        hc = new Pl(((e, t) => {
            if (cc.includes(e.get(t.start - 1))) {
                let n = e.get(t.start);
                (uc(n) || 95 == n || 35 == n || 46 == n || 91 == n || 58 == n || 45 == n) && t.accept(92, t.start)
            }
        })),
        fc = new Pl(((e, t) => {
            let {
                start: n
            } = t;
            if (!cc.includes(e.get(n - 1))) {
                let r = e.get(n);
                if (37 == r && t.accept(1, n + 1), uc(r)) {
                    let r = n + 1;
                    for (; uc(e.get(r));) r++;
                    t.accept(1, r)
                }
            }
        })),
        mc = {
            __proto__: null,
            not: 30,
            url: 64,
            "url-prefix": 64,
            domain: 64,
            regexp: 64,
            selector: 132
        },
        gc = {
            __proto__: null,
            "@import": 112,
            "@media": 136,
            "@charset": 140,
            "@namespace": 144,
            "@keyframes": 150,
            "@supports": 162
        },
        Qc = {
            __proto__: null,
            not: 126,
            only: 126,
            from: 156,
            to: 158
        },
        $c = El.deserialize({
            version: 13,
            states: "7WOYQ[OOOOQP'#Cc'#CcOOQP'#Cb'#CbO!ZQ[O'#CeO!}QXO'#C`O#UQ[O'#CgO#aQ[O'#DOO#fQ[O'#DSOOQP'#Eb'#EbO#kQdO'#DdO$SQ[O'#DqO#kQdO'#DsO$eQ[O'#DuO$pQ[O'#DxO$uQ[O'#EOO%TQ[O'#EQOOQS'#Ea'#EaOOQS'#ER'#ERQYQ[OOOOQP'#Cf'#CfOOQP,59P,59PO!ZQ[O,59PO%[Q[O'#ESO%vQWO,58zO&OQ[O,59RO#aQ[O,59jO#fQ[O,59nO%[Q[O,59rO%[Q[O,59tO%[Q[O,59uO'[Q[O'#D_OOQS,58z,58zOOQP'#Cj'#CjOOQO'#Cp'#CpOOQP,59R,59RO'cQWO,59RO'hQWO,59ROOQP'#DQ'#DQOOQP,59j,59jOOQO'#DU'#DUO'mQ`O,59nOOQS'#Cr'#CrO#kQdO'#CsO'uQvO'#CuO(|QtO,5:OOOQO'#Cz'#CzO'hQWO'#CyO)bQWO'#C{OOQS'#Ef'#EfOOQO'#Dg'#DgO)gQ[O'#DnO)uQWO'#EhO$uQ[O'#DlO*TQWO'#DoOOQO'#Ei'#EiO%yQWO,5:]O*YQpO,5:_OOQS'#Dw'#DwO*bQWO,5:aO*gQ[O,5:aOOQO'#Dz'#DzO*oQWO,5:dO*tQWO,5:jO*|QWO,5:lOOQS-E8P-E8POOQP1G.k1G.kO+pQXO,5:nOOQO-E8Q-E8QOOQS1G.f1G.fOOQP1G.m1G.mO'cQWO1G.mO'hQWO1G.mOOQP1G/U1G/UO+}Q`O1G/YO,hQXO1G/^O-OQXO1G/`O-fQXO1G/aO-|QXO'#CcO.qQWO'#D`OOQS,59y,59yO.vQWO,59yO/OQ[O,59yO/VQ[O'#CnO/^QdO'#CqOOQP1G/Y1G/YO#kQdO1G/YO/eQpO,59_OOQS,59a,59aO#kQdO,59cO/mQWO1G/jOOQS,59e,59eO/rQ!bO,59gO/zQWO'#DgO0VQWO,5:SO0[QWO,5:YO$uQ[O,5:UO$uQ[O'#EXO0dQWO,5;SO0oQWO,5:WO%[Q[O,5:ZOOQS1G/w1G/wOOQS1G/y1G/yOOQS1G/{1G/{O1QQWO1G/{O1VQdO'#D{OOQS1G0O1G0OOOQS1G0U1G0UOOQS1G0W1G0WOOQP7+$X7+$XOOQP7+$t7+$tO#kQdO7+$tO#kQdO,59zO1eQ[O'#EWO1oQWO1G/eOOQS1G/e1G/eO1oQWO1G/eO1wQXO'#EdO2OQWO,59YO2TQtO'#ETO2uQdO'#EeO3PQWO,59]O3UQpO7+$tOOQS1G.y1G.yOOQS1G.}1G.}OOQS7+%U7+%UO3^QWO1G/RO#kQdO1G/nOOQO1G/t1G/tOOQO1G/p1G/pO3cQWO,5:sOOQO-E8V-E8VO3qQXO1G/uOOQS7+%g7+%gO3xQYO'#CuO%yQWO'#EYO4QQdO,5:gOOQS,5:g,5:gO4`QpO<<H`O4hQtO1G/fOOQO,5:r,5:rO4{Q[O,5:rOOQO-E8U-E8UOOQS7+%P7+%PO5VQWO7+%PO5_QWO,5;OOOQP1G.t1G.tOOQS-E8R-E8RO#kQdO'#EUO5gQWO,5;POOQT1G.w1G.wOOQP<<H`<<H`OOQS7+$m7+$mO5oQdO7+%YOOQO7+%a7+%aOOQS,5:t,5:tOOQS-E8W-E8WOOQS1G0R1G0ROOQPAN=zAN=zO5vQtO'#EVO#kQdO'#EVO6nQdO7+%QOOQO7+%Q7+%QOOQO1G0^1G0^OOQS<<Hk<<HkO7OQdO,5:pOOQO-E8S-E8SOOQO<<Ht<<HtO7YQtO,5:qOOQS-E8T-E8TOOQO<<Hl<<Hl",
            stateData: "8W~O#SOSQOS~OTWOWWO[TO]TOsUOwVO!X_O!YXO!fYO!hZO!j[O!m]O!s^O#QPO#VRO~O#QcO~O[hO]hOcfOsiOwjO{kO!OmO#OlO#VeO~O!QnO~P!`O_sO#PqO#QpO~O#QuO~O#QwO~OazOh!QOj!QOp!PO#P}O#QyO#Z{O~Oa!SO!a!UO!d!VO#Q!RO!Q#[P~Oj![Op!PO#Q!ZO~O#Q!^O~Oa!SO!a!UO!d!VO#Q!RO~O!V#[P~P$SOTWOWWO[TO]TOsUOwVO#QPO#VRO~OcfO!QnO~O_!hO#PqO#QpO~OTWOWWO[TO]TOsUOwVO!X_O!YXO!fYO!hZO!j[O!m]O!s^O#Q!oO#VRO~O!P!qO~P&ZOa!tO~Oa!uO~Ou!vOy!wO~OP!yOaiXliX!ViX!aiX!diX#QiX`iXciXhiXjiXpiX#PiX#ZiXuiX!PiX!UiX~Oa!SOl!zO!a!UO!d!VO#Q!RO!V#[P~Oa!}O~Oa!SO!a!UO!d!VO#Q#OO~Oc#SO!_#RO!Q#[X!V#[X~Oa#VO~Ol!zO!V#XO~O!V#YO~Oj#ZOp!PO~O!Q#[O~O!QnO!_#RO~O!QnO!V#_O~O[hO]hOsiOwjO{kO!OmO#OlO#VeO~Oc!va!Q!va`!va~P+UOu#aOy#bO~O[hO]hOsiOwjO#VeO~Oczi{zi!Ozi!Qzi#Ozi`zi~P,VOc|i{|i!O|i!Q|i#O|i`|i~P,VOc}i{}i!O}i!Q}i#O}i`}i~P,VO[VX[!TX]VXcVXsVXwVX{VX!OVX!QVX#OVX#VVX~O[#cO~O!P#fO!V#dO~O!P#fO~P&ZO`#WP~P%[O`#XP~P#kO`#nOl!zO~O!V#pO~Oj#qOq#qO~O[!]X`!ZX!_!ZX~O[#rO~O`#sO!_#RO~Oc#SO!Q#[a!V#[a~O!_#ROc!`a!Q!`a!V!`a`!`a~O!V#xO~O!P#|O!p#zO!q#zO#Z#yO~O!P!zX!V!zX~P&ZO!P$SO!V#dO~O`#WX~P!`O`$VO~Ol!zO`!wXa!wXc!wXh!wXj!wXp!wX#P!wX#Q!wX#Z!wX~Oc$XO`#XX~P#kO`$ZO~Ol!zOu$[O~O`$]O~O!_#ROc!{a!Q!{a!V!{a~O`$_O~P+UOP!yO!QiX~O!P$bO!p#zO!q#zO#Z#yO~Ol!zOu$cO~Oc$eOl!zO!U$gO!P!Si!V!Si~P#kO!P!za!V!za~P&ZO!P$iO!V#dO~OcfO`#Wa~Oc$XO`#Xa~O`$lO~P#kOl!zOa!yXc!yXh!yXj!yXp!yX!P!yX!U!yX!V!yX#P!yX#Q!yX#Z!yX~Oc$eO!U$oO!P!Sq!V!Sq~P#kO`!xac!xa~P#kOl!zOa!yac!yah!yaj!yap!ya!P!ya!U!ya!V!ya#P!ya#Q!ya#Z!ya~Oq#Zl!Ol~",
            goto: "+}#^PPPP#_P#g#uP#g$T#gPP$ZPPP$aP$g$m$v$vP%YP$vP$v%p&SPP#gP&lP#gP&rP#gP#g#gPPP&x'['hPP#_PP'n'n'x'nP'nP'n'nP#_P#_P#_P'{#_P(O(RPP#_P#_(U(d(n(|)S)Y)d)jPPPPPP)p)xP*d*g*jP+`+i]`Obn!s#d$QiWObfklmn!s!t#V#d$QiQObfklmn!s!t#V#d$QQdRR!ceQrTR!ghQ!gsR#`!hQtTR!ihQ!gtQ!|!OR#`!iq!QXZz!u!w!z#b#c#k#r$O$X$^$e$f$jp!QXZz!u!w!z#b#c#k#r$O$X$^$e$f$jT#z#[#{q!OXZz!u!w!z#b#c#k#r$O$X$^$e$f$jp!QXZz!u!w!z#b#c#k#r$O$X$^$e$f$jQ![[R#Z!]QvUR!jiQxVR!kjQoSQ!fgQ#W!XQ#^!`Q#_!aR$`#zQ!rnQ#g!sQ$P#dR$h$QX!pn!s#d$Qa!WY^_|!S!U#R#SR#P!SR!][R!_]R#]!_QbOU!bb!s$QQ!snR$Q#dQgSS!eg$UR$U#hQ#k!uU$W#k$^$jQ$^#rR$j$XQ$Y#kR$k$YQ$f$OR$n$fQ#e!rS$R#e$TR$T#gQ#T!TR#v#TQ#{#[R$a#{]aObn!s#d$Q[SObn!s#d$QQ!dfQ!lkQ!mlQ!nmQ#h!tR#w#VR#i!tR#l!uQ|XQ!YZQ!xz[#j!u#k#r$X$^$jQ#m!wQ#o!zQ#}#bQ$O#cS$d$O$fR$m$eQ!XYQ!a_R!{|U!TY_|Q!`^Q#Q!SQ#U!UQ#t#RR#u#S",
            nodeNames: "⚠ Unit Comment StyleSheet RuleSet UniversalSelector TagSelector TagName NestingSelector ClassSelector ClassName PseudoClassSelector : :: PseudoClassName not ) ( ArgList , PseudoClassName ArgList ValueName ParenthesizedValue ColorLiteral NumberLiteral StringLiteral BinaryExpression BinOp CallExpression Callee CallLiteral CallTag ParenthesizedContent IdSelector # IdName ] AttributeSelector [ AttributeName MatchOp ChildSelector ChildOp DescendantSelector SiblingSelector SiblingOp } { Block Declaration PropertyName Important ; ImportStatement AtKeyword import KeywordQuery FeatureQuery FeatureName BinaryQuery LogicOp UnaryQuery UnaryQueryOp ParenthesizedQuery SelectorQuery callee MediaStatement media CharsetStatement charset NamespaceStatement namespace NamespaceName KeyframesStatement keyframes KeyframeName KeyframeList from to SupportsStatement supports AtRule",
            maxTerm: 105,
            nodeProps: [
                [Ti.openedBy, 16, "(", 47, "{"],
                [Ti.closedBy, 17, ")", 48, "}"]
            ],
            skippedNodes: [0, 2],
            repeatNodeCount: 8,
            tokenData: "Bj~R![OX$wX^%]^p$wpq%]qr(crs+}st,otu2Uuv$wvw2rwx2}xy3jyz3uz{3z{|4_|}8u}!O9Q!O!P9i!P!Q9z!Q![<U![!]<y!]!^=i!^!_$w!_!`=t!`!a>P!a!b$w!b!c>o!c!}$w!}#O?{#O#P$w#P#Q@W#Q#R2U#R#T$w#T#U@c#U#c$w#c#dAb#d#o$w#o#pAq#p#q2U#q#rA|#r#sBX#s#y$w#y#z%]#z$f$w$f$g%]$g#BY$w#BY#BZ%]#BZ$IS$w$IS$I_%]$I_$I|$w$I|$JO%]$JO$JT$w$JT$JU%]$JU$KV$w$KV$KW%]$KW&FU$w&FU&FV%]&FV~$wW$zQOy%Qz~%QW%VQqWOy%Qz~%Q~%bf#S~OX%QX^&v^p%Qpq&vqy%Qz#y%Q#y#z&v#z$f%Q$f$g&v$g#BY%Q#BY#BZ&v#BZ$IS%Q$IS$I_&v$I_$I|%Q$I|$JO&v$JO$JT%Q$JT$JU&v$JU$KV%Q$KV$KW&v$KW&FU%Q&FU&FV&v&FV~%Q~&}f#S~qWOX%QX^&v^p%Qpq&vqy%Qz#y%Q#y#z&v#z$f%Q$f$g&v$g#BY%Q#BY#BZ&v#BZ$IS%Q$IS$I_&v$I_$I|%Q$I|$JO&v$JO$JT%Q$JT$JU&v$JU$KV%Q$KV$KW&v$KW&FU%Q&FU&FV&v&FV~%Q^(fSOy%Qz#]%Q#]#^(r#^~%Q^(wSqWOy%Qz#a%Q#a#b)T#b~%Q^)YSqWOy%Qz#d%Q#d#e)f#e~%Q^)kSqWOy%Qz#c%Q#c#d)w#d~%Q^)|SqWOy%Qz#f%Q#f#g*Y#g~%Q^*_SqWOy%Qz#h%Q#h#i*k#i~%Q^*pSqWOy%Qz#T%Q#T#U*|#U~%Q^+RSqWOy%Qz#b%Q#b#c+_#c~%Q^+dSqWOy%Qz#h%Q#h#i+p#i~%Q^+wQ!UUqWOy%Qz~%Q~,QUOY+}Zr+}rs,ds#O+}#O#P,i#P~+}~,iOj~~,lPO~+}_,tWsPOy%Qz!Q%Q!Q![-^![!c%Q!c!i-^!i#T%Q#T#Z-^#Z~%Q^-cWqWOy%Qz!Q%Q!Q![-{![!c%Q!c!i-{!i#T%Q#T#Z-{#Z~%Q^.QWqWOy%Qz!Q%Q!Q![.j![!c%Q!c!i.j!i#T%Q#T#Z.j#Z~%Q^.qWhUqWOy%Qz!Q%Q!Q![/Z![!c%Q!c!i/Z!i#T%Q#T#Z/Z#Z~%Q^/bWhUqWOy%Qz!Q%Q!Q![/z![!c%Q!c!i/z!i#T%Q#T#Z/z#Z~%Q^0PWqWOy%Qz!Q%Q!Q![0i![!c%Q!c!i0i!i#T%Q#T#Z0i#Z~%Q^0pWhUqWOy%Qz!Q%Q!Q![1Y![!c%Q!c!i1Y!i#T%Q#T#Z1Y#Z~%Q^1_WqWOy%Qz!Q%Q!Q![1w![!c%Q!c!i1w!i#T%Q#T#Z1w#Z~%Q^2OQhUqWOy%Qz~%QY2XSOy%Qz!_%Q!_!`2e!`~%QY2lQyQqWOy%Qz~%QX2wQWPOy%Qz~%Q~3QUOY2}Zw2}wx,dx#O2}#O#P3d#P~2}~3gPO~2}_3oQaVOy%Qz~%Q~3zO`~_4RSTPlSOy%Qz!_%Q!_!`2e!`~%Q_4fUlS!OPOy%Qz!O%Q!O!P4x!P!Q%Q!Q![7_![~%Q^4}SqWOy%Qz!Q%Q!Q![5Z![~%Q^5bWqW#ZUOy%Qz!Q%Q!Q![5Z![!g%Q!g!h5z!h#X%Q#X#Y5z#Y~%Q^6PWqWOy%Qz{%Q{|6i|}%Q}!O6i!O!Q%Q!Q![6z![~%Q^6nSqWOy%Qz!Q%Q!Q![6z![~%Q^7RSqW#ZUOy%Qz!Q%Q!Q![6z![~%Q^7fYqW#ZUOy%Qz!O%Q!O!P8U!P!Q%Q!Q![7_![!g%Q!g!h5z!h#X%Q#X#Y5z#Y~%Q^8]WqW#ZUOy%Qz!Q%Q!Q![8U![!g%Q!g!h5z!h#X%Q#X#Y5z#Y~%Q_8zQcVOy%Qz~%Q^9VUlSOy%Qz!O%Q!O!P4x!P!Q%Q!Q![7_![~%Q_9nS#VPOy%Qz!Q%Q!Q![5Z![~%Q~:PRlSOy%Qz{:Y{~%Q~:_SqWOy:Yyz:kz{;`{~:Y~:nROz:kz{:w{~:k~:zTOz:kz{:w{!P:k!P!Q;Z!Q~:k~;`OQ~~;eUqWOy:Yyz:kz{;`{!P:Y!P!Q;w!Q~:Y~<OQQ~qWOy%Qz~%Q^<ZY#ZUOy%Qz!O%Q!O!P8U!P!Q%Q!Q![7_![!g%Q!g!h5z!h#X%Q#X#Y5z#Y~%QX=OS[POy%Qz![%Q![!]=[!]~%QX=cQ]PqWOy%Qz~%Q_=nQ!VVOy%Qz~%QY=yQyQOy%Qz~%QX>US{POy%Qz!`%Q!`!a>b!a~%QX>iQ{PqWOy%Qz~%QX>rUOy%Qz!c%Q!c!}?U!}#T%Q#T#o?U#o~%QX?]Y!XPqWOy%Qz}%Q}!O?U!O!Q%Q!Q![?U![!c%Q!c!}?U!}#T%Q#T#o?U#o~%QX@QQwPOy%Qz~%Q^@]QuUOy%Qz~%QX@fSOy%Qz#b%Q#b#c@r#c~%QX@wSqWOy%Qz#W%Q#W#XAT#X~%QXA[Q!_PqWOy%Qz~%QXAeSOy%Qz#f%Q#f#gAT#g~%QXAvQ!QPOy%Qz~%Q_BRQ!PVOy%Qz~%QZB^S!OPOy%Qz!_%Q!_!`2e!`~%Q",
            tokenizers: [hc, fc, pc, 0, 1, 2, 3],
            topRules: {
                StyleSheet: [0, 3]
            },
            specialized: [{
                term: 93,
                get: e => mc[e] || -1
            }, {
                term: 55,
                get: e => gc[e] || -1
            }, {
                term: 94,
                get: e => Qc[e] || -1
            }],
            tokenPrec: 1060
        });
    let bc = null;

    function xc() {
        if (!bc && "object" == typeof document && document.body) {
            let e = [];
            for (let t in document.body.style) /[A-Z]|^-|^(item|length)$/.test(t) || e.push(t);
            bc = e.sort().map((e => ({
                type: "property",
                label: e
            })))
        }
        return bc || []
    }
    const Pc = ["active", "after", "before", "checked", "default", "disabled", "empty", "enabled", "first-child", "first-letter", "first-line", "first-of-type", "focus", "hover", "in-range", "indeterminate", "invalid", "lang", "last-child", "last-of-type", "link", "not", "nth-child", "nth-last-child", "nth-last-of-type", "nth-of-type", "only-of-type", "only-child", "optional", "out-of-range", "placeholder", "read-only", "read-write", "required", "root", "selection", "target", "valid", "visited"].map((e => ({
            type: "class",
            label: e
        }))),
        wc = ["above", "absolute", "activeborder", "additive", "activecaption", "after-white-space", "ahead", "alias", "all", "all-scroll", "alphabetic", "alternate", "always", "antialiased", "appworkspace", "asterisks", "attr", "auto", "auto-flow", "avoid", "avoid-column", "avoid-page", "avoid-region", "axis-pan", "background", "backwards", "baseline", "below", "bidi-override", "blink", "block", "block-axis", "bold", "bolder", "border", "border-box", "both", "bottom", "break", "break-all", "break-word", "bullets", "button", "button-bevel", "buttonface", "buttonhighlight", "buttonshadow", "buttontext", "calc", "capitalize", "caps-lock-indicator", "caption", "captiontext", "caret", "cell", "center", "checkbox", "circle", "cjk-decimal", "clear", "clip", "close-quote", "col-resize", "collapse", "color", "color-burn", "color-dodge", "column", "column-reverse", "compact", "condensed", "contain", "content", "contents", "content-box", "context-menu", "continuous", "copy", "counter", "counters", "cover", "crop", "cross", "crosshair", "currentcolor", "cursive", "cyclic", "darken", "dashed", "decimal", "decimal-leading-zero", "default", "default-button", "dense", "destination-atop", "destination-in", "destination-out", "destination-over", "difference", "disc", "discard", "disclosure-closed", "disclosure-open", "document", "dot-dash", "dot-dot-dash", "dotted", "double", "down", "e-resize", "ease", "ease-in", "ease-in-out", "ease-out", "element", "ellipse", "ellipsis", "embed", "end", "ethiopic-abegede-gez", "ethiopic-halehame-aa-er", "ethiopic-halehame-gez", "ew-resize", "exclusion", "expanded", "extends", "extra-condensed", "extra-expanded", "fantasy", "fast", "fill", "fill-box", "fixed", "flat", "flex", "flex-end", "flex-start", "footnotes", "forwards", "from", "geometricPrecision", "graytext", "grid", "groove", "hand", "hard-light", "help", "hidden", "hide", "higher", "highlight", "highlighttext", "horizontal", "hsl", "hsla", "hue", "icon", "ignore", "inactiveborder", "inactivecaption", "inactivecaptiontext", "infinite", "infobackground", "infotext", "inherit", "initial", "inline", "inline-axis", "inline-block", "inline-flex", "inline-grid", "inline-table", "inset", "inside", "intrinsic", "invert", "italic", "justify", "keep-all", "landscape", "large", "larger", "left", "level", "lighter", "lighten", "line-through", "linear", "linear-gradient", "lines", "list-item", "listbox", "listitem", "local", "logical", "loud", "lower", "lower-hexadecimal", "lower-latin", "lower-norwegian", "lowercase", "ltr", "luminosity", "manipulation", "match", "matrix", "matrix3d", "medium", "menu", "menutext", "message-box", "middle", "min-intrinsic", "mix", "monospace", "move", "multiple", "multiple_mask_images", "multiply", "n-resize", "narrower", "ne-resize", "nesw-resize", "no-close-quote", "no-drop", "no-open-quote", "no-repeat", "none", "normal", "not-allowed", "nowrap", "ns-resize", "numbers", "numeric", "nw-resize", "nwse-resize", "oblique", "opacity", "open-quote", "optimizeLegibility", "optimizeSpeed", "outset", "outside", "outside-shape", "overlay", "overline", "padding", "padding-box", "painted", "page", "paused", "perspective", "pinch-zoom", "plus-darker", "plus-lighter", "pointer", "polygon", "portrait", "pre", "pre-line", "pre-wrap", "preserve-3d", "progress", "push-button", "radial-gradient", "radio", "read-only", "read-write", "read-write-plaintext-only", "rectangle", "region", "relative", "repeat", "repeating-linear-gradient", "repeating-radial-gradient", "repeat-x", "repeat-y", "reset", "reverse", "rgb", "rgba", "ridge", "right", "rotate", "rotate3d", "rotateX", "rotateY", "rotateZ", "round", "row", "row-resize", "row-reverse", "rtl", "run-in", "running", "s-resize", "sans-serif", "saturation", "scale", "scale3d", "scaleX", "scaleY", "scaleZ", "screen", "scroll", "scrollbar", "scroll-position", "se-resize", "self-start", "self-end", "semi-condensed", "semi-expanded", "separate", "serif", "show", "single", "skew", "skewX", "skewY", "skip-white-space", "slide", "slider-horizontal", "slider-vertical", "sliderthumb-horizontal", "sliderthumb-vertical", "slow", "small", "small-caps", "small-caption", "smaller", "soft-light", "solid", "source-atop", "source-in", "source-out", "source-over", "space", "space-around", "space-between", "space-evenly", "spell-out", "square", "start", "static", "status-bar", "stretch", "stroke", "stroke-box", "sub", "subpixel-antialiased", "svg_masks", "super", "sw-resize", "symbolic", "symbols", "system-ui", "table", "table-caption", "table-cell", "table-column", "table-column-group", "table-footer-group", "table-header-group", "table-row", "table-row-group", "text", "text-bottom", "text-top", "textarea", "textfield", "thick", "thin", "threeddarkshadow", "threedface", "threedhighlight", "threedlightshadow", "threedshadow", "to", "top", "transform", "translate", "translate3d", "translateX", "translateY", "translateZ", "transparent", "ultra-condensed", "ultra-expanded", "underline", "unidirectional-pan", "unset", "up", "upper-latin", "uppercase", "url", "var", "vertical", "vertical-text", "view-box", "visible", "visibleFill", "visiblePainted", "visibleStroke", "visual", "w-resize", "wait", "wave", "wider", "window", "windowframe", "windowtext", "words", "wrap", "wrap-reverse", "x-large", "x-small", "xor", "xx-large", "xx-small"].map((e => ({
            type: "keyword",
            label: e
        }))).concat(["aliceblue", "antiquewhite", "aqua", "aquamarine", "azure", "beige", "bisque", "black", "blanchedalmond", "blue", "blueviolet", "brown", "burlywood", "cadetblue", "chartreuse", "chocolate", "coral", "cornflowerblue", "cornsilk", "crimson", "cyan", "darkblue", "darkcyan", "darkgoldenrod", "darkgray", "darkgreen", "darkkhaki", "darkmagenta", "darkolivegreen", "darkorange", "darkorchid", "darkred", "darksalmon", "darkseagreen", "darkslateblue", "darkslategray", "darkturquoise", "darkviolet", "deeppink", "deepskyblue", "dimgray", "dodgerblue", "firebrick", "floralwhite", "forestgreen", "fuchsia", "gainsboro", "ghostwhite", "gold", "goldenrod", "gray", "grey", "green", "greenyellow", "honeydew", "hotpink", "indianred", "indigo", "ivory", "khaki", "lavender", "lavenderblush", "lawngreen", "lemonchiffon", "lightblue", "lightcoral", "lightcyan", "lightgoldenrodyellow", "lightgray", "lightgreen", "lightpink", "lightsalmon", "lightseagreen", "lightskyblue", "lightslategray", "lightsteelblue", "lightyellow", "lime", "limegreen", "linen", "magenta", "maroon", "mediumaquamarine", "mediumblue", "mediumorchid", "mediumpurple", "mediumseagreen", "mediumslateblue", "mediumspringgreen", "mediumturquoise", "mediumvioletred", "midnightblue", "mintcream", "mistyrose", "moccasin", "navajowhite", "navy", "oldlace", "olive", "olivedrab", "orange", "orangered", "orchid", "palegoldenrod", "palegreen", "paleturquoise", "palevioletred", "papayawhip", "peachpuff", "peru", "pink", "plum", "powderblue", "purple", "rebeccapurple", "red", "rosybrown", "royalblue", "saddlebrown", "salmon", "sandybrown", "seagreen", "seashell", "sienna", "silver", "skyblue", "slateblue", "slategray", "snow", "springgreen", "steelblue", "tan", "teal", "thistle", "tomato", "turquoise", "violet", "wheat", "white", "whitesmoke", "yellow", "yellowgreen"].map((e => ({
            type: "constant",
            label: e
        })))),
        kc = ["a", "abbr", "address", "article", "aside", "b", "bdi", "bdo", "blockquote", "body", "br", "button", "canvas", "caption", "cite", "code", "col", "colgroup", "dd", "del", "details", "dfn", "dialog", "div", "dl", "dt", "em", "figcaption", "figure", "footer", "form", "header", "hgroup", "h1", "h2", "h3", "h4", "h5", "h6", "hr", "html", "i", "iframe", "img", "input", "ins", "kbd", "label", "legend", "li", "main", "meter", "nav", "ol", "output", "p", "pre", "ruby", "section", "select", "small", "source", "span", "strong", "sub", "summary", "sup", "table", "tbody", "td", "template", "textarea", "tfoot", "th", "thead", "tr", "u", "ul"].map((e => ({
            type: "type",
            label: e
        }))),
        yc = /^[\w-]*/,
        vc = ea.define({
            parser: $c.configure({
                props: [Qa.add({
                    Declaration: va()
                }), Sa.add({
                    Block: _a
                }), ks({
                    "import charset namespace keyframes": Fs.definitionKeyword,
                    "media supports": Fs.controlKeyword,
                    "from to": Fs.keyword,
                    NamespaceName: Fs.namespace,
                    KeyframeName: Fs.labelName,
                    TagName: Fs.typeName,
                    ClassName: Fs.className,
                    PseudoClassName: Fs.constant(Fs.className),
                    not: Fs.operatorKeyword,
                    IdName: Fs.labelName,
                    "FeatureName PropertyName AttributeName": Fs.propertyName,
                    NumberLiteral: Fs.number,
                    KeywordQuery: Fs.keyword,
                    UnaryQueryOp: Fs.operatorKeyword,
                    callee: Fs.keyword,
                    "CallTag ValueName": Fs.atom,
                    Callee: Fs.variableName,
                    Unit: Fs.unit,
                    "UniversalSelector NestingSelector": Fs.definitionOperator,
                    AtKeyword: Fs.keyword,
                    MatchOp: Fs.compareOperator,
                    "ChildOp SiblingOp, LogicOp": Fs.logicOperator,
                    BinOp: Fs.arithmeticOperator,
                    Important: Fs.modifier,
                    Comment: Fs.blockComment,
                    ParenthesizedContent: Fs.special(Fs.name),
                    ColorLiteral: Fs.color,
                    StringLiteral: Fs.string,
                    ":": Fs.punctuation,
                    "PseudoOp #": Fs.derefOperator,
                    "; ,": Fs.separator,
                    "( )": Fs.paren,
                    "[ ]": Fs.squareBracket,
                    "{ }": Fs.brace
                })]
            }),
            languageData: {
                commentTokens: {
                    block: {
                        open: "/*",
                        close: "*/"
                    }
                },
                indentOnInput: /^\s*\}$/
            }
        }),
        Sc = vc.data.of({
            autocomplete: e => {
                let {
                    state: t,
                    pos: n
                } = e, r = ta(t).resolve(n, -1);
                if ("PropertyName" == r.name) return {
                    from: r.from,
                    options: xc(),
                    span: yc
                };
                if ("ValueName" == r.name) return {
                    from: r.from,
                    options: wc,
                    span: yc
                };
                if ("PseudoClassName" == r.name) return {
                    from: r.from,
                    options: Pc,
                    span: yc
                };
                if ("TagName" == r.name) {
                    for (let {
                            parent: e
                        } = r; e; e = e.parent)
                        if ("Block" == e.name) return {
                            from: r.from,
                            options: xc(),
                            span: yc
                        };
                    return {
                        from: r.from,
                        options: kc,
                        span: yc
                    }
                }
                if (!e.explicit) return null;
                let i = r.resolve(n),
                    a = i.childBefore(n);
                return a && ":" == a.name && "PseudoClassSelector" == i.name ? {
                    from: n,
                    options: Pc,
                    span: yc
                } : a && ":" == a.name && "Declaration" == i.name || "ArgList" == i.name ? {
                    from: n,
                    options: wc,
                    span: yc
                } : "Block" == i.name ? {
                    from: n,
                    options: xc(),
                    span: yc
                } : null
            }
        });

    function _c() {
        return new ca(vc, Sc)
    }
    var Xc = Object.freeze({
        __proto__: null,
        css: _c,
        cssCompletion: Sc,
        cssLanguage: vc
    });
    const Tc = 270,
        Rc = [10, 13, 8232, 8233],
        Wc = [9, 11, 12, 32, 133, 160, 5760, 8192, 8193, 8194, 8195, 8196, 8197, 8198, 8199, 8200, 8201, 8202, 8239, 8287, 12288];

    function qc(e, t) {
        for (let n = t - 1; n >= 0; n--) {
            let t = e.get(n);
            if (Rc.indexOf(t) > -1) return !0;
            if (Wc.indexOf(t) < 0) break
        }
        return !1
    }
    const Yc = new Pl(((e, t, n) => {
            let r = t.start,
                i = e.get(r);
            (125 == i || -1 == i || qc(e, r)) && n.canShift(273) && t.accept(273, t.start)
        }), {
            contextual: !0,
            fallback: !0
        }),
        zc = new Pl(((e, t, n) => {
            let r = t.start,
                i = e.get(r++);
            if (!(Wc.indexOf(i) > -1 || Rc.indexOf(i) > -1)) {
                if (47 == i) {
                    let t = e.get(r++);
                    if (47 == t || 42 == t) return
                }
                125 != i && 59 != i && -1 != i && !qc(e, t.start) && n.canShift(269) && t.accept(269, t.start)
            }
        }), {
            contextual: !0
        }),
        Zc = new Pl(((e, t, n) => {
            let r = t.start,
                i = e.get(r);
            if ((43 == i || 45 == i) && i == e.get(r + 1)) {
                let i = !qc(e, t.start) && n.canShift(1);
                t.accept(i ? 1 : 2, r + 2)
            }
        }), {
            contextual: !0
        }),
        Ec = new Pl(((e, t) => {
            let n = t.start,
                r = !1;
            for (;;) {
                let i = e.get(n++);
                if (i < 0) {
                    n - 1 > t.start && t.accept(Tc, n - 1);
                    break
                }
                if (96 == i) {
                    n == t.start + 1 ? t.accept(272, n) : t.accept(Tc, n - 1);
                    break
                }
                if (123 == i && r) {
                    n == t.start + 2 ? t.accept(271, n) : t.accept(Tc, n - 2);
                    break
                }
                if (10 == i && n > t.start + 1) {
                    t.accept(Tc, n);
                    break
                }
                92 == i && n != e.length && n++, r = 36 == i
            }
        }));
    const Ic = {
            __proto__: null,
            export: 16,
            as: 21,
            from: 25,
            default: 30,
            async: 35,
            function: 36,
            this: 46,
            true: 54,
            false: 54,
            void: 58,
            typeof: 62,
            null: 76,
            super: 78,
            new: 112,
            await: 129,
            yield: 131,
            delete: 132,
            class: 142,
            extends: 144,
            public: 181,
            private: 181,
            protected: 181,
            readonly: 183,
            in: 202,
            instanceof: 204,
            const: 206,
            import: 238,
            keyof: 289,
            unique: 293,
            infer: 299,
            is: 333,
            abstract: 353,
            implements: 355,
            type: 357,
            let: 360,
            var: 362,
            interface: 369,
            enum: 373,
            namespace: 379,
            module: 381,
            declare: 385,
            global: 389,
            for: 410,
            of: 419,
            while: 422,
            with: 426,
            do: 430,
            if: 434,
            else: 436,
            switch: 440,
            case: 446,
            try: 452,
            catch: 454,
            finally: 456,
            return: 460,
            throw: 464,
            break: 468,
            continue: 472,
            debugger: 476
        },
        Uc = {
            __proto__: null,
            async: 99,
            get: 101,
            set: 103,
            public: 151,
            private: 151,
            protected: 151,
            static: 153,
            abstract: 155,
            readonly: 159,
            new: 337
        },
        Vc = {
            __proto__: null,
            "<": 119
        },
        jc = El.deserialize({
            version: 13,
            states: "$,lO]QYOOO&zQ!LdO'#CgO'ROSO'#DRO)ZQYO'#DWO)kQYO'#DcO)rQYO'#DmO-iQYO'#DsOOQO'#ET'#ETO-|QWO'#ESO.RQWO'#ESO0QQ!LdO'#IgO2hQ!LdO'#IhO3UQWO'#EqO3ZQpO'#FWOOQ!LS'#Ey'#EyO3cO!bO'#EyO3qQWO'#F_O4{QWO'#F^OOQ!LS'#Ih'#IhOOQ!LQ'#Ig'#IgOOQQ'#JR'#JRO5QQWO'#HeO5VQ!LYO'#HfOOQQ'#I['#I[OOQQ'#Hg'#HgQ]QYOOO)rQYO'#DeO5_QWO'#GRO5dQ#tO'#ClO5rQWO'#ERO5}Q#tO'#ExO6iQWO'#GRO6nQWO'#GVO6yQWO'#GVO7XQWO'#GYO7XQWO'#GZO7XQWO'#G]O5_QWO'#G`O7xQWO'#GcO9WQWO'#CcO9hQWO'#GpO9pQWO'#GvO9pQWO'#GxO]QYO'#GzO9pQWO'#G|O9pQWO'#HPO9uQWO'#HVO9zQ!LZO'#HZO)rQYO'#H]O:VQ!LZO'#H_O:bQ!LZO'#HaO5VQ!LYO'#HcO)rQYO'#IjOOOS'#Hh'#HhO:mOSO,59mOOQ!LS,59m,59mO=OQbO'#CgO=YQYO'#HiO=gQWO'#IlO?fQbO'#IlO'^QYO'#IlO?mQWO,59rO@TQ&jO'#D]O@|QWO'#ETOAZQWO'#IvOAfQWO'#IuOAnQWO,5:qOAsQWO'#ItOAzQWO'#DtO5dQ#tO'#EROBYQWO'#EROBeQ`O'#ExOOQ!LS,59},59}OBmQYO,59}ODkQ!LdO,5:XOEXQWO,5:_OErQ!LYO'#IsO6nQWO'#IrOEyQWO'#IrOFRQWO,5:pOFWQWO'#IrOFfQYO,5:nOHcQWO'#EPOIjQWO,5:nOJvQWO'#DgOJ}QYO'#DlOKXQ&jO,5:wO)rQYO,5:wOOQQ'#Ei'#EiOOQQ'#Ek'#EkO)rQYO,5:xO)rQYO,5:xO)rQYO,5:xO)rQYO,5:xO)rQYO,5:xO)rQYO,5:xO)rQYO,5:xO)rQYO,5:xO)rQYO,5:xO)rQYO,5:xO)rQYO,5:xOOQQ'#Eo'#EoOK^QYO,5;YOOQ!LS,5;_,5;_OOQ!LS,5;`,5;`OMZQWO,5;`OOQ!LS,5;a,5;aO)rQYO'#HsOM`Q!LYO,5;zOMzQWO,5:xO)rQYO,5;]ONdQpO'#IzONRQpO'#IzONkQpO'#IzON|QpO,5;hOOQO,5;r,5;rO! [QYO'#FYOOOO'#Hr'#HrO3cO!bO,5;eO! cQpO'#F[OOQ!LS,5;e,5;eO!!PQ,UO'#CqOOQ!LS'#Ct'#CtO!!dQWO'#CtO!!zQ#tO,5;wO!#RQWO,5;yO!$[QWO'#FiO!$iQWO'#FjO!$nQWO'#FnO!%pQ&jO'#FrO!&cQ,UO'#IeOOQ!LS'#Ie'#IeO!&mQWO'#IdO!&{QWO'#IcOOQ!LS'#Cr'#CrOOQ!LS'#Cx'#CxO!'TQWO'#CzOIoQWO'#FaOIoQWO'#FcO!'YQWO'#FeOIeQWO'#FfO!'_QWO'#FlOIoQWO'#FqO!'dQWO'#EUO!'{QWO,5;xO]QYO,5>POOQQ'#I_'#I_OOQQ,5>Q,5>QOOQQ-E;e-E;eO!)wQ!LdO,5:POOQ!LQ'#Co'#CoO!*hQ#tO,5<mOOQO'#Ce'#CeO!*yQWO'#CpO!+RQ!LYO'#I`O4{QWO'#I`O9uQWO,59WO!+aQpO,59WO!+iQ#tO,59WO5dQ#tO,59WO!+tQWO,5:nO!+|QWO'#GoO!,UQWO'#JVO)rQYO,5;bOKXQ&jO,5;dO!,^QWO,5=YO!,cQWO,5=YO!,hQWO,5=YO5VQ!LYO,5=YO5_QWO,5<mO!,vQWO'#EVO!-XQ&jO'#EWOOQ!LQ'#It'#ItO!-jQ!LYO'#JSO5VQ!LYO,5<qO7XQWO,5<wOOQO'#Cq'#CqO!-uQpO,5<tO!-}Q#tO,5<uO!.YQWO,5<wO!._Q`O,5<zO9uQWO'#GeO5_QWO'#GgO!.gQWO'#GgO5dQ#tO'#GjO!.lQWO'#GjOOQQ,5<},5<}O!.qQWO'#GkO!.yQWO'#ClO!/OQWO,58}O!/YQWO,58}O!1XQYO,58}OOQQ,58},58}O!1fQ!LYO,58}O)rQYO,58}O!1qQYO'#GrOOQQ'#Gs'#GsOOQQ'#Gt'#GtO]QYO,5=[O!2RQWO,5=[O)rQYO'#DsO]QYO,5=bO]QYO,5=dO!2WQWO,5=fO]QYO,5=hO!2]QWO,5=kO!2bQYO,5=qOOQQ,5=u,5=uO)rQYO,5=uO5VQ!LYO,5=wOOQQ,5=y,5=yO!6`QWO,5=yOOQQ,5={,5={O!6`QWO,5={OOQQ,5=},5=}O!6eQ`O,5?UOOOS-E;f-E;fOOQ!LS1G/X1G/XO!6jQbO,5>TO)rQYO,5>TOOQO-E;g-E;gO!6tQWO,5?WO!6|QbO,5?WO!7TQWO,5?aOOQ!LS1G/^1G/^O!7]QpO'#DPOOQO'#In'#InO)rQYO'#InO!7zQpO'#InO!8iQpO'#D^O!8zQ&jO'#D^O!;SQYO'#D^O!;ZQWO'#ImO!;cQWO,59wO!;hQWO'#EXO!;vQWO'#IwO!<OQWO,5:rO!<fQ&jO'#D^O)rQYO,5?bO!<pQWO'#HnO!7TQWO,5?aOOQ!LQ1G0]1G0]O!=vQ&jO'#DwOOQ!LS,5:`,5:`O)rQYO,5:`OHcQWO,5:`O!=}QWO,5:`O9uQWO,5:mO!+aQpO,5:mO!+iQ#tO,5:mO5dQ#tO,5:mOOQ!LS1G/i1G/iOOQ!LS1G/y1G/yOOQ!LQ'#EO'#EOO)rQYO,5?_O!>YQ!LYO,5?_O!>kQ!LYO,5?_O!>rQWO,5?^O!>zQWO'#HpO!>rQWO,5?^OOQ!LQ1G0[1G0[O6nQWO,5?^OOQ!LS1G0Y1G0YO!?fQ!LdO1G0YO!@VQ!LbO,5:kOOQ!LS'#Fh'#FhO!@sQ!LdO'#IeOFfQYO1G0YO!BrQ#tO'#IoO!B|QWO,5:RO!CRQbO'#IpO)rQYO'#IpO!C]QWO,5:WOOQ!LS'#DP'#DPOOQ!LS1G0c1G0cO!CbQWO1G0cO!EsQ!LdO1G0dO!EzQ!LdO1G0dO!H_Q!LdO1G0dO!HfQ!LdO1G0dO!JmQ!LdO1G0dO!KQQ!LdO1G0dO!MqQ!LdO1G0dO!MxQ!LdO1G0dO#!]Q!LdO1G0dO#!dQ!LdO1G0dO#$XQ!LdO1G0dO#'RQ7^O'#CgO#(|Q7^O1G0tO#*wQ7^O'#IhOOQ!LS1G0z1G0zO#+[Q!LdO,5>_OOQ!LQ-E;q-E;qO#+{Q!LdO1G0dOOQ!LS1G0d1G0dO#-}Q!LdO1G0wO#.nQpO,5;jO#.sQpO,5;kO#.xQpO'#FRO#/^QWO'#FQOOQO'#I{'#I{OOQO'#Hq'#HqO#/cQpO1G1SOOQ!LS1G1S1G1SOOQO1G1]1G1]O#/qQ7^O'#IgO#/{QWO,5;tOK^QYO,5;tOOOO-E;p-E;pOOQ!LS1G1P1G1POOQ!LS,5;v,5;vO#0QQpO,5;vOOQ!LS,59`,59`O)rQYO1G1cOKXQ&jO'#HuO#0VQWO,5<[OOQ!LS,5<X,5<XOOQO'#F|'#F|OIoQWO,5<gOOQO'#GO'#GOOIoQWO,5<iOIoQWO,5<kOOQO1G1e1G1eO#0bQ`O'#CoO#0uQ`O,5<TO#0|QWO'#JOO5_QWO'#JOO#1[QWO,5<VOIoQWO,5<UO#1aQ`O'#FhO#1nQ`O'#JPO#1xQWO'#JPOHcQWO'#JPO#1}QWO,5<YOOQ!LQ'#Db'#DbO#2SQWO'#FkO#2_QpO'#FsO!%kQ&jO'#FsO!%kQ&jO'#FuO#2pQWO'#FvO!'_QWO'#FyOOQO'#Hw'#HwO#2uQ&jO,5<^OOQ!LS,5<^,5<^O#2|Q&jO'#FsO#3[Q&jO'#FtO#3dQ&jO'#FtOOQ!LS,5<l,5<lOIoQWO,5?OOIoQWO,5?OO#3iQWO'#HxO#3tQWO,5>}OOQ!LS'#Cg'#CgO#4hQ#tO,59fOOQ!LS,59f,59fO#5ZQ#tO,5;{O#5|Q#tO,5;}O#6WQWO,5<POOQ!LS,5<Q,5<QO#6]QWO,5<WO#6bQ#tO,5<]OFfQYO1G1dO#6rQWO1G1dOOQQ1G3k1G3kOOQ!LS1G/k1G/kOMZQWO1G/kOOQQ1G2X1G2XOHcQWO1G2XO)rQYO1G2XOHcQWO1G2XO#6wQWO1G2XO#7VQWO,59[O#8]QWO'#EPOOQ!LQ,5>z,5>zO#8gQ!LYO,5>zOOQQ1G.r1G.rO9uQWO1G.rO!+aQpO1G.rO!+iQ#tO1G.rO#8uQWO1G0YO#8zQWO'#CgO#9VQWO'#JWO#9_QWO,5=ZO#9dQWO'#JWO#9iQWO'#IQO#9wQWO,5?qO#:PQbO1G0|OOQ!LS1G1O1G1OO5_QWO1G2tO#:WQWO1G2tO#:]QWO1G2tO#:bQWO1G2tOOQQ1G2t1G2tO#:gQ#tO1G2XO6nQWO'#IuO6nQWO'#EXO6nQWO'#HzO#:xQ!LYO,5?nOOQQ1G2]1G2]O!.YQWO1G2cOHcQWO1G2`O#;TQWO1G2`OOQQ1G2a1G2aOHcQWO1G2aO#;YQWO1G2aO#;bQ&jO'#G_OOQQ1G2c1G2cO!%kQ&jO'#H|O!._Q`O1G2fOOQQ1G2f1G2fOOQQ,5=P,5=PO#;jQ#tO,5=RO5_QWO,5=RO#2pQWO,5=UO4{QWO,5=UO!+aQpO,5=UO!+iQ#tO,5=UO5dQ#tO,5=UO#;{QWO'#JUO#<WQWO,5=VOOQQ1G.i1G.iO#<]Q!LYO1G.iO#<hQWO1G.iO!'TQWO1G.iO5VQ!LYO1G.iO#<mQbO,5?sO#<wQWO,5?sO#=SQYO,5=^O#=ZQWO,5=^O6nQWO,5?sOOQQ1G2v1G2vO]QYO1G2vOOQQ1G2|1G2|OOQQ1G3O1G3OO9pQWO1G3QO#=`QYO1G3SO#AWQYO'#HROOQQ1G3V1G3VO9uQWO1G3]O#AeQWO1G3]O5VQ!LYO1G3aOOQQ1G3c1G3cOOQ!LQ'#Fo'#FoO5VQ!LYO1G3eO5VQ!LYO1G3gOOOS1G4p1G4pO#AmQ`O,5;zO#AuQbO1G3oO#BPQWO1G4rO#BXQWO1G4{O#BaQWO,5?YOK^QYO,5:sO6nQWO,5:sO9uQWO,59xOK^QYO,59xO!+aQpO,59xO#BfQ7^O,59xOOQO,5:s,5:sO#BpQ&jO'#HjO#CWQWO,5?XOOQ!LS1G/c1G/cO#C`Q&jO'#HoO#CtQWO,5?cOOQ!LQ1G0^1G0^O!8zQ&jO,59xO#C|QbO1G4|OOQO,5>Y,5>YO6nQWO,5>YOOQO-E;l-E;lO#DWQ!LrO'#D|O!%kQ&jO'#DxOOQO'#Hm'#HmO#DrQ&jO,5:cOOQ!LS,5:c,5:cO#DyQ&jO'#DxO#EXQ&jO'#D|O#EmQ&jO'#D|O!%kQ&jO'#D|O#EwQWO1G/zO#E|Q`O1G/zOOQ!LS1G/z1G/zO)rQYO1G/zOHcQWO1G/zOOQ!LS1G0X1G0XO9uQWO1G0XO!+aQpO1G0XO!+iQ#tO1G0XO#FTQ!LdO1G4yO)rQYO1G4yO#FeQ!LYO1G4yO#FvQWO1G4xO6nQWO,5>[OOQO,5>[,5>[O#GOQWO,5>[OOQO-E;n-E;nO#FvQWO1G4xO#G^Q!LdO,59fO#I]Q!LdO,5;{O#K_Q!LdO,5;}O#MaQ!LdO,5<]OOQ!LS7+%t7+%tO$ iQ!LdO7+%tO$!YQWO'#HkO$!dQWO,5?ZOOQ!LS1G/m1G/mO$!lQYO'#HlO$!yQWO,5?[O$#RQbO,5?[OOQ!LS1G/r1G/rOOQ!LS7+%}7+%}O$#]Q7^O,5:XO)rQYO7+&`O$#gQ7^O,5:POOQO1G1U1G1UOOQO1G1V1G1VO$#tQMhO,5;mOK^QYO,5;lOOQO-E;o-E;oOOQ!LS7+&n7+&nOOQO7+&w7+&wOOOO1G1`1G1`O$$PQWO1G1`OOQ!LS1G1b1G1bO$$UQ!LdO7+&}OOQ!LS,5>a,5>aO$$uQWO,5>aOOQ!LS1G1v1G1vP$$zQWO'#HuPOQ!LS-E;s-E;sO$%kQ#tO1G2RO$&^Q#tO1G2TO$&hQ#tO1G2VOOQ!LS1G1o1G1oO$&oQWO'#HtO$&}QWO,5?jO$&}QWO,5?jO$'VQWO,5?jO$'bQWO,5?jOOQO1G1q1G1qO$'pQ#tO1G1pO$(QQWO'#HvO$(bQWO,5?kOHcQWO,5?kO$(jQ`O,5?kOOQ!LS1G1t1G1tO5VQ!LYO,5<_O5VQ!LYO,5<`O$(tQWO,5<`O#2kQWO,5<`O!+aQpO,5<_O$(yQWO,5<aO5VQ!LYO,5<bO$(tQWO,5<eOOQO-E;u-E;uOOQ!LS1G1x1G1xO!%kQ&jO,5<_O$)RQWO,5<`O!%kQ&jO,5<aO!%kQ&jO,5<`O$)^Q#tO1G4jO$)hQ#tO1G4jOOQO,5>d,5>dOOQO-E;v-E;vOKXQ&jO,59hO)rQYO,59hO$)uQWO1G1kOIoQWO1G1rO$)zQ!LdO7+'OOOQ!LS7+'O7+'OOFfQYO7+'OOOQ!LS7+%V7+%VO$*kQ`O'#JQO#EwQWO7+'sO$*uQWO7+'sO$*}Q`O7+'sOOQQ7+'s7+'sOHcQWO7+'sO)rQYO7+'sOHcQWO7+'sOOQO1G.v1G.vO$+XQ!LbO'#CgO$+iQ!LbO,5<cO$,WQWO,5<cOOQ!LQ1G4f1G4fOOQQ7+$^7+$^O9uQWO7+$^O!+aQpO7+$^OFfQYO7+%tO$,]QWO'#IPO$,hQWO,5?rOOQO1G2u1G2uO5_QWO,5?rOOQO,5>l,5>lOOQO-E<O-E<OOOQ!LS7+&h7+&hO$,pQWO7+(`O5VQ!LYO7+(`O5_QWO7+(`O$,uQWO7+(`O$,zQWO7+'sOOQ!LQ,5>f,5>fOOQ!LQ-E;x-E;xOOQQ7+'}7+'}O$-YQ!LbO7+'zOHcQWO7+'zO$-dQ`O7+'{OOQQ7+'{7+'{OHcQWO7+'{O$-kQWO'#JTO$-vQWO,5<yOOQO,5>h,5>hOOQO-E;z-E;zOOQQ7+(Q7+(QO$.mQ&jO'#GhOOQQ1G2m1G2mOHcQWO1G2mO)rQYO1G2mOHcQWO1G2mO$.tQWO1G2mO$/SQ#tO1G2mO5VQ!LYO1G2pO#2pQWO1G2pO4{QWO1G2pO!+aQpO1G2pO!+iQ#tO1G2pO$/eQWO'#IOO$/pQWO,5?pO$/xQ&jO,5?pOOQ!LQ1G2q1G2qOOQQ7+$T7+$TO$/}QWO7+$TO5VQ!LYO7+$TO$0SQWO7+$TO)rQYO1G5_O)rQYO1G5`O$0XQYO1G2xO$0`QWO1G2xO$0eQYO1G2xO$0lQ!LYO1G5_OOQQ7+(b7+(bO5VQ!LYO7+(lO]QYO7+(nOOQQ'#JZ'#JZOOQQ'#IR'#IRO$0vQYO,5=mOOQQ,5=m,5=mO)rQYO'#HSO$1TQWO'#HUOOQQ7+(w7+(wO$1YQYO7+(wO6nQWO7+(wOOQQ7+({7+({OOQQ7+)P7+)POOQQ7+)R7+)ROOQO1G4t1G4tO$5TQ7^O1G0_O$5_QWO1G0_OOQO1G/d1G/dO$5jQ7^O1G/dO9uQWO1G/dOK^QYO'#D^OOQO,5>U,5>UOOQO-E;h-E;hOOQO,5>Z,5>ZOOQO-E;m-E;mO!+aQpO1G/dOOQO1G3t1G3tO9uQWO,5:dOOQO,5:h,5:hO)rQYO,5:hO$5tQ!LYO,5:hO$6PQ!LYO,5:hO!+aQpO,5:dOOQO-E;k-E;kOOQ!LS1G/}1G/}O!%kQ&jO,5:dO$6_Q!LrO,5:hO$6yQ&jO,5:dO!%kQ&jO,5:hO$7XQ&jO,5:hO$7mQ!LYO,5:hOOQ!LS7+%f7+%fO#EwQWO7+%fO#E|Q`O7+%fOOQ!LS7+%s7+%sO9uQWO7+%sO!+aQpO7+%sO$8RQ!LdO7+*eO)rQYO7+*eOOQO1G3v1G3vO6nQWO1G3vO$8cQWO7+*dO$8kQ!LdO1G2RO$:mQ!LdO1G2TO$<oQ!LdO1G1pO$>wQ#tO,5>VOOQO-E;i-E;iO$?RQbO,5>WO)rQYO,5>WOOQO-E;j-E;jO$?]QWO1G4vO$?eQ7^O1G0YO$AlQ7^O1G0dO$AsQ7^O1G0dO$CtQ7^O1G0dO$C{Q7^O1G0dO$EpQ7^O1G0dO$FTQ7^O1G0dO$HbQ7^O1G0dO$HiQ7^O1G0dO$JjQ7^O1G0dO$JqQ7^O1G0dO$LfQ7^O1G0dO$LyQ!LdO<<IzO$MjQ7^O1G0dO% YQ7^O'#IeO%#VQ7^O1G0wOK^QYO'#FTOOQO'#I|'#I|OOQO1G1X1G1XO%#dQWO1G1WO%#iQ7^O,5>_OOOO7+&z7+&zOOQ!LS1G3{1G3{OIoQWO7+'qO%#sQWO,5>`O5_QWO,5>`OOQO-E;r-E;rO%$RQWO1G5UO%$RQWO1G5UO%$ZQWO1G5UO%$fQ`O,5>bO%$pQWO,5>bOHcQWO,5>bOOQO-E;t-E;tO%$uQ`O1G5VO%%PQWO1G5VOOQO1G1y1G1yOOQO1G1z1G1zO5VQ!LYO1G1zO$(tQWO1G1zO5VQ!LYO1G1yO%%XQWO1G1{OHcQWO1G1{OOQO1G1|1G1|O5VQ!LYO1G2PO!+aQpO1G1yO#2kQWO1G1zO%%^QWO1G1{O%%fQWO1G1zOIoQWO7+*UOOQ!LS1G/S1G/SO%%qQWO1G/SOOQ!LS7+'V7+'VO%%vQ#tO7+'^O%&WQ!LdO<<JjOOQ!LS<<Jj<<JjOHcQWO'#HyO%&wQWO,5?lOOQQ<<K_<<K_OHcQWO<<K_O#EwQWO<<K_O%'PQWO<<K_O%'XQ`O<<K_OHcQWO1G1}OOQQ<<Gx<<GxO9uQWO<<GxO%'cQ!LdO<<I`OOQ!LS<<I`<<I`OOQO,5>k,5>kO%(SQWO,5>kOOQO-E;}-E;}O%(XQWO1G5^O%(aQWO<<KzOOQQ<<Kz<<KzO%(fQWO<<KzO5VQ!LYO<<KzO)rQYO<<K_OHcQWO<<K_OOQQ<<Kf<<KfO$-YQ!LbO<<KfOOQQ<<Kg<<KgO$-dQ`O<<KgO%(kQ&jO'#H{O%(vQWO,5?oOK^QYO,5?oOOQQ1G2e1G2eO#DWQ!LrO'#D|O!%kQ&jO'#GiOOQO'#H}'#H}O%)OQ&jO,5=SOOQQ,5=S,5=SO#3[Q&jO'#D|O%)VQ&jO'#D|O%)kQ&jO'#D|O%)uQ&jO'#GiO%*TQWO7+(XO%*YQWO7+(XO%*bQ`O7+(XOOQQ7+(X7+(XOHcQWO7+(XO)rQYO7+(XOHcQWO7+(XO%*lQWO7+(XOOQQ7+([7+([O5VQ!LYO7+([O#2pQWO7+([O4{QWO7+([O!+aQpO7+([O%*zQWO,5>jOOQO-E;|-E;|OOQO'#Gl'#GlO%+VQWO1G5[O5VQ!LYO<<GoOOQQ<<Go<<GoO%+_QWO<<GoO%+dQWO7+*yO%+iQWO7+*zOOQQ7+(d7+(dO%+nQWO7+(dO%+sQYO7+(dO%+zQWO7+(dO)rQYO7+*yO)rQYO7+*zOOQQ<<LW<<LWOOQQ<<LY<<LYOOQQ-E<P-E<POOQQ1G3X1G3XO%,PQWO,5=nOOQQ,5=p,5=pO9uQWO<<LcO%,UQWO<<LcOK^QYO7+%yOOQO7+%O7+%OO%,ZQ7^O1G4|O9uQWO7+%OOOQO1G0O1G0OO%,eQ!LdO1G0SOOQO1G0S1G0SO)rQYO1G0SO%,oQ!LYO1G0SO9uQWO1G0OO!+aQpO1G0OO%,zQ!LYO1G0SO!%kQ&jO1G0OO%-YQ!LYO1G0SO%-nQ!LrO1G0SO%-xQ&jO1G0OO!%kQ&jO1G0SOOQ!LS<<IQ<<IQOOQ!LS<<I_<<I_O9uQWO<<I_O%.WQ!LdO<<NPOOQO7+)b7+)bO%.hQ!LdO7+'^O%0pQbO1G3rO%0zQ7^O7+%tO%1XQ7^O,59fO%3UQ7^O,5;{O%5RQ7^O,5;}O%7OQ7^O,5<]O%8nQ7^O7+&}O%8{Q7^O7+'OO%9YQWO,5;oOOQO7+&r7+&rO%9_Q#tO<<K]OOQO1G3z1G3zO%9oQWO1G3zO%9zQWO1G3zO%:YQWO7+*pO%:YQWO7+*pOHcQWO1G3|O%:bQ`O1G3|O%:lQWO7+*qOOQO7+'f7+'fO5VQ!LYO7+'fOOQO7+'e7+'eO$(tQWO7+'gO%:tQ`O7+'gOOQO7+'k7+'kO5VQ!LYO7+'eO$(tQWO7+'fO%:{QWO7+'gOHcQWO7+'gO#2kQWO7+'fO%;QQ#tO<<MpOOQ!LS7+$n7+$nO%;[Q`O,5>eOOQO-E;w-E;wO#EwQWOAN@yOOQQAN@yAN@yOHcQWOAN@yO%;fQ!LbO7+'iOOQQAN=dAN=dO5_QWO1G4VO%;sQWO7+*xO5VQ!LYOANAfO%;{QWOANAfOOQQANAfANAfO%<QQWOAN@yO%<YQ`OAN@yOOQQANAQANAQOOQQANARANARO%<dQWO,5>gOOQO-E;y-E;yO%<oQ7^O1G5ZO#2pQWO,5=TO4{QWO,5=TO!+aQpO,5=TOOQO-E;{-E;{OOQQ1G2n1G2nO$6_Q!LrO,5:hO!%kQ&jO,5=TO%<yQ&jO,5=TO%=XQ&jO,5:hOOQQ<<Ks<<KsOHcQWO<<KsO%*TQWO<<KsO%=mQWO<<KsO%=uQ`O<<KsO)rQYO<<KsOHcQWO<<KsOOQQ<<Kv<<KvO5VQ!LYO<<KvO#2pQWO<<KvO4{QWO<<KvO%>PQ&jO1G4UO%>UQWO7+*vOOQQAN=ZAN=ZO5VQ!LYOAN=ZOOQQ<<Ne<<NeOOQQ<<Nf<<NfOOQQ<<LO<<LOO%>^QWO<<LOO%>cQYO<<LOO%>jQWO<<NeO%>oQWO<<NfOOQQ1G3Y1G3YOOQQANA}ANA}O9uQWOANA}O%>tQ7^O<<IeOOQO<<Hj<<HjOOQO7+%n7+%nO%,eQ!LdO7+%nO)rQYO7+%nOOQO7+%j7+%jO9uQWO7+%jO%?OQ!LYO7+%nO!+aQpO7+%jO%?ZQ!LYO7+%nO!%kQ&jO7+%jO%?iQ!LYO7+%nOOQ!LSAN>yAN>yO%?}Q!LdO<<K]O%BVQ7^O<<IzO%BdQ7^O1G1pO%DSQ7^O1G2RO%FPQ7^O1G2TO%G|Q7^O<<JjO%HZQ7^O<<I`OOQO1G1Z1G1ZOOQO7+)f7+)fO%HhQWO7+)fO%HsQWO<<N[O%H{Q`O7+)hOOQO<<KQ<<KQO5VQ!LYO<<KRO$(tQWO<<KROOQO<<KP<<KPO5VQ!LYO<<KQO%IVQ`O<<KRO$(tQWO<<KQOOQQG26eG26eO#EwQWOG26eOOQO7+)q7+)qOOQQG27QG27QO5VQ!LYOG27QOHcQWOG26eOK^QYO1G4RO%I^QWO7+*uO5VQ!LYO1G2oO#2pQWO1G2oO4{QWO1G2oO!+aQpO1G2oO!%kQ&jO1G2oO%-nQ!LrO1G0SO%IfQ&jO1G2oO%*TQWOANA_OOQQANA_ANA_OHcQWOANA_O%ItQWOANA_O%I|Q`OANA_OOQQANAbANAbO5VQ!LYOANAbO#2pQWOANAbOOQO'#Gm'#GmOOQO7+)p7+)pOOQQG22uG22uOOQQANAjANAjO%JWQWOANAjOOQQANDPANDPOOQQANDQANDQO%J]QYOG27iOOQO<<IY<<IYO%,eQ!LdO<<IYOOQO<<IU<<IUO)rQYO<<IYO9uQWO<<IUO%NWQ!LYO<<IYO!+aQpO<<IUO%NcQ!LYO<<IYO%NqQ7^O7+'^OOQO<<MQ<<MQOOQOAN@mAN@mO5VQ!LYOAN@mOOQOAN@lAN@lO$(tQWOAN@mO5VQ!LYOAN@lOOQQLD,PLD,POOQQLD,lLD,lO#EwQWOLD,PO&!aQ7^O7+)mOOQO7+(Z7+(ZO5VQ!LYO7+(ZO#2pQWO7+(ZO4{QWO7+(ZO!+aQpO7+(ZO!%kQ&jO7+(ZOOQQG26yG26yO%*TQWOG26yOHcQWOG26yOOQQG26|G26|O5VQ!LYOG26|OOQQG27UG27UO9uQWOLD-TOOQOAN>tAN>tO%,eQ!LdOAN>tOOQOAN>pAN>pO)rQYOAN>tO9uQWOAN>pO&!kQ!LYOAN>tO&!vQ7^O<<K]OOQOG26XG26XO5VQ!LYOG26XOOQOG26WG26WOOQQ!$( k!$( kOOQO<<Ku<<KuO5VQ!LYO<<KuO#2pQWO<<KuO4{QWO<<KuO!+aQpO<<KuOOQQLD,eLD,eO%*TQWOLD,eOOQQLD,hLD,hOOQQ!$(!o!$(!oOOQOG24`G24`O%,eQ!LdOG24`OOQOG24[G24[O)rQYOG24`OOQOLD+sLD+sOOQOANAaANAaO5VQ!LYOANAaO#2pQWOANAaO4{QWOANAaOOQQ!$(!P!$(!POOQOLD)zLD)zO%,eQ!LdOLD)zOOQOG26{G26{O5VQ!LYOG26{O#2pQWOG26{OOQO!$'Mf!$'MfOOQOLD,gLD,gO5VQ!LYOLD,gOOQO!$(!R!$(!ROK^QYO'#DmO&$fQbO'#IgOK^QYO'#DeO&$mQ!LdO'#CgO&%WQbO'#CgO&%hQYO,5:nOK^QYO,5:xOK^QYO,5:xOK^QYO,5:xOK^QYO,5:xOK^QYO,5:xOK^QYO,5:xOK^QYO,5:xOK^QYO,5:xOK^QYO,5:xOK^QYO,5:xOK^QYO,5:xOK^QYO'#HsO&'eQWO,5;zO&(tQWO,5:xOK^QYO,5;]O!'TQWO'#CzO!'TQWO'#CzOHcQWO'#FaO&'mQWO'#FaOHcQWO'#FcO&'mQWO'#FcOHcQWO'#FqO&'mQWO'#FqOK^QYO,5?bO&%hQYO1G0YO&({Q7^O'#CgOK^QYO1G1cOHcQWO,5<gO&'mQWO,5<gOHcQWO,5<iO&'mQWO,5<iOHcQWO,5<UO&'mQWO,5<UO&%hQYO1G1dOK^QYO7+&`OHcQWO1G1rO&'mQWO1G1rO&%hQYO7+'OO&%hQYO7+%tOHcQWO7+'qO&'mQWO7+'qO&)VQWO'#ESO&)[QWO'#ESO&)dQWO'#EqO&)iQWO'#IvO&)tQWO'#ItO&*PQWO,5:nO&*UQ#tO,5;wO&*]QWO'#FjO&*bQWO'#FjO&*gQWO,5;xO&*oQWO,5:nO&*wQ7^O1G0tO&+OQWO,5<WO&+TQWO,5<WO&+YQWO1G1dO&+_QWO1G0YO&+dQ#tO1G2VO&+kQ#tO1G2VO3qQWO'#F_O4{QWO'#F^OBYQWO'#EROK^QYO,5;YO!'_QWO'#FlO!'_QWO'#FlOIoQWO,5<kOIoQWO,5<k",
            stateData: "&,e~O&}OSSOSTOS~OPTOQTOWwO]bO^gOamOblOgbOiTOjbOkbOmTOoTOtROvbOwbOxbO!OSO!YjO!_UO!bTO!cTO!dTO!eTO!fTO!ikO#ZqO#knO#o]O$voO$xrO$zpO${pO%OsO%QtO%TuO%UuO%WvO%exO%kyO%mzO%o{O%q|O%t}O%z!OO&O!PO&Q!QO&S!RO&U!SO&W!TO'PPO']QO'q`O~OPZXYZX^ZXiZXqZXrZXtZX|ZX![ZX!]ZX!_ZX!eZX!tZX#OcX#RZX#SZX#TZX#UZX#VZX#WZX#XZX#YZX#[ZX#^ZX#`ZX#aZX#fZX&{ZX']ZX'eZX'lZX'mZX~O!W$cX~P$tO&x!VO&y!UO&z!XO~OPTOQTO]bOa!hOb!gOgbOiTOjbOkbOmTOoTOtROvbOwbOxbO!O!`O!YjO!_UO!bTO!cTO!dTO!eTO!fTO!i!fO#k!iO#o]O'P!YO']QO'q`O~O{!^O|!ZOy'`Py'iP~P'^O}!jO~P]OPTOQTO]bOa!hOb!gOgbOiTOjbOkbOmTOoTOtROvbOwbOxbO!O!`O!YjO!_UO!bTO!cTO!dTO!eTO!fTO!i!fO#k!iO#o]O'P8cO']QO'q`O~OPTOQTO]bOa!hOb!gOgbOiTOjbOkbOmTOoTOtROvbOwbOxbO!O!`O!YjO!_UO!bTO!cTO!dTO!eTO!fTO!i!fO#k!iO#o]O']QO'q`O~O{!oO!|!rO!}!oO'P8dO!^'fP~P+oO#O!sO~O!W!tO#O!sO~OP#ZOY#aOi#OOq!xOr!xOt!yO|#_O![#QO!]!vO!_!wO!e#ZO#R!|O#S!}O#T!}O#U!}O#V#PO#W#QO#X#QO#Y#QO#[#RO#^#TO#`#VO#a#WO']QO'e#XO'l!zO'm!{O~O^'ZX&{'ZX!^'ZXy'ZX!O'ZX$w'ZX!W'ZX~P.ZO!t#bO#f#bOP'[XY'[X^'[Xi'[Xq'[Xr'[Xt'[X|'[X!['[X!]'[X!_'[X!e'[X#R'[X#S'[X#T'[X#U'[X#V'[X#W'[X#Y'[X#['[X#^'[X#`'[X#a'[X']'[X'e'[X'l'[X'm'[X~O#X'[X&{'[Xy'[X!^'[X'_'[X!O'[X$w'[X!W'[X~P0kO!t#bO~O#q#cO#x#gO~O!O#hO#o]O#{#iO#}#kO~O]#nOg#zOi#oOj#nOk#nOm#{Oo#|Ot#tO!O#uO!Y$RO!_#rO!}$SO#k$PO$U#}O$W$OO$Z$QO'P#mO'T'VP~O!_$TO~O!W$VO~O^$WO&{$WO~O'P$[O~O!_$TO'P$[O'Q$^O'U$_O~Ob$eO!_$TO'P$[O~O]$nOq$jO!O$gO!_$iO$x$mO'P$[O'Q$^O['yP~O!i$oO~Ot$pO!O$qO'P$[O~Ot$pO!O$qO%Q$uO'P$[O~O'P$vO~O#ZqO$xrO$zpO${pO%OsO%QtO%TuO%UuO~Oa%POb%OO!i$|O$v$}O%Y${O~P7^Oa%SOblO!O%RO!ikO#ZqO$voO$zpO${pO%OsO%QtO%TuO%UuO%WvO~O_%VO!t%YO$x%TO'Q$^O~P8]O!_%ZO!b%_O~O!_%`O~O!OSO~O^$WO&w%hO&{$WO~O^$WO&w%kO&{$WO~O^$WO&w%mO&{$WO~O&x!VO&y!UO&z%qO~OPZXYZXiZXqZXrZXtZX|ZX|cX![ZX!]ZX!_ZX!eZX!tZX!tcX#OcX#RZX#SZX#TZX#UZX#VZX#WZX#XZX#YZX#[ZX#^ZX#`ZX#aZX#fZX']ZX'eZX'lZX'mZX~OyZXycX~P:xO{%sOy&]X|&]X~P)rO|!ZOy'`X~OP#ZOY#aOi#OOq!xOr!xOt!yO|!ZO![#QO!]!vO!_!wO!e#ZO#R!|O#S!}O#T!}O#U!}O#V#PO#W#QO#X#QO#Y#QO#[#RO#^#TO#`#VO#a#WO']QO'e#XO'l!zO'm!{O~Oy'`X~P=oOy%xO~Ot%{O!R&VO!S&OO!T&OO'Q$^O~O]%|Oj%|O{&PO'Y%yO}'aP}'kP~P?rOy'hX|'hX!W'hX!^'hX'e'hX~O!t'hX#O!wX}'hX~P@kO!t&WOy'jX|'jX~O|&XOy'iX~Oy&ZO~O!t#bO~P@kOR&_O!O&[O!j&^O'P$[O~Ob&dO!_$TO'P$[O~Oq$jO!_$iO~O}&eO~P]Oq!xOr!xOt!yO!]!vO!_!wO']QOP!aaY!aai!aa|!aa![!aa!e!aa#R!aa#S!aa#T!aa#U!aa#V!aa#W!aa#X!aa#Y!aa#[!aa#^!aa#`!aa#a!aa'e!aa'l!aa'm!aa~O^!aa&{!aay!aa!^!aa'_!aa!O!aa$w!aa!W!aa~PBtO!^&fO~O!W!tO!t&hO'e&gO|'gX^'gX&{'gX~O!^'gX~PE^O|&lO!^'fX~O!^&nO~Ot$pO!O$qO!}&oO'P$[O~OPTOQTO]bOa!hOb!gOgbOiTOjbOkbOmTOoTOtROvbOwbOxbO!OSO!YjO!_UO!bTO!cTO!dTO!eTO!fTO!i!fO#k!iO#o]O'P8cO']QO'q`O~O]#nOg#zOi#oOj#nOk#nOm#{Oo8uOt#tO!O#uO!Y9wO!_#rO!}8{O#k$PO$U8wO$W8yO$Z$QO'P&sO~O#O&uO~O]#nOg#zOi#oOj#nOk#nOm#{Oo#|Ot#tO!O#uO!Y$RO!_#rO!}$SO#k$PO$U#}O$W$OO$Z$QO'P&sO~O'T'cP~PIoO{&yO!^'dP~P)rO'Y&{O~OP8`OQ8`O]bOa9uOb!gOgbOi8`OjbOkbOm8`Oo8`OtROvbOwbOxbO!O!`O!Y8bO!_UO!b8`O!c8`O!d8`O!e8`O!f8`O!i!fO#k!iO#o]O'P'ZO']QO'q9sO~O!_!wO~O|#_O^$Sa&{$Sa!^$Say$Sa!O$Sa$w$Sa!W$Sa~O#Z'bO~PHcO!W'dO!O'nX#n'nX#q'nX#x'nX~Oq'eO~PNROq'eO!O'nX#n'nX#q'nX#x'nX~O!O'gO#n'kO#q'fO#x'lO~O{'oO~PK^O#q#cO#x'rO~Oq$[Xt$[X!]$[X'e$[X'l$[X'm$[X~OReX|eX!teX'TeX'T$[X~P! kOj'tO~Oq'vOt'wO'e#XO'l'yO'm'{O~O'T'uO~P!!iO'T(OO~O]#nOg#zOi#oOj#nOk#nOm#{Oo8uOt#tO!O#uO!Y9wO!_#rO!}8{O#k$PO$U8wO$W8yO$Z$QO~O{(SO'P(PO!^'rP~P!#WO#O(UO~O{(YO'P(VOy'sP~P!#WO^(cOi(hOt(`O!R(fO!S(_O!T(_O!_(]O!q(gO$n(bO'Q$^O'Y([O~O}(eO~P!${O!]!vOq'XXt'XX'e'XX'l'XX'm'XX|'XX!t'XX~O'T'XX#d'XX~P!%wOR(kO!t(jO|'WX'T'WX~O|(lO'T'VX~O'P(nO~O!_(sO~O!_(]O~Ot$pO{!oO!O$qO!|!rO!}!oO'P$[O!^'fP~O!W!tO#O(wO~OP#ZOY#aOi#OOq!xOr!xOt!yO![#QO!]!vO!_!wO!e#ZO#R!|O#S!}O#T!}O#U!}O#V#PO#W#QO#X#QO#Y#QO#[#RO#^#TO#`#VO#a#WO']QO'e#XO'l!zO'm!{O~O^!Xa|!Xa&{!Xay!Xa!^!Xa'_!Xa!O!Xa$w!Xa!W!Xa~P!(TOR)PO!O&[O!j)OO$w(}O'U$_O~O'P$vO'T'VP~O!W)SO!O'SX^'SX&{'SX~O!_$TO'U$_O~O!_$TO'P$[O'U$_O~O!W!tO#O&uO~O'P)[O}'zP~O|)`O['yX~OY)dO~O[)eO~O!O$gO'P$[O'Q$^O['yP~Ot$pO{)jO!O$qO'P$[Oy'iP~O]&SOj&SO{)kO'Y&{O}'kP~O|)lO^'vX&{'vX~O!t)pO'U$_O~OR)sO!O#uO'U$_O~O!O)uO~Oq)wO!OSO~O!i)|O~Ob*RO~O'P(nO}'xP~Ob$eO~O$xrO'P$vO~P8]OY*XO[*WO~OPTOQTO]bOamOblOgbOiTOjbOkbOmTOoTOtROvbOwbOxbO!YjO!_UO!bTO!cTO!dTO!eTO!fTO!ikO#o]O$voO']QO'q`O~O!O!`O#k!iO'P8cO~P!/bO[*WO^$WO&{$WO~O^*]O#Z*_O$z*_O${*_O~P)rO!_%ZO~O%k*dO~O!O*fO~O%{*iO%|*hOP%yaQ%yaW%ya]%ya^%yaa%yab%yag%yai%yaj%yak%yam%yao%yat%yav%yaw%yax%ya!O%ya!Y%ya!_%ya!b%ya!c%ya!d%ya!e%ya!f%ya!i%ya#Z%ya#k%ya#o%ya$v%ya$x%ya$z%ya${%ya%O%ya%Q%ya%T%ya%U%ya%W%ya%e%ya%k%ya%m%ya%o%ya%q%ya%t%ya%z%ya&O%ya&Q%ya&S%ya&U%ya&W%ya&v%ya'P%ya']%ya'q%ya}%ya%r%ya_%ya%w%ya~O'P*lO~O'_*oO~Oy&]a|&]a~P!(TO|!ZOy'`a~Oy'`a~P=oO|&XOy'ia~O|sX|!UX}sX}!UX!WsX!W!UX!_!UX!tsX'U!UX~O!W*vO!t*uO|!{X|'bX}!{X}'bX!W'bX!_'bX'U'bX~O!W*xO!_$TO'U$_O|!QX}!QX~O]%zOj%zOt%{O'Y([O~OP8`OQ8`O]bOa9uOb!gOgbOi8`OjbOkbOm8`Oo8`OtROvbOwbOxbO!O!`O!Y8bO!_UO!b8`O!c8`O!d8`O!e8`O!f8`O!i!fO#k!iO#o]O']QO'q9sO~O'P9PO~P!9YO|*|O}'aX~O}+OO~O!W*vO!t*uO|!{X}!{X~O|+PO}'kX~O}+RO~O]%zOj%zOt%{O'Q$^O'Y([O~O!S+SO!T+SO~P!<TOt$pO{+VO!O$qO'P$[Oy&bX|&bX~O^+ZO!R+^O!S+YO!T+YO!m+`O!n+_O!o+_O!q+aO'Q$^O'Y([O~O}+]O~P!=UOR+fO!O&[O!j+eO~O!t+lO|'ga!^'ga^'ga&{'ga~O!W!tO~P!>YO|&lO!^'fa~Ot$pO{+oO!O$qO!|+qO!}+oO'P$[O|&dX!^&dX~O^!vi|!vi&{!viy!vi!^!vi'_!vi!O!vi$w!vi!W!vi~P!(TO#O!sa|!sa!^!sa!t!sa!O!sa^!sa&{!say!sa~P!!iO#O'XXP'XXY'XX^'XXi'XXr'XX!['XX!_'XX!e'XX#R'XX#S'XX#T'XX#U'XX#V'XX#W'XX#X'XX#Y'XX#['XX#^'XX#`'XX#a'XX&{'XX']'XX!^'XXy'XX!O'XX$w'XX'_'XX!W'XX~P!%wO|+zO'T'cX~P!!iO'T+|O~O|+}O!^'dX~P!(TO!^,QO~Oy,RO~OP#ZOq!xOr!xOt!yO!]!vO!_!wO!e#ZO']QOY#Qi^#Qii#Qi|#Qi![#Qi#S#Qi#T#Qi#U#Qi#V#Qi#W#Qi#X#Qi#Y#Qi#[#Qi#^#Qi#`#Qi#a#Qi&{#Qi'e#Qi'l#Qi'm#Qiy#Qi!^#Qi'_#Qi!O#Qi$w#Qi!W#Qi~O#R#Qi~P!CgO#R!|O~P!CgOP#ZOq!xOr!xOt!yO!]!vO!_!wO!e#ZO#R!|O#S!}O#T!}O#U!}O']QOY#Qi^#Qi|#Qi![#Qi#V#Qi#W#Qi#X#Qi#Y#Qi#[#Qi#^#Qi#`#Qi#a#Qi&{#Qi'e#Qi'l#Qi'm#Qiy#Qi!^#Qi'_#Qi!O#Qi$w#Qi!W#Qi~Oi#Qi~P!FROi#OO~P!FROP#ZOi#OOq!xOr!xOt!yO!]!vO!_!wO!e#ZO#R!|O#S!}O#T!}O#U!}O#V#PO']QO^#Qi|#Qi#[#Qi#^#Qi#`#Qi#a#Qi&{#Qi'e#Qi'l#Qi'm#Qiy#Qi!^#Qi'_#Qi!O#Qi$w#Qi!W#Qi~OY#Qi![#Qi#W#Qi#X#Qi#Y#Qi~P!HmOY#aO![#QO#W#QO#X#QO#Y#QO~P!HmOP#ZOY#aOi#OOq!xOr!xOt!yO![#QO!]!vO!_!wO!e#ZO#R!|O#S!}O#T!}O#U!}O#V#PO#W#QO#X#QO#Y#QO#[#RO']QO^#Qi|#Qi#^#Qi#`#Qi#a#Qi&{#Qi'e#Qi'm#Qiy#Qi!^#Qi'_#Qi!O#Qi$w#Qi!W#Qi~O'l#Qi~P!KeO'l!zO~P!KeOP#ZOY#aOi#OOq!xOr!xOt!yO![#QO!]!vO!_!wO!e#ZO#R!|O#S!}O#T!}O#U!}O#V#PO#W#QO#X#QO#Y#QO#[#RO#^#TO']QO'l!zO^#Qi|#Qi#`#Qi#a#Qi&{#Qi'e#Qiy#Qi!^#Qi'_#Qi!O#Qi$w#Qi!W#Qi~O'm#Qi~P!NPO'm!{O~P!NPOP#ZOY#aOi#OOq!xOr!xOt!yO![#QO!]!vO!_!wO!e#ZO#R!|O#S!}O#T!}O#U!}O#V#PO#W#QO#X#QO#Y#QO#[#RO#^#TO#`#VO']QO'l!zO'm!{O~O^#Qi|#Qi#a#Qi&{#Qi'e#Qiy#Qi!^#Qi'_#Qi!O#Qi$w#Qi!W#Qi~P#!kOPZXYZXiZXqZXrZXtZX![ZX!]ZX!_ZX!eZX!tZX#OcX#RZX#SZX#TZX#UZX#VZX#WZX#XZX#YZX#[ZX#^ZX#`ZX#aZX#fZX']ZX'eZX'lZX'mZX|ZX}ZX~O#dZX~P#%OOP#ZOY8sOi8hOq!xOr!xOt!yO![8jO!]!vO!_!wO!e#ZO#R8fO#S8gO#T8gO#U8gO#V8iO#W8jO#X8jO#Y8jO#[8kO#^8mO#`8oO#a8pO']QO'e#XO'l!zO'm!{O~O#d,TO~P#'YOP'[XY'[Xi'[Xq'[Xr'[Xt'[X!['[X!]'[X!_'[X!e'[X#R'[X#S'[X#T'[X#U'[X#V'[X#W'[X#Y'[X#['[X#^'[X#`'[X#a'[X']'[X'e'[X'l'[X'm'[X|'[X~O!t8tO#f8tO#X'[X#d'[X}'[X~P#)TO^&ga|&ga&{&ga!^&ga'_&gay&ga!O&ga$w&ga!W&ga~P!(TOP#QiY#Qi^#Qii#Qir#Qi|#Qi![#Qi!]#Qi!_#Qi!e#Qi#R#Qi#S#Qi#T#Qi#U#Qi#V#Qi#W#Qi#X#Qi#Y#Qi#[#Qi#^#Qi#`#Qi#a#Qi&{#Qi']#Qiy#Qi!^#Qi'_#Qi!O#Qi$w#Qi!W#Qi~P!!iO^#ei|#ei&{#eiy#ei!^#ei'_#ei!O#ei$w#ei!W#ei~P!(TO#q,VO~O#q,WO~O!W'dO!t,XO!O#uX#n#uX#q#uX#x#uX~O{,YO~O!O'gO#n,[O#q'fO#x,]O~O|8qO}'ZX~P#'YO},^O~O#x,`O~O],cOj,cOy,dO~O|cX!WcX!^cX!^$[X'ecX~P! kO!^,jO~P!!iO|,kO!W!tO'e&gO!^'rX~O!^,pO~Oy$[X|$[X!W$cX~P! kO|,rOy'sX~P!!iO!W,tO~Oy,vO~O{(SO'P$[O!^'rP~Oi,zO!W!tO!_$TO'U$_O'e&gO~O!W)SO~O}-QO~P!${O!S-RO!T-RO'Q$^O'Y([O~Ot-TO'Y([O~O!q-UO~O'P$vO|&lX'T&lX~O|(lO'T'Va~Oq-ZOr-ZOt-[O'ena'lna'mna|na!tna~O'Tna#dna~P#3|Oq'vOt'wO'e$Ta'l$Ta'm$Ta|$Ta!t$Ta~O'T$Ta#d$Ta~P#4rOq'vOt'wO'e$Va'l$Va'm$Va|$Va!t$Va~O'T$Va#d$Va~P#5eO]-]O~O#O-^O~O'T$ea|$ea#d$ea!t$ea~P!!iO#O-aO~OR-jO!O&[O!j-iO$w-hO~O'T-kO~O]#nOi#oOj#nOk#nOm#{Oo8uOt#tO!O#uO!Y9wO!_#rO!}8{O#k$PO$U8wO$W8yO$Z$QO~Og-mO'P-lO~P#7[O!W)SO!O'Sa^'Sa&{'Sa~O#O-sO~OYZX|cX}cX~O|-tO}'zX~O}-vO~OY-wO~O!O$gO'P$[O[&tX|&tX~O|)`O['ya~O!^-zO~P!(TO]-|O~OY-}O~O[.OO~OR-jO!O&[O!j-iO$w-hO'U$_O~O|)lO^'va&{'va~O!t.UO~OR.XO!O#uO~O'Y&{O}'wP~OR.cO!O._O!j.bO$w.aO'U$_O~OY.mO|.kO}'xX~O}.nO~O[.pO^$WO&{$WO~O].qO~O#X.sO%i.tO~P0kO!t#bO#X.sO%i.tO~O^.uO~P)rO^.wO~O%r.{OP%piQ%piW%pi]%pi^%pia%pib%pig%pii%pij%pik%pim%pio%pit%piv%piw%pix%pi!O%pi!Y%pi!_%pi!b%pi!c%pi!d%pi!e%pi!f%pi!i%pi#Z%pi#k%pi#o%pi$v%pi$x%pi$z%pi${%pi%O%pi%Q%pi%T%pi%U%pi%W%pi%e%pi%k%pi%m%pi%o%pi%q%pi%t%pi%z%pi&O%pi&Q%pi&S%pi&U%pi&W%pi&v%pi'P%pi']%pi'q%pi}%pi_%pi%w%pi~O_/RO}/PO%w/QO~P]O!OSO!_/UO~O|#_O'_$Sa~Oy&]i|&]i~P!(TO|!ZOy'`i~O|&XOy'ii~Oy/YO~O|!Qa}!Qa~P#'YO]%zOj%zO{/`O'Y([O|&^X}&^X~P?rO|*|O}'aa~O]&SOj&SO{)kO'Y&{O|&cX}&cX~O|+PO}'ka~Oy'ji|'ji~P!(TO^$WO!W!tO!_$TO!e/kO!t/iO&{$WO'U$_O'e&gO~O}/nO~P!=UO!S/oO!T/oO'Q$^O'Y([O~O!R/qO!S/oO!T/oO!q/rO'Q$^O'Y([O~O!n/sO!o/sO~P#EXO!O&[O~O!O&[O~P!!iO|'gi!^'gi^'gi&{'gi~P!(TO!t/|O|'gi!^'gi^'gi&{'gi~O|&lO!^'fi~Ot$pO!O$qO!}0OO'P$[O~O#OnaPnaYna^naina![na!]na!_na!ena#Rna#Sna#Tna#Una#Vna#Wna#Xna#Yna#[na#^na#`na#ana&{na']na!^nayna!Ona$wna'_na!Wna~P#3|O#O$TaP$TaY$Ta^$Tai$Tar$Ta![$Ta!]$Ta!_$Ta!e$Ta#R$Ta#S$Ta#T$Ta#U$Ta#V$Ta#W$Ta#X$Ta#Y$Ta#[$Ta#^$Ta#`$Ta#a$Ta&{$Ta']$Ta!^$Tay$Ta!O$Ta$w$Ta'_$Ta!W$Ta~P#4rO#O$VaP$VaY$Va^$Vai$Var$Va![$Va!]$Va!_$Va!e$Va#R$Va#S$Va#T$Va#U$Va#V$Va#W$Va#X$Va#Y$Va#[$Va#^$Va#`$Va#a$Va&{$Va']$Va!^$Vay$Va!O$Va$w$Va'_$Va!W$Va~P#5eO#O$eaP$eaY$ea^$eai$ear$ea|$ea![$ea!]$ea!_$ea!e$ea#R$ea#S$ea#T$ea#U$ea#V$ea#W$ea#X$ea#Y$ea#[$ea#^$ea#`$ea#a$ea&{$ea']$ea!^$eay$ea!O$ea!t$ea$w$ea'_$ea!W$ea~P!!iO^!vq|!vq&{!vqy!vq!^!vq'_!vq!O!vq$w!vq!W!vq~P!(TO|&_X'T&_X~PIoO|+zO'T'ca~O{0WO|&`X!^&`X~P)rO|+}O!^'da~O|+}O!^'da~P!(TO#d!aa}!aa~PBtO#d!Xa|!Xa}!Xa~P#'YO!O0kO#o]O#v0lO~O}0pO~O^$Pq|$Pq&{$Pqy$Pq!^$Pq'_$Pq!O$Pq$w$Pq!W$Pq~P!(TOy0qO~O],cOj,cO~Oq'vOt'wO'm'{O'e$oi'l$oi|$oi!t$oi~O'T$oi#d$oi~P$%SOq'vOt'wO'e$qi'l$qi'm$qi|$qi!t$qi~O'T$qi#d$qi~P$%uO#d0rO~P!!iO{0tO'P$[O|&hX!^&hX~O|,kO!^'ra~O|,kO!W!tO!^'ra~O|,kO!W!tO'e&gO!^'ra~O'T$^i|$^i#d$^i!t$^i~P!!iO{0{O'P(VOy&jX|&jX~P!#WO|,rOy'sa~O|,rOy'sa~P!!iO!W!tO~O!W!tO#X1VO~Oi1ZO!W!tO'e&gO~O|'Wi'T'Wi~P!!iO!t1^O|'Wi'T'Wi~P!!iO!^1aO~O^$Qq|$Qq&{$Qqy$Qq!^$Qq'_$Qq!O$Qq$w$Qq!W$Qq~P!(TO|1eO!O'tX~P!!iO!O&[O$w1hO~O!O&[O$w1hO~P!!iO!O$[X$lZX^$[X&{$[X~P! kO$l1lOqfXtfX!OfX'efX'lfX'mfX^fX&{fX~O$l1lO~O'P)[O|&sX}&sX~O|-tO}'za~O[1uO~O]1xO~OR1zO!O&[O!j1yO$w1hO~O^$WO&{$WO~P!!iO!O#uO~P!!iO|2PO!t2RO}'wX~O}2SO~Ot(`O!R2]O!S2UO!T2UO!m2[O!n2ZO!o2ZO!q2YO'Q$^O'Y([O~O}2XO~P$-{OR2dO!O._O!j2cO$w2bO~OR2dO!O._O!j2cO$w2bO'U$_O~O'P(nO|&rX}&rX~O|.kO}'xa~O'Y2mO~O]2oO~O[2qO~O!^2tO~P)rO^2vO~O^2vO~P)rO#X2xO%i2yO~PE^O_/RO}2}O%w/QO~P]O!W3PO~O%|3QOP%yqQ%yqW%yq]%yq^%yqa%yqb%yqg%yqi%yqj%yqk%yqm%yqo%yqt%yqv%yqw%yqx%yq!O%yq!Y%yq!_%yq!b%yq!c%yq!d%yq!e%yq!f%yq!i%yq#Z%yq#k%yq#o%yq$v%yq$x%yq$z%yq${%yq%O%yq%Q%yq%T%yq%U%yq%W%yq%e%yq%k%yq%m%yq%o%yq%q%yq%t%yq%z%yq&O%yq&Q%yq&S%yq&U%yq&W%yq&v%yq'P%yq']%yq'q%yq}%yq%r%yq_%yq%w%yq~O|!{i}!{i~P#'YO!t3SO|!{i}!{i~O|!Qi}!Qi~P#'YO^$WO!t3ZO&{$WO~O^$WO!W!tO!t3ZO&{$WO~O^$WO!W!tO!_$TO!e3_O!t3ZO&{$WO'U$_O'e&gO~O!S3`O!T3`O'Q$^O'Y([O~O!R3cO!S3`O!T3`O!q3dO'Q$^O'Y([O~O^$WO!W!tO!e3_O!t3ZO&{$WO'e&gO~O|'gq!^'gq^'gq&{'gq~P!(TO|&lO!^'fq~O#O$oiP$oiY$oi^$oii$oir$oi![$oi!]$oi!_$oi!e$oi#R$oi#S$oi#T$oi#U$oi#V$oi#W$oi#X$oi#Y$oi#[$oi#^$oi#`$oi#a$oi&{$oi']$oi!^$oiy$oi!O$oi$w$oi'_$oi!W$oi~P$%SO#O$qiP$qiY$qi^$qii$qir$qi![$qi!]$qi!_$qi!e$qi#R$qi#S$qi#T$qi#U$qi#V$qi#W$qi#X$qi#Y$qi#[$qi#^$qi#`$qi#a$qi&{$qi']$qi!^$qiy$qi!O$qi$w$qi'_$qi!W$qi~P$%uO#O$^iP$^iY$^i^$^ii$^ir$^i|$^i![$^i!]$^i!_$^i!e$^i#R$^i#S$^i#T$^i#U$^i#V$^i#W$^i#X$^i#Y$^i#[$^i#^$^i#`$^i#a$^i&{$^i']$^i!^$^iy$^i!O$^i!t$^i$w$^i'_$^i!W$^i~P!!iO|&_a'T&_a~P!!iO|&`a!^&`a~P!(TO|+}O!^'di~O#d!vi|!vi}!vi~P#'YOP#ZOq!xOr!xOt!yO!]!vO!_!wO!e#ZO']QOY#Qii#Qi![#Qi#S#Qi#T#Qi#U#Qi#V#Qi#W#Qi#X#Qi#Y#Qi#[#Qi#^#Qi#`#Qi#a#Qi#d#Qi'e#Qi'l#Qi'm#Qi|#Qi}#Qi~O#R#Qi~P$?rO#R8fO~P$?rOP#ZOq!xOr!xOt!yO!]!vO!_!wO!e#ZO#R8fO#S8gO#T8gO#U8gO']QOY#Qi![#Qi#V#Qi#W#Qi#X#Qi#Y#Qi#[#Qi#^#Qi#`#Qi#a#Qi#d#Qi'e#Qi'l#Qi'm#Qi|#Qi}#Qi~Oi#Qi~P$AzOi8hO~P$AzOP#ZOi8hOq!xOr!xOt!yO!]!vO!_!wO!e#ZO#R8fO#S8gO#T8gO#U8gO#V8iO']QO#[#Qi#^#Qi#`#Qi#a#Qi#d#Qi'e#Qi'l#Qi'm#Qi|#Qi}#Qi~OY#Qi![#Qi#W#Qi#X#Qi#Y#Qi~P$DSOY8sO![8jO#W8jO#X8jO#Y8jO~P$DSOP#ZOY8sOi8hOq!xOr!xOt!yO![8jO!]!vO!_!wO!e#ZO#R8fO#S8gO#T8gO#U8gO#V8iO#W8jO#X8jO#Y8jO#[8kO']QO#^#Qi#`#Qi#a#Qi#d#Qi'e#Qi'm#Qi|#Qi}#Qi~O'l#Qi~P$FhO'l!zO~P$FhOP#ZOY8sOi8hOq!xOr!xOt!yO![8jO!]!vO!_!wO!e#ZO#R8fO#S8gO#T8gO#U8gO#V8iO#W8jO#X8jO#Y8jO#[8kO#^8mO']QO'l!zO#`#Qi#a#Qi#d#Qi'e#Qi|#Qi}#Qi~O'm#Qi~P$HpO'm!{O~P$HpOP#ZOY8sOi8hOq!xOr!xOt!yO![8jO!]!vO!_!wO!e#ZO#R8fO#S8gO#T8gO#U8gO#V8iO#W8jO#X8jO#Y8jO#[8kO#^8mO#`8oO']QO'l!zO'm!{O~O#a#Qi#d#Qi'e#Qi|#Qi}#Qi~P$JxO^#by|#by&{#byy#by!^#by'_#by!O#by$w#by!W#by~P!(TOP#QiY#Qii#Qir#Qi![#Qi!]#Qi!_#Qi!e#Qi#R#Qi#S#Qi#T#Qi#U#Qi#V#Qi#W#Qi#X#Qi#Y#Qi#[#Qi#^#Qi#`#Qi#a#Qi#d#Qi']#Qi|#Qi}#Qi~P!!iO!]!vOP'XXY'XXi'XXq'XXr'XXt'XX!['XX!_'XX!e'XX#R'XX#S'XX#T'XX#U'XX#V'XX#W'XX#X'XX#Y'XX#['XX#^'XX#`'XX#a'XX#d'XX']'XX'e'XX'l'XX'm'XX|'XX}'XX~O#d#ei|#ei}#ei~P#'YO}3tO~O|&ga}&ga~P#'YO!W!tO'e&gO|&ha!^&ha~O|,kO!^'ri~O|,kO!W!tO!^'ri~Oy&ja|&ja~P!!iO!W3{O~O|,rOy'si~P!!iO|,rOy'si~Oy4RO~O!W!tO#X4XO~Oi4YO!W!tO'e&gO~Oy4[O~O'T$`q|$`q#d$`q!t$`q~P!!iO^$Qy|$Qy&{$Qyy$Qy!^$Qy'_$Qy!O$Qy$w$Qy!W$Qy~P!(TO|1eO!O'ta~O!O&[O$w4aO~O!O&[O$w4aO~P!!iO^!vy|!vy&{!vyy!vy!^!vy'_!vy!O!vy$w!vy!W!vy~P!(TOY4dO~O|-tO}'zi~O]4fO~O[4gO~O'Y&{O|&oX}&oX~O|2PO}'wa~O}4tO~P$-{O!R4wO!S4vO!T4vO!q/rO'Q$^O'Y([O~O!n4xO!o4xO~P%)VO!S4vO!T4vO'Q$^O'Y([O~O!O._O~O!O._O$w4zO~O!O._O$w4zO~P!!iOR5PO!O._O!j5OO$w4zO~OY5UO|&ra}&ra~O|.kO}'xi~O]5XO~O!^5YO~O!^5ZO~O!^5[O~O!^5[O~P)rO^5^O~O!W5aO~O!^5cO~O|'ji}'ji~P#'YO^$WO&{$WO~P!(TO^$WO!t5hO&{$WO~O^$WO!W!tO!t5hO&{$WO~O^$WO!W!tO!e5mO!t5hO&{$WO'e&gO~O!_$TO'U$_O~P%-YO!S5nO!T5nO'Q$^O'Y([O~O|'gy!^'gy^'gy&{'gy~P!(TO#O$`qP$`qY$`q^$`qi$`qr$`q|$`q![$`q!]$`q!_$`q!e$`q#R$`q#S$`q#T$`q#U$`q#V$`q#W$`q#X$`q#Y$`q#[$`q#^$`q#`$`q#a$`q&{$`q']$`q!^$`qy$`q!O$`q!t$`q$w$`q'_$`q!W$`q~P!!iO|&`i!^&`i~P!(TO#d!vq|!vq}!vq~P#'YOq-ZOr-ZOt-[OPnaYnaina![na!]na!_na!ena#Rna#Sna#Tna#Una#Vna#Wna#Xna#Yna#[na#^na#`na#ana#dna']na'ena'lna'mna|na}na~Oq'vOt'wOP$TaY$Tai$Tar$Ta![$Ta!]$Ta!_$Ta!e$Ta#R$Ta#S$Ta#T$Ta#U$Ta#V$Ta#W$Ta#X$Ta#Y$Ta#[$Ta#^$Ta#`$Ta#a$Ta#d$Ta']$Ta'e$Ta'l$Ta'm$Ta|$Ta}$Ta~Oq'vOt'wOP$VaY$Vai$Var$Va![$Va!]$Va!_$Va!e$Va#R$Va#S$Va#T$Va#U$Va#V$Va#W$Va#X$Va#Y$Va#[$Va#^$Va#`$Va#a$Va#d$Va']$Va'e$Va'l$Va'm$Va|$Va}$Va~OP$eaY$eai$ear$ea![$ea!]$ea!_$ea!e$ea#R$ea#S$ea#T$ea#U$ea#V$ea#W$ea#X$ea#Y$ea#[$ea#^$ea#`$ea#a$ea#d$ea']$ea|$ea}$ea~P!!iO#d$Pq|$Pq}$Pq~P#'YO#d$Qq|$Qq}$Qq~P#'YO}5xO~O'T$sy|$sy#d$sy!t$sy~P!!iO!W!tO|&hi!^&hi~O!W!tO'e&gO|&hi!^&hi~O|,kO!^'rq~Oy&ji|&ji~P!!iO|,rOy'sq~Oy6PO~P!!iOy6PO~O|'Wy'T'Wy~P!!iO|&ma!O&ma~P!!iO!O$kq^$kq&{$kq~P!!iO|-tO}'zq~O]6YO~O!O&[O$w6ZO~O!O&[O$w6ZO~P!!iO!t6[O|&oa}&oa~O|2PO}'wi~P#'YO!S6bO!T6bO'Q$^O'Y([O~O!R6dO!S6bO!T6bO!q3dO'Q$^O'Y([O~O!O._O$w6gO~O!O._O$w6gO~P!!iO'Y6mO~O|.kO}'xq~O!^6pO~O!^6pO~P)rO!^6rO~O!^6sO~O|!{y}!{y~P#'YO^$WO!t6xO&{$WO~O^$WO!W!tO!t6xO&{$WO~O^$WO!W!tO!e6|O!t6xO&{$WO'e&gO~O#O$syP$syY$sy^$syi$syr$sy|$sy![$sy!]$sy!_$sy!e$sy#R$sy#S$sy#T$sy#U$sy#V$sy#W$sy#X$sy#Y$sy#[$sy#^$sy#`$sy#a$sy&{$sy']$sy!^$syy$sy!O$sy!t$sy$w$sy'_$sy!W$sy~P!!iO#d#by|#by}#by~P#'YOP$^iY$^ii$^ir$^i![$^i!]$^i!_$^i!e$^i#R$^i#S$^i#T$^i#U$^i#V$^i#W$^i#X$^i#Y$^i#[$^i#^$^i#`$^i#a$^i#d$^i']$^i|$^i}$^i~P!!iOq'vOt'wO'm'{OP$oiY$oii$oir$oi![$oi!]$oi!_$oi!e$oi#R$oi#S$oi#T$oi#U$oi#V$oi#W$oi#X$oi#Y$oi#[$oi#^$oi#`$oi#a$oi#d$oi']$oi'e$oi'l$oi|$oi}$oi~Oq'vOt'wOP$qiY$qii$qir$qi![$qi!]$qi!_$qi!e$qi#R$qi#S$qi#T$qi#U$qi#V$qi#W$qi#X$qi#Y$qi#[$qi#^$qi#`$qi#a$qi#d$qi']$qi'e$qi'l$qi'm$qi|$qi}$qi~O#d$Qy|$Qy}$Qy~P#'YO#d!vy|!vy}!vy~P#'YO!W!tO|&hq!^&hq~O|,kO!^'ry~Oy&jq|&jq~P!!iOy7SO~P!!iO|2PO}'wq~O!S7_O!T7_O'Q$^O'Y([O~O!O._O$w7bO~O!O._O$w7bO~P!!iO!^7eO~O%|7fOP%y!ZQ%y!ZW%y!Z]%y!Z^%y!Za%y!Zb%y!Zg%y!Zi%y!Zj%y!Zk%y!Zm%y!Zo%y!Zt%y!Zv%y!Zw%y!Zx%y!Z!O%y!Z!Y%y!Z!_%y!Z!b%y!Z!c%y!Z!d%y!Z!e%y!Z!f%y!Z!i%y!Z#Z%y!Z#k%y!Z#o%y!Z$v%y!Z$x%y!Z$z%y!Z${%y!Z%O%y!Z%Q%y!Z%T%y!Z%U%y!Z%W%y!Z%e%y!Z%k%y!Z%m%y!Z%o%y!Z%q%y!Z%t%y!Z%z%y!Z&O%y!Z&Q%y!Z&S%y!Z&U%y!Z&W%y!Z&v%y!Z'P%y!Z']%y!Z'q%y!Z}%y!Z%r%y!Z_%y!Z%w%y!Z~O^$WO!t7jO&{$WO~O^$WO!W!tO!t7jO&{$WO~OP$`qY$`qi$`qr$`q![$`q!]$`q!_$`q!e$`q#R$`q#S$`q#T$`q#U$`q#V$`q#W$`q#X$`q#Y$`q#[$`q#^$`q#`$`q#a$`q#d$`q']$`q|$`q}$`q~P!!iO|&oq}&oq~P#'YO^$WO!t8OO&{$WO~OP$syY$syi$syr$sy![$sy!]$sy!_$sy!e$sy#R$sy#S$sy#T$sy#U$sy#V$sy#W$sy#X$sy#Y$sy#[$sy#^$sy#`$sy#a$sy#d$sy']$sy|$sy}$sy~P!!iO'_'ZX~P.ZO'_ZXyZX!^ZX%iZX!OZX$wZX!WZX~P$tO!WcX!^ZX!^cX'ecX~P:xOP8`OQ8`O]bOa9uOb!gOgbOi8`OjbOkbOm8`Oo8`OtROvbOwbOxbO!OSO!Y8bO!_UO!b8`O!c8`O!d8`O!e8`O!f8`O!i!fO#k!iO#o]O'P'ZO']QO'q9sO~O|8qO}$Sa~O]#nOg#zOi#oOj#nOk#nOm#{Oo8vOt#tO!O#uO!Y9xO!_#rO!}8|O#k$PO$U8xO$W8zO$Z$QO'P&sO~O#Z'bO~P&'mO}ZX}cX~P:xO#O8eO~O!W!tO#O8eO~O!t8tO~O!t8}O|'jX}'jX~O!t8tO|'hX}'hX~O#O9OO~O'T9QO~P!!iO#O9VO~O#O9WO~O!W!tO#O9XO~O!W!tO#O9OO~O#d9YO~P#'YO#O9ZO~O#O9[O~O#O9]O~O#O9^O~O#d9_O~P!!iO#d9`O~P!!iO#o~!]!m!o!|!}'q$U$W$Z$l$v$w$x%O%Q%T%U%W%Y~TS#o'q#q'Y'P&}#Sx~",
            goto: "#<v(OPPPPPPP(PP(aP)|PPPP-]PP-r2v4i4|P4|PPP4|P4|P6iPP6nP7VPPPP;fPPPP;f>UPPP>[@_P;fPBrPPPPDj;fPPPPPFc;fPPIbJ_PPPJcPJkKlP;f;fNs!#l!([!([!+iPPP!+p;fPPPPPPPPPP!.dP!/uPP;f!1SP;fP;f;f;f;fP;f!3fPP!6]P!9O!9W!9[!9[P!6YP!9`!9`P!<RP!<V;f;f!<]!>}4|P4|P4|4|P!@Q4|4|!At4|4|4|!Cu4|4|!Dc!F[!F[!F`!F[!FhP!F[P4|!Gd4|!Hm4|4|-]PPP!IyPP!Jc!JcP!JcP!Jx!JcPP!KOP!JuP!Ju!KbJg!Ju!LP!LV!LY(P!L](PP!Ld!Ld!LdP(PP(PP(PP(PPP(PP!Lj!LmP!Lm(PPPP(PP(PP(PP(PP(PP(P(P!Lq!L{!MR!Ma!Mg!Mm!Mw!M}!NX!N_!Nm!Ns!Ny# X# n##P##_##e##k##q##w#$R#$X#$_#$i#$s#$yPPPPPPPP#%PPP#%s#)qPP#+U#+]#+eP#/n#2RP#7{P#8P#8S#8V#8b#8eP#8h#8l#9Z#:O#:S#:fPP#:j#:p#:tP#:w#:{#;O#;n#<U#<Z#<^#<a#<g#<j#<n#<rmgOSi{!k$V%^%a%b%d*a*f.{/OQ$dlQ$knQ%UwS&O!`*|Q&c!gS(_#u(dQ)Y$eQ)f$mQ*Q%OQ+S&VS+Y&[+[Q+j&dQ-R(fQ.j*RU/o+^+_+`S2U._2WS3`/q/sU4v2Z2[2]Q5n3cS6b4w4xR7_6d$lZORSTUij{!Q!U!Z!^!k!s!w!y!|!}#O#P#Q#R#S#T#U#V#W#_#b$V$i%V%Y%^%`%a%b%d%h%s%{&W&^&h&u&y'u(w)O*]*a*f+e+l+},T-[-a-i-s.b.s.t.u.w.{/O/Q/i/|0W1y2c2v2x2y3Z5O5^5h6x7j8O!j']#Y#h&P'o*u*x,Y/`0k2R3S6[8`8b8e8f8g8h8i8j8k8l8m8n8o8p8q8t8}9O9Q9X9Y9]9^9vQ(o#|Q)_$gQ*S%RQ*Z%ZQ+t8uQ-n)SQ.r*XQ1r-tQ2k.kR3m8vpdOSiw{!k$V%T%^%a%b%d*a*f.{/OR*U%V&WVOSTijm{!Q!U!Z!h!k!s!w!y!|!}#O#P#Q#R#S#T#U#V#W#Y#_#b#h$V$i%V%Y%Z%^%`%a%b%d%h%s%{&W&^&h&u&y'o'u(w)O*]*a*f*u*x+e+l+},T,Y-[-a-i-s.b.s.t.u.w.{/O/Q/`/i/|0W0k1y2R2c2v2x2y3S3Z5O5^5h6[6x7j8O8`8b8e8f8g8h8i8j8k8l8m8n8o8p8q8t8}9O9Q9X9Y9]9^9u9vW!aRU!^&PQ$]kQ$clS$hn$mv$rpq!o!r$T$p&X&l&o)j)k)l*_*v+V+o+q/U0OQ$zuQ&`!fQ&b!gS(R#r(]S)X$d$eQ)]$gQ)i$oQ){$|Q*P%OS+i&c&dQ,o(SQ-r)YQ-x)`Q-{)dQ.e)|S.i*Q*RQ/z+jQ0s,kQ1q-tQ1t-wQ1w-}Q2j.jQ3x0tR6W4d!W$al!g$c$d$e%}&b&c&d(^)X)Y*y+X+i+j,{-r/e/l/p/z1Y3^3b5l6{Q)Q$]Q)q$wQ)t$xQ*O%OQ.P)iQ.d){U.h*P*Q*RQ2e.eS2i.i.jQ4q2TQ5T2jS6`4r4uS7]6a6cQ7u7^R8T7vW#x`$_(l9sS$wr%TQ$xsQ$ytR)o$u$T#w`!t!v#a#r#t#}$O$S&_'z'|'}(U(Y(j(k(})P)S)p)s+f+z,r,t-^-h-j.U.X.a.c0r0{1V1^1e1h1l1z2b2d3{4X4a4z5P6Z6g7b8s8w8x8y8z8{8|9R9S9T9U9V9W9Z9[9_9`9s9y9zV(p#|8u8vU&S!`$q+PQ&|!xQ)c$jQ,b'vQ.Y)uQ1_-ZR4m2P&YbORSTUij{!Q!U!Z!^!k!s!w!y!|!}#O#P#Q#R#S#T#U#V#W#Y#_#b#h$V$i%V%Y%Z%^%`%a%b%d%h%s%{&P&W&^&h&u&y'o'u(w)O*]*a*f*u*x+e+l+},T,Y-[-a-i-s.b.s.t.u.w.{/O/Q/`/i/|0W0k1y2R2c2v2x2y3S3Z5O5^5h6[6x7j8O8`8b8e8f8g8h8i8j8k8l8m8n8o8p8q8t8}9O9Q9X9Y9]9^9v$]#^Y!]!l$Z%r%v&q&x'O'P'Q'R'S'T'U'V'W'X'Y'['_'c'm)b*q*z+T+k+y,P,S,U,a-_/Z/^/{0V0Z0[0]0^0_0`0a0b0c0d0e0f0g0j0o1c1o3U3X3h3k3l3q3r4o5d5g5r5v5w6v7X7h7|8W8a9l&ZbORSTUij{!Q!U!Z!^!k!s!w!y!|!}#O#P#Q#R#S#T#U#V#W#Y#_#b#h$V$i%V%Y%Z%^%`%a%b%d%h%s%{&P&W&^&h&u&y'o'u(w)O*]*a*f*u*x+e+l+},T,Y-[-a-i-s.b.s.t.u.w.{/O/Q/`/i/|0W0k1y2R2c2v2x2y3S3Z5O5^5h6[6x7j8O8`8b8e8f8g8h8i8j8k8l8m8n8o8p8q8t8}9O9Q9X9Y9]9^9vQ&Q!`R/a*|Y%z!`&O&V*|+SS(^#u(dS+X&[+[S,{(_(fQ,|(`Q-S(gQ.[)wS/l+Y+^S/p+_+`S/t+a2YQ1Y-RQ1[-TQ1]-US2T._2WS3^/o/qQ3a/rQ3b/sS4r2U2]S4u2Z2[S5l3`3cQ5o3dS6a4v4wQ6c4xQ6{5nS7^6b6dR7v7_lgOSi{!k$V%^%a%b%d*a*f.{/OQ%f!OS&p!s8eQ)V$bQ)y$zQ)z${Q+g&aS+x&u9OS-`(w9XQ-p)WQ.^)xQ/S*hQ/T*iQ/]*wQ/x+hS1d-a9]Q1m-qS1p-s9^Q3T/_Q3W/gQ3f/yQ4c1nQ5b3QQ5e3VQ5i3]Q5p3gQ6t5cQ6w5jQ7i6yQ7z7fR7}7k$W#]Y!]!l%r%v&q&x'O'P'Q'R'S'T'U'V'W'X'Y'['_'c'm)b*q*z+T+k+y,P,S,a-_/Z/^/{0V0Z0[0]0^0_0`0a0b0c0d0e0f0g0j0o1c1o3U3X3h3k3l3q3r4o5d5g5r5v5w6v7X7h7|8W8a9lU(i#v&t0iT({$Z,U$W#[Y!]!l%r%v&q&x'O'P'Q'R'S'T'U'V'W'X'Y'['_'c'm)b*q*z+T+k+y,P,S,a-_/Z/^/{0V0Z0[0]0^0_0`0a0b0c0d0e0f0g0j0o1c1o3U3X3h3k3l3q3r4o5d5g5r5v5w6v7X7h7|8W8a9lQ'^#]S(z$Z,UR-b({&YbORSTUij{!Q!U!Z!^!k!s!w!y!|!}#O#P#Q#R#S#T#U#V#W#Y#_#b#h$V$i%V%Y%Z%^%`%a%b%d%h%s%{&P&W&^&h&u&y'o'u(w)O*]*a*f*u*x+e+l+},T,Y-[-a-i-s.b.s.t.u.w.{/O/Q/`/i/|0W0k1y2R2c2v2x2y3S3Z5O5^5h6[6x7j8O8`8b8e8f8g8h8i8j8k8l8m8n8o8p8q8t8}9O9Q9X9Y9]9^9vQ%ayQ%bzQ%d|Q%e}R.z*dQ&]!fQ(|$]Q+d&`S-g)Q)iS/u+b+cW1g-d-e-f.PS3e/v/wU4`1i1j1kU6U4_4i4jQ7U6VR7q7WT+Z&[+[S+Z&[+[T2V._2WS&j!n.xQ,n(RQ,y(^S/k+X2TQ0x,oS1S,z-SU3_/p/t4uQ3w0sS4V1Z1]U5m3a3b6cQ5z3xQ6T4YR6|5oQ!uXS&i!n.xQ(x$UQ)T$`Q)Z$fQ+m&jQ,m(RQ,x(^Q,}(aQ-o)UQ.f)}S/j+X2TS0w,n,oS1R,y-SQ1U,|Q1X-OQ2g.gW3[/k/p/t4uQ3v0sQ3z0xS4P1S1]Q4W1[Q5R2hW5k3_3a3b6cS5y3w3xQ6O4RQ6R4VQ6^4pQ6k5SS6z5m5oQ7O5zQ7Q6PQ7T6TQ7Z6_Q7d6lQ7l6|Q7o7SQ7s7[Q8R7tQ8Y8SQ8^8ZQ9f9bQ9o9jR9p9k$nWORSTUij{!Q!U!Z!^!k!s!w!y!|!}#O#P#Q#R#S#T#U#V#W#_#b$V$i%V%Y%Z%^%`%a%b%d%h%s%{&W&^&h&u&y'u(w)O*]*a*f+e+l+},T-[-a-i-s.b.s.t.u.w.{/O/Q/i/|0W1y2c2v2x2y3Z5O5^5h6x7j8OS!um!h!j9a#Y#h&P'o*u*x,Y/`0k2R3S6[8`8b8e8f8g8h8i8j8k8l8m8n8o8p8q8t8}9O9Q9X9Y9]9^9vR9f9u$nXORSTUij{!Q!U!Z!^!k!s!w!y!|!}#O#P#Q#R#S#T#U#V#W#_#b$V$i%V%Y%Z%^%`%a%b%d%h%s%{&W&^&h&u&y'u(w)O*]*a*f+e+l+},T-[-a-i-s.b.s.t.u.w.{/O/Q/i/|0W1y2c2v2x2y3Z5O5^5h6x7j8OQ$Ua!W$`l!g$c$d$e%}&b&c&d(^)X)Y*y+X+i+j,{-r/e/l/p/z1Y3^3b5l6{S$fm!hQ)U$aQ)}%OW.g*O*P*Q*RU2h.h.i.jQ4p2TS5S2i2jU6_4q4r4uQ6l5TU7[6`6a6cS7t7]7^S8S7u7vQ8Z8T!j9b#Y#h&P'o*u*x,Y/`0k2R3S6[8`8b8e8f8g8h8i8j8k8l8m8n8o8p8q8t8}9O9Q9X9Y9]9^9vQ9j9tR9k9u$f[OSTij{!Q!U!Z!k!s!w!y!|!}#O#P#Q#R#S#T#U#V#W#_#b$V$i%V%Y%^%`%a%b%d%h%s%{&W&^&h&u&y'u(w)O*]*a*f+e+l+},T-[-a-i-s.b.s.t.u.w.{/O/Q/i/|0W1y2c2v2x2y3Z5O5^5h6x7j8OU!eRU!^v$rpq!o!r$T$p&X&l&o)j)k)l*_*v+V+o+q/U0OQ*[%Z!h9c#Y#h'o*u*x,Y/`0k2R3S6[8`8b8e8f8g8h8i8j8k8l8m8n8o8p8q8t8}9O9Q9X9Y9]9^9vR9e&PS&T!`$qR/c+P$lZORSTUij{!Q!U!Z!^!k!s!w!y!|!}#O#P#Q#R#S#T#U#V#W#_#b$V$i%V%Y%^%`%a%b%d%h%s%{&W&^&h&u&y'u(w)O*]*a*f+e+l+},T-[-a-i-s.b.s.t.u.w.{/O/Q/i/|0W1y2c2v2x2y3Z5O5^5h6x7j8O!j']#Y#h&P'o*u*x,Y/`0k2R3S6[8`8b8e8f8g8h8i8j8k8l8m8n8o8p8q8t8}9O9Q9X9Y9]9^9vR*Z%Z!h#SY!]$Z%r%v&q&x'V'W'X'Y'_'c)b*q+T+k+y,P,a-_/{0V0g1c1o3X3h3k5g6v7h7|8W8a!R8l'['m*z,U/Z/^0Z0c0d0e0f0j0o3U3l3q3r4o5d5r5v5w7X9l!d#UY!]$Z%r%v&q&x'X'Y'_'c)b*q+T+k+y,P,a-_/{0V0g1c1o3X3h3k5g6v7h7|8W8a}8n'['m*z,U/Z/^0Z0e0f0j0o3U3l3q3r4o5d5r5v5w7X9l!`#YY!]$Z%r%v&q&x'_'c)b*q+T+k+y,P,a-_/{0V0g1c1o3X3h3k5g6v7h7|8W8al'}#p&v(v,i,q-V-W0T1b3u4Z9g9q9rx9v'['m*z,U/Z/^0Z0j0o3U3l3q3r4o5d5r5v5w7X9l!^9y&r'a(Q(W+c+w,u-c-f.T.V/w0S0y0}1k1|2O2`3j3|4S4]4b4j4}5q5|6S6iZ9z0h3p5s6}7m&YbORSTUij{!Q!U!Z!^!k!s!w!y!|!}#O#P#Q#R#S#T#U#V#W#Y#_#b#h$V$i%V%Y%Z%^%`%a%b%d%h%s%{&P&W&^&h&u&y'o'u(w)O*]*a*f*u*x+e+l+},T,Y-[-a-i-s.b.s.t.u.w.{/O/Q/`/i/|0W0k1y2R2c2v2x2y3S3Z5O5^5h6[6x7j8O8`8b8e8f8g8h8i8j8k8l8m8n8o8p8q8t8}9O9Q9X9Y9]9^9vS#i_#jR0l,X&a^ORSTU_ij{!Q!U!Z!^!k!s!w!y!|!}#O#P#Q#R#S#T#U#V#W#Y#_#b#h#j$V$i%V%Y%Z%^%`%a%b%d%h%s%{&P&W&^&h&u&y'o'u(w)O*]*a*f*u*x+e+l+},T,X,Y-[-a-i-s.b.s.t.u.w.{/O/Q/`/i/|0W0k1y2R2c2v2x2y3S3Z5O5^5h6[6x7j8O8`8b8e8f8g8h8i8j8k8l8m8n8o8p8q8t8}9O9Q9X9Y9]9^9vS#d]#kT'f#f'jT#e]#kT'h#f'j&a_ORSTU_ij{!Q!U!Z!^!k!s!w!y!|!}#O#P#Q#R#S#T#U#V#W#Y#_#b#h#j$V$i%V%Y%Z%^%`%a%b%d%h%s%{&P&W&^&h&u&y'o'u(w)O*]*a*f*u*x+e+l+},T,X,Y-[-a-i-s.b.s.t.u.w.{/O/Q/`/i/|0W0k1y2R2c2v2x2y3S3Z5O5^5h6[6x7j8O8`8b8e8f8g8h8i8j8k8l8m8n8o8p8q8t8}9O9Q9X9Y9]9^9vT#i_#jQ#l_R'q#j$naORSTUij{!Q!U!Z!^!k!s!w!y!|!}#O#P#Q#R#S#T#U#V#W#_#b$V$i%V%Y%Z%^%`%a%b%d%h%s%{&W&^&h&u&y'u(w)O*]*a*f+e+l+},T-[-a-i-s.b.s.t.u.w.{/O/Q/i/|0W1y2c2v2x2y3Z5O5^5h6x7j8O!k9t#Y#h&P'o*u*x,Y/`0k2R3S6[8`8b8e8f8g8h8i8j8k8l8m8n8o8p8q8t8}9O9Q9X9Y9]9^9v#RcOSUi{!Q!U!k!y#h$V%V%Y%Z%^%`%a%b%d%h%{&^'o)O*]*a*f+e,Y-[-i.b.s.t.u.w.{/O/Q0k1y2c2v2x2y5O5^t#v`!v#}$O$S'z'|'}(U(j(k+z-^0r1^9s9y9z!z&t!t#a#r#t&_(Y(})P)S)p)s+f,r,t-h-j.U.X.a.c0{1V1e1h1l1z2b2d3{4X4a4z5P6Z6g7b8w8y8{9R9T9V9Z9_Q(t$Qc0i8s8x8z8|9S9U9W9[9`t#s`!v#}$O$S'z'|'}(U(j(k+z-^0r1^9s9y9zS(a#u(dQ(u$RQ-O(b!z9h!t#a#r#t&_(Y(})P)S)p)s+f,r,t-h-j.U.X.a.c0{1V1e1h1l1z2b2d3{4X4a4z5P6Z6g7b8w8y8{9R9T9V9Z9_b9i8s8x8z8|9S9U9W9[9`Q9m9wR9n9xleOSi{!k$V%^%a%b%d*a*f.{/OQ(X#tQ*m%kQ*n%mR0z,r$S#w`!t!v#a#r#t#}$O$S&_'z'|'}(U(Y(j(k(})P)S)p)s+f+z,r,t-^-h-j.U.X.a.c0r0{1V1^1e1h1l1z2b2d3{4X4a4z5P6Z6g7b8s8w8x8y8z8{8|9R9S9T9U9V9W9Z9[9_9`9s9y9zQ)r$xQ.W)tQ1}.VR4l2OT(c#u(dS(c#u(dT2V._2WQ)T$`Q,}(aQ-o)UQ.f)}Q2g.gQ5R2hQ6^4pQ6k5SQ7Z6_Q7d6lQ7s7[Q8R7tQ8Y8SR8^8Zl'z#p&v(v,i,q-V-W0T1b3u4Z9g9q9r!^9R&r'a(Q(W+c+w,u-c-f.T.V/w0S0y0}1k1|2O2`3j3|4S4]4b4j4}5q5|6S6iZ9S0h3p5s6}7mn'|#p&v(v,g,i,q-V-W0T1b3u4Z9g9q9r!`9T&r'a(Q(W+c+w,u-c-f.T.V/w0Q0S0y0}1k1|2O2`3j3|4S4]4b4j4}5q5|6S6i]9U0h3p5s5t6}7mpdOSiw{!k$V%T%^%a%b%d*a*f.{/OQ%QvR*]%ZpdOSiw{!k$V%T%^%a%b%d*a*f.{/OR%QvQ)v$yR.S)oqdOSiw{!k$V%T%^%a%b%d*a*f.{/OQ.`){S2a.d.eW4y2^2_2`2eU6f4{4|4}U7`6e6h6iQ7w7aR8U7xQ%XwR*V%TR2n.mR6n5US$hn$mR-x)`Q%^xR*a%_R*g%eT.|*f/OQiOQ!kST$Yi!kQ!WQR%p!WQ![RU%t![%u*rQ%u!]R*r%vQ*}&QR/b*}Q+{&vR0U+{Q,O&xS0X,O0YR0Y,PQ+[&[R/m+[Q&Y!cQ*s%wT+W&Y*sQ+Q&TR/d+QQ&m!pQ+n&kU+r&m+n0PR0P+sQ'j#fR,Z'jQ#j_R'p#jQ#`YU'`#`*p8rQ*p8aR8r'mQ,l(RW0u,l0v3y5{U0v,m,n,oS3y0w0xR5{3z#o'x#p&r&v'a(Q(W(q(r(v+c+u+v+w,g,h,i,q,u-V-W-c-f.T.V/w0Q0R0S0T0h0y0}1b1k1|2O2`3j3n3o3p3u3|4S4Z4]4b4j4}5q5s5t5u5|6S6i6}7m9g9q9rQ,s(WU0|,s1O3}Q1O,uR3}0}Q(d#uR-P(dQ(m#yR-Y(mQ1f-cR4^1fQ)m$sR.R)mQ2Q.YS4n2Q6]R6]4oQ)x$zR.])xQ2W._R4s2WQ.l*SS2l.l5VR5V2nQ-u)]S1s-u4eR4e1tQ)a$hR-y)aQ/O*fR2|/OWhOSi!kQ%c{Q(y$VQ*`%^Q*b%aQ*c%bQ*e%dQ.y*aS.|*f/OR2{.{Q$XfQ%g!PQ%j!RQ%l!SQ%n!TQ)h$nQ)n$tQ*U%XQ*k%iS.o*V*YQ/V*jQ/W*mQ/X*nS/h+X2TQ1P,wQ1Q,xQ1W,}Q1v-|Q1{.TQ2f.fQ2p.qQ2z.zY3Y/j/k/p/t4uQ4O1RQ4Q1TQ4T1XQ4h1xQ4k1|Q5Q2gQ5W2o[5f3X3[3_3a3b6cQ5}4PQ6Q4UQ6X4fQ6j5RQ6o5XW6u5g5k5m5oQ7P6OQ7R6RQ7V6YQ7Y6^Q7c6kU7g6v6z6|Q7n7QQ7p7TQ7r7ZQ7y7dS7{7h7lQ8P7oQ8Q7sQ8V7|Q8X8RQ8[8WQ8]8YR8_8^Q$blQ&a!gU)W$c$d$eQ*w%}U+h&b&c&dQ,w(^S-q)X)YQ/_*yQ/g+XS/y+i+jQ1T,{Q1n-rQ3V/eS3]/l/pQ3g/zQ4U1YS5j3^3bQ6y5lR7k6{S#q`9sR)R$_U#y`$_9sR-X(lQ#p`S&r!t)SQ&v!vQ'a#aQ(Q#rQ(W#tQ(q#}Q(r$OQ(v$SQ+c&_Q+u8wQ+v8yQ+w8{Q,g'zQ,h'|Q,i'}Q,q(UQ,u(YQ-V(jQ-W(kd-c(}-h.a1h2b4a4z6Z6g7bQ-f)PQ.T)pQ.V)sQ/w+fQ0Q9RQ0R9TQ0S9VQ0T+zQ0h8sQ0y,rQ0},tQ1b-^Q1k-jQ1|.UQ2O.XQ2`.cQ3j9ZQ3n8xQ3o8zQ3p8|Q3u0rQ3|0{Q4S1VQ4Z1^Q4]1eQ4b1lQ4j1zQ4}2dQ5q9_Q5s9WQ5t9SQ5u9UQ5|3{Q6S4XQ6i5PQ6}9[Q7m9`Q9g9sQ9q9yR9r9zlfOSi{!k$V%^%a%b%d*a*f.{/OS!mU%`Q%i!QQ%o!UQ&}!yQ'n#hS*Y%V%YQ*^%ZQ*j%hQ*t%{Q+b&^Q,_'oQ-e)OQ.v*]Q/v+eQ0n,YQ1`-[Q1j-iQ2_.bQ2r.sQ2s.tQ2u.uQ2w.wQ3O/QQ3s0kQ4i1yQ4|2cQ5]2vQ5_2xQ5`2yQ6h5OR6q5^!vYOSUi{!Q!k!y$V%V%Y%Z%^%`%a%b%d%h%{&^)O*]*a*f+e-[-i.b.s.t.u.w.{/O/Q1y2c2v2x2y5O5^Q!]RQ!lTQ$ZjQ%r!ZQ%v!^Q&q!sQ&x!wQ'O!|Q'P!}Q'Q#OQ'R#PQ'S#QQ'T#RQ'U#SQ'V#TQ'W#UQ'X#VQ'Y#WQ'[#YQ'_#_Q'c#bW'm#h'o,Y0kQ)b$iQ*q%sS*z&P/`Q+T&WQ+k&hQ+y&uQ,P&yQ,S8`Q,U8bQ,a'uQ-_(wQ/Z*uQ/^*xQ/{+lQ0V+}Q0Z8eQ0[8fQ0]8gQ0^8hQ0_8iQ0`8jQ0a8kQ0b8lQ0c8mQ0d8nQ0e8oQ0f8pQ0g,TQ0j8tQ0o8qQ1c-aQ1o-sQ3U8}Q3X/iQ3h/|Q3k0WQ3l9OQ3q9QQ3r9XQ4o2RQ5d3SQ5g3ZQ5r9YQ5v9]Q5w9^Q6v5hQ7X6[Q7h6xQ7|7jQ8W8OQ8a!UR9l9vT!VQ!WR!_RR&R!`S%}!`*|S*y&O&VR/e+SR&w!vR&z!wT!qU$TS!pU$TU$spq*_S&k!o!rQ+p&lQ+s&oQ.Q)lS/}+o+qR3i0O[!bR!^$p&X)j+Vh!nUpq!o!r$T&l&o)l+o+q0OQ.x*_Q/[*vQ3R/UT9d&P)kT!dR$pS!cR$pS%w!^)jS*{&P)kQ+U&XR/f+VT&U!`$qQ#f]R's#kT'i#f'jR0m,XT(T#r(]R(Z#tQ-d(}Q1i-hQ2^.aQ4_1hQ4{2bQ6V4aQ6e4zQ7W6ZQ7a6gR7x7blgOSi{!k$V%^%a%b%d*a*f.{/OQ%WwR*U%TV$tpq*_R.Z)uR*T%RQ$lnR)g$mR)^$gT%[x%_T%]x%_T.}*f/O",
            nodeNames: "⚠ ArithOp ArithOp extends LineComment BlockComment Script ExportDeclaration export Star as VariableName from String ; default FunctionDeclaration async function VariableDefinition TypeParamList TypeDefinition ThisType this LiteralType ArithOp Number BooleanLiteral VoidType void TypeofType typeof MemberExpression . ?. PropertyName [ TemplateString null super RegExp ] ArrayExpression Spread , } { ObjectExpression Property async get set PropertyNameDefinition Block : NewExpression new TypeArgList CompareOp < ) ( ArgList UnaryExpression await yield delete LogicOp BitOp ParenthesizedExpression ClassExpression class extends ClassBody MethodDeclaration Privacy static abstract PropertyDeclaration readonly Optional TypeAnnotation Equals FunctionExpression ArrowFunction ParamList ParamList ArrayPattern ObjectPattern PatternProperty Privacy readonly Arrow MemberExpression BinaryExpression ArithOp ArithOp ArithOp ArithOp BitOp CompareOp in instanceof const CompareOp BitOp BitOp BitOp LogicOp LogicOp ConditionalExpression LogicOp LogicOp AssignmentExpression UpdateOp PostfixExpression CallExpression TaggedTemplatExpression DynamicImport import ImportMeta JSXElement JSXSelfCloseEndTag JSXStartTag JSXSelfClosingTag JSXIdentifier JSXNamespacedName JSXMemberExpression JSXSpreadAttribute JSXAttribute JSXAttributeValue JSXEscape JSXEndTag JSXOpenTag JSXFragmentTag JSXText JSXEscape JSXStartCloseTag JSXCloseTag PrefixCast ArrowFunction TypeParamList SequenceExpression KeyofType keyof UniqueType unique ImportType InferredType infer TypeName ParenthesizedType FunctionSignature ParamList NewSignature IndexedType TupleType Label ArrayType ReadonlyType ObjectType MethodType PropertyType IndexSignature CallSignature TypePredicate is NewSignature new UnionType LogicOp IntersectionType LogicOp ConditionalType ParameterizedType ClassDeclaration abstract implements type VariableDeclaration let var TypeAliasDeclaration InterfaceDeclaration interface EnumDeclaration enum EnumBody NamespaceDeclaration namespace module AmbientDeclaration declare GlobalDeclaration global ClassDeclaration ClassBody MethodDeclaration AmbientFunctionDeclaration ExportGroup VariableName VariableName ImportDeclaration ImportGroup ForStatement for ForSpec ForInSpec ForOfSpec of WhileStatement while WithStatement with DoStatement do IfStatement if else SwitchStatement switch SwitchBody CaseLabel case DefaultLabel TryStatement try catch finally ReturnStatement return ThrowStatement throw BreakStatement break ContinueStatement continue DebuggerStatement debugger LabeledStatement ExpressionStatement",
            maxTerm: 321,
            nodeProps: [
                [Ti.group, -26, 7, 14, 16, 53, 175, 179, 182, 183, 185, 188, 191, 202, 204, 210, 212, 214, 216, 219, 225, 229, 231, 233, 235, 237, 239, 240, "Statement", -30, 11, 13, 23, 26, 27, 37, 38, 39, 40, 42, 47, 55, 63, 69, 70, 83, 84, 93, 94, 110, 113, 115, 116, 117, 118, 120, 121, 139, 140, 142, "Expression", -21, 22, 24, 28, 30, 143, 145, 147, 148, 150, 151, 152, 154, 155, 156, 158, 159, 160, 169, 171, 173, 174, "Type", -2, 74, 78, "ClassItem"],
                [Ti.closedBy, 36, "]", 46, "}", 61, ")", 123, "JSXSelfCloseEndTag JSXEndTag", 137, "JSXEndTag"],
                [Ti.openedBy, 41, "[", 45, "{", 60, "(", 122, "JSXStartTag", 132, "JSXStartTag JSXStartCloseTag"]
            ],
            skippedNodes: [0, 4, 5],
            repeatNodeCount: 27,
            tokenData: "!?v~R!ZOX$tX^%S^p$tpq%Sqr&rrs'zst$ttu/wuv2Xvw2|wx3zxy:byz:rz{;S{|<S|}<g}!O<S!O!P<w!P!QAT!Q!R!-s!R![!/Y![!]!4x!]!^!5[!^!_!5l!_!`!6i!`!a!7a!a!b!9W!b!c$t!c!}/w!}#O!:i#O#P$t#P#Q!:y#Q#R!;Z#R#S/w#S#T!;n#T#o/w#o#p!<O#p#q!<T#q#r!<k#r#s!<}#s#y$t#y#z%S#z$f$t$f$g%S$g#BY/w#BY#BZ!=_#BZ$IS/w$IS$I_!=_$I_$I|/w$I|$JO!=_$JO$JT/w$JT$JU!=_$JU$KV/w$KV$KW!=_$KW&FU/w&FU&FV!=_&FV~/wW$yR#{WO!^$t!_#o$t#p~$t,T%Zg#{W&}+{OX$tX^%S^p$tpq%Sq!^$t!_#o$t#p#y$t#y#z%S#z$f$t$f$g%S$g#BY$t#BY#BZ%S#BZ$IS$t$IS$I_%S$I_$I|$t$I|$JO%S$JO$JT$t$JT$JU%S$JU$KV$t$KV$KW%S$KW&FU$t&FU&FV%S&FV~$t$T&yS#{W!e#{O!^$t!_!`'V!`#o$t#p~$t$O'^S#[#v#{WO!^$t!_!`'j!`#o$t#p~$t$O'qR#[#v#{WO!^$t!_#o$t#p~$t'u(RZ#{W]!ROY'zYZ(tZr'zrs*Rs!^'z!^!_*e!_#O'z#O#P,q#P#o'z#o#p*e#p~'z&r(yV#{WOr(trs)`s!^(t!^!_)p!_#o(t#o#p)p#p~(t&r)gR#v&j#{WO!^$t!_#o$t#p~$t&j)sROr)prs)|s~)p&j*RO#v&j'u*[R#v&j#{W]!RO!^$t!_#o$t#p~$t'm*jV]!ROY*eYZ)pZr*ers+Ps#O*e#O#P+W#P~*e'm+WO#v&j]!R'm+ZROr*ers+ds~*e'm+kU#v&j]!ROY+}Zr+}rs,fs#O+}#O#P,k#P~+}!R,SU]!ROY+}Zr+}rs,fs#O+}#O#P,k#P~+}!R,kO]!R!R,nPO~+}'u,vV#{WOr'zrs-]s!^'z!^!_*e!_#o'z#o#p*e#p~'z'u-fZ#v&j#{W]!ROY.XYZ$tZr.Xrs/Rs!^.X!^!_+}!_#O.X#O#P/c#P#o.X#o#p+}#p~.X!Z.`Z#{W]!ROY.XYZ$tZr.Xrs/Rs!^.X!^!_+}!_#O.X#O#P/c#P#o.X#o#p+}#p~.X!Z/YR#{W]!RO!^$t!_#o$t#p~$t!Z/hT#{WO!^.X!^!_+}!_#o.X#o#p+}#p~.X&i0S_#{W#qS'Yp'P%kOt$ttu/wu}$t}!O1R!O!Q$t!Q![/w![!^$t!_!c$t!c!}/w!}#R$t#R#S/w#S#T$t#T#o/w#p$g$t$g~/w[1Y_#{W#qSOt$ttu1Ru}$t}!O1R!O!Q$t!Q![1R![!^$t!_!c$t!c!}1R!}#R$t#R#S1R#S#T$t#T#o1R#p$g$t$g~1R$O2`S#T#v#{WO!^$t!_!`2l!`#o$t#p~$t$O2sR#{W#f#vO!^$t!_#o$t#p~$t%r3TU'm%j#{WOv$tvw3gw!^$t!_!`2l!`#o$t#p~$t$O3nS#{W#`#vO!^$t!_!`2l!`#o$t#p~$t'u4RZ#{W]!ROY3zYZ4tZw3zwx*Rx!^3z!^!_5l!_#O3z#O#P7l#P#o3z#o#p5l#p~3z&r4yV#{WOw4twx)`x!^4t!^!_5`!_#o4t#o#p5`#p~4t&j5cROw5`wx)|x~5`'m5qV]!ROY5lYZ5`Zw5lwx+Px#O5l#O#P6W#P~5l'm6ZROw5lwx6dx~5l'm6kU#v&j]!ROY6}Zw6}wx,fx#O6}#O#P7f#P~6}!R7SU]!ROY6}Zw6}wx,fx#O6}#O#P7f#P~6}!R7iPO~6}'u7qV#{WOw3zwx8Wx!^3z!^!_5l!_#o3z#o#p5l#p~3z'u8aZ#v&j#{W]!ROY9SYZ$tZw9Swx/Rx!^9S!^!_6}!_#O9S#O#P9|#P#o9S#o#p6}#p~9S!Z9ZZ#{W]!ROY9SYZ$tZw9Swx/Rx!^9S!^!_6}!_#O9S#O#P9|#P#o9S#o#p6}#p~9S!Z:RT#{WO!^9S!^!_6}!_#o9S#o#p6}#p~9S%V:iR!_$}#{WO!^$t!_#o$t#p~$tZ:yR!^R#{WO!^$t!_#o$t#p~$t%R;]U'Q!R#U#v#{WOz$tz{;o{!^$t!_!`2l!`#o$t#p~$t$O;vS#R#v#{WO!^$t!_!`2l!`#o$t#p~$t$u<ZSi$m#{WO!^$t!_!`2l!`#o$t#p~$t&i<nR|&a#{WO!^$t!_#o$t#p~$t&i=OVq%n#{WO!O$t!O!P=e!P!Q$t!Q![>Z![!^$t!_#o$t#p~$ty=jT#{WO!O$t!O!P=y!P!^$t!_#o$t#p~$ty>QR{q#{WO!^$t!_#o$t#p~$ty>bZ#{WjqO!Q$t!Q![>Z![!^$t!_!g$t!g!h?T!h#R$t#R#S>Z#S#X$t#X#Y?T#Y#o$t#p~$ty?YZ#{WO{$t{|?{|}$t}!O?{!O!Q$t!Q![@g![!^$t!_#R$t#R#S@g#S#o$t#p~$ty@QV#{WO!Q$t!Q![@g![!^$t!_#R$t#R#S@g#S#o$t#p~$ty@nV#{WjqO!Q$t!Q![@g![!^$t!_#R$t#R#S@g#S#o$t#p~$t,TA[`#{W#S#vOYB^YZ$tZzB^z{HT{!PB^!P!Q!*|!Q!^B^!^!_Da!_!`!+u!`!a!,t!a!}B^!}#OFY#O#PGi#P#oB^#o#pDa#p~B^XBe[#{WxPOYB^YZ$tZ!PB^!P!QCZ!Q!^B^!^!_Da!_!}B^!}#OFY#O#PGi#P#oB^#o#pDa#p~B^XCb_#{WxPO!^$t!_#Z$t#Z#[CZ#[#]$t#]#^CZ#^#a$t#a#bCZ#b#g$t#g#hCZ#h#i$t#i#jCZ#j#m$t#m#nCZ#n#o$t#p~$tPDfVxPOYDaZ!PDa!P!QD{!Q!}Da!}#OEd#O#PFP#P~DaPEQUxP#Z#[D{#]#^D{#a#bD{#g#hD{#i#jD{#m#nD{PEgTOYEdZ#OEd#O#PEv#P#QDa#Q~EdPEyQOYEdZ~EdPFSQOYDaZ~DaXF_Y#{WOYFYYZ$tZ!^FY!^!_Ed!_#OFY#O#PF}#P#QB^#Q#oFY#o#pEd#p~FYXGSV#{WOYFYYZ$tZ!^FY!^!_Ed!_#oFY#o#pEd#p~FYXGnV#{WOYB^YZ$tZ!^B^!^!_Da!_#oB^#o#pDa#p~B^,TH[^#{WxPOYHTYZIWZzHTz{Ki{!PHT!P!Q!)j!Q!^HT!^!_Mt!_!}HT!}#O!%e#O#P!(x#P#oHT#o#pMt#p~HT,TI]V#{WOzIWz{Ir{!^IW!^!_Jt!_#oIW#o#pJt#p~IW,TIwX#{WOzIWz{Ir{!PIW!P!QJd!Q!^IW!^!_Jt!_#oIW#o#pJt#p~IW,TJkR#{WT+{O!^$t!_#o$t#p~$t+{JwROzJtz{KQ{~Jt+{KTTOzJtz{KQ{!PJt!P!QKd!Q~Jt+{KiOT+{,TKp^#{WxPOYHTYZIWZzHTz{Ki{!PHT!P!QLl!Q!^HT!^!_Mt!_!}HT!}#O!%e#O#P!(x#P#oHT#o#pMt#p~HT,TLu_#{WT+{xPO!^$t!_#Z$t#Z#[CZ#[#]$t#]#^CZ#^#a$t#a#bCZ#b#g$t#g#hCZ#h#i$t#i#jCZ#j#m$t#m#nCZ#n#o$t#p~$t+{MyYxPOYMtYZJtZzMtz{Ni{!PMt!P!Q!$a!Q!}Mt!}#O! w#O#P!#}#P~Mt+{NnYxPOYMtYZJtZzMtz{Ni{!PMt!P!Q! ^!Q!}Mt!}#O! w#O#P!#}#P~Mt+{! eUT+{xP#Z#[D{#]#^D{#a#bD{#g#hD{#i#jD{#m#nD{+{! zWOY! wYZJtZz! wz{!!d{#O! w#O#P!#k#P#QMt#Q~! w+{!!gYOY! wYZJtZz! wz{!!d{!P! w!P!Q!#V!Q#O! w#O#P!#k#P#QMt#Q~! w+{!#[TT+{OYEdZ#OEd#O#PEv#P#QDa#Q~Ed+{!#nTOY! wYZJtZz! wz{!!d{~! w+{!$QTOYMtYZJtZzMtz{Ni{~Mt+{!$f_xPOzJtz{KQ{#ZJt#Z#[!$a#[#]Jt#]#^!$a#^#aJt#a#b!$a#b#gJt#g#h!$a#h#iJt#i#j!$a#j#mJt#m#n!$a#n~Jt,T!%j[#{WOY!%eYZIWZz!%ez{!&`{!^!%e!^!_! w!_#O!%e#O#P!(W#P#QHT#Q#o!%e#o#p! w#p~!%e,T!&e^#{WOY!%eYZIWZz!%ez{!&`{!P!%e!P!Q!'a!Q!^!%e!^!_! w!_#O!%e#O#P!(W#P#QHT#Q#o!%e#o#p! w#p~!%e,T!'hY#{WT+{OYFYYZ$tZ!^FY!^!_Ed!_#OFY#O#PF}#P#QB^#Q#oFY#o#pEd#p~FY,T!(]X#{WOY!%eYZIWZz!%ez{!&`{!^!%e!^!_! w!_#o!%e#o#p! w#p~!%e,T!(}X#{WOYHTYZIWZzHTz{Ki{!^HT!^!_Mt!_#oHT#o#pMt#p~HT,T!)qc#{WxPOzIWz{Ir{!^IW!^!_Jt!_#ZIW#Z#[!)j#[#]IW#]#^!)j#^#aIW#a#b!)j#b#gIW#g#h!)j#h#iIW#i#j!)j#j#mIW#m#n!)j#n#oIW#o#pJt#p~IW,T!+TV#{WS+{OY!*|YZ$tZ!^!*|!^!_!+j!_#o!*|#o#p!+j#p~!*|+{!+oQS+{OY!+jZ~!+j$P!,O[#{W#f#vxPOYB^YZ$tZ!PB^!P!QCZ!Q!^B^!^!_Da!_!}B^!}#OFY#O#PGi#P#oB^#o#pDa#p~B^]!,}[#nS#{WxPOYB^YZ$tZ!PB^!P!QCZ!Q!^B^!^!_Da!_!}B^!}#OFY#O#PGi#P#oB^#o#pDa#p~B^y!-zd#{WjqO!O$t!O!P>Z!P!Q$t!Q![!/Y![!^$t!_!g$t!g!h?T!h#R$t#R#S!/Y#S#U$t#U#V!0p#V#X$t#X#Y?T#Y#b$t#b#c!0`#c#d!2O#d#l$t#l#m!3W#m#o$t#p~$ty!/a_#{WjqO!O$t!O!P>Z!P!Q$t!Q![!/Y![!^$t!_!g$t!g!h?T!h#R$t#R#S!/Y#S#X$t#X#Y?T#Y#b$t#b#c!0`#c#o$t#p~$ty!0gR#{WjqO!^$t!_#o$t#p~$ty!0uW#{WO!Q$t!Q!R!1_!R!S!1_!S!^$t!_#R$t#R#S!1_#S#o$t#p~$ty!1fW#{WjqO!Q$t!Q!R!1_!R!S!1_!S!^$t!_#R$t#R#S!1_#S#o$t#p~$ty!2TV#{WO!Q$t!Q!Y!2j!Y!^$t!_#R$t#R#S!2j#S#o$t#p~$ty!2qV#{WjqO!Q$t!Q!Y!2j!Y!^$t!_#R$t#R#S!2j#S#o$t#p~$ty!3]Z#{WO!Q$t!Q![!4O![!^$t!_!c$t!c!i!4O!i#R$t#R#S!4O#S#T$t#T#Z!4O#Z#o$t#p~$ty!4VZ#{WjqO!Q$t!Q![!4O![!^$t!_!c$t!c!i!4O!i#R$t#R#S!4O#S#T$t#T#Z!4O#Z#o$t#p~$t%w!5RR!WV#{W#d%hO!^$t!_#o$t#p~$t!P!5cR^w#{WO!^$t!_#o$t#p~$t+c!5wR'Ud![%Y#o&s'qP!P!Q!6Q!^!_!6V!_!`!6dW!6VO#}W#v!6[P#V#v!_!`!6_#v!6dO#f#v#v!6iO#W#v%w!6pT!t%o#{WO!^$t!_!`'V!`!a!7P!a#o$t#p~$t$P!7WR#O#w#{WO!^$t!_#o$t#p~$t%w!7lT'T!s#W#v#xS#{WO!^$t!_!`!7{!`!a!8]!a#o$t#p~$t$O!8SR#W#v#{WO!^$t!_#o$t#p~$t$O!8dT#V#v#{WO!^$t!_!`2l!`!a!8s!a#o$t#p~$t$O!8zS#V#v#{WO!^$t!_!`2l!`#o$t#p~$t%w!9_V'e%o#{WO!O$t!O!P!9t!P!^$t!_!a$t!a!b!:U!b#o$t#p~$t$`!9{Rr$W#{WO!^$t!_#o$t#p~$t$O!:]S#{W#a#vO!^$t!_!`2l!`#o$t#p~$t&e!:pRt&]#{WO!^$t!_#o$t#p~$tZ!;QRyR#{WO!^$t!_#o$t#p~$t$O!;bS#^#v#{WO!^$t!_!`2l!`#o$t#p~$t$P!;uR#{W']#wO!^$t!_#o$t#p~$t~!<TO!O~%r!<[T'l%j#{WO!^$t!_!`2l!`#o$t#p#q!:U#q~$t$u!<tR}$k#{W'_QO!^$t!_#o$t#p~$tX!=UR!fP#{WO!^$t!_#o$t#p~$t,T!=lr#{W#qS'Yp'P%k&}+{OX$tX^%S^p$tpq%Sqt$ttu/wu}$t}!O1R!O!Q$t!Q![/w![!^$t!_!c$t!c!}/w!}#R$t#R#S/w#S#T$t#T#o/w#p#y$t#y#z%S#z$f$t$f$g%S$g#BY/w#BY#BZ!=_#BZ$IS/w$IS$I_!=_$I_$I|/w$I|$JO!=_$JO$JT/w$JT$JU!=_$JU$KV/w$KV$KW!=_$KW&FU/w&FU&FV!=_&FV~/w",
            tokenizers: [zc, Zc, Ec, 0, 1, 2, 3, 4, 5, 6, 7, 8, Yc],
            topRules: {
                Script: [0, 6]
            },
            dialects: {
                jsx: 11074,
                ts: 11076
            },
            dynamicPrecedences: {
                140: 1,
                167: 1
            },
            specialized: [{
                term: 277,
                get: (e, t) => function(e, t) {
                    return "extends" == e && t.dialectEnabled(1) ? 3 : -1
                }(e, t) << 1 | 1
            }, {
                term: 277,
                get: e => Ic[e] || -1
            }, {
                term: 286,
                get: e => Uc[e] || -1
            }, {
                term: 58,
                get: e => Vc[e] || -1
            }],
            tokenPrec: 11096
        });

    function Ac(e) {
        let t = Object.keys(e).join(""),
            n = /\w/.test(t);
        return n && (t = t.replace(/\w/g, "")), `[${n?"\\w":""}${t.replace(/[^\w\s]/g,"\\$&")}]`
    }

    function Cc(e) {
        let t = e.map((e => "string" == typeof e ? {
                label: e
            } : e)),
            [n, r] = t.every((e => /^\w+$/.test(e.label))) ? [/\w*$/, /\w+$/] : function(e) {
                let t = Object.create(null),
                    n = Object.create(null);
                for (let {
                        label: r
                    } of e) {
                    t[r[0]] = !0;
                    for (let e = 1; e < r.length; e++) n[r[e]] = !0
                }
                let r = Ac(t) + Ac(n) + "*$";
                return [new RegExp("^" + r), new RegExp(r)]
            }(t);
        return e => {
            let i = e.matchBefore(r);
            return i || e.explicit ? {
                from: i ? i.from : e.pos,
                options: t,
                span: n
            } : null
        }
    }

    function Gc(e, t) {
        return n => {
            for (let t = ta(n.state).resolve(n.pos, -1); t; t = t.parent)
                if (e.indexOf(t.name) > -1) return null;
            return t(n)
        }
    }
    const Lc = di.baseTheme({
        ".cm-tooltip.cm-tooltip-autocomplete": {
            "& > ul": {
                fontFamily: "monospace",
                whiteSpace: "nowrap",
                overflow: "auto",
                maxWidth_fallback: "700px",
                maxWidth: "min(700px, 95vw)",
                maxHeight: "10em",
                listStyle: "none",
                margin: 0,
                padding: 0,
                "& > li": {
                    cursor: "pointer",
                    padding: "1px 1em 1px 3px",
                    lineHeight: 1.2
                },
                "& > li[aria-selected]": {
                    background_fallback: "#bdf",
                    backgroundColor: "Highlight",
                    color_fallback: "white",
                    color: "HighlightText"
                }
            }
        },
        ".cm-completionListIncompleteTop:before, .cm-completionListIncompleteBottom:after": {
            content: '"···"',
            opacity: .5,
            display: "block",
            textAlign: "center"
        },
        ".cm-tooltip.cm-completionInfo": {
            position: "absolute",
            padding: "3px 9px",
            width: "max-content",
            maxWidth: "300px"
        },
        ".cm-completionInfo.cm-completionInfo-left": {
            right: "100%"
        },
        ".cm-completionInfo.cm-completionInfo-right": {
            left: "100%"
        },
        "&light .cm-snippetField": {
            backgroundColor: "#00000022"
        },
        "&dark .cm-snippetField": {
            backgroundColor: "#ffffff22"
        },
        ".cm-snippetFieldPosition": {
            verticalAlign: "text-top",
            width: 0,
            height: "1.15em",
            margin: "0 -0.7px -.7em",
            borderLeft: "1.4px dotted #888"
        },
        ".cm-completionMatchedText": {
            textDecoration: "underline"
        },
        ".cm-completionDetail": {
            marginLeft: "0.5em",
            fontStyle: "italic"
        },
        ".cm-completionIcon": {
            fontSize: "90%",
            width: ".8em",
            display: "inline-block",
            textAlign: "center",
            paddingRight: ".6em",
            opacity: "0.6"
        },
        ".cm-completionIcon-function, .cm-completionIcon-method": {
            "&:after": {
                content: "'ƒ'"
            }
        },
        ".cm-completionIcon-class": {
            "&:after": {
                content: "'○'"
            }
        },
        ".cm-completionIcon-interface": {
            "&:after": {
                content: "'◌'"
            }
        },
        ".cm-completionIcon-variable": {
            "&:after": {
                content: "'𝑥'"
            }
        },
        ".cm-completionIcon-constant": {
            "&:after": {
                content: "'𝐶'"
            }
        },
        ".cm-completionIcon-type": {
            "&:after": {
                content: "'𝑡'"
            }
        },
        ".cm-completionIcon-enum": {
            "&:after": {
                content: "'∪'"
            }
        },
        ".cm-completionIcon-property": {
            "&:after": {
                content: "'□'"
            }
        },
        ".cm-completionIcon-keyword": {
            "&:after": {
                content: "'🔑︎'"
            }
        },
        ".cm-completionIcon-namespace": {
            "&:after": {
                content: "'▢'"
            }
        },
        ".cm-completionIcon-text": {
            "&:after": {
                content: "'abc'",
                fontSize: "50%",
                verticalAlign: "middle"
            }
        }
    });
    class Nc {
        constructor(e, t, n, r) {
            this.field = e, this.line = t, this.from = n, this.to = r
        }
    }
    class Dc {
        constructor(e, t, n) {
            this.field = e, this.from = t, this.to = n
        }
        map(e) {
            return new Dc(this.field, e.mapPos(this.from, -1), e.mapPos(this.to, 1))
        }
    }
    class Mc {
        constructor(e, t) {
            this.lines = e, this.fieldPositions = t
        }
        instantiate(e, t) {
            let n = [],
                r = [t],
                i = e.doc.lineAt(t),
                a = /^\s*/.exec(i.text)[0];
            for (let i of this.lines) {
                if (n.length) {
                    let n = a,
                        o = /^\t*/.exec(i)[0].length;
                    for (let t = 0; t < o; t++) n += e.facet(pa);
                    r.push(t + n.length - o), i = n + i.slice(o)
                }
                n.push(i), t += i.length + 1
            }
            return {
                text: n,
                ranges: this.fieldPositions.map((e => new Dc(e.field, r[e.line] + e.from, r[e.line] + e.to)))
            }
        }
        static parse(e) {
            let t, n = [],
                r = [],
                i = [];
            for (let a of e.split(/\r\n?|\n/)) {
                for (; t = /[#$]\{(?:(\d+)(?::([^}]*))?|([^}]*))\}/.exec(a);) {
                    let e = t[1] ? +t[1] : null,
                        o = t[2] || t[3],
                        s = -1;
                    for (let t = 0; t < n.length; t++)(null != e ? n[t].seq == e : o && n[t].name == o) && (s = t);
                    if (s < 0) {
                        let t = 0;
                        for (; t < n.length && (null == e || null != n[t].seq && n[t].seq < e);) t++;
                        n.splice(t, 0, {
                            seq: e,
                            name: o || null
                        }), s = t;
                        for (let e of i) e.field >= s && e.field++
                    }
                    i.push(new Nc(s, r.length, t.index, t.index + o.length)), a = a.slice(0, t.index) + o + a.slice(t.index + t[0].length)
                }
                r.push(a)
            }
            return new Mc(r, i)
        }
    }
    let Bc = Ht.widget({
            widget: new class extends Bt {
                toDOM() {
                    let e = document.createElement("span");
                    return e.className = "cm-snippetFieldPosition", e
                }
                ignoreEvent() {
                    return !1
                }
            }
        }),
        Fc = Ht.mark({
            class: "cm-snippetField"
        });
    class Hc {
        constructor(e, t) {
            this.ranges = e, this.active = t, this.deco = Ht.set(e.map((e => (e.from == e.to ? Bc : Fc).range(e.from, e.to))))
        }
        map(e) {
            return new Hc(this.ranges.map((t => t.map(e))), this.active)
        }
        selectionInsideField(e) {
            return e.ranges.every((e => this.ranges.some((t => t.field == this.active && t.from <= e.from && t.to >= e.to))))
        }
    }
    const Jc = le.define({
            map: (e, t) => e && e.map(t)
        }),
        Kc = le.define(),
        eu = A.define({
            create: () => null,
            update(e, t) {
                for (let n of t.effects) {
                    if (n.is(Jc)) return n.value;
                    if (n.is(Kc) && e) return new Hc(e.ranges, n.value)
                }
                return e && t.docChanged && (e = e.map(t.changes)), e && t.selection && !e.selectionInsideField(t.selection) && (e = null), e
            },
            provide: e => di.decorations.from(e, (e => e ? e.deco : Ht.none))
        });

    function tu(e, t) {
        return W.create(e.filter((e => e.field == t)).map((e => W.range(e.from, e.to))))
    }

    function nu(e) {
        let t = Mc.parse(e);
        return (e, n, r, i) => {
            let {
                text: a,
                ranges: o
            } = t.instantiate(e.state, r), s = {
                changes: {
                    from: r,
                    to: i,
                    insert: d.of(a)
                }
            };
            if (o.length && (s.selection = tu(o, 0)), o.length > 1) {
                let t = new Hc(o, 0),
                    n = s.effects = [Jc.of(t)];
                void 0 === e.state.field(eu, !1) && n.push(le.appendConfig.of([eu.init((() => t)), ou, Ou, Lc]))
            }
            e.dispatch(e.state.update(s))
        }
    }

    function ru(e) {
        return ({
            state: t,
            dispatch: n
        }) => {
            let r = t.field(eu, !1);
            if (!r || e < 0 && 0 == r.active) return !1;
            let i = r.active + e,
                a = e > 0 && !r.ranges.some((t => t.field == i + e));
            return n(t.update({
                selection: tu(r.ranges, i),
                effects: Jc.of(a ? null : new Hc(r.ranges, i))
            })), !0
        }
    }
    const iu = [{
            key: "Tab",
            run: ru(1),
            shift: ru(-1)
        }, {
            key: "Escape",
            run: ({
                state: e,
                dispatch: t
            }) => !!e.field(eu, !1) && (t(e.update({
                effects: Jc.of(null)
            })), !0)
        }],
        au = Z.define({
            combine: e => e.length ? e[0] : iu
        }),
        ou = D.override(Pi.compute([au], (e => e.facet(au))));

    function su(e, t) {
        return Object.assign(Object.assign({}, t), {
            apply: nu(e)
        })
    }
    const Ou = di.domEventHandlers({
            mousedown(e, t) {
                let n, r = t.state.field(eu, !1);
                if (!r || null == (n = t.posAtCoords({
                        x: e.clientX,
                        y: e.clientY
                    }))) return !1;
                let i = r.ranges.find((e => e.from <= n && e.to >= n));
                return !(!i || i.field == r.active) && (t.dispatch({
                    selection: tu(r.ranges, i.field),
                    effects: Jc.of(r.ranges.some((e => e.field > i.field)) ? new Hc(r.ranges, i.field) : null)
                }), !0)
            }
        }),
        lu = [su("function ${name}(${params}) {\n\t${}\n}", {
            label: "function",
            detail: "definition",
            type: "keyword"
        }), su("for (let ${index} = 0; ${index} < ${bound}; ${index}++) {\n\t${}\n}", {
            label: "for",
            detail: "loop",
            type: "keyword"
        }), su("for (let ${name} of ${collection}) {\n\t${}\n}", {
            label: "for",
            detail: "of loop",
            type: "keyword"
        }), su("try {\n\t${}\n} catch (${error}) {\n\t${}\n}", {
            label: "try",
            detail: "block",
            type: "keyword"
        }), su("class ${name} {\n\tconstructor(${params}) {\n\t\t${}\n\t}\n}", {
            label: "class",
            detail: "definition",
            type: "keyword"
        }), su('import {${names}} from "${module}"\n${}', {
            label: "import",
            detail: "named",
            type: "keyword"
        }), su('import ${name} from "${module}"\n${}', {
            label: "import",
            detail: "default",
            type: "keyword"
        })],
        cu = ea.define({
            parser: jc.configure({
                props: [Qa.add({
                    IfStatement: va({
                        except: /^\s*({|else\b)/
                    }),
                    TryStatement: va({
                        except: /^\s*({|catch|finally)\b/
                    }),
                    LabeledStatement: ya,
                    SwitchBody: e => {
                        let t = e.textAfter,
                            n = /^\s*\}/.test(t),
                            r = /^\s*(case|default)\b/.test(t);
                        return e.baseIndent + (n ? 0 : r ? 1 : 2) * e.unit
                    },
                    Block: function({
                        closing: e,
                        align: t = !0,
                        units: n = 1
                    }) {
                        return r => ka(r, t, n, e)
                    }({
                        closing: "}"
                    }),
                    ArrowFunction: e => e.baseIndent + e.unit,
                    "TemplateString BlockComment": () => -1,
                    "Statement Property": va({
                        except: /^{/
                    }),
                    JSXElement(e) {
                        let t = /^\s*<\//.test(e.textAfter);
                        return e.lineIndent(e.state.doc.lineAt(e.node.from)) + (t ? 0 : e.unit)
                    },
                    JSXEscape(e) {
                        let t = /\s*\}/.test(e.textAfter);
                        return e.lineIndent(e.state.doc.lineAt(e.node.from)) + (t ? 0 : e.unit)
                    },
                    "JSXOpenTag JSXSelfClosingTag": e => e.column(e.node.from) + e.unit
                }), Sa.add({
                    "Block ClassBody SwitchBody EnumBody ObjectExpression ArrayExpression": _a,
                    BlockComment: e => ({
                        from: e.from + 2,
                        to: e.to - 2
                    })
                }), ks({
                    "get set async static": Fs.modifier,
                    "for while do if else switch try catch finally return throw break continue default case": Fs.controlKeyword,
                    "in of await yield void typeof delete instanceof": Fs.operatorKeyword,
                    "export import let var const function class extends": Fs.definitionKeyword,
                    "with debugger from as new": Fs.keyword,
                    TemplateString: Fs.special(Fs.string),
                    Super: Fs.atom,
                    BooleanLiteral: Fs.bool,
                    this: Fs.self,
                    null: Fs.null,
                    Star: Fs.modifier,
                    VariableName: Fs.variableName,
                    "CallExpression/VariableName": Fs.function(Fs.variableName),
                    VariableDefinition: Fs.definition(Fs.variableName),
                    Label: Fs.labelName,
                    PropertyName: Fs.propertyName,
                    "CallExpression/MemberExpression/PropertyName": Fs.function(Fs.propertyName),
                    "FunctionDeclaration/VariableDefinition": Fs.function(Fs.definition(Fs.variableName)),
                    "ClassDeclaration/VariableDefinition": Fs.definition(Fs.className),
                    PropertyNameDefinition: Fs.definition(Fs.propertyName),
                    UpdateOp: Fs.updateOperator,
                    LineComment: Fs.lineComment,
                    BlockComment: Fs.blockComment,
                    Number: Fs.number,
                    String: Fs.string,
                    ArithOp: Fs.arithmeticOperator,
                    LogicOp: Fs.logicOperator,
                    BitOp: Fs.bitwiseOperator,
                    CompareOp: Fs.compareOperator,
                    RegExp: Fs.regexp,
                    Equals: Fs.definitionOperator,
                    "Arrow : Spread": Fs.punctuation,
                    "( )": Fs.paren,
                    "[ ]": Fs.squareBracket,
                    "{ }": Fs.brace,
                    ".": Fs.derefOperator,
                    ", ;": Fs.separator,
                    TypeName: Fs.typeName,
                    TypeDefinition: Fs.definition(Fs.typeName),
                    "type enum interface implements namespace module declare": Fs.definitionKeyword,
                    "abstract global privacy readonly": Fs.modifier,
                    "is keyof unique infer": Fs.operatorKeyword,
                    JSXAttributeValue: Fs.string,
                    JSXText: Fs.content,
                    "JSXStartTag JSXStartCloseTag JSXSelfCloseEndTag JSXEndTag": Fs.angleBracket,
                    "JSXIdentifier JSXNameSpacedName": Fs.tagName,
                    "JSXAttribute/JSXIdentifier JSXAttribute/JSXNameSpacedName": Fs.propertyName
                })]
            }),
            languageData: {
                closeBrackets: {
                    brackets: ["(", "[", "{", "'", '"', "`"]
                },
                commentTokens: {
                    line: "//",
                    block: {
                        open: "/*",
                        close: "*/"
                    }
                },
                indentOnInput: /^\s*(?:case |default:|\{|\}|<\/)$/,
                wordChars: "$"
            }
        }),
        uu = cu.configure({
            dialect: "ts"
        }),
        du = cu.configure({
            dialect: "jsx"
        }),
        pu = cu.configure({
            dialect: "jsx ts"
        });

    function hu(e = {}) {
        let t = e.jsx ? e.typescript ? pu : du : e.typescript ? uu : cu;
        return new ca(t, cu.data.of({
            autocomplete: Gc(["LineComment", "BlockComment", "String"], Cc(lu))
        }))
    }

    function fu(e, t, n, r) {
        return n.line(e + r.line).from + t + (1 == e ? r.col - 1 : -1)
    }

    function mu(e, t, n) {
        let r = fu(e.line, e.column, t, n),
            i = {
                from: r,
                to: null != e.endLine && 1 != e.endColumn ? fu(e.endLine, e.endColumn, t, n) : r,
                message: e.message,
                source: e.ruleId ? "jshint:" + e.ruleId : "jshint",
                severity: 1 == e.severity ? "warning" : "error"
            };
        if (e.fix) {
            let {
                range: t,
                text: a
            } = e.fix, o = t[0] + n.pos - r, s = t[1] + n.pos - r;
            i.actions = [{
                name: "fix",
                apply(e, t) {
                    e.dispatch({
                        changes: {
                            from: t + o,
                            to: t + s,
                            insert: a
                        },
                        scrollIntoView: !0
                    })
                }
            }]
        }
        return i
    }
    var gu = Object.freeze({
        __proto__: null,
        esLint: function(e, t) {
            return t || (t = {
                parserOptions: {
                    ecmaVersion: 2019,
                    sourceType: "module"
                },
                env: {
                    browser: !0,
                    node: !0,
                    es6: !0,
                    es2015: !0,
                    es2017: !0,
                    es2020: !0
                },
                rules: {}
            }, e.getRules().forEach(((e, n) => {
                e.meta.docs.recommended && (t.rules[n] = 2)
            }))), n => {
                let {
                    state: r
                } = n, i = [];
                for (let {
                        from: n,
                        to: a
                    } of cu.findRegions(r)) {
                    let o = r.doc.lineAt(n),
                        s = {
                            line: o.number - 1,
                            col: n - o.from,
                            pos: n
                        };
                    for (let o of e.verify(r.sliceDoc(n, a), t)) i.push(mu(o, r.doc, s))
                }
                return i
            }
        },
        javascript: hu,
        javascriptLanguage: cu,
        jsxLanguage: du,
        snippets: lu,
        tsxLanguage: pu,
        typescriptLanguage: uu
    });
    const Qu = ["_blank", "_self", "_top", "_parent"],
        $u = ["ascii", "utf-8", "utf-16", "latin1", "latin1"],
        bu = ["get", "post", "put", "delete"],
        xu = ["application/x-www-form-urlencoded", "multipart/form-data", "text/plain"],
        Pu = ["true", "false"],
        wu = {},
        ku = {
            a: {
                attrs: {
                    href: null,
                    ping: null,
                    type: null,
                    media: null,
                    target: Qu,
                    hreflang: null
                }
            },
            abbr: wu,
            acronym: wu,
            address: wu,
            applet: wu,
            area: {
                attrs: {
                    alt: null,
                    coords: null,
                    href: null,
                    target: null,
                    ping: null,
                    media: null,
                    hreflang: null,
                    type: null,
                    shape: ["default", "rect", "circle", "poly"]
                }
            },
            article: wu,
            aside: wu,
            audio: {
                attrs: {
                    src: null,
                    mediagroup: null,
                    crossorigin: ["anonymous", "use-credentials"],
                    preload: ["none", "metadata", "auto"],
                    autoplay: ["autoplay"],
                    loop: ["loop"],
                    controls: ["controls"]
                }
            },
            b: wu,
            base: {
                attrs: {
                    href: null,
                    target: Qu
                }
            },
            basefont: wu,
            bdi: wu,
            bdo: wu,
            big: wu,
            blockquote: {
                attrs: {
                    cite: null
                }
            },
            body: wu,
            br: wu,
            button: {
                attrs: {
                    form: null,
                    formaction: null,
                    name: null,
                    value: null,
                    autofocus: ["autofocus"],
                    disabled: ["autofocus"],
                    formenctype: xu,
                    formmethod: bu,
                    formnovalidate: ["novalidate"],
                    formtarget: Qu,
                    type: ["submit", "reset", "button"]
                }
            },
            canvas: {
                attrs: {
                    width: null,
                    height: null
                }
            },
            caption: wu,
            center: wu,
            cite: wu,
            code: wu,
            col: {
                attrs: {
                    span: null
                }
            },
            colgroup: {
                attrs: {
                    span: null
                }
            },
            command: {
                attrs: {
                    type: ["command", "checkbox", "radio"],
                    label: null,
                    icon: null,
                    radiogroup: null,
                    command: null,
                    title: null,
                    disabled: ["disabled"],
                    checked: ["checked"]
                }
            },
            data: {
                attrs: {
                    value: null
                }
            },
            datagrid: {
                attrs: {
                    disabled: ["disabled"],
                    multiple: ["multiple"]
                }
            },
            datalist: {
                attrs: {
                    data: null
                }
            },
            dd: wu,
            del: {
                attrs: {
                    cite: null,
                    datetime: null
                }
            },
            details: {
                attrs: {
                    open: ["open"]
                }
            },
            dfn: wu,
            dir: wu,
            div: wu,
            dl: wu,
            dt: wu,
            em: wu,
            embed: {
                attrs: {
                    src: null,
                    type: null,
                    width: null,
                    height: null
                }
            },
            eventsource: {
                attrs: {
                    src: null
                }
            },
            fieldset: {
                attrs: {
                    disabled: ["disabled"],
                    form: null,
                    name: null
                }
            },
            figcaption: wu,
            figure: wu,
            font: wu,
            footer: wu,
            form: {
                attrs: {
                    action: null,
                    name: null,
                    "accept-charset": $u,
                    autocomplete: ["on", "off"],
                    enctype: xu,
                    method: bu,
                    novalidate: ["novalidate"],
                    target: Qu
                }
            },
            frame: wu,
            frameset: wu,
            h1: wu,
            h2: wu,
            h3: wu,
            h4: wu,
            h5: wu,
            h6: wu,
            head: {
                children: ["title", "base", "link", "style", "meta", "script", "noscript", "command"]
            },
            header: wu,
            hgroup: wu,
            hr: wu,
            html: {
                attrs: {
                    manifest: null
                },
                children: ["head", "body"]
            },
            i: wu,
            iframe: {
                attrs: {
                    src: null,
                    srcdoc: null,
                    name: null,
                    width: null,
                    height: null,
                    sandbox: ["allow-top-navigation", "allow-same-origin", "allow-forms", "allow-scripts"],
                    seamless: ["seamless"]
                }
            },
            img: {
                attrs: {
                    alt: null,
                    src: null,
                    ismap: null,
                    usemap: null,
                    width: null,
                    height: null,
                    crossorigin: ["anonymous", "use-credentials"]
                }
            },
            input: {
                attrs: {
                    alt: null,
                    dirname: null,
                    form: null,
                    formaction: null,
                    height: null,
                    list: null,
                    max: null,
                    maxlength: null,
                    min: null,
                    name: null,
                    pattern: null,
                    placeholder: null,
                    size: null,
                    src: null,
                    step: null,
                    value: null,
                    width: null,
                    accept: ["audio/*", "video/*", "image/*"],
                    autocomplete: ["on", "off"],
                    autofocus: ["autofocus"],
                    checked: ["checked"],
                    disabled: ["disabled"],
                    formenctype: xu,
                    formmethod: bu,
                    formnovalidate: ["novalidate"],
                    formtarget: Qu,
                    multiple: ["multiple"],
                    readonly: ["readonly"],
                    required: ["required"],
                    type: ["hidden", "text", "search", "tel", "url", "email", "password", "datetime", "date", "month", "week", "time", "datetime-local", "number", "range", "color", "checkbox", "radio", "file", "submit", "image", "reset", "button"]
                }
            },
            ins: {
                attrs: {
                    cite: null,
                    datetime: null
                }
            },
            kbd: wu,
            keygen: {
                attrs: {
                    challenge: null,
                    form: null,
                    name: null,
                    autofocus: ["autofocus"],
                    disabled: ["disabled"],
                    keytype: ["RSA"]
                }
            },
            label: {
                attrs: {
                    for: null,
                    form: null
                }
            },
            legend: wu,
            li: {
                attrs: {
                    value: null
                }
            },
            link: {
                attrs: {
                    href: null,
                    type: null,
                    hreflang: null,
                    media: null,
                    sizes: ["all", "16x16", "16x16 32x32", "16x16 32x32 64x64"]
                }
            },
            map: {
                attrs: {
                    name: null
                }
            },
            mark: wu,
            menu: {
                attrs: {
                    label: null,
                    type: ["list", "context", "toolbar"]
                }
            },
            meta: {
                attrs: {
                    content: null,
                    charset: $u,
                    name: ["viewport", "application-name", "author", "description", "generator", "keywords"],
                    "http-equiv": ["content-language", "content-type", "default-style", "refresh"]
                }
            },
            meter: {
                attrs: {
                    value: null,
                    min: null,
                    low: null,
                    high: null,
                    max: null,
                    optimum: null
                }
            },
            nav: wu,
            noframes: wu,
            noscript: wu,
            object: {
                attrs: {
                    data: null,
                    type: null,
                    name: null,
                    usemap: null,
                    form: null,
                    width: null,
                    height: null,
                    typemustmatch: ["typemustmatch"]
                }
            },
            ol: {
                attrs: {
                    reversed: ["reversed"],
                    start: null,
                    type: ["1", "a", "A", "i", "I"]
                },
                children: ["li", "script", "template", "ul", "ol"]
            },
            optgroup: {
                attrs: {
                    disabled: ["disabled"],
                    label: null
                }
            },
            option: {
                attrs: {
                    disabled: ["disabled"],
                    label: null,
                    selected: ["selected"],
                    value: null
                }
            },
            output: {
                attrs: {
                    for: null,
                    form: null,
                    name: null
                }
            },
            p: wu,
            param: {
                attrs: {
                    name: null,
                    value: null
                }
            },
            pre: wu,
            progress: {
                attrs: {
                    value: null,
                    max: null
                }
            },
            q: {
                attrs: {
                    cite: null
                }
            },
            rp: wu,
            rt: wu,
            ruby: wu,
            s: wu,
            samp: wu,
            script: {
                attrs: {
                    type: ["text/javascript"],
                    src: null,
                    async: ["async"],
                    defer: ["defer"],
                    charset: $u
                }
            },
            section: wu,
            select: {
                attrs: {
                    form: null,
                    name: null,
                    size: null,
                    autofocus: ["autofocus"],
                    disabled: ["disabled"],
                    multiple: ["multiple"]
                }
            },
            small: wu,
            source: {
                attrs: {
                    src: null,
                    type: null,
                    media: null
                }
            },
            span: wu,
            strike: wu,
            strong: wu,
            style: {
                attrs: {
                    type: ["text/css"],
                    media: null,
                    scoped: null
                }
            },
            sub: wu,
            summary: wu,
            sup: wu,
            table: wu,
            tbody: wu,
            td: {
                attrs: {
                    colspan: null,
                    rowspan: null,
                    headers: null
                }
            },
            textarea: {
                attrs: {
                    dirname: null,
                    form: null,
                    maxlength: null,
                    name: null,
                    placeholder: null,
                    rows: null,
                    cols: null,
                    autofocus: ["autofocus"],
                    disabled: ["disabled"],
                    readonly: ["readonly"],
                    required: ["required"],
                    wrap: ["soft", "hard"]
                }
            },
            tfoot: wu,
            th: {
                attrs: {
                    colspan: null,
                    rowspan: null,
                    headers: null,
                    scope: ["row", "col", "rowgroup", "colgroup"]
                }
            },
            thead: wu,
            time: {
                attrs: {
                    datetime: null
                }
            },
            title: wu,
            tr: wu,
            track: {
                attrs: {
                    src: null,
                    label: null,
                    default: null,
                    kind: ["subtitles", "captions", "descriptions", "chapters", "metadata"],
                    srclang: null
                }
            },
            tt: wu,
            u: wu,
            ul: {
                children: ["li", "script", "template", "ul", "ol"]
            },
            var: wu,
            video: {
                attrs: {
                    src: null,
                    poster: null,
                    width: null,
                    height: null,
                    crossorigin: ["anonymous", "use-credentials"],
                    preload: ["auto", "metadata", "none"],
                    autoplay: ["autoplay"],
                    mediagroup: ["movie"],
                    muted: ["muted"],
                    controls: ["controls"]
                }
            },
            wbr: wu
        },
        yu = {
            accesskey: null,
            class: null,
            contenteditable: Pu,
            contextmenu: null,
            dir: ["ltr", "rtl", "auto"],
            draggable: ["true", "false", "auto"],
            dropzone: ["copy", "move", "link", "string:", "file:"],
            hidden: ["hidden"],
            id: null,
            inert: ["inert"],
            itemid: null,
            itemprop: null,
            itemref: null,
            itemscope: ["itemscope"],
            itemtype: null,
            lang: ["ar", "bn", "de", "en-GB", "en-US", "es", "fr", "hi", "id", "ja", "pa", "pt", "ru", "tr", "zh"],
            spellcheck: Pu,
            autocorrect: Pu,
            autocapitalize: Pu,
            style: null,
            tabindex: null,
            title: null,
            translate: ["yes", "no"],
            onclick: null,
            rel: ["stylesheet", "alternate", "author", "bookmark", "help", "license", "next", "nofollow", "noreferrer", "prefetch", "prev", "search", "tag"],
            role: "alert application article banner button cell checkbox complementary contentinfo dialog document feed figure form grid gridcell heading img list listbox listitem main navigation region row rowgroup search switch tab table tabpanel textbox timer".split(" "),
            "aria-activedescendant": null,
            "aria-atomic": Pu,
            "aria-autocomplete": ["inline", "list", "both", "none"],
            "aria-busy": Pu,
            "aria-checked": ["true", "false", "mixed", "undefined"],
            "aria-controls": null,
            "aria-describedby": null,
            "aria-disabled": Pu,
            "aria-dropeffect": null,
            "aria-expanded": ["true", "false", "undefined"],
            "aria-flowto": null,
            "aria-grabbed": ["true", "false", "undefined"],
            "aria-haspopup": Pu,
            "aria-hidden": Pu,
            "aria-invalid": ["true", "false", "grammar", "spelling"],
            "aria-label": null,
            "aria-labelledby": null,
            "aria-level": null,
            "aria-live": ["off", "polite", "assertive"],
            "aria-multiline": Pu,
            "aria-multiselectable": Pu,
            "aria-owns": null,
            "aria-posinset": null,
            "aria-pressed": ["true", "false", "mixed", "undefined"],
            "aria-readonly": Pu,
            "aria-relevant": null,
            "aria-required": Pu,
            "aria-selected": ["true", "false", "undefined"],
            "aria-setsize": null,
            "aria-sort": ["ascending", "descending", "none", "other"],
            "aria-valuemax": null,
            "aria-valuemin": null,
            "aria-valuenow": null,
            "aria-valuetext": null
        },
        vu = Object.keys(ku),
        Su = Object.keys(yu);

    function _u(e, t) {
        let n = t.firstChild,
            r = n && n.getChild("TagName");
        return r ? e.sliceString(r.from, r.to) : ""
    }

    function Xu(e, t = !1) {
        for (let n = e.parent; n; n = n.parent)
            if ("Element" == n.name) {
                if (!t) return n;
                t = !1
            }
        return null
    }

    function Tu(e, t) {
        let n = Xu(t, !0),
            r = n ? ku[_u(e, n)] : null;
        return (null == r ? void 0 : r.children) || vu
    }

    function Ru(e, t) {
        let n = [];
        for (let r = t; r = Xu(r);) {
            let i = _u(e, r);
            if (i && "CloseTag" == r.lastChild.name) break;
            i && n.indexOf(i) < 0 && ("EndTag" == t.name || t.from >= r.firstChild.to) && n.push(i)
        }
        return n
    }
    const Wu = /^[:\-\.\w\u00b7-\uffff]+$/;

    function qu(e, t, n, r) {
        let i = /\s*>/.test(e.sliceDoc(r, r + 5)) ? "" : ">";
        return {
            from: n,
            to: r,
            options: Tu(e.doc, t).map((e => ({
                label: e,
                type: "type"
            }))).concat(Ru(e.doc, t).map(((e, t) => ({
                label: "/" + e,
                apply: "/" + e + i,
                type: "type",
                boost: 99 - t
            })))),
            span: /^\/?[:\-\.\w\u00b7-\uffff]*$/
        }
    }

    function Yu(e, t, n, r) {
        let i = /\s*>/.test(e.sliceDoc(r, r + 5)) ? "" : ">";
        return {
            from: n,
            to: r,
            options: Ru(e.doc, t).map(((e, t) => ({
                label: e,
                apply: e + i,
                type: "type",
                boost: 99 - t
            }))),
            span: Wu
        }
    }
    const zu = ea.define({
            parser: lc.configure({
                props: [Qa.add({
                    Element(e) {
                        let t = /^(\s*)(<\/)?/.exec(e.textAfter);
                        return e.node.to <= e.pos + t[0].length ? e.continue() : e.lineIndent(e.state.doc.lineAt(e.node.from)) + (t[2] ? 0 : e.unit)
                    },
                    "OpenTag CloseTag SelfClosingTag": e => e.column(e.node.from) + e.unit,
                    Document(e) {
                        if (e.pos + /\s*/.exec(e.textAfter)[0].length < e.node.to) return e.continue();
                        let t, n = null;
                        for (let t = e.node;;) {
                            let e = t.lastChild;
                            if (!e || "Element" != e.name || e.to != t.to) break;
                            n = t = e
                        }
                        return n && (!(t = n.lastChild) || "CloseTag" != t.name && "SelfClosingTag" != t.name) ? e.lineIndent(e.state.doc.lineAt(n.from)) + e.unit : null
                    }
                }), Sa.add({
                    Element(e) {
                        let t = e.firstChild,
                            n = e.lastChild;
                        return t && "OpenTag" == t.name ? {
                            from: t.to,
                            to: "CloseTag" == n.name ? n.from : e.to
                        } : null
                    }
                }), ks({
                    AttributeValue: Fs.string,
                    "Text RawText": Fs.content,
                    "StartTag StartCloseTag SelfCloserEndTag EndTag SelfCloseEndTag": Fs.angleBracket,
                    TagName: Fs.tagName,
                    "MismatchedCloseTag/TagName": [Fs.tagName, Fs.invalid],
                    AttributeName: Fs.propertyName,
                    UnquotedAttributeValue: Fs.string,
                    Is: Fs.definitionOperator,
                    "EntityReference CharacterReference": Fs.character,
                    Comment: Fs.blockComment,
                    ProcessingInst: Fs.processingInstruction,
                    DoctypeDecl: Fs.documentMeta
                })],
                nested: Oc([{
                    tag: "script",
                    attrs: e => !e.type || /^(?:text|application)\/(?:x-)?(?:java|ecma)script$|^module$|^$/i.test(e.type),
                    parser: cu.parser
                }, {
                    tag: "style",
                    attrs: e => (!e.lang || "css" == e.lang) && (!e.type || /^(text\/)?(x-)?(stylesheet|css)$/i.test(e.type)),
                    parser: vc.parser
                }])
            }),
            languageData: {
                commentTokens: {
                    block: {
                        open: "\x3c!--",
                        close: "--\x3e"
                    }
                },
                indentOnInput: /^\s*<\/$/
            }
        }),
        Zu = zu.data.of({
            autocomplete: function(e) {
                let {
                    state: t,
                    pos: n
                } = e, r = ta(t).resolve(n), i = r.resolve(n, -1);
                return "TagName" == i.name ? i.parent && /CloseTag$/.test(i.parent.name) ? Yu(t, i, i.from, n) : qu(t, i, i.from, n) : "StartTag" == i.name ? qu(t, i, n, n) : "StartCloseTag" == i.name || "IncompleteCloseTag" == i.name ? Yu(t, i, n, n) : e.explicit && ("OpenTag" == i.name || "SelfClosingTag" == i.name) || "AttributeName" == i.name ? function(e, t, n, r) {
                    let i = Xu(t),
                        a = i ? ku[_u(e.doc, i)] : null;
                    return {
                        from: n,
                        to: r,
                        options: (a && a.attrs ? Object.keys(a.attrs).concat(Su) : Su).map((e => ({
                            label: e,
                            type: "property"
                        }))),
                        span: Wu
                    }
                }(t, i, "AttributeName" == i.name ? i.from : n, n) : "Is" == i.name || "AttributeValue" == i.name || "UnquotedAttributeValue" == i.name ? function(e, t, n, r) {
                    var i;
                    let a, o = null === (i = t.parent) || void 0 === i ? void 0 : i.getChild("AttributeName"),
                        s = [];
                    if (o) {
                        let i = e.sliceDoc(o.from, o.to),
                            O = yu[i];
                        if (!O) {
                            let n = Xu(t),
                                r = n ? ku[_u(e.doc, n)] : null;
                            O = (null == r ? void 0 : r.attrs) && r.attrs[i]
                        }
                        if (O) {
                            let t = e.sliceDoc(n, r).toLowerCase(),
                                i = '"',
                                o = '"';
                            /^['"]/.test(t) ? (a = '"' == t[0] ? /^[^"]*$/ : /^[^']*$/, i = "", o = e.sliceDoc(r, r + 1) == t[0] ? "" : t[0], t = t.slice(1), n++) : a = /^[^\s<>='"]*$/;
                            for (let e of O) s.push({
                                label: e,
                                apply: i + e + o,
                                type: "constant"
                            })
                        }
                    }
                    return {
                        from: n,
                        to: r,
                        options: s,
                        span: a
                    }
                }(t, i, "Is" == i.name ? n : i.from, n) : !e.explicit || "Element" != r.name && "Text" != r.name && "Document" != r.name ? null : function(e, t, n) {
                    let r = [],
                        i = 0;
                    for (let n of Tu(e.doc, t)) r.push({
                        label: "<" + n,
                        type: "type"
                    });
                    for (let n of Ru(e.doc, t)) r.push({
                        label: "</" + n + ">",
                        type: "type",
                        boost: 99 - i++
                    });
                    return {
                        from: n,
                        to: n,
                        options: r,
                        span: /^<\/?[:\-\.\w\u00b7-\uffff]*$/
                    }
                }(t, i, n)
            }
        });
    var Eu = Object.freeze({
        __proto__: null,
        html: function() {
            return new ca(zu, [Zu, hu().support, _c().support])
        },
        htmlCompletion: Zu,
        htmlLanguage: zu
    });
    const Iu = Hi({
            block: {
                open: "\x3c!--",
                close: "--\x3e"
            }
        }),
        Uu = rl.configure({
            props: [ks({
                "Blockquote/...": Fs.quote,
                HorizontalRule: Fs.contentSeparator,
                "ATXHeading1/... SetextHeading1/...": Fs.heading1,
                "ATXHeading2/... SetextHeading2/...": Fs.heading2,
                "ATXHeading3/...": Fs.heading3,
                "ATXHeading4/...": Fs.heading4,
                "ATXHeading5/...": Fs.heading5,
                "ATXHeading6/...": Fs.heading6,
                "Comment CommentBlock": Fs.comment,
                Escape: Fs.escape,
                Entity: Fs.character,
                "Emphasis/...": Fs.emphasis,
                "StrongEmphasis/...": Fs.strong,
                "Link/... Image/...": Fs.link,
                "OrderedList/... BulletList/...": Fs.list,
                "BlockQuote/...": Fs.quote,
                "InlineCode/... CodeBlock FencedCode": Fs.monospace,
                URL: Fs.url,
                "HeaderMark HardBreak QuoteMark ListMark LinkMark EmphasisMark CodeMark": Fs.processingInstruction,
                "CodeInfo LinkLabel": Fs.labelName,
                LinkTitle: Fs.string,
                Paragraph: Fs.content
            }), Sa.add((e => {
                if (e.is("Block") && !e.is("Document")) return (e, t) => ({
                    from: t.doc.lineAt(e.from).to,
                    to: e.to
                })
            })), Qa.add({
                Document: () => null
            }), Fi.add({
                Document: Iu
            })],
            htmlParser: zu.parser.configure({
                dialect: "noMatch"
            })
        }),
        Vu = Au(Uu),
        ju = Au(Uu.configure([cl, pl, dl, hl, {
            props: [ks({
                "TableDelimiter SubscriptMark SuperscriptMark StrikethroughMark": Fs.processingInstruction,
                "TableHeader/...": Fs.heading,
                "Strikethrough/...": Fs.strikethrough,
                TaskMarker: Fs.atom,
                Task: Fs.list,
                Emoji: Fs.character,
                "Subscript Superscript": Fs.special(Fs.content),
                TableCell: Fs.content
            })]
        }]));

    function Au(e) {
        return new Ji(Iu, e, e.nodeSet.types.find((e => "Document" == e.name)))
    }

    function Cu(e, t) {
        return t.sliceString(e.from, e.from + 50)
    }

    function Gu(e, t, n) {
        let r = [];
        for (let t = e; t && "Document" != t.name; t = t.parent) "ListItem" != t.name && "Blockquote" != t.name || r.push(t);
        let i = [],
            a = 0;
        for (let e = r.length - 1; e >= 0; e--) {
            let o, s = r[e];
            if ("Blockquote" == s.name && (o = /^\s*> ?/.exec(t.slice(a)))) i.push({
                from: a,
                string: o[0],
                node: s
            }), a += o[0].length;
            else if ("ListItem" == s.name && "OrderedList" == s.parent.name && (o = /^\s*\d+([.)])\s*/.exec(Cu(s, n)))) {
                let e = o[1].length >= 4 ? o[0].length - o[1].length + 1 : o[0].length;
                i.push({
                    from: a,
                    string: t.slice(a, a + e).replace(/\S/g, " "),
                    node: s
                }), a += e
            } else if ("ListItem" == s.name && "BulletList" == s.parent.name && (o = /^\s*[-+*] (\s*)/.exec(Cu(s, n)))) {
                let e = o[1].length >= 4 ? o[0].length - o[1].length : o[0].length;
                i.push({
                    from: a,
                    string: t.slice(a, a + e).replace(/\S/g, " "),
                    node: s
                }), a += e
            }
        }
        return i
    }
    const Lu = ({
            state: e,
            dispatch: t
        }) => {
            let n = ta(e),
                r = null,
                i = e.changeByRange((t => {
                    if (t.empty && ju.isActiveAt(e, t.from)) {
                        let r = e.doc.lineAt(t.from),
                            i = Gu(n.resolve(t.from, -1), r.text, e.doc),
                            a = t.from,
                            o = [];
                        if (i.length) {
                            let n = i[i.length - 1],
                                s = n.from + n.string.length,
                                O = t.from - r.from >= s && !/\S/.test(r.text.slice(s, t.from - r.from));
                            if (O) {
                                let e = /List/.test(n.node.name) ? n.from : s;
                                for (; e > 0 && /\s/.test(r.text[e - 1]);) e--;
                                a = r.from + e
                            }
                            if ("ListItem" == n.node.name) {
                                if (O && r.from > 0 && !/[^\s>]/.test(e.doc.lineAt(r.from - 1).text)) return {
                                    range: W.cursor(a),
                                    changes: {
                                        from: a,
                                        to: t.from
                                    }
                                };
                                a < t.from && n.node.parent.from == n.node.from ? n.string = "" : (n.node.from >= r.from ? n.string = r.text.slice(n.from, n.from + n.string.length) : n.string = /^\s*/.exec(r.text)[0].slice(0, n.string.length), "OrderedList" == n.node.parent.name && a == t.from && (n.string = n.string.replace(/\d+/, (e => +e + 1)), function(e, t, n) {
                                    for (let r = -1, i = e;;) {
                                        if ("ListItem" == i.name) {
                                            let e = /^(\s*)(\d+)(?=[.)])/.exec(t.sliceString(i.from, i.from + 10));
                                            if (!e) return;
                                            let a = +e[2];
                                            if (r >= 0) {
                                                if (a != r + 1) return;
                                                n.push({
                                                    from: i.from + e[1].length,
                                                    to: i.from + e[0].length,
                                                    insert: String(r + 2)
                                                })
                                            }
                                            r = a
                                        }
                                        let e = i.nextSibling;
                                        if (!e) break;
                                        i = e
                                    }
                                }(n.node, e.doc, o)))
                            }
                        }
                        let s = i.map((e => e.string)).join("");
                        return t.from - r.from < s.length && (s = ""), o.push({
                            from: a,
                            to: t.from,
                            insert: d.of(["", s])
                        }), {
                            range: W.cursor(a + 1 + s.length),
                            changes: o
                        }
                    }
                    return r = {
                        range: t
                    }
                }));
            return !r && (t(e.update(i, {
                scrollIntoView: !0
            })), !0)
        },
        Nu = ({
            state: e,
            dispatch: t
        }) => {
            let n = ta(e),
                r = null,
                i = e.changeByRange((t => {
                    if (t.empty && ju.isActiveAt(e, t.from)) {
                        let r = e.doc.lineAt(t.from),
                            i = Gu(n.resolve(t.from, -1), r.text, e.doc);
                        if (i.length) {
                            let e = i[i.length - 1],
                                n = e.from + e.string.length;
                            if (t.from > n + r.from && !/\S/.test(r.text.slice(n, t.from - r.from))) return {
                                range: W.cursor(n + r.from),
                                changes: {
                                    from: n + r.from,
                                    to: t.from
                                }
                            };
                            if (t.from - r.from == n) {
                                let i = r.from + e.from;
                                if ("ListItem" == e.node.name && e.node.parent.from < e.node.from && /\S/.test(r.text.slice(e.from, n))) return {
                                    range: t,
                                    changes: {
                                        from: i,
                                        to: i + e.string.length,
                                        insert: e.string
                                    }
                                };
                                if (i < t.from) return {
                                    range: W.cursor(i),
                                    changes: {
                                        from: i,
                                        to: t.from
                                    }
                                }
                            }
                        }
                    }
                    return r = {
                        range: t
                    }
                }));
            return !r && (t(e.update(i, {
                scrollIntoView: !0
            })), !0)
        },
        Du = [{
            key: "Enter",
            run: Lu
        }, {
            key: "Backspace",
            run: Nu
        }];

    function Mu(e = {}) {
        let {
            codeLanguages: t,
            defaultCodeLanguage: n,
            addKeymap: r = !0,
            base: {
                parser: i
            } = Vu
        } = e, a = e.extensions ? [e.extensions] : [];
        if (!(i instanceof _O)) throw new RangeError("Base parser provided to `markdown` should be a Markdown parser");
        return (t || n) && a.push(function(e, t) {
            return {
                codeParser(n) {
                    let r = n && ua.matchLanguageName(e, n, !0);
                    return r ? r.support ? r.support.language.parser : ra.getSkippingParser(r.load()) : t ? t.parser : null
                }
            }
        }(t || [], n)), new ca(Au(i.configure(a)), r ? D.extend(Pi.of(Du)) : [])
    }
    var Bu = Object.freeze({
        __proto__: null,
        commonmarkLanguage: Vu,
        deleteMarkupBackward: Nu,
        insertNewlineContinueMarkup: Lu,
        markdown: Mu,
        markdownKeymap: Du,
        markdownLanguage: ju
    });

    function Fu(e) {
        return Promise.resolve().then((function() {
            return Qd
        })).then((t => new ca(t.StreamLanguage.define(e))))
    }

    function Hu(e) {
        return Promise.resolve().then((function() {
            return np
        })).then((t => t.sql({
            dialect: t[e]
        })))
    }
    const Ju = [ua.of({
        name: "C",
        extensions: ["c", "h", "ino"],
        load: () => Promise.resolve().then((function() {
            return dp
        })).then((e => e.cpp()))
    }), ua.of({
        name: "C++",
        alias: ["cpp"],
        extensions: ["cpp", "c++", "cc", "cxx", "hpp", "h++", "hh", "hxx"],
        load: () => Promise.resolve().then((function() {
            return dp
        })).then((e => e.cpp()))
    }), ua.of({
        name: "CQL",
        alias: ["cassandra"],
        extensions: ["cql"],
        load: () => Hu("Cassandra")
    }), ua.of({
        name: "CSS",
        extensions: ["css"],
        load: () => Promise.resolve().then((function() {
            return Xc
        })).then((e => e.css()))
    }), ua.of({
        name: "HTML",
        alias: ["xhtml"],
        extensions: ["html", "htm", "handlebars", "hbs"],
        load: () => Promise.resolve().then((function() {
            return Eu
        })).then((e => e.html()))
    }), ua.of({
        name: "Java",
        extensions: ["java"],
        load: () => Promise.resolve().then((function() {
            return mp
        })).then((e => e.java()))
    }), ua.of({
        name: "JavaScript",
        alias: ["ecmascript", "js", "node"],
        extensions: ["js", "mjs", "cjs"],
        load: () => Promise.resolve().then((function() {
            return gu
        })).then((e => e.javascript()))
    }), ua.of({
        name: "JSON",
        alias: ["json5"],
        extensions: ["json", "map"],
        load: () => Promise.resolve().then((function() {
            return $p
        })).then((e => e.json()))
    }), ua.of({
        name: "JSX",
        extensions: ["jsx"],
        load: () => Promise.resolve().then((function() {
            return gu
        })).then((e => e.javascript({
            jsx: !0
        })))
    }), ua.of({
        name: "MariaDB SQL",
        load: () => Hu("MariaSQL")
    }), ua.of({
        name: "Markdown",
        extensions: ["md", "markdown", "mkd"],
        load: () => Promise.resolve().then((function() {
            return Bu
        })).then((e => e.markdown()))
    }), ua.of({
        name: "MS SQL",
        load: () => Hu("MSSQL")
    }), ua.of({
        name: "MySQL",
        load: () => Hu("MySQL")
    }), ua.of({
        name: "PLSQL",
        extensions: ["pls"],
        load: () => Hu("PLSQL")
    }), ua.of({
        name: "PostgreSQL",
        load: () => Hu("PostgreSQL")
    }), ua.of({
        name: "Python",
        extensions: ["BUILD", "bzl", "py", "pyw"],
        filename: /^(BUCK|BUILD)$/,
        load: () => Promise.resolve().then((function() {
            return qp
        })).then((e => e.python()))
    }), ua.of({
        name: "Rust",
        extensions: ["rs"],
        load: () => Promise.resolve().then((function() {
            return Ap
        })).then((e => e.rust()))
    }), ua.of({
        name: "SQL",
        extensions: ["sql"],
        load: () => Hu("StandardSQL")
    }), ua.of({
        name: "SQLite",
        load: () => Hu("SQLite")
    }), ua.of({
        name: "TSX",
        extensions: ["tsx"],
        load: () => Promise.resolve().then((function() {
            return gu
        })).then((e => e.javascript({
            jsx: !0,
            typescript: !0
        })))
    }), ua.of({
        name: "TypeScript",
        alias: ["ts"],
        extensions: ["ts"],
        load: () => Promise.resolve().then((function() {
            return gu
        })).then((e => e.javascript({
            typescript: !0
        })))
    }), ua.of({
        name: "XML",
        alias: ["rss", "wsdl", "xsd"],
        extensions: ["xml", "xsl", "xsd", "svg"],
        load: () => Promise.resolve().then((function() {
            return dh
        })).then((e => e.xml()))
    }), ua.of({
        name: "APL",
        extensions: ["dyalog", "apl"],
        load: () => Promise.resolve().then((function() {
            return bh
        })).then((e => Fu(e.apl)))
    }), ua.of({
        name: "PGP",
        alias: ["asciiarmor"],
        extensions: ["asc", "pgp", "sig"],
        load: () => Promise.resolve().then((function() {
            return wh
        })).then((e => Fu(e.asciiArmor)))
    }), ua.of({
        name: "ASN.1",
        extensions: ["asn", "asn1"],
        load: () => Promise.resolve().then((function() {
            return vh
        })).then((e => Fu(e.asn1({}))))
    }), ua.of({
        name: "Asterisk",
        filename: /^extensions\.conf$/i,
        load: () => Promise.resolve().then((function() {
            return Rh
        })).then((e => Fu(e.asterisk)))
    }), ua.of({
        name: "Brainfuck",
        extensions: ["b", "bf"],
        load: () => Promise.resolve().then((function() {
            return Yh
        })).then((e => Fu(e.brainfuck)))
    }), ua.of({
        name: "Cobol",
        extensions: ["cob", "cpy"],
        load: () => Promise.resolve().then((function() {
            return Ch
        })).then((e => Fu(e.cobol)))
    }), ua.of({
        name: "C#",
        alias: ["csharp", "cs"],
        extensions: ["cs"],
        load: () => Promise.resolve().then((function() {
            return Uf
        })).then((e => Fu(e.csharp)))
    }), ua.of({
        name: "Clojure",
        extensions: ["clj", "cljc", "cljx"],
        load: () => Promise.resolve().then((function() {
            return rm
        })).then((e => Fu(e.clojure)))
    }), ua.of({
        name: "ClojureScript",
        extensions: ["cljs"],
        load: () => Promise.resolve().then((function() {
            return rm
        })).then((e => Fu(e.clojure)))
    }), ua.of({
        name: "Closure Stylesheets (GSS)",
        extensions: ["gss"],
        load: () => Promise.resolve().then((function() {
            return Rm
        })).then((e => Fu(e.gss)))
    }), ua.of({
        name: "CMake",
        extensions: ["cmake", "cmake.in"],
        filename: /^CMakeLists\.txt$/,
        load: () => Promise.resolve().then((function() {
            return zm
        })).then((e => Fu(e.cmake)))
    }), ua.of({
        name: "CoffeeScript",
        alias: ["coffee", "coffee-script"],
        extensions: ["coffee"],
        load: () => Promise.resolve().then((function() {
            return tg
        })).then((e => Fu(e.coffeeScript)))
    }), ua.of({
        name: "Common Lisp",
        alias: ["lisp"],
        extensions: ["cl", "lisp", "el"],
        load: () => Promise.resolve().then((function() {
            return dg
        })).then((e => Fu(e.commonLisp)))
    }), ua.of({
        name: "Cypher",
        extensions: ["cyp", "cypher"],
        load: () => Promise.resolve().then((function() {
            return wg
        })).then((e => Fu(e.cypher)))
    }), ua.of({
        name: "Cython",
        extensions: ["pyx", "pxd", "pxi"],
        load: () => Promise.resolve().then((function() {
            return qg
        })).then((e => Fu(e.cython)))
    }), ua.of({
        name: "Crystal",
        extensions: ["cr"],
        load: () => Promise.resolve().then((function() {
            return aQ
        })).then((e => Fu(e.crystal)))
    }), ua.of({
        name: "D",
        extensions: ["d"],
        load: () => Promise.resolve().then((function() {
            return wQ
        })).then((e => Fu(e.d)))
    }), ua.of({
        name: "Dart",
        extensions: ["dart"],
        load: () => Promise.resolve().then((function() {
            return Uf
        })).then((e => Fu(e.dart)))
    }), ua.of({
        name: "diff",
        extensions: ["diff", "patch"],
        load: () => Promise.resolve().then((function() {
            return vQ
        })).then((e => Fu(e.diff)))
    }), ua.of({
        name: "Dockerfile",
        filename: /^Dockerfile$/,
        load: () => Promise.resolve().then((function() {
            return jQ
        })).then((e => Fu(e.dockerFile)))
    }), ua.of({
        name: "DTD",
        extensions: ["dtd"],
        load: () => Promise.resolve().then((function() {
            return NQ
        })).then((e => Fu(e.dtd)))
    }), ua.of({
        name: "Dylan",
        extensions: ["dylan", "dyl", "intr"],
        load: () => Promise.resolve().then((function() {
            return l$
        })).then((e => Fu(e.dylan)))
    }), ua.of({
        name: "EBNF",
        load: () => Promise.resolve().then((function() {
            return m$
        })).then((e => Fu(e.ebnf)))
    }), ua.of({
        name: "ECL",
        extensions: ["ecl"],
        load: () => Promise.resolve().then((function() {
            return Y$
        })).then((e => Fu(e.ecl)))
    }), ua.of({
        name: "edn",
        extensions: ["edn"],
        load: () => Promise.resolve().then((function() {
            return rm
        })).then((e => Fu(e.clojure)))
    }), ua.of({
        name: "Eiffel",
        extensions: ["e"],
        load: () => Promise.resolve().then((function() {
            return V$
        })).then((e => Fu(e.eiffel)))
    }), ua.of({
        name: "Elm",
        extensions: ["elm"],
        load: () => Promise.resolve().then((function() {
            return ib
        })).then((e => Fu(e.elm)))
    }), ua.of({
        name: "Erlang",
        extensions: ["erl"],
        load: () => Promise.resolve().then((function() {
            return zb
        })).then((e => Fu(e.erlang)))
    }), ua.of({
        name: "Esper",
        load: () => Promise.resolve().then((function() {
            return nx
        })).then((e => Fu(e.esper)))
    }), ua.of({
        name: "Factor",
        extensions: ["factor"],
        load: () => Promise.resolve().then((function() {
            return ix
        })).then((e => Fu(e.factor)))
    }), ua.of({
        name: "FCL",
        load: () => Promise.resolve().then((function() {
            return hx
        })).then((e => Fu(e.fcl)))
    }), ua.of({
        name: "Forth",
        extensions: ["forth", "fth", "4th"],
        load: () => Promise.resolve().then((function() {
            return bx
        })).then((e => Fu(e.forth)))
    }), ua.of({
        name: "Fortran",
        extensions: ["f", "for", "f77", "f90", "f95"],
        load: () => Promise.resolve().then((function() {
            return Xx
        })).then((e => Fu(e.fortran)))
    }), ua.of({
        name: "F#",
        alias: ["fsharp"],
        extensions: ["fs"],
        load: () => Promise.resolve().then((function() {
            return Yx
        })).then((e => Fu(e.fSharp)))
    }), ua.of({
        name: "Gas",
        extensions: ["s"],
        load: () => Promise.resolve().then((function() {
            return Ix
        })).then((e => Fu(e.gas)))
    }), ua.of({
        name: "Gherkin",
        extensions: ["feature"],
        load: () => Promise.resolve().then((function() {
            return Vx
        })).then((e => Fu(e.gherkin)))
    }), ua.of({
        name: "Go",
        extensions: ["go"],
        load: () => Promise.resolve().then((function() {
            return Fx
        })).then((e => Fu(e.go)))
    }), ua.of({
        name: "Groovy",
        extensions: ["groovy", "gradle"],
        filename: /^Jenkinsfile$/,
        load: () => Promise.resolve().then((function() {
            return dP
        })).then((e => Fu(e.groovy)))
    }), ua.of({
        name: "Haskell",
        extensions: ["hs"],
        load: () => Promise.resolve().then((function() {
            return XP
        })).then((e => Fu(e.haskell)))
    }), ua.of({
        name: "Haxe",
        extensions: ["hx"],
        load: () => Promise.resolve().then((function() {
            return Ww
        })).then((e => Fu(e.haxe)))
    }), ua.of({
        name: "HXML",
        extensions: ["hxml"],
        load: () => Promise.resolve().then((function() {
            return Ww
        })).then((e => Fu(e.hxml)))
    }), ua.of({
        name: "HTTP",
        load: () => Promise.resolve().then((function() {
            return Aw
        })).then((e => Fu(e.http)))
    }), ua.of({
        name: "IDL",
        extensions: ["pro"],
        load: () => Promise.resolve().then((function() {
            return Jw
        })).then((e => Fu(e.idl)))
    }), ua.of({
        name: "JSON-LD",
        alias: ["jsonld"],
        extensions: ["jsonld"],
        load: () => Promise.resolve().then((function() {
            return ik
        })).then((e => Fu(e.jsonld)))
    }), ua.of({
        name: "Jinja2",
        extensions: ["j2", "jinja", "jinja2"],
        load: () => Promise.resolve().then((function() {
            return dk
        })).then((e => Fu(e.jinja2)))
    }), ua.of({
        name: "Julia",
        extensions: ["jl"],
        load: () => Promise.resolve().then((function() {
            return Yk
        })).then((e => Fu(e.julia)))
    }), ua.of({
        name: "Kotlin",
        extensions: ["kt"],
        load: () => Promise.resolve().then((function() {
            return Uf
        })).then((e => Fu(e.kotlin)))
    }), ua.of({
        name: "LESS",
        extensions: ["less"],
        load: () => Promise.resolve().then((function() {
            return Rm
        })).then((e => Fu(e.less)))
    }), ua.of({
        name: "LiveScript",
        alias: ["ls"],
        extensions: ["ls"],
        load: () => Promise.resolve().then((function() {
            return Dk
        })).then((e => Fu(e.liveScript)))
    }), ua.of({
        name: "Lua",
        extensions: ["lua"],
        load: () => Promise.resolve().then((function() {
            return iy
        })).then((e => Fu(e.lua)))
    }), ua.of({
        name: "mIRC",
        load: () => Promise.resolve().then((function() {
            return fy
        })).then((e => Fu(e.mirc)))
    }), ua.of({
        name: "Mathematica",
        extensions: ["m", "nb", "wl", "wls"],
        load: () => Promise.resolve().then((function() {
            return vy
        })).then((e => Fu(e.mathematica)))
    }), ua.of({
        name: "Modelica",
        extensions: ["mo"],
        load: () => Promise.resolve().then((function() {
            return Cy
        })).then((e => Fu(e.modelica)))
    }), ua.of({
        name: "MUMPS",
        extensions: ["mps"],
        load: () => Promise.resolve().then((function() {
            return Ky
        })).then((e => Fu(e.mumps)))
    }), ua.of({
        name: "mbox",
        extensions: ["mbox"],
        load: () => Promise.resolve().then((function() {
            return dv
        })).then((e => Fu(e.mbox)))
    }), ua.of({
        name: "Nginx",
        filename: /nginx.*\.conf$/i,
        load: () => Promise.resolve().then((function() {
            return wv
        })).then((e => Fu(e.nginx)))
    }), ua.of({
        name: "NSIS",
        extensions: ["nsh", "nsi"],
        load: () => Promise.resolve().then((function() {
            return yv
        })).then((e => Fu(e.nsis)))
    }), ua.of({
        name: "NTriples",
        extensions: ["nt", "nq"],
        load: () => Promise.resolve().then((function() {
            return jv
        })).then((e => Fu(e.ntriples)))
    }), ua.of({
        name: "Objective-C",
        alias: ["objective-c", "objc"],
        extensions: ["m"],
        load: () => Promise.resolve().then((function() {
            return Uf
        })).then((e => Fu(e.objectiveC)))
    }), ua.of({
        name: "Objective-C++",
        alias: ["objective-c++", "objc++"],
        extensions: ["mm"],
        load: () => Promise.resolve().then((function() {
            return Uf
        })).then((e => Fu(e.objectiveCpp)))
    }), ua.of({
        name: "OCaml",
        extensions: ["ml", "mli", "mll", "mly"],
        load: () => Promise.resolve().then((function() {
            return Yx
        })).then((e => Fu(e.oCaml)))
    }), ua.of({
        name: "Octave",
        extensions: ["m"],
        load: () => Promise.resolve().then((function() {
            return nS
        })).then((e => Fu(e.octave)))
    }), ua.of({
        name: "Oz",
        extensions: ["oz"],
        load: () => Promise.resolve().then((function() {
            return xS
        })).then((e => Fu(e.oz)))
    }), ua.of({
        name: "Pascal",
        extensions: ["p", "pas"],
        load: () => Promise.resolve().then((function() {
            return XS
        })).then((e => Fu(e.pascal)))
    }), ua.of({
        name: "Perl",
        extensions: ["pl", "pm"],
        load: () => Promise.resolve().then((function() {
            return jS
        })).then((e => Fu(e.perl)))
    }), ua.of({
        name: "Pig",
        extensions: ["pig"],
        load: () => Promise.resolve().then((function() {
            return e_
        })).then((e => Fu(e.pig)))
    }), ua.of({
        name: "PowerShell",
        extensions: ["ps1", "psd1", "psm1"],
        load: () => Promise.resolve().then((function() {
            return x_
        })).then((e => Fu(e.powerShell)))
    }), ua.of({
        name: "Properties files",
        alias: ["ini", "properties"],
        extensions: ["properties", "ini", "in"],
        load: () => Promise.resolve().then((function() {
            return P_
        })).then((e => Fu(e.properties)))
    }), ua.of({
        name: "ProtoBuf",
        extensions: ["proto"],
        load: () => Promise.resolve().then((function() {
            return S_
        })).then((e => Fu(e.protobuf)))
    }), ua.of({
        name: "Puppet",
        extensions: ["pp"],
        load: () => Promise.resolve().then((function() {
            return Y_
        })).then((e => Fu(e.puppet)))
    }), ua.of({
        name: "Q",
        extensions: ["q"],
        load: () => Promise.resolve().then((function() {
            return L_
        })).then((e => Fu(e.q)))
    }), ua.of({
        name: "R",
        alias: ["rscript"],
        extensions: ["r", "R"],
        load: () => Promise.resolve().then((function() {
            return sX
        })).then((e => Fu(e.r)))
    }), ua.of({
        name: "RPM Changes",
        load: () => Promise.resolve().then((function() {
            return $X
        })).then((e => Fu(e.rpmChanges)))
    }), ua.of({
        name: "RPM Spec",
        extensions: ["spec"],
        load: () => Promise.resolve().then((function() {
            return $X
        })).then((e => Fu(e.rpmSpec)))
    }), ua.of({
        name: "Ruby",
        alias: ["jruby", "macruby", "rake", "rb", "rbx"],
        extensions: ["rb"],
        load: () => Promise.resolve().then((function() {
            return zX
        })).then((e => Fu(e.ruby)))
    }), ua.of({
        name: "SAS",
        extensions: ["sas"],
        load: () => Promise.resolve().then((function() {
            return AX
        })).then((e => Fu(e.sas)))
    }), ua.of({
        name: "Scala",
        extensions: ["scala"],
        load: () => Promise.resolve().then((function() {
            return Uf
        })).then((e => Fu(e.scala)))
    }), ua.of({
        name: "Scheme",
        extensions: ["scm", "ss"],
        load: () => Promise.resolve().then((function() {
            return OT
        })).then((e => Fu(e.scheme)))
    }), ua.of({
        name: "SCSS",
        extensions: ["scss"],
        load: () => Promise.resolve().then((function() {
            return Rm
        })).then((e => Fu(e.sCSS)))
    }), ua.of({
        name: "Shell",
        alias: ["bash", "sh", "zsh"],
        extensions: ["sh", "ksh", "bash"],
        filename: /^PKGBUILD$/,
        load: () => Promise.resolve().then((function() {
            return bT
        })).then((e => Fu(e.shell)))
    }), ua.of({
        name: "Sieve",
        extensions: ["siv", "sieve"],
        load: () => Promise.resolve().then((function() {
            return _T
        })).then((e => Fu(e.sieve)))
    }), ua.of({
        name: "Smalltalk",
        extensions: ["st"],
        load: () => Promise.resolve().then((function() {
            return VT
        })).then((e => Fu(e.smalltalk)))
    }), ua.of({
        name: "Solr",
        load: () => Promise.resolve().then((function() {
            return MT
        })).then((e => Fu(e.solr)))
    }), ua.of({
        name: "SML",
        extensions: ["sml", "sig", "fun", "smackspec"],
        load: () => Promise.resolve().then((function() {
            return Yx
        })).then((e => Fu(e.sml)))
    }), ua.of({
        name: "SPARQL",
        alias: ["sparul"],
        extensions: ["rq", "sparql"],
        load: () => Promise.resolve().then((function() {
            return iR
        })).then((e => Fu(e.sparql)))
    }), ua.of({
        name: "Spreadsheet",
        alias: ["excel", "formula"],
        load: () => Promise.resolve().then((function() {
            return aR
        })).then((e => Fu(e.spreadsheet)))
    }), ua.of({
        name: "SQL",
        extensions: ["sql"],
        load: () => Promise.resolve().then((function() {
            return nx
        })).then((e => Fu(e.standardSQL)))
    }), ua.of({
        name: "SQLite",
        load: () => Promise.resolve().then((function() {
            return nx
        })).then((e => Fu(e.sqlite)))
    }), ua.of({
        name: "Squirrel",
        extensions: ["nut"],
        load: () => Promise.resolve().then((function() {
            return Uf
        })).then((e => Fu(e.squirrel)))
    }), ua.of({
        name: "Stylus",
        extensions: ["styl"],
        load: () => Promise.resolve().then((function() {
            return lW
        })).then((e => Fu(e.stylus)))
    }), ua.of({
        name: "Swift",
        extensions: ["swift"],
        load: () => Promise.resolve().then((function() {
            return RW
        })).then((e => Fu(e.swift)))
    }), ua.of({
        name: "sTeX",
        load: () => Promise.resolve().then((function() {
            return zW
        })).then((e => Fu(e.stex)))
    }), ua.of({
        name: "LaTeX",
        alias: ["tex"],
        extensions: ["text", "ltx", "tex"],
        load: () => Promise.resolve().then((function() {
            return zW
        })).then((e => Fu(e.stex)))
    }), ua.of({
        name: "SystemVerilog",
        extensions: ["v", "sv", "svh"],
        load: () => Promise.resolve().then((function() {
            return GW
        })).then((e => Fu(e.verilog)))
    }), ua.of({
        name: "Tcl",
        extensions: ["tcl"],
        load: () => Promise.resolve().then((function() {
            return eq
        })).then((e => Fu(e.tcl)))
    }), ua.of({
        name: "Textile",
        extensions: ["textile"],
        load: () => Promise.resolve().then((function() {
            return cq
        })).then((e => Fu(e.textile)))
    }), ua.of({
        name: "TiddlyWiki",
        load: () => Promise.resolve().then((function() {
            return Uq
        })).then((e => Fu(e.tiddlyWiki)))
    }), ua.of({
        name: "Tiki wiki",
        load: () => Promise.resolve().then((function() {
            return Kq
        })).then((e => Fu(e.tiki)))
    }), ua.of({
        name: "TOML",
        extensions: ["toml"],
        load: () => Promise.resolve().then((function() {
            return eY
        })).then((e => Fu(e.toml)))
    }), ua.of({
        name: "troff",
        extensions: ["1", "2", "3", "4", "5", "6", "7", "8", "9"],
        load: () => Promise.resolve().then((function() {
            return aY
        })).then((e => Fu(e.troff)))
    }), ua.of({
        name: "TTCN",
        extensions: ["ttcn", "ttcn3", "ttcnpp"],
        load: () => Promise.resolve().then((function() {
            return qY
        })).then((e => Fu(e.ttcn)))
    }), ua.of({
        name: "TTCN_CFG",
        extensions: ["cfg"],
        load: () => Promise.resolve().then((function() {
            return MY
        })).then((e => Fu(e.ttcnCfg)))
    }), ua.of({
        name: "Turtle",
        extensions: ["ttl"],
        load: () => Promise.resolve().then((function() {
            return nz
        })).then((e => Fu(e.turtle)))
    }), ua.of({
        name: "Web IDL",
        extensions: ["webidl"],
        load: () => Promise.resolve().then((function() {
            return kz
        })).then((e => Fu(e.webIDL)))
    }), ua.of({
        name: "VB.NET",
        extensions: ["vb"],
        load: () => Promise.resolve().then((function() {
            return Hz
        })).then((e => Fu(e.vb)))
    }), ua.of({
        name: "VBScript",
        extensions: ["vbs"],
        load: () => Promise.resolve().then((function() {
            return tZ
        })).then((e => Fu(e.vbScript)))
    }), ua.of({
        name: "Velocity",
        extensions: ["vtl"],
        load: () => Promise.resolve().then((function() {
            return pZ
        })).then((e => Fu(e.velocity)))
    }), ua.of({
        name: "Verilog",
        extensions: ["v"],
        load: () => Promise.resolve().then((function() {
            return GW
        })).then((e => Fu(e.verilog)))
    }), ua.of({
        name: "VHDL",
        extensions: ["vhd", "vhdl"],
        load: () => Promise.resolve().then((function() {
            return SZ
        })).then((e => Fu(e.vhdl)))
    }), ua.of({
        name: "XQuery",
        extensions: ["xy", "xquery"],
        load: () => Promise.resolve().then((function() {
            return GZ
        })).then((e => Fu(e.xQuery)))
    }), ua.of({
        name: "Yacas",
        extensions: ["ys"],
        load: () => Promise.resolve().then((function() {
            return nE
        })).then((e => Fu(e.yacas)))
    }), ua.of({
        name: "YAML",
        alias: ["yml"],
        extensions: ["yaml", "yml"],
        load: () => Promise.resolve().then((function() {
            return aE
        })).then((e => Fu(e.yaml)))
    }), ua.of({
        name: "Z80",
        extensions: ["z80"],
        load: () => Promise.resolve().then((function() {
            return lE
        })).then((e => Fu(e.z80)))
    }), ua.of({
        name: "mscgen",
        extensions: ["mscgen", "mscin", "msc"],
        load: () => Promise.resolve().then((function() {
            return QE
        })).then((e => Fu(e.mscgen)))
    }), ua.of({
        name: "xu",
        extensions: ["xu"],
        load: () => Promise.resolve().then((function() {
            return QE
        })).then((e => Fu(e.xu)))
    }), ua.of({
        name: "msgenny",
        extensions: ["msgenny"],
        load: () => Promise.resolve().then((function() {
            return QE
        })).then((e => Fu(e.msgenny)))
    }), ua.of({
        name: "WebAssembly",
        extensions: ["wat", "wast"],
        load: () => Promise.resolve().then((function() {
            return bE
        })).then((e => Fu(e.wast)))
    })];
    var Ku = [{
        type: "undo",
        title: "撤销",
        innerHTML: '<svg viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="18" height="18"><path d="M76 463.7l294.8 294.9c19.5 19.4 52.8 5.6 52.8-21.9V561.5c202.5-8.2 344.1 59.5 501.6 338.3 8.5 15 31.5 7.9 30.6-9.3-30.5-554.7-453-571.4-532.3-569.6v-174c0-27.5-33.2-41.3-52.7-21.8L75.9 420c-12 12.1-12 31.6.1 43.7z"/></svg>'
    }, {
        type: "redo",
        title: "重做",
        innerHTML: '<svg viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="18" height="18"><path d="M946.8 420L651.9 125.1c-19.5-19.5-52.7-5.7-52.7 21.8v174c-79.3-1.8-501.8 14.9-532.3 569.6-.9 17.2 22.1 24.3 30.6 9.3C255 621 396.6 553.3 599.1 561.5v175.2c0 27.5 33.3 41.3 52.8 21.9l294.8-294.9c12.1-12.1 12.1-31.6.1-43.7z"/></svg>'
    }, {
        type: "bold",
        title: "加粗",
        innerHTML: '<svg viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="20" height="20"><path d="M341.333 469.333h192a106.667 106.667 0 1 0 0-213.333h-192v213.333zm426.667 192a192 192 0 0 1-192 192H256V170.667h277.333a192 192 0 0 1 138.923 324.522A191.915 191.915 0 0 1 768 661.333zM341.333 554.667V768H576a106.667 106.667 0 1 0 0-213.333H341.333z"/></svg>'
    }, {
        type: "italic",
        title: "倾斜",
        innerHTML: '<svg viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="20" height="20"><path d="M640 853.333H298.667V768h124.885l90.283-512H384v-85.333h341.333V256H600.448l-90.283 512H640z"/></svg>'
    }, {
        type: "delete",
        title: "删除",
        innerHTML: '<svg viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="20" height="20"><path d="M731.904 597.333c9.813 22.016 14.763 46.507 14.763 73.387 0 57.259-22.358 102.059-67.03 134.272-44.757 32.213-106.496 48.341-185.301 48.341-69.973 0-139.221-16.256-207.787-48.81v-96.256c64.854 37.418 131.2 56.149 199.083 56.149 108.843 0 163.413-31.232 163.797-93.739a94.293 94.293 0 0 0-27.648-68.394l-5.12-4.992H128v-85.334h768v85.334H731.904zm-173.995-128H325.504a174.336 174.336 0 0 1-20.523-22.272c-18.432-23.808-27.648-52.565-27.648-86.442 0-52.736 19.883-97.579 59.606-134.528 39.808-36.95 101.29-55.424 184.533-55.424 62.763 0 122.837 13.994 180.139 41.984v91.818c-51.2-29.312-107.307-43.946-168.363-43.946-105.813 0-158.677 33.365-158.677 100.096 0 17.92 9.301 33.536 27.904 46.89 18.602 13.355 41.557 23.979 68.821 32 26.453 7.68 55.339 17.664 86.613 29.824z"/></svg>'
    }, {
        type: "code-inline",
        title: "行内代码",
        innerHTML: '<svg viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="20" height="20"><path d="M416.328 512.336a96 96 0 1 0 192 0 96 96 0 1 0-192 0zM336.328 860c-12.288 0-24.568-6-33.944-17.992l-224-286.584c-18.744-23.984-18.744-62.856 0-86.84l224-286.592c18.744-23.976 49.136-23.976 67.88 0 18.744 23.984 18.744 62.864 0 86.848L180.208 512l190.056 243.168c18.744 23.968 18.744 62.856 0 86.832-9.368 12-21.648 18-33.936 18zm352 0c12.28 0 24.568-6 33.936-17.992l224-286.584c18.752-23.984 18.752-62.856 0-86.84l-224-286.592c-18.744-23.976-49.136-23.976-67.872 0-18.752 23.984-18.752 62.864 0 86.848L844.448 512 654.392 755.168c-18.752 23.968-18.752 62.856 0 86.832 9.376 12 21.656 18 33.936 18z"/></svg>'
    }, {
        type: "hr",
        title: "横线",
        innerHTML: '<svg viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="20" height="20"><path d="M896 469.333H128c-25.6 0-42.667 17.067-42.667 42.667S102.4 554.667 128 554.667h768c25.6 0 42.667-17.067 42.667-42.667S921.6 469.333 896 469.333z"/></svg>'
    }, {
        type: "quote",
        title: "引用",
        innerHTML: '<svg viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="20" height="20"><path d="M195.541 739.03C151.595 692.351 128 640 128 555.135c0-149.333 104.832-283.179 257.28-349.355l38.101 58.795c-142.293 76.97-170.112 176.853-181.205 239.83 22.912-11.862 52.907-16 82.304-13.27 76.97 7.125 137.643 70.315 137.643 148.864a149.333 149.333 0 0 1-149.334 149.333 165.163 165.163 0 0 1-117.248-50.304zm426.667 0c-43.947-46.678-67.541-99.03-67.541-183.894 0-149.333 104.832-283.179 257.28-349.355l38.101 58.795c-142.293 76.97-170.112 176.853-181.205 239.83 22.912-11.862 52.906-16 82.304-13.27 76.97 7.125 137.642 70.315 137.642 148.864a149.333 149.333 0 0 1-149.333 149.333 165.163 165.163 0 0 1-117.248-50.304z"/></svg>'
    }, {
        type: "title",
        title: "标题",
        innerHTML: '<svg viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="22" height="22"><path d="M256 213.333h104.875v267.094h324.48V213.333h104.874v640H685.355V570.07h-324.48v283.264H256z"/></svg>'
    }, {
        type: "ordered-list",
        title: "有序列表",
        innerHTML: '<svg viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="20" height="20"><path d="M341.333 170.667H896V256H341.333v-85.333zm-128-42.667v128H256v42.667H128V256h42.667v-85.333H128V128h85.333zM128 597.333V490.667h85.333v-21.334H128v-42.666h128v106.666h-85.333v21.334H256v42.666H128zM213.333 832H128v-42.667h85.333V768H128v-42.667h128V896H128v-42.667h85.333V832zm128-362.667H896v85.334H341.333v-85.334zm0 298.667H896v85.333H341.333V768z"/></svg>'
    }, {
        type: "unordered-list",
        title: "无序列表",
        innerHTML: '<svg viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="20" height="20"><path d="M341.333 170.667H896V256H341.333v-85.333zM192 277.333a64 64 0 1 1 0-128 64 64 0 0 1 0 128zM192 576a64 64 0 1 1 0-128 64 64 0 0 1 0 128zm0 294.4a64 64 0 1 1 0-128 64 64 0 0 1 0 128zm149.333-401.067H896v85.334H341.333v-85.334zm0 298.667H896v85.333H341.333V768z"/></svg>'
    }, {
        type: "link",
        title: "超链接",
        innerHTML: '<svg viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="15" height="15"><path d="M879.2 131.6c-103-95.5-264.1-88-361.4 11.2L474.7 184c-13.1 13.1-3.7 35.6 13.1 37.5 26.2 1.9 52.4 7.5 78.7 15 7.5 1.9 16.9 0 22.5-5.6l9.4-9.4c54.3-54.3 142.3-59.9 198.5-11.2 63.7 54.3 65.5 151.7 7.5 209.7L662 562.3c-18.7 18.7-41.2 30-63.7 37.5-30 7.5-61.8 5.6-89.9-5.6-16.9-7.5-33.7-16.9-48.7-31.8-7.5-7.5-13.1-15-18.7-24.3-7.5-13.1-24.3-15-33.7-3.7l-52.4 52.4c-7.5 7.5-7.5 18.7-1.9 28.1 7.5 11.2 16.9 20.6 26.2 30 13.1 13.1 30 26.2 44.9 35.6 26.2 16.9 56.2 28.1 86.1 33.7 58.1 11.2 121.7 1.9 174.2-26.2 20.6-11.2 41.2-26.2 58.1-43.1l142.3-142.3c104.9-103.2 101.2-271.8-5.6-371zM534.7 803.9l-39.3-5.6s-26.2-5.6-39.3-11.2c-7.5-1.9-16.9 0-22.5 5.6l-9.4 9.4c-54.3 54.3-142.3 59.9-198.5 11.2-63.7-54.3-65.5-151.7-7.5-209.7l142.3-142.3c18.7-18.7 41.2-30 63.7-37.5 30-7.5 61.8-5.6 89.9 5.6 16.9 7.5 33.7 16.9 48.7 31.8 7.5 7.5 13.1 15 18.7 24.3 7.5 13.1 24.3 15 33.7 3.7l52.4-52.4c7.5-7.5 7.5-18.7 1.9-28.1-7.5-11.2-16.9-20.6-26.2-30-13.1-13.1-28.1-26.2-44.9-35.6-26.2-16.9-56.2-28.1-88-33.7-58.1-11.2-121.7-1.9-174.2 26.2-20.6 11.2-41.2 26.2-58.1 43.1L141.4 515.5c-99.3 99.3-106.7 260.3-11.2 361.4C229.5 985.5 398 987.4 501 884.4l46.8-46.8c13.1-9.4 3.7-31.9-13.1-33.7z"/></svg>'
    }, {
        type: "image",
        title: "插入图片",
        innerHTML: '<svg viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path d="M46.545 977.455V46.545h930.91v930.91zm93.091-186.182v93.09h744.728V717.918l-214.11-228.305zm0-107.055l548.585-311.854 196.143 209.454V139.636H139.636zm99.282-376.227a82.758 82.758 0 0 1 82.758-82.758 82.758 82.758 0 0 1 82.757 82.758 82.758 82.758 0 0 1-82.757 82.805 82.804 82.804 0 0 1-82.758-82.898z"/></svg>'
    }, {
        type: "table",
        title: "表格",
        innerHTML: '<svg viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="18" height="18"><path d="M892.8 108h-763c-26.2 0-47.5 21.3-47.5 47.5v714c0 26.2 21.3 47.5 47.5 47.5h763c26.2 0 47.5-21.3 47.5-47.5v-714c0-26.2-21.3-47.5-47.5-47.5zm-291 294.7v172.1H411.7V402.7h190.1zm76 0h186.5v172.1H677.8V402.7zM864.3 184v142.7h-706V184h706zM158.4 841V402.7h177.3v172.1H159.8v76h175.9v188.9h76V650.8h190.1v188.9h76V650.8h186.5V841H158.4z"/></svg>'
    }, {
        type: "code-block",
        title: "代码块",
        innerHTML: '<svg viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="20" height="20"><path d="M902.4 454.4l-144-144a40.704 40.704 0 0 0-57.6 57.6l144 144-144 144a40.704 40.704 0 0 0 57.6 57.6l144-144a81.472 81.472 0 0 0 0-115.2zm-636.8-144l-144 144a81.472 81.472 0 0 0 0 115.2l144 144a40.704 40.704 0 0 0 57.6-57.6l-144-144 144-144a40.704 40.704 0 0 0-57.6-57.6zm109.568 544.064l195.072-706.56a40.704 40.704 0 0 1 78.528 21.632l-195.072 706.56a40.704 40.704 0 0 1-78.528-21.696z" /></svg>'
    }, {
        type: "html",
        title: "原生HTML",
        innerHTML: '<svg viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="20" height="20"><path d="M128 64l69.8 791.6L511 960l315.2-104.4L896 64H128zm616.4 255.8H376.8l8.2 98.8h351.2L709 715.4l-195.8 54v.6H511l-197.4-54.6-12-151.6H397l7 76.2 107 29 107.4-29 12-124.4H296.6L271 224.4h482.2l-8.8 95.4z"/></svg>'
    }, {
        type: "time",
        title: "当前时间",
        innerHTML: '<svg viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="18" height="18"><path d="M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z"/><path d="M686.7 638.6L544.1 535.5V288c0-4.4-3.6-8-8-8H488c-4.4 0-8 3.6-8 8v275.4c0 2.6 1.2 5 3.3 6.5l165.4 120.6c3.6 2.6 8.6 1.8 11.2-1.7l28.6-39c2.6-3.7 1.8-8.7-1.8-11.2z"/></svg>'
    }, {
        type: "indent",
        title: "缩进",
        innerHTML: '<svg viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="20" height="20"><path d="M692.019 192c-22.087 0-39.992 17.935-39.992 40.059v277.192c-.638-9.212-4.471-18.244-11.522-25.286l-280.74-280.353c-15.504-15.483-40.643-15.483-56.147 0-15.505 15.483-15.505 40.587 0 56.07L556.282 512 303.617 764.316c-15.505 15.482-15.505 40.587 0 56.07 15.504 15.484 40.643 15.483 56.146 0l280.74-280.352a40.074 40.074 0 0 0 2.726-3.012c5.322-6.517 8.247-14.329 8.797-22.275V791.82c0 22.122 17.905 40.057 39.992 40.057s39.993-17.935 39.993-40.057V232.059c.001-22.124-17.906-40.059-39.992-40.059z"/></svg>'
    }, {
        type: "character",
        title: "实体符号",
        innerHTML: '<svg viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="20" height="20"><path d="M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z"/><path d="M517.6 351.3c53 0 89 33.8 93 83.4.3 4.2 3.8 7.4 8 7.4h56.7c2.6 0 4.7-2.1 4.7-4.7 0-86.7-68.4-147.4-162.7-147.4C407.4 290 344 364.2 344 486.8v52.3C344 660.8 407.4 734 517.3 734c94 0 162.7-58.8 162.7-141.4 0-2.6-2.1-4.7-4.7-4.7h-56.8c-4.2 0-7.6 3.2-8 7.3-4.2 46.1-40.1 77.8-93 77.8-65.3 0-102.1-47.9-102.1-133.6v-52.6c.1-87 37-135.5 102.2-135.5z"/></svg>'
    }, {
        type: "emoji",
        title: "符号表情",
        innerHTML: '<svg viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="19" height="19"><path d="M512 56.889A455.111 455.111 0 0 0 56.889 512 455.111 455.111 0 0 0 512 967.111 455.111 455.111 0 0 0 967.111 512 455.111 455.111 0 0 0 512 56.889zm111.047 270.336A69.086 69.086 0 0 1 671.29 307.2c17.863 0 35.67 7.396 48.242 20.025 12.629 12.572 20.025 30.379 20.025 48.242 0 17.863-7.396 35.669-20.025 48.241-12.8 12.744-30.151 19.912-48.242 20.025a68.95 68.95 0 0 1-48.242-20.025 68.95 68.95 0 0 1-20.025-48.241c0-17.863 7.396-35.67 20.025-48.242zm-318.578 0a69.086 69.086 0 0 1 48.242-20.025c17.863 0 35.67 7.396 48.242 20.025 12.63 12.572 20.025 30.379 20.025 48.242 0 17.863-7.396 35.669-20.025 48.241-12.8 12.744-30.151 19.912-48.242 20.025a68.95 68.95 0 0 1-48.242-20.025 68.95 68.95 0 0 1-20.025-48.241c0-17.863 7.396-35.67 20.025-48.242zM786.375 566.67c-10.24 132.893-118.556 236.544-270.563 235.975-156.331 1.707-264.704-107.178-270.507-235.975a23.324 23.324 0 0 1-2.446-10.41c0-13.597 11.605-24.633 26.282-24.52h493.796c14.336 0 26.055 11.037 26.055 24.52a24.292 24.292 0 0 1-2.617 10.41z"/></svg>'
    }, {
        type: "expression",
        title: "图片表情",
        innerHTML: '<svg viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="20" height="20"><path d="M512 63.488q93.184 0 174.592 35.328t142.336 95.744 96.256 142.336 35.328 174.08q0 93.184-35.328 174.592t-96.256 142.336-142.336 96.256T512 959.488q-92.16 0-174.08-35.328t-142.336-96.256T99.84 685.568 64.512 510.976q0-92.16 35.328-174.08t95.744-142.336T337.92 98.816 512 63.488zM247.808 274.432q13.312 43.008 28.672 78.848 13.312 30.72 29.696 59.904t33.792 37.376q17.408 9.216 36.864 1.536t35.84-20.992q18.432-15.36 37.888-38.912zm501.76 537.6q8.192-3.072 12.8-8.192t6.144-11.264 1.536-11.776-1.024-7.68q-2.048-8.192-5.12-11.264-12.288-28.672-35.84-51.712t-56.32-39.936-73.728-26.112-88.064-9.216-89.6 10.24-76.288 28.672-57.856 43.008-33.28 53.248q-1.024 1.024-1.024 3.072-2.048 6.144 1.024 20.48t18.432 18.432q23.552-29.696 57.344-53.248 29.696-20.48 73.728-36.864t105.472-16.384 107.008 16.384 75.264 36.864q34.816 23.552 59.392 53.248zM680.96 450.56q17.408-8.192 33.792-37.376t29.696-59.904q15.36-35.84 28.672-78.848l-202.752 117.76q19.456 23.552 37.888 38.912 16.384 13.312 35.84 20.992t36.864-1.536z"/></svg>'
    }, {
        type: "task-no",
        title: "任务 - 未完成",
        innerHTML: '<svg viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="18" height="18"><path d="M831.55 128.531c38.35 0 63.911 25.568 63.911 63.91v639.104c0 38.355-25.561 63.916-63.91 63.916H192.44c-38.34 0-63.908-25.56-63.908-63.916V192.442c0-38.343 25.567-63.91 63.908-63.91h639.11m0-63.91H192.44c-70.3 0-127.816 57.518-127.816 127.82v639.103c0 70.308 57.515 127.833 127.816 127.833h639.11c70.294 0 127.822-57.525 127.822-127.833V192.442c0-70.302-57.527-127.82-127.823-127.82zm0 0"/></svg>'
    }, {
        type: "task-yes",
        title: "任务 - 已完成",
        innerHTML: '<svg viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="18" height="18"><path d="M831.551 64.623h-639.11c-70.3 0-127.816 57.517-127.816 127.819v639.103c0 70.308 57.515 127.833 127.816 127.833h639.11c70.294 0 127.822-57.525 127.822-127.833V192.442c0-70.302-57.527-127.82-127.822-127.82zM646.217 486.44c-108.652 159.779-204.52 345.115-204.52 345.115L192.443 550.351l63.916-70.303 153.385 146.994s76.695-127.822 178.95-236.469c102.261-108.652 223.689-198.127 223.689-198.127l19.17 63.916c0-.001-102.255 108.646-185.337 230.078z"/></svg>'
    }, {
        type: "mtitle",
        title: "居中标题",
        innerHTML: '<svg viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="20" height="20"><path d="M967.1 455.3H672.2c-23.5-66.1-86-113.8-160.2-113.8s-136.7 47.6-160.2 113.8H56.9C25.5 455.3 0 480.7 0 512.2c0 31.4 25.5 56.9 56.9 56.9h294.9c23.5 66.1 86 113.8 160.2 113.8s136.7-47.6 160.2-113.8h294.9c31.4 0 56.9-25.5 56.9-56.9 0-31.5-25.5-56.9-56.9-56.9zM512 569.1c-31.4 0-56.9-25.5-56.9-56.9s25.5-56.9 56.9-56.9 56.9 25.5 56.9 56.9c0 31.3-25.5 56.9-56.9 56.9z"/></svg>'
    }, {
        type: "bilibili",
        title: "哔哩哔哩视频",
        innerHTML: '<svg viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="18" height="18"><path d="M1023.488 344.064c-3.072-143.36-128-170.496-128-170.496s-97.28-.512-224.256-1.536l92.16-89.088s14.336-18.432-10.24-38.912-26.624-11.264-34.816-6.144c-7.68 5.632-117.76 113.664-137.216 133.12-50.176 0-102.4-.512-153.088-.512h17.92s-132.096-130.56-140.8-136.192-9.728-14.336-34.816 6.144c-24.576 20.48-10.24 38.912-10.24 38.912l94.208 91.648c-102.4 0-190.464.512-231.424 2.048C-9.728 210.944.512 344.064.512 344.064s1.536 285.696 0 429.568c14.336 144.384 125.44 167.424 125.44 167.424s44.032 1.024 76.8 1.024c3.072 9.216 6.144 54.272 56.32 54.272s56.32-54.272 56.32-54.272 369.152-1.536 399.872-1.536c1.536 15.872 9.216 57.344 59.904 56.32 50.176-1.024 53.76-59.904 53.76-59.904s17.408-1.536 68.608 0C1017.344 914.944 1024 774.656 1024 774.656s-2.048-287.232-.512-430.592zM920.576 800.768c0 22.528-17.92 40.96-39.936 40.96H153.6c-22.016 0-39.936-18.432-39.936-40.96V318.464c0-22.528 17.92-40.96 39.936-40.96h727.04c22.016 0 39.936 18.432 39.936 40.96v482.304z"/><path d="M403.968 414.208l-214.016 40.96 18.432 80.384 211.456-40.96-15.872-80.384zm115.2 212.48c-52.224 112.128-99.328 27.648-99.328 27.648l-34.816 22.528s69.12 94.208 134.656 22.528c77.312 71.68 136.704-23.04 136.704-23.04l-31.744-20.48c0-.512-55.808 79.872-105.472-29.184zM624.64 494.08l211.968 40.96 17.92-80.384-213.504-40.96-16.384 80.384z"/></svg>'
    }, {
        type: "netease-list",
        title: "网易云列表",
        innerHTML: '<svg viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="18" height="18"><path d="M919.438 376.378c-3.328 17.214-8.767 31.228-16.254 42.043-7.487 10.815-13.822 15.87-19.005 15.166-5.248-.768-9.92-4.48-14.015-11.198-4.095-6.72-7.295-19.07-9.535-36.988-3.711-29.18-13.246-50.682-28.54-64.504-15.295-13.822-38.972-23.741-71.095-29.692-33.596-6.72-63.225-20.35-89.013-40.956-25.725-20.54-47.227-39.802-64.377-57.784-16.382-15.742-29.053-21.31-38.012-16.83s-13.437 12.734-13.437 24.7v48.25l-1.088 493.444v63.93c.768 17.916-2.048 37.946-8.383 60.023-6.335 22.077-18.302 42.81-35.836 62.264s-40.89 36.092-69.943 49.915c-29.117 13.822-65.337 21.884-108.595 24.124-44.027 2.24-83.766-5.631-119.217-23.55-35.452-17.916-62.905-40.569-82.295-67.83-19.39-27.26-28.923-57.21-28.54-89.718.384-32.508 14.335-62.967 41.98-91.38 27.644-28.413 57.464-48.25 89.589-59.45 32.06-11.197 63.03-17.405 92.916-18.492 29.884-1.088 56.505.96 80.054 6.143 23.485 5.247 40.827 10.11 52.025 14.59 0 0 .384-505.026 1.152-615.669 0-21.693 5.631-39.42 16.766-53.306 11.2-13.821 26.11-21.884 44.795-24.124 15.614-2.368 28.477.768 38.524 9.407 10.11 8.574 20.35 20.541 30.78 35.9 10.494 15.293 23.356 32.699 38.65 52.153 15.295 19.454 36.029 38.522 62.137 57.21 22.397 17.212 41.979 29.499 58.809 36.986a4986.732 4986.732 0 0 0 47.034 20.734c14.526 6.335 28.924 14.014 43.13 22.973 14.207 8.96 29.885 23.55 47.035 43.706 17.15 19.454 27.644 39.612 31.356 60.537 3.647 20.99 3.84 40.06.448 57.273z"/></svg>'
    }, {
        type: "netease-single",
        title: "网易云单首",
        innerHTML: '<svg viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="20" height="20"><path d="M837.766 364.816c-50.828-54.107-111.313-91.2-187.245-98.706-7.324-.728-18.983-5.028-20.404-9.983-6.595-23.064-12.826-46.784-14.283-70.54-1.64-26.6 20.368-44.744 46.748-39.425 16.724 3.389 32.392 12.389 48.277 19.457 10.968 4.883 20.988 12.389 32.32 15.923 27.472 8.49 53.378-7.725 58.589-35.78 4.408-23.684-4.41-42.922-22.154-58.153-28.857-24.776-62.998-37.748-100.054-44.743-70.977-13.409-152.74 38.768-169.648 108.908-8.453 35.088-1.712 68.755 10.457 101.51 6.486 17.527 1.968 24.595-16.032 30.862-118.308 41.32-182.508 155.436-154.49 276.075 16.506 71.123 59.465 121.733 131.862 138.604 74.44 17.344 136.818-7.943 182.62-69.192 37.056-49.516 39.133-105.519 23.976-163.197-7.943-30.242-17.198-60.156-26.672-92.948 5.575 1.094 7.397 1.203 9.037 1.786 125.486 45.436 188.959 183.858 125.232 318.813-63.91 135.325-211.911 183.348-344.362 155.072-166.26-35.526-278.955-210.93-245.286-377.62 23.61-116.924 91.564-198.32 200.253-246.342 8.27-3.68 16.797-7.251 24.266-12.28 15.595-10.53 24.886-25.687 23.064-44.633-1.93-19.93-11.878-37.93-32.136-42.011-16.215-3.28-36.036-3.68-50.72 2.696-166.223 72.107-260.848 197.994-272.869 379.884-18.655 282.566 246.128 504.023 521.296 440.882 171.833-39.424 293.167-182.18 303.986-330.804 7.105-97.248-18.619-182.763-85.625-254.11zm-309.05 234.651c-39.06 3.352-71.233-23.83-77.609-65.548-11.113-72.545 19.894-127.162 85.48-151.94 12.606-4.774 18.18-2.915 21.934 10.858 8.745 32.1 19.493 63.617 28.675 95.609 3.133 10.93 3.972 22.554 5.83 33.885-.219 42.922-25.578 73.82-64.31 77.136z"/></svg>'
    }, {
        type: "abtn",
        title: "多彩按钮",
        innerHTML: '<svg viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="22" height="22"><path d="M839.68 163.84a163.84 163.84 0 0 1 163.84 163.84v327.68A163.84 163.84 0 0 1 839.68 819.2H184.32A163.84 163.84 0 0 1 20.48 655.36V327.68a163.84 163.84 0 0 1 163.84-163.84h655.36zm0 81.92H184.32a81.92 81.92 0 0 0-81.715 75.776l-.205 6.144v327.68a81.92 81.92 0 0 0 75.776 81.715l6.144.205h655.36a81.92 81.92 0 0 0 81.715-75.776l.205-6.144V327.68a81.92 81.92 0 0 0-75.776-81.715l-6.144-.205z"/><path d="M347.013 483.574c1.639-1.925 3.236-4.014 4.792-6.185 6.759-11.141 10.322-24.371 10.322-39.199 0-20.808-6.799-37.806-20.111-50.463-13.435-12.656-31.785-18.964-54.6-18.964H197.96c-7.619 0-13.64 6.758-13.64 15.032v215.532c0 8.397 6.144 15.073 13.64 15.073h89.702c23.634 0 42.476-5.038 56.443-15.278 17.367-13.23 26.132-33.587 26.132-60.457 0-17.94-4.26-32.89-12.697-44.237a54.682 54.682 0 0 0-10.527-10.854zm-47.39-28.836c-1.557 1.393-6.882 4.506-20.726 4.506h-35.308v-31.417h35.84c13.025 0 18.31 2.785 20.316 4.26.697.573 2.867 2.417 2.867 10.24 0 6.308-1.228 10.65-2.99 12.41zm-56.034 63.693h40.182c14.582 0 20.644 3.195 22.815 5.038 2.826 2.457 4.3 7.373 4.3 14.623 0 7.454-2.498 10.444-6.266 12.861-3.236 1.966-9.462 4.383-21.668 4.383h-39.363V518.43zM586.26 368.64H426.27c-7.577 0-13.639 6.8-13.639 15.073v30.229c0 8.397 6.144 15.032 13.64 15.032h50.299v170.27c0 8.357 6.144 15.033 13.68 15.033H522.2c7.619 0 13.64-6.758 13.64-15.032V429.097h50.34c7.577 0 13.64-6.758 13.64-15.032v-30.27c.081-8.356-6.063-15.155-13.518-15.155zm239.862 0h-32.276c-7.619 0-13.64 6.8-13.64 15.073v108.503l-72.704-117.022a13.19 13.19 0 0 0-11.264-6.554H664.29c-7.618 0-13.64 6.8-13.64 15.073v215.532c0 8.356 6.145 15.032 13.64 15.032h31.95c7.618 0 13.639-6.758 13.639-15.032v-110.47l73.728 119.071c2.54 4.137 6.8 6.554 11.264 6.554H826c7.618 0 13.68-6.8 13.68-15.073V383.795c.082-8.356-6.062-15.155-13.517-15.155z"/></svg>'
    }, {
        type: "anote",
        title: "便条按钮",
        innerHTML: '<svg viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="22" height="22"><path d="M856.73 796.7h-690c-57.9 0-105-47.1-105-105v-360c0-57.9 47.1-105 105-105h690c57.9 0 105 47.1 105 105v360c0 57.89-47.1 105-105 105zm-690-500.01c-19.3 0-35 15.7-35 35v360c0 19.3 15.7 35 35 35h690c19.3 0 35-15.7 35-35v-360c0-19.3-15.7-35-35-35h-690z"/><path d="M233.16 431.69H790.3v160H233.16z"/></svg>'
    }, {
        type: "dotted",
        title: "彩色虚线",
        innerHTML: '<svg viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="20" height="20"><path d="M111.09 562.26a42.6 42.6 0 1 1 0-85.19h127.78a42.6 42.6 0 0 1 0 85.19zm340.75-3a42.59 42.59 0 1 1 0-85.18h127.78a42.59 42.59 0 1 1 0 85.18zm340.75 0a42.59 42.59 0 0 1 0-85.18h127.79a42.59 42.59 0 1 1 0 85.18zm0 0"/></svg>'
    }, {
        type: "hide",
        title: "回复可见",
        innerHTML: '<svg viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="20" height="20"><path d="M342.016 640.512a483.328 483.328 0 0 1-126.976-63.488l-104.96 102.4a51.2 51.2 0 0 1-71.168-74.24l102.4-96.256a419.328 419.328 0 0 1-84.48-133.12 51.2 51.2 0 1 1 95.744-34.816 278.016 278.016 0 0 0 15.872 32.256 378.88 378.88 0 0 0 55.808 77.312A381.952 381.952 0 0 0 512 563.2a382.464 382.464 0 0 0 286.208-112.64 378.88 378.88 0 0 0 58.368-77.312 278.016 278.016 0 0 0 13.824-32.256 51.2 51.2 0 1 1 95.744 34.816 419.328 419.328 0 0 1-84.48 133.12l102.4 96.256a51.2 51.2 0 0 1-71.168 73.216L807.936 576a460.8 460.8 0 0 1-125.952 62.976l58.368 102.4a51.2 51.2 0 0 1-88.576 51.2l-74.752-130.048A521.728 521.728 0 0 1 512 665.6q-32.256 0-62.976-3.072l-76.8 129.536a51.2 51.2 0 0 1-88.576-51.2z"/></svg>'
    }, {
        type: "card-default",
        title: "默认卡片",
        innerHTML: '<svg viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="20" height="20"><path d="M928 160H96a32 32 0 0 0-32 32v672a32 32 0 0 0 32 32h832a32 32 0 0 0 32-32V192a32 32 0 0 0-32-32zm-32 672H128V224h768v608zM230.592 448.096H544a32 32 0 1 0 0-64H230.592a32 32 0 0 0 0 64zm0 192H544a32 32 0 1 0 0-64H230.592a32 32 0 1 0 0 64zM768 704a32 32 0 0 0 32-32V350.016a32 32 0 1 0-64 0V672a32 32 0 0 0 32 32z"/></svg>'
    }, {
        type: "progress",
        title: "进度条",
        innerHTML: '<svg viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="22" height="22"><path d="M757.76 323.482a188.518 188.518 0 0 1 0 377.036H266.24a188.518 188.518 0 1 1 0-377.036h491.52zm0 66.56H502.63l-72.96 243.814H757.71a121.958 121.958 0 0 0 8.397-243.558l-8.397-.308z"/></svg>'
    }, {
        type: "callout",
        title: "标注",
        innerHTML: '<svg viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="18" height="18"><path d="M842.13 910h-72.36c-19.88 0-36-16.12-36-36s16.12-36 36-36h72.36c19.88 0 36 16.12 36 36s-16.11 36-36 36zm-177.69 0h-72.23c-19.88 0-36-16.12-36-36s16.12-36 36-36h72.23c19.88 0 36 16.12 36 36s-16.12 36-36 36zm-177.57 0h-72.23c-19.88 0-36-16.12-36-36s16.12-36 36-36h72.23c19.88 0 36 16.12 36 36s-16.11 36-36 36zm-177.56 0h-72.23c-19.88 0-36-16.12-36-36s16.12-36 36-36h72.23c19.88 0 36 16.12 36 36s-16.12 36-36 36zM150 878.02c-19.88 0-36-16.1-36-35.98V769.8c0-19.88 16.12-36 36-36s36 16.12 36 36V842c0 19.88-16.12 36.02-36 36.02zm724-55.2c-19.88 0-36-16.12-36-36v-72.23c0-19.88 16.12-36 36-36s36 16.12 36 36v72.23c0 19.88-16.12 36-36 36zM150 700.47c-19.88 0-36-16.12-36-36v-72.23c0-19.88 16.12-36 36-36s36 16.12 36 36v72.23c0 19.88-16.12 36-36 36zm724-55.22c-19.88 0-36-16.12-36-36v-72.23c0-19.88 16.12-36 36-36s36 16.12 36 36v72.23c0 19.89-16.12 36-36 36zM150 522.91c-19.88 0-36-16.12-36-36v-72.23c0-19.88 16.12-36 36-36s36 16.12 36 36v72.23c0 19.88-16.12 36-36 36zm724-55.22c-19.88 0-36-16.12-36-36v-72.23c0-19.88 16.12-36 36-36s36 16.12 36 36v72.23c0 19.88-16.12 36-36 36zM150 345.34c-19.88 0-36-16.12-36-36v-72.23c0-19.88 16.12-36 36-36s36 16.12 36 36v72.23c0 19.89-16.12 36-36 36zm724-55.21c-19.88 0-36-16.12-36-36V182c0-19.88 16.12-36.05 36-36.05s36 16.07 36 35.95v72.23c0 19.88-16.12 36-36 36zM786.85 186h-72.23c-19.88 0-36-16.12-36-36s16.12-36 36-36h72.23c19.88 0 36 16.12 36 36s-16.12 36-36 36zm-177.56 0h-72.23c-19.88 0-36-16.12-36-36s16.12-36 36-36h72.23c19.88 0 36 16.12 36 36s-16.12 36-36 36zm-177.56 0H359.5c-19.88 0-36-16.12-36-36s16.12-36 36-36h72.23c19.88 0 36 16.12 36 36s-16.12 36-36 36zm-177.57 0H182c-19.88 0-36.03-16.12-36.03-36s16.08-36 35.97-36h72.23c19.88 0 36 16.12 36 36s-16.13 36-36.01 36z"/><path d="M213 120v784c0 4.42-3.58 8-8 8h-84c-4.42 0-8-3.58-8-8V120c0-4.42 3.58-8 8-8h84c4.42 0 8 3.58 8 8z"/></svg>'
    }, {
        type: "mp3",
        title: "外部音乐",
        innerHTML: '<svg viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="20" height="20"><path d="M736 249.6c-12.8-6.4-32-6.4-44.8 6.4-12.8 12.8-6.4 32 6.4 44.8C761.6 352 800 428.8 800 512c0 76.8-32 153.6-89.6 204.8-12.8 12.8-12.8 32 0 44.8 12.8 12.8 32 12.8 44.8 0C825.6 697.6 864 608 864 512c-6.4-102.4-51.2-198.4-128-262.4z"/><path d="M640 345.6c-12.8-6.4-32-6.4-44.8 6.4-12.8 12.8-6.4 32 6.4 44.8 38.4 25.6 57.6 70.4 57.6 115.2s-19.2 83.2-44.8 108.8c-12.8 12.8-12.8 32 0 44.8 12.8 12.8 32 12.8 44.8 0 44.8-38.4 64-96 64-153.6-6.4-64-38.4-128-83.2-166.4zM499.2 211.2L288 345.6H185.6c-12.8 0-19.2 6.4-19.2 19.2v313.6c0 12.8 12.8 25.6 19.2 25.6H288l211.2 115.2H512c12.8 0 19.2-6.4 19.2-19.2V230.4c0-6.4 0-6.4-6.4-12.8 0-6.4-19.2-12.8-25.6-6.4z"/></svg>'
    }, {
        type: "tabs",
        title: "标签页",
        innerHTML: '<svg viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="20" height="20"><path d="M904 788c4.31 0 7.853 2.735 8 6.12v63.548c0 3.412-3.455 6.216-7.732 6.33L904 864H120c-4.31 0-7.853-2.735-8-6.12v-63.548c0-3.412 3.455-6.216 7.732-6.33L120 788h784zm0-192c4.31 0 7.853 2.735 8 6.12v63.548c0 3.412-3.455 6.216-7.732 6.33L904 672H120c-4.31 0-7.853-2.735-8-6.12v-63.548c0-3.412 3.455-6.216 7.732-6.33L120 596h784zm-8-436c8.837 0 16 7.163 16 16v288c0 8.837-7.163 16-16 16H608c-8.837 0-16-7.163-16-16V176c0-8.837 7.163-16 16-16h288zm-384 0c8.695 0 15.828 7.03 16 15.686V464c0 8.695-7.03 15.828-15.686 16H128c-8.695 0-15.828-7.03-16-15.686V176c0-8.695 7.03-15.828 15.686-16H512zm-56 72H184v176h272V232z"/></svg>'
    }, {
        type: "card-list",
        title: "卡片列表",
        innerHTML: '<svg viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="20" height="20"><path d="M359.79 156.52L189.31 330.2a68.454 68.454 0 0 0-19.6 47.95v444.68c0 37.8 30.65 68.45 68.46 68.45h547.66c37.81 0 68.46-30.65 68.46-68.45V200.77c0-37.8-30.65-68.45-68.46-68.45h-.67l-377.19 3.7a68.458 68.458 0 0 0-48.18 20.5zm-48.86-47.95a136.921 136.921 0 0 1 96.37-41l377.19-3.7c.67-.01.67-.01 1.34-.01 75.62 0 136.92 61.29 136.92 136.9v622.06c0 75.61-61.3 136.9-136.92 136.9H238.17c-75.62 0-136.92-61.29-136.92-136.9V378.15c0-35.86 14.08-70.3 39.2-95.89l170.48-173.69z"/><path d="M683.04 353.45v34.12c0 9.42-7.66 17.06-17.1 17.06H358.07c-9.45 0-17.1-7.64-17.1-17.06v-34.12c0-9.42 7.66-17.06 17.1-17.06h307.86c9.45 0 17.11 7.64 17.11 17.06zm0 171.47v34.12c0 9.42-7.66 17.06-17.1 17.06H358.07c-9.45 0-17.1-7.64-17.1-17.06v-34.12c0-9.42 7.66-17.06 17.1-17.06h307.86c9.45 0 17.11 7.64 17.11 17.06zM545.68 695.96v34.12c0 9.42-7.64 17.06-17.06 17.06h-170.6c-9.42 0-17.06-7.64-17.06-17.06v-34.12c0-9.42 7.64-17.06 17.06-17.06h170.6c9.42 0 17.06 7.63 17.06 17.06z"/></svg>'
    }, {
        type: "timeline",
        title: "时间轴",
        innerHTML: '<svg viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="20" height="20"><path d="M365.714 329.143c0-47.543-29.257-87.772-73.143-102.4V36.57C292.571 14.63 277.943 0 256 0s-36.571 14.629-36.571 36.571v190.172c-43.886 14.628-73.143 54.857-73.143 102.4 0 47.543 29.257 87.771 73.143 102.4V588.8c-43.886 14.629-73.143 54.857-73.143 102.4 0 47.543 29.257 87.771 73.143 102.4v193.829c0 21.942 14.628 36.571 36.571 36.571s36.571-14.629 36.571-36.571V797.257c43.886-14.628 73.143-54.857 73.143-102.4 0-47.543-29.257-87.771-73.143-102.4V435.2c43.886-18.286 73.143-58.514 73.143-106.057zM256 731.429c-21.943 0-36.571-14.629-36.571-36.572s14.628-36.571 36.571-36.571 36.571 14.628 36.571 36.571S277.943 731.43 256 731.43zm0-365.715c-21.943 0-36.571-14.628-36.571-36.571S234.057 292.57 256 292.57s36.571 14.629 36.571 36.572-14.628 36.571-36.571 36.571zM768 731.43H475.429c-18.286 0-36.572 14.628-36.572 36.571s14.629 36.571 36.572 36.571H768c18.286 0 36.571-14.628 36.571-36.571S789.943 731.429 768 731.429zm73.143-512H475.429c-18.286 0-36.572 14.628-36.572 36.571s14.629 36.571 36.572 36.571h365.714c18.286 0 36.571-14.628 36.571-36.571s-14.628-36.571-36.571-36.571zM768 438.857c18.286 0 36.571-14.628 36.571-36.571S789.943 365.714 768 365.714H475.429c-18.286 0-36.572 14.629-36.572 36.572s14.629 36.571 36.572 36.571H768zm73.143 146.286H475.429c-18.286 0-36.572 14.628-36.572 36.571s14.629 36.572 36.572 36.572h365.714c18.286 0 36.571-14.629 36.571-36.572s-14.628-36.571-36.571-36.571z"/></svg>'
    }, {
        type: "card-describe",
        title: "描述卡片",
        innerHTML: '<svg viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="20" height="20"><path d="M202.667 149.333c-52.651 0-96 43.35-96 96v533.334c0 52.65 43.349 96 96 96h618.666c52.651 0 96-43.35 96-96V245.333c0-52.65-43.349-96-96-96h-448a32 32 0 0 0-5.504.427c-2.816-.213-5.653-.427-8.49-.427H202.667zm0 64h156.672a53.32 53.32 0 0 1 37.696 15.616l102.997 103.019a32 32 0 0 0 22.635 9.365h298.666c18.048 0 32 13.952 32 32v405.334c0 18.048-13.952 32-32 32H202.667c-18.048 0-32-13.952-32-32V245.333c0-18.048 13.952-32 32-32zm269.248 0h349.418c18.048 0 32 13.952 32 32v37.974a94.016 94.016 0 0 0-32-5.974H535.915l-64-64z"/></svg>'
    }, {
        type: "lamp",
        title: "跑马灯",
        innerHTML: '<svg viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="20" height="20"><path d="M848 432a80.064 80.064 0 0 0-73.216 48H217.216A80.096 80.096 0 0 0 144 432a80.096 80.096 0 0 0-80 80c0 44.128 35.904 80 80 80a80 80 0 0 0 73.216-48h557.536a80 80 0 0 0 73.216 48c44.128 0 80-35.872 80-80A80.032 80.032 0 0 0 848 432z"/></svg>'
    }, {
        type: "collapse",
        title: "折叠面板",
        innerHTML: '<svg viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="18" height="18"><path d="M944 128H80c-8.8 0-16 7.2-16 16v736c0 8.8 7.2 16 16 16h864c8.8 0 16-7.2 16-16V144c0-8.8-7.2-16-16-16zm-48 64v216H128V192h768zM128 832V472h768v360H128z"/><path d="M706 340.8c6.4 7.6 18 7.6 24.4 0l58.8-69.2c8.8-10.4 1.6-26.4-12-26.4H659.6c-13.6 0-21.2 16-12 26.4l58.4 69.2z"/></svg>'
    }, {
        type: "cloud",
        title: "云盘下载",
        innerHTML: '<svg viewBox="0 0 1462 1024" xmlns="http://www.w3.org/2000/svg" width="20" height="20"><path d="M1435.063 668.453a348.891 348.891 0 0 1-102.766 248.246 348.891 348.891 0 0 1-247.003 102.84H377.71a348.891 348.891 0 0 1-247.004-102.84A348.891 348.891 0 0 1 27.941 668.526c0-93.843 36.498-181.98 102.765-248.32a348.672 348.672 0 0 1 210.36-100.937c17.553-69.486 53.54-133.12 105.544-185.125a399.067 399.067 0 0 1 284.16-117.76c130.853 0 253.806 63.927 329.143 171.154a50.25 50.25 0 0 1-82.286 57.71 302.007 302.007 0 0 0-246.71-128.293 302.08 302.08 0 0 0-286.062 206.483c-5.12 15.36-8.997 40.52-11.63 61.805a37.376 37.376 0 0 1-39.058 32.915 257.902 257.902 0 0 0-65.024 4.535 251.1 251.1 0 0 0-200.631 249.782c2.194 135.607 117.467 246.492 253.074 246.492h699.831c136.631 0 249.93-108.252 252.928-244.736a250.88 250.88 0 0 0-250.514-256.512 250.807 250.807 0 0 0-250.514 249.929 51.931 51.931 0 0 1-45.861 50.688 50.322 50.322 0 0 1-54.71-50.03c0-93.842 36.497-182.052 102.765-248.32a348.891 348.891 0 0 1 248.32-102.839c93.842 0 181.98 36.572 248.32 102.84a349.623 349.623 0 0 1 102.912 248.539z"/></svg>'
    }, {
        type: "gird",
        title: "宫格",
        innerHTML: '<svg viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="20" height="20"><path d="M156.16 896.512h711.168c15.872 0 28.672-12.8 28.672-28.672V156.16c0-15.872-12.8-28.672-28.672-28.672H156.16c-15.872 0-28.672 12.8-28.672 28.672v711.168c0 16.384 12.8 29.184 28.672 29.184zm35.328-352.256h288.768v288.256H191.488V544.256zm352.768 288.256V544.256h288.768v288.256H544.256zm288.768-352.768H544.256V191.488h288.768v288.256zm-353.28-288.256v288.256H191.488V191.488h288.256z"/></svg>'
    }, {
        type: "alert",
        title: "提示",
        innerHTML: '<svg class="icon" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="20" height="20"><path d="M193.024 795.99c0 17.692 14.222 32.028 31.972 32.028h574.008a31.972 31.972 0 0 0 31.972-32.029V562.972a318.976 318.976 0 1 0-637.952 0V795.99zm71.964-233.018a247.012 247.012 0 0 1 494.024 0v193.024H404.025V584.988a10.012 10.012 0 0 0-10.013-10.012H349.98a10.012 10.012 0 0 0-9.955 10.012v171.008h-75.037V562.972zM216.918 310.5l39.594-39.595a8.021 8.021 0 0 0 0-11.321l-67.925-67.868a8.021 8.021 0 0 0-11.264 0l-39.595 39.594a8.021 8.021 0 0 0 0 11.264l67.868 67.926a8.021 8.021 0 0 0 11.321 0zM886.5 231.31l-39.595-39.594a8.021 8.021 0 0 0-11.321 0l-67.868 67.868a8.021 8.021 0 0 0 0 11.32L807.31 310.5a8.021 8.021 0 0 0 11.264 0l67.926-67.926a8.021 8.021 0 0 0 0-11.264zM832 892.018H192a31.972 31.972 0 0 0-32.028 31.971v24.007c0 4.38 3.64 7.965 8.02 7.965h688.015c4.38 0 7.965-3.584 7.965-7.965V923.99A31.972 31.972 0 0 0 832 892.018zM484.01 179.996h55.98a7.951 7.951 0 0 0 7.964-7.964V75.947a8.021 8.021 0 0 0-7.965-7.965h-55.978a8.021 8.021 0 0 0-7.965 7.965v95.971c0 4.438 3.527 8.022 7.965 8.022z"/></svg>'
    }, {
        type: "uservip",
        title: "VIP可见",
        innerHTML: '<svg t="1645332565341" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4395" width="20" height="20"><path d="M933.237561 340.38581c-4.68962-5.355769-15.550857-18.066151-29.865751-34.800205-43.093383-50.365452-115.195497-134.661899-148.391391-170.441241-13.7161-14.804363-30.776534-33.210084-63.823328-34.515598-2.406169-0.081545-9.733201-0.35396-102.38918-0.35396-105.339979 0-254.124903 0.33957-254.057749 0.33957-15.754918 0-39.775432 3.574776-66.243687 34.555371-19.412438 22.756771-49.563796 57.570167-80.082304 92.805878-38.87884 44.887366-78.327894 90.453872-96.870322 112.530504-32.230947 37.328691-33.033603 89.394191-2.107171 135.912451l2.053208 2.719156c36.513644 42.535361 115.9288 133.846052 209.727205 241.686736l145.795551 167.694703c26.929342 31.021168 48.190927 35.208129 65.441031 35.208129 18.121114 0 38.593234-4.268506 65.441031-35.194938l150.797359-173.472586c88.714052-101.995447 163.83432-188.357494 204.996812-236.290395C961.146039 445.602274 968.97613 383.477994 933.237561 340.38581zM891.096932 442.869926c-40.795341 47.497397-115.833865 133.777699-204.452981 235.650829l-150.81155 173.500167c-13.919962 16.027333-19.398248 16.027333-23.408529 16.027333-3.778838 0-9.488367 0-23.395138-16.027333l-145.822133-167.735475c-92.696752-106.577141-171.337833-196.990241-208.327754-240.041652-16.366903-25.420765-16.815599-49.29138-0.979136-67.629747 18.691327-22.239721 57.924127-67.548202 96.571525-112.177544 30.627634-35.358027 60.873728-70.293941 80.340329-93.104675 12.84609-15.034806 19.493983-15.034806 23.966351-15.034806 0 0 148.704378-0.33957 253.989395-0.33957 79.728344 0 97.087575 0.204062 100.283008 0.313188 8.659329 0.33957 11.949698 2.528486 25.094586 16.734054 32.435009 34.963295 104.102618 118.729501 146.909395 168.782965 14.504566 16.951307 25.5157 29.811788 29.784006 34.692079C907.137457 396.121222 903.889059 427.428196 891.096932 442.869926zM682.614084 394.823901l-170.78201 218.719908-170.561759-219.314505c-1.742019-2.740542-2.268262-2.740542-4.739587-2.740542l-83.213381 0 0 38.453529 1.998045 0c15.731534 0 21.56338 4.092026 28.017604 12.705386 0.633371 0.865014 1.377866 1.850146 2.862859 3.6871 37.509169 50.997823 184.517497 229.654694 226.009366 285.296169 41.478677-55.681248 188.393269-234.461635 226.4011-285.999892 0.918977-1.092259 1.634892-2.0644 2.268262-2.916023 6.494996-8.654132 12.341233-12.773739 28.003414-12.773739l1.890918 0 0-38.518884-82.915583 0C685.516716 391.422408 684.814991 391.422408 682.614084 394.823901z" p-id="4396"></path></svg>'
    }, {
		type: "usermonyi",
        title: "付费可见",
        innerHTML: '<svg t="1645332487782" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3468" width="20" height="20"><path d="M579.632 560.915c0.287-1.062 0.592-2.143 0.914-3.239l-10.295 18.072c4.26-2.854 7.454-7.699 9.381-14.833z" fill="#cdcdcd" p-id="3469"></path><path d="M652.975 409.125C750.171 237.13 884.544 26.196 703.003 121.95c-245.272 129.368-439.311 0-439.311 0-129.613-73.778-17.551 128.675 107.949 287.378-154.999 37.509-265.539 135.359-265.539 250.154C106.101 806.672 287.828 926 512 926s405.899-119.508 405.899-266.7c0-114.642-110.25-212.557-264.924-250.175zM600 630v25h-74v25h74v25h-74v57h-30v-57h-73v-25h73v-25h-73v-25h60.124L412.28 505h34.898l50.603 90.079c5.698 10.237 10.121 19.215 13.261 26.893 2.675-6.165 7.443-15.634 14.308-28.432l11.428-21.141c-41.175-20.406-104.691-86.64-165.107-163.035 0.058-0.014 0.117-0.038 0.175-0.052 60.364 76.302 123.796 142.669 164.932 163.055L573.162 505h37.342l-29.957 52.634a157.544 157.544 0 0 0-0.914 3.26c-1.928 7.134-5.121 12.416-9.381 15.27L539.834 630H600z" fill="#cdcdcd" p-id="3470"></path></svg>'
    }, {
		type: "userpoint",
        title: "积分购买",
        innerHTML: '<svg t="1645332644048" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5400" width="20" height="20"><path d="M179.2 182.4c-34.4 16.8-51.2 35.2-51.2 55.2v55.2c0 20 16.8 38.4 51.2 55.2 34.4 16.8 80.8 30.4 140 40 59.2 9.6 123.2 14.4 192.8 14.4s133.6-4.8 192.8-14.4c59.2-9.6 105.6-23.2 140-40 34.4-16.8 51.2-35.2 51.2-55.2v-55.2c0-20-16.8-38.4-51.2-55.2-34.4-16.8-80.8-30.4-140-40C645.6 132.8 581.6 128 512 128s-133.6 4.8-192.8 14.4c-58.4 10.4-105.6 23.2-140 40M128 552v69.6c0 20 16.8 38.4 51.2 55.2s80.8 30.4 140 40c59.2 9.6 123.2 14.4 192.8 14.4s133.6-4.8 192.8-14.4c59.2-9.6 105.6-23.2 140-40 34.4-16.8 51.2-35.2 51.2-55.2v-72.8c-40 24-93.6 42.4-162.4 54.4-68.8 12.8-142.4 18.4-221.6 18.4s-152.8-5.6-221.6-18.4C221.6 591.2 168 572.8 128 548.8M128 712v74.4c0 20 16.8 38.4 51.2 55.2s80.8 30.4 140 40c59.2 9.6 123.2 14.4 192.8 14.4s133.6-4.8 192.8-14.4c59.2-9.6 105.6-23.2 140-40 34.4-16.8 51.2-35.2 51.2-55.2v-72.8c-40 24-93.6 42.4-162.4 54.4-68.8 12-142.4 18.4-221.6 18.4s-152.8-6.4-221.6-18.4C221.6 756 168 737.6 128 713.6M128 384v72.8c0 20 16.8 38.4 51.2 55.2s80.8 30.4 140 40c59.2 9.6 123.2 14.4 192.8 14.4s133.6-4.8 192.8-14.4c59.2-9.6 105.6-23.2 140-40 34.4-16.8 51.2-35.2 51.2-55.2V384c-40 24-93.6 42.4-162.4 54.4-68.8 12-142.4 18.4-221.6 18.4s-152.8-6.4-221.6-18.4C221.6 426.4 168 408 128 384" p-id="5401"></path></svg>'
    }, {
        type: "dplayer",
        title: "M3U8/MP4视频",
        innerHTML: '<svg viewBox="0 0 1170 1024" xmlns="http://www.w3.org/2000/svg" width="18" height="18"><path d="M508.197 298.642c-39.278-20.919-69.34-5.12-69.34 35.109v211.822c0 40.301 29.989 56.027 69.12 34.889L698.88 477.257c38.985-21.065 39.57-55.442.293-76.361L508.197 298.642z"/><path d="M1060.571 877.714H109.714C49.225 877.714 0 828.562 0 768V109.714C0 49.225 49.225 0 109.714 0h950.857c60.416 0 109.715 49.225 109.715 109.714V768c0 60.562-49.299 109.714-109.715 109.714zM109.714 73.143a36.571 36.571 0 0 0-36.571 36.571V768c0 20.114 16.457 36.571 36.571 36.571h950.857c20.115 0 36.572-16.457 36.572-36.571V109.714a36.571 36.571 0 0 0-36.572-36.571H109.714zM219.43 950.857h731.428V1024H219.43v-73.143z"/></svg>'
    }, {
        type: "qydown",
        title: "文件上传",
        innerHTML: '<svg t="1645170248195" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3845" width="18" height="18"><path d="M855.04 385.024q19.456 2.048 38.912 10.24t33.792 23.04 21.504 37.376 2.048 54.272q-2.048 8.192-8.192 40.448t-14.336 74.24-18.432 86.528-19.456 76.288q-5.12 18.432-14.848 37.888t-25.088 35.328-36.864 26.112-51.2 10.24l-567.296 0q-21.504 0-44.544-9.216t-42.496-26.112-31.744-40.96-12.288-53.76l0-439.296q0-62.464 33.792-97.792t95.232-35.328l503.808 0q22.528 0 46.592 8.704t43.52 24.064 31.744 35.84 12.288 44.032l0 11.264-53.248 0q-40.96 0-95.744-0.512t-116.736-0.512-115.712-0.512-92.672-0.512l-47.104 0q-26.624 0-41.472 16.896t-23.04 44.544q-8.192 29.696-18.432 62.976t-18.432 61.952q-10.24 33.792-20.48 65.536-2.048 8.192-2.048 13.312 0 17.408 11.776 29.184t29.184 11.776q31.744 0 43.008-39.936l54.272-198.656q133.12 1.024 243.712 1.024l286.72 0z" p-id="3846"></path></svg>'
    }, {
        type: "clean",
        title: "清屏",
        innerHTML: '<svg viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="20" height="20"><path d="M479.3 863.6L899.9 443c37.4-37.4 37.4-98.3 0-135.8L716.7 124.1C698.5 106 674.4 96 648.7 96c-25.8 0-50.4 10.8-68.6 29l-455 455c-18.2 18.2-29 42.8-29 68.6 0 25.7 9.9 49.9 28.1 68l183.1 183.2c18.1 18.1 42.2 28.1 67.9 28.1 3 0 5.9-.1 8.8-.4v.1h512c17.7 0 32-14.3 32-32s-14.3-32-32-32H479.3zm-126.8-9L169.4 671.5c-6-6-9.4-14.1-9.4-22.6 0-8.5 3.3-16.6 9.4-22.6l104.9-104.9 228.4 228.4-104.9 104.8c-6 6-14.1 9.4-22.6 9.4-8.6 0-16.6-3.3-22.7-9.4z"/></svg>'
    }, {
        type: "download",
        title: "下载",
        innerHTML: '<svg viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="20" height="20"><path d="M64.3 874.8v62.6c0 4.8 3.9 8.7 8.7 8.7h878c4.8 0 8.7-3.9 8.7-8.7v-62.6c0-4.8-3.9-8.7-8.7-8.7H73c-4.8 0-8.7 3.9-8.7 8.7zm418.9-99.9c3.2 2.9 6.8 5.3 10.9 7.1 5.2 2.3 10.7 3.4 16.1 3.4 9.8 0 19.5-3.6 27-10.5l291.4-270.4c3.5-3.2 3.7-8.7.5-12.2l-42.3-46.2c-3.3-3.6-8.8-3.8-12.3-.5L550.2 654.5v-528c0-4.8-3.9-8.7-8.7-8.7h-62.6c-4.8 0-8.7 3.9-8.7 8.7v527.9L239.6 442.9c-3.5-3.2-9-3-12.3.5L185 489.7c-3.2 3.5-3 9 .5 12.3l297.7 272.9z"/></svg>'
    }, {
        type: "fullScreen",
        title: "全屏/取消全屏",
        innerHTML: '<svg viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="20" height="20"><path d="M181.2 803.4V637H98v208c0 45.9 37.2 83.2 83.2 83.2h208V845H222.8c-23 0-41.6-18.6-41.6-41.6zM844.8 98.6h-208v83.2h166.4c23 0 41.6 18.6 41.6 41.6v166.4H928v-208c0-46-37.3-83.2-83.2-83.2zm-746.6 83v208h83.2V223.2c0-23 18.6-41.6 41.6-41.6h166.4V98.4h-208c-46 0-83.2 37.3-83.2 83.2zm746.4 455.6v166.4c0 23-18.6 41.6-41.6 41.6H636.6v83.2h208c45.9 0 83.2-37.2 83.2-83.2v-208h-83.2z"/></svg>'
    }, {
        type: "preview",
        title: "预览/取消预览",
        innerHTML: '<svg viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="20" height="20"><path d="M832 128c70.692 0 128 57.308 128 128v512c0 70.692-57.308 128-128 128H192c-70.692 0-128-57.308-128-128V256c0-70.692 57.308-128 128-128h640zm0 72H192c-30.619 0-55.498 24.573-56 55.074V768c0 30.619 24.573 55.498 55.074 55.992L192 824h640c30.619 0 55.498-24.573 56-55.074V256c0-30.619-24.573-55.498-55.074-55.992L832 200zM693.031 450.127l.425.417 128 128c13.918 13.918 14.057 36.398.417 50.487l-.417.425-128 128c-14.059 14.059-36.853 14.059-50.912 0-13.918-13.918-14.057-36.398-.417-50.487l.417-.425L745.09 604 642.544 501.456c-13.918-13.918-14.057-36.398-.417-50.487l.417-.425c13.918-13.918 36.398-14.057 50.487-.417zM284 312c19.882 0 36 16.118 36 36s-16.118 36-36 36h-56c-19.882 0-36-16.118-36-36s16.118-36 36-36h56zm512 0c19.882 0 36 16.118 36 36s-16.118 36-36 36H420c-19.882 0-36-16.118-36-36s16.118-36 36-36h376z"/></svg>'
    }];
    const ed = new HyperDown,
        td = window.JoeConfig.playerAPI;

    function nd(e) {
        if (!window.JoeConfig.canPreview) return $(".cm-preview-content").html("1. 预览已默认关闭<br>2. 点击上方预览按钮启用预览<br>3. 若编辑器卡顿可尝试关闭预览"); - 1 !== e.indexOf("　") && (e = e.replace(/　/g, "&emsp;")), -1 !== (e = (e = (e = ed.makeHtml(e)).replace(/\:\:\(\s*(呵呵|哈哈|吐舌|太开心|笑眼|花心|小乖|乖|捂嘴笑|滑稽|你懂的|不高兴|怒|汗|黑线|泪|真棒|喷|惊哭|阴险|鄙视|酷|啊|狂汗|what|疑问|酸爽|呀咩爹|委屈|惊讶|睡觉|笑尿|挖鼻|吐|犀利|小红脸|懒得理|勉强|爱心|心碎|玫瑰|礼物|彩虹|太阳|星星月亮|钱币|茶杯|蛋糕|大拇指|胜利|haha|OK|沙发|手纸|香蕉|便便|药丸|红领巾|蜡烛|音乐|灯泡|开心|钱|咦|呼|冷|生气|弱|吐血|狗头)\s*\)/g, (function(e, t) {
            return t = encodeURI(t).replace(/%/g, ""), `<img class="owo" src="${window.JoeConfig.themeURL}assets/owo/paopao/${t}_2x.png" />`
        }))).replace(/\:\@\(\s*(高兴|小怒|脸红|内伤|装大款|赞一个|害羞|汗|吐血倒地|深思|不高兴|无语|亲亲|口水|尴尬|中指|想一想|哭泣|便便|献花|皱眉|傻笑|狂汗|吐|喷水|看不见|鼓掌|阴暗|长草|献黄瓜|邪恶|期待|得意|吐舌|喷血|无所谓|观察|暗地观察|肿包|中枪|大囧|呲牙|抠鼻|不说话|咽气|欢呼|锁眉|蜡烛|坐等|击掌|惊喜|喜极而泣|抽烟|不出所料|愤怒|无奈|黑线|投降|看热闹|扇耳光|小眼睛|中刀)\s*\)/g, (function(e, t) {
            return t = encodeURI(t).replace(/%/g, ""), `<img class="owo" src="${window.JoeConfig.themeURL}assets/owo/aru/${t}_2x.png" />`
        }))).indexOf("{lamp") && (e = e.replace(/{lamp\/}/g, '<span class="joe_lamp"></span>')), -1 !== e.indexOf("{x}") && (e = e.replace(/{x}/g, '<input type="checkbox" class="joe_checkbox" checked disabled></input>')), -1 !== e.indexOf("{ }") && (e = e.replace(/{ }/g, '<input type="checkbox" class="joe_checkbox" disabled></input>')), -1 !== e.indexOf("{mtitle") && (e = e.replace(/{mtitle([^}]*)\/}/g, "<joe-mtitle $1></joe-mtitle>")), -1 !== e.indexOf("{dplayer") && (e = e.replace(/{dplayer([^}]*)\/}/g, '<joe-dplayer player="' + td + '" $1></joe-dplayer>')), -1 !== e.indexOf("{bilibili") && (e = e.replace(/{bilibili([^}]*)\/}/g, "<joe-bilibili $1></joe-bilibili>")), -1 !== e.indexOf("{music-list") && (e = e.replace(/{music-list([^}]*)\/}/g, "<joe-mlist $1></joe-mlist>")), -1 !== e.indexOf("{music") && (e = e.replace(/{music([^}]*)\/}/g, "<joe-music $1></joe-music>")), -1 !== e.indexOf("{mp3") && (e = e.replace(/{mp3([^}]*)\/}/g, "<joe-mp3 $1></joe-mp3>")), -1 !== e.indexOf("{abtn") && (e = e.replace(/{abtn([^}]*)\/}/g, "<joe-abtn $1></joe-abtn>")), -1 !== e.indexOf("{anote") && (e = e.replace(/{anote([^}]*)\/}/g, "<joe-anote $1></joe-anote>")), -1 !== e.indexOf("{dotted") && (e = e.replace(/{dotted([^}]*)\/}/g, "<joe-dotted $1></joe-dotted>")), -1 !== e.indexOf("{message") && (e = e.replace(/{message([^}]*)\/}/g, "<joe-message $1></joe-message>")), -1 !== e.indexOf("{progress") && (e = e.replace(/{progress([^}]*)\/}/g, "<joe-progress $1></joe-progress>")), -1 !== e.indexOf("{cloud") && (e = e.replace(/{cloud([^}]*)\/}/g, "<joe-cloud $1></joe-cloud>")), -1 !== e.indexOf("{hide") && (e = e.replace(/{hide[^}]*}([\s\S]*?){\/hide}/g, "<joe-hide></joe-hide>")), -1 !== e.indexOf("{card-default") && (e = e.replace(/{card-default([^}]*)}([\s\S]*?){\/card-default}/g, '<section style="margin-bottom: 15px"><joe-card-default $1><span class="_temp" style="display: none">$2</span></joe-card-default></section>')), -1 !== e.indexOf("{callout") && (e = e.replace(/{callout([^}]*)}([\s\S]*?){\/callout}/g, '<section style="margin-bottom: 15px"><joe-callout $1><span class="_temp" style="display: none">$2</span></joe-callout></section>')), -1 !== e.indexOf("{card-describe") && (e = e.replace(/{card-describe([^}]*)}([\s\S]*?){\/card-describe}/g, '<section style="margin-bottom: 15px"><joe-card-describe $1><span class="_temp" style="display: none">$2</span></joe-card-describe></section>')), -1 !== e.indexOf("{tabs") && (e = e.replace(/{tabs}([\s\S]*?){\/tabs}/g, '<section style="margin-bottom: 15px"><joe-tabs><span class="_temp" style="display: none">$1</span></joe-tabs></section>')), -1 !== e.indexOf("{card-list") && (e = e.replace(/{card-list}([\s\S]*?){\/card-list}/g, '<section style="margin-bottom: 15px"><joe-card-list><span class="_temp" style="display: none">$1</span></joe-card-list></section>')), -1 !== e.indexOf("{timeline") && (e = e.replace(/{timeline}([\s\S]*?){\/timeline}/g, '<section style="margin-bottom: 15px"><joe-timeline><span class="_temp" style="display: none">$1</span></joe-timeline></section>')), -1 !== e.indexOf("{collapse") && (e = e.replace(/{collapse}([\s\S]*?){\/collapse}/g, '<section style="margin-bottom: 15px"><joe-collapse><span class="_temp" style="display: none">$1</span></joe-collapse></section>')), -1 !== e.indexOf("{alert") && (e = e.replace(/{alert([^}]*)}([\s\S]*?){\/alert}/g, '<section style="margin-bottom: 15px"><joe-alert $1><span class="_temp" style="display: none">$2</span></joe-alert></section>')), -1 !== e.indexOf("{gird") && (e = e.replace(/{gird([^}]*)}([\s\S]*?){\/gird}/g, '<section style="margin-bottom: 15px"><joe-gird $1><span class="_temp" style="display: none">$2</span></joe-gird></section>')), $(".cm-preview-content").html(e), $(".cm-preview-content p:empty").remove(), Prism.highlightAll()
    }
    class rd extends class {
        constructor() {
            $("body").append('\n            <div class="cm-modal">\n                <div class="cm-modal__wrapper">\n                    <div class="cm-modal__wrapper-header">\n                        <div class="cm-modal__wrapper-header--text"></div>\n                        <div class="cm-modal__wrapper-header--close">×</div>\n                    </div>\n                    <div class="cm-modal__wrapper-bodyer"></div>\n                    <div class="cm-modal__wrapper-footer">\n                        <button class="cm-modal__wrapper-footer--cancle">取消</button>\n                        <button class="cm-modal__wrapper-footer--confirm">确定</button>\n                    </div>\n                </div>\n            </div>\n        '), $(".cm-modal__wrapper-footer--cancle, .cm-modal__wrapper-header--close").on("click", (() => $(".cm-modal").removeClass("active"))), $(".cm-modal__wrapper-footer--confirm").on("click", (() => {
                this.options.confirm(), $(".cm-modal").removeClass("active")
            }))
        }
        _openModal(e = {}) {
            this.options = Object.assign({
                title: "提示",
                innerHtml: "内容",
                hasFooter: !0,
                confirm: () => {},
                handler: () => {}
            }, e), $(".cm-modal__wrapper-header--text").html(this.options.title), $(".cm-modal__wrapper-bodyer").html(this.options.innerHtml), this.options.hasFooter ? $(".cm-modal__wrapper-footer").show() : $(".cm-modal__wrapper-footer").hide(), $(".cm-modal").addClass("active"), this.options.handler()
        }
        _getLineCh(e) {
            const t = e.state.selection.main.head;
            return t - e.state.doc.lineAt(t).from
        }
        _replaceSelection(e, t) {
            e.dispatch(e.state.replaceSelection(t))
        }
        _setCursor(e, t) {
            e.dispatch({
                selection: {
                    anchor: t
                }
            })
        }
        _getSelection(e) {
            return e.state.sliceDoc(e.state.selection.main.from, e.state.selection.main.to)
        }
        _insetAmboText(e, t) {
            const n = e.state.selection.main.head,
                r = this._getSelection(e);
            this._replaceSelection(e, ` ${t+r+t} `), "" === r && this._setCursor(e, n + t.length + 1), e.focus()
        }
        _createTableLists(e, t, n = "", r) {
            $.ajax({
                url: t,
                dataType: "json",
                success: t => {
                    let i = "",
                        a = "";
                    for (let e in t) {
                        const r = t[e].split(" ");
                        i += `<div class="tabbar-item ${e===n?"active":""}" data-show="${e}">${e}</div>`, a += `<div class="lists ${e===n?"active":""}" data-show="${e}">${r.map((e=>`<div class="lists-item" data-text="${e}">${e}</div>`)).join(" ")}</div>`
                    }
                    this._openModal({
                        title: r,
                        hasFooter: !1,
                        innerHtml: `<div class="tabbar">${i}</div>${a}`,
                        handler: () => {
                            $(".cm-modal__wrapper-bodyer .tabbar-item").on("click", (function() {
                                const e = $(this),
                                    t = e.attr("data-show"),
                                    n = $(".cm-modal__wrapper-bodyer .tabbar");
                                e.addClass("active").siblings().removeClass("active"), n.stop().animate({
                                    scrollLeft: e[0].offsetLeft - n[0].offsetWidth / 2 + e[0].offsetWidth / 2 - 15
                                }), $(".cm-modal__wrapper-bodyer .lists").removeClass("active"), $(".cm-modal__wrapper-bodyer .lists[data-show='" + t + "']").addClass("active")
                            }));
                            const t = this;
                            $(".cm-modal__wrapper-bodyer .lists-item").on("click", (function() {
                                const n = $(this).attr("data-text");
                                t._replaceSelection(e, ` ${n} `), $(".cm-modal").removeClass("active"), e.focus()
                            }))
                        }
                    })
                }
            })
        }
        _updateScroller(e, t) {
            const n = e.scrollTop / (e.scrollHeight - e.offsetHeight);
            t.scrollTop = n * (t.scrollHeight - t.offsetHeight)
        }
        handleFullScreen(e) {
            e.toggleClass("active"), $("body").toggleClass("fullscreen"), $(".cm-container").toggleClass("fullscreen"), $(".cm-preview").width(0)
        }
        handlePublish() {
            $("#btn-submit").click()
        }
        handleUndo(e) {
            as(e), e.focus()
        }
        handleRedo(e) {
            os(e), e.focus()
        }
        handleIndent(e) {
            this._replaceSelection(e, "　"), e.focus()
        }
        handleTime(e) {
            const t = new Date,
                n = t.getFullYear(),
                r = String(t.getMonth() + 1).padStart(2, 0),
                i = String(t.getDate()).padStart(2, 0),
                a = String(t.getHours()).padStart(2, 0),
                o = String(t.getMinutes()).padStart(2, 0),
                s = String(t.getSeconds()).padStart(2, 0),
                O = ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"][t.getDay()],
                l = `${this._getLineCh(e)?"\n":""}${n}-${r}-${i} ${a}:${o}:${s} ${O}\n`;
            this._replaceSelection(e, l), e.focus()
        }
        handleHr(e) {
            const t = (this._getLineCh(e) ? "\n" : "") + "\n------------\n\n";
            this._replaceSelection(e, t), e.focus()
        }
        handleClean(e) {
            e.dispatch({
                changes: {
                    from: 0,
                    to: e.state.doc.length,
                    insert: ""
                }
            }), e.focus()
        }
        handleOrdered(e) {
            const t = this._getSelection(e);
            if ("" === t) {
                const t = (this._getLineCh(e) ? "\n\n" : "") + "1. ";
                this._replaceSelection(e, t)
            } else {
                const n = t.split("\n");
                for (let e = 0, t = n.length; e < t; e++) n[e] = "" === n[e] ? "" : e + 1 + ". " + n[e];
                const r = (this._getLineCh(e) ? "\n" : "") + n.join("\n");
                this._replaceSelection(e, r)
            }
            e.focus()
        }
        handleUnordered(e) {
            const t = this._getSelection(e);
            if ("" === t) {
                const t = (this._getLineCh(e) ? "\n" : "") + "- ";
                this._replaceSelection(e, t)
            } else {
                const n = t.split("\n");
                for (let e = 0, t = n.length; e < t; e++) n[e] = "" === n[e] ? "" : "- " + n[e];
                const r = (this._getLineCh(e) ? "\n" : "") + n.join("\n");
                this._replaceSelection(e, r)
            }
            e.focus()
        }
        handleQuote(e) {
            const t = this._getSelection(e);
            if ("" === t) this._replaceSelection(e, (this._getLineCh(e) ? "\n" : "") + "> ");
            else {
                const n = t.split("\n");
                for (let e = 0, t = n.length; e < t; e++) n[e] = "" === n[e] ? "" : "> " + n[e];
                const r = (this._getLineCh(e) ? "\n" : "") + n.join("\n");
                this._replaceSelection(e, r)
            }
            e.focus()
        }
        handleDownload(e) {
            const t = $("#title").val() || "新文章",
                n = document.createElement("a");
            let r = new Blob([e.state.doc.toString()]);
            n.download = t + ".md", n.href = URL.createObjectURL(r), n.click(), URL.revokeObjectURL(r)
        }
        handleTitle(e, t) {
            const n = $(`\n\t\t\t<div class="cm-tools-item" title="${t.title}">\n\t\t\t\t${t.innerHTML}\n\t\t\t\t<div class="cm-tools__dropdown">\n\t\t\t\t\t<div class="cm-tools__dropdown-item" data-text="# "> H1 </div>\n\t\t\t\t\t<div class="cm-tools__dropdown-item" data-text="## "> H2 </div>\n\t\t\t\t\t<div class="cm-tools__dropdown-item" data-text="### "> H3 </div>\n\t\t\t\t\t<div class="cm-tools__dropdown-item" data-text="#### "> H4 </div>\n\t\t\t\t\t<div class="cm-tools__dropdown-item" data-text="##### "> H5 </div>\n\t\t\t\t\t<div class="cm-tools__dropdown-item" data-text="###### "> H6 </div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t`);
            n.on("click", (function(e) {
                e.stopPropagation(), $(this).toggleClass("active")
            }));
            const r = this;
            n.on("click", ".cm-tools__dropdown-item", (function(t) {
                t.stopPropagation();
                const i = $(this).attr("data-text");
                r._getLineCh(e) ? r._replaceSelection(e, "\n\n" + i) : r._replaceSelection(e, i), n.removeClass("active"), e.focus()
            })), $(document).on("click", (() => n.removeClass("active"))), $(".cm-tools").append(n)
        }
        handleLink(e) {
            this._openModal({
                title: "插入链接",
                innerHtml: '\n   <div class="fitem">\n <label>链接标题</label>\n                    <input autocomplete="off" name="title" placeholder="请输入链接标题"/>\n                </div>\n                <div class="fitem">\n                    <label>链接地址</label>\n                    <input autocomplete="off" name="url" placeholder="请输入链接地址"/>\n  </div>\n            ',
                confirm: () => {
                    const t = $(".cm-modal input[name='title']").val() || "Test",
                        n = $(".cm-modal input[name='url']").val() || "http://";
                    this._replaceSelection(e, ` [${t}](${n}) `), e.focus()
                }
            })
        }
        handleImage(e) {
            this._openModal({
                title: "插入图片",
                innerHtml: '\n                <div class="fitem">\n                    <label>图片名称</label>\n <input autocomplete="off" name="title" placeholder="请输入图片名称"/>\n    </div>\n <div class="fitem">\n<label><button class="helper-button-info" onclick="fmtsc1()" style="height:33px;width:55px;background:#fff;border: 1px solid #ddd;color: #000;">本地</button></label>\n <input autocomplete="off" name="url" id="fmtid11" placeholder="请输入图片地址"/>\n                                   </div>\n            ',
                confirm: () => {
                    const t = $(".cm-modal input[name='title']").val() || "Test",
                        n = $(".cm-modal input[name='url']").val() || "http://";
                    this._replaceSelection(e, ` ![${t}](${n}) `), e.focus()
                }
            })
        }
        handleTable(e) {
            this._openModal({
                title: "插入表格",
                innerHtml: '\n                <div class="fitem">\n                    <label>表格行</label>\n                    <input style="width: 50px; flex: none; margin-right: 10px;" value="3" autocomplete="off" name="row"/>\n                    <label>表格列</label>\n                    <input style="width: 50px; flex: none;" value="3" autocomplete="off" name="column"/>\n                </div>\n            ',
                confirm: () => {
                    let t = $(".cm-modal input[name='row']").val(),
                        n = $(".cm-modal input[name='column']").val();
                    isNaN(t) && (t = 3), isNaN(n) && (n = 3);
                    let r = "",
                        i = "",
                        a = "";
                    for (let e = 0; e < n; e++) r += "| 表头 ", i += "| :--: ";
                    for (let e = 0; e < t; e++) {
                        for (let e = 0; e < n; e++) a += "| 表格 ";
                        a += "|\n"
                    }
                    const o = `${r}|\n${i}|\n${a}\n`;
                    this._getLineCh(e) ? this._replaceSelection(e, "\n\n" + o) : this._replaceSelection(e, o), e.focus()
                }
            })
        }
        handleGird(e) {
            this._openModal({
                title: "插入宫格",
                innerHtml: '\n                <div class="fitem">\n                    <label>宫格列数</label>\n                    <input value="3" autocomplete="off" name="column" placeholder="请输入宫格列数"/>\n                </div>\n                <div class="fitem">\n                    <label>宫格间隔</label>\n                    <input value="15" autocomplete="off" name="gap" placeholder="请输入宫格间隔"/>\n                </div>\n            ',
                confirm: () => {
                    const t = `{gird column="${$(".cm-modal input[name='column']").val()}" gap="${$(".cm-modal input[name='gap']").val()}"}\n{gird-item}\n 宫格内容一\n{/gird-item}\n{gird-item}\n 宫格内容二\n{/gird-item}\n{gird-item}\n 宫格内容三\n{/gird-item}\n{/gird}`;
                    this._getLineCh(e) ? this._replaceSelection(e, "\n\n" + t) : this._replaceSelection(e, t), e.focus()
                }
            })
        }
        handleCodeBlock(e) {
            const t = "html+css+javascript+php".split("+").sort(((e, t) => e.localeCompare(t))),
                n = sessionStorage.getItem("selectType") || "";
            let r = "";
            t.forEach((e => {
                r += `<option ${n===e?"selected":""} value="${e}">${e.toUpperCase()}</option>`
            })), this._openModal({
                title: "插入代码块",
                innerHtml: `\n                <div class="fitem">\n                    <label>语言类型</label>\n                    <select name="type">\n                        <option value="">- 请选择语言类型 -</option>\n                        ${r}\n                    </select>\n                </div>\n            `,
                confirm: () => {
                    const t = $(".cm-modal select[name='type']").val();
                    if (!t) return;
                    const n = `\`\`\`${t}\ncode here...\n\`\`\``;
                    this._getLineCh(e) ? this._replaceSelection(e, "\n\n" + n) : this._replaceSelection(e, n), e.focus(), sessionStorage.setItem("selectType", t)
                }
            })
        }
        handleTask(e, t) {
            const n = t ? "{x}" : "{ }";
            this._replaceSelection(e, ` ${n} `), e.focus()
        }
        handleNetease(e, t) {
            this._openModal({
                title: t ? "网易云歌单" : "网易云单首",
                innerHtml: `\n\t\t\t\t<div class="fitem">\n\t\t\t\t\t<label>歌${t?"单":"曲"}　ID</label>\n\t\t\t\t\t<input autocomplete="off" name="id" placeholder="请输入歌${t?"单":"曲"}ID"/>\n\t\t\t\t</div>\n\t\t\t\t<div class="fitem">\n\t\t\t\t\t<label>主题色彩</label>\n\t\t\t\t\t<input style="width: 44px;padding: 0 2px;flex: none" autocomplete="off" value="#1989fa" name="color" type="color"/>\n\t\t\t\t</div>\n\t\t\t\t<div class="fitem">\n\t\t\t\t\t<label>自动播放</label>\n\t\t\t\t\t<select name="autoplay">\n\t\t\t\t\t\t<option value="1" selected>是</option>\n\t\t\t\t\t\t<option value="0">否</option>\n\t\t\t\t\t</select>\n\t\t\t\t</div>\n            `,
                confirm: () => {
                    const n = $(".cm-modal input[name='id']").val(),
                        r = $(".cm-modal input[name='color']").val(),
                        i = $(".cm-modal select[name='autoplay']").val(),
                        a = `\n{${t?'music-list':'music'} id='${n}' color='${r}' ${'1'===i?"autoplay='autoplay'":''}/}\n\n`;
                    this._getLineCh(e) ? this._replaceSelection(e, "\n" + a) : this._replaceSelection(e, a), e.focus()
                }
            })
        }
        handleBilibili(e) {
            this._openModal({
                title: "BiliBili视频",
                innerHtml: '\n\t\t\t\t<div class="fitem">\n\t\t\t\t\t<label>视频Bvid</label>\n\t\t\t\t\t<input autocomplete="off" name="bvid" placeholder="请输入视频Bvid"/>\n\t\t\t\t</div>\n\t\t\t\t<div class="fitem">\n\t\t\t\t\t<label>视频选集</label>\n\t\t\t\t\t<input autocomplete="off" name="page" placeholder="请输入视频选集"/>\n\t\t\t\t</div>\n            ',
                confirm: () => {
                    const t = `\n{bilibili bvid='${$('.cm-modal input[name="bvid"]').val()}' page='${$('.cm-modal input[name="page"]').val()}'/}\n\n`;
                    this._getLineCh(e) ? this._replaceSelection(e, "\n" + t) : this._replaceSelection(e, t), e.focus()
                }
            })
        }
        handleDplayer(e) {
            this._openModal({//<textarea placeholder="请输入简短介绍" name="shangpin_content"></textarea>
                title: "插入视频",
                innerHtml: '\n\t\t\t\t<div class="fitem">\n\t\t\t\t\t<textarea autocomplete="off" id="bendspdiz" name="src" placeholder="第一集$视频地址 一行一个"/></textarea>\n\t\t\t\t</div>\n            ',
                confirm: () => {
                    const t = `\n{qylayer}\n${$('.cm-modal textarea[name="src"]').val()}\n{/qylayer}\n`;
                    this._getLineCh(e) ? this._replaceSelection(e, "\n" + t) : this._replaceSelection(e, t), e.focus()
                }
            })
        }
		handleQydown() {
            $("#fmtscup2").click()
        }
        handleDraft() {
            $("#btn-save").click()
        }
        handleExpression(e) {
            $.ajax({
                url: window.JoeConfig.expressionAPI,
                dataType: "json",
                success: t => {
                    let n = "",
                        r = "";
                    for (let e in t) {
                        const i = t[e];
                        n += `<div class="tabbar-item ${"泡泡"===e?"active":""}" data-show="${e}">${e}</div>`, r += `<div class="lists ${"泡泡"===e?"active":""}" data-show="${e}">${i.map((t=>`<div class="lists-item" data-text="${t.data}">${"颜文字"===e?t.icon:`<img src="${window.JoeConfig.themeURL+t.icon}">`}</div>`)).join(" ")}</div>`
                    }
                    this._openModal({
                        title: "普通表情",
                        hasFooter: !1,
                        innerHtml: `<div class="tabbar">${n}</div>${r}`,
                        handler: () => {
                            $(".cm-modal__wrapper-bodyer .tabbar-item").on("click", (function() {
                                const e = $(this).attr("data-show");
                                $(this).addClass("active").siblings().removeClass("active"), $(".cm-modal__wrapper-bodyer .lists").removeClass("active"), $(".cm-modal__wrapper-bodyer .lists[data-show='" + e + "']").addClass("active")
                            }));
                            const t = this;
                            $(".cm-modal__wrapper-bodyer .lists-item").on("click", (function() {
                                const n = $(this).attr("data-text");
                                t._replaceSelection(e, ` ${n} `), $(".cm-modal").removeClass("active"), e.focus()
                            }))
                        }
                    })
                }
            })
        }
        handleMtitle(e) {
            this._openModal({
                title: "居中标题",
                innerHtml: '\n\t\t\t\t<div class="fitem">\n\t\t\t\t\t<label>标题内容</label>\n\t\t\t\t\t<input autocomplete="off" maxlength="10" name="text" placeholder="请输入标题内容（10字以内）"/>\n\t\t\t\t</div>\n            ',
                confirm: () => {
                    const t = `\n{mtitle title='${$('.cm-modal input[name="text"]').val()}'/}\n\n`;
                    this._getLineCh(e) ? this._replaceSelection(e, "\n" + t) : this._replaceSelection(e, t), e.focus()
                }
            })
        }
        handleHtml(e) {
            const t = (this._getLineCh(e) ? "\n" : "") + '!!!\n<p align="center">居中</p>\n<p align="right">居右</p>\n<font size="5" color="red">颜色大小</font>\n!!!\n';
            this._replaceSelection(e, t), e.focus()
        }
        handleHide(e) {
            const t = (this._getLineCh(e) ? "\n\n" : "\n") + "{hide}\n需要隐藏的内容111\n{/hide}\n\n";
            this._replaceSelection(e, t), e.focus()
        }
		handleVip(e) {
            const t = (this._getLineCh(e) ? "\n\n" : "\n") + "{vip}\n会员可见的内容\n{/vip}\n\n";
            this._replaceSelection(e, t), e.focus()
        }
		handleMonyi(e) {
            this._openModal({
                title: "付费可见",
                innerHtml: '\n\t\t\t\t<div class="fitem">\n\t\t\t\t\t<label>内容价格</label>\n\t\t\t\t\t<input autocomplete="off" name="src" placeholder="￥"/>\n\t\t\t\t</div>\n            ',
                confirm: () => {
                    const t = `\n{pay money=${$(".cm-modal input[name='src']").val()}}\n在此输入付费可见内容\n{/pay}\n\n`;
                    this._getLineCh(e) ? this._replaceSelection(e, "\n" + t) : this._replaceSelection(e, t), e.focus()
                }
            })
        }
		handlePoint(e) {
            this._openModal({
                title: "积分商品",
                innerHtml: '\n\t\t\t\t<div class="fitem">\n\t\t\t\t\t<label>所需积分</label>\n\t\t\t\t\t<input autocomplete="off" name="src" placeholder="￥"/>\n\t\t\t\t</div>\n            ',
                confirm: () => {
                    const t = `\n{point money=${$(".cm-modal input[name='src']").val()}}\n在此输入付费可见内容\n{/point}\n\n`;
                    this._getLineCh(e) ? this._replaceSelection(e, "\n" + t) : this._replaceSelection(e, t), e.focus()
                }
            })
        }
        handleAbtn(e) {
            this._openModal({
                title: "多彩按钮",
                innerHtml: '\n\t\t\t\t<div class="fitem">\n\t\t\t\t\t<label>按钮图标</label>\n\t\t\t\t\t<input autocomplete="off" name="icon" placeholder="请输入fa图标，例：fa-download"/>\n\t\t\t\t</div>\n\t\t\t\t<div class="fitem">\n\t\t\t\t\t<label>图标大全</label>\n\t\t\t\t\t<a href="https://fontawesome.dashgame.com" target="_blank">fontawesome.dashgame.com</a>\n\t\t\t\t</div>\n\t\t\t\t<div class="fitem">\n\t\t\t\t\t<label>按钮颜色</label>\n\t\t\t\t\t<input style="width: 44px;padding: 0 2px;flex: none" autocomplete="off" value="#ff6800" name="color" type="color"/>\n\t\t\t\t</div>\n\t\t\t\t<div class="fitem">\n\t\t\t\t\t<label>跳转链接</label>\n\t\t\t\t\t<input autocomplete="off" name="href" placeholder="请输入跳转链接"/>\n\t\t\t\t</div>\n\t\t\t\t<div class="fitem">\n\t\t\t\t\t<label>按钮圆角</label>\n\t\t\t\t\t<input autocomplete="off" name="radius" placeholder="请输入按钮圆角，例：17.5px"/>\n\t\t\t\t</div>\n\t\t\t\t<div class="fitem">\n\t\t\t\t\t<label>按钮内容</label>\n\t\t\t\t\t<input autocomplete="off" name="content" placeholder="请输入按钮内容"/>\n\t\t\t\t</div>\n            ',
                confirm: () => {
                    const t = ` {abtn icon='${$('.cm-modal input[name="icon"]').val()}' color='${$('.cm-modal input[name="color"]').val()}' href='${$('.cm-modal input[name="href"]').val()}' radius='${$('.cm-modal input[name="radius"]').val()}' content='${$('.cm-modal input[name="content"]').val()}'/} `;
                    this._replaceSelection(e, t), e.focus()
                }
            })
        }
        handleAnote(e) {
            this._openModal({
                title: "便条按钮",
                innerHtml: '\n\t\t\t\t<div class="fitem">\n\t\t\t\t\t<label>按钮图标</label>\n\t\t\t\t\t<input autocomplete="off" name="icon" placeholder="请输入fa图标，例：fa-download"/>\n\t\t\t\t</div>\n\t\t\t\t<div class="fitem">\n\t\t\t\t\t<label>图标大全</label>\n\t\t\t\t\t<a href="https://fontawesome.dashgame.com" target="_blank">fontawesome.dashgame.com</a>\n\t\t\t\t</div>\n\t\t\t\t<div class="fitem">\n\t\t\t\t\t<label>跳转链接</label>\n\t\t\t\t\t<input autocomplete="off" name="href" placeholder="请输入跳转链接"/>\n\t\t\t\t</div>\n\t\t\t\t<div class="fitem">\n\t\t\t\t\t<label>按钮类型</label>\n\t\t\t\t\t<select name="type">\n\t\t\t\t\t\t<option value="secondary" selected>secondary</option>\n\t\t\t\t\t\t<option value="success">success</option>\n\t\t\t\t\t\t<option value="warning">warning</option>\n\t\t\t\t\t\t<option value="error">error</option>\n\t\t\t\t\t\t<option value="info">info</option>\n\t\t\t\t\t</select>\n\t\t\t\t</div>\n\t\t\t\t<div class="fitem">\n\t\t\t\t\t<label>按钮内容</label>\n\t\t\t\t\t<input autocomplete="off" name="content" placeholder="请输入按钮内容"/>\n\t\t\t\t</div>\n            ',
                confirm: () => {
                    const t = ` {anote icon='${$('.cm-modal input[name="icon"]').val()}' href='${$('.cm-modal input[name="href"]').val()}' type='${$('.cm-modal select[name="type"]').val()}' content='${$('.cm-modal input[name="content"]').val()}'/} `;
                    this._replaceSelection(e, t), e.focus()
                }
            })
        }
        handleDotted(e) {
            this._openModal({
                title: "彩色虚线",
                innerHtml: '\n\t\t\t\t<div class="fitem">\n\t\t\t\t\t<label>开始颜色</label>\n\t\t\t\t\t<input style="width: 44px;padding: 0 2px;flex: none" autocomplete="off" value="#ff6c6c" name="startColor" type="color"/>\n\t\t\t\t</div>\n\t\t\t\t<div class="fitem">\n\t\t\t\t\t<label>结束颜色</label>\n\t\t\t\t\t<input style="width: 44px;padding: 0 2px;flex: none" autocomplete="off" value="#1989fa" name="endColor" type="color"/>\n\t\t\t\t</div>\n            ',
                confirm: () => {
                    const t = `\n{dotted startColor='${$('.cm-modal input[name="startColor"]').val()}' endColor='${$('.cm-modal input[name="endColor"]').val()}"/}\n\n`;
                    this._getLineCh(e) ? this._replaceSelection(e, "\n" + t) : this._replaceSelection(e, t), e.focus()
                }
            })
        }
        handleCardDefault(e) {
            this._openModal({
                title: "默认卡片",
                innerHtml: '\n\t\t\t\t<div class="fitem">\n\t\t\t\t\t<label>卡片标题</label>\n\t\t\t\t\t<input autocomplete="off" name="label" placeholder="请输入卡片标题"/>\n\t\t\t\t</div>\n\t\t\t\t<div class="fitem">\n\t\t\t\t\t<label>卡片宽度</label>\n\t\t\t\t\t<input autocomplete="off" name="width" placeholder="请输入卡片宽度，例如：100%"/>\n\t\t\t\t</div>\n            ',
                confirm: () => {
                    const t = `\n{card-default label='${$('.cm-modal input[name="label"]').val()}' width='${$('.cm-modal input[name="width"]').val()}'}\n卡片内容\n{/card-default}\n\n`;
                    this._getLineCh(e) ? this._replaceSelection(e, "\n" + t) : this._replaceSelection(e, t), e.focus()
                }
            })
        }
        handleProgress(e) {
            this._openModal({
                title: "进度条",
                innerHtml: '\n\t\t\t\t<div class="fitem">\n\t\t\t\t\t<label>百分比数</label>\n\t\t\t\t\t<input autocomplete="off" name="percentage" placeholder="请输入百分比（最大100%）"/>\n\t\t\t\t</div>\n\t\t\t\t<div class="fitem">\n\t\t\t\t\t<label>自定义色</label>\n\t\t\t\t\t<input style="width: 44px;padding: 0 2px;flex: none" autocomplete="off" value="#ff6c6c" name="color" type="color"/>\n\t\t\t\t</div>\n            ',
                confirm: () => {
                    const t = `\n{progress percentage='${$('.cm-modal input[name="percentage"]').val()}' color='${$('.cm-modal input[name="color"]').val()}'/}\n\n`;
                    this._getLineCh(e) ? this._replaceSelection(e, "\n" + t) : this._replaceSelection(e, t), e.focus()
                }
            })
        }
        handleCallout(e) {
            this._openModal({
                title: "插入标注",
                innerHtml: '\n\t\t\t\t<div class="fitem">\n\t\t\t\t\t<label>边框颜色</label>\n\t\t\t\t\t<input style="width: 44px;padding: 0 2px;flex: none" autocomplete="off" value="#f0ad4e" name="color" type="color"/>\n\t\t\t\t</div>\n            ',
                confirm: () => {
                    const t = `\n{callout color='${$('.cm-modal input[name="color"]').val()}'}\n标注内容\n{/callout}\n\n`;
                    this._getLineCh(e) ? this._replaceSelection(e, "\n" + t) : this._replaceSelection(e, t), e.focus()
                }
            })
        }
        handleMp3(e) {
            this._openModal({
                title: "插入音乐",
                innerHtml: '\n\t\t\t\t<div class="fitem">\n\t\t\t\t\t<label>音频名称</label>\n\t\t\t\t\t<input autocomplete="off" name="name" placeholder="请输入音频名称"/>\n\t\t\t\t</div>\n\t\t\t\t<div class="fitem">\n\t\t\t\t\t<label>音频地址</label>\n\t\t\t\t\t<input autocomplete="off" name="url" placeholder="请输入音频地址"/>\n\t\t\t\t</div>\n\t\t\t\t<div class="fitem">\n\t\t\t\t\t<label>音频封面</label>\n\t\t\t\t\t<input autocomplete="off" name="cover" placeholder="请输入图片地址"/>\n\t\t\t\t</div>\n\t\t\t\t<div class="fitem">\n\t\t\t\t\t<label>主题色彩</label>\n\t\t\t\t\t<input style="width: 44px;padding: 0 2px;flex: none" autocomplete="off" value="#f0ad4e" name="theme" type="color"/>\n\t\t\t\t</div>\n\t\t\t\t<div class="fitem">\n\t\t\t\t\t<label>自动播放</label>\n\t\t\t\t\t<select name="autoplay">\n\t\t\t\t\t\t<option value="1" selected>是</option>\n\t\t\t\t\t\t<option value="0">否</option>\n\t\t\t\t\t</select>\n\t\t\t\t</div>\n            ',
                confirm: () => {
                    const t = `\n{mp3 name='${$(".cm-modal input[name='name']").val()}' url='${$(".cm-modal input[name='url']").val()}' cover='${$(".cm-modal input[name='cover']").val()}' theme='${$(".cm-modal input[name='theme']").val()}' ${"1"===$(".cm-modal select[name='autoplay']").val()?"autoplay='1autoplay2'":''}/}\n\n`;
                    this._getLineCh(e) ? this._replaceSelection(e, "\n" + t) : this._replaceSelection(e, t), e.focus()
                }
            })
        }
        handleTabs(e) {
            const t = (this._getLineCh(e) ? "\n\n" : "\n") + '{tabs}\n{tabs-pane label="标签一"}\n 标签一内容\n{/tabs-pane}\n{tabs-pane label="标签二"}\n 标签二内容\n{/tabs-pane}\n{/tabs}\n\n';
            this._replaceSelection(e, t), e.focus()
        }
        handleCardList(e) {
            const t = (this._getLineCh(e) ? "\n\n" : "\n") + "{card-list}\n{card-list-item}\n 列表一内容\n{/card-list-item}\n{card-list-item}\n 列表二内容\n{/card-list-item}\n{/card-list}\n\n";
            this._replaceSelection(e, t), e.focus()
        }
        handleTimeline(e) {
            const t = (this._getLineCh(e) ? "\n\n" : "\n") + '{timeline}\n{timeline-item color="#19be6b"}\n 正式上线\n{/timeline-item}\n{timeline-item color="#ed4014"}\n 删库跑路\n{/timeline-item}\n{/timeline}\n\n';
            this._replaceSelection(e, t), e.focus()
        }
        handleCardDescribe(e) {
            const t = (this._getLineCh(e) ? "\n\n" : "\n") + "{card-describe title='卡片描述'}\n卡片内容\n{/card-describe}\n\n";
            this._replaceSelection(e, t), e.focus()
        }
        handleLamp(e) {
            const t = (this._getLineCh(e) ? "\n\n" : "\n") + "{lamp/}\n\n";
            this._replaceSelection(e, t), e.focus()
        }
        handleCollapse(e) {
            const t = (this._getLineCh(e) ? "\n\n" : "\n") + '{collapse}\n{collapse-item label="折叠标题一" open}\n 折叠内容一\n{/collapse-item}\n{collapse-item label="折叠标题二"}\n 折叠内容二\n{/collapse-item}\n{/collapse}\n\n';
            this._replaceSelection(e, t), e.focus()
        }
        handleAlert(e) {
            this._openModal({
                title: "警告提示",
                innerHtml: '\n\t\t\t\t<div class="fitem">\n\t\t\t\t\t<label>提示类型</label>\n\t\t\t\t\t<select name="type">\n\t\t\t\t\t\t<option value="info" selected>info</option>\n\t\t\t\t\t\t<option value="success">success</option>\n\t\t\t\t\t\t<option value="warning">warning</option>\n\t\t\t\t\t\t<option value="error">error</option>\n\t\t\t\t\t</select>\n\t\t\t\t</div>\n            ',
                confirm: () => {
                    const t = `\n{alert type="${$(".cm-modal select[name='type']").val()}"}\n警告提示\n{/alert}\n\n`;
                    this._getLineCh(e) ? this._replaceSelection(e, "\n" + t) : this._replaceSelection(e, t), e.focus()
                }
            })
        }
        handleCloud(e) {
            this._openModal({
                title: "网盘下载",
                innerHtml: '\n\t\t\t\t<div class="fitem">\n\t\t\t\t\t<label>网盘类型</label>\n\t\t\t\t\t<select name="type">\n\t\t\t\t\t\t<option value="default" selected>默认网盘</option>\n\t\t\t\t\t\t<option value="360">360网盘</option>\n\t\t\t\t\t\t<option value="bd">百度网盘</option>\n\t\t\t\t\t\t<option value="ty">天翼网盘</option>\n\t\t\t\t\t\t<option value="ct">城通网盘</option>\n\t\t\t\t\t\t<option value="wy">微云网盘</option>\n\t\t\t\t\t\t<option value="github">Github仓库</option>\n\t\t\t\t\t\t<option value="lz">蓝奏云网盘</option>\n\t\t\t\t\t</select>\n\t\t\t\t</div>\n\t\t\t\t<div class="fitem">\n\t\t\t\t\t<label>显示标题</label>\n\t\t\t\t\t<input autocomplete="off" name="title" placeholder="请输入显示标题"/>\n\t\t\t\t</div>\n\t\t\t\t<div class="fitem">\n\t\t\t\t\t<label>下载地址</label>\n\t\t\t\t\t<input autocomplete="off" name="url" placeholder="请输入网盘地址"/>\n\t\t\t\t</div>\n\t\t\t\t<div class="fitem">\n\t\t\t\t\t<label>提取密码</label>\n\t\t\t\t\t<input autocomplete="off" name="password" placeholder="请输入提取码（非必填）"/>\n\t\t\t\t</div>\n            ',
                confirm: () => {
                    const t = $(".cm-modal select[name='type']").val(),
                        n = `\n{cloud title='${$('.cm-modal input[name="title"]').val()}' type='${t}' url='${$('.cm-modal input[name="url"]').val()}' password='${$('.cm-modal input[name="password"]').val()}'/}\n\n`;
                    this._getLineCh(e) ? this._replaceSelection(e, "\n" + n) : this._replaceSelection(e, n), e.focus()
                }
            })
        }
    } {
        constructor() {
            super(), this.plugins = [Ts.define([{
                tag: Fs.punctuation,
                color: "#808080"
            }, {
                tag: Fs.name,
                color: "#d19a66"
            }, {
                tag: Fs.propertyName,
                color: "#96c0d8"
            }, {
                tag: Fs.string,
                color: "#98c379"
            }, {
                tag: Fs.keyword,
                color: "#c678dd"
            }, {
                tag: Fs.operator,
                color: "#96c0d8"
            }, {
                tag: Fs.variableName,
                color: "#e06c75"
            }, {
                tag: Fs.number,
                color: "#d19a66"
            }, {
                tag: Fs.comment,
                color: "#5C6370"
            }, {
                tag: Fs.processingInstruction,
                color: "#abb2bf"
            }, {
                tag: Fs.labelName,
                color: "#abb2bf"
            }, {
                tag: Fs.definition(Fs.propertyName),
                color: "#e06c75"
            }, {
                tag: Fs.definition(Fs.variableName),
                color: "#e5c07b"
            }, {
                tag: Fs.local(Fs.variableName),
                color: "#d19a66"
            }, {
                tag: Fs.atom,
                color: "#d19a66"
            }, {
                tag: Fs.meta,
                color: "#abb2bf"
            }, {
                tag: Fs.strong,
                color: "#61afef",
                fontWeight: "500"
            }, {
                tag: Fs.emphasis,
                color: "#b294bb",
                fontStyle: "italic",
                fontFamily: "Helvetica Neue, Helvetica, PingFang SC, Hiragino Sans GB, Microsoft YaHei, 微软雅黑, Arial, sans-serif"
            }, {
                tag: Fs.strikethrough,
                color: "#ed6a43",
                textDecoration: "line-through"
            }, {
                tag: Fs.link,
                color: "#e26666"
            }, {
                tag: Fs.url,
                color: "#5fa76f"
            }, {
                tag: Fs.heading1,
                color: "#e06c75",
                fontSize: "18px",
                fontWeight: "700"
            }, {
                tag: Fs.heading2,
                color: "#e06c75",
                fontSize: "18px",
                fontWeight: "700"
            }, {
                tag: Fs.heading3,
                color: "#e06c75",
                fontSize: "18px",
                fontWeight: "700"
            }, {
                tag: Fs.heading4,
                color: "#e06c75",
                fontSize: "18px",
                fontWeight: "700"
            }, {
                tag: Fs.heading5,
                color: "#e06c75",
                fontSize: "18px",
                fontWeight: "700"
            }, {
                tag: Fs.heading6,
                color: "#e06c75",
                fontSize: "18px",
                fontWeight: "700"
            }]), rs(), za(), [di.inputHandler.of(Na), Aa], vi], this.keymaps = [{
                key: "Tab",
                run: ({
                    state: e,
                    dispatch: t
                }) => e.selection.ranges.some((e => !e.empty)) ? Bo({
                    state: e,
                    dispatch: t
                }) : (t(e.update(e.replaceSelection("  "))), !0),
                shift: Fo
            }], this._isPasting = !1, this.init_ViewPort(), this.init_Editor(), this.init_Preview(), this.init_Tools(), this.init_Insert(), this.init_AutoSave()
        }
        init_ViewPort() {
            $('meta[name="viewport"]').length > 0 ? $('meta[name="viewport"]').attr("content", "width=device-width, user-scalable=no, initial-scale=1.0, shrink-to-fit=no, viewport-fit=cover") : $("head").append('<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, shrink-to-fit=no, viewport-fit=cover">')
        }
        init_Editor() {
            $("#text").before('\n            <div class="cm-container">\n                <div class="cm-tools"></div>\n                <div class="cm-mainer">\n                    <div class="cm-resize"></div>\n                    <div class="cm-preview"><div class="cm-preview-content"></div></div>\n\t\t\t\t\t<div class="cm-autosave"></div>\n                </div>\n                <div class="cm-progress-left"></div>\n                <div class="cm-progress-right"></div>\n            </div>\n        '), nd(null);
            let e = null,
                t = null;
            const n = new di({
                state: xe.create({
                    doc: $("#text").val(),
                    extensions: [...this.plugins, Mu({
                        base: ju,
                        codeLanguages: Ju
                    }), Pi.of([...this.keymaps, ...Da, ...Ho, ...Qs]), di.updateListener.of((n => {
                        n.docChanged && e !== n.state.doc.toString() && (e = n.state.doc.toString(), clearTimeout(t), t = setTimeout(nd.bind(null, n.state.doc.toString()), 350))
                    })), di.domEventHandlers({
                        paste: e => {
                            const t = e.clipboardData;
                            if (!t || !t.items) return;
                            const r = t.items;
                            if (!r.length) return;
                            let i = null;
                            for (let t = 0; t < r.length; t++)
                                if (-1 !== r[t].type.indexOf("image")) {
                                    e.preventDefault(), i = r[t].getAsFile();
                                    break
                                }
                            if (!i) return;
                            let a = window.JoeConfig.uploadAPI;
                            if (!a) return;
                            const o = $('input[name="cid"]').val();
                            if (o && (a = a + "&cid=" + o), this._isPasting) return;
                            this._isPasting = !0;
                            const s = Date.now().toString(36) + ".png";
                            let O = new FormData;
                            O.append("name", s), O.append("file", i, s), $.ajax({
                                url: a,
                                method: "post",
                                data: O,
                                contentType: !1,
                                processData: !1,
                                dataType: "json",
                                xhr: () => {
                                    const e = $.ajaxSettings.xhr();
                                    if (e.upload) return e.upload.addEventListener("progress", (e => {
                                        let t = e.loaded / e.total * 100;
                                        $(".cm-progress-left").width(t / 2 + "%"), $(".cm-progress-right").width(t / 2 + "%")
                                    }), !1), e
                                },
                                success: e => {
                                    $(".cm-progress-left").width(0), $(".cm-progress-right").width(0), this._isPasting = !1;
                                    const t = `${super._getLineCh(n)?"\n":""}![${e[1].title}](${e[0]})\n`;
                                    super._replaceSelection(n, t), n.focus()
                                },
                                error: () => {
                                    $(".cm-progress-left").width(0), $(".cm-progress-right").width(0), this._isPasting = !1
                                }
                            })
                        },
                        scroll: e => {
                            window.JoeConfig.canPreview && e && e.target && "cm-scroller" === e.target.className && (window.requestAnimationFrame ? window.requestAnimationFrame((() => super._updateScroller(e.target, document.querySelector(".cm-preview")))) : super._updateScroller(e.target, document.querySelector(".cm-preview")))
                        }
                    })]
                })
            });
            window.global_editor = n;
            $(".cm-mainer").prepend(n.dom), $("#text")[0].form && $("#text")[0].form.addEventListener("submit", (() => $("#text").val(n.state.doc.toString()))), this.cm = n
        }
        init_Preview() {
            const e = (e, t, n) => {
                let r = t + (e - n);
                r <= 0 && (r = 0), r >= $(".cm-mainer").outerWidth() - 16 && (r = $(".cm-mainer").outerWidth() - 16), $(".cm-preview").width(r)
            };
            $(".cm-resize").on({
                mousedown: t => {
                    t.preventDefault(), t.stopPropagation();
                    const n = $(".cm-preview").outerWidth(),
                        r = t.clientX;
                    return $(".cm-preview").addClass("move"), document.onmousemove = t => {
                        window.requestAnimationFrame ? requestAnimationFrame((() => e(r, n, t.clientX))) : e(r, n, t.clientX)
                    }, document.onmouseup = () => {
                        document.onmousemove = null, document.onmouseup = null, $(".cm-preview").removeClass("move")
                    }, !1
                },
                touchstart: t => {
                    t.preventDefault(), t.stopPropagation();
                    const n = $(".cm-preview").outerWidth(),
                        r = t.originalEvent.targetTouches[0].clientX;
                    return $(".cm-preview").addClass("move"), document.ontouchmove = t => {
                        window.requestAnimationFrame ? requestAnimationFrame((() => e(r, n, t.targetTouches[0].clientX))) : e(r, n, t.targetTouches[0].clientX)
                    }, document.ontouchend = () => {
                        document.ontouchmove = null, document.ontouchend = null, $(".cm-preview").removeClass("move")
                    }, !1
                }
            })
        }
        init_Tools() {
            Ku.forEach((e => {
                if ("title" === e.type) super.handleTitle(this.cm, e);
                else {
                    const t = $(`<div class="cm-tools-item" title="${e.title}">${e.innerHTML}</div>`);
                    t.on("click", (n => {
                        switch (n.preventDefault(), e.type) {
                            case "fullScreen":
                                super.handleFullScreen(t);
                                break;
                            case "publish":
                                super.handlePublish();
                                break;
                            case "undo":
                                super.handleUndo(this.cm);
                                break;
                            case "redo":
                                super.handleRedo(this.cm);
                                break;
                            case "time":
                                super.handleTime(this.cm);
                                break;
                            case "bold":
                                super._insetAmboText(this.cm, "**");
                                break;
                            case "italic":
                                super._insetAmboText(this.cm, "*");
                                break;
                            case "delete":
                                super._insetAmboText(this.cm, "~~");
                                break;
                            case "code-inline":
                                super._insetAmboText(this.cm, "`");
                                break;
                            case "indent":
                                super.handleIndent(this.cm);
                                break;
                            case "hr":
                                super.handleHr(this.cm);
                                break;
                            case "clean":
                                super.handleClean(this.cm);
                                break;
                            case "ordered-list":
                                super.handleOrdered(this.cm);
                                break;
                            case "unordered-list":
                                super.handleUnordered(this.cm);
                                break;
                            case "quote":
                                super.handleQuote(this.cm);
                                break;
                            case "download":
                                super.handleDownload(this.cm);
                                break;
                            case "link":
                                super.handleLink(this.cm);
                                break;
                            case "image":
                                super.handleImage(this.cm);
                                break;
                            case "table":
                                super.handleTable(this.cm);
                                break;
                            case "code-block":
                                super.handleCodeBlock(this.cm);
                                break;
                            case "about":
                                super.handleAbout();
                                break;
                            case "character":
                                super._createTableLists(this.cm, JoeConfig.characterAPI, "星星符号", "字符大全");
                                break;
                            case "emoji":
                                super._createTableLists(this.cm, JoeConfig.emojiAPI, "表情", "符号表情（需数据库支持）");
                                break;
                            case "task-no":
                                super.handleTask(this.cm, !1);
                                break;
                            case "task-yes":
                                super.handleTask(this.cm, !0);
                                break;
                            case "netease-list":
                                super.handleNetease(this.cm, !0);
                                break;
                            case "netease-single":
                                super.handleNetease(this.cm, !1);
                                break;
                            case "bilibili":
                                super.handleBilibili(this.cm);
                                break;
                            case "dplayer":
                                super.handleDplayer(this.cm);
                                break;
                            case "qydown":
                                super.handleQydown(this.cm);
                                break;
                            case "draft":
                                super.handleDraft();
                                break;
                            case "expression":
                                super.handleExpression(this.cm);
                                break;
                            case "mtitle":
                                super.handleMtitle(this.cm);
                                break;
                            case "html":
                                super.handleHtml(this.cm);
                                break;
                            case "abtn":
                                super.handleAbtn(this.cm);
                                break;
                            case "anote":
                                super.handleAnote(this.cm);
                                break;
                            case "dotted":
                                super.handleDotted(this.cm);
                                break;
                            case "hide":
                                super.handleHide(this.cm);
                                break;
                            case "card-default":
                                super.handleCardDefault(this.cm);
                                break;
                            case "progress":
                                super.handleProgress(this.cm);
                                break;
                            case "callout":
                                super.handleCallout(this.cm);
                                break;
                            case "mp3":
                                super.handleMp3(this.cm);
                                break;
                            case "tabs":
                                super.handleTabs(this.cm);
                                break;
                            case "card-list":
                                super.handleCardList(this.cm);
                                break;
                            case "timeline":
                                super.handleTimeline(this.cm);
                                break;
                            case "card-describe":
                                super.handleCardDescribe(this.cm);
                                break;
                            case "lamp":
                                super.handleLamp(this.cm);
                                break;
                            case "collapse":
                                super.handleCollapse(this.cm);
                                break;
                            case "cloud":
                                super.handleCloud(this.cm);
                                break;
                            case "gird":
                                super.handleGird(this.cm);
                                break;
                            case "alert":
                                super.handleAlert(this.cm);
                                break;
							case "uservip":
                                super.handleVip(this.cm);
                                break;
							case "usermonyi":
                                super.handleMonyi(this.cm);
                                break;
							case "userpoint":
                                super.handlePoint(this.cm);
                                break;
                            case "preview":
                                t.toggleClass("active"), t.hasClass("active") ? window.JoeConfig.canPreview = !0 : window.JoeConfig.canPreview = !1, nd(this.cm.state.doc.toString()), window.JoeConfig.canPreview && super._updateScroller(document.querySelector(".cm-scroller"), document.querySelector(".cm-preview"))
                        }
                    })), $(".cm-tools").append(t)
                }
            }))
        }
        init_Insert() {
            Typecho.insertFileToEditor = (e, t, n) => {
                const r = `${super._getLineCh(this.cm)?"\n":""}${n?"!":""}[${e}](${t})\n`;
                super._replaceSelection(this.cm, r), this.cm.focus()
            }
        }
        init_AutoSave() {
            if (1 !== window.JoeConfig.autoSave) return;
            const e = $("#text")[0].form;
            let t = $(e).find('input[name="cid"]').val(),
                n = null,
                r = $(e).find('input[name="title"]').val(),
                i = $(e).find('textarea[name="text"]').val();
            setInterval((() => {
                $(e).find('input[name="cid"]').val(t), $(e).find('textarea[name="text"]').val(this.cm.state.doc.toString());
                let a = $(e).find('input[name="title"]').val(),
                    o = $(e).find('textarea[name="text"]').val();
                "" !== a.trim() && (r === a && i === o || (r = a, i = o, $(".cm-autosave").addClass("active"), $.ajax({
                    url: e.action,
                    type: "POST",
                    data: $(e).serialize() + "&do=save",
                    dataType: "json",
                    success: e => {
                        t = e.cid, n = setTimeout((() => {
                            $(".cm-autosave").removeClass("active"), clearTimeout(n)
                        }), 1e3)
                    }
                })))
            }), 5e3)
        }
    }

    function id(e, t, n, r = 0, i = 0) {
        return null == t && -1 == (t = e.search(/[^\s\u00a0]/)) && (t = e.length), c(e.slice(r, t), i, n)
    }
    document.addEventListener("DOMContentLoaded", (() => new rd));
    class ad {
        constructor(e, t, n) {
            this.string = e, this.tabSize = t, this.indentUnit = n, this.pos = 0, this.start = 0, this.lastColumnPos = 0, this.lastColumnValue = 0
        }
        eol() {
            return this.pos >= this.string.length
        }
        sol() {
            return 0 == this.pos
        }
        peek() {
            return this.string.charAt(this.pos) || void 0
        }
        next() {
            if (this.pos < this.string.length) return this.string.charAt(this.pos++)
        }
        eat(e) {
            let t, n = this.string.charAt(this.pos);
            if (t = "string" == typeof e ? n == e : n && (e instanceof RegExp ? e.test(n) : e(n)), t) return ++this.pos, n
        }
        eatWhile(e) {
            let t = this.pos;
            for (; this.eat(e););
            return this.pos > t
        }
        eatSpace() {
            let e = this.pos;
            for (;
                /[\s\u00a0]/.test(this.string.charAt(this.pos));) ++this.pos;
            return this.pos > e
        }
        skipToEnd() {
            this.pos = this.string.length
        }
        skipTo(e) {
            let t = this.string.indexOf(e, this.pos);
            if (t > -1) return this.pos = t, !0
        }
        backUp(e) {
            this.pos -= e
        }
        column() {
            return this.lastColumnPos < this.start && (this.lastColumnValue = id(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue), this.lastColumnPos = this.start), this.lastColumnValue
        }
        indentation() {
            return id(this.string, null, this.tabSize)
        }
        match(e, t, n) {
            if ("string" == typeof e) {
                let r = e => n ? e.toLowerCase() : e;
                return r(this.string.substr(this.pos, e.length)) == r(e) ? (!1 !== t && (this.pos += e.length), !0) : null
            } {
                let n = this.string.slice(this.pos).match(e);
                return n && n.index > 0 ? null : (n && !1 !== t && (this.pos += n[0].length), n)
            }
        }
        current() {
            return this.string.slice(this.start, this.pos)
        }
    }

    function od(e) {
        if ("object" != typeof e) return e;
        let t = {};
        for (let n in e) {
            let r = e[n];
            t[n] = r instanceof Array ? r.slice() : r
        }
        return t
    }
    class sd extends Ji {
        constructor(e) {
            let t = Hi(e.languageData),
                n = {
                    token: (r = e).token,
                    blankLine: r.blankLine || (() => {}),
                    startState: r.startState || (() => !0),
                    copyState: r.copyState || od,
                    indent: r.indent || (() => null),
                    languageData: r.languageData || {}
                };
            var r;
            super(t, {
                startParse: (e, t, n) => new cd(this, e, t, n)
            }, function(e) {
                let t = Wi.define({
                    id: pd.length,
                    name: "Document",
                    props: [Fi.add((() => e))]
                });
                return pd.push(t), t
            }(t), [da.of(((e, t) => this.getIndent(e, t)))]), this.streamParser = n, this.stateAfter = new WeakMap
        }
        static define(e) {
            return new sd(e)
        }
        getIndent(e, t) {
            let n = ta(e.state),
                r = n.resolve(t);
            for (; r && r.type != this.topNode;) r = r.parent;
            if (!r) return null;
            let i, a, o = Od(this, n, 0, r.from, t);
            if (o ? (a = o.state, i = o.pos + 1) : (a = this.streamParser.startState(e.unit), i = 0), t - i > 1e4) return null;
            for (; i < t;) {
                let n = e.state.doc.lineAt(i),
                    r = Math.min(t, n.to);
                if (n.length) {
                    let t = new ad(n.text, e.state.tabSize, e.unit);
                    for (; t.pos < r - n.from;) ud(this.streamParser.token, t, a)
                } else this.streamParser.blankLine(a, e.unit);
                if (r == t) break;
                i = n.to + 1
            }
            let {
                text: s
            } = e.state.doc.lineAt(t);
            return this.streamParser.indent(a, /^\s*(.*)/.exec(s)[1], e)
        }
        get allowsNesting() {
            return !1
        }
    }

    function Od(e, t, n, r, i) {
        let a = n >= r && n + t.length <= i && e.stateAfter.get(t);
        if (a) return {
            state: e.streamParser.copyState(a),
            pos: n + t.length
        };
        for (let a = t.children.length - 1; a >= 0; a--) {
            let o = t.children[a],
                s = n + t.positions[a],
                O = o instanceof Yi && s < i && Od(e, o, s, r, i);
            if (O) return O
        }
        return null
    }

    function ld(e, t, n, r, i) {
        if (i && n <= 0 && r >= t.length) return t;
        i || t.type != e.topNode || (i = !0);
        for (let a = t.children.length - 1; a >= 0; a--) {
            let o, s = t.positions[a] + n,
                O = t.children[a];
            if (s < r && O instanceof Yi) {
                if (!(o = ld(e, O, n - s, r - s, i))) break;
                return i ? new Yi(t.type, t.children.slice(0, a).concat(o), t.positions.slice(0, a + 1), s + o.length) : o
            }
        }
        return null
    }
    class cd {
        constructor(e, t, n, r) {
            this.lang = e, this.input = t, this.startPos = n, this.context = r, this.chunks = [], this.chunkPos = [], this.chunk = [];
            let {
                state: i,
                tree: a
            } = function(e, t, n, r) {
                for (let r of t) {
                    let t, i = r.from <= n && r.to > n && Od(e, r.tree, 0 - r.offset, n, r.to);
                    if (i && (t = ld(e, r.tree, n + r.offset, i.pos + r.offset, !1))) return {
                        state: i.state,
                        tree: t
                    }
                }
                return {
                    state: e.streamParser.startState(ha(r)),
                    tree: Yi.empty
                }
            }(e, r.fragments, n, r.state);
            this.state = i, this.pos = this.chunkStart = n + a.length, a.length && (this.chunks.push(a), this.chunkPos.push(0)), this.pos < r.viewport.from - 1e5 && (this.state = this.lang.streamParser.startState(ha(r.state)), r.skipUntilInView(this.pos, r.viewport.from), this.pos = r.viewport.from)
        }
        advance() {
            let e = Math.min(this.context.viewport.to, this.input.length, this.chunkStart + 2048);
            for (; this.pos < e;) this.parseLine();
            return this.chunkStart < this.pos && this.finishChunk(), e < this.input.length && this.pos < this.context.viewport.to ? null : (this.context.skipUntilInView(this.pos, this.input.length), this.finish())
        }
        parseLine() {
            let e = this.input.lineAfter(this.pos),
                {
                    streamParser: t
                } = this.lang,
                n = new ad(e, this.context ? this.context.state.tabSize : 4, ha(this.context.state));
            if (n.eol()) t.blankLine(this.state, n.indentUnit);
            else
                for (; !n.eol();) {
                    let e = ud(t.token, n, this.state);
                    e && this.chunk.push(md(e), this.pos + n.start, this.pos + n.pos, 4)
                }
            this.pos += e.length, this.pos < this.input.length && this.pos++
        }
        finishChunk() {
            let e = Yi.build({
                buffer: this.chunk,
                start: this.chunkStart,
                length: this.pos - this.chunkStart,
                nodeSet: hd,
                topID: 0,
                maxBufferLength: 2048
            });
            this.lang.stateAfter.set(e, this.lang.streamParser.copyState(this.state)), this.chunks.push(e), this.chunkPos.push(this.chunkStart - this.startPos), this.chunk = [], this.chunkStart = this.pos
        }
        finish() {
            return new Yi(this.lang.topNode, this.chunks, this.chunkPos, this.pos - this.startPos).balance()
        }
        forceFinish() {
            return this.finish()
        }
    }

    function ud(e, t, n) {
        t.start = t.pos;
        for (let r = 0; r < 10; r++) {
            let r = e(t, n);
            if (t.pos > t.start) return r
        }
        throw new Error("Stream parser failed to advance stream.")
    }
    const dd = Object.create(null),
        pd = [Wi.none],
        hd = new qi(pd),
        fd = [];

    function md(e) {
        return e ? dd[e] || (dd[e] = function(e) {
            let t = null;
            for (let n of e.split(".")) {
                let e = Fs[n];
                e ? "function" == typeof e ? t ? t = e(t) : gd(n, `Modifier ${n} used at start of tag`) : t ? gd(n, `Tag ${n} used as modifier`) : t = e : gd(n, `Unknown highlighting tag ${n}`)
            }
            if (!t) return 0;
            let n = e.replace(/ /g, "_"),
                r = Wi.define({
                    id: pd.length,
                    name: n,
                    props: [ks({
                        [n]: t
                    })]
                });
            return pd.push(r), r.id
        }(e)) : 0
    }
    for (let [e, t] of [
            ["variable", "variableName"],
            ["variable-2", "variableName.special"],
            ["string-2", "string.special"],
            ["def", "variableName.definition"],
            ["tag", "typeName"],
            ["attribute", "propertyName"],
            ["type", "typeName"],
            ["builtin", "variableName.standard"],
            ["qualifier", "modifier"],
            ["error", "invalid"],
            ["header", "heading"],
            ["property", "propertyName"]
        ]) dd[e] = md(t);

    function gd(e, t) {
        fd.indexOf(e) > -1 || fd.push(e)
    }
    var Qd = Object.freeze({
        __proto__: null,
        StreamLanguage: sd,
        StringStream: ad
    });

    function $d(e) {
        return e >= 65 && e <= 90 || e >= 97 && e <= 122 || e >= 48 && e <= 57
    }

    function bd(e) {
        return e >= 48 && e <= 57 || e >= 97 && e <= 102 || e >= 65 && e <= 70
    }

    function xd(e, t, n, r) {
        for (let i = !1;;) {
            let a = e.get(t++);
            if (a < 0) return t - 1;
            if (a == n && !i) return t;
            i = r && !i && 92 == a
        }
    }

    function Pd(e, t) {
        for (;; t++) {
            let n = e.get(t);
            if (95 != n && !$d(n)) break
        }
        return t
    }

    function wd(e, t, n) {
        let r;
        for (;; t++)
            if (r = e.get(t), 46 == r) {
                if (n) break;
                n = !0
            } else if (r < 48 || r > 57) break;
        if (69 == r || 101 == r)
            for (r = e.get(++t), 43 != r && 45 != r || t++; r = e.get(t), !(r < 48 || r > 57); t++);
        return t
    }

    function kd(e, t) {
        for (;; t++) {
            let n = e.get(t);
            if (n < 0 || 10 == n) return t
        }
    }

    function yd(e, t) {
        for (let n = 0; n < t.length; n++)
            if (t.charCodeAt(n) == e) return !0;
        return !1
    }
    const vd = " \t\r\n";

    function Sd(e, t, n) {
        let r = Object.create(null);
        r.true = r.false = 5, r.null = r.unknown = 6;
        for (let t of e.split(" ")) t && (r[t] = 20);
        for (let e of t.split(" ")) e && (r[e] = 21);
        for (let e of (n || "").split(" ")) e && (r[e] = 22);
        return r
    }
    const _d = "array binary bit boolean char character clob date decimal double float int integer interval large national nchar nclob numeric object precision real smallint time timestamp varchar varying ",
        Xd = "absolute action add after all allocate alter and any are as asc assertion at authorization before begin between blob both breadth by call cascade cascaded case cast catalog check close collate collation column commit condition connect connection constraint constraints constructor continue corresponding count create cross cube current current_date current_default_transform_group current_transform_group_for_type current_path current_role current_time current_timestamp current_user cursor cycle data day deallocate dec declare default deferrable deferred delete depth deref desc describe descriptor deterministic diagnostics disconnect distinct do domain drop dynamic each else elseif end end-exec equals escape except exception exec execute exists exit external fetch first for foreign found from free full function general get global go goto grant group grouping handle having hold hour identity if immediate in indicator initially inner inout input insert intersect into is isolation join key language last lateral leading leave left level like limit local localtime localtimestamp locator loop map match method minute modifies module month names natural nesting new next no none not of old on only open option or order ordinality out outer output overlaps pad parameter partial path prepare preserve primary prior privileges procedure public read reads recursive redo ref references referencing relative release repeat resignal restrict result return returns revoke right role rollback rollup routine row rows savepoint schema scroll search second section select session session_user set sets signal similar size some space specific specifictype sql sqlexception sqlstate sqlwarning start state static system_user table temporary then timezone_hour timezone_minute to trailing transaction translation treat trigger under undo union unique unnest until update usage user using value values view when whenever where while with without work write year zone ",
        Td = {
            backslashEscapes: !1,
            hashComments: !1,
            spaceAfterDashes: !1,
            slashComments: !1,
            doubleQuotedStrings: !1,
            charSetCasts: !1,
            operatorChars: "*+-%<>!=&|~^/",
            specialVar: "?",
            identifierQuotes: '"',
            words: Sd(Xd, _d)
        };

    function Rd(e) {
        return new Pl(((t, n) => {
            var r;
            let i = n.start,
                a = t.get(i++),
                o = t.get(i);
            if (yd(a, vd)) {
                for (; yd(t.get(i), vd);) i++;
                n.accept(34, i)
            } else if (39 == a || 34 == a && e.doubleQuotedStrings) n.accept(3, xd(t, i, a, e.backslashEscapes));
            else if (35 == a && e.hashComments || 47 == a && 47 == o && e.slashComments) n.accept(1, kd(t, i));
            else if (45 != a || 45 != o || e.spaceAfterDashes && 32 != t.get(i + 1))
                if (47 == a && 42 == o) {
                    i++;
                    for (let e = -1, n = 1;;) {
                        let r = t.get(i++);
                        if (r < 0) {
                            i--;
                            break
                        }
                        if (42 == e && 47 == r) {
                            if (n--, !n) break;
                            r = -1
                        } else 47 == e && 42 == r && (n++, r = -1);
                        e = r
                    }
                    n.accept(2, i)
                } else if (101 != a && 69 != a || 39 != o)
                if (110 != a && 78 != a || 39 != o || !e.charSetCasts)
                    if (95 == a && e.charSetCasts)
                        for (;;) {
                            let r = t.get(i++);
                            if (39 == r && i > n.start + 2) {
                                n.accept(3, xd(t, i, 39, e.backslashEscapes));
                                break
                            }
                            if (!$d(r)) break
                        } else if (40 == a) n.accept(7, i);
                        else if (41 == a) n.accept(8, i);
            else if (123 == a) n.accept(9, i);
            else if (125 == a) n.accept(10, i);
            else if (91 == a) n.accept(11, i);
            else if (93 == a) n.accept(12, i);
            else if (59 == a) n.accept(13, i);
            else if (48 == a && (98 == o || 66 == o) || (98 == a || 66 == a) && 39 == o) {
                let e = 39 == o;
                for (i++; 48 == (a = t.get(i)) || 49 == a;) i++;
                e && 39 == a && i++, n.accept(4, i)
            } else if (48 == a && (120 == o || 88 == o) || (120 == a || 88 == a) && 39 == o) {
                let e = 39 == o;
                for (i++; bd(a = t.get(i));) i++;
                e && 39 == a && i++, n.accept(4, i)
            } else if (46 == a && o >= 48 && o <= 57) n.accept(4, wd(t, i + 1, !0));
            else if (46 == a) n.accept(14, i);
            else if (a >= 48 && a <= 57) n.accept(4, wd(t, i, !1));
            else if (yd(a, e.operatorChars)) {
                for (; yd(t.get(i), e.operatorChars);) i++;
                n.accept(15, i)
            } else yd(a, e.specialVar) ? n.accept(17, function(e, t) {
                let n = e.get(t);
                return 39 == n || 34 == n || 96 == n ? xd(e, t + 1, n, !1) : Pd(e, t)
            }(t, o == a ? i + 1 : i)) : yd(a, e.identifierQuotes) ? n.accept(19, xd(t, i, a, !1)) : 58 == a || 44 == a ? n.accept(16, i) : $d(a) && (i = Pd(t, i), n.accept(null !== (r = e.words[t.read(n.start, i).toLowerCase()]) && void 0 !== r ? r : 18, i));
            else n.accept(3, xd(t, i + 1, 39, e.backslashEscapes));
            else n.accept(3, xd(t, i + 1, 39, !0));
            else n.accept(1, kd(t, i + 1))
        }))
    }
    const Wd = Rd(Td),
        qd = El.deserialize({
            version: 13,
            states: "%dQ]QQOOO#kQRO'#DQO#rQQO'#CuO%RQQO'#CvO%YQQO'#CwO%aQQO'#CxOOQQ'#DQ'#DQOOQQ'#C{'#C{O&lQRO'#CyOOQQ'#Ct'#CtOOQQ'#Cz'#CzQ]QQOOQOQQOOO&vQQO,59aO'RQQO,59aO'WQQO'#DQOOQQ,59b,59bO'eQQO,59bOOQQ,59c,59cO'lQQO,59cOOQQ,59d,59dO'sQQO,59dOOQQ-E6y-E6yOOQQ,59`,59`OOQQ-E6x-E6xOOQQ'#C|'#C|OOQQ1G.{1G.{O&vQQO1G.{OOQQ1G.|1G.|OOQQ1G.}1G.}OOQQ1G/O1G/OP'zQQO'#C{POQQ-E6z-E6zOOQQ7+$g7+$g",
            stateData: "(R~OrOSPOSQOS~ORUOSUOTUOUUOVROXSOZTO]XO^QO_UO`UOaPObPOcPOdUOeUOfUO~O^]ORtXStXTtXUtXVtXXtXZtX]tX_tX`tXatXbtXctXdtXetXftX~OqtX~P!dOa^Ob^Oc^O~ORUOSUOTUOUUOVROXSOZTO^QO_UO`UOa_Ob_Oc_OdUOeUOfUO~OW`O~P#}OYbO~P#}O[dO~P#}ORUOSUOTUOUUOVROXSOZTO^QO_UO`UOaPObPOcPOdUOeUOfUO~O]gOqmX~P%hOaiObiOciO~O^kO~OWtXYtX[tX~P!dOWlO~P#}OYmO~P#}O[nO~P#}O]gO~P#}O",
            goto: "#YuPPPPPPPPPPPPPPPPPPPPPPPPvzzzz!W![!b!vPPP!|TYOZeUORSTWZaceoT[OZQZORhZSWOZQaRQcSQeTZfWaceoQj]RqkeVORSTWZaceo",
            nodeNames: "⚠ LineComment BlockComment String Number Bool Null ( ) [ ] { } ; . Operator Punctuation SpecialVar Identifier QuotedIdentifier Keyword Type Builtin Script Statement CompositeIdentifier Parens Braces Brackets Statement",
            maxTerm: 36,
            skippedNodes: [0, 1, 2],
            repeatNodeCount: 3,
            tokenData: "RORO",
            tokenizers: [0, Wd],
            topRules: {
                Script: [0, 23]
            },
            tokenPrec: 0
        });

    function Yd(e) {
        let t = e.cursor.moveTo(e.from, -1);
        for (;
            /Comment/.test(t.name);) t.moveTo(t.from, -1);
        return t.node
    }

    function zd(e) {
        let t = /^[`'"](.*)[`'"]$/.exec(e);
        return t ? t[1] : e
    }

    function Zd(e, t) {
        return e ? t.map((t => Object.assign(Object.assign({}, t), {
            label: e + t.label + e,
            apply: void 0
        }))) : t
    }
    const Ed = /^\w*$/,
        Id = /^[`'"]?\w*[`'"]?$/;

    function Ud(e, t, n) {
        let r = Object.create(null);
        for (let t in e) r[t] = e[t].map((e => "string" == typeof e ? {
            label: e,
            type: "property"
        } : e));
        let i = (t || Object.keys(r).map((e => ({
            label: e,
            type: "type"
        })))).concat(n && r[n] || []);
        return e => {
            let {
                parent: t,
                from: n,
                quoted: a,
                empty: o
            } = function(e, t) {
                let n = ta(e).resolve(t, -1),
                    r = !1;
                if ("Identifier" == n.name || "QuotedIdentifier" == n.name) {
                    r = !1;
                    let t = null,
                        i = Yd(n);
                    if (i && "." == i.name) {
                        let n = Yd(i);
                        (n && "Identifier" == n.name || "QuotedIdentifier" == n.name) && (t = zd(e.sliceDoc(n.from, n.to).toLowerCase()))
                    }
                    return {
                        parent: t,
                        from: n.from,
                        quoted: "QuotedIdentifier" == n.name ? e.sliceDoc(n.from, n.from + 1) : null
                    }
                }
                if ("." == n.name) {
                    let r = Yd(n);
                    if (r && "Identifier" == r.name || "QuotedIdentifier" == r.name) return {
                        parent: zd(e.sliceDoc(r.from, r.to).toLowerCase()),
                        from: t,
                        quoted: null
                    }
                } else r = !0;
                return {
                    parent: null,
                    from: t,
                    quoted: null,
                    empty: r
                }
            }(e.state, e.pos);
            if (o && !e.explicit) return null;
            let s = i;
            if (t) {
                let e = r[t];
                if (!e) return null;
                s = e
            }
            return {
                from: n,
                to: a && e.state.sliceDoc(e.pos, e.pos + 1) == a ? e.pos + 1 : void 0,
                options: Zd(a, s),
                span: a ? Id : Ed
            }
        }
    }

    function Vd(e, t) {
        return Gc(["QuotedIdentifier", "SpecialVar", "String", "LineComment", "BlockComment", "."], Cc(Object.keys(e).map((n => ({
            label: t ? n.toUpperCase() : n,
            type: 21 == e[n] ? "type" : 20 == e[n] ? "keyword" : "variable",
            boost: -1
        })))))
    }
    let jd = qd.configure({
        props: [Qa.add({
            Statement: va()
        }), Sa.add({
            Statement: e => ({
                from: e.firstChild.to,
                to: e.to
            }),
            BlockComment: e => ({
                from: e.from + 2,
                to: e.to - 2
            })
        }), ks({
            Keyword: Fs.keyword,
            Type: Fs.typeName,
            Builtin: Fs.standard(Fs.name),
            Bool: Fs.bool,
            Null: Fs.null,
            Number: Fs.number,
            String: Fs.string,
            Identifier: Fs.name,
            QuotedIdentifier: Fs.special(Fs.string),
            SpecialVar: Fs.special(Fs.name),
            LineComment: Fs.lineComment,
            BlockComment: Fs.blockComment,
            Operator: Fs.operator,
            "Semi Punctuation": Fs.punctuation,
            "( )": Fs.paren,
            "{ }": Fs.brace,
            "[ ]": Fs.squareBracket
        })]
    });
    class Ad {
        constructor(e, t) {
            this.dialect = e, this.language = t
        }
        get extension() {
            return this.language.extension
        }
        static define(e) {
            let t = function(e, t, n, r) {
                    let i = {};
                    for (let t in Td) i[t] = (e.hasOwnProperty(t) ? e : Td)[t];
                    return t && (i.words = Sd(t, n || "", r)), i
                }(e, e.keywords, e.types, e.builtin),
                n = ea.define({
                    parser: jd.configure({
                        tokenizers: [{
                            from: Wd,
                            to: Rd(t)
                        }]
                    }),
                    languageData: {
                        commentTokens: {
                            line: "--",
                            block: {
                                open: "/*",
                                close: "*/"
                            }
                        },
                        closeBrackets: {
                            brackets: ["(", "[", "{", "'", '"', "`"]
                        }
                    }
                });
            return new Ad(t, n)
        }
    }

    function Cd(e, t = !1) {
        return e.language.data.of({
            autocomplete: Vd(e.dialect.words, t)
        })
    }

    function Gd(e) {
        return e.schema ? (e.dialect || Ld).language.data.of({
            autocomplete: Ud(e.schema, e.tables, e.defaultTable)
        }) : []
    }
    const Ld = Ad.define({}),
        Nd = Ad.define({
            charSetCasts: !0,
            operatorChars: "+-*/<>=~!@#%^&|`?",
            specialVar: "",
            keywords: Xd + "a abort abs absent access according ada admin aggregate alias also always analyse analyze array_agg array_max_cardinality asensitive assert assignment asymmetric atomic attach attribute attributes avg backward base64 begin_frame begin_partition bernoulli bit_length blocked bom c cache called cardinality catalog_name ceil ceiling chain char_length character_length character_set_catalog character_set_name character_set_schema characteristics characters checkpoint class class_origin cluster coalesce cobol collation_catalog collation_name collation_schema collect column_name columns command_function command_function_code comment comments committed concurrently condition_number configuration conflict connection_name constant constraint_catalog constraint_name constraint_schema contains content control conversion convert copy corr cost covar_pop covar_samp csv cume_dist current_catalog current_row current_schema cursor_name database datalink datatype datetime_interval_code datetime_interval_precision db debug defaults defined definer degree delimiter delimiters dense_rank depends derived detach detail dictionary disable discard dispatch dlnewcopy dlpreviouscopy dlurlcomplete dlurlcompleteonly dlurlcompletewrite dlurlpath dlurlpathonly dlurlpathwrite dlurlscheme dlurlserver dlvalue document dump dynamic_function dynamic_function_code element elsif empty enable encoding encrypted end_frame end_partition endexec enforced enum errcode error event every exclude excluding exclusive exp explain expression extension extract family file filter final first_value flag floor following force foreach fortran forward frame_row freeze fs functions fusion g generated granted greatest groups handler header hex hierarchy hint id ignore ilike immediately immutable implementation implicit import include including increment indent index indexes info inherit inherits inline insensitive instance instantiable instead integrity intersection invoker isnull k key_member key_type label lag last_value lead leakproof least length library like_regex link listen ln load location lock locked log logged lower m mapping matched materialized max max_cardinality maxvalue member merge message message_length message_octet_length message_text min minvalue mod mode more move multiset mumps name namespace nfc nfd nfkc nfkd nil normalize normalized nothing notice notify notnull nowait nth_value ntile nullable nullif nulls number occurrences_regex octet_length octets off offset oids operator options ordering others over overlay overriding owned owner p parallel parameter_mode parameter_name parameter_ordinal_position parameter_specific_catalog parameter_specific_name parameter_specific_schema parser partition pascal passing passthrough password percent percent_rank percentile_cont percentile_disc perform period permission pg_context pg_datatype_name pg_exception_context pg_exception_detail pg_exception_hint placing plans pli policy portion position position_regex power precedes preceding prepared print_strict_params procedural procedures program publication query quote raise range rank reassign recheck recovery refresh regr_avgx regr_avgy regr_count regr_intercept regr_r2 regr_slope regr_sxx regr_sxy regr_syy reindex rename repeatable replace replica requiring reset respect restart restore result_oid returned_cardinality returned_length returned_octet_length returned_sqlstate returning reverse routine_catalog routine_name routine_schema routines row_count row_number rowtype rule scale schema_name schemas scope scope_catalog scope_name scope_schema security selective self sensitive sequence sequences serializable server server_name setof share show simple skip slice snapshot source specific_name sqlcode sqlerror sqrt stable stacked standalone statement statistics stddev_pop stddev_samp stdin stdout storage strict strip structure style subclass_origin submultiset subscription substring substring_regex succeeds sum symmetric sysid system system_time t table_name tables tablesample tablespace temp template ties token top_level_count transaction_active transactions_committed transactions_rolled_back transform transforms translate translate_regex trigger_catalog trigger_name trigger_schema trim trim_array truncate trusted type types uescape unbounded uncommitted unencrypted unlink unlisten unlogged unnamed untyped upper uri use_column use_variable user_defined_type_catalog user_defined_type_code user_defined_type_name user_defined_type_schema vacuum valid validate validator value_of var_pop var_samp varbinary variable_conflict variadic verbose version versioning views volatile warning whitespace width_bucket window within wrapper xmlagg xmlattributes xmlbinary xmlcast xmlcomment xmlconcat xmldeclaration xmldocument xmlelement xmlexists xmlforest xmliterate xmlnamespaces xmlparse xmlpi xmlquery xmlroot xmlschema xmlserialize xmltable xmltext xmlvalidate yes",
            types: _d + "bigint int8 bigserial serial8 varbit bool box bytea cidr circle precision float8 inet int4 json jsonb line lseg macaddr macaddr8 money numeric path pg_lsn point polygon float4 int2 smallserial serial2 serial serial4 text without zone with timetz timestamptz tsquery tsvector txid_snapshot uuid xml"
        }),
        Dd = "accessible algorithm analyze asensitive authors auto_increment autocommit avg avg_row_length binlog btree cache catalog_name chain change changed checkpoint checksum class_origin client_statistics coalesce code collations columns comment committed completion concurrent consistent contains contributors convert database databases day_hour day_microsecond day_minute day_second delay_key_write delayed delimiter des_key_file dev_pop dev_samp deviance directory disable discard distinctrow div dual dumpfile enable enclosed ends engine engines enum errors escaped even event events every explain extended fast field fields flush force found_rows fulltext grants handler hash high_priority hosts hour_microsecond hour_minute hour_second ignore ignore_server_ids import index index_statistics infile innodb insensitive insert_method install invoker iterate keys kill linear lines list load lock logs low_priority master master_heartbeat_period master_ssl_verify_server_cert masters max max_rows maxvalue message_text middleint migrate min min_rows minute_microsecond minute_second mod mode modify mutex mysql_errno no_write_to_binlog offline offset one online optimize optionally outfile pack_keys parser partition partitions password phase plugin plugins prev processlist profile profiles purge query quick range read_write rebuild recover regexp relaylog remove rename reorganize repair repeatable replace require resume rlike row_format rtree schedule schema_name schemas second_microsecond security sensitive separator serializable server share show slave slow snapshot soname spatial sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_no_cache sql_small_result ssl starting starts std stddev stddev_pop stddev_samp storage straight_join subclass_origin sum suspend table_name table_statistics tables tablespace terminated triggers truncate uncommitted uninstall unlock upgrade use use_frm user_resources user_statistics utc_date utc_time utc_timestamp variables views warnings xa xor year_month zerofill",
        Md = _d + "bool blob long longblob longtext medium mediumblob mediumint mediumtext tinyblob tinyint tinytext text bigint int1 int2 int3 int4 int8 float4 float8 varbinary varcharacter precision datetime year unsigned signed",
        Bd = "charset clear connect edit ego exit go help nopager notee nowarning pager print prompt quit rehash source status system tee",
        Fd = Ad.define({
            operatorChars: "*+-%<>!=&|^",
            charSetCasts: !0,
            doubleQuotedStrings: !0,
            hashComments: !0,
            spaceAfterDashes: !0,
            specialVar: "@?",
            identifierQuotes: "`",
            keywords: Xd + "group_concat " + Dd,
            types: Md,
            builtin: Bd
        }),
        Hd = Ad.define({
            operatorChars: "*+-%<>!=&|^",
            charSetCasts: !0,
            doubleQuotedStrings: !0,
            hashComments: !0,
            spaceAfterDashes: !0,
            specialVar: "@?",
            identifierQuotes: "`",
            keywords: Xd + "always generated groupby_concat hard persistent shutdown soft virtual " + Dd,
            types: Md,
            builtin: Bd
        }),
        Jd = Ad.define({
            keywords: Xd + "trigger proc view index for add constraint key primary foreign collate clustered nonclustered declare exec go if use index holdlock nolock nowait paglock pivot readcommitted readcommittedlock readpast readuncommitted repeatableread rowlock serializable snapshot tablock tablockx unpivot updlock with",
            types: _d + "bigint smallint smallmoney tinyint money real text nvarchar ntext varbinary image cursor hierarchyid uniqueidentifier sql_variant xml table",
            builtin: "binary_checksum checksum connectionproperty context_info current_request_id error_line error_message error_number error_procedure error_severity error_state formatmessage get_filestream_transaction_context getansinull host_id host_name isnull isnumeric min_active_rowversion newid newsequentialid rowcount_big xact_state object_id",
            operatorChars: "*+-%<>!=^&|/",
            specialVar: "@"
        }),
        Kd = Ad.define({
            keywords: Xd + "abort analyze attach autoincrement conflict database detach exclusive fail glob ignore index indexed instead isnull notnull offset plan pragma query raise regexp reindex rename replace temp vacuum virtual",
            types: _d + "bool blob long longblob longtext medium mediumblob mediumint mediumtext tinyblob tinyint tinytext text bigint int2 int8 year unsigned signed real",
            builtin: "auth backup bail binary changes check clone databases dbinfo dump echo eqp exit explain fullschema headers help import imposter indexes iotrace limit lint load log mode nullvalue once open output print prompt quit read restore save scanstats schema separator session shell show stats system tables testcase timeout timer trace vfsinfo vfslist vfsname width",
            operatorChars: "*+-%<>!=&|/~",
            identifierQuotes: '`"',
            specialVar: "@:?$"
        }),
        ep = Ad.define({
            keywords: "add all allow alter and any apply as asc authorize batch begin by clustering columnfamily compact consistency count create custom delete desc distinct drop each_quorum exists filtering from grant if in index insert into key keyspace keyspaces level limit local_one local_quorum modify nan norecursive nosuperuser not of on one order password permission permissions primary quorum rename revoke schema select set storage superuser table three to token truncate ttl two type unlogged update use user users using values where with writetime infinity NaN",
            types: _d + "ascii bigint blob counter frozen inet list map static text timeuuid tuple uuid varint",
            slashComments: !0
        }),
        tp = Ad.define({
            keywords: Xd + "abort accept access add all alter and any array arraylen as asc assert assign at attributes audit authorization avg base_table begin between binary_integer body boolean by case cast char char_base check close cluster clusters colauth column comment commit compress connect connected constant constraint crash create current currval cursor data_base database date dba deallocate debugoff debugon decimal declare default definition delay delete desc digits dispose distinct do drop else elseif elsif enable end entry escape exception exception_init exchange exclusive exists exit external fast fetch file for force form from function generic goto grant group having identified if immediate in increment index indexes indicator initial initrans insert interface intersect into is key level library like limited local lock log logging long loop master maxextents maxtrans member minextents minus mislabel mode modify multiset new next no noaudit nocompress nologging noparallel not nowait number_base object of off offline on online only open option or order out package parallel partition pctfree pctincrease pctused pls_integer positive positiven pragma primary prior private privileges procedure public raise range raw read rebuild record ref references refresh release rename replace resource restrict return returning returns reverse revoke rollback row rowid rowlabel rownum rows run savepoint schema segment select separate session set share snapshot some space split sql start statement storage subtype successful synonym tabauth table tables tablespace task terminate then to trigger truncate type union unique unlimited unrecoverable unusable update use using validate value values variable view views when whenever where while with work",
            builtin: "appinfo arraysize autocommit autoprint autorecovery autotrace blockterminator break btitle cmdsep colsep compatibility compute concat copycommit copytypecheck define describe echo editfile embedded escape exec execute feedback flagger flush heading headsep instance linesize lno loboffset logsource long longchunksize markup native newpage numformat numwidth pagesize pause pno recsep recsepchar release repfooter repheader serveroutput shiftinout show showmode size spool sqlblanklines sqlcase sqlcode sqlcontinue sqlnumber sqlpluscompatibility sqlprefix sqlprompt sqlterminator suffix tab term termout time timing trimout trimspool ttitle underline verify version wrap",
            types: _d + "ascii bfile bfilename bigserial bit blob dec number nvarchar nvarchar2 serial smallint string text uid varchar2 xml",
            operatorChars: "*/+-%<>!=~",
            doubleQuotedStrings: !0,
            charSetCasts: !0
        });
    var np = Object.freeze({
        __proto__: null,
        Cassandra: ep,
        MSSQL: Jd,
        MariaSQL: Hd,
        MySQL: Fd,
        PLSQL: tp,
        PostgreSQL: Nd,
        SQLDialect: Ad,
        SQLite: Kd,
        StandardSQL: Ld,
        keywordCompletion: Cd,
        schemaCompletion: Gd,
        sql: function(e = {}) {
            let t = e.dialect || Ld;
            return new ca(t.language, [Gd(e), Cd(t, !!e.upperCaseKeywords)])
        }
    });
    const rp = new Pl(((e, t) => {
            let n = t.start,
                r = e.get(n++);
            if (76 == r || 85 == r ? r = e.get(n++) : 117 == r && (r = e.get(n++), 56 == r && (r = e.get(n++))), 82 == r && (r = e.get(n++), 34 == r)) {
                for (r = e.get(n++); 40 != r;) {
                    if (32 == r || r <= 13 || 41 == r) return;
                    r = e.get(n++)
                }
                return t.accept(305, n)
            }
        })),
        ip = new Pl(((e, t, n) => {
            let r = t.start,
                i = e.get(r++),
                a = null;
            for (;;) {
                if (i < 0) return void(r > t.start + 1 && t.accept(306, r - 1));
                if (41 == i) {
                    if (!a) {
                        let r = n.ruleStart,
                            i = /"(\S*?)\(/.exec(e.read(r, Math.min(t.start, r + 100)));
                        if (!i) return;
                        a = i[1] + '"'
                    }
                    if (e.read(r, r + a.length) == a) return void t.accept(307, r + a.length)
                } else if (10 == i) return void t.accept(306, r);
                i = e.get(r++)
            }
        }), {
            contextual: !0
        }),
        ap = new Pl(((e, t) => {
            let n = t.start,
                r = e.get(n);
            if (62 == r) 62 == e.get(n + 1) && t.accept(1, n + 1);
            else {
                let i = !1;
                for (;; r = e.get(++n))
                    if (r >= 65 && r <= 90) i = !0;
                    else {
                        if (r >= 97 && r <= 122) return;
                        if (95 != r && !(r >= 48 && r <= 57)) break
                    }
                i && n >= t.start + 2 && t.accept(2, n)
            }
        }), {
            extend: !0
        }),
        op = {
            __proto__: null,
            bool: 32,
            char: 32,
            int: 32,
            float: 32,
            double: 32,
            void: 32,
            size_t: 32,
            ssize_t: 32,
            intptr_t: 32,
            uintptr_t: 32,
            charptr_t: 32,
            int8_t: 32,
            int16_t: 32,
            int32_t: 32,
            int64_t: 32,
            uint8_t: 32,
            uint16_t: 32,
            uint32_t: 32,
            uint64_t: 32,
            char8_t: 32,
            char16_t: 32,
            char32_t: 32,
            char64_t: 32,
            const: 66,
            volatile: 68,
            restrict: 70,
            _Atomic: 72,
            mutable: 74,
            constexpr: 76,
            struct: 80,
            __declspec: 84,
            final: 88,
            override: 88,
            public: 92,
            private: 92,
            protected: 92,
            virtual: 154,
            extern: 156,
            static: 158,
            register: 160,
            inline: 162,
            __attribute__: 166,
            __based: 172,
            __restrict: 174,
            __uptr: 174,
            __sptr: 174,
            _unaligned: 174,
            __unaligned: 174,
            noexcept: 188,
            throw: 192,
            template: 248,
            typename: 254,
            class: 256,
            using: 266,
            __cdecl: 274,
            __clrcall: 274,
            __stdcall: 274,
            __fastcall: 274,
            __thiscall: 274,
            __vectorcall: 274,
            case: 284,
            default: 286,
            if: 298,
            else: 304,
            switch: 308,
            do: 312,
            while: 314,
            for: 322,
            return: 326,
            break: 330,
            continue: 334,
            goto: 338,
            typedef: 342,
            try: 356,
            catch: 360,
            namespace: 366,
            static_assert: 372,
            explicit: 382,
            delete: 392,
            operator: 400,
            friend: 420,
            union: 422,
            enum: 430,
            signed: 434,
            unsigned: 434,
            long: 434,
            short: 434,
            decltype: 446,
            auto: 448,
            sizeof: 480,
            TRUE: 742,
            true: 742,
            FALSE: 744,
            false: 744,
            NULL: 488,
            new: 494,
            nullptr: 508,
            this: 510
        },
        sp = {
            __proto__: null,
            "<": 137
        },
        Op = {
            __proto__: null,
            ">": 141
        },
        lp = {
            __proto__: null,
            operator: 398,
            new: 492,
            delete: 500
        },
        cp = El.deserialize({
            version: 13,
            states: "$BhQ!QQ]OOP&tO[OOO'fO`O'#CcO+PQ[O'#CfO+ZQ[O'#FdO-SQtO'#CvO-ZQ[O'#CvO.yQ[O'#J_O/QQ[O'#CuO/]OQO'#DxO/eO!bO'#DyO/mQ#xO'#DaOOQS'#IV'#IVO/xQ[O'#J|O1iQ[O'#I[OOQS'#I['#I[O4nQ[O'#JpO7oQ[O'#JpO9vQ]O'#EZO:WQ[O'#EZO:]Q[OOO:eQ]O'#EhO<xQ]O'#EiO=VQ[O'#EiO?qQ[O'#JtO?{Q[O'#JtO@VQ]O'#HrOOQS'#Jt'#JtOAvQ[O'#JtOC{Q[O'#JtODYQ[O'#FWODzQ[O'#FbOOQT'#Fd'#FdO,lQ[O'#FdOOQT'#KQ'#KQOOQT'#KP'#KPOEPQ]O'#JUOFzQ[O'#KTOGXQ[O'#KTOOQT'#Ga'#GaOG|Q[O'#KVOOQT'#Gi'#GiOOQT'#Gm'#GmOOQT'#KO'#KOOOQT'#Ik'#IkQ!QQ]OOOHXQ]O'#F[OOQS'#Ir'#IrOH`Q[O'#G|OOQS'#J_'#J_OKwQ[O'#J_OLeQ[O'#JUONbQ]O'#H`ONbQ]O'#HcOOQS'#Hh'#HhOOQS'#Hi'#HiO!!^Q[O'#HqOOQS'#JU'#JUO!$bQ[O'#J_OOQT'#J^'#J^O!$iQ[O'#DVO!$nQ[O'#JqOOQS'#Jq'#JqO!&}Q[O'#EQO!'SQ[O'#ETO!'XQ[O'#G[O!'dQ[O'#FfO!'lQ[O'#FkO!'qQ]O'#FmO!'lQ[O'#FqO!*ZQ[O'#FrO!*`Q]O'#FtO!*jQ[O'#FvO!*oQ[O'#FxO!*tQ[O'#FzO!*yQ[O'#F|O!,QQ]O'#F_O!-kQ[O'#F_O!-pQ[O'#GTO!-uQ]O'#GXO!-|Q[O'#GYO!.UQ[O'#G]O!0WQ[O'#G`O!0eQ[O'#GbO!1YQ[O'#GjO4nQ[O'#FYO!1pQ[O'#DTO!2UQ[O'#GyO!2jQ[O'#GzO!2{Q[O'#HQO!3aQ[O'#HRO!4UQ[O'#HSO!4ZQ]O'#HeO!4eQ[O'#HkO!5]Q]O'#HoP!6v{&jO'#CaP!.P{&jO'#CaP!7R{,UO'#CaP!.P{&jO'#CaP!7W{&jO'#CaP!7]OWO'#IPPOOO)CDr)CDrOOOO'#IR'#IRO!7hO`O,58}OOQT,58},58}O!,QQ]O,59TOOQS,59V,59VONbQ]O,5<POOQT,5<O,5<OO!7sQ[O,59XONbQ]O,5=uOOQT'#H]'#H]OOQT'#H^'#H^OOQT'#H_'#H_ONbQ]O,5=vONbQ]O,5=vONbQ]O,5=vONbQ]O,5=vONbQ]O,5=vONbQ]O,5=vONbQ]O,5=vONbQ]O,5=vONbQ]O,5=vO!:XQ]O,5=}OOQS,5>_,5>_O!;UQ]O'#CgO!>nQ[O'#CxOOQS,59b,59bOOQS,59a,59aOOQS,5;U,5;UO!1YQ[O,5=UO!4eQ[O,5>VO!@cQ]O,5>ZO!@jQtO,59bO!@xQ]O'#EwOOQS,5>R,5>RONbQ]O,59UOOOQ'#IY'#IYO!AYOQO,5:dOOQT,5:d,5:dO!AbOpO,5:eO!AgQtO'#DbO!AxQtO'#JeO!BWQtO,59{O!DYQ[O'#CrO!ExQtO'#CvO!E}Q[O'#CuO!IbQ[O'#J_OOQS-E<T-E<TO!IiQ[O,5@hODYQ[O,5;rO!IpQ[O'#J_O4nQ[O,5;tOOQS-E<Y-E<YO!IzQ[O,5@[O!IzQ[O,5@[OOQT,5@h,5@hO!MzQ[O'#CfO# rQ[O,5=tO#!`QtO'#CvO#!qQ[O'#EjO#!vQ[O'#HgO##OQ[O'#CuOOQT'#IS'#ISO##ZQ[O,5:uO##qQ[O,5:uO#$mQ[O,5:uO#$zQ[O'#CsO!'SQ[O'#CkOOQS'#I]'#I]O##qQ[O,5:uO#&WQ[O,5:vO#([Q]O,5;RO#(fQ[O'#EXO#*WQ[O,5<[O#+YQ[O'#J_O!*yQ[O'#C|O#+aQ[O,5;SO#+lQ[O,5<[O#+qQ[O'#C|O#,kQ[O,5>OO#-RQ[O,5;TO#-`QtO'#CvO##qQ[O'#EZO=VQ[O'#EhO#-kQ[O'#JtO!.PQ[O'#EnO#.`Q[O'#CsOOQS,5;X,5;XO#0zQ]O'#CzO#2iQ[O'#KaO#4dQ[O'#JwO#4kQ[O'#JUO#5OQ[O,5;YO#5TQ]O'#FpONbQ]O'#HYO#7jQ]O,5>^O@VQ]O'#HrO#7tQ[O,5>^O#7wQ[O,5>^OOQS,5>^,5>^O#7|Q[O'#GdOOQT,5@o,5@oO#8UQ[O,5@oO#8^Q[O'#GfO#8fQ[O,5;tO#8zQ[O'#J}O#9SQ[O,5;rO!'qQ]O,5;|OOQT'#Io'#IoO#9XQ]O,5<yO#;_QtO'#CvO#;mQ[O'#EjOAvQ[O,5@oOOQS'#Ip'#IpOOQS-E<n-E<nOGXQ[O,5@oO#8UQ[O,5@qO#;rQ[O,5@qOOQT,5@q,5@qOOQT,5@r,5@rO#;}Q]O,5@rOOQT-E<i-E<iO#=kQ]O,5;vOOQT,5;v,5;vOOQS-E<p-E<pOOQS,5=h,5=hOOQS,59_,59_O#=rQ[O,5=zO#?rQ[O'#JUO#A^Q[O,5=}O#AzQ[O'#EbO#CiQ[O'#EcO#CvQ[O'#EcO#DOQ]O'#EdO#DYQ[O'#EeO#DvQ[O'#EfOOQS'#Jv'#JvO#E^Q[O,5>]OOQS,5>],5>]O!.PQ[O,59qO#EiQ[O,5;wO!'SQ[O,5:lOOQS,5:o,5:oO#EvQ[O,5;pO#FOQ[O,5<vO#FTQ[O,5<vO#IXQ]O'#FhO!'qQ]O,5<QO!'lQ[O,5<QO!-pQ[O,5<VO#I`Q[O,5<XO!'qQ]O,5<]O#IeQ]O,5<^O#LdQ[O,5<`OOQT,5<`,5<`O#LkQ[O,5<`OOQT,5<b,5<bOOQT,5<d,5<dOOQS'#Fc'#FcO#LpQ[O,5<fO!*yQ[O,5<hO#LuQ[O,5<hO#NeQ[O,5;yO#NlQ]O,5;yO$!qQ[O,5<oO$$WQ[O,5<sOOQT,5<s,5<sOOQS'#Cf'#CfO$$_Q]O'#F^OOQT,5<t,5<tO$$fQ[O,5<tONbQ]O,5<wO$&OQ[O'#J_O$&VQ[O'#JpO$&vQ[O,5<zO$(rQ[O'#E}O=VQ[O,5<zO$(|Q[O,5;gONbQ]O,5<|O$)mQ[O,5=UODYQ[O,5;tOOQS'#J`'#J`O$-WQ[O'#J`O$-hQ[O'#DZO$-sQ[O'#D^O$0yQ[O,59oOOQS,59o,59oO$1dQ[O,59oO$1iQ[O,59oO$1qQ[O,59oO$3sQ[O,5=eOOQS,5=e,5=eO$1dQ[O,5=eO$1iQ[O,5=eO$4^Q[O,5=eO$4oQ[O'#HOO$6bQ[O,5=fOOQS,5=f,5=fO$7[Q[O,5=fO$9gQ[O,5=lOOQS,5=l,5=lO$1dQ[O,5=lO$1iQ[O,5=lO$9qQ[O,5=lOOQS,5=m,5=mONbQ]O,5=nO$;^Q[O,5>PO#5TQ]O'#FpOOQS,5>P,5>PO$<TQ[O,5>PO$<YQ[O,5>VO!4hQ[O,5>VO$>]Q[O,5>ZO$@jQ]O,5>ZP$@q{&jO,58{P$@v{&jO,58{P$AO{,UO,58{POOO,58{,58{POOO,5>k,5>kP$AWOWO,5>kOOOO-E<P-E<POOQT1G.i1G.iO$A`Q[O1G.oO$AgQ[O1G1kOOQS1G1k1G1kO$AqQ[O'#CnO$C}QtO'#CvO$DYQ[O'#CqO$D_Q[O1G.sO#.`Q[O'#CpOOQS1G.s1G.sO$FbQ[O1G3aO$HcQ[O1G3bO$J^Q[O1G3bO$LeQ[O1G3bO$LlQ[O1G3bO$NmQ[O1G3bO$NtQ[O1G3bO%!oQ[O1G3bO%!|Q[O1G3bO%#ZQ[O1G3bO%$lQ[O1G3bO%%cQ[O'#JTO%%mQ[O'#JTO%%uQ[O,59RO$)mQ[O1G2pO%'zQ[O1G3qO!4hQ[O1G3qO%(RQ[O1G3uO%(rQ]O1G3uOOQS1G.|1G.|OOQS1G.{1G.{OOQS1G0p1G0pO!1YQ[O1G2pO%(yQ[O'#JyO@VQ]O'#HrO%)TQ[O'#EzOOQS'#Ig'#IgO%)YQ[O'#ExO%)eQ[O'#JyO%)mQ[O,5;cO%)rQ[O1G.pOOOQ-E<W-E<WOOQT1G0O1G0OOOQT1G0P1G0PO%*iQ#xO'#IWO%*nQtO,59|O%-PQ#yO'#DdO%-WQ#xO'#IZO%-]QtO,5@PO%-]QtO,5@POOQS1G/g1G/gO%-hQtO1G/gO%/jQ[O'#CxO!ExQtO,59bOOQT1G6S1G6SO#8fQ[O1G1`O%1VQ[O1G1^ODYQ[O1G1`O%2SQ[O1G5vO%3cQtO,59bOOQT-E<Q-E<QO%4PQ[O1G0aO##ZQ[O1G0aOOQS-E<Z-E<ZO##qQ[O1G0aOOQS'#I^'#I^O%5eQ[O1G0bO%6gQ[O'#EaOOQS'#I_'#I_O%4^Q[O1G0bO%6wQ[O'#E]O%8[Q[O'#E_O%8aQ[O1G0mO%8hQ]O1G0mOOQS1G0m1G0mO%8rQ]O1G0mO#EoQ[O'#EYO%9hQ[O'#EYO%:RQ[O'#JsO%:ZQ[O,5:sOOQS1G1v1G1vO%:`Q[O,59hOOQS1G0n1G0nO%:`Q[O,59hO%;YQ[O,59hO%;tQ]O1G3jO%;{Q[O'#J`O%<SQ[O'#JwO%<[Q[O'#KZO%<iQ[O'#J]O%<wQ[O'#J[O%=SQ[O,59fONbQ]O'#IuO%=[Q[O,5@{O!.PQ[O'#IcO%=dQ[O,5@cOOQS1G0t1G0tOOQS1G3x1G3xONbQ]O1G3xO%=lQ[O'#GeO%=tQ[O'#KUOOQS,5=O,5=OOOQT1G6Z1G6ZO%>PQ[O,5=QO%>UQ[O,5=RO%>ZQ]O'#EXO%E]Q]O'#F[O%;tQ]O,5;sOOQS,5;s,5;sODYQ[O'#IjO%EmQ[O,5@iOOQT1G1`1G1`OOQT1G1^1G1^OOQT1G1h1G1hOOQT-E<m-E<mO#8UQ[O1G6ZOAvQ[O1G6ZO#8UQ[O1G6]OOQT1G6]1G6]OOQT1G6^1G6^O#;}Q]O1G6^O%EuQ[O1G6^O%E|Q]O,5=ROOQT1G1b1G1bOOQS'#Ia'#IaO%FTQ[O,5:|O%GfQ[O,5:|OOQS'#Ib'#IbO%GmQ[O,5:}OOQS,5:},5:}O%GmQ[O,5:}O%HkQ]O,5;OO%HuQ[O,5;OO%HkQ]O,5;OOOQS,5;O,5;OO%H|Q]O,5;OO%ITQ[O,5;PO%IwQ[O,5;QOOQS1G3w1G3wO%JOQ[O1G/]O/xQ[O'#FWOOQT1G1c1G1cO%JTQ[O1G0WO!*yQ[O1G1[OOQT1G2b1G2bO%JYQ[O1G2bO%J_Q[O,5<SO#EoQ[O'#FWODYQ[O'#FWO%JfQ[O,5<SONbQ]O,5<SO%JnQ[O,5<SO%JsQ]O1G1lO!'qQ]O1G1lOOQT1G1q1G1qO& pQ[O1G1sOOQT1G1w1G1wO& uQ[O1G1xO& |Q[O1G2YO&!nQ]O1G1xO&!uQ[O1G1xOOQT1G1z1G1zOOQT1G2Q1G2QO#LuQ[O1G2SOOQS'#Ct'#CtO&!zQ[O'#GOO&#oQ[O'#GOO&#tQ[O'#KRO#LuQ[O'#GROOQS'#KS'#KSO&$SQ[O1G2SO&$XQ]O1G1eODYQ[O'#FWOOQT'#Il'#IlO&$XQ]O1G1eO&&^Q[O'#FrOOQT'#In'#InO&&cQ]O1G2ZO&+cQ[O'#GVOOQT1G2_1G2_OOQT,5;x,5;xO&+hQ]O,5;xOOQT1G2`1G2`O&+oQ[O1G2cOOQT1G2f1G2fOOQS'#J{'#J{O&+yQ[O'#JzO&,UQ[O,5;iO&,^Q[O'#FOO&,qQ[O'#FOO&-UQ[O'#FTO&-ZQ[O1G2fO&-fQ[O'#J_OGXQ[O'#KTO#8UQ[O'#KVOOQT'#Gn'#GnOOQT'#Go'#GoO&-pQ[O'#FUO&-UQ[O'#E{OOQT1G1R1G1RO&-uQ[O1G2hO&-|Q[O1G2pO&._Q[O1G1`O&.jQ[O'#JaOOQS,59u,59uO&.uQ[O'#JaO&.}Q[O'#D`O&/zQ[O'#JtO&0sQ[O'#D`OGXQ[O'#KTOOQS'#Gq'#GqOOQS'#Gs'#GsOOQS'#Gt'#GtOOQS'#Jc'#JcOOQS'#IU'#IUO&0}Q[O,59xOOQS,59x,59xO&2dQ[O'#D`O&3vQ[O'#GuO&4sQ[O'#GxOOQS1G/Z1G/ZO$1dQ[O1G/ZO$1iQ[O1G/ZO&6iQ[O1G/ZOOQS1G3P1G3PO$1dQ[O1G3PO$1iQ[O1G3PO&8sQ[O1G3PO&9^Q[O'#HPO&9iQ[O'#KYO&9qQ[O,5=jO&9vQ[O'#KXOOQS1G3Q1G3QO&:UQ[O1G3QO&<bQ[O1G3QOOQS1G3W1G3WO$1dQ[O1G3WO$1iQ[O1G3WO&>iQ[O1G3WO&>sQ[O1G3YO&>zQ[O,5@xO!.PQ[O1G3kONbQ]O'#HnOOQS1G3q1G3qO&?PQ[O1G3qO&?WQ]O1G3uPOOO1G.g1G.gP&@w{&jO1G.gP&@|Q[O'#KcP&AX{,UO1G.gPOOO1G4V1G4VONbQ]O7+$ZO&A^Q[O'#CxOOQS,59],59]O&AiQtO,59bOOQS,59[,59[OOQS7+({7+({O%;tQ]O'#IvO&AtQ[O,5?oOOQS1G.m1G.mO&A|Q[O7+([OOQS7+)]7+)]O&D_Q[O7+)]O&DfQ[O7+)]O&?WQ]O7+)aO$)mQ[O7+([O&DmQ]O'#IhO&EQQ[O,5@eO&EYQ[O,5;eOOQS'#Cn'#CnOOQS,5;f,5;fONbQ]O'#EyOOQS-E<e-E<eO%;tQ]O,5;dOOQS1G0}1G0}OOQS,5>r,5>rOOQS-E<U-E<UOOQT'#Dj'#DjOOQT'#Dl'#DlOOQT'#Do'#DoO&EaQ#yO'#JfO&EhQ7aO'#JfO&EoQ#yO'#JfOOQT'#Jf'#JfOOQT'#IX'#IXO&EvQ#yO,5:OOOQS,5:O,5:OO&E}QtO,5>uOOQS-E<X-E<XO&F]QtO1G5kOOQS7+%R7+%ROOQT7+&z7+&zOOQT7+&x7+&xO&._Q[O7+&zO&FyQ[O7+%{O##ZQ[O7+%{OOQS-E<[-E<[O&HXQ[O7+%|O&HzQ[O,5:{O&JQQ[O,5:{OOQS-E<]-E<]O&JuQ]O,5:wO&J|Q[O,5:yOOQS7+&X7+&XO&KTQ[O7+&XO&K[Q]O7+&XO&LTQ[O,5:tO&MlQ[O'#EbO&N_Q[O,5:tO#DOQ]O'#EdO&NfQ[O'#EeO'!OQ[O'#EfO'!fQ[O,5:tONbQ]O,5;ZO'!pQ[O'#EqOOQS,5;[,5;[O'#RQ[O'#IdO'#]Q[O,5@_OOQS1G0_1G0_O'#eQ[O1G/SO'$_Q[O1G/SO'$yQ[O7+)UOOQS7+)X7+)XOOQS,5=q,5=qO#.eQ]O'#ItO'%jQ[O,5?vOOQS1G/Q1G/QO'%uQ[O,5?aOOQS-E<s-E<sOOQS,5>},5>}OOQS-E<a-E<aO'&PQ[O7+)dO'&UQ[O,5=PO#7|Q[O'#IqO'&dQ[O,5@pOOQT1G2l1G2lOOQT1G2m1G2mO'&oQ[O'#JyO@VQ]O'#HrO'&|Q[O1G1_OOQS1G1_1G1_O''WQ[O,5?UOOQS,5?U,5?UOOQS-E<h-E<hOOQT7++u7++uO#8UQ[O7++uOOQT7++w7++wO''lQ[O7++xOOQT7++x7++xOOQS-E<_-E<_O'([Q[O1G0hOOQS-E<`-E<`OOQS1G0i1G0iO')WQ[O1G0iO')eQ[O1G0jO')lQ]O1G0jOOQS1G0j1G0jO')vQ]O1G0jOOQS1G0k1G0kOOQS7+$w7+$wOOQS7+%r7+%rO')}Q[O7+&vOOQT7+'|7+'|OOQT1G1n1G1nODYQ[O,5;rO'*eQ[O,5<TO'*lQ[O1G1nO'*sQ[O1G1nO!'qQ]O7+'WO'*xQ]O7+'WONbQ]O'#FpO'/uQ[O7+'_O'/zQ]O7+'dO'0RQ[O7+'tO'0]Q[O7+'dO'0dQ]O7+'dO'0kQ[O7+'nO'0pQ[O,5<jO&!zQ[O,5<jO'1bQ[O,5<jO&!zQ[O,5<jOOQS,5<k,5<kO'1sQ]O,5<lO#LuQ[O'#ImO'1}Q[O,5@mO'2VQ[O,5<mOOQT7+'n7+'nO'2bQ]O7+'PO'0UQ[O'#J}OOQT-E<j-E<jO#IeQ]O,5<^OOQT-E<l-E<lO!-pQ[O,5<qOOQT1G1d1G1dO'4gQ[O7+'}O'4lQ]O7+'}O$'RQ[O'#IiO'4tQ[O,5@fOOQS1G1T1G1TO'5PQ[O,5;jO'5jQ[O,5;mO'6_Q[O,5;nO'6mQ[O,5;jO'8pQ[O,5;oOOQT7+(Q7+(QO#EyQ[O,5;pOOQS7+(S7+(SO'8xQ[O'#ITO'9TQ[O,5?{O'9TQ[O,5?{O'9]Q[O,5?{O'9hQ[O,59zO'9rQ[O,59zOOQS,5=^,5=^O':iQ[O'#ESO';jQ[O'#ESO'<QQ[O,59zO'<[Q[O'#EtO'<vQ[O'#EuOOQS'#Jr'#JrO'=bQ[O'#JrONbQ]O'#EvOOQS,59z,59zO'>PQ[O,59zO%;tQ]O,59zO'>UQ[O,5@oOOQS-E<S-E<SOOQS1G/d1G/dO'>]Q[O'#J`O'>gQ[O'#J`OOQS,5=a,5=aO'>tQ[O,5=aO!2{Q[O,5=aO!1pQ[O,5=aO!2UQ[O,5=aOOQS,5=d,5=dOOQS7+$u7+$uO$1dQ[O7+$uO$1iQ[O7+$uOOQS7+(k7+(kO$1dQ[O7+(kO$1iQ[O7+(kONbQ]O,5=kO'>yQ[O'#IsO'?UQ[O,5@tOOQS1G3U1G3UO'?^Q[O,5@sOOQS,5@s,5@sOOQS7+(l7+(lO'BrQ[O7+(lOOQS7+(r7+(rO$1dQ[O7+(rO$1iQ[O7+(rOOQS7+(t7+(tO'G[Q]O1G6dO'HXQ[O7+)VO'H^Q[O,5>YO'HeQ[O7+)aPOOO7+$R7+$RP'IUQ[O'#KdP'I^Q[O,5@}P'Ic{&jO7+$RO'IhQ[O<<GuOOQS1G.w1G.wO'JXQ[O,5?bOOQS,5?b,5?bOOQS-E<t-E<tOOQS<<Lw<<LwO'JcQ[O<<LwO'LfQ[O<<L{O'MVQ[O<<KvO'MhQ[O,5?SOOQS,5?S,5?SOOQS-E<f-E<fOOQS1G1P1G1PO'MrQ[O,5;eO'MyQ[O1G1OOOQS1G1O1G1OOOQT,5@Q,5@QO'NTQ#yO,5@QO'N[Q7aO,5@QO'NcQ#yO,5@QOOQT-E<V-E<VOOQS1G/j1G/jO'NjQ#yO'#DzOOQS1G4a1G4aOOQT<<Jf<<JfO( SQ[O<<IgOOQS'#Ec'#EcO(!kQ[O1G0gO(!uQ[O1G0gO(#YQ[O1G0cOOQS1G0c1G0cO(#aQ[O'#JuO(#iQ[O1G0eOOQS<<Is<<IsO($PQ[O1G0`O($WQ[O'#EfO($hQ[O1G0`O($oQ[O'#ISOOQS,5;^,5;^ONbQ]O1G0uO(&PQ[O1G0uOOQS,5;],5;]OOQS,5?O,5?OOOQS-E<b-E<bO(&aQ[O7+$nO(&{Q[O'#K]O('YQ[O'#K[OOQS,5?`,5?`OOQS-E<r-E<rOOQS<<MO<<MOOOQS1G2k1G2kOOQS,5?],5?]OOQS-E<o-E<oO&DmQ]O,5<POOQT<= a<= aOOQT<= d<= dOOQS7+&T7+&TOOQS7+&U7+&UO('hQ[O7+&UO('oQ]O7+&UOOQT<<Jb<<JbO%;tQ]O1G1oO('vQ[O1G1oOOQT7+'Y7+'YOOQT<<Jr<<JrO!'qQ]O<<JrOOQT<<Jy<<JyO((RQ[O<<KOO((YQ]O<<KOO%;tQ]O<<K`O((aQ[O<<KOO!'qQ]O<<KOO((hQ[O<<KOOOQT<<KY<<KYO((mQ[O1G2UO'0pQ[O1G2UO&!zQ[O1G2UO()OQ[O1G2WO()VQ]O1G2WOOQS1G2W1G2WO()aQ]O1G2WO()hQ[O,5?XOOQS-E<k-E<kOOQS1G2X1G2XOOQT1G2]1G2]OOQT<<Ki<<KiO()vQ]O<<KiO(*RQ[O<<KiOOQS,5?T,5?TOOQS-E<g-E<gO'5jQ[O1G1XOOQS1G1X1G1XOOQS1G1Y1G1YO(*WQ[O'#FOOOQS1G1Z1G1ZO(*lQ[O,5>oO&.uQ[O,5>oOOQS-E<R-E<RO(*wQ[O1G5gO(*wQ[O1G5gO(+PQ[O1G/fOOQS1G/f1G/fO(+ZQ[O1G/fO%;tQ]O1G/fO(+`Q[O1G/fO(+jQ[O,5:nO':iQ[O,5:nO(,QQ[O,5:nO':iQ[O,5:nO(-^Q[O,5:rO(-tQ]O,5;_O'<vQ[O'#IfO(.OQ[O1G/fO(.aQ]O1G/fOOQS1G2v1G2vO(.hQ[O,5;`O(.sQ[O,5;aO(/[Q[O,5;bO(/cQ[O1G/fOOQS1G2x1G2xOOQS1G2{1G2{O(1TQ[O1G2{O(1bQ[O1G2{O(1iQ[O1G2{OOQS<<Ha<<HaO$1dQ[O<<HaOOQS<<LV<<LVO$1dQ[O<<LVO(1pQ[O1G3VOOQS,5?_,5?_OOQS-E<q-E<qOOQS<<LW<<LWOOQS<<L^<<L^O$1dQ[O<<L^OOQS<<Lq<<LqO(1zQ[O1G3tP(3}Q[O'#IwP(4VQ[O,5AOPO{O1G6i1G6iPOOO<<Gm<<GmOOQSANBcANBcOOQT1G5l1G5lO(4_Q#yO,5:fOOQS,5:f,5:fO(4}Q[O7+&ROOQS7+%}7+%}O!*yQ[O'#I`O(5zQ[O,5@aOOQS7+&P7+&PO(6SQ[O7+&aOOQS,5=r,5=rO(6dQ[O1G1kOOQS<<Ip<<IpO(6nQ[O7+'ZOOQTAN@^AN@^O(6{Q]OAN@jO(7SQ[OAN@jO!'qQ]OAN@jO(7ZQ[OAN@jO(7`Q[OAN@zO(7gQ[OAN@zOOQTAN@jAN@jO(7lQ[O7+'pO'0pQ[O7+'pOOQS7+'r7+'rO(7}Q[O7+'rO(8UQ]O7+'rO(8]Q[OANATOOQS7+&s7+&sO(8bQ[O,5;jOOQS1G4Z1G4ZO(8pQ[O1G4ZO(8{Q[O7++RO(9TQ[O7+%QOOQS7+%Q7+%QO(9fQ[O7+%QO(.aQ]O7+%QOOQS7+(b7+(bO(9kQ[O7+%QO(9rQ[O7+%QO%;tQ]O7+%QO(9|Q[O1G0YO(+jQ[O1G0YO':iQ[O1G0YOOQS'#Ie'#IeO(;YQ[O1G0^O(;pQ[O1G0yO(;wQ]O1G0yOOQS1G0y1G0yO(<RQ]O1G0yO(<YQ[O,5?QOOQS-E<d-E<dOOQS1G0z1G0zOOQS7+(g7+(gOOQSAN={AN={OOQSANAqANAqOOQSANAxANAxOOQS7+)`7+)`POQS,5?c,5?cPOQS-E<u-E<uOOQS1G0Q1G0QOOQS,5>z,5>zOOQS-E<^-E<^O(<qQ[OG26UO!'qQ]OG26UO(<xQ[OG26UOOQTG26UG26UO!'qQ]OG26fO(<}Q[O<<K[OOQS<<K^<<K^OOQTG26oG26oOOQS7+)u7+)uOOQS<<Hl<<HlO(=`Q[O<<HlO%;tQ]O<<HlO(=eQ[O<<HlO(=lQ[O<<HlO(.aQ]O<<HlOOQS<<K|<<K|O(=}Q[O7+%tO(+jQ[O7+%tOOQS-E<c-E<cOOQS7+&e7+&eO(>fQ[O7+&eO(>mQ]O7+&eO!'qQ]OLD+pOOQTLD+pLD+pOOQTLD,QLD,QOOQSAN>WAN>WO(>tQ[OAN>WO(>{Q[OAN>WO%;tQ]OAN>WO(?QQ[O<<I`OOQS<<JP<<JPOOQT!$( [!$( [OOQSG23rG23rO(?iQ[OG23rO(?pQ[OG23rOOQSLD)^LD)^O(?uQ[O'#CfO'qQ[O'#CfO!1pQ[O'#DTO!1pQ[O'#DTO!2UQ[O'#GyO!2UQ[O'#GyO(ArQ[O'#GzO(BTQ[O'#GzO(BfQ[O'#GzO!2{Q[O'#HQO'5jQ[O'#HRO&JQQ[O'#HRO(BwQ[O'#HRO(ClQ[O'#HRO(DaQ[O'#HkO(FOQ]O'#HoO!,QQ]O,5=vO!,QQ]O,5=vO!,QQ]O,5=vO!,QQ]O,5=vO!,QQ]O,5=vO!,QQ]O,5=vO!,QQ]O,5=vO!,QQ]O,5=vO!,QQ]O,5=vO(FVQ]O,5=}O(HpQ[O'#CxO(KQQ[O'#CxO(KyQ[O'#CxO(LZQ[O'#CxO(NbQ[O'#CxO(NoQ[O'#CxO)!bQ[O'#CxO)$XQ[O'#CxO(DaQ[O,5>VO)$dQ]O,5>ZO)$kQtO,59bO)$yQtO,59bO)%XQtO,59bO!,QQ]O,59UO)%gQ[O'#CfO)'kQ[O'#CfO)'uQ[O'#CfO)*WQ[O'#CfO),}Q[O'#CfO)-_Q[O'#CfO).[Q[O'#CfO)1bQ[O'#CfO)1oQ[O'#CfO)1yQ[O,5=tO,qQtO'#CvO)2TQtO'#CvO)2fQtO'#CvO)2wQtO'#CvO)3YQ[O'#CuO)3eQ[O,5:uO)3{Q[O,5:uO)3{Q[O,5:uO)4fQtO'#CvO)4qQtO'#CvO)4|QtO'#CvO)5XQtO'#CvO)3{Q[O'#EZO)5dQ[O'#EZODYQ[O'#EiO)6kQ[O'#EiO#2pQ[O'#JwO!,QQ]O'#HYO)7]QtO'#CvO)7kQtO'#CvO)7yQ[O'#CuO)8OQ[O'#CuO)9nQ[O'#JUO)9uQ[O,5=}O):tQ[O'#EbO)<PQ[O'#EfO)>|Q[O,59oO)@tQ[O,59oO)AUQ[O,59oO)A]Q[O,59oO$1qQ[O,59oO$1qQ[O,59oO)DVQ[O,5=eO)E}Q[O,5=eO)F_Q[O,5=eO)FfQ[O,5=eO$4^Q[O,5=eO$4^Q[O,5=eO)GoQ[O,5=fO$7[Q[O,5=fO$7[Q[O,5=fO$7[Q[O,5=fO)HxQ[O,5=lO)KcQ[O,5=lO)KsQ[O,5=lO$9qQ[O,5=lO)KzQ[O,5>PO(BwQ[O,5>VO)L_Q[O,5>ZO)LlQ[O'#CnO)NbQ[O1G3bO* yQ[O1G3bO*#nQ[O1G3bO*#uQ[O1G3bO*%dQ[O1G3bO*%kQ[O1G3bO*'SQ[O1G3bO*'aQ[O1G3bO*'nQ[O1G3bO*)PQ[O1G3bO(BwQ[O1G3qO*)dQ[O1G3uO*)qQ[O1G.pO**UQtO,59bO**aQtO,59bO**lQtO,59bO**wQtO,59bO*+SQtO,59bO*+_QtO,59bO*+jQtO,59bO)3eQ[O1G0aO*+uQ[O1G0aO)3{Q[O1G0aO)5dQ[O1G0aO*,]Q[O'#EaO*,sQ[O1G0bO*-}Q]O1G3jO*.UQ[O,5:|O*/OQ[O,5:|O*/{Q[O,5;QO*2YQ[O'#J_O*4ZQ[O1G/ZO*6RQ[O1G/ZO*6cQ[O1G/ZO*6jQ[O1G/ZO*9dQ[O1G3PO*;[Q[O1G3PO*;lQ[O1G3PO*;sQ[O1G3PO*<|Q[O1G3QO*?lQ[O1G3WO*BVQ[O1G3WO*BgQ[O1G3WO*BnQ]O1G3uO!,QQ]O7+$ZO*D_Q[O'#CxO*DmQtO,59bO*BnQ]O7+)aO)3eQ[O7+%{O*+uQ[O7+%{O*EvQ[O7+%|O*FWQ[O,5:{O!4hQ[O,5:{O*FeQ[O'#EbO*FuQ[O7+)UO*GSQ[O1G0hO*HPQ]O1G6dO*HjQ[O7+)aO*HwQ[O<<GuO*IUQ[O<<L{O*IcQ[O1G0gO*ItQ[O1G0gO*JdQ[O'#EfO*KTQ[O,5:rO*K_Q[O,5;aO*KjQ[O7+&RO*K{Q[O1G0YO*LWQ[O1G0^O*LbQ[O7+%tO*LmQ[O<<I`O!1YQ[O'#JpO'9rQ[O'#JpO*LxQ[O'#EZO)8TQ[O'#JUO!,QQ]O'#H`O!,QQ]O'#HcO!1pQ[O'#DTO!2UQ[O'#GyO!2{Q[O'#HQO*L}Q]O'#HeO*MXQ[O'#CvO*M^Q[O'#EjO*McQ[O'#EjO*MhQ[O'#CuO*MmQ[O'#CuO*MrQ[O'#CvO*MwQ[O'#CvO*M|Q[O'#CuO*NXQ[O'#CuO*NdQ[O'#CuO*+uQ[O,5:uO)5dQ[O,5:uO)5dQ[O,5:uO+ pQ[O,5:vO+!QQ[O'#J_O+!nQ[O'#J_O+!xQ[O,5>OO+!}Q[O,5;TO#5TQ]O'#FpO+#XQ[O'#J_O$1qQ[O,59oO$4^Q[O,5=eO$9qQ[O,5=lO+#lQ]O,5>ZO+#sQ[O1G.oO+#zQtO'#CvO+$VQ[O'#CqO+$[Q]O1G3uO+$cQ[O1G0aO+$mQ[O1G0bO+$tQ[O,5@xO+$yQ[O7+%{O'<[Q[O'#EuO+%TQ[O<<IgO+%_Q[O,5:nO+%uQ[O,5:nO+&`Q[O,5:nO+%uQ[O,5:nO+%_Q[O1G0YO+%uQ[O1G0YO+%_Q[O7+%tO!1pQ[O'#DTO!1pQ[O'#DTO!1pQ[O'#DTO!1pQ[O'#DTO!2UQ[O'#GyO!2UQ[O'#GyO!2UQ[O'#GyO!2UQ[O'#GyO+&kQ[O'#GzO!2{Q[O'#HQO!2{Q[O'#HQO!2{Q[O'#HQO+&|Q[O'#HRO!4hQ[O'#HRO+'qQ[O'#HRO+(fQ[O,5:uO+(|Q[O,5:uO+(|Q[O,5:uO+(|Q[O'#EZO& |Q[O'#EiO$1qQ[O,59oO$1qQ[O,59oO$1qQ[O,59oO$1qQ[O,59oO$4^Q[O,5=eO$4^Q[O,5=eO$4^Q[O,5=eO$4^Q[O,5=eO$7[Q[O,5=fO$9qQ[O,5=lO$9qQ[O,5=lO$9qQ[O,5=lO+(fQ[O1G0aO+(|Q[O1G0aO+)gQ[O'#EaO!*yQ[O'#EaO+)}Q[O'#EaO+*_Q[O1G0bO+(fQ[O7+%{O++cQ[O7+%|O+&|Q[O,5:{O'5jQ[O,5:{O+'qQ[O,5:{O++jQ[O'#EZO!,QQ]O,59TO++oQ[O,5:uO++yQ[O'#EcO+,aQ[O'#EfO#5TQ]O'#FpO+,nQ[O,5:|O+-_Q[O,5:}O+-_Q[O,5:}O+.fQ[O,5;QO+.wQ[O1G0hO+/YQ[O1G0iO+%uQ[O'#ESO+/pQ[O'#ESO+/uQ[O,5:{O+0kQ[O1G0gO+0uQ[O1G0gO+1YQ[O7+&RO+1aQ[O'#EZO+1fQ[O,5:vO+1mQ[O1G0bO+1tQ[O,5:uO+1{Q[O,5;TO+2SQ[O'#EbO+2sQ[O1G0aO+2zQ[O,5:|O+3]Q[O7+%{O+3dQ[O<<Ig",
            stateData: "+4[~O'rOSROSSOSQPQUPQ&jPQ&lPQ&mPQ&nPQ&oPQ&pPQ&qPQ&rPQ~O)XOS~O[eO`![OckOkTOq!]Or!]Os!]Ot!]Ou!]Ov!]Ox!xOz!^O!R!OO!YjO![!VO!]!UO!k!ZO!ovO!p!_O!q!`O!r!`O!s!`O!u!aO!x!bO#S!qO#`kO#p!tO#s!|O#t!{O#y!cO#}!wO$S!nO$T!oO$Z!dO$`!eO$b!fO$c!gO$g!hO$i!iO$k!jO$m!kO$o!lO$q!mO$x!pO$}!rO%Q!sO%V!uO%[#QO%`!vO%k!yO%o!zO%q!PO%w!}O%x!RO&T!UO&U!UO&Y#OO&^!ZO&a#PO&h!ZO&i!ZO'mXO'sQO'vRO(WZO(ZbO(]gO(^fO(_pO(`YO)R!WO)S!XO~OQ#WOU#RO&j#SO&l#TO&m#UO&n#UO&o#VO&p#VO&q#TO&r#TO~OW#YO't#YO'u#[O~O[YX[hXchXkfXoYXohXqhXrhXshXthXuhXvhXzhX!PYX!RhX!YYX!YhX![YX!]YX!_YX!aYX!bYX!dYX!eYX!fYX!hYX!iYX!jYX!phX!qhX!rhX!shX!uhX!xhX#`hX'vhX'yYX'z$VX'{YX'|YX(UYX(ZYX(ZhX([YX(]YX(]hX(^YX(^hX(_YX(lYX~O(_hX!XYX~P'qO[#qO!P#_O!Y#bO![#oO!]#fO!_#gO!a#iO!b#jO!d#lO!e#mO!f#mO!h#mO!i#nO'y#]O'{#aO'|#aO(U#pO(Z#cO([#dO(]#dO(^#eO(_#`O~Oc#uO#`#uO&`#wO&d#xO'}#rO~O%_#vO~P,qOk#yO~O!R#zO[(RXc(RXq(RXr(RXs(RXt(RXu(RXv(RXz(RX!Y(RX!p(RX!q(RX!r(RX!s(RX!u(RX!x(RX#`(RX'v(RX(Z(RX(](RX(^(RX(_(RX~Ok#yO~P-`Ok#yO!j#|O(l#|O~O'n#}O'o$PO~OW$QO(a$QO~O!V$RO(U(XP(c(XP~O`!ROk$VOq!]Or!]Os!]Ot!]Ou!]Ov!]Ox!xOz!^O!p!`O!q!`O!r!`O!s!`O!u!aO#s!|O#t!{O#}$^O%k!yO%o!zO%q!PO%w!}O%x!RO'v$UO(WZO~O['dX`'OXc'dXk'OXk'dXq'OXq'dXr'OXr'dXs'OXs'dXt'OXt'dXu'OXu'dXv'OXv'dXx'OXz'OX!Y'dX!o'dX!p'OX!p'dX!q'OX!q'dX!r'OX!r'dX!s'OX!s'dX!u'OX!u'dX!x'dX#`'dX#s'OX#t'OX%V'dX%`'dX%k'OX%o'OX%q'OX%w'OX%x'OX'v'OX'v'dX(Z'dX(]'dX(^'dX~O`!ROk$VOq!]Or!]Os!]Ot!]Ou!]Ov!]Ox!xOz!^O!p!`O!q!`O!r!`O!s!`O!u!aO#s!|O#t!{O%k!yO%o!zO%q!PO%w!}O%x!RO'v$UO~Oq!]Or!]Os!]Ot!]Ou!]Ov!]Oz!^O!p!`O!q!`O!r!`O!s!`O!u!aO[(dXc(dXk(dX!Y(dX!x(dX#`(dX'v(dX(Z(dX(](dX(^(dX~O(_$bO~P6XO[eOckOq!]Or!]Os!]Ot!]Ou!]Ov!]O!YjO![!VO!]!UO!k!ZO!x!bO#`kO%[#QO&T!UO&U!UO&Y#OO&^!ZO&a#PO&h!ZO&i!ZO'mXO'sQO(ZbO(]gO(^fO(`YO)R!WO)S!XO~O`$nOk$eO!y$oO'v$cO~P7vO(Z$pO~O[$sO!Y$rO~O`![Ok8_Ox7]O#s7eO#t7dO%k7_O%o7aO%q!PO%w!}O%x!RO'v8TO~P7vO[eOckO!YjO![!VO!]!UO!k!ZO!x!bO#`kO%[#QO&T!UO&U!UO&Y#OO&^!ZO&a#PO&h!ZO&i!ZO'mXO'sQO(ZbO(]gO(^fO(`YO)R!WO)S!XO~O`$nOk$eO'v$cO~P;[O[%OOckOk$|O!Y%QO!x!bO#`kO'v$cO(Z$}O(]gO(^gO~Oo%TO['xX[(hX!P'xX!Y'xX!Y(hX!['xX!]'xX!_'xX!a'xX!b'xX!d'xX!e'xX!f'xX!h'xX!i'xX'y'xX'{'xX'|'xX(U'xX(Z'xX(['xX(]'xX(^'xX(_'xX{'xX{(hX!X'xX~O!j#|O(l#|O~P=wO!j'xX(l'xX~P=wO[%YO`$nOk$eO!Y%]O!Z%`O![!VO!]!UO!k!ZO%[#QO&T!UO&U!UO&Y#OO&^!ZO&a#PO&h!ZO&i!ZO'mXO'sQO'v$cO(Z%ZO(^%[O(`YO(l%^O)R!WO)S!XO~O!R!OO'z%aO(l%dO[(hX!Y(hX~O['xX!P'xX!Y'xX!['xX!]'xX!_'xX!a'xX!b'xX!d'xX!e'xX!f'xX!h'xX!i'xX'y'xX'{'xX'|'xX(U'xX(Z'xX(['xX(]'xX(^'xX(_'xX!j'xX(l'xX{'xX!X'xX~O[(hX!Y(hX{(hX~PBXO[%OOckOk8gO!Y%QO!x!bO#`kO'v8UO(Z8kO(]8mO(^8mO~O'z%hO~O'mXO'sQO!Z'xX'z'xXP'xX!g'xX~PBXO[%OOckOq!]Or!]Os!]Ot!]Ou!]Ov!]O!Y%QO!p!`O!q!`O!r!`O!s!`O!u!aO!x!bO#`kO%V!uO%`!vO(Z$}O(]gO(^gO~Ok%kO!o%pO'v$cO~PEgO[%OOckOk%kO!Y%QO!x!bO#`kO%`!vO'v$cO(Z$}O(]gO(^gO~O!R!OO(_%tO(l%uO~O!X%xO~P!QO`%zO%q!PO[%pXc%pXk%pXq%pXr%pXs%pXt%pXu%pXv%pXz%pX!Y%pX!p%pX!q%pX!r%pX!s%pX!u%pX!x%pX#`%pX'v%pX(Z%pX(]%pX(^%pX(_%pX{%pX!P%pX!R%pX![%pX!]%pX!_%pX!a%pX!b%pX!d%pX!e%pX!f%pX!h%pX!i%pX'y%pX'{%pX'|%pX(U%pX([%pX!j%pX(l%pXP%pX!g%pX!Z%pX'z%pX!X%pX|%pX#Q%pX#S%pX~Oo%TOk(RX{(RXP(RX!P(RX!g(RX(U(RX(l(RX~P-`O!j#|O(l#|O['xX!P'xX!Y'xX!['xX!]'xX!_'xX!a'xX!b'xX!d'xX!e'xX!f'xX!h'xX!i'xX'y'xX'{'xX'|'xX(U'xX(Z'xX(['xX(]'xX(^'xX(_'xX{'xX!Z'xX!X'xXP'xX!g'xX~O[%YO`$nOk$eO!Y%]O![!VO!]!UO!k!ZO%[#QO&T!UO&U!UO&Y#OO&^!ZO&a#PO&h!ZO&i!ZO'mXO'sQO'v$cO(Z%ZO(^%ZO(`YO)R!WO)S!XO~O[&TO!Y&SO(Z&PO(]&UO(^&UO~O!R!OO~P! {O[(RXc(RXk(RXq(RXr(RXs(RXt(RXu(RXv(RXz(RX!Y(RX!p(RX!q(RX!r(RX!s(RX!u(RX!x(RX#`(RX'v(RX(Z(RX(](RX(^(RX(_(RX{(RXP(RX!P(RX!g(RX(U(RX(l(RX~O[#qO~P!!eO[&YO~O'sQO[(eX`(eXc(eXk(eXq(eXr(eXs(eXt(eXu(eXv(eXx(eXz(eX!Y(eX!o(eX!p(eX!q(eX!r(eX!s(eX!u(eX!x(eX#`(eX#s(eX#t(eX%V(eX%`(eX%k(eX%o(eX%q(eX%w(eX%x(eX'v(eX(Z(eX(](eX(^(eX~O[&[O~O[#qO~Ok8hO$}&`O'v8VO~O[&aOv&cO~O[&aO~O[%YO`$nOk$eO!R!OO!Y%]O![!VO!]!UO!k!ZO#S!qO$S!nO$T!oO$Z!dO$`!eO$b!fO$c!gO$g!hO$i!iO$k!jO$m!kO$o!lO$x!pO%[#QO&T!UO&U!UO&Y#OO&^!ZO&a#PO&h!ZO&i!ZO'mXO'sQO'v7ZO(Z%ZO(^%ZO(_pO(`YO)R!WO)S!XO~O[&gO~O!R#zO(_&iO~PNbO(_&kO~O(_&lO~O'v&mO~O`!ROk$VOq!]Or!]Os!]Ot!]Ou!]Ov!]Ox7]O#s7eO#t7dO%k7_O%o7aO%q!PO%w!}O%x!RO'v$UO~O[;iO`$nOk8`O!Y%]O![;QO!];PO!k!ZO%[7jO&T;PO&U;PO&Y;UO&^!ZO&a7iO&h!ZO&i!ZO'mXO'sQO'v$cO(Z8pO(^8pO(`YO)R!WO)S!XO~O'z&rO~O!R!OO~O(_&uO~PNbO!R&wO'v&vO~O[&zO~O[%OO`!ROckOq!]Or!]Os!]Ot!]Ou!]Ov!]Ox!xOz!^O!Y%QO!p!`O!q!`O!r!`O!s!`O!u!aO!x!bO#`kO#s!|O#t!{O%k!yO%o!zO%q!PO%w!}O%x!RO(Z$}O(]gO(^gO~Ok8jOo'OO'v8WO~P!.ZO['ROc%UXk%UX!Y%UX!x%UX#`%UX%`%UX'v%UX(Z%UX(]%UX(^%UX~Oz!^O!p!`O!q!`O!r!`O!s!`O!u!aO~P!*yOk$VOz!^O|']O!R'XO'v$UO'z'WO~Ok$VOz!^O|'bO!R'XO'v$UO'z'WO~Ok$VOx'gO!R'dO#t'gO'v$UO~Ok$VOz!^O|'kO!R'XO'v$UO'z'WO~O`!ROk$VOx!xO#s!|O#t!{O%k!yO%o!zO%q!PO%w!}O%x!RO'v$UO~O['nO~O['pO(U'rO~PNeO[#qO`!ROk$VOx<RO#s<_O#t<[O%k<VO%o<YO%q!PO%w!}O%x!RO'v$UO~O[%YO`$nOk$eO!Y'vO![!VO!]!UO!k!ZO%[#QO&T!UO&U!UO&Y#OO&^!ZO&a#PO&h!ZO&i!ZO'mXO'sQO'v$cO(Z%ZO(^%ZO(`YO)R!WO)S!XO~OX'wO'sQO'v&vO~O&k'wO~O)U'zO~O[#qO'r'|O'l&sX~OW#YO't#YO'u(OO~Oc(XOk(TO'v(SO~O`$nO!k!ZO&^!ZO&h!ZO&i!ZO'mXO'sQO'v$cO(`YO)R!WO)S!XO[&Va!Y&Va![&Va!]&Va!_&Va!a&Va!b&Va!d&Va!e&Va!f&Va!h&Va!i&Va'y&Va'{&Va'|&Va(U&Va(Z&Va([&Va(]&Va(^&Va!j&Va(l&Va~Ok$eO%[#QO&T!UO&U!UO&Y#OO&a#PO!P&Va(_&Va{&Va!Z&Va!X&VaP&Va!g&Va~P!8OO!R#zO{'wP~PNbO[mX[#_XcmXklXomXo#_XqmXrmXsmXtmXumXvmXzmX!P#_X!RmX!YmX!Y#_X![#_X!]#_X!_#_X!a#_X!b#_X!d#_X!e#_X!f#_X!h#_X!i#_X!jlX!pmX!qmX!rmX!smX!umX!xmX#`mX'vmX'y#_X'{#_X'|#_X(U#_X(ZmX(Z#_X([#_X(]mX(]#_X(^mX(^#_X(llX{mX{#_X~O(_mX(_#_X!X#_X~P!;`O[%YO`$nOk$eO![!VO!]!UO!k!ZO%[#QO&T!UO&U!UO&Y#OO&^!ZO&a#PO&h!ZO&i!ZO'mXO'sQO'v$cO(Z%ZO(^%ZO(`YO)R!WO)S!XO~O!Y(lO~P!>{Oc(oO#`(oO%_(pO'}#rO~O!R#zO!Y(rO'{(sO!X(mP~P!>{O'n#}O'o(zO~O(b({O~Ok(|O[!UX!P!UX(U!UX(c!UX~O[)OO!P)PO(U(XX(c(XX~O(U)TO(c)SO~O[hXchXkfXohXqhXrhXshXthXuhXvhXzhX!YhX!phX!qhX!rhX!shX!uhX!xhX#`hX'vhX(ZhX(]hX(^hX!RhX!PhX(UhX(lhX{hX~O(_hX|hX'zhX![hX!]hX!_hX!ahX!bhX!dhX!ehX!fhX!hhX!ihX'yhX'{hX'|hX([hX!jhX!ZhXPhX!ghX!XhX#QhX#ShX~P!B`O'})UO~Ok)VO~O[(RXc(RXq(RXr(RXs(RXt(RXu(RXv(RXz(RX!Y(RX!p(RX!q(RX!r(RX!s(RX!u(RX!x(RX#`(RX'v(RX(Z(RX(](RX(^(RX(_(RX!P(RX!R(RX![(RX!](RX!_(RX!a(RX!b(RX!d(RX!e(RX!f(RX!h(RX!i(RX'y(RX'{(RX'|(RX(U(RX([(RX!j(RX(l(RX{(RX!Z(RX'z(RXP(RX!g(RX!X(RX|(RX#Q(RX#S(RX~Ok)VO~P!FSO(_)WO~P6XOo%TOk(RX~P!FSOq!]Or!]Os!]Ot!]Ou!]Ov!]Oz!^O!p!`O!q!`O!r!`O!s!`O!u!aO[(dac(dak(da!Y(da!x(da#`(da'v(da(Z(da(](da(^(da{(da!P(da(U(da(l(daP(da!g(da!R(da'z(da(_(da~O[YXkfXoYXohX!PYX!RhX!YYX![YX!]YX!_YX!aYX!bYX!dYX!eYX!fYX!hYX!iYX!jYX'yYX'{YX'|YX(UYX(ZYX([YX(]YX(^YX(_YX(lYX{YX~O!ZYX'zYX!XYXPYX!gYX~P!K}O[#qO!Y#bO'{#aO'|#aO!]%|a!_%|a!a%|a!b%|a!d%|a!e%|a!f%|a!h%|a!i%|a!j%|a'y%|a(U%|a(Z%|a([%|a(]%|a(^%|a(l%|a~O![#oO!P%|a(_%|a{%|a!Z%|a!X%|aP%|a!g%|a~P!N_Oc#uO#`#uO&`#wO&d#xO'}7uO~Ok)]O~Ok)]O!R#zO~Ok)]O!j#|O(l#|O~Oq!]Or!]Os!]Ot!]Ou!]Ov!]O~P=VOq!]Or!]Os!]Ot!]Ou!]Ov!]O!y$oO~P=VO[$sO!Y$rO(_!}a!P!}a(l!}a~O{!}aP!}a!g!}a~P#$[Oo%TO!R#zO~Oq!]Or!]Os!]Ot!]Ou!]Ov!]O|)fO!u!aO#Q)hO#S)iO[#Oa!R#Oa!Y#Oa(l#Oa(_#Oa!P#Oa~O'|)eO'z#Oa~P#%SO[%YO`$nOk$eOq!]Or!]Os!]Ot!]Ou!]Ov!]O!Y%]O![!VO!]!UO!k!ZO%[#QO&T!UO&U!UO&Y#OO&^!ZO&a#PO&h!ZO&i!ZO'mXO'sQO'v$cO(^%ZO(`YO)R!WO)S!XO~O!Z)lO(Z)mO~P#&bO(U)pO(WZO{(gP~P4nO[#qO!P#_O!Y#bO![#oO!]#fO!_#gO!a#iO!b#jO!d#lO!e#mO!f#mO!h#mO!i#nO'y#]O'{#aO'|#aO(U#pO(Z#cO([#dO(]#dO(^#eO~O{)rO~P#(sO!R#zO[(RXq(RXr(RXs(RXt(RXu(RXv(RX{(RX!Y(RX(Z(RX(](RX(^(RX~Ok9pO~P#*_O[$sO{)tO!Y$rO~O{)rO~Oq!]Or!]Os!]Ot!]Ou!]Ov!]O{pXPpX!PpX!gpX(UpX(_pX~P! {O{)wO~O[$sO!Y$rO(_#]a!P#]a(l#]a~O{#]aP#]a!g#]a~P#,pOc#uO#`#uO'}7uO~Oo%TO[(hX!Y(hX!P(hX!R(hX(_(hX(l(hX{(hX'z(hXP(hX!g(hX~Oo%TO~O[%YO`![Ok8aOq!]Or!]Os!]Ot!]Ou!]Ov!]Ox7]O!Y%]O![!VO!]!UO!k!ZO#s7eO#t7dO%[#QO%k7_O%o7aO%q!PO%w!}O%x!RO&T!UO&U!UO&Y#OO&^!ZO&a#PO&h!ZO&i!ZO'mXO'sQO'v8XO(Z%ZO(^%ZO(`YO)R!WO)S!XO~OP(OP!g(OP~P#.eO[#qO!P*OO!Y#bO![#oO!]#fO!_#gO!a#iO!b#jO!d#lO!e#mO!f#mO!h#mO!i#nO'y#]O'{#aO'|#aO(U#pO(Z#cO([#dO(]#dO(^#eO~O!Z)TX~P#1UOo%TO!P*QO!j#|O(l#|O['xX!Y'xX!Z'xX!Z(kX!['xX!]'xX!_'xX!a'xX!b'xX!d'xX!e'xX!f'xX!h'xX!i'xX'y'xX'{'xX'|'xX(U'xX(Z'xX(['xX(]'xX(^'xX~O!P'xX~P#2pOo%TO!Z'xX'z'xXP'xX!g'xX~PBXO!Z*SO~O[%YO`![Ok8_Oq!]Or!]Os!]Ot!]Ou!]Ov!]Ox7]O!Y%]O![!VO!]!UO!k!ZO#s7eO#t7dO%[#QO%k7_O%o7aO%q!PO%w!}O%x!RO&T!UO&U!UO&Y#OO&^!ZO&a#PO&h!ZO&i!ZO'mXO'sQO'v8TO(Z%ZO(^%ZO(`YO)R!WO)S!XO~O!P*UO!Z*TO~PNbO!P*UO!Z*TO~Ok;pO'v9bO~O!R!OO(l%dO~O$T*ZO%[*[O~O[*]O!P*aO!R*^O!Y$rO(l*_O(_(qX~O!P*aO(_(qX~O(_*dO~O'mXO'sQO[%Ra!P%Ra!Y%Ra![%Ra!]%Ra!_%Ra!a%Ra!b%Ra!d%Ra!e%Ra!f%Ra!h%Ra!i%Ra'y%Ra'{%Ra'|%Ra(U%Ra(Z%Ra([%Ra(]%Ra(^%Ra(_%Ra!j%Ra(l%Ra{%Ra!Z%Ra'z%Ra!X%RaP%Ra!g%Ra~Oc#uO#`#uO%_#vO'}7uO~Ok8PO~O!R!OO(_*kO(l*lO~O[%YO`$nOk$eO!Y%]O![!VO!]!UO!k!ZO$T*ZO%[*nO&T!UO&U!UO&Y#OO&^!ZO&a#PO&h!ZO&i!ZO'mXO'sQO'v$cO(Z%ZO(^%ZO(`YO)R!WO)S!XO~O!X*oO~P!QO[#qO!Y#bO'{#aO'|#aO!P&Sa![&Sa!]&Sa!_&Sa!a&Sa!b&Sa!d&Sa!e&Sa!f&Sa!h&Sa!i&Sa'y&Sa(U&Sa(Z&Sa([&Sa(]&Sa(^&Sa(_&Sa!j&Sa(l&Sa{&Sa!Z&Sa'z&Sa!X&SaP&Sa!g&Sa~Oo%TO~PLeO[#qO!Y#bO'{#aO'|#aO!]&Va!_&Va!a&Va!b&Va!d&Va!e&Va!f&Va!h&Va!i&Va'y&Va(U&Va(Z&Va([&Va(]&Va(^&Va!j&Va(l&Va~O![#oO!P&Va(_&Va{&Va!Z&Va!X&VaP&Va!g&Va~P#?yOq!]Or!]Os!]Ot!]Ou!]Ov!]O{#UXP#UX!P#UX!g#UX(U#UX(_#UX~P! {Oq!]Or!]Os!]Ot!]Ou!]Ov!]O#Q)hO#S)iO[#VX!Y#VX(_#VX~O'|9{O!R#VX(l#VX~P#BtO[$sO!Y*wO~O!Z*zO(Z*{O~P#&bO[&TO!Y&SO(U)pO(WZO(Z&PO(]&UO(^&UO{(gP~P4nO{#YXP#YX!P#YX!g#YX(U#YX(_#YX~P! {O!R!OO[(jX!Y(jX~O!R&wO#}!wO(WZO~P4nOo%TO(l+TO~O(_+UO~Ok8hO'v8VO~O[%YO`![Ok8bOq!]Or!]Os!]Ot!]Ou!]Ov!]Ox!xOz!^O!Y%]O![!VO!]!UO!k!ZO!p!`O!q!`O!r!`O!s!`O!u!aO#s!|O#t!{O%[#QO%k!yO%o!zO%q!PO%w!}O%x!RO&T!UO&U!UO&Y#OO&^!ZO&a#PO&h!ZO&i!ZO'mXO'sQO(WZO(Z%ZO(^%ZO(_pO(`YO)R!WO)S!XO~O'v8ZO~P#F]O$c+aO~O[%YO`![Ok8bOq!]Or!]Os!]Ot!]Ou!]Ov!]Ox!xOz!^O!Y%]O![!VO!]!UO!k!ZO!p!`O!q!`O!r!`O!s!`O!u!aO#s!|O#t!{O%[#QO%k!yO%o!zO%q!PO%w!}O%x!RO&T!UO&U!UO&Y#OO&^!ZO&a#PO&h!ZO&i!ZO'mXO'sQO'v8TO(WZO(Z%ZO(^%ZO(_+eO(`YO)R!WO)S!XO~O(_+gO~P#(sO(_+gO~O(_+hO~O[+nO!x!bO'v+jO(Z+kO~O[#qO!Y#bO![7tO!]7kO!_7lO!a7nO!b7oO!d7qO!e7rO!f7rO!h7rO!i7sO'y=OO'{#aO'|#aO(U#pO(Z#cO([#dO(]#dO(^#eO~O'z+qO~P#MTO!R!OO$Z!dO$`!eO$b!fO$c!gO$g+uO$i!iO$k!jO$m!kO$o!lO$q!mO'v7[Oc$Ra!o$Ra!x$Ra#S$Ra#`$Ra#p$Ra#y$Ra#}$Ra$S$Ra$T$Ra$x$Ra$}$Ra%Q$Ra%V$Ra%`$Ra'l$Ra(]$Ra!X$Ra$^$Ra~P#F]O$z+xO~O[#qO!Y#bO![#oO!]#fO!_#gO!a#iO!b#jO!d#lO!e#mO!f#mO!h#mO!i#nO'y#]O'{#aO'|#aO(U#pO(Z#cO([#dO(]#dO(^#eO~O(_+yO~P$!vO!X+zO~P!QO!R&wO~O[(RXc(RXq(RXr(RXs(RXt(RXu(RXv(RXz(RX!Y(RX!p(RX!q(RX!r(RX!s(RX!u(RX!x(RX#`(RX'v(RX(Z(RX(](RX(^(RX~Ok9sO~P$$kO{(dX!P(dX(U(dX(l(dXP(dX!g(dX!R(dX'z(dX(_(dX~P6XO[$sO!Y$rO(_,OO~O`!ROk$VOq!]Or!]Os!]Ot!]Ou!]Ov!]Ox!xOz!^O!p!`O!q!`O!r!`O!s!`O!u!aO#p,UO#s,SO#t,TO%k!yO%o!zO%q!PO%w!}O%x!RO'v$UO(WZO~OP(nP!g(nP~P$'ROk8qO!o,XO#p,^O#y,]O#}!wO%V!uO%`!vO'v8]O(WZO~P!.ZO[&TO!Y&SO(Z=fO(]=RO(^=RO~O[(SXq(SXr(SXs(SXt(SXu(SXv(SXz(SX|(SX!R(SX!Y(SX!p(SX!q(SX!r(SX!s(SX!u(SX!x(SX'v(SX'z(SX(Z(SX(](SX(^(SX(_(SX{(SX!P(SX(U(SX![(SX!](SX!_(SX!a(SX!b(SX!d(SX!e(SX!f(SX!h(SX!i(SX'y(SX'{(SX'|(SX([(SX!j(SX(l(SXP(SX!g(SX!Z(SX!X(SX#Q(SX#S(SX~Oo%TOc(SXk(SX#`(SX~P$*OOk$VO!O,eO'v$UO~O`!ROk8rOx;ROz!^O!O,sO!X,pO!o,qO#p,^O#s7hO#t;TO#y!cO$q!mO%Q!sO%j,rO%k;SO%o7cO%q!PO%w!}O%x!RO'v8[O(WZO~PEgO|,vO!R'XO'z'WO[wacwakwaqwarwaswatwauwavwazwa!Ywa!pwa!qwa!rwa!swa!uwa!xwa#`wa'vwa(Zwa(]wa(^wa~O(_wa{wa!Pwa(Uwa(lwaPwa!gwa~P$/YO!R'XO~O!R'XO'z'WO~Ok$VO|,vO!R'XO'v$UO'z'WO~O|,zO!R'XO'z'WO[%mac%mak%maq%mar%mas%mat%mau%mav%maz%ma!Y%ma!p%ma!q%ma!r%ma!s%ma!u%ma!x%ma#`%ma'v%ma(Z%ma(]%ma(^%ma~O(_%ma{%ma!P%ma(U%ma(l%maP%ma!g%ma~P$2SOk$VO|,zO!R'XO'v$UO'z'WO~O'v&vO!X(|P~O'z-PO[%naq%nar%nas%nat%nau%nav%na!Y%na(Z%na(]%na(^%na(_%na{%na!P%na(U%na(l%naP%na!g%na|%na#Q%na#S%na'|%na~O!R'dOc%nak%naz%na!p%na!q%na!r%na!s%na!u%na!x%na#`%na'v%na~P$4wOk$VO!R'dO'v$UO~O|-VO'z'WO[%tak%taq%tar%tas%tat%tau%tav%taz%ta!Y%ta!p%ta!q%ta!r%ta!s%ta!u%ta!x%ta#`%ta'v%ta(Z%ta(]%ta(^%ta(_%ta{%ta!P%ta(U%ta(l%taP%ta!g%ta~O!R'XOc%ta~P$7gOk$VO|-VO!R'XO'v$UO'z'WO~O[#qO!Y#bO'{#aO'|#aO(Z#cO!a&Xa!b&Xa!d&Xa!e&Xa!f&Xa!h&Xa'y&Xa(U&Xa([&Xa(]&Xa(^&Xa!j&Xa(l&Xa~O![#oO!]#fO!_#gO!i#nO!P&Xa(_&Xa{&Xa!Z&Xa!X&XaP&Xa!g&Xa~P$:SO[-ZO~O[#qO!R#zO!Y-[O!P&_a![&_a!]&_a!_&_a!a&_a!b&_a!d&_a!e&_a!f&_a!h&_a!i&_a'y&_a'{&_a'|&_a(U&_a(Z&_a([&_a(]&_a(^&_a(_&_a!j&_a(l&_a{&_a!Z&_a'z&_a!X&_aP&_a!g&_a~O!P&ca(_&ca!j&ca(l&ca{&ca!Z&ca!X&caP&ca!g&ca~P$!vO[%YO`$nOk$eO!Y%]O![!VO!]!UO!k!ZO%[#QO&T!UO&U!UO&Y#OO&^!ZO&a#PO&h!ZO&i!ZO'mXO'sQO'v$cO(Z%ZO(^%[O(`YO(l%^O)R!WO)S!XO~O!Z-_O~P$>|O)U-`O~O[#qO)U-`O~O[-bO&k-aO~O[#qO'l&sa~O'z-eO~P#MTO(_$Xi{$Xi~P#(sO[bXkfXobXohX!PbX!YbX![bX!]bX!_bX!abX!bbX!dbX!ebX!fbX!hbX!ibX!jbX'ybX'{bX'|bX(UbX(ZbX([bX(]bX(^bX(_bX(lbX{bX!ZbX'zbX!RbX!XbXPbX!gbX~Oc-gO#`-gO'}-fO~Ok-hO~Oo%TO[ai!Pai!Yai![ai!]ai!_ai!aai!bai!dai!eai!fai!hai!iai!jai'yai'{ai'|ai(Uai(Zai([ai(]ai(^ai(_ai(lai{ai!Zai'zai!XaiPai!gai~O!Z-jO~P$!vO[#qO!Y#bO![#oO!_#gO'{#aO'|#aO(Z#cO!P&Oi!a&Oi!b&Oi!d&Oi!e&Oi!f&Oi!h&Oi!i&Oi'y&Oi(U&Oi([&Oi(]&Oi(^&Oi(_&Oi!j&Oi(l&Oi{&Oi!Z&Oi!X&OiP&Oi!g&Oi~O!]&Oi~P$FiO[#qO!Y#bO![#oO'{#aO'|#aO!P&Oi!a&Oi!b&Oi!d&Oi!e&Oi!f&Oi!h&Oi!i&Oi'y&Oi(U&Oi([&Oi(]&Oi(^&Oi(_&Oi!j&Oi(l&Oi{&Oi!Z&Oi!X&OiP&Oi!g&Oi~O!]&Oi!_&Oi(Z&Oi~P$HjO[#qO!Y#bO![#oO!]#fO!_#gO!b#jO!d#lO!e#mO!f#mO!h#mO!i#nO'{#aO'|#aO(Z#cO(^#eO!P&Oi'y&Oi(U&Oi([&Oi(]&Oi(_&Oi!j&Oi(l&Oi{&Oi!Z&Oi!X&OiP&Oi!g&Oi~O!a#iO~P$JkO!a&Oi~P$JkO[#qO!Y#bO![#oO!]#fO!_#gO!d#lO!e#mO!f#mO!h#mO!i#nO'{#aO'|#aO(Z#cO!P&Oi!a&Oi!b&Oi'y&Oi(U&Oi([&Oi(]&Oi(_&Oi!j&Oi(l&Oi{&Oi!Z&Oi!X&OiP&Oi!g&Oi~O(^#eO~P$LsO(^&Oi~P$LsO[#qO!Y#bO![#oO!]#fO!_#gO!i#nO'{#aO'|#aO(Z#cO!P&Oi!a&Oi!b&Oi!d&Oi'y&Oi(U&Oi([&Oi(]&Oi(^&Oi(_&Oi!j&Oi(l&Oi{&Oi!Z&Oi!X&OiP&Oi!g&Oi~O!e#mO!f#mO!h#mO~P$N{O!e&Oi!f&Oi!h&Oi~P$N{O!]#fO~P$FiO[#qO!Y#bO![#oO!]#fO!_#gO!a#iO!b#jO!d#lO!e#mO!f#mO!h#mO!i#nO'{#aO'|#aO(Z#cO([#dO(]#dO(^#eO~O!P&Oi'y&Oi(U&Oi(_&Oi!j&Oi(l&Oi{&Oi!Z&Oi!X&OiP&Oi!g&Oi~P%#bO!P-kO{'wX~P$!vO!P-kO{'wX~O{-mO~O[#qO!R#zO!P&_i![&_i!]&_i!_&_i!a&_i!b&_i!d&_i!e&_i!f&_i!h&_i!i&_i'y&_i'{&_i'|&_i(U&_i(Z&_i([&_i(]&_i(^&_i(_&_i!j&_i(l&_i{&_i!Z&_i'z&_i!X&_iP&_i!g&_i~O!Y-[O~P%%zO!P&ci(_&ci!j&ci(l&ci{&ci!Z&ci!X&ciP&ci!g&ci~P$!vO!Z-rO~P$>|O!P-tO!X(mX~P$!vO'v-wO~O!Y-yO'{(sO(l-{O~O!P-tO!X(mX~O!X-|O~O(U#pO!P^i'y^i(_^i!j^i(l^i{^i!Z^i!X^iP^i!g^i~P%#bO!V-}O~Ok(|O[!Ua!P!Ua(U!Ua(c!Ua~O[.UOk.VO!P.VO!R.SO!V.VO!Y.TO![.VO!].VO!_.VO!a.VO!b.VO!d.VO!e.VO!f.VO!h.VO!i.VO!j.VO!k.VO'mXO'sQO'z.VO'{.VO'|.VO(U.VO(Z.PO([.QO(].QO(^.RO(_.VO(`YO~O{.YO~P%+PO!V$RO~O!P)PO(U(Xa(c(Xa~O(c.^O~O[mXcmXklXomXqmXrmXsmXtmXumXvmXzmX!YmX!pmX!qmX!rmX!smX!umX!xmX#`mX'vmX(ZmX(]mX(^mX!RmX!PmX(UmX{mXPmX!gmX~O(_mX|mX'zmX![mX!]mX!_mX!amX!bmX!dmX!emX!fmX!hmX!imX'ymX'{mX'|mX([mX!jmX(lmX!ZmX!XmX#QmX#SmX~P%-mO(_.`O~Oq!]Or!]Os!]Ot!]Ou!]Ov!]Oz!^O!p!`O!q!`O!r!`O!s!`O!u!aO~O[(dic(dik(di!Y(di!x(di#`(di'v(di(Z(di(](di(^(di{(di!P(di(U(di(l(diP(di!g(di!R(di'z(di(_(di~P%1[Oc(oO#`(oO'}7uO~O[$sO!Y$rO(_!}i!P!}i(l!}i~O{!}iP!}i!g!}i~P%3nOq!]Or!]Os!]Ot!]Ou!]Ov!]O|)fO#Q)hO#S)iO'|)eO[#Oi!R#Oi!Y#Oi'z#Oi(l#Oi(_#Oi!P#Oi~O!u!aO~P%4^O`!ROk$VOq!]Or!]Os!]Ot!]Ou!]Ov!]O#t<]O%q!PO%w!}O%x!RO'v$UO~Ox7^O#s7fO%k7`O%o7bO~P%5lO[.iOq#PXr#PXs#PXt#PXu#PXv#PX|#PX!R#PX!Y#PX#Q#PX#S#PX'z#PX'|#PX(l#PX{#PX!P#PX(_#PXP#PX!g#PX(U#PX~O[.jO~O!Z.kO~P$!vO!Z.kO(Z.mO~P#&bO!Z.kO~PNbO[.rOckOk8gO!Y.qO!x!bO#`kO'v$cO(U.vO(Z.oO~O(].sO(^.sO(l.uO{!|X!P!|XP!|X!g!|X~P%8yO!P.xO{(gX~O{.zO~Oq!]Or!]Os!]Ot!]Ou!]Ov!]O{paPpa!Ppa!gpa(Upa(_pa~P! {O[$sO!Y*wO{paPpa!Ppa!gpa(Upa(_pa~O!R#zO~PNbOk)VO~P$*OO!P*QO!Z(kX~OP(}X!P(}X!g(}X~P$!vO(U/POP(PX!P(PX!g(PX~O!P/QOP(OX!g(OX~OP/SO!g/SO~O!P*OO!Z)Ta~O!P*QO!Z(ka~O[#qO!R#zO~O!P/ZO!R(xX(l(xX~O(_/]O~O(_/^O~O[%YO`![Ok8aOx!xO!R#zO!Y%]O![!VO!]!UO!k!ZO#s!|O#t!{O%[#QO%k!yO%o!zO%q!PO%w!}O%x!RO&T!UO&U!UO&Y#OO&^!ZO&a#PO&h!ZO&i!ZO'mXO'sQO'v8YO(U)pO(WZO(Z%ZO(^%ZO(`YO)R!WO)S!XO{'wP{(gP~P%1[O[eO`![OckOkTOq!]Or!]Os!]Ot!]Ou!]Ov!]Ox!xOz!^O![!VO!]!UO!k!ZO!ovO!p!_O!q!`O!r!`O!s!`O!u!aO!x!bO#S!qO#`kO#p!tO#s!|O#t!{O#y!cO#}!wO$S!nO$T!oO$Z!dO$`!eO$b!fO$c!gO$g!hO$i!iO$k!jO$m!kO$o!lO$q!mO$x!pO$}!rO%Q!sO%V!uO%[#QO%`!vO%k!yO%o!zO%q!PO%w!}O%x!RO&T!UO&U!UO&Y#OO&^!ZO&a#PO&h!ZO&i!ZO'mXO'sQO'vRO(WZO(ZbO(]gO(^fO(_pO(`YO)R!WO)S!XO~O!R*^O!X%xO!Y/`O'{(sO~P%@oO!P*aO(_(qa~O(_/jO~P$!vO(_/^O~P!5]Oq!]Or!]Os!]Ot!]Ou!]Ov!]O{#Ua!P#UaP#Ua!g#Ua(U#Ua(_#Ua~P! {O[$sO!Y*wO{#Ua!P#UaP#Ua!g#Ua(_#Ua~O(U#Ua~P%F}Oq!]Or!]Os!]Ot!]Ou!]Ov!]O#Q)hO#S)iO'|9{O[#Va!R#Va!Y#Va(_#Va(l#Va~O!Z/rO(Z/sO~P#&bO!Z/rO~P$!vO!Z/rO~PNbO[$sO{/tO!Y*wO~O[$sO!Y*wO{#Ya!P#YaP#Ya!g#Ya(_#Ya~O(U#Ya~P%I`O{/uO~O{/vO~O(_/xO~O{/yO~P+ZO{/yO(_#`O~O{/yO~O$^0OO[$Yi`$Yic$Yik$Yiq$Yir$Yis$Yit$Yiu$Yiv$Yix$Yiz$Yi!R$Yi!Y$Yi![$Yi!]$Yi!k$Yi!o$Yi!p$Yi!q$Yi!r$Yi!s$Yi!u$Yi!x$Yi#S$Yi#`$Yi#p$Yi#s$Yi#t$Yi#y$Yi#}$Yi$S$Yi$T$Yi$Z$Yi$`$Yi$b$Yi$c$Yi$g$Yi$i$Yi$k$Yi$m$Yi$o$Yi$q$Yi$x$Yi$}$Yi%Q$Yi%V$Yi%[$Yi%`$Yi%k$Yi%o$Yi%q$Yi%w$Yi%x$Yi&T$Yi&U$Yi&Y$Yi&^$Yi&a$Yi&h$Yi&i$Yi'l$Yi'm$Yi's$Yi'v$Yi(W$Yi(Z$Yi(]$Yi(^$Yi(_$Yi(`$Yi)R$Yi)S$Yi!X$Yi~O[0QO~O(_0SO~P#(sO[%OOckOk8gO!Y%QO!x!bO#`kO'v8UO(Z<dO(]<eO(^<eO~O(_0VO~PNbO(_0SO~O[+nOq!]Or!]Os!]Ot!]Ou!]Ov!]O!x!bO!y$oO'v+jO(Z+kO~O(Z0[O~O[$sO!P0_O!Y0^O(_(uX~O(_0bO~O!R!OO$Z!dO$`!eO$b!fO$c!gO$g+uO$i!iO$k!jO$m!kO$o!lO$q!mO'v7[Oc$Ri!o$Ri!x$Ri#S$Ri#`$Ri#p$Ri#y$Ri#}$Ri$S$Ri$T$Ri$x$Ri$}$Ri%Q$Ri%V$Ri%`$Ri'l$Ri(]$Ri!X$Ri$^$Ri~P#F]O[0fO~O$z+xO[$wi`$wic$wik$wiq$wir$wis$wit$wiu$wiv$wix$wiz$wi!R$wi!Y$wi![$wi!]$wi!k$wi!o$wi!p$wi!q$wi!r$wi!s$wi!u$wi!x$wi#S$wi#`$wi#p$wi#s$wi#t$wi#y$wi#}$wi$S$wi$T$wi$Z$wi$`$wi$b$wi$c$wi$g$wi$i$wi$k$wi$m$wi$o$wi$q$wi$x$wi$}$wi%Q$wi%V$wi%[$wi%`$wi%k$wi%o$wi%q$wi%w$wi%x$wi&T$wi&U$wi&Y$wi&^$wi&a$wi&h$wi&i$wi'l$wi'm$wi's$wi'v$wi(W$wi(Z$wi(]$wi(^$wi(_$wi(`$wi)R$wi)S$wi!X$wi$^$wi~O[$sO~O!X0iO~P!QO{0jO!P0kO~P$!vO!P0lOP(nX!g(nX~OP0nO!g0nO~O(U0qO(l0pOP#rX!P#rX!g#rX~P!3aO(U0qO(l0pOP#rX!P#rX!g#rX~P!2{Oo'OO~O[$sO!Y$rO(_0tO~Ok8RO(_(RX~P$$kO'v+jO~O{0vO~P$!vO[$sO!Y*wO!R%^i(_%^i(l%^i~O[$sO!R!OO!Y$rO~O!P0wO(U0yO!R(TX~Ok$VO'v$UO~O`!ROk$VOx;RO!o0|O#s7hO#t;TO%k;SO%o7cO%q!PO%w!}O%x!RO'v$UO(WZO~P%1[O(_0}O~PAvO[1ROk(TO!R#zO!x!bO#`1TO'v(SO'z1VO(Z1OO(]1SO(^1SO~O(_1WO(l1YO~P&0RO`!ROk8rOx;ROz!^O!O,sO!X1]O!o,qO#p,^O#s7hO#t;TO#y!cO$q!mO%Q!sO%j,rO%k;SO%o7cO%q!PO%w!}O%x!RO'v8[O(WZO~PEgO[%OO`!ROckOk8rOx;RO!Y%QO!x!bO#`kO#s7hO#t;TO%`!vO%k;SO%o7cO%q!PO%w!}O%x!RO'v8[O(Z$}O(]gO(^gO~P%1[O`!ROk$VOx1cO#s!|O#t1bO#}!wO%k1dO%o!zO%q!PO%w!}O%x!RO'v$UO(WZO~P%1[O'z1eO~O|1hO[wikwiqwirwiswitwiuwivwizwi!Ywi!pwi!qwi!rwi!swi!uwi!xwi#`wi'vwi(Zwi(]wi(^wi(_wi(Uwi(lwi~O!R'XO'z'WOcwi{wi!PwiPwi!gwi~P&4xO|1kO[%mik%miq%mir%mis%mit%miu%miv%miz%mi!Y%mi!p%mi!q%mi!r%mi!s%mi!u%mi!x%mi#`%mi'v%mi(Z%mi(]%mi(^%mi(_%mi(U%mi(l%mi~O!R'XO'z'WOc%mi{%mi!P%miP%mi!g%mi~P&7SO(l1lO!P%sX!X%sX~O!P1mO!X(|X~O!X1oO~O`1qOk$VO%q!PO'v$UO~O!R'dO[%nic%nik%niq%nir%nis%nit%niu%niv%niz%ni!Y%ni!p%ni!q%ni!r%ni!s%ni!u%ni!x%ni#`%ni'v%ni(Z%ni(]%ni(^%ni(_%ni{%ni!P%ni(U%ni(l%niP%ni!g%ni|%ni#Q%ni#S%ni'|%ni~O'z-PO~P&:UO|1vO'z'WO[%tik%tiq%tir%tis%tit%tiu%tiv%tiz%ti!Y%ti!p%ti!q%ti!r%ti!s%ti!u%ti!x%ti#`%ti'v%ti(Z%ti(]%ti(^%ti(_%ti{%ti!P%ti(U%ti(l%tiP%ti!g%ti~O!R'XOc%ti~P&<iO{1wO~P$!vO{1xO~O!Y&_i~P%%zO`$nOk$eO![!VO!]!UO!k!ZO%[#QO&T!UO&U!UO&Y#OO&^!ZO&a#PO&h!ZO&i!ZO'mXO'sQO'v$cO(`YO)R!WO)S!XO[&fa!R&fa!Y&fa(Z&fa(]&fa(^&fa~O)U1|O~O'v&vO(U1}O{)WP~O&k2PO~OklXomXo%{X~Oc2RO#`2RO'}-fO~O!P-kO{'wa~O[$sO!Y*wO!R%^q(_%^q(l%^q~O[#qO!R#zO!P&_q![&_q!]&_q!_&_q!a&_q!b&_q!d&_q!e&_q!f&_q!h&_q!i&_q'y&_q'{&_q'|&_q(U&_q(Z&_q([&_q(]&_q(^&_q(_&_q!j&_q(l&_q{&_q!Z&_q'z&_q!X&_qP&_q!g&_q~O!Y&_q~P&B_O!Y-[O~P&B_O!R#zO!Y(rO'{(sO!P'[X!X'[X~P!>{O!P-tO!X(ma~O!Z2^O~P#1UO!X2bO~P%+PO!Z2bO~P%+PO{2bO~P%+PO{2gO~P%+PO[2hO!P&}a(U&}a(c&}a~O!P)PO(U(Xi(c(Xi~O[$sO!Y$rO(_!}q!P!}q(l!}q~O{!}qP!}q!g!}q~P&FhOq!]Or!]Os!]Ot!]Ou!]Ov!]O|)fO#Q)hO#S)iO[#Oq!R#Oq!Y#Oq(l#Oq(_#Oq!P#Oq~O'|)eO'z#Oq~P&GWO[&TO!Y&SO{#Ta!P#Ta(_#TaP#Ta!g#Ta~O(Z8wO(]8xO(^8xOq#Tar#Tas#Tat#Tau#Tav#Ta|#Ta!R#Ta#Q#Ta#S#Ta'z#Ta'|#Ta(l#Ta~P&HcO`!ROk$VOx7^O#s7fO#t<]O%k7`O%o7bO%q!PO%w!}O%x!RO'v$UO~O{2pO~PNbO{(iP~P!*yO!Z2sO~P$!vO!Z2sO~PNbO[.rOckOk$|O!Y.qO!x!bO#`kO'v$cO(Z:jO(]2uO(^2uO~O{!|a!P!|aP!|a!g!|a~P&KcO[.rOckOq!]Or!]Os!]Ot!]Ou!]Ov!]O!Y.qO!x!bO!y$oO#`kO'v$cO{#UX!P#UXP#UX!g#UX~Ok8gO(Z.oO(]:sO(^:sO~P&LeO[$sO{!|a!P!|aP!|a!g!|a~O!Y*wO~P&M|O[.rO`!ROckOk8iOx!xO!Y.qO!x!bO#`kO#s!|O#t!{O%k!yO%o!zO%q!PO%w!}O%x!RO'v8WO(U)pO(WZO(Z:jO(]2uO(^2uO{(gP~P%1[O(]:sO(^:sO{#YX!P#YXP#YX!g#YX~P%8yO!Y$rO(l2yO~P&M|O'v&vO{#eX!P#eXP#eX!g#eX~O(U2|O(WZO~P4nO!P.xO{(ga~Oq!]Or!]Os!]Ot!]Ou!]Ov!]O{piPpi!Ppi!gpi(Upi(_pi~P! {O[$sO!Y*wO{piPpi!Ppi!gpi(Upi(_pi~O!P&Wq(_&Wq!j&Wq(l&Wq{&Wq!Z&Wq!X&WqP&Wq!g&Wq~P$!vO!P/QOP(Oa!g(Oa~O!P'ia!Z'ia~P$!vO!Z3TO~O(U3UO!P%Xa!R%Xa(l%Xa~O!P/ZO!R(xa(l(xa~O!P3XO(_#`O!X(mX~P$!vO!P#{i(_#{i~P$!vO[*]O!R#zO!Y$rO(l*_O!P'^a(_'^a~O(_3ZO~P$!vO[$sO!Y*wO{#Ui!P#UiP#Ui!g#Ui(_#Ui~O(U#Ui~P''sOq!]Or!]Os!]Ot!]Ou!]Ov!]O#Q)hO#S)iO[#Vi!Y#Vi(_#Vi~O'|9{O!R#Vi(l#Vi~P'(cO!Z3]O~P$!vO!Z3]O(Z3_O~P#&bO!Z3]O~PNbO(_3`O~O[*]O!P*aO!R#zO!Y$rO(_(qX~O(l3aO~P'*SO{3cO~P#(sO{3cO~O$^3eO[$Yq`$Yqc$Yqk$Yqq$Yqr$Yqs$Yqt$Yqu$Yqv$Yqx$Yqz$Yq!R$Yq!Y$Yq![$Yq!]$Yq!k$Yq!o$Yq!p$Yq!q$Yq!r$Yq!s$Yq!u$Yq!x$Yq#S$Yq#`$Yq#p$Yq#s$Yq#t$Yq#y$Yq#}$Yq$S$Yq$T$Yq$Z$Yq$`$Yq$b$Yq$c$Yq$g$Yq$i$Yq$k$Yq$m$Yq$o$Yq$q$Yq$x$Yq$}$Yq%Q$Yq%V$Yq%[$Yq%`$Yq%k$Yq%o$Yq%q$Yq%w$Yq%x$Yq&T$Yq&U$Yq&Y$Yq&^$Yq&a$Yq&h$Yq&i$Yq'l$Yq'm$Yq's$Yq'v$Yq(W$Yq(Z$Yq(]$Yq(^$Yq(_$Yq(`$Yq)R$Yq)S$Yq!X$Yq~O(_3fO~O(_3hO~PNbO'z3iO(l*_O~P'*SO(_3hO~P$!vO{3kO~PNbO(_3mO~O[+nOq!]Or!]Os!]Ot!]Ou!]Ov!]O!x!bO'v+jO(Z+kO~O[$sO!Y0^O!P$ra(_$ra{$ra~O!Z3sO(Z3tO~P#&bO!P0_O(_(ua~O[$sO{3wO!Y0^O~O!R!OO$Z!dO$`!eO$b!fO$c!gO$g+uO$i!iO$k!jO$m!kO$o!lO$q!mO'v7[Oc$Rq!o$Rq!x$Rq#S$Rq#`$Rq#p$Rq#y$Rq#}$Rq$S$Rq$T$Rq$x$Rq$}$Rq%Q$Rq%V$Rq%`$Rq'l$Rq(]$Rq!X$Rq$^$Rq~P#F]O(_3yO~O'mXO'sQO~O!P0lOP(na!g(na~Oo%TO(l4OOP#rak(RX!P#ra!g#ra(U(RX~P$$kO`!ROk$VOx7]O#s7eO#t7dO%k7_O%o7aO%q!PO%w!}O%x!RO'v$UO~O'v+jOP#va!P#va!g#va~Oo%TO(l4OOP#ra[(SXc(SXk(SXq(SXr(SXs(SXt(SXu(SXv(SXz(SX|(SX!P#ra!R(SX!Y(SX!g#ra!p(SX!q(SX!r(SX!s(SX!u(SX!x(SX#`(SX'v(SX'z(SX(U(SX(Z(SX(](SX(^(SX~O#s4RO#t4RO~Ok$VO!O4UO'v$UO~O!P0wO!R(Ta~O!P0wO(U4XO!R(Ta~O(_4ZO(l4]O~P&0RO`!ROk$VOx;RO#s7hO#t;TO%k;SO%o7cO%q!PO%w!}O%x!RO'v$UO~P%1[O[1ROk(TOq!]Or!]Os!]Ot!]Ou!]Ov!]O!x!bO!y$oO#`1TO'v(SO(Z1OO(]1SO(^1SO~O(Z4bO~O[$sO!P4eO!R*^O!Y4dO'z1VO~O(_4ZO(l4gO~P';oO[1ROk(TO!x!bO#`1TO'v(SO(Z=ZO(];wO(^;wO~O[1ROk(TO!x!bO#`1TO'v(SO(Z1OO(]1SO(^1SO~Oo%TO[(fX!P(fX!R(fX!Y(fX'z(fX(_(fX(l(fX{(fX~O(_4ZO~O(_4mO~PAvOk)VO(_(SX~P$$kOo%TOk(RX(_(SX~P$$kO(_4nO~O'v&vO!P'gX!X'gX~O!P1mO!X(|a~Oo%TO[({ac({ak({aq({ar({as({at({au({av({az({a!R({a!Y({a!p({a!q({a!r({a!s({a!u({a!x({a#`({a'v({a(Z({a(]({a(^({a(_({a{({a!P({a![({a!]({a!_({a!a({a!b({a!d({a!e({a!f({a!h({a!i({a'y({a'{({a'|({a(U({a([({a!j({a(l({aP({a!g({a!Z({a'z({a!X({a|({a#Q({a#S({a~O!R'dO[%nqc%nqk%nqq%nqr%nqs%nqt%nqu%nqv%nqz%nq!Y%nq!p%nq!q%nq!r%nq!s%nq!u%nq!x%nq#`%nq'v%nq(Z%nq(]%nq(^%nq(_%nq{%nq!P%nq(U%nq(l%nqP%nq!g%nq|%nq#Q%nq#S%nq'|%nq~O`$nO!R#zO!k!ZO&^!ZO&h!ZO&i!ZO'mXO'sQO'v$cO(`YO)R!WO)S!XO[)Qi!Y)Qi![)Qi!])Qi!_)Qi!a)Qi!b)Qi!d)Qi!e)Qi!f)Qi!h)Qi!i)Qi'y)Qi'{)Qi'|)Qi(U)Qi(Z)Qi([)Qi(])Qi(^)Qi!j)Qi(l)Qi~Ok$eO%[#QO&T!UO&U!UO&Y#OO&a#PO!P)Qi(_)Qi{)Qi!Z)Qi!X)QiP)Qi!g)Qi~P'EOO{4|O~O!Z4}O~P$!vO!P&cq(_&cq!j&cq(l&cq{&cq!Z&cq!X&cqP&cq!g&cq~P$!vO!P5OO{)WX~O{5QO~O)U5RO~O!P]y(_]y!j]y(l]y{]y!Z]y!X]yP]y!g]y~P$!vO{'ja!P'ja~P$!vO[#qO!R#zO!P&_y!Y&_y![&_y!]&_y!_&_y!a&_y!b&_y!d&_y!e&_y!f&_y!h&_y!i&_y'y&_y'{&_y'|&_y(U&_y(Z&_y([&_y(]&_y(^&_y(_&_y!j&_y(l&_y{&_y!Z&_y'z&_y!X&_yP&_y!g&_y~O!P&cy(_&cy!j&cy(l&cy{&cy!Z&cy!X&cyP&cy!g&cy~P$!vO[$sO!Y*wO!R%^y(_%^y(l%^y~O!P'[a!X'[a~P$!vO!Z2^O~P$!vO!P#li!X#li~P$!vO!X5TO~P%+PO!Z5TO~P%+PO{5TO~P%+PO{5VO~P%+PO[$sO!Y$rO(_!}y!P!}y(l!}y~O{!}yP!}y!g!}y~P'NqOq#Tir#Tis#Tit#Tiu#Tiv#Ti|#Ti!R#Ti#Q#Ti#S#Ti'z#Ti'|#Ti(l#Ti{#Ti!P#Ti(_#TiP#Ti!g#Ti~O[$sO!Y*wO~P( aO[&TO!Y&SO(Z8wO(]8xO(^8xO~P( aO{5XO~P$!vO!P5YO{(iX~O{5[O~O[$sO{!|i!P!|iP!|i!g!|i~O!Y*wO~P(#nO{#YX!P#YXP#YX!g#YX~P&KcO!Y$rO~P(#nO['TXc&vXk&vXq'TXr'TXs'TXt'TXu'TXv'TX{'TX!P'TX!Y'TX!x&vX#`&vX'v&vX(Z'TX(]'TX(^'TXP'TX!g'TX~O{#ci!P#ciP#ci!g#ci~P$!vO[$sO!Y*wO{pqPpq!Ppq!gpq(Upq(_pq~OP)PX!P)PX!g)PX~P$!vO(U5^OP)OX!P)OX!g)OX~O!Z5`O~P$!vO!Z5`O~PNbO{$]i!P#{a(_#{a~O(_5cO~P$!vO{5eO~PNbO{5eO~P#(sO{5eO~O[$sO!Y0^O!P$ri(_$ri{$ri~O!Z5lO~P$!vO!Z5lO(Z5nO~P#&bO!Z5lO~PNbO[$sO!Y0^O!P'aa(_'aa~O{5oO'mXO'sQO~O{5oO~O'v+jO(U0qO(l0pOP#rX!P#rX!g#rX~O(U5rO!P&wa!R&wa~O!P0wO!R(Ti~O(_5vO(l5xO~P';oO(_5vO~O(_5vO(l5|O~P&0ROq!]Or!]Os!]Ot!]Ou!]Ov!]O~P'<vO[$sO!Y4dO!P!va!R!va'z!va(_!va(l!va~Oq!]Or!]Os!]Ot!]Ou!]Ov!]O|6QO#Q)hO#S)iO[!za!Y!za~O'|)eO!P!za!R!za'z!za(_!za(l!za~P(,iO!Z6UO(Z6VO~P#&bO!P4eO!R#zO'z1VO(_5vO(l5|O~O!R#zO~P#;}O[$sO{6YO!Y4dO~O[$sO!Y4dO!P#ia!R#ia'z#ia(_#ia(l#ia~O(_#ja~P$!vO(_5vO~P$!vO|-VO'z'WO[%tak%taq%tar%tas%tat%tau%tav%taz%ta!Y%ta!p%ta!q%ta!r%ta!s%ta!u%ta!x%ta#`%ta'v%ta(Z%ta(]%ta(^%ta~O!R'XO(_6ZOc%ta~P(/jO(_6ZO~P$/YO(_6ZO~P$2SO!P%si!X%si~P$!vO!Y-[O[&bi!P&bi!R&bi![&bi!]&bi!_&bi!a&bi!b&bi!d&bi!e&bi!f&bi!h&bi!i&bi'y&bi'{&bi'|&bi(U&bi(Z&bi([&bi(]&bi(^&bi(_&bi!j&bi(l&bi{&bi!Z&bi'z&bi!X&biP&bi!g&bi~O'v&vO(U6`O~O!P5OO{)Wa~O{6bO~P%+PO[$sO!Y*wO{#Tq!P#Tq(_#TqP#Tq!g#Tq~Oq#Tqr#Tqs#Tqt#Tqu#Tqv#Tq|#Tq!R#Tq#Q#Tq#S#Tq'z#Tq'|#Tq(l#Tq~P(4fO!P5YO{(ia~O{#cq!P#cqP#cq!g#cq~P$!vO!X'[a(_$Xi~P#(sO{$]q!P#{i(_#{i~P$!vO{6fO~PNbO{6fO~P#(sO{6fO~O{6iO~P$!vO{6iO~O[$sO!Y0^O!P$rq(_$rq{$rq~O!Z6kO~P$!vO!Z6kO~PNbO(_6lO~O(l4OOP#ra!P#ra!g#ra~O(U6mO!P&wi!R&wi~O!P0wO!R(Tq~O!P4eO!R#zO'z1VO(_6nO(l6pO~O(_6nO~O(_6nO~P$!vO(_6nO(l6sO~P';oO[$sO!Y4dO!P!vi!R!vi'z!vi(_!vi(l!vi~Oq!]Or!]Os!]Ot!]Ou!]Ov!]O|6QO#Q)hO#S)iO[!zi!Y!zi~O'|)eO!P!zi!R!zi'z!zi(_!zi(l!zi~P(:eO!Z6xO~P$!vO!Z6xO(Z6zO~P#&bO!Z6xO~PNbO[$sO!Y4dO!P'Ya!R'Ya'z'Ya(_'Ya(l'Ya~O{6{O~P#(sO{6{O~O[$sO!Y0^O!P$ry(_$ry{$ry~O(_7OO~O(_7OO~P$!vO!P4eO!R#zO'z1VO(_7OO(l7RO~O[$sO!Y4dO!P!vq!R!vq'z!vq(_!vq(l!vq~O!Z7TO~P$!vO!Z7TO~PNbO(_7VO~P$!vO(_7VO~O[$sO!Y4dO!P!vy!R!vy'z!vy(_!vy(l!vy~O(_7YO~P$!vO(_7YO~O[YXkfXoYXohX!PYX!RhX!YYX![YX!]YX!_YX!aYX!bYX!dYX!eYX!fYX!hYX!iYX!jYX'yYX'z$VX'{YX'|YX(UYX(ZYX([YX(]YX(^YX(_YX(lYX~Ok$VOx9WO!R'dO#t9WO'v$UO~Ok$VOx9XO!R'dO#t9XO'v$UO~Ok$VOx9YO!R'dO#t9YO'v$UO~O`!ROk$VOx<SO#s7gO#t<[O%k<WO%o7bO%q!PO%w!}O%x!RO'v$UO~O`!ROk$VOx;RO#s7hO#t;TO%k;SO%o7cO%q!PO%w!}O%x!RO'v$UO~O[#qO~P(BwO[;iO`$nOk8`O![;QO!];PO!k!ZO%[7jO&T;PO&U;PO&Y;UO&^!ZO&a7iO&h!ZO&i!ZO'mXO'sQO'v$cO(Z8pO(^8pO(`YO)R!WO)S!XO~O!Y;nO~P(DhOk8`O%[7jO&T;PO&U;PO&Y;UO&a7iO'z&Va~P!8OO[#_XklXomXo#_X!P#_X!RmX!Y#_X![#_X!]#_X!_#_X!a#_X!b#_X!d#_X!e#_X!f#_X!h#_X!i#_X!jlX'y#_X'{#_X'|#_X(U#_X(Z#_X([#_X(]#_X(^#_X(llX{#_XP#_X!g#_X~O(_#_X!Z#_X'z#_X!X#_X~P(FpO[mX[#_XcmXklXomXo#_XqmXrmXsmXtmXumXvmXzmX!YmX!Y#_X!pmX!qmX!rmX!smX!umX!xmX#`mX'vmX(ZmX(]mX(^mX{mX{#_X!PmX(UmX~O(_mX(lmX~P(IQO[#_XklXomXo#_X!P#_X!Y#_X{#_XP#_X!g#_X~O!R#_X(_#_X(l#_X'z#_X~P(K[OPmXP#_X!PmX!gmX!g#_X(UmX~P!;`O[mX[#_XklXomXo#_XqmXrmXsmXtmXumXvmXzmX!RmX!Y#_X!pmX!qmX!rmX!smX!umX!xmX#`mX'vmX(ZmX(]mX(^mX~O'zmX(_mX(lmX~P(LqOcmX{#_X!P#_X!YmX![#_X!]#_X!_#_X!a#_X!b#_X!d#_X!e#_X!f#_X!h#_X!i#_X!jlX'y#_X'{#_X'|#_X(U#_X(Z#_X([#_X(]#_X(^#_X(_#_X(llX~P(LqO[mX[#_XcmXklXomXo#_XqmXrmXsmXtmXumXvmXzmX!YmX!Y#_X!pmX!qmX!rmX!smX!umX!xmX#`mX'vmX(ZmX(]mX(^mX(_#_X~OklXomX(_#_X~O!Y;rO~P(DhOc(oO#`(oO%_(pO'}7uO~Oc(oO#`(oO%_(pO'}7yO~Oc(oO#`(oO%_(pO'}7vO~O[hXqhXrhXshXthXuhXvhX{hX!YhX(ZhX(]hX(^hXchXzhX!phX!qhX!rhX!shX!uhX!xhX#`hX'vhX~P!K}O[YXkfXoYXohX!PYX!YYX(_YX(lYX~O!RYX'zYX~P)'POkfXohX(_YX(lhX~O[YX[hXchXkfXoYXohXqhXrhXshXthXuhXvhXzhX!YYX!YhX!phX!qhX!rhX!shX!uhX!xhX#`hX'vhX(ZhX(]hX(^hX{YX{hX!PhX(UhX(lhX~O(_YX~P)(TO[YX[hXkfXoYXohXqhXrhXshXthXuhXvhX!PYX!PhX!RhX!YYX!YhX![YX!]YX!_YX!aYX!bYX!dYX!eYX!fYX!hYX!iYX!jYX'yYX'{YX'|YX(UYX(UhX(ZYX(ZhX([YX(]YX(]hX(^YX(^hX(lYX~OPYXPhX!gYX!ghX~P)*_OchXzhX{YX{hX!phX!qhX!rhX!shX!uhX!xhX#`hX'vhX(lhX~P)*_O[hXchXqhXrhXshXthXuhXvhXzhX!YhX!phX!qhX!rhX!shX!uhX!xhX#`hX'vhX(ZhX(]hX(^hX~P!K}O[YX[hXkfXoYXohXqhXrhXshXthXuhXvhXzhX!YYX!phX!qhX!rhX!shX!uhX!xhX#`hX'vhX(ZhX(]hX(^hX(_hX~O!RhX'zhX(lhX~P)/qOchX!YhX~P)/qO![7tO'z%|a~P!N_Oc#uO#`#uO&`7}O&d8OO'}7uO~Oc#uO#`#uO&`#wO&d#xO'}7xO~Oc#uO#`#uO&`#wO&d#xO'}7zO~Ok)]O!j8SO(l8SO~Oq!]Or!]Os!]Ot!]Ou!]Ov!]O~PDYOq!]Or!]Os!]Ot!]Ou!]Ov!]O!y$oO~PDYOc#uO#`#uO'}7wO~Oc#uO#`#uO'}7|O~Oc#uO#`#uO'}7vO~Oc#uO#`#uO'}7{O~O[%OOckOk8gOq!]Or!]Os!]Ot!]Ou!]Ov!]O!Y%QO!x!bO!y$oO#`kO'v$cO(Z8lO(]8nO(^8nO~O[%OOckOk8gO!Y%QO!x!bO#`kO'v$cO(Z8lO(]8nO(^8nO~Oc#uO#`#uO%_#vO'}7vO~Oc#uO#`#uO%_#vO'}7yO~Ok8RO~Ok8QO~O!j8SO(l8SO['xX!Y'xX!['xX!]'xX!_'xX!a'xX!b'xX!d'xX!e'xX!f'xX!h'xX!i'xX'y'xX'z'xX'{'xX'|'xX(U'xX(Z'xX(['xX(]'xX(^'xX~Oo%TO~P)8TO![7tO'z&Va~P#?yO[&TOq!]Or!]Os!]Ot!]Ou!]Ov!]O!Y&SO(Z8wO(]8xO(^8xO~O|#UX!R#UX#Q#UX#S#UX'z#UX'|#UX(l#UX{#UX!P#UX(_#UXP#UX!g#UX~P):PO[&TO!Y&SO(Z8wO(]8xO(^8xO~Oq#YXr#YXs#YXt#YXu#YXv#YX|#YX!R#YX#Q#YX#S#YX'z#YX'|#YX(l#YX{#YX!P#YX(_#YXP#YX!g#YX~P);nO|,vO[wa!Rwa!Ywa![wa!]wa!_wa!awa!bwa!dwa!ewa!fwa!hwa!iwa'ywa'{wa'|wa(Uwa(Zwa([wa(]wa(^wa(_wa!jwa(lwa~O'z'WO!Pwa{wa!Zwa!XwaPwa!gwa~P)=]O'z'WO[waqwarwaswatwauwavwa|wa!Ywa#Qwa#Swa'|wa(Zwa(]wa(^wa(_wa!Pwa(lwa~O!R'XO{waPwa!gwa~P)?gO!Rwa~P)?gO'zwakwaqwarwaswatwauwavwazwa!pwa!qwa!rwa!swa!uwa!xwa#`wa'vwa~P)=]O|,zO[%ma!R%ma!Y%ma![%ma!]%ma!_%ma!a%ma!b%ma!d%ma!e%ma!f%ma!h%ma!i%ma'y%ma'{%ma'|%ma(U%ma(Z%ma([%ma(]%ma(^%ma(_%ma!j%ma(l%ma~O'z'WO!P%ma{%ma!Z%ma!X%maP%ma!g%ma~P)BfO'z'WO[%maq%mar%mas%mat%mau%mav%ma|%ma!Y%ma#Q%ma#S%ma'|%ma(Z%ma(]%ma(^%ma(_%ma!P%ma(l%ma~O!R'XO{%maP%ma!g%ma~P)DpO!R%ma~P)DpO'z%mak%maq%mar%mas%mat%mau%mav%maz%ma!p%ma!q%ma!r%ma!s%ma!u%ma!x%ma#`%ma'v%ma~P)BfO!R%na![%na!]%na!_%na!a%na!b%na!d%na!e%na!f%na!h%na!i%na'y%na'{%na([%na!j%na!Z%na!X%na~P$4wO!R%ta![%ta!]%ta!_%ta!a%ta!b%ta!d%ta!e%ta!f%ta!h%ta!i%ta'y%ta'{%ta'|%ta([%ta!j%ta!Z%ta!X%ta~P$7gO'z'WO[%taq%tar%tas%tat%tau%tav%ta|%ta!Y%ta#Q%ta#S%ta'|%ta(Z%ta(]%ta(^%ta(_%ta!P%ta(l%ta~O!R'XO{%taP%ta!g%ta~P)JUO!R%ta~P)JUO![7tO!]7kO!_7lO!i7sO'z&Xa~P$:SO'z&ca!j&ca(l&ca~P#MTO[bXkfXohX!RbX~O[#qO!Y#bO![7tO!_7lO'{#aO'|#aO(Z#cO!a&Oi!b&Oi!d&Oi!e&Oi!f&Oi!h&Oi!i&Oi'y&Oi'z&Oi(U&Oi([&Oi(]&Oi(^&Oi!j&Oi(l&Oi~O!]&Oi~P)LzO[#qO!Y#bO![7tO'{#aO'|#aO!a&Oi!b&Oi!d&Oi!e&Oi!f&Oi!h&Oi!i&Oi'y&Oi'z&Oi(U&Oi([&Oi(]&Oi(^&Oi!j&Oi(l&Oi~O!]&Oi!_&Oi(Z&Oi~P)NiO[#qO!Y#bO![7tO!]7kO!_7lO!b7oO!d7qO!e7rO!f7rO!h7rO!i7sO'{#aO'|#aO(Z#cO(^#eO'y&Oi'z&Oi(U&Oi([&Oi(]&Oi!j&Oi(l&Oi~O!a7nO~P*!WO!a&Oi~P*!WO[#qO!Y#bO![7tO!]7kO!_7lO!d7qO!e7rO!f7rO!h7rO!i7sO'{#aO'|#aO(Z#cO!a&Oi!b&Oi'y&Oi'z&Oi(U&Oi([&Oi(]&Oi!j&Oi(l&Oi~O(^#eO~P*#|O(^&Oi~P*#|O[#qO!Y#bO![7tO!]7kO!_7lO!i7sO'{#aO'|#aO(Z#cO!a&Oi!b&Oi!d&Oi'y&Oi'z&Oi(U&Oi([&Oi(]&Oi(^&Oi!j&Oi(l&Oi~O!e7rO!f7rO!h7rO~P*%rO!e&Oi!f&Oi!h&Oi~P*%rO!]7kO~P)LzO[#qO!Y#bO![7tO!]7kO!_7lO!a7nO!b7oO!d7qO!e7rO!f7rO!h7rO!i7sO'{#aO'|#aO(Z#cO([#dO(]#dO(^#eO~O'y&Oi'z&Oi(U&Oi!j&Oi(l&Oi~P*'uO'z&ci!j&ci(l&ci~P#MTO(U#pO'y^i'z^i!j^i(l^i~P*'uOc(oO#`(oO'}#rO~Oc(oO#`(oO'}7wO~Oc(oO#`(oO'}7|O~Oc(oO#`(oO'}7{O~Oc(oO#`(oO'}7vO~Oc(oO#`(oO'}7xO~Oc(oO#`(oO'}7zO~Oq!]Or!]Os!]Ot!]Ou!]Ov!]O~P)6kOq!]Or!]Os!]Ot!]Ou!]Ov!]O~P!4hOq!]Or!]Os!]Ot!]Ou!]Ov!]O|)fO#Q)hO#S)iO'|<tO[#Oi!Y#Oi{#Oi(_#Oi!P#Oi(l#OiP#Oi!g#Oi~O!R#zO~P!,QO|#Ua!R#Ua#Q#Ua#S#Ua'z#Ua'|#Ua(l#Ua{#Ua!P#Ua(_#UaP#Ua!g#Ua~P):POq#Uar#Uas#Uat#Uau#Uav#Ua|#Ua!R#Ua#Q#Ua#S#Ua'z#Ua'|#Ua(l#Ua~P%F}Oq#Yar#Yas#Yat#Yau#Yav#Ya|#Ya!R#Ya#Q#Ya#S#Ya'z#Ya'|#Ya(l#Ya~P%I`O[(RXq(RXr(RXs(RXt(RXu(RXv(RXz(RX!p(RX!q(RX!r(RX!s(RX!u(RX!x(RX#`(RX'v(RX(Z(RX(](RX(^(RX(l(RX~Ok8QO!R(RX'z(RX(_(RX~P*0xO|1hO[wi!Rwi!Ywi![wi!]wi!_wi!awi!bwi!dwi!ewi!fwi!hwi!iwi'ywi'{wi'|wi(Uwi(Zwi([wi(]wi(^wi(_wi!jwi(lwi~O'z'WO!Pwi{wi!Zwi!XwiPwi!gwi~P*2jO'z'WO[wiqwirwiswitwiuwivwi|wi!Ywi#Qwi#Swi'|wi(Zwi(]wi(^wi(_wi!Pwi(lwi~O!R'XO{wiPwi!gwi~P*4tO!Rwi~P*4tO!Rwi![wi!]wi!_wi!awi!bwi!dwi!ewi!fwi!hwi!iwi'ywi'zwi'{wi'|wi([wi!jwi~P&4xO|1kO[%mi!R%mi!Y%mi![%mi!]%mi!_%mi!a%mi!b%mi!d%mi!e%mi!f%mi!h%mi!i%mi'y%mi'{%mi'|%mi(U%mi(Z%mi([%mi(]%mi(^%mi(_%mi!j%mi(l%mi~O'z'WO!P%mi{%mi!Z%mi!X%miP%mi!g%mi~P*7sO'z'WO[%miq%mir%mis%mit%miu%miv%mi|%mi!Y%mi#Q%mi#S%mi'|%mi(Z%mi(]%mi(^%mi(_%mi!P%mi(l%mi~O!R'XO{%miP%mi!g%mi~P*9}O!R%mi~P*9}O!R%mi![%mi!]%mi!_%mi!a%mi!b%mi!d%mi!e%mi!f%mi!h%mi!i%mi'y%mi'z%mi'{%mi'|%mi([%mi!j%mi~P&7SO'z-PO[%ni!P%ni!R%ni!Y%ni![%ni!]%ni!_%ni!a%ni!b%ni!d%ni!e%ni!f%ni!h%ni!i%ni'y%ni'{%ni'|%ni(U%ni(Z%ni([%ni(]%ni(^%ni(_%ni!j%ni(l%ni{%ni!Z%ni!X%niP%ni!g%niq%nir%nis%nit%niu%niv%ni|%ni#Q%ni#S%ni~O!R%ti![%ti!]%ti!_%ti!a%ti!b%ti!d%ti!e%ti!f%ti!h%ti!i%ti'y%ti'{%ti'|%ti([%ti!j%ti!Z%ti!X%ti~P&<iO'z'WO[%tiq%tir%tis%tit%tiu%tiv%ti|%ti!Y%ti#Q%ti#S%ti'|%ti(Z%ti(]%ti(^%ti(_%ti!P%ti(l%ti~O!R'XO{%tiP%ti!g%ti~P*@xO!R%ti~P*@xO`$nOk8`O![;QO!];PO!k!ZO%[7jO&T;PO&U;PO&Y;UO&^!ZO&a7iO&h!ZO&i!ZO'mXO'sQO'v$cO(`YO)R!WO)S!XO[&fa!R&fa!Y&fa(Z&fa(]&fa(^&fa~O[%{XklXomX!R%{X~Oc2RO#`2RO'}:bO~Oq!]Or!]Os!]Ot!]Ou!]Ov!]O|)fO#Q)hO#S)iO[#Oq!Y#Oq(_#Oq!P#Oq(l#Oq~O'|<tO{#OqP#Oq!g#Oq~P*DxO!R#Ta(_#Ta(l#Ta~P$)mOk$|O(Z:jO(]2uO(^2uO~P&LeO'z&Wq!j&Wq(l&Wq~P#MTOq#Uir#Uis#Uit#Uiu#Uiv#Ui|#Ui!R#Ui#Q#Ui#S#Ui'z#Ui'|#Ui(l#Ui~P''sOk8`O%[7jO&T;PO&U;PO&Y;UO&a7iO'z)Qi~P'EOO'z&cq!j&cq(l&cq~P#MTO'z]y!j]y(l]y~P#MTO'z&cy!j&cy(l&cy~P#MTO[$sO!Y*wO!R#Ti(_#Ti(l#Ti~O!R#Ti(_#Ti(l#Ti~P$)mOckOk8gO!x!bO#`kO'v$cO~O[.rO!Y.qO(Z.oO(]:sO(^:sO{#YX!P#YXP#YX!g#YX~P*JRO'|<tO{!za~P(,iO[$sO!Y4dO{#ia~O[$sO!Y*wO!R#Tq(_#Tq(l#Tq~O[$sO!Y4dO{!vi~O'|<tO{!zi~P(:eO[$sO!Y4dO{!vq~O[$sO!Y4dO{!vy~O(Z8fO~O[=SO(U'rO~P!,TOk9pO~Ok9qO~Ok9rO~Ok9sO~Ok9tO~Ok9uO~Ok9vO~Ok9pO!j#|O(l#|O~Ok9uO!j#|O(l#|O~Ok9vO!j#|O(l#|O~Oq!]Or!]Os!]Ot!]Ou!]Ov!]O|)fO!u!aO#Q)hO#S)iO[#Oa!Y#Oa(_#Oa!P#Oa(l#Oa~O'|<tO{#OaP#Oa!g#Oa~P*NoOk9uO!R#zOP(RX!P(RX!g(RX(U(RX{(RX(l(RX~P$$kOk9vO!R#zO~P$$kO{9}O~O!R#]a'z#]a~P#,pOk9tO{(RX!P(RX(U(RX(l(RX~P$$kO!Z:`O~P$>|O'z:aO~P#MTOc-gO#`-gO'}:bO~Ok:cO~O!Z:dO~P$>|O!R!}i'z!}i~P%3nO!u!aO~P*,sO{:mO~O!R!}q'z!}q~P&FhO!R!}y'z!}y~P'NqOq!]Or!]Os!]Ot!]Ou!]Ov!]O~P'<[Oq!]Or!]Os!]Ot!]Ou!]Ov!]O!y$oO~P'<[O[$sO!Y4dO{!va~Ok$VOx<nO!R'dO#t<nO'v$UO~O`!ROk$VOx<QO#s<^O#t<ZO%k<UO%o7aO%q!PO%w!}O%x!RO'v$UO~O`!ROk$VOx<TO#s<`O#t<]O%k<XO%o<YO%q!PO%w!}O%x!RO'v$UO~Oq!]Or!]Os!]Ot!]Ou!]Ov!]O~P& |Oq!]Or!]Os!]Ot!]Ou!]Ov!]O!y$oO~P& |Oq!]Or!]Os!]Ot!]Ou!]Ov!]O~P+&|Ox<TO#s<`O%k<XO%o<YO~P%5lOq!]Or!]Os!]Ot!]Ou!]Ov!]O|)fO#Q)hO#S)iO'|<vO[#Oi!P#Oi!R#Oi!Y#Oi(_#Oi(l#Oi~O'|<vO~P&GWO(Z;cO~O!R!}a'z!}a~P#$[O'|<uO{#VX!P#VXP#VX!g#VX(U#VX~P#BtO!R#YX(_#YX(l#YX~P$)mOq!]Or!]Os!]Ot!]Ou!]Ov!]O!R#Ua(_#Ua(l#Ua~P$)mOq!]Or!]Os!]Ot!]Ou!]Ov!]O#Q)hO#S)iO'|<uO[#Va{#Va!Y#Va!P#VaP#Va!g#Va(U#Va(_#Va~O[$sO!Y*wO!R#Ya(_#Ya(l#Ya~O[$sO!Y*wO!R#Ui(_#Ui(l#Ui~O'|<uO{#Vi!P#ViP#Vi!g#Vi(U#Vi~P'(cO(Z;|O~O(Z&PO(]&UO(^&UO(U#Ta~P&HcO{#Ti!P#TiP#Ti!g#Ti(U#Ti(_#Ti~O[$sO!Y*wO~P+0VO[&TO!Y&SO(Z&PO(]&UO(^&UO~P+0VO(U#Tq~P(4fO(Z<cO~O'|<vO~P#%SO!u!aO~P+*_O!R!}a~P#$[O!R#]a~P#,pOq!]Or!]Os!]Ot!]Ou!]Ov!]O!R#UX(_#UX(l#UX~P$)mO!R!}i~P%3nO[$sO!Y*wO!R#Ua(_#Ua(l#Ua~O!R!}q~P&FhO!R!}y~P'NqOU&j&m's(`!V#`'v'}&n&lRS!_!]c!a!k'{&U[&k)X&p&o!i!b&q&r&q~",
            goto: "%6i)XPPPPP)YP)]PP-[3VP6h6h9{P9{=bP>T>o?]Gt!!g!+[!3cP!<O!<t!=jP!>VPPPPPP!>sP!@mPPP!CZPP!EkP!HR!HV!HxP!IOPPPPP!IRP!IRPP!IRPPPPPPPP!I_!MW#!wPPPPP#!zP>W#$]PP>W#&v#)s#*Q#+m#-dP#-dP#.S#.v#/j#.v#.v#.v#*Q#*Q#*Q#0`#5^P#5|#*Q#)s#)s#:t#:z>W>W>W#:}#;b#=i#=q#=q#=xP#>Y#>aPP#>a#>a#>h#=xP#>l#?]#?hP#?z#At#A}#BWPP#Bm#CW#Ct#Db#BmP#Eo#E{P#BmP#BmPP#FO#Bm#BmP#BmP#BmP#BmP#BmP#I`P#Is#Is#Is#Is#BW#BWP#JQP#BW#AtP#JU#JUP#Jc#At#At#MyP#N^#Ni#No#NoP#At$ ePP#At$!P$!P!HR!HR!HR!HR!HR!HRPP!HR!>s!>sP$!SP$$P$$g!>s!>s!>sPP$$m$$p$$s$${9{6h$(Y$*^$,O6hPP6h$-v6hP6h6h6hP6hPP$1R6hP$-v$1_6hPPPPPPPPPPP)YP$4j$4p$7t$8T$8Z$9W$9^$9t$9z$:U$;d$<s$=R$=m$=s$>T$>g$>o$>u$?P$?_$?h$?p$?v$@R$@b$@l$@r$@x$AP$A`$Af$Cd$Cj$Cp$Cw$DOPPPPPPPPPPP$DU$DYPPPPP$Ky$$m$K|%!U%$v%(XP%([P%(`%(cPPPPPPPPP%(o%*[%+e%,j%,p%/g%/j%1`P%1f%1j%1m%1s%2P%2Z%2d%3c%4O%4U%4o%5P%5S%5d%5q%5}$$m$$p$$p%6QPP%6UP%6c%6fR#XP'rtObefj}!O!U!V!f!i!n!q#O#Q#]#_#b#f#g#h#i#j#k#l#m#n#o#q#x#z#|$r%T%Y%Z%[%]%h%u%w&S&a&b&f&g&r&w&z'R'n'p'v(l(r)k)m)w*O*U*]*^*_*l*n*w*y*{+[+_+e+q+t+{-[-_-e-k-r-t-y-{.i.m.q.u/Q/`/q/s0O0Q0S0V0^0c0f1V1Y1l1x2y3X3_3a3e3h3i3k3r3t4]4d4g5c5e5n5x5|6T6V6f6i6p6s6z6{7R7j7k7l7m7n7o7p7q7r7s7t8O8S8p9}:`:a:d:m;P;Q;U;i;n;r=O=SU%it%j3zQ&Z!_Q'w#Rd.V)O.S.T.U.X2c2d2e2h5UR3z0kdhObef}!O%w&w*^+{#n%Pgnuv!t$[$j$k$p$}%O%p'P'Q'T'X)Z)`)b)o*a+Y+d+r,X,i,o,q.c.n.o.r.s/z2u8d8e8f8k8l8m8n9w9x9y9z:e:f:j:s;a;b;c<a<b<c<d<e<r<s<xS%Vj/`&S%}!U!V!f!i!q#O#Q#_#b#f#g#h#i#j#k#l#m#n#o#q#x#z#|$r%T%Y%Z%[%]%h%u&S&a&b&f&g&r&z'R'n'p'v(l(r)k)m)w*O*U*]*_*l*n*w*y*{+[+_+e+q+t-[-_-e-k-r-t-y-{.i.m.u/Q/q/s0O0Q0S0V0^0c0f1V1Y1l1x2y3X3_3a3e3h3i3k3r3t4]4d4g5c5e5n5x5|6T6V6f6i6p6s6z6{7R;i;n;r=SQ&_!cQ&y!rQ'w#UQ'x#RQ'y#SQ)y%QQ+P&YQ+V&`S,|'d1mQ/V*QQ1y-ZQ1}-bQ2{.vQ6`5OQ8o.q!T8u!n#]7j7k7l7m7n7o7p7q7r7s7t8O8S8p9}:`:a:d:m;P;Q;U=O%b#^S![$d$n$t%U%|&O&h&q&t'o'u(P(Q(Y(Z([(](^(_(`(a(b(c(d(e(k(q(x)j)z*m*x+W+c+},`-X-v.l.}/T/_/a/i/p/|0U1z1{2Q2S2X2Z2_2`2o2z3P3^3g3j3q4k4l4v5]5_5a5d5g5m5z6S6e6q6y7P7W8^8v9_9a9c9d9e9f9g9h9i9j9k9l9n9o:k:n:o:p;oQ&]!bQ't#PQ'{#WQ(j#w[*`%e)X/c/{0T0dQ+S&[Q-]'sQ-a'xQ-d'|S-o(i-^Q/Y*VS2V-p-qQ5S2WQ9`7iR9m7}'s!ZObefj}!O!U!V!f!i!n!q#O#Q#]#_#b#f#g#h#i#j#k#l#m#n#o#q#x#z#|$r%T%Y%Z%[%]%h%u%w&S&a&b&f&g&r&w&z'R'n'p'v(l(r)k)m)w*O*U*]*^*_*l*n*w*y*{+[+_+e+q+t+{-[-_-e-k-r-t-y-{.i.m.q.u/Q/`/q/s0O0Q0S0V0^0c0f1V1Y1l1x2y3X3_3a3e3h3i3k3r3t4]4d4g5c5e5n5x5|6T6V6f6i6p6s6z6{7R7j7k7l7m7n7o7p7q7r7s7t8O8S8p9}:`:a:d:m;P;Q;U;i;n;r=O=S&n!TObefj}!O!U!V!f!i!q#O#Q#_#b#f#g#h#i#j#k#l#m#n#o#q#x#z#|$r%T%Y%Z%[%]%h%u%w&S&a&b&f&g&r&w&z'R'n'p'v(l(r)k)m)w*O*U*]*^*_*l*n*w*y*{+[+_+e+q+t+{-[-_-e-k-r-t-y-{.i.m.q.u/Q/`/q/s0O0Q0S0V0^0c0f1V1Y1l1x2y3X3_3a3e3h3i3k3r3t4]4d4g5c5e5n5x5|6T6V6f6i6p6s6z6{7R;i;n;r=S!T;O!n#]7j7k7l7m7n7o7p7q7r7s7t8O8S8p9}:`:a:d:m;P;Q;U=OQ(V#aS*V%a/ZQ-x(s{1U,h0{1O1R1S4^4_4`4b4e6O6P6v;w;y;z;|;}<O<P=ZQ(X#a{1T,h0{1O1R1S4^4_4`4b4e6O6P6v;w;y;z;|;}<O<P=Z|(W#a,h0{1O1R1S4^4_4`4b4e6O6P6v;w;y;z;|;}<O<P=ZT*V%a/Z^UO}!O%w&w*^+{&W$W]`!m!v!w!x!y!z!{!|#P#v#w$^$s$v&T&Z&o'O'W'^'c'g'l't(j(p)e)n+Q+T+X,S,T,e,f,r-P.g.j.x0l0p0w0|1b1c1d4O4U5Y7]7^7_7`7a7b7c7d7e7f7g7h7i7}8}9O9T9U9W9X9Y9^9`9m9{:i:{:|;R;S;T;k;l;m<Q<R<S<T<U<V<W<X<Y<Z<[<]<^<_<`<f<g<h<i<j<k<l<m<n<o<p<q<t<u<v<z<{<|'`$fbfgj!U!V!f!i!n!q#O#Q#]#_#b#f#g#h#i#j#k#l#m#n#o#q#x#z#|$j$k$p$r$}%O%Z%[%]%h%u&S&b&f&z'P'R'n'v(l(r)`)b)k)m)w*O*U*_*l*n*w*y*{+[+_+e-[-_-e-k-r-t-y-{.c.i.m.n.q.u/`/q/s0O0Q0S0V0^1V1Y1l1x2u2y3X3_3a3e3h3i3k3r3t4]4d4g5c5e5n5x5|6T6V6f6i6p6s6z6{7R7j7k7l7m7n7o7p7q7r7s7t8O8S8p9}:`:a:d:j:m;P;Q;U;n;r=OY%luv%p,X,i|(U#a,h0{1O1R1S4^4_4`4b4e6O6P6v;w;y;z;|;}<O<P=ZQ8s'QU8t'X,o,qY;Ve%Y'p;i=S!l;Wn$['T)Z)o*a+Y+d+r.o.s/z8d8e8f8k8l8m8n9w9x9y9z:e:f:s;a;b;c<a<b<c<d<e<r<s<xS;X!c&`Q;Y!tQ;Z.rU;[%T*]/Q^;]&a&g&r+q+t0c0fT;q%a/Z^VO}!O%w&w*^+{Q$W-P#b$X]`!m!v!w!|#P#v#w$^$s$v&T&Z&o'O't(j(p)e)n+Q+T+X,S,f.g.j.x0l0p0|4O5Y7e7f7g7h7i7}9`9m9{:i:{:|<^<_<`<t<u<v<z<{<|j$fg$j$k$p$}%O'P)`)b.c.n2u:j&t$gbfj!U!V!f!i!n!q#O#Q#]#_#b#f#g#h#i#j#k#l#m#n#o#q#x#z#|$r%Z%[%]%h%u&S&b&f&z'R'n'v(l(r)k)m)w*O*U*_*l*n*w*y*{+[+_+e-[-_-e-k-r-t-y-{.i.m.q.u/`/q/s0O0Q0S0V0^1V1Y1l1x2y3X3_3a3e3h3i3k3r3t4]4d4g5c5e5n5x5|6T6V6f6i6p6s6z6{7R7j7k7l7m7n7o7p7q7r7s7t8O8S8p9}:`:a:d:m;P;Q;U;n;r=OY$ue%Y'p;i=SY%luv%p,X,iQ&{!tx'U!x!y!z!{'^'c'g'l,T1b1c1d7c9Y;R;S;T;k;l;m|(U#a,h0{1O1R1S4^4_4`4b4e6O6P6v;w;y;z;|;}<O<P=Z!v)x'W,e0w4U7]7^7_7`7a7b7d8}9O9T9U9W9X9^<Q<R<S<T<U<V<W<X<Y<Z<[<]<f<g<h<i<j<k<l<m<n<o<p<qQ,W'QQ1^,rU:R'X,o,q!l;Wn$['T)Z)o*a+Y+d+r.o.s/z8d8e8f8k8l8m8n9w9x9y9z:e:f:s;a;b;c<a<b<c<d<e<r<s<xS;X!c&`U;e%T*]/Q^;f&a&g&r+q+t0c0fQ;j.rT;q%a/Z|!SOe}!O%T%Y%w&a&g&r&w'p*]*^+q+t+{/Q0c0f;i=S#l$]]`!m!t!v!w!|#P#v#w$^$s$v&T&Z&o'O'Q'X't(j(p)e)n+Q+T+X,f,o,q.g.j.r.x0l0p0|4O5Y7e7f7g7h7i7}9`9m9{:i:{:|<^<_<`<t<u<v<z<{<|&t$mbfj!U!V!f!i!n!q#O#Q#]#_#b#f#g#h#i#j#k#l#m#n#o#q#x#z#|$r%Z%[%]%h%u&S&b&f&z'R'n'v(l(r)k)m)w*O*U*_*l*n*w*y*{+[+_+e-[-_-e-k-r-t-y-{.i.m.q.u/`/q/s0O0Q0S0V0^1V1Y1l1x2y3X3_3a3e3h3i3k3r3t4]4d4g5c5e5n5x5|6T6V6f6i6p6s6z6{7R7j7k7l7m7n7o7p7q7r7s7t8O8S8p9}:`:a:d:m;P;Q;U;n;r=O$f%Rgnuv#a$[$j$k$p$}%O%a%p&`'P'T)Z)`)b)o*a+Y+d+r,X,h,i.c.n.o.s/Z/z0{1O1R1S2u4^4_4`4b4e6O6P6v8d8e8f8k8l8m8n9w9x9y9z:e:f:j:s;a;b;c;w;y;z;|;}<O<P<a<b<c<d<e<r<s<x=ZQ&^!c#n'V!x!y!z!{'W'^'c'g'l,e0w1b1c1d4U7]7^7_7`7a7b7c7d8}9O9T9U9W9X9Y9^;R;S;T;k;l;m<Q<R<S<T<U<V<W<X<Y<Z<[<]<f<g<h<i<j<k<l<m<n<o<p<qf+o&p+i+k+n0X0Y0[0_3o3p5kQ0o,SQ0r,TQ0u,]Q1_,rQ1p-PQ4Q0qR5q4R|!SOe}!O%T%Y%w&a&g&r&w'p*]*^+q+t+{/Q0c0f;i=S#n$]]`!m!t!v!w!|#P#v#w$^$s$v&T&Z&o'O'Q'X't(j(p)e)n+Q+T+X,S,f,o,q.g.j.r.x0l0p0|4O5Y7e7f7g7h7i7}9`9m9{:i:{:|<^<_<`<t<u<v<z<{<|&t$mbfj!U!V!f!i!n!q#O#Q#]#_#b#f#g#h#i#j#k#l#m#n#o#q#x#z#|$r%Z%[%]%h%u&S&b&f&z'R'n'v(l(r)k)m)w*O*U*_*l*n*w*y*{+[+_+e-[-_-e-k-r-t-y-{.i.m.q.u/`/q/s0O0Q0S0V0^1V1Y1l1x2y3X3_3a3e3h3i3k3r3t4]4d4g5c5e5n5x5|6T6V6f6i6p6s6z6{7R7j7k7l7m7n7o7p7q7r7s7t8O8S8p9}:`:a:d:m;P;Q;U;n;r=O$h%Rgnuv!c#a$[$j$k$p$}%O%a%p&`'P'T)Z)`)b)o*a+Y+d+r,X,h,i.c.n.o.s/Z/z0{1O1R1S2u4^4_4`4b4e6O6P6v8d8e8f8k8l8m8n9w9x9y9z:e:f:j:s;a;b;c;w;y;z;|;}<O<P<a<b<c<d<e<r<s<x=Z#p'V!x!y!z!{'W'^'c'g'l,T,e0w1b1c1d4U7]7^7_7`7a7b7c7d8}9O9T9U9W9X9Y9^;R;S;T;k;l;m<Q<R<S<T<U<V<W<X<Y<Z<[<]<f<g<h<i<j<k<l<m<n<o<p<qQ1_,rR1p-P^WO}!O%w&w*^+{&W$W]`!m!v!w!x!y!z!{!|#P#v#w$^$s$v&T&Z&o'O'W'^'c'g'l't(j(p)e)n+Q+T+X,S,T,e,f,r-P.g.j.x0l0p0w0|1b1c1d4O4U5Y7]7^7_7`7a7b7c7d7e7f7g7h7i7}8}9O9T9U9W9X9Y9^9`9m9{:i:{:|;R;S;T;k;l;m<Q<R<S<T<U<V<W<X<Y<Z<[<]<^<_<`<f<g<h<i<j<k<l<m<n<o<p<q<t<u<v<z<{<|j$fg$j$k$p$}%O'P)`)b.c.n2u:j%p$hbfj!U!V!f!i!q#O#Q#_#b#f#g#h#i#j#k#l#m#n#o#q#x#z#|$r%Z%[%]%h%u&S&b&f&z'R'n'v(l(r)k)m)w*O*U*_*l*n*w*y*{+[+_+e-[-_-e-k-r-t-y-{.i.m.q.u/`/q/s0O0Q0S0V0^1V1Y1l1x2y3X3_3a3e3h3i3k3r3t4]4d4g5c5e5n5x5|6T6V6f6i6p6s6z6{7R;n;rY%luv%p,X,i|(U#a,h0{1O1R1S4^4_4`4b4e6O6P6v;w;y;z;|;}<O<P=Z!S8c!n#]7j7k7l7m7n7o7p7q7r7s7t8O8S8p9}:`:a:d:m;P;Q;U=OQ8s'QU8t'X,o,q!l;Wn$['T)Z)o*a+Y+d+r.o.s/z8d8e8f8k8l8m8n9w9x9y9z:e:f:s;a;b;c<a<b<c<d<e<r<s<xS;X!c&`Q;Y!tQ;Z.rY;^e%Y'p;i=SU;_%T*]/Q^;`&a&g&r+q+t0c0fT;q%a/Zr#sT$V$e$|%k(T8_8`8a8b8g8h8i8j8q8r;po(m#y)V)]-h8P8Q8R9p9q9r9s9t9u9v:cr#tT$V$e$|%k(T8_8`8a8b8g8h8i8j8q8r;po(n#y)V)]-h8P8Q8R9p9q9r9s9t9u9v:c`%Shi%P%V%W%}8o8ud%{!S$]$m%R&^'V0o0r1_1pV-i(V(W1US$ze%YQ){%TQ-Y'pQ/w+TQ2q.jQ3Q/QQ6c5YQ;g;iR;u=S$o!RO]`e}!O!m!t!v!w!|#P#v#w$^$s$v%T%Y%w&T&Z&a&g&o&r&w'O'Q'X'p't(j(p)e)n*]*^+Q+T+X+q+t+{,S,f,o,q,r.g.j.r.x/Q0c0f0l0p0|4O5Y7e7f7g7h7i7}9`9m9{:i:{:|;i<^<_<`<t<u<v<z<{<|=S#S_O]`a}!O!t!v!w#v$Z$^$`$a$s%w&T&Z&a&g&r&w&|'O'Q'X(p)[)n*]*^+Q+X+q+t+{,f,o,q,r.r.x0c0f0l0|:{:|S'^!x1cS'c!y1dU'l!{,T1bQ8}7]Q9O7^Q9T7_Q9U7`Q9^7dQ;k;RQ;l;SQ;m;TQ<f<QQ<g<RQ<h<SQ<i<TQ<j<UQ<k<VQ<l<WQ<m<XQ<o<ZQ<p<[R<q<]b'[!x1c7]7^;R<Q<R<S<Tb'a!y1d7_7`;S<U<V<W<X`'j!{,T1b7d;T<Z<[<]l,u'Y']'^4p8y8z8{8}9O;k<f<g<h<il,y'_'b'c4q9P9Q9R9T9U;l<j<k<l<mh-U'h'k'l4o9Z9[9]9^;m<o<p<qY1g,v,w:S:T:UY1j,z,{:W:X:YY1u-V-W:]:^:_Q4s1hQ4u1kR4{1vb'Z!x1c7]7^;R<Q<R<S<Tb'`!y1d7_7`;S<U<V<W<X`'i!{,T1b7d;T<Z<[<]j,t'Y'[']'^4p8z8}9O;k<f<g<h<ij,x'_'a'b'c4q9Q9T9U;l<j<k<l<mf-T'h'j'k'l4o9[9^;m<o<p<qW1f,u,v,w:TW1i,y,z,{:XW1t-U-V-W:^S4r1g1hS4t1j1kS4z1u1vQ6[4sQ6]4uR6^4{T,m'X,o!a[O]}!O$s%w&T&Z&a&g&r&w'O'Q'X)n*]*^+Q+X+q+t+{,f,o,r.r.x0c0f0lQ$SZR.Z)PR)R$Se.V)O.S.T.U.X2c2d2e2h5U'rtObefj}!O!U!V!f!i!n!q#O#Q#]#_#b#f#g#h#i#j#k#l#m#n#o#q#x#z#|$r%T%Y%Z%[%]%h%u%w&S&a&b&f&g&r&w&z'R'n'p'v(l(r)k)m)w*O*U*]*^*_*l*n*w*y*{+[+_+e+q+t+{-[-_-e-k-r-t-y-{.i.m.q.u/Q/`/q/s0O0Q0S0V0^0c0f1V1Y1l1x2y3X3_3a3e3h3i3k3r3t4]4d4g5c5e5n5x5|6T6V6f6i6p6s6z6{7R7j7k7l7m7n7o7p7q7r7s7t8O8S8p9}:`:a:d:m;P;Q;U;i;n;r=O=SU%it%j3zd.V)O.S.T.U.X2c2d2e2h5UR3z0k'r!ZObefj}!O!U!V!f!i!n!q#O#Q#]#_#b#f#g#h#i#j#k#l#m#n#o#q#x#z#|$r%T%Y%Z%[%]%h%u%w&S&a&b&f&g&r&w&z'R'n'p'v(l(r)k)m)w*O*U*]*^*_*l*n*w*y*{+[+_+e+q+t+{-[-_-e-k-r-t-y-{.i.m.q.u/Q/`/q/s0O0Q0S0V0^0c0f1V1Y1l1x2y3X3_3a3e3h3i3k3r3t4]4d4g5c5e5n5x5|6T6V6f6i6p6s6z6{7R7j7k7l7m7n7o7p7q7r7s7t8O8S8p9}:`:a:d:m;P;Q;U;i;n;r=O=Se.V)O.S.T.U.X2c2d2e2h5UR2i.Zd^O}!O%w&w'Q'X*^+{,o!n_]`a!t!v!w#v$Z$^$`$a$s&T&Z&a&g&r&|'O(p)[)n*]+Q+X+q+t,f,q,r.r.x0c0f0l0|:{:|Q%nu])c$q)d;d;t=b=c!fcObefguv}!O!t$j$k$p$}%O%p%w&w'P'Q'X)`)b*^+{,X,i,o,q.c.n.r2u:jf+l&p+i+k+n0X0Y0[0_3o3p5kh1P,h0{1O1S4^4_4`4b4e6O6P6vp:}n$['T)Z*a+Y+r/z8d8e8f8k8m9w9y:eh<})o.o.s8l8n9x9z:f:s;a;b;cb=[1R;w;y;z;|;}<O<P=Zc=a+d<a<b<c<d<e<r<s<x^$qd0T;h;s;v;x=Pb&Q!Y'S(h-s:h:r=R=T=fY*u2m5W:P:Q:lb*v&R,a-n2Y:q:v=W=X=h^0]+m0Z0a3n3u5j6jQ0h+xY2l.f2n8w8x:Ob4c1Q4Y4a4j5{5}6W6u7S[:t4i:u:w:y:z;{d;d$l$w${&})_,V.b.t2k2vt=Q$y&P&T&U)o)s)u*q.n.o.r.s.{2u:j:s=]=_f=V)v*r*|*}.p.|/l2t3O=^=`i=b%e)X,b.a/c/{0d=d=e=g=i=jW)p$s&T*].rS,P'O0lR2|.x$TkObefgnuv}!O!t$[$j$k$p$}%O%p%w&w'P'Q'T'X)Z)`)b)o*^*a+Y+d+r+{,X,i,o,q.c.n.o.r.s/z2u8d8e8f8k8l8m8n9w9x9y9z:e:f:j:s;a;b;c<a<b<c<d<e<r<s<x#bkbefgn!t$[$j$k$p$}%O'P'T)Z)`)b)o*a+Y+d+r.c.n.o.r.s/z2u8d8e8f8k8l8m8n9w9x9y9z:e:f:j:s;a;b;c<a<b<c<d<e<r<s<x`lO}!O%w&w'Q*^+{U%muv,XQ*h%pS,g'X,oT1Z,i,qh)f$q)d)g.e9|:g;d;t<w<y=b=c`*s&Q*t*v/o=Q=U=V=YX6Q4c6R:t:xh)f$q)d)g.e9|:g;d;t<w<y=b=cS*u&Q=QW/n*t*v=U=VS3[/o=YX6Q4c6R:t:x!c&V!Y$y&P&T&U'S(h)o)s)u*q-s.f.n.o.r.s.{2n2u8w8x:O:h:j:r:s=R=T=]=_=f!`&V$y&P&T&U'S(h)o)s)u*q-s.f.n.o.r.s.{2n2u8w8x:O:h:j:r:s=R=T=]=_=fR&W!YdiObef}!O%w&w*^+{#n%Pgnuv!t$[$j$k$p$}%O%p'P'Q'T'X)Z)`)b)o*a+Y+d+r,X,i,o,q.c.n.o.r.s/z2u8d8e8f8k8l8m8n9w9x9y9z:e:f:j:s;a;b;c<a<b<c<d<e<r<s<x'^%Wj!U!V!f!i!n!q#O#Q#]#_#b#f#g#h#i#j#k#l#m#n#o#q#x#z#|$r%T%Y%Z%[%]%h%u&S&a&b&f&g&r&z'R'n'p'v(l(r)k)m)w*O*U*]*_*l*n*w*y*{+[+_+e+q+t-[-_-e-k-r-t-y-{.i.m.q.u/Q/`/q/s0O0Q0S0V0^0c0f1V1Y1l1x2y3X3_3a3e3h3i3k3r3t4]4d4g5c5e5n5x5|6T6V6f6i6p6s6z6{7R7j7k7l7m7n7o7p7q7r7s7t8O8S8p9}:`:a:d:m;P;Q;U;i;n;r=O=SQ&_!cR+V&`l#uT$e$|%k8_8`8a8b8g8h8i8j8q8ri(o#y)]8P8Q8R9p9q9r9s9t9u9v#nkgnuv!t$[$j$k$p$}%O%p'P'Q'T'X)Z)`)b)o*a+Y+d+r,X,i,o,q.c.n.o.r.s/z2u8d8e8f8k8l8m8n9w9x9y9z:e:f:j:s;a;b;c<a<b<c<d<e<r<s<xdmObef}!O%w&w*^+{'_!Zj!U!V!f!i!n!q#O#Q#]#_#b#f#g#h#i#j#k#l#m#n#o#q#x#z#|$r%T%Y%Z%[%]%h%u&S&a&b&f&g&r&z'R'n'p'v(l(r)k)m)w*O*U*]*_*l*n*w*y*{+[+_+e+q+t-[-_-e-k-r-t-y-{.i.m.q.u/Q/`/q/s0O0Q0S0V0^0c0f1V1Y1l1x2y3X3_3a3e3h3i3k3r3t4]4d4g5c5e5n5x5|6T6V6f6i6p6s6z6{7R7j7k7l7m7n7o7p7q7r7s7t8O8S8p9}:`:a:d:m;P;Q;U;i;n;r=O=SQ.w)oR2x.sR.w)oQ1X,hS4[0{1QU5w4Y4^4fS6o5u5{R7Q6r^#{V!S$g$m$u;e;fQ&j!iS(f#q*]S(v#z*^Y*`%e)X/c0T0dQ-]'sS-o(i-^W/O)w1x9}:mQ/Y*VS/b*_3aQ1X,hQ2T-kS2V-p-qS2[-t3XQ2a-{Q3b/{U4[0{1Q1YQ5S2WQ5h3iY5w4Y4]4^4f4gW6o5u5x5{5|U7Q6p6r6sR7X7RS(v#z*^T2[-t3XZ(t#z(u*^-t3X^{O}!O%w&w*^+{Q,_'QT,m'X,oS'Q!t,^R0s,US,P'O0lR4S0sT,P'O0l^{O}!O%w&w*^+{Q+R&ZQ+[&aS+e&g0fW+s&r+q+t0cQ,_'QR1`,r[%fn$[+Y+d+r/zR/d*a^{O}!O%w&w*^+{Q+R&ZQ,_'QR1`,r!OrO}!O!f%h%w&b&f&r&w*^+_+q+t+{0O0c3e3k5e6f6i6{S%bl,gS%sx,YQ&X!YQ&s!pU*Y%c%m1ZQ*c%eS*j%q%rQ+O&WQ+`&dS._)X,bS/f*g*hQ/h*iQ2j.aQ3Y/gQ3x0hQ4h1QQ5y4YR6t5{_{O}!O%w&w*^+{Q&x!rQ+R&ZR+|&ywsO}!O!f%h%w&b&f&w*^+_+{0O3e3k5e6f6i6{!PrO}!O!f%h%w&b&f&r&w*^+_+q+t+{0O0c3e3k5e6f6i6{!OoO}!O!f%h%w&b&f&r&w*^+_+q+t+{0O0c3e3k5e6f6i6{R&n!l!OrO}!O!f%h%w&b&f&r&w*^+_+q+t+{0O0c3e3k5e6f6i6{R+[&a!OqO}!O!f%h%w&b&f&r&w*^+_+q+t+{0O0c3e3k5e6f6i6{[$xe%Y'p0Q;i=SQ&j!iS(R#_3XQ+Z&aS+f&g0fQ/}+[Q3l0VQ5f3hR6g5cQ&b!dQ&d!eQ&f!gR+_&cR+]&a&f!TObefj}!O!U!V!f!i!q#O#Q#_#b#f#g#h#i#j#k#l#m#n#q#x#z#|$r%T%Y%Z%[%]%h%u%w&S&a&b&f&g&r&w&z'R'n'p'v(l(r)k)m)w*O*U*]*^*_*l*n*w*y*{+[+_+e+q+t+{-[-e-k-t-y-{.i.m.q.u/Q/`/q/s0O0Q0S0V0^0c0f1V1Y1l2y3X3_3a3e3h3i3k3r3t4]4d4g5c5e5n5x5|6T6V6f6i6p6s6z6{7R;i;n;r=SQ0R+a{;O!n#]7j7k7l7m7n7o7p7q7r7s8O8S8p9}:a;P;Q;U=O^{O}!O%w&w*^+{W+s&r+q+t0cT,m'X,og+o&p+i+k+n0X0Y0[0_3o3p5kT+v&s+w^{O}!O%w&w*^+{T,m'X,o'r!ZObefj}!O!U!V!f!i!n!q#O#Q#]#_#b#f#g#h#i#j#k#l#m#n#o#q#x#z#|$r%T%Y%Z%[%]%h%u%w&S&a&b&f&g&r&w&z'R'n'p'v(l(r)k)m)w*O*U*]*^*_*l*n*w*y*{+[+_+e+q+t+{-[-_-e-k-r-t-y-{.i.m.q.u/Q/`/q/s0O0Q0S0V0^0c0f1V1Y1l1x2y3X3_3a3e3h3i3k3r3t4]4d4g5c5e5n5x5|6T6V6f6i6p6s6z6{7R7j7k7l7m7n7o7p7q7r7s7t8O8S8p9}:`:a:d:m;P;Q;U;i;n;r=O=SR3{0k^vO}!O%w&w*^+{Q%puQ,X'QT,i'X,oS%cl,gS*g%m1ZR/g*hQ*W%aR3V/ZS%bl,gS%sx,YU*Y%c%m1ZS*j%q%rS/f*g*hQ/h*iQ3Y/gQ4h1QQ5y4YR6t5{bxO}!O%w&w'X*^+{,oS%qu,XU%rv,i,qQ*i%pR,Y'QR,_'Q$n!RO]`e}!O!m!t!v!w!|#P#v#w$^$s$v%T%Y%w&T&Z&a&g&o&r&w'O'Q'X'p't(j(p)e)n*]*^+Q+T+X+q+t+{,S,f,o,q,r.g.j.r.x/Q0c0f0l0p0|4O5Y7e7f7g7h7i7}9`9m9{:i:{:|;i<^<_<`<t<u<v<z<{<|=SR1q-PY'f!z7a7b7c<Y[-Q'e'g9W9X9Y<nS1r-R-SR4y1sQ,}'dR4w1mR)|%TR3R/QS-g(T;pT2R-h:c&f!TObefj}!O!U!V!f!i!q#O#Q#_#b#f#g#h#i#j#k#l#m#n#q#x#z#|$r%T%Y%Z%[%]%h%u%w&S&a&b&f&g&r&w&z'R'n'p'v(l(r)k)m)w*O*U*]*^*_*l*n*w*y*{+[+_+e+q+t+{-[-e-k-t-y-{.i.m.q.u/Q/`/q/s0O0Q0S0V0^0c0f1V1Y1l2y3X3_3a3e3h3i3k3r3t4]4d4g5c5e5n5x5|6T6V6f6i6p6s6z6{7R;i;n;r=S{;O!n#]7j7k7l7m7n7o7p7q7r7s8O8S8p9}:a;P;Q;U=O$U#gS$t%U&h&t'o'u(Q(Y(Z(](^(_(`(a(b(c(d(e(k(q(x)j)z*m*x+W+c+},`-X-v.l.}/T/_/a/i/p/|0U1z1{2Q2S2X2Z2_2`2o2z3P3^3g3j3q4k4l4v5]5_5a5d5g5m5z6S6e6q6y7P7Wy7l&q(P9_9a9c9e9f9g9h9i9j9k9l9n9o:k:n:o:p;o#r#hS$t%U&h&t'u(Q(Y(d(e(k(q(x)j)z*m*x+W+c+},`-X-v.l.}/T/_/a/i/p/|0U1z1{2Q2S2X2Z2_2`2o2z3P3^3g3j3q4k4l4v5]5_5a5d5g5m5z6S6e6q6y7P7Wg7m&q(P9a9l9n9o:k:n:o:p;o#x#kS$t%U&h&t'u(Q(Y(](^(_(d(e(k(q(x)j)z*m*x+W+c+},`-X-v.l.}/T/_/a/i/p/|0U1z1{2Q2S2X2Z2_2`2o2z3P3^3g3j3q4k4l4v5]5_5a5d5g5m5z6S6e6q6y7P7Wm7p&q(P9a9e9f9g9l9n9o:k:n:o:p;o'c!ZObefj}!O!U!V!f!i!n!q#O#Q#]#_#b#f#g#h#i#j#k#l#m#n#q#x#z#|$r%T%Y%Z%[%]%h%u%w&S&a&b&f&g&r&w&z'R'n'p'v(l(r)k)m)w*O*U*]*^*_*l*n*w*y*{+[+_+e+q+t+{-[-e-k-t-y-{.i.m.q.u/Q/`/q/s0O0Q0S0V0^0c0f1V1Y1l2y3X3_3a3e3h3i3k3r3t4]4d4g5c5e5n5x5|6T6V6f6i6p6s6z6{7R7j7k7l7m7n7o7p7q7r7s8O8S8p9}:a;P;Q;U;i;n;r=O=SQ-^'sQ-p(iQ2W-qR6_4}'c!YObefj}!O!U!V!f!i!n!q#O#Q#]#_#b#f#g#h#i#j#k#l#m#n#q#x#z#|$r%T%Y%Z%[%]%h%u%w&S&a&b&f&g&r&w&z'R'n'p'v(l(r)k)m)w*O*U*]*^*_*l*n*w*y*{+[+_+e+q+t+{-[-e-k-t-y-{.i.m.q.u/Q/`/q/s0O0Q0S0V0^0c0f1V1Y1l2y3X3_3a3e3h3i3k3r3t4]4d4g5c5e5n5x5|6T6V6f6i6p6s6z6{7R7j7k7l7m7n7o7p7q7r7s8O8S8p9}:a;P;Q;U;i;n;r=O=SQ#ZQR'}#ZU$jb$}:jd$ve%T%Y'p+T.j/Q5Y;i=SQ&o!m!^)^$j$v&o)`)k)u*y.c.{/q0X3o3r4_5k6O6T6v8d9w9x:e:f;a;y;}<P<a<r<xS)`$k$pQ)k$rQ)u$yS*y&S.qQ.c)bQ.{)sQ/q*wQ0X+kS3o0Y0[Q3r0^Q4_1OQ5k3pS6O4`4bQ6T4dQ6v6PQ8d8kS9w8e8fS9x;b;cQ:e9yQ:f9zS;a.o8lQ;y=ZS;};z;|Q<P<OQ<a<dS<r<b<cR<x<sQ0x,cU4V0x4W5tS4W0y0zR5t4XQ,o'XR1[,o`]O}!O%w&w'Q*^+{Y$Y])n+Q+X,f^)n$s&T'O*].r.x0lS+Q&Z,r^+X&a&g&r+q+t0c0fT,f'X,oQ(}$RR.O(}Q.X)OQ2c.SQ2d.TQ2e.UY2f.X2c2d2e5UR5U2hQ$OXR(y$OQ)Q$SS.[)Q.]R.])R!``O]}!O!t!w$^$s%w&T&Z&a&g&r&w'O'Q)n*]*^+Q+X+q+t+{,r.r.x0c0f0lY$_`$a)[:{:|U$aa$Z&|Q)[$`U:{!v#v(pZ:|'X,f,o,q0|U$kb$}:jl)a$k)b0Y3p4`6P8e9y9z;b;z<O<b<sQ)b$pQ0Y+kQ3p0[Q4`1OQ6P4bQ8e8kQ9y8fQ9z;cS;b.o8lQ;z=ZQ<O;|Q<b<dR<s<cQ)d$qU.d)d;t=cQ;t;dR=c=bQ)g$qQ.e)d[.h)g.e9|:g<w<yQ9|;dQ:g;tQ<w=bR<y=cQ5Z2qR6d5ZU*q&P.o:jU/k*q:O=TQ:O8wR=T=fQ*t&QW/m*t/o=U=YQ/o*vQ=U=QR=Y=VU*R%V)y8oR/W*RQ.y)pR2}.yQ6R4cS6w6R:xR:x:tQ4f1QQ5u4YU6X4f5u6rR6r5{W(u#z*^-t3XR-z(uU-u(q(v/_R2]-uQ0m,QR3}0m[*b%e%f)X/{0T0dR/e*bQ}OU%v}%w+{S%w!O*^R+{&wQ+t&rQ0c+qT0e+t0cQ0`+mR3v0`Q+w&sR0g+wS%jt3zR*f%jduO}!O%w&w'Q'X*^+{,oR%ouQ/[*WR3W/[$p!QO]`e}!O!m!t!v!w!|#P#v#w$^$s$v%T%Y%w&T&Z&a&g&o&r&w'O'Q'X'p't(j(p)e)n*]*^+Q+T+X+q+t+{,S,f,o,q,r-P.g.j.r.x/Q0c0f0l0p0|4O5Y7e7f7g7h7i7}9`9m9{:i:{:|;i<^<_<`<t<u<v<z<{<|=SR%y!QQ1n,}R4x1nQ/R)|R3S/RS*P%U-vR/U*PS-l(e(fR2U-lQ5P1}R6a5PT(g#q*]|SO}!O!f%h%w&b&f&r&w+_+q+t+{0O0c3e3k5e6f6i6{j$dbf%Z%[)m*{.m/s3_3t5n6V6z[$te%Y'p0Q;i=S^%Uj%]'v(l*U;n;rS%|!U;PQ&O!VQ&h!iQ&q!nQ&t!qQ'o#OS'u#Q*nQ(P#]Q(Q#_Q(Y#bQ(Z#fQ([#gQ(]#hQ(^#iQ(_#jQ(`#kQ(a#lQ(b#mQ(c#nQ(d#oS(e#q*]Q(k#xQ(q#zQ(x#|Q)j$rQ)z%TQ*m%uS*x&S.qQ+W&aS+c&g0fQ+}&zQ,`'RQ-X'nS-v(r/`Q.l)kS.})w1xQ/T*OQ/_*^Q/a*_Q/i*lS/p*w*yQ/|+[Q0U+eQ1z-[Q1{-_Q2Q-eQ2S-kQ2X-rQ2Z-tQ2_-yQ2`-{Q2o.iQ2z.uQ3P/QQ3^/qQ3g0SQ3j0VQ3q0^Q4k1VQ4l1YQ4v1lQ5]2yQ5_3XQ5a3aQ5d3hQ5g3iQ5m3rS5z4]4gQ6S4dQ6e5cS6q5x5|Q6y6TS7P6p6sQ7W7RQ8^8pQ8v;QQ9_;UQ9a7jQ9c7kQ9d7lQ9e7mQ9f7nQ9g7oQ9h7pQ9i7qQ9j7rQ9k7sQ9l7tQ9n8OQ9o8SS:k9}:mQ:n:`Q:o:aQ:p:dR;o=OR)}%Td^O}!O%w&w'Q'X*^+{,o!n_]`a!t!v!w#v$Z$^$`$a$s&T&Z&a&g&r&|'O(p)[)n*]+Q+X+q+t,f,q,r.r.x0c0f0l0|:{:|$b$ibe!m$j$k$p$r$v$y$}%T%Y&S&o'p)`)b)k)s)u*w*y+T+k.c.j.q.{/Q/q0X0Y0[0^1O3o3p3r4_4`4b4d5Y5k6O6P6T6v8d8e8f8k8l9w9x9y9z:e:f;a;b;c;i;y;z;|;}<O<P<a<b<c<d<r<s<x=S=ZQ%nuh)f$q)d)g.e9|:g;d;t<w<y=b=c[*p&P*q8w:O=T=f`*s&Q*t*v/o=Q=U=V=YQ.g)eS2w.o:jW6Q4c6R:t:xQ:i9{Q<z<tQ<{<uR<|<v`aO}!O%w&w'Q*^+{Q$Z]U$``:{:|d$ye%T%Y'p+T.j/Q5Y;i=SQ&p!m!^&|!t!v!w#v$^$s&T&Z&a&g&r'O'X(p)n*]+Q+X+q+t,f,o,q,r.r.x0c0f0l0|b'm!|,S7e7f7g7h<^<_<`S's#P7iW(i#w't7}9`Q)s$vQ+i&oS-q(j9mU.f)e<t<vU2n.g<z<|Q4P0pQ5p4OQ:h9{Q:r:iQ=]<uR=_<{S'Y!x7]Q'Z7^S'_!y7_Q'`7`S'e!z7aS'f7b7cU'h!{,T7dQ,c'WQ,t9OS,w'^8}Q,x9US,{'c9TS-Q9X9YS-S'g9WS-W'l9^Q0z,eQ1a,rQ4T0wQ4o1bQ4p1cQ4q1dQ5s4UQ8y<RQ8z<QQ8{<TS8|;R<SQ9P<VQ9Q<UQ9R<XS9S;S<WQ9V<YS9Z;T<[Q9[<ZQ9]<]Q:S<gQ:T<fQ:U<iS:V;k<hQ:W<kQ:X<jQ:Y<mS:Z;l<lQ:[<nS:];m<pQ:^<oR:_<qR,d'WT,n'X,oR$TZe.W)O.S.T.U.X2c2d2e2h5UdnO}!O%w&Z&w'Q*^+{,rS$[]+QQ'P!tQ'S!vQ'T!wQ(h#vQ)Z$^^)o$s&T'O*].r.x0lQ+Y&aQ+d&gY+r&r+q+t0c0fS,h'X,oQ-s(pQ.n)nQ/z+XS0{,f,qR4^0|d^O}!O%w&w'Q'X*^+{,o!n_]`a!t!v!w#v$Z$^$`$a$s&T&Z&a&g&r&|'O(p)[)n*]+Q+X+q+t,f,q,r.r.x0c0f0l0|:{:|R%nuQ1Q,hQ4Y0{Q4a1OQ4i1RQ4j1SQ5{4^U5}4_4`4bQ6W4eS6u6O6PQ7S6vQ:u;wU:w;y;z;|S:y;}<OQ:z<PR;{=ZX)q$s&T*].rpdOuv}!O%p%w&w'Q'X*^+{,X,i,o,qY$lb$}.o8l:jU$we%O.r[${fg.s2u8n:sQ%enQ&}!tQ)X$[[)_$j$k$p;a;b;cQ,V'PQ,b'TQ.a)ZW.b)`)b9x9zQ.t)oQ/c*aQ/{+YQ0T+dS0d+r/zS2k.c:fQ2v.nQ;h<eU;s<a<b<cS;v<r<sQ;x<xQ=P<dQ=d8kQ=e8mU=g8d8e8fS=i9w9yR=j:eR2r.jQ&R!YQ)v$yU*r&P.o:jS*|&T.rW*}&U.s2u:sQ,a'SQ-n(hQ.p)oS.|)s)uQ/l*qQ2Y-sQ2m.fQ2t.nQ3O.{Q5W2nQ:P8wQ:Q8xQ:l:OQ:q:hQ:v:rQ=W=RQ=X=TQ=^=]Q=`=_R=h=fX%Xj%Q.q/`T(w#z*^R,R'OQ,Q'OR3|0l^{O}!O%w&w*^+{R,_'QW%gn+Y+d+rT)Y$[/z_|O}!O%w&w*^+{^{O}!O%w&w*^+{Q&e!fQ*e%hQ+^&bQ+b&fQ0P+_Q3d0OQ5b3eQ5i3kQ6h5eQ6|6fQ6}6iR7U6{vsO}!O!f%h%w&b&f&w*^+_+{0O3e3k5e6f6i6{X+s&r+q+t0cQ+p&pR0W+iS+m&p+iQ0Z+kQ0a+nU3n0X0Y0[Q3u0_S5j3o3pR6j5k^wO}!O%w&w*^+{Q,Z'QT,j'X,oR*X%a^yO}!O%w&w*^+{Q,['QT,k'X,o^zO}!O%w&w*^+{T,l'X,oQ-Q9VQ-R'eQ1r:[R1s-SR-O'dT'q#O;U`%_j%]'v(l(r/`;n;rR/X*UR-c'yR2O-b",
            nodeNames: "⚠ > MacroName LineComment BlockComment PreprocDirective #include String EscapeSequence SystemLibString Identifier ArgumentList ( ConditionalExpression AssignmentExpression CallExpression PrimitiveType FieldExpression FieldIdentifier DestructorName TemplateMethod ScopedFieldIdentifier NamespaceIdentifier TemplateType TypeIdentifier ScopedTypeIdentifier ScopedNamespaceIdentifier :: NamespaceIdentifier TypeIdentifier TemplateArgumentList < TypeDescriptor const volatile restrict _Atomic mutable constexpr StructSpecifier struct MsDeclspecModifier __declspec ) VirtualSpecifier BaseClassClause Access , FieldDeclarationList { FieldDeclaration Attribute AttributeName Identifier AttributeArgs } [ ] UpdateOp ArithOp ArithOp ArithOp LogicOp BitOp BitOp BitOp CompareOp CompareOp CompareOp > CompareOp BitOp UpdateOp Number RawString CharLiteral AttributeArgs virtual extern static register inline AttributeSpecifier __attribute__ PointerDeclarator MsBasedModifier __based MsPointerModifier FunctionDeclarator ParameterList ParameterDeclaration PointerDeclarator FunctionDeclarator Noexcept noexcept ThrowSpecifier throw TrailingReturnType AbstractPointerDeclarator AbstractFunctionDeclarator AbstractArrayDeclarator AbstractParenthesizedDeclarator AbstractReferenceDeclarator ArrayDeclarator ParenthesizedDeclarator ReferenceDeclarator ScopedIdentifier Identifier OperatorName TemplateFunction StructuredBindingDeclarator OptionalParameterDeclaration VariadicParameterDeclaration VariadicDeclarator ReferenceDeclarator ArrayDeclarator ParenthesizedDeclarator ReferenceDeclarator BitfieldClause InitializerList InitializerPair SubscriptDesignator FieldDesignator TemplateDeclaration template TemplateParameterList TypeParameterDeclaration typename class OptionalTypeParameterDeclaration VariadicTypeParameterDeclaration TemplateTemplateParameterDeclaration AliasDeclaration using Declaration InitDeclarator FunctionDefinition MsCallModifier CompoundStatement LinkageSpecification DeclarationList CaseStatement case default LabeledStatement StatementIdentifier ExpressionStatement CommaExpression IfStatement if ConditionClause Declaration else SwitchStatement switch DoStatement do while ParenthesizedExpression WhileStatement ForStatement for ReturnStatement return BreakStatement break ContinueStatement continue GotoStatement goto TypeDefinition typedef PointerDeclarator FunctionDeclarator ArrayDeclarator ParenthesizedDeclarator ForRangeLoop TryStatement try CatchClause catch ThrowStatement NamespaceDefinition namespace UsingDeclaration StaticAssertDeclaration static_assert ConcatenatedString TemplateInstantiation FunctionDefinition ExplicitFunctionSpecifier explicit FieldInitializerList FieldInitializer DefaultMethodClause DeleteMethodClause delete FunctionDefinition OperatorCast operator operator Declaration FunctionDefinition FunctionDefinition FunctionDefinition FunctionDefinition Declaration FunctionDefinition Declaration FriendDeclaration friend union AccessSpecifier UnionSpecifier EnumSpecifier enum SizedTypeSpecifier TypeSize EnumeratorList Enumerator ClassSpecifier DependentType Decltype decltype auto ParameterPackExpansion ParameterPackExpansion FieldIdentifier PointerExpression SubscriptExpression BinaryExpression ArithOp LogicOp BitOp UnaryExpression LogicOp BitOp UpdateExpression CastExpression SizeofExpression sizeof CompoundLiteralExpression True False NULL NewExpression new new NewDeclarator DeleteExpression delete LambdaExpression LambdaCaptureSpecifier ParameterPackExpansion nullptr this #define PreprocArg #if #ifdef #ifndef #else #endif #elif PreprocDirectiveName Macro Program",
            maxTerm: 377,
            nodeProps: [
                [Ti.group, -30, 7, 10, 13, 14, 15, 17, 73, 74, 75, 106, 109, 158, 187, 228, 229, 230, 234, 237, 238, 239, 241, 242, 243, 244, 245, 249, 251, 253, 254, 255, "Expression", -12, 16, 23, 24, 25, 39, 213, 214, 216, 220, 221, 222, 224, "Type", -16, 138, 141, 144, 146, 148, 153, 155, 159, 160, 162, 164, 166, 168, 176, 177, 181, "Statement"]
            ],
            skippedNodes: [0, 2, 3, 4, 5, 6, 9, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 303],
            repeatNodeCount: 37,
            tokenData: "':`&iR!UOX$eXY'mYZ,iZ]$e]^)k^p$epq'mqr-Prs.ost/^tu$euv!/wvw!1gwx!3Yxy!3wyz!4lz{!5a{|!6[|}!8Q}!O!8u!O!P!:n!P!Q##Y!Q!R#4m!R![$6p![!]%Ki!]!^%MX!^!_%M|!_!`&*k!`!a&+f!a!b&.S!b!c$e!c!n&.w!n!o&0Y!o!w&.w!w!x&2s!x!}&.w!}#O&4U#O#P&5q#P#Q&Ep#Q#R&G]#R#S&.w#S#T$e#T#c&.w#c#d&HW#d#i&.w#i#j'0Z#j#o&.w#o#p'3T#p#q'3x#q#r'5n#r#s'6c#s~$e!l$nW(aW'tQ&k!bOY$eZr$ers%Wsw$ewx'Sx#O$e#O#P&S#P~$e!j%_U(aW&k!bOY%WZw%Wwx%qx#O%W#O#P&S#P~%W!b%vS&k!bOY%qZ#O%q#O#P&S#P~%q!b&XV&k!bOY%qYZ%qZ]%q]^&n^#O%q#O#P&S#P~%q!b&sT&k!bOY%qYZ%qZ#O%q#O#P&S#P~%q!d'ZU'tQ&k!bOY'SZr'Srs%qs#O'S#O#P&S#P~'S&i'z^(aW'tQ'r$Z&k!b)X#SOX$eXY'mYZ(vZ]$e]^)k^p$epq'mqr$ers%Wsw$ewx'Sx#O$e#O#P*r#P~$e$Z({T'r$ZXY(vYZ(v]^(vpq(v#O#P)[$Z)_QYZ(v]^)e$Z)hPYZ(v%w)v^(aW'tQ'r$Z&k!bOX$eXY)kYZ(vZ]$e]^)k^p$epq)kqr$ers%Wsw$ewx'Sx#O$e#O#P*r#P~$e%m*wV&k!bOY%qYZ+^Z]%q]^,T^#O%q#O#P&S#P~%q%m+eY'r$Z&k!bOX%qXY+^YZ(vZ]%q]^+^^p%qpq+^q#O%q#O#P*r#P~%q%m,YT&k!bOY%qYZ+^Z#O%q#O#P&S#P~%q${,pT)Up'r$ZXY(vYZ(v]^(vpq(v#O#P)[%s-[Y&TP(aW'tQ&k!bOY$eZr$ers%Wsw$ewx'Sx!_$e!_!`-z!`#O$e#O#P&S#P~$e%s.VW!d$V(aW'tQ&k!bOY$eZr$ers%Wsw$ewx'Sx#O$e#O#P&S#P~$e&e.zU(aW'uQ's$w&k!bOY%WZw%Wwx%qx#O%W#O#P&S#P~%W%w/gd(aW'tQ&k!bOX$eXY/^Zp$epq/^qr$ers%Wsw$ewx'Sx!c$e!c!}0u!}#O$e#O#P&S#P#T$e#T#W0u#W#X2S#X#Y:f#Y#]0u#]#^Hl#^#o0u#o~$e%w1Q`(aW'tQ&k!b&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#o0u#o~$e%w2_b(aW'tQ&k!b&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#X0u#X#Y3g#Y#o0u#o~$e%w3rb(aW'tQ&k!b&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#Y0u#Y#Z4z#Z#o0u#o~$e%w5Vb(aW'tQ&k!b&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#]0u#]#^6_#^#o0u#o~$e%w6jb(aW'tQ&k!b&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#b0u#b#c7r#c#o0u#o~$e%w7}b(aW'tQ&k!b&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#X0u#X#Y9V#Y#o0u#o~$e%w9d`(aW'tQ&j$Z&k!b&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#o0u#o~$e%w:qd(aW'tQ&k!b&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#`0u#`#a<P#a#b0u#b#cCQ#c#o0u#o~$e%w<[d(aW'tQ&k!b&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#]0u#]#^=j#^#g0u#g#h@^#h#o0u#o~$e%w=ub(aW'tQ&k!b&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#Y0u#Y#Z>}#Z#o0u#o~$e%w?[`(aW'tQ&k!b&q$Z&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#o0u#o~$e%w@ib(aW'tQ&k!b&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#X0u#X#YAq#Y#o0u#o~$e%wBO`(aW'tQ&k!b&o$Z&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#o0u#o~$e%wC]b(aW'tQ&k!b&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#W0u#W#XDe#X#o0u#o~$e%wDpb(aW'tQ&k!b&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#]0u#]#^Ex#^#o0u#o~$e%wFTb(aW'tQ&k!b&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#Y0u#Y#ZG]#Z#o0u#o~$e%wGj`(aW'tQ&k!b&p$Z&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#o0u#o~$e%wHwd(aW'tQ&k!b&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#Y0u#Y#ZJV#Z#b0u#b#c!'e#c#o0u#o~$e%wJdd(aW'tQ&l$Z&k!b&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#W0u#W#XKr#X#b0u#b#c! y#c#o0u#o~$e%wK}b(aW'tQ&k!b&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#X0u#X#YMV#Y#o0u#o~$e%wMbb(aW'tQ&k!b&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#Y0u#Y#ZNj#Z#o0u#o~$e%wNw`(aW'tQ&m$Z&k!b&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#o0u#o~$e%w!!Ub(aW'tQ&k!b&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#W0u#W#X!#^#X#o0u#o~$e%w!#ib(aW'tQ&k!b&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#X0u#X#Y!$q#Y#o0u#o~$e%w!$|b(aW'tQ&k!b&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#Y0u#Y#Z!&U#Z#o0u#o~$e%w!&c`(aW'tQ&n$Z&k!b&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#o0u#o~$e%w!'pb(aW'tQ&k!b&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#V0u#V#W!(x#W#o0u#o~$e%w!)Tb(aW'tQ&k!b&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#`0u#`#a!*]#a#o0u#o~$e%w!*hb(aW'tQ&k!b&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#i0u#i#j!+p#j#o0u#o~$e%w!+{b(aW'tQ&k!b&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#W0u#W#X!-T#X#o0u#o~$e%w!-`b(aW'tQ&k!b&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#X0u#X#Y!.h#Y#o0u#o~$e%w!.u`(aW'tQU$Z&k!b&r$ZOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![0u![!c$e!c!}0u!}#O$e#O#P&S#P#R$e#R#S0u#S#T$e#T#o0u#o~$e%s!0SY(aW'tQ!_$V&k!bOY$eZr$ers%Wsw$ewx'Sx!_$e!_!`!0r!`#O$e#O#P&S#P~$e%s!0}W!j$V(aW'tQ&k!bOY$eZr$ers%Wsw$ewx'Sx#O$e#O#P&S#P~$e%s!1rZ(^$V(aW'tQ&k!bOY$eZr$ers%Wsv$evw!2ewx'Sx!_$e!_!`!0r!`#O$e#O#P&S#P~$e%s!2pW(]$V(aW'tQ&k!bOY$eZr$ers%Wsw$ewx'Sx#O$e#O#P&S#P~$e%o!3eU(bS'tQ(`$V&k!bOY'SZr'Srs%qs#O'S#O#P&S#P~'S&i!4SW(aW'tQ[&_&k!bOY$eZr$ers%Wsw$ewx'Sx#O$e#O#P&S#P~$e!}!4wW{a(aW'tQ&k!bOY$eZr$ers%Wsw$ewx'Sx#O$e#O#P&S#P~$e%s!5lY(Z$V(aW'tQ&k!bOY$eZr$ers%Wsw$ewx'Sx!_$e!_!`!0r!`#O$e#O#P&S#P~$e%s!6g[(aW'tQ!]$V&k!bOY$eZr$ers%Wsw$ewx'Sx{$e{|!7]|!_$e!_!`!0r!`#O$e#O#P&S#P~$e%s!7hW(aW![$V'tQ&k!bOY$eZr$ers%Wsw$ewx'Sx#O$e#O#P&S#P~$e%w!8]W!P$Z(aW'tQ&k!bOY$eZr$ers%Wsw$ewx'Sx#O$e#O#P&S#P~$e%s!9Q](aW'tQ!]$V&k!bOY$eZr$ers%Wsw$ewx'Sx}$e}!O!7]!O!_$e!_!`!0r!`!a!9y!a#O$e#O#P&S#P~$e%s!:UW'|$V(aW'tQ&k!bOY$eZr$ers%Wsw$ewx'Sx#O$e#O#P&S#P~$e%w!:y[(aW'tQ'{$V&k!bOY$eZr$ers%Wsw$ewx'Sx!O$e!O!P!;o!P!Q$e!Q![!=]![#O$e#O#P&S#P~$e%w!;xY(aW'tQ&k!bOY$eZr$ers%Wsw$ewx'Sx!O$e!O!P!<h!P#O$e#O#P&S#P~$e%w!<sW(U$Z(aW'tQ&k!bOY$eZr$ers%Wsw$ewx'Sx#O$e#O#P&S#P~$e%s!=hl(aW'tQ!k$V&k!bOY$eZr$ers%Wsw$ewx!?`x!Q$e!Q![!=]![!g$e!g!h!Jp!h!i# o!i!n$e!n!o# o!o!r$e!r!s!Jp!s!w$e!w!x# o!x#O$e#O#P&S#P#X$e#X#Y!Jp#Y#Z# o#Z#`$e#`#a# o#a#d$e#d#e!Jp#e#i$e#i#j# o#j~$e%k!?gW'tQ&k!bOY'SZr'Srs%qs!Q'S!Q![!@P![#O'S#O#P&S#P~'S%k!@Yl'tQ!k$V&k!bOY'SZr'Srs%qsw'Swx!?`x!Q'S!Q![!@P![!g'S!g!h!BQ!h!i!I_!i!n'S!n!o!I_!o!r'S!r!s!BQ!s!w'S!w!x!I_!x#O'S#O#P&S#P#X'S#X#Y!BQ#Y#Z!I_#Z#`'S#`#a!I_#a#d'S#d#e!BQ#e#i'S#i#j!I_#j~'S%k!BZj'tQ!k$V&k!bOY'SZr'Srs%qs{'S{|!C{|!Q'S!Q![!Dx![!c'S!c!h!Dx!h!i!Dx!i!n'S!n!o!I_!o!w'S!w!x!I_!x#O'S#O#P&S#P#T'S#T#Y!Dx#Y#Z!Dx#Z#`'S#`#a!I_#a#i'S#i#j!I_#j?Ar'S?Ar?As!C{?As~'S%k!DS['tQ&k!bOY'SZr'Srs%qs!Q'S!Q![!Dx![!c'S!c!i!Dx!i#O'S#O#P&S#P#T'S#T#Z!Dx#Z~'S%k!ERh'tQ!k$V&k!bOY'SZr'Srs%qsw'Swx!Fmx!Q'S!Q![!Dx![!c'S!c!h!Dx!h!i!Dx!i!n'S!n!o!I_!o!w'S!w!x!I_!x#O'S#O#P&S#P#T'S#T#Y!Dx#Y#Z!Dx#Z#`'S#`#a!I_#a#i'S#i#j!I_#j~'S%k!Ft['tQ&k!bOY'SZr'Srs%qs!Q'S!Q![!Gj![!c'S!c!i!Gj!i#O'S#O#P&S#P#T'S#T#Z!Gj#Z~'S%k!Gsh'tQ!k$V&k!bOY'SZr'Srs%qsw'Swx!Fmx!Q'S!Q![!Gj![!c'S!c!h!Gj!h!i!Gj!i!n'S!n!o!I_!o!w'S!w!x!I_!x#O'S#O#P&S#P#T'S#T#Y!Gj#Y#Z!Gj#Z#`'S#`#a!I_#a#i'S#i#j!I_#j~'S%k!Ihb'tQ!k$V&k!bOY'SZr'Srs%qs!h'S!h!i!I_!i!n'S!n!o!I_!o!w'S!w!x!I_!x#O'S#O#P&S#P#Y'S#Y#Z!I_#Z#`'S#`#a!I_#a#i'S#i#j!I_#j~'S%s!J{l(aW'tQ!k$V&k!bOY$eZr$ers%Wsw$ewx'Sx{$e{|!Ls|!Q$e!Q![!Mx![!c$e!c!h!Mx!h!i!Mx!i!n$e!n!o# o!o!w$e!w!x# o!x#O$e#O#P&S#P#T$e#T#Y!Mx#Y#Z!Mx#Z#`$e#`#a# o#a#i$e#i#j# o#j?Ar$e?Ar?As!Ls?As~$e%s!L|^(aW'tQ&k!bOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![!Mx![!c$e!c!i!Mx!i#O$e#O#P&S#P#T$e#T#Z!Mx#Z~$e%s!NTh(aW'tQ!k$V&k!bOY$eZr$ers%Wsw$ewx!Fmx!Q$e!Q![!Mx![!c$e!c!h!Mx!h!i!Mx!i!n$e!n!o# o!o!w$e!w!x# o!x#O$e#O#P&S#P#T$e#T#Y!Mx#Y#Z!Mx#Z#`$e#`#a# o#a#i$e#i#j# o#j~$e%s# zd(aW'tQ!k$V&k!bOY$eZr$ers%Wsw$ewx'Sx!h$e!h!i# o!i!n$e!n!o# o!o!w$e!w!x# o!x#O$e#O#P&S#P#Y$e#Y#Z# o#Z#`$e#`#a# o#a#i$e#i#j# o#j~$e%w##e^(aW'tQ!_$V&k!bOY$eZr$ers%Wsw$ewx'Sxz$ez{#$a{!P$e!P!Q#/W!Q!_$e!_!`!0r!`#O$e#O#P&S#P~$e%w#$jZ(aW'tQ&k!bOY#$aYZ#%]Zr#$ars#&Qsw#$awx#+Wxz#$az{#-a{#O#$a#O#P#(e#P~#$a$Z#%`ROz#%]z{#%i{~#%]$Z#%lTOz#%]z{#%i{!P#%]!P!Q#%{!Q~#%]$Z#&QOS$Z%u#&XX(aW&k!bOY#&QYZ#%]Zw#&Qwx#&txz#&Qz{#)q{#O#&Q#O#P#(e#P~#&Q%m#&yV&k!bOY#&tYZ#%]Zz#&tz{#'`{#O#&t#O#P#(e#P~#&t%m#'eX&k!bOY#&tYZ#%]Zz#&tz{#'`{!P#&t!P!Q#(Q!Q#O#&t#O#P#(e#P~#&t%m#(XSS$Z&k!bOY%qZ#O%q#O#P&S#P~%q%m#(jX&k!bOY#&tYZ#&tZ]#&t]^#)V^z#&tz{#'`{#O#&t#O#P#(e#P~#&t%m#)[V&k!bOY#&tYZ#&tZz#&tz{#'`{#O#&t#O#P#(e#P~#&t%u#)xZ(aW&k!bOY#&QYZ#%]Zw#&Qwx#&txz#&Qz{#)q{!P#&Q!P!Q#*k!Q#O#&Q#O#P#(e#P~#&Q%u#*tU(aWS$Z&k!bOY%WZw%Wwx%qx#O%W#O#P&S#P~%W%o#+_X'tQ&k!bOY#+WYZ#%]Zr#+Wrs#&tsz#+Wz{#+z{#O#+W#O#P#(e#P~#+W%o#,RZ'tQ&k!bOY#+WYZ#%]Zr#+Wrs#&tsz#+Wz{#+z{!P#+W!P!Q#,t!Q#O#+W#O#P#(e#P~#+W%o#,}U'tQS$Z&k!bOY'SZr'Srs%qs#O'S#O#P&S#P~'S%w#-j](aW'tQ&k!bOY#$aYZ#%]Zr#$ars#&Qsw#$awx#+Wxz#$az{#-a{!P#$a!P!Q#.c!Q#O#$a#O#P#(e#P~#$a%w#.nW(aW'tQS$Z&k!bOY$eZr$ers%Wsw$ewx'Sx#O$e#O#P&S#P~$e%w#/cW(aW'tQR$Z&k!bOY#/WZr#/Wrs#/{sw#/Wwx#4Qx#O#/W#O#P#0{#P~#/W%u#0UU(aWR$Z&k!bOY#/{Zw#/{wx#0hx#O#/{#O#P#0{#P~#/{%m#0oSR$Z&k!bOY#0hZ#O#0h#O#P#0{#P~#0h%m#1SVR$Z&k!bOY#0hYZ%qZ]#0h]^#1i^#O#0h#O#P#2P#P~#0h%m#1pTR$Z&k!bOY#0hYZ%qZ#O#0h#O#P#0{#P~#0h%m#2WZR$Z&k!bOY#0hYZ%qZ]#0h]^#1i^#O#0h#O#P#2P#P#b#0h#b#c#0h#c#f#0h#f#g#2y#g~#0h%m#3QSR$Z&k!bOY#0hZ#O#0h#O#P#3^#P~#0h%m#3eXR$Z&k!bOY#0hYZ%qZ]#0h]^#1i^#O#0h#O#P#2P#P#b#0h#b#c#0h#c~#0h%o#4ZU'tQR$Z&k!bOY#4QZr#4Qrs#0hs#O#4Q#O#P#0{#P~#4Q%s#4xr(aW'tQ!k$V&k!bOY$eZr$ers%Wsw$ewx#7Sx!O$e!O!P$+X!P!Q$e!Q![$6p![!g$e!g!h!Jp!h!i# o!i!n$e!n!o# o!o!r$e!r!s!Jp!s!w$e!w!x# o!x#O$e#O#P&S#P#U$e#U#V$8y#V#X$e#X#Y!Jp#Y#Z# o#Z#`$e#`#a# o#a#d$e#d#e!Jp#e#i$e#i#j# o#j#l$e#l#m%:Z#m~$e%k#7ZW'tQ&k!bOY'SZr'Srs%qs!Q'S!Q![#7s![#O'S#O#P&S#P~'S%k#7|n'tQ!k$V&k!bOY'SZr'Srs%qsw'Swx#7Sx!O'S!O!P#9z!P!Q'S!Q![#7s![!g'S!g!h!BQ!h!i!I_!i!n'S!n!o!I_!o!r'S!r!s!BQ!s!w'S!w!x!I_!x#O'S#O#P&S#P#X'S#X#Y!BQ#Y#Z!I_#Z#`'S#`#a!I_#a#d'S#d#e!BQ#e#i'S#i#j!I_#j~'S%k#:Tl'tQ!k$V&k!bOY'SZr'Srs%qs!Q'S!Q![#;{![!c'S!c!g#;{!g!h$$Y!h!i#;{!i!n'S!n!o!I_!o!r'S!r!s!BQ!s!w'S!w!x!I_!x#O'S#O#P&S#P#T'S#T#X#;{#X#Y$$Y#Y#Z#;{#Z#`'S#`#a!I_#a#d'S#d#e!BQ#e#i'S#i#j!I_#j~'S%k#<Un'tQ!k$V&k!bOY'SZr'Srs%qsw'Swx#>Sx!Q'S!Q![#;{![!c'S!c!g#;{!g!h$$Y!h!i#;{!i!n'S!n!o!I_!o!r'S!r!s!BQ!s!w'S!w!x!I_!x#O'S#O#P&S#P#T'S#T#X#;{#X#Y$$Y#Y#Z#;{#Z#`'S#`#a!I_#a#d'S#d#e!BQ#e#i'S#i#j!I_#j~'S%k#>Z['tQ&k!bOY'SZr'Srs%qs!Q'S!Q![#?P![!c'S!c!i#?P!i#O'S#O#P&S#P#T'S#T#Z#?P#Z~'S%k#?Yn'tQ!k$V&k!bOY'SZr'Srs%qsw'Swx#>Sx!Q'S!Q![#?P![!c'S!c!g#?P!g!h#AW!h!i#?P!i!n'S!n!o!I_!o!r'S!r!s!BQ!s!w'S!w!x!I_!x#O'S#O#P&S#P#T'S#T#X#?P#X#Y#AW#Y#Z#?P#Z#`'S#`#a!I_#a#d'S#d#e!BQ#e#i'S#i#j!I_#j~'S%k#Aar'tQ!k$V&k!bOY'SZr'Srs%qsw'Swx#>Sx{'S{|!C{|!Q'S!Q![#Ck![!c'S!c!g#Ck!g!h$ u!h!i#Ck!i!n'S!n!o!I_!o!r'S!r!s!BQ!s!w'S!w!x!I_!x#O'S#O#P&S#P#T'S#T#X#Ck#X#Y$ u#Y#Z#Ck#Z#`'S#`#a!I_#a#d'S#d#e!BQ#e#i'S#i#j!I_#j?Ar'S?Ar?As!C{?As~'S%k#Ctn'tQ!k$V&k!bOY'SZr'Srs%qsw'Swx#Erx!Q'S!Q![#Ck![!c'S!c!g#Ck!g!h$ u!h!i#Ck!i!n'S!n!o!I_!o!r'S!r!s!BQ!s!w'S!w!x!I_!x#O'S#O#P&S#P#T'S#T#X#Ck#X#Y$ u#Y#Z#Ck#Z#`'S#`#a!I_#a#d'S#d#e!BQ#e#i'S#i#j!I_#j~'S%k#Ey['tQ&k!bOY'SZr'Srs%qs!Q'S!Q![#Fo![!c'S!c!i#Fo!i#O'S#O#P&S#P#T'S#T#Z#Fo#Z~'S%k#Fxn'tQ!k$V&k!bOY'SZr'Srs%qsw'Swx#Erx!Q'S!Q![#Fo![!c'S!c!g#Fo!g!h#Hv!h!i#Fo!i!n'S!n!o!I_!o!r'S!r!s!BQ!s!w'S!w!x!I_!x#O'S#O#P&S#P#T'S#T#X#Fo#X#Y#Hv#Y#Z#Fo#Z#`'S#`#a!I_#a#d'S#d#e!BQ#e#i'S#i#j!I_#j~'S%k#IPr'tQ!k$V&k!bOY'SZr'Srs%qsw'Swx#Erx{'S{|!C{|!Q'S!Q![#KZ![!c'S!c!g#KZ!g!h#Mb!h!i#KZ!i!n'S!n!o!I_!o!r'S!r!s!BQ!s!w'S!w!x!I_!x#O'S#O#P&S#P#T'S#T#X#KZ#X#Y#Mb#Y#Z#KZ#Z#`'S#`#a!I_#a#d'S#d#e!BQ#e#i'S#i#j!I_#j?Ar'S?Ar?As!C{?As~'S%k#Kdn'tQ!k$V&k!bOY'SZr'Srs%qsw'Swx#Erx!Q'S!Q![#KZ![!c'S!c!g#KZ!g!h#Mb!h!i#KZ!i!n'S!n!o!I_!o!r'S!r!s!BQ!s!w'S!w!x!I_!x#O'S#O#P&S#P#T'S#T#X#KZ#X#Y#Mb#Y#Z#KZ#Z#`'S#`#a!I_#a#d'S#d#e!BQ#e#i'S#i#j!I_#j~'S%k#Mkr'tQ!k$V&k!bOY'SZr'Srs%qsw'Swx#Erx{'S{|!C{|!Q'S!Q![#KZ![!c'S!c!g#KZ!g!h#Mb!h!i#KZ!i!n'S!n!o!I_!o!r'S!r!s!BQ!s!w'S!w!x!I_!x#O'S#O#P&S#P#T'S#T#X#KZ#X#Y#Mb#Y#Z#KZ#Z#`'S#`#a!I_#a#d'S#d#e!BQ#e#i'S#i#j!I_#j?Ar'S?Ar?As!C{?As~'S%k$!Or'tQ!k$V&k!bOY'SZr'Srs%qsw'Swx#Erx{'S{|!C{|!Q'S!Q![#Ck![!c'S!c!g#Ck!g!h$ u!h!i#Ck!i!n'S!n!o!I_!o!r'S!r!s!BQ!s!w'S!w!x!I_!x#O'S#O#P&S#P#T'S#T#X#Ck#X#Y$ u#Y#Z#Ck#Z#`'S#`#a!I_#a#d'S#d#e!BQ#e#i'S#i#j!I_#j?Ar'S?Ar?As!C{?As~'S%k$$cr'tQ!k$V&k!bOY'SZr'Srs%qsw'Swx#>Sx{'S{|!C{|!Q'S!Q![$&m![!c'S!c!g$&m!g!h$(t!h!i$&m!i!n'S!n!o!I_!o!r'S!r!s!BQ!s!w'S!w!x!I_!x#O'S#O#P&S#P#T'S#T#X$&m#X#Y$(t#Y#Z$&m#Z#`'S#`#a!I_#a#d'S#d#e!BQ#e#i'S#i#j!I_#j?Ar'S?Ar?As!C{?As~'S%k$&vn'tQ!k$V&k!bOY'SZr'Srs%qsw'Swx#Erx!Q'S!Q![$&m![!c'S!c!g$&m!g!h$(t!h!i$&m!i!n'S!n!o!I_!o!r'S!r!s!BQ!s!w'S!w!x!I_!x#O'S#O#P&S#P#T'S#T#X$&m#X#Y$(t#Y#Z$&m#Z#`'S#`#a!I_#a#d'S#d#e!BQ#e#i'S#i#j!I_#j~'S%k$(}r'tQ!k$V&k!bOY'SZr'Srs%qsw'Swx#Erx{'S{|!C{|!Q'S!Q![$&m![!c'S!c!g$&m!g!h$(t!h!i$&m!i!n'S!n!o!I_!o!r'S!r!s!BQ!s!w'S!w!x!I_!x#O'S#O#P&S#P#T'S#T#X$&m#X#Y$(t#Y#Z$&m#Z#`'S#`#a!I_#a#d'S#d#e!BQ#e#i'S#i#j!I_#j?Ar'S?Ar?As!C{?As~'S%s$+dn(aW'tQ!k$V&k!bOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![$-b![!c$e!c!g$-b!g!h$/k!h!i$-b!i!n$e!n!o# o!o!r$e!r!s!Jp!s!w$e!w!x# o!x#O$e#O#P&S#P#T$e#T#X$-b#X#Y$/k#Y#Z$-b#Z#`$e#`#a# o#a#d$e#d#e!Jp#e#i$e#i#j# o#j~$e%s$-mn(aW'tQ!k$V&k!bOY$eZr$ers%Wsw$ewx#>Sx!Q$e!Q![$-b![!c$e!c!g$-b!g!h$/k!h!i$-b!i!n$e!n!o# o!o!r$e!r!s!Jp!s!w$e!w!x# o!x#O$e#O#P&S#P#T$e#T#X$-b#X#Y$/k#Y#Z$-b#Z#`$e#`#a# o#a#d$e#d#e!Jp#e#i$e#i#j# o#j~$e%s$/vr(aW'tQ!k$V&k!bOY$eZr$ers%Wsw$ewx#>Sx{$e{|!Ls|!Q$e!Q![$2Q![!c$e!c!g$2Q!g!h$4Z!h!i$2Q!i!n$e!n!o# o!o!r$e!r!s!Jp!s!w$e!w!x# o!x#O$e#O#P&S#P#T$e#T#X$2Q#X#Y$4Z#Y#Z$2Q#Z#`$e#`#a# o#a#d$e#d#e!Jp#e#i$e#i#j# o#j?Ar$e?Ar?As!Ls?As~$e%s$2]n(aW'tQ!k$V&k!bOY$eZr$ers%Wsw$ewx#Erx!Q$e!Q![$2Q![!c$e!c!g$2Q!g!h$4Z!h!i$2Q!i!n$e!n!o# o!o!r$e!r!s!Jp!s!w$e!w!x# o!x#O$e#O#P&S#P#T$e#T#X$2Q#X#Y$4Z#Y#Z$2Q#Z#`$e#`#a# o#a#d$e#d#e!Jp#e#i$e#i#j# o#j~$e%s$4fr(aW'tQ!k$V&k!bOY$eZr$ers%Wsw$ewx#Erx{$e{|!Ls|!Q$e!Q![$2Q![!c$e!c!g$2Q!g!h$4Z!h!i$2Q!i!n$e!n!o# o!o!r$e!r!s!Jp!s!w$e!w!x# o!x#O$e#O#P&S#P#T$e#T#X$2Q#X#Y$4Z#Y#Z$2Q#Z#`$e#`#a# o#a#d$e#d#e!Jp#e#i$e#i#j# o#j?Ar$e?Ar?As!Ls?As~$e%s$6{n(aW'tQ!k$V&k!bOY$eZr$ers%Wsw$ewx#7Sx!O$e!O!P$+X!P!Q$e!Q![$6p![!g$e!g!h!Jp!h!i# o!i!n$e!n!o# o!o!r$e!r!s!Jp!s!w$e!w!x# o!x#O$e#O#P&S#P#X$e#X#Y!Jp#Y#Z# o#Z#`$e#`#a# o#a#d$e#d#e!Jp#e#i$e#i#j# o#j~$e%s$9S](aW'tQ&k!bOY$eZr$ers%Wsw$ewx'Sx!O$e!O!P$9{!P!Q$e!Q!R$:t!R![$@R![#O$e#O#P&S#P~$e%s$:UY(aW'tQ&k!bOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![!=]![#O$e#O#P&S#P~$e%s$;Pr(aW'tQ!k$V&k!bOY$eZr$ers%Wsw$ewx$=Zx!O$e!O!P$+X!P!Q$e!Q![$@R![!g$e!g!h!Jp!h!i# o!i!n$e!n!o# o!o!r$e!r!s!Jp!s!w$e!w!x# o!x#O$e#O#P&S#P#U$e#U#V$B[#V#X$e#X#Y!Jp#Y#Z# o#Z#`$e#`#a# o#a#d$e#d#e!Jp#e#i$e#i#j# o#j#l$e#l#m$HU#m~$e%k$=bW'tQ&k!bOY'SZr'Srs%qs!Q'S!Q![$=z![#O'S#O#P&S#P~'S%k$>Tn'tQ!k$V&k!bOY'SZr'Srs%qsw'Swx$=Zx!O'S!O!P#9z!P!Q'S!Q![$=z![!g'S!g!h!BQ!h!i!I_!i!n'S!n!o!I_!o!r'S!r!s!BQ!s!w'S!w!x!I_!x#O'S#O#P&S#P#X'S#X#Y!BQ#Y#Z!I_#Z#`'S#`#a!I_#a#d'S#d#e!BQ#e#i'S#i#j!I_#j~'S%s$@^n(aW'tQ!k$V&k!bOY$eZr$ers%Wsw$ewx$=Zx!O$e!O!P$+X!P!Q$e!Q![$@R![!g$e!g!h!Jp!h!i# o!i!n$e!n!o# o!o!r$e!r!s!Jp!s!w$e!w!x# o!x#O$e#O#P&S#P#X$e#X#Y!Jp#Y#Z# o#Z#`$e#`#a# o#a#d$e#d#e!Jp#e#i$e#i#j# o#j~$e%s$BeY(aW'tQ&k!bOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![$CT![#O$e#O#P&S#P~$e%s$C`n(aW'tQ!k$V&k!bOY$eZr$ers%Wsw$ewx$E^x!O$e!O!P$+X!P!Q$e!Q![$CT![!g$e!g!h!Jp!h!i# o!i!n$e!n!o# o!o!r$e!r!s!Jp!s!w$e!w!x# o!x#O$e#O#P&S#P#X$e#X#Y!Jp#Y#Z# o#Z#`$e#`#a# o#a#d$e#d#e!Jp#e#i$e#i#j# o#j~$e%k$EeW'tQ&k!bOY'SZr'Srs%qs!Q'S!Q![$E}![#O'S#O#P&S#P~'S%k$FWn'tQ!k$V&k!bOY'SZr'Srs%qsw'Swx$E^x!O'S!O!P#9z!P!Q'S!Q![$E}![!g'S!g!h!BQ!h!i!I_!i!n'S!n!o!I_!o!r'S!r!s!BQ!s!w'S!w!x!I_!x#O'S#O#P&S#P#X'S#X#Y!BQ#Y#Z!I_#Z#`'S#`#a!I_#a#d'S#d#e!BQ#e#i'S#i#j!I_#j~'S%s$H_^(aW'tQ&k!bOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![$IZ![!c$e!c!i$IZ!i#O$e#O#P&S#P#T$e#T#Z$IZ#Z~$e%s$Ifp(aW'tQ!k$V&k!bOY$eZr$ers%Wsw$ewx$Kjx!O$e!O!P$+X!P!Q$e!Q![$IZ![!c$e!c!g$IZ!g!h%2r!h!i$IZ!i!n$e!n!o# o!o!r$e!r!s!Jp!s!w$e!w!x# o!x#O$e#O#P&S#P#T$e#T#X$IZ#X#Y%2r#Y#Z$IZ#Z#`$e#`#a# o#a#d$e#d#e!Jp#e#i$e#i#j# o#j~$e%k$Kq['tQ&k!bOY'SZr'Srs%qs!Q'S!Q![$Lg![!c'S!c!i$Lg!i#O'S#O#P&S#P#T'S#T#Z$Lg#Z~'S%k$Lpp'tQ!k$V&k!bOY'SZr'Srs%qsw'Swx$Kjx!O'S!O!P#9z!P!Q'S!Q![$Lg![!c'S!c!g$Lg!g!h$Nt!h!i$Lg!i!n'S!n!o!I_!o!r'S!r!s!BQ!s!w'S!w!x!I_!x#O'S#O#P&S#P#T'S#T#X$Lg#X#Y$Nt#Y#Z$Lg#Z#`'S#`#a!I_#a#d'S#d#e!BQ#e#i'S#i#j!I_#j~'S%k$N}t'tQ!k$V&k!bOY'SZr'Srs%qsw'Swx$Kjx{'S{|!C{|!O'S!O!P#9z!P!Q'S!Q![%#_![!c'S!c!g%#_!g!h%0X!h!i%#_!i!n'S!n!o!I_!o!r'S!r!s!BQ!s!w'S!w!x!I_!x#O'S#O#P&S#P#T'S#T#X%#_#X#Y%0X#Y#Z%#_#Z#`'S#`#a!I_#a#d'S#d#e!BQ#e#i'S#i#j!I_#j?Ar'S?Ar?As!C{?As~'S%k%#hp'tQ!k$V&k!bOY'SZr'Srs%qsw'Swx%%lx!O'S!O!P#9z!P!Q'S!Q![%#_![!c'S!c!g%#_!g!h%0X!h!i%#_!i!n'S!n!o!I_!o!r'S!r!s!BQ!s!w'S!w!x!I_!x#O'S#O#P&S#P#T'S#T#X%#_#X#Y%0X#Y#Z%#_#Z#`'S#`#a!I_#a#d'S#d#e!BQ#e#i'S#i#j!I_#j~'S%k%%s['tQ&k!bOY'SZr'Srs%qs!Q'S!Q![%&i![!c'S!c!i%&i!i#O'S#O#P&S#P#T'S#T#Z%&i#Z~'S%k%&rp'tQ!k$V&k!bOY'SZr'Srs%qsw'Swx%%lx!O'S!O!P#9z!P!Q'S!Q![%&i![!c'S!c!g%&i!g!h%(v!h!i%&i!i!n'S!n!o!I_!o!r'S!r!s!BQ!s!w'S!w!x!I_!x#O'S#O#P&S#P#T'S#T#X%&i#X#Y%(v#Y#Z%&i#Z#`'S#`#a!I_#a#d'S#d#e!BQ#e#i'S#i#j!I_#j~'S%k%)Pt'tQ!k$V&k!bOY'SZr'Srs%qsw'Swx%%lx{'S{|!C{|!O'S!O!P#9z!P!Q'S!Q![%+a![!c'S!c!g%+a!g!h%-n!h!i%+a!i!n'S!n!o!I_!o!r'S!r!s!BQ!s!w'S!w!x!I_!x#O'S#O#P&S#P#T'S#T#X%+a#X#Y%-n#Y#Z%+a#Z#`'S#`#a!I_#a#d'S#d#e!BQ#e#i'S#i#j!I_#j?Ar'S?Ar?As!C{?As~'S%k%+jp'tQ!k$V&k!bOY'SZr'Srs%qsw'Swx%%lx!O'S!O!P#9z!P!Q'S!Q![%+a![!c'S!c!g%+a!g!h%-n!h!i%+a!i!n'S!n!o!I_!o!r'S!r!s!BQ!s!w'S!w!x!I_!x#O'S#O#P&S#P#T'S#T#X%+a#X#Y%-n#Y#Z%+a#Z#`'S#`#a!I_#a#d'S#d#e!BQ#e#i'S#i#j!I_#j~'S%k%-wt'tQ!k$V&k!bOY'SZr'Srs%qsw'Swx%%lx{'S{|!C{|!O'S!O!P#9z!P!Q'S!Q![%+a![!c'S!c!g%+a!g!h%-n!h!i%+a!i!n'S!n!o!I_!o!r'S!r!s!BQ!s!w'S!w!x!I_!x#O'S#O#P&S#P#T'S#T#X%+a#X#Y%-n#Y#Z%+a#Z#`'S#`#a!I_#a#d'S#d#e!BQ#e#i'S#i#j!I_#j?Ar'S?Ar?As!C{?As~'S%k%0bt'tQ!k$V&k!bOY'SZr'Srs%qsw'Swx%%lx{'S{|!C{|!O'S!O!P#9z!P!Q'S!Q![%#_![!c'S!c!g%#_!g!h%0X!h!i%#_!i!n'S!n!o!I_!o!r'S!r!s!BQ!s!w'S!w!x!I_!x#O'S#O#P&S#P#T'S#T#X%#_#X#Y%0X#Y#Z%#_#Z#`'S#`#a!I_#a#d'S#d#e!BQ#e#i'S#i#j!I_#j?Ar'S?Ar?As!C{?As~'S%s%2}t(aW'tQ!k$V&k!bOY$eZr$ers%Wsw$ewx$Kjx{$e{|!Ls|!O$e!O!P$+X!P!Q$e!Q![%5_![!c$e!c!g%5_!g!h%7n!h!i%5_!i!n$e!n!o# o!o!r$e!r!s!Jp!s!w$e!w!x# o!x#O$e#O#P&S#P#T$e#T#X%5_#X#Y%7n#Y#Z%5_#Z#`$e#`#a# o#a#d$e#d#e!Jp#e#i$e#i#j# o#j?Ar$e?Ar?As!Ls?As~$e%s%5jp(aW'tQ!k$V&k!bOY$eZr$ers%Wsw$ewx%%lx!O$e!O!P$+X!P!Q$e!Q![%5_![!c$e!c!g%5_!g!h%7n!h!i%5_!i!n$e!n!o# o!o!r$e!r!s!Jp!s!w$e!w!x# o!x#O$e#O#P&S#P#T$e#T#X%5_#X#Y%7n#Y#Z%5_#Z#`$e#`#a# o#a#d$e#d#e!Jp#e#i$e#i#j# o#j~$e%s%7yt(aW'tQ!k$V&k!bOY$eZr$ers%Wsw$ewx%%lx{$e{|!Ls|!O$e!O!P$+X!P!Q$e!Q![%5_![!c$e!c!g%5_!g!h%7n!h!i%5_!i!n$e!n!o# o!o!r$e!r!s!Jp!s!w$e!w!x# o!x#O$e#O#P&S#P#T$e#T#X%5_#X#Y%7n#Y#Z%5_#Z#`$e#`#a# o#a#d$e#d#e!Jp#e#i$e#i#j# o#j?Ar$e?Ar?As!Ls?As~$e%s%:da(aW'tQ&k!bOY$eZr$ers%Wsw$ewx'Sx!O$e!O!P$9{!P!Q$e!Q!R%;i!R![%A`![!c$e!c!i$IZ!i#O$e#O#P&S#P#T$e#T#Z$IZ#Z~$e%s%;tt(aW'tQ!k$V&k!bOY$eZr$ers%Wsw$ewx%>Ux!O$e!O!P$+X!P!Q$e!Q![%A`![!c$e!c!g$IZ!g!h%2r!h!i$IZ!i!n$e!n!o# o!o!r$e!r!s!Jp!s!w$e!w!x# o!x#O$e#O#P&S#P#T$e#T#U$IZ#U#V%Co#V#X$IZ#X#Y%2r#Y#Z$IZ#Z#`$e#`#a# o#a#d$e#d#e!Jp#e#i$e#i#j# o#j#l$e#l#m$HU#m~$e%k%>]['tQ&k!bOY'SZr'Srs%qs!Q'S!Q![%?R![!c'S!c!i$Lg!i#O'S#O#P&S#P#T'S#T#Z$Lg#Z~'S%k%?[p'tQ!k$V&k!bOY'SZr'Srs%qsw'Swx%>Ux!O'S!O!P#9z!P!Q'S!Q![%?R![!c'S!c!g$Lg!g!h$Nt!h!i$Lg!i!n'S!n!o!I_!o!r'S!r!s!BQ!s!w'S!w!x!I_!x#O'S#O#P&S#P#T'S#T#X$Lg#X#Y$Nt#Y#Z$Lg#Z#`'S#`#a!I_#a#d'S#d#e!BQ#e#i'S#i#j!I_#j~'S%s%Akp(aW'tQ!k$V&k!bOY$eZr$ers%Wsw$ewx%>Ux!O$e!O!P$+X!P!Q$e!Q![%A`![!c$e!c!g$IZ!g!h%2r!h!i$IZ!i!n$e!n!o# o!o!r$e!r!s!Jp!s!w$e!w!x# o!x#O$e#O#P&S#P#T$e#T#X$IZ#X#Y%2r#Y#Z$IZ#Z#`$e#`#a# o#a#d$e#d#e!Jp#e#i$e#i#j# o#j~$e%s%Czp(aW'tQ!k$V&k!bOY$eZr$ers%Wsw$ewx$Kjx!O$e!O!P$+X!P!Q$e!Q![%FO![!c$e!c!g$IZ!g!h%2r!h!i$IZ!i!n$e!n!o# o!o!r$e!r!s!Jp!s!w$e!w!x# o!x#O$e#O#P&S#P#T$e#T#X$IZ#X#Y%2r#Y#Z$IZ#Z#`$e#`#a# o#a#d$e#d#e!Jp#e#i$e#i#j# o#j~$e%s%FZp(aW'tQ!k$V&k!bOY$eZr$ers%Wsw$ewx%H_x!O$e!O!P$+X!P!Q$e!Q![%FO![!c$e!c!g$IZ!g!h%2r!h!i$IZ!i!n$e!n!o# o!o!r$e!r!s!Jp!s!w$e!w!x# o!x#O$e#O#P&S#P#T$e#T#X$IZ#X#Y%2r#Y#Z$IZ#Z#`$e#`#a# o#a#d$e#d#e!Jp#e#i$e#i#j# o#j~$e%k%Hf['tQ&k!bOY'SZr'Srs%qs!Q'S!Q![%I[![!c'S!c!i$Lg!i#O'S#O#P&S#P#T'S#T#Z$Lg#Z~'S%k%Iep'tQ!k$V&k!bOY'SZr'Srs%qsw'Swx%H_x!O'S!O!P#9z!P!Q'S!Q![%I[![!c'S!c!g$Lg!g!h$Nt!h!i$Lg!i!n'S!n!o!I_!o!r'S!r!s!BQ!s!w'S!w!x!I_!x#O'S#O#P&S#P#T'S#T#X$Lg#X#Y$Nt#Y#Z$Lg#Z#`'S#`#a!I_#a#d'S#d#e!BQ#e#i'S#i#j!I_#j~'S%w%KtY'z$V(aW'tQ&k!bOY$eZr$ers%Wsw$ewx'Sx![$e![!]%Ld!]#O$e#O#P&S#P~$e%w%LoWk$Z(aW'tQ&k!bOY$eZr$ers%Wsw$ewx'Sx#O$e#O#P&S#P~$e%s%MdW(_$V(aW'tQ&k!bOY$eZr$ers%Wsw$ewx'Sx#O$e#O#P&S#P~$e&e%NX[o$V(aW'tQ&k!bOY%N}Zr%N}rs& vsw%N}wx&%vx!^%N}!^!_&'w!_!`&)p!`!a&'S!a#O%N}#O#P&#c#P~%N}#^& WY(aW'tQ&k!bOY%N}Zr%N}rs& vsw%N}wx&%vx!`%N}!`!a&'S!a#O%N}#O#P&#c#P~%N}#[& }W(aW&k!bOY& vZw& vwx&!gx!`& v!`!a&%Z!a#O& v#O#P&#c#P~& v#S&!lU&k!bOY&!gZ!`&!g!`!a&#O!a#O&!g#O#P&#c#P~&!g#S&#VSXp&k!bOY%qZ#O%q#O#P&S#P~%q#S&#hV&k!bOY&!gYZ&!gZ]&!g]^&#}^#O&!g#O#P&$i#P~&!g#S&$SV&k!bOY&!gYZ%qZ!`&!g!`!a&#O!a#O&!g#O#P&#c#P~&!g#S&$nX&k!bOY&!gYZ%qZ]&!g]^&#}^!`&!g!`!a&#O!a#O&!g#O#P&#c#P~&!g#[&%dUXp(aW&k!bOY%WZw%Wwx%qx#O%W#O#P&S#P~%W#U&%}W'tQ&k!bOY&%vZr&%vrs&!gs!`&%v!`!a&&g!a#O&%v#O#P&#c#P~&%v#U&&pUXp'tQ&k!bOY'SZr'Srs%qs#O'S#O#P&S#P~'S#^&'_WXp(aW'tQ&k!bOY$eZr$ers%Wsw$ewx'Sx#O$e#O#P&S#P~$e&e&(SZ(aW'tQ&k!b!i$VOY%N}Zr%N}rs& vsw%N}wx&%vx!_%N}!_!`&(u!`!a&'S!a#O%N}#O#P&#c#P~%N}&e&)QY!j$V(aW'tQ&k!bOY%N}Zr%N}rs& vsw%N}wx&%vx!`%N}!`!a&'S!a#O%N}#O#P&#c#P~%N}&e&){Y!e$V(aW'tQ&k!bOY%N}Zr%N}rs& vsw%N}wx&%vx!`%N}!`!a&'S!a#O%N}#O#P&#c#P~%N}%s&*vY(lP(aW'tQ&k!bOY$eZr$ers%Wsw$ewx'Sx!_$e!_!`-z!`#O$e#O#P&S#P~$e%s&+qZ(aW'tQ!g$V&k!bOY$eZr$ers%Wsw$ewx'Sx!_$e!_!`&,d!`!a&-X!a#O$e#O#P&S#P~$e%s&,oW!e$V(aW'tQ&k!bOY$eZr$ers%Wsw$ewx'Sx#O$e#O#P&S#P~$e%s&-dY(aW'tQ&k!b!i$VOY$eZr$ers%Wsw$ewx'Sx!_$e!_!`!0r!`#O$e#O#P&S#P~$e!m&._W'yP(aW'tQ&k!bOY$eZr$ers%Wsw$ewx'Sx#O$e#O#P&S#P~$e&i&/W`(aW'tQ!V$U'vq'}S&k!bOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![&.w![!c$e!c!}&.w!}#O$e#O#P&S#P#R$e#R#S&.w#S#T$e#T#o&.w#o~$e&i&0i`(aW'tQ!V$U'vq'}S&k!bOY$eZr$ers&1ksw$ewx&2Wx!Q$e!Q![&.w![!c$e!c!}&.w!}#O$e#O#P&S#P#R$e#R#S&.w#S#T$e#T#o&.w#o~$e&c&1tU(aW's$w&k!bOY%WZw%Wwx%qx#O%W#O#P&S#P~%W%k&2aU'tQ(`$V&k!bOY'SZr'Srs%qs#O'S#O#P&S#P~'S&i&3S`(aW'tQ!V$U'vq'}S&k!bOY$eZr$ers&1ksw$ewx&2Wx!Q$e!Q![&.w![!c$e!c!}&.w!}#O$e#O#P&S#P#R$e#R#S&.w#S#T$e#T#o&.w#o~$e%s&4aX!Y$V(aW'tQ&k!bOY$eZr$ers%Wsw$ewx'Sx!}$e!}#O&4|#O#P&S#P~$e!m&5XW(WP(aW'tQ&k!bOY$eZr$ers%Wsw$ewx'Sx#O$e#O#P&S#P~$e%w&5v_&k!bOY&6uYZ&7YZ]&6u]^&8R^!Q&6u!Q![&8i![!w&6u!w!x&9m!x#O&6u#O#P&?q#P#i&6u#i#j&@_#j#l&6u#l#m&Ca#m~&6u!l&6|SWY&k!bOY%qZ#O%q#O#P&S#P~%q%w&7cYWY'r$Z&k!bOX%qXY+^YZ(vZ]%q]^+^^p%qpq+^q#O%q#O#P*r#P~%q%w&8YTWY&k!bOY%qYZ+^Z#O%q#O#P&S#P~%q!l&8pUWY&k!bOY%qZ!Q%q!Q![&9S![#O%q#O#P&S#P~%q!l&9ZUWY&k!bOY%qZ!Q%q!Q![&6u![#O%q#O#P&S#P~%q!l&9rY&k!bOY%qZ!Q%q!Q![&:b![!c%q!c!i&:b!i#O%q#O#P&S#P#T%q#T#Z&:b#Z~%q!l&:gY&k!bOY%qZ!Q%q!Q![&;V![!c%q!c!i&;V!i#O%q#O#P&S#P#T%q#T#Z&;V#Z~%q!l&;[Y&k!bOY%qZ!Q%q!Q![&;z![!c%q!c!i&;z!i#O%q#O#P&S#P#T%q#T#Z&;z#Z~%q!l&<PY&k!bOY%qZ!Q%q!Q![&<o![!c%q!c!i&<o!i#O%q#O#P&S#P#T%q#T#Z&<o#Z~%q!l&<tY&k!bOY%qZ!Q%q!Q![&=d![!c%q!c!i&=d!i#O%q#O#P&S#P#T%q#T#Z&=d#Z~%q!l&=iY&k!bOY%qZ!Q%q!Q![&>X![!c%q!c!i&>X!i#O%q#O#P&S#P#T%q#T#Z&>X#Z~%q!l&>^Y&k!bOY%qZ!Q%q!Q![&>|![!c%q!c!i&>|!i#O%q#O#P&S#P#T%q#T#Z&>|#Z~%q!l&?RY&k!bOY%qZ!Q%q!Q![&6u![!c%q!c!i&6u!i#O%q#O#P&S#P#T%q#T#Z&6u#Z~%q!l&?xVWY&k!bOY%qYZ%qZ]%q]^&n^#O%q#O#P&S#P~%q!l&@dY&k!bOY%qZ!Q%q!Q![&AS![!c%q!c!i&AS!i#O%q#O#P&S#P#T%q#T#Z&AS#Z~%q!l&AXY&k!bOY%qZ!Q%q!Q![&Aw![!c%q!c!i&Aw!i#O%q#O#P&S#P#T%q#T#Z&Aw#Z~%q!l&A|Y&k!bOY%qZ!Q%q!Q![&Bl![!c%q!c!i&Bl!i#O%q#O#P&S#P#T%q#T#Z&Bl#Z~%q!l&BqY&k!bOY%qZ!Q%q!Q![&6u![!c%q!c!i&6u!i#O%q#O#P&S#P#T%q#T#Z&6u#Z~%q!l&CfY&k!bOY%qZ!Q%q!Q![&DU![!c%q!c!i&DU!i#O%q#O#P&S#P#T%q#T#Z&DU#Z~%q!l&DZY&k!bOY%qZ!Q%q!Q![&Dy![!c%q!c!i&Dy!i#O%q#O#P&S#P#T%q#T#Z&Dy#Z~%q!l&EQYWY&k!bOY%qZ!Q%q!Q![&Dy![!c%q!c!i&Dy!i#O%q#O#P&S#P#T%q#T#Z&Dy#Z~%q%w&E{X!Z#u(aW'tQ&k!bOY$eZr$ers%Wsw$ewx'Sx#O$e#O#P&S#P#Q&Fh#Q~$e#Q&FsW(cd(aW'tQ&k!bOY$eZr$ers%Wsw$ewx'Sx#O$e#O#P&S#P~$e%s&GhY(aW'tQ&k!b!b$VOY$eZr$ers%Wsw$ewx'Sx!_$e!_!`!0r!`#O$e#O#P&S#P~$e&i&Hgb(aW'tQ!V$U'vq'}S&k!bOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![&.w![!c$e!c!}&.w!}#O$e#O#P&S#P#R$e#R#S&.w#S#T$e#T#d&.w#d#e&Io#e#o&.w#o~$e&i&JOb(aW'tQ!V$U'vq'}S&k!bOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![&.w![!c$e!c!}&.w!}#O$e#O#P&S#P#R$e#R#S&.w#S#T$e#T#X&.w#X#Y&KW#Y#o&.w#o~$e&i&Kgb(aW'tQ!V$U'vq'}S&k!bOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![&.w![!c$e!c!}&.w!}#O$e#O#P&S#P#R$e#R#S&.w#S#T$e#T#f&.w#f#g&Lo#g#o&.w#o~$e&i&MOa(aW'tQ!V$U'vq'}S&k!bOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![&.w![!c$e!c!}&.w!}#O$e#O#P&S#P#R$e#R#S&.w#S#T$e#T#U&NT#U#o&.w#o~$e&i&Ndb(aW'tQ!V$U'vq'}S&k!bOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![&.w![!c$e!c!}&.w!}#O$e#O#P&S#P#R$e#R#S&.w#S#T$e#T#h&.w#h#i' l#i#o&.w#o~$e&i' {b(aW'tQ!V$U'vq'}S&k!bOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![&.w![!c$e!c!}&.w!}#O$e#O#P&S#P#R$e#R#S&.w#S#T$e#T#c&.w#c#d'#T#d#o&.w#o~$e&i'#db(aW'tQ!V$U'vq'}S&k!bOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q![&.w![!c$e!c!}&.w!}#O$e#O#P&S#P#R$e#R#S&.w#S#T$e#T#f&.w#f#g'$l#g#o&.w#o~$e&i'${s(aW'tQ!V$U'vq'}S&k!bOY$eZq$eqr''Yrs%Wsu$euv'(xvw')swx'Sxy'*qyz$ez{'(x{|'(x|}$e}!O'+j!O!P$e!P!Q'(x!Q![&.w![!^$e!^!_',h!_!`''Y!`!a'-f!a!c$e!c!}&.w!}#O'.d#O#P&S#P#Q$e#Q#R'(x#R#S&.w#S#T$e#T#o&.w#o#p$e#p#q'/Y#q#r$e#r#s'(T#s~$e!q''eY(aW'tQ#`T&k!bOY$eZr$ers%Wsw$ewx'Sx!_$e!_!`'(T!`#O$e#O#P&S#P~$e!q'(`W(aW'tQ#`T&k!bOY$eZr$ers%Wsw$ewx'Sx#O$e#O#P&S#P~$e!q')TY(aW'tQ#`T&k!bOY$eZr$ers%Wsw$ewx'Sx!_$e!_!`'(T!`#O$e#O#P&S#P~$e!q'*OZ(aW'tQ#`T&k!bOY$eZr$ers%Wsv$evw'(Twx'Sx!_$e!_!`'(T!`#O$e#O#P&S#P~$e!q'*zY(aW'tQ&k!bOY$eZr$ers%Wsw$ewx'Sxy$eyz'(Tz#O$e#O#P&S#P~$e!q'+uZ(aW'tQ#`T&k!bOY$eZr$ers%Wsw$ewx'Sx!_$e!_!`'(T!`!a'(T!a#O$e#O#P&S#P~$e!q',sZ(aW'tQ#`T&k!bOY$eZr$ers%Wsw$ewx'Sx!^$e!^!_'(x!_!`'(T!`#O$e#O#P&S#P~$e!q'-qZ(aW'tQ#`T&k!bOY$eZr$ers%Wsw$ewx'Sx!_$e!_!`'(T!`!a'(x!a#O$e#O#P&S#P~$e!q'.mX(aW'tQ&k!bOY$eZr$ers%Wsw$ewx'Sx#O$e#O#P&S#P#Q'(T#Q~$e!q'/e[(aW'tQ#`T&k!bOY$eZr$ers%Wsw$ewx'Sx!_$e!_!`'(T!`#O$e#O#P&S#P#p$e#p#q'(T#q~$e&i'0jb(aW'tQ!V$U'vq'}S&k!bOY$eZr$ers&1ksw$ewx&2Wx!Q$e!Q!Y&.w!Y!Z'1r!Z![&.w![!c$e!c!}&.w!}#O$e#O#P&S#P#R$e#R#S&.w#S#T$e#T#o&.w#o~$e&i'2R`(aW'tQ!V$U'vq'}S&k!bOY$eZr$ers&1ksw$ewx&2Wx!Q$e!Q![&.w![!c$e!c!}&.w!}#O$e#O#P&S#P#R$e#R#S&.w#S#T$e#T#o&.w#o~$e%s'3`W!R$V(aW'tQ&k!bOY$eZr$ers%Wsw$ewx'Sx#O$e#O#P&S#P~$e%s'4T[(aW'tQ!a$V&k!bOY$eZr$ers%Wsw$ewx'Sx!_$e!_!`!0r!`#O$e#O#P&S#P#p$e#p#q'4y#q~$e%s'5UW([$V(aW'tQ&k!bOY$eZr$ers%Wsw$ewx'Sx#O$e#O#P&S#P~$e!}'5yW!Xa(aW'tQ&k!bOY$eZr$ers%Wsw$ewx'Sx#O$e#O#P&S#P~$e!q'6na(aW'tQ&UP&k!bOX$eXY'7sZp$epq'7sqr$ers%Wsw$ewx'Sx!c$e!c!}'9R!}#O$e#O#P&S#P#R$e#R#S'9R#S#T$e#T#o'9R#o~$e!q'7|a(aW'tQ&k!bOX$eXY'7sZp$epq'7sqr$ers%Wsw$ewx'Sx!c$e!c!}'9R!}#O$e#O#P&S#P#R$e#R#S'9R#S#T$e#T#o'9R#o~$e!q'9^`(aW'tQcT&k!bOY$eZr$ers%Wsw$ewx'Sx!Q$e!Q!['9R![!c$e!c!}'9R!}#O$e#O#P&S#P#R$e#R#S'9R#S#T$e#T#o'9R#o~$e",
            tokenizers: [rp, ip, ap, 0, 1, 2, 3, 4, 5, 6, 7],
            topRules: {
                Program: [0, 266]
            },
            dynamicPrecedences: {
                84: 1,
                91: 1,
                98: 1,
                104: -10,
                105: 1,
                110: -1,
                116: -10,
                117: 1,
                172: 1,
                175: -10,
                221: -1,
                225: 2,
                226: 2,
                265: -10,
                323: 3,
                367: 1,
                368: 3,
                369: 1,
                370: 1
            },
            specialized: [{
                term: 314,
                get: e => op[e] || -1
            }, {
                term: 31,
                get: e => sp[e] || -1
            }, {
                term: 69,
                get: e => Op[e] || -1
            }, {
                term: 321,
                get: e => lp[e] || -1
            }],
            tokenPrec: 22015
        }),
        up = ea.define({
            parser: cp.configure({
                props: [Qa.add({
                    IfStatement: va({
                        except: /^\s*({|else\b)/
                    }),
                    TryStatement: va({
                        except: /^\s*({|catch)\b/
                    }),
                    LabeledStatement: ya,
                    CaseStatement: e => e.baseIndent + e.unit,
                    BlockComment: () => -1,
                    Statement: va({
                        except: /^{/
                    })
                }), Sa.add({
                    "DeclarationList CompoundStatement EnumeratorList FieldDeclarationList InitializerList": _a,
                    BlockComment: e => ({
                        from: e.from + 2,
                        to: e.to - 2
                    })
                }), ks({
                    "typedef struct union enum class typename decltype auto template operator friend noexcept namespace using __attribute__ __declspec __based": Fs.definitionKeyword,
                    "extern MsCallModifier MsPointerModifier extern static register inline const volatile restrict _Atomic mutable constexpr virtual explicit VirtualSpecifier Access": Fs.modifier,
                    "if else switch for while do case default return break continue goto throw try catch": Fs.controlKeyword,
                    "new sizeof delete static_assert": Fs.operatorKeyword,
                    "NULL nullptr": Fs.null,
                    this: Fs.self,
                    "True False": Fs.bool,
                    "TypeSize PrimitiveType": Fs.standard(Fs.typeName),
                    TypeIdentifier: Fs.typeName,
                    FieldIdentifier: Fs.propertyName,
                    "CallExpression/FieldExpression/FieldIdentifier": Fs.function(Fs.propertyName),
                    StatementIdentifier: Fs.labelName,
                    Identifier: Fs.variableName,
                    "CallExpression/Identifier": Fs.function(Fs.variableName),
                    "CallExpression/ScopedIdentifier/Identifier": Fs.function(Fs.variableName),
                    DestructorName: Fs.name,
                    NamespaceIdentifier: Fs.namespace,
                    OperatorName: Fs.operator,
                    ArithOp: Fs.arithmeticOperator,
                    LogicOp: Fs.logicOperator,
                    BitOp: Fs.bitwiseOperator,
                    CompareOp: Fs.compareOperator,
                    AssignOp: Fs.definitionOperator,
                    UpdateOp: Fs.updateOperator,
                    LineComment: Fs.lineComment,
                    BlockComment: Fs.blockComment,
                    Number: Fs.number,
                    String: Fs.string,
                    "RawString SystemLibString": Fs.special(Fs.string),
                    CharLiteral: Fs.character,
                    EscapeSequence: Fs.escape,
                    PreProcArg: Fs.meta,
                    "PreprocDirectiveName #include #ifdef #ifndef #if #define #else #endif #elif": Fs.processingInstruction,
                    MacroName: Fs.special(Fs.name),
                    "( )": Fs.paren,
                    "[ ]": Fs.squareBracket,
                    "{ }": Fs.brace,
                    "< >": Fs.angleBracket,
                    ". ->": Fs.derefOperator,
                    ", ;": Fs.separator
                })]
            }),
            languageData: {
                commentTokens: {
                    line: "//",
                    block: {
                        open: "/*",
                        close: "*/"
                    }
                },
                indentOnInput: /^\s*(?:case |default:|\{|\})$/
            }
        });
    var dp = Object.freeze({
        __proto__: null,
        cpp: function() {
            return new ca(up)
        },
        cppLanguage: up
    });
    const pp = {
            __proto__: null,
            true: 34,
            false: 34,
            null: 40,
            void: 44,
            byte: 46,
            short: 46,
            int: 46,
            long: 46,
            char: 46,
            float: 46,
            double: 46,
            boolean: 46,
            extends: 60,
            super: 62,
            class: 74,
            this: 76,
            new: 82,
            public: 98,
            protected: 100,
            private: 102,
            abstract: 104,
            static: 106,
            final: 108,
            strictfp: 110,
            default: 112,
            synchronized: 114,
            native: 116,
            transient: 118,
            volatile: 120,
            throws: 148,
            implements: 158,
            interface: 164,
            enum: 174,
            instanceof: 234,
            open: 263,
            module: 265,
            requires: 270,
            transitive: 272,
            exports: 274,
            to: 276,
            opens: 278,
            uses: 280,
            provides: 282,
            with: 284,
            package: 288,
            import: 292,
            if: 304,
            else: 306,
            while: 310,
            for: 314,
            assert: 326,
            switch: 330,
            case: 336,
            do: 340,
            break: 344,
            continue: 350,
            return: 356,
            throw: 362,
            try: 366,
            catch: 370,
            finally: 378
        },
        hp = El.deserialize({
            version: 13,
            states: "#'fQ]QPOOO&nQQO'#H[O)OQQO'#CbOOQO'#Cb'#CbO)VQPO'#CaOOQO'#Ha'#HaOOQO'#Ct'#CtO*oQPO'#D^O+YQQO'#HhOOQO'#Hh'#HhO-nQQO'#HcO-uQQO'#HcOOQO'#Hc'#HcOOQO'#Hb'#HbO-|QPO'#DTO0PQPO'#GlO1dQPO'#D^O2tQPO'#DyO)VQPO'#EZO2{QPO'#EZOOQO'#DU'#DUO4nQQO'#H_O6rQQO'#EdO6yQPO'#EcO7OQPO'#EeOOQO'#H`'#H`O5UQQO'#H`O8RQQO'#FfO8YQPO'#EvO8_QPO'#E{O8_QPO'#E}OOQO'#H_'#H_OOQO'#HW'#HWOOQO'#Gf'#GfOOQO'#HV'#HVO9lQPO'#FgOOQO'#HU'#HUOOQO'#Ge'#GeQ]QPOOOOQO'#Hn'#HnO9qQPO'#HnO9vQPO'#DzO9vQPO'#EUO9vQPO'#EPO:OQPO'#HkO:aQQO'#EeO)VQPO'#C`O:iQPO'#C`O)VQPO'#FaO:nQPO'#FcO:yQPO'#FiO:yQPO'#FlO;OQPO'#FnO8_QPO'#FtO:yQPO'#FvO]QPO'#F{O;TQPO'#F}O;]QPO'#GQO;eQPO'#GTO:yQPO'#GVO8_QPO'#GWO;lQPO'#GYOOQO'#H['#H[O<]QQO,58{OOQO'#HY'#HYOOQO'#Hd'#HdO>aQPO,59dO?fQPO,59xOOQO-E:d-E:dO)VQPO,58zO@VQPO,58zO)VQPO,5;{O@[QPO'#DOO@aQPO'#DOOOQO'#Gh'#GhOAjQQO,59iOOQO'#Dl'#DlOBuQPO'#HpOCPQPO'#DkOC_QPO'#HoOCgQPO,5<]OClQPO,59]ODVQPO'#CwOOQO,59b,59bOD^QPO,59aOFfQQO'#CbO)_QPO'#D^OG_QQO'#HhOGrQQO,59oOGyQPO'#DuOHXQPO'#HwOHaQPO,5:_OHfQPO,5:_OH|QPO,5;lOIXQPO'#IOOIdQPO,5;cOIiQPO,5=WOOQO-E:j-E:jOOQO,5:e,5:eOJ|QPO,5:eOKTQPO,5:uOKYQPO,5<]O)VQPO,5:uO9vQPO,5:fO9vQPO,5:pO9vQPO,5:kOKyQPO,59pOLQQPO,5:|OM_QPO,5;PO8_QPO,59TOMmQPO'#DWOOQO,5:},5:}OOQO'#Ek'#EkOOQO'#Em'#EmO8_QPO,5;TO8_QPO,5;TO8_QPO,5;TO8_QPO,5;TO8_QPO,5;TO8_QPO,5;TO8_QPO,5;dOOQO,5;g,5;gOOQO,5<Q,5<QOMtQPO,5;`ONVQPO,5;bOMtQPO'#CxON^QQO'#HhONlQQO,5;iO]QPO,5<ROOQO-E:c-E:cOOQO,5>Y,5>YO! |QPO,5:fO!![QPO,5:pO!!dQPO,5:kO!!oQPO,5>VOGyQPO,5>VOKhQPO,59UO!!zQQO,58zO!#SQQO,5;{O!#[QQO,5;}O)VQPO,5;}O8_QPO'#DTO]QPO,5<TO]QPO,5<WO!#dQPO'#FpO]QPO,5<YO]QPO,5<^O!$^QQO,5<`O!$hQPO,5<bO!$mQPO,5<gOOQO'#GP'#GPOOQO,5<i,5<iO!$rQPO,5<iOOQO'#GS'#GSOOQO,5<l,5<lO!$wQPO,5<lO!$|QQO,5<oOOQO,5<o,5<oO;oQPO,5<qO!%TQQO,5<rO!%[QPO'#GcO!&_QPO,5<tO;oQPO,5<|O)VQPO,58}O!*VQPO'#ChOOQO1G.k1G.kO!*aQPO,59iO!!zQQO1G.fO)VQPO1G.fO!+bQQO1G1gOOQO'#Gi'#GiO!,hQQO,59jO@[QPO,59jOOQO-E:f-E:fO!-hQPO,5>[O!.PQPO,5:VO9vQPO'#GnO!.WQPO,5>ZOOQO1G1w1G1wOOQO1G.w1G.wO!.qQPO'#CxO!/^QPO'#HhO!/kQPO'#CyO!/yQPO'#HgO!0RQPO,59cOOQO1G.{1G.{OD^QPO1G.{O!0iQPO,59dO!0vQQO'#H[O!1XQQO'#CbOOQO,5:a,5:aO9vQPO,5:bOOQO,5:`,5:`O!1jQQO,5:`OOQO1G/Z1G/ZO!1oQPO,5:aO!2QQPO'#GqO!2eQPO,5>cOOQO1G/y1G/yO!2mQPO'#DuO!3OQPO'#D^O!3VQPO1G/yOMtQPO'#GoO!3[QPO1G1WO8_QPO1G1WO9vQPO'#GwO!3dQPO,5>jOOQO1G0}1G0}OOQO1G0P1G0PO!3lQPO'#E[OOQO1G0a1G0aO!4]QPO1G1wOKTQPO1G0aO! |QPO1G0QO!![QPO1G0[O!!dQPO1G0VOOQO1G/[1G/[O!4bQQO1G.pO6yQPO1G0iO)VQPO1G0iO:OQPO'#HkO!6UQQO1G.pOOQO1G.p1G.pO!7XQQO1G0hOOQO1G0k1G0kO!7`QPO1G0kO!7kQQO1G.oO!8OQQO'#HlO!8]QPO,59rO!9iQQO1G0oO!:}QQO1G0oO!<YQQO1G0oO!<gQQO1G0oO!=iQQO1G0oO!>PQQO1G0oO!>^QQO1G1OO!>eQQO'#HhOOQO1G0z1G0zO!?hQQO1G0|OOQO1G0|1G0|OOQO1G1m1G1mOK]QPO'#DpO!AfQPO'#DZOMtQPO'#D{OMtQPO'#D|OOQO1G0Q1G0QO!AmQPO1G0QO!ArQPO1G0QO!AzQPO1G0QO!BVQPO'#EWOOQO1G0[1G0[O!BjQPO1G0[O!BoQPO'#ESOMtQPO'#EROOQO1G0V1G0VO!CiQPO1G0VO!CnQPO1G0VO!CvQPO'#EgO!C}QPO'#EgOOQO'#Gv'#GvO!DVQQO1G0lO!EvQQO1G3qO6yQPO1G3qO!GuQPO'#FVOOQO1G.f1G.fOOQO1G1g1G1gO!G|QPO1G1iOOQO1G1i1G1iO!HXQQO1G1iO!HaQPO1G1oOOQO1G1r1G1rO)_QPO'#D^O+YQQO,5<_OGyQPO,5<_O!LRQPO,5<[O!LYQPO,5<[OOQO1G1t1G1tOOQO1G1x1G1xOOQO1G1z1G1zO8_QPO1G1zO# vQPO'#FxOOQO1G1|1G1|O:yQPO1G2ROOQO1G2T1G2TOOQO1G2W1G2WOOQO1G2Z1G2ZOOQO1G2]1G2]OOQO1G2^1G2^O#!uQQO'#H[O#!|QQO'#CbO+YQQO'#HhO##wQQOOO#$eQQO'#EdO#$SQQO'#H`OGyQPO'#GdO#$lQPO,5<}OOQO'#HO'#HOO#$tQPO1G2`O#(lQPO'#G[O;oQPO'#G`OOQO1G2`1G2`O#(qQPO1G2hOOQO1G.i1G.iO#-sQQO'#EdO#.QQQO'#H^O#.bQPO'#FROOQO'#H^'#H^O#.lQPO'#H^O#/ZQPO'#IRO#/cQPO,59SO#/hQPO,59jOOQO7+$Q7+$QO!!zQQO7+$QOOQO7+'R7+'ROOQO-E:g-E:gO#0|QQO1G/UO#1|QPO'#DnO#2WQQO'#HqOOQO'#Hq'#HqOOQO1G/q1G/qOOQO,5=Y,5=YOOQO-E:l-E:lO#2hQSO,58{O#2oQPO,59eOOQO,59e,59eOMtQPO'#HjOCqQPO'#GgO#2}QPO,5>ROOQO1G.}1G.}OOQO7+$g7+$gOOQO1G/z1G/zO#3VQQO1G/zOOQO1G/|1G/|O#3[QPO1G/zOOQO1G/{1G/{O9vQPO1G/|OOQO,5=],5=]OOQO-E:o-E:oOOQO7+%e7+%eOOQO,5=Z,5=ZOOQO-E:m-E:mO8_QPO7+&rOOQO7+&r7+&rOOQO,5=c,5=cOOQO-E:u-E:uO#3aQPO'#ETO#3oQPO'#ETOOQO'#Gu'#GuO#4WQPO,5:vOOQO,5:v,5:vOOQO7+'c7+'cOOQO7+%{7+%{OOQO7+%l7+%lO!AmQPO7+%lO!ArQPO7+%lO!AzQPO7+%lOOQO7+%v7+%vO!BjQPO7+%vOOQO7+%q7+%qO!CiQPO7+%qO!CnQPO7+%qOOQO7+&T7+&TOOQO'#Ed'#EdO6yQPO7+&TO6yQPO,5>VO#4wQPO7+$[OOQO7+&S7+&SOOQO7+&V7+&VO8_QPO'#GjO#5VQPO,5>WOOQO1G/^1G/^O8_QPO7+&jO#5bQQO,59dO#6eQPO'#DqOK]QPO'#DqO#6pQPO'#HtO#6xQPO,5:[O#7cQQO'#HdO#8OQQO'#CtOKYQPO'#HsO#8nQPO'#DoO#8xQPO'#HsO#9ZQPO'#DoO#9cQPO'#H|O#9hQPO'#E_OOQO'#Hm'#HmOOQO'#Gk'#GkO#9pQPO,59uOOQO,59u,59uO#9wQPO'#HnOOQO,5:g,5:gO#;_QPO'#HyOOQO'#EO'#EOOOQO,5:h,5:hO#;jQPO'#EXO9vQPO'#EXO#;{QPO'#HzO#<WQPO,5:rOKYQPO'#HsOMtQPO'#HsO#<`QPO'#DoOOQO'#Gs'#GsO#<gQPO,5:nOOQO,5:n,5:nOOQO,5:m,5:mOOQO,5;R,5;RO#=aQQO,5;RO#=hQPO,5;ROOQO-E:t-E:tOOQO7+&W7+&WOOQO7+)]7+)]O#=oQQO7+)]OOQO'#Gz'#GzO#?]QPO,5;qOOQO,5;q,5;qO#?dQPO'#FWO)VQPO'#FWO)VQPO'#FWO)VQPO'#FWO#?rQPO7+'TO#?wQPO7+'TOOQO7+'T7+'TO]QPO7+'ZO#@SQPO1G1yOKYQPO1G1yO#@bQQO1G1vOMmQPO1G1vO#@iQPO1G1vO#@pQQO7+'fOOQO'#G}'#G}O#@wQPO,5<dOOQO,5<d,5<dO#AOQPO'#HnO8_QPO'#FyO#AWQPO7+'mO#A]QPO,5=OOKYQPO,5=OO#AbQPO1G2iO#BhQPO1G2iOOQO1G2i1G2iOOQO-E:|-E:|OOQO7+'z7+'zO!2QQPO'#G^O;oQPO,5<vOOQO,5<z,5<zO#BpQPO7+(SOOQO7+(S7+(SO#FhQPO,59TO#FoQPO'#IQO#FwQPO,5;mO)VQPO'#GyO#F|QPO,5>mOOQO1G.n1G.nO#GUQPO1G/UOOQO<<Gl<<GlO#GlQPO'#HrO#GtQPO,5:YOOQO1G/P1G/POOQO,5>U,5>UOOQO,5=R,5=ROOQO-E:e-E:eO#GyQPO7+%fOOQO7+%f7+%fOOQO7+%h7+%hOOQO<<J^<<J^O#HaQPO'#H[O#HhQPO'#CbO#HoQPO,5:oO#HtQPO,5:wO#3aQPO,5:oOOQO-E:s-E:sOOQO1G0b1G0bOOQO<<IW<<IWO!AmQPO<<IWO!ArQPO<<IWOOQO<<Ib<<IbOOQO<<I]<<I]O!CiQPO<<I]OOQO<<Io<<IoO#HyQQO<<GvO6yQPO<<IoO)VQPO<<IoOOQO<<Gv<<GvO#JmQQO,5=UOOQO-E:h-E:hO#JzQQO<<JUOOQO,5:],5:]OMtQPO'#DrO#K_QPO,5:]OK]QPO'#GpO#KjQPO,5>`OOQO1G/v1G/vO#KrQPO'#HpO#KyQPO,59wO#LOQPO,5>_OKYQPO,59wO#LZQPO,5:ZO#9hQPO,5:yOKYQPO,5>_OMtQPO,5>_O#9cQPO,5>hOOQO,5:Z,5:ZOHfQPO'#DsOOQO,5>h,5>hO#LcQPO'#E`OOQO,5:y,5:yO$ ^QPO,5:yOMtQPO'#DwOOQO-E:i-E:iOOQO1G/a1G/aOOQO,5:x,5:xOMtQPO'#GrO$ cQPO,5>eOOQO,5:s,5:sO$ nQPO,5:sO$ |QPO,5:sO$!_QPO'#GtO$!uQPO,5>fO$#QQPO'#EYOOQO1G0^1G0^O$#XQPO1G0^OKYQPO,5:oOOQO-E:q-E:qOOQO1G0Y1G0YOOQO1G0m1G0mO$#^QQO1G0mOOQO<<Lw<<LwOOQO-E:x-E:xOOQO1G1]1G1]O$#eQQO,5;rOOQO'#G{'#G{O#?dQPO,5;rOOQO'#IS'#ISO$#mQQO,5;rO$$OQQO,5;rOOQO<<Jo<<JoO$$WQPO<<JoOOQO<<Ju<<JuO8_QPO7+'eO$$]QPO7+'eOMmQPO7+'bO$$kQPO7+'bO$$pQQO7+'bOOQO<<KQ<<KQOOQO-E:{-E:{OOQO1G2O1G2OOOQO,5<e,5<eO$$wQQO,5<eOOQO<<KX<<KXO8_QPO1G2jO$%OQPO1G2jOOQO,5=l,5=lOOQO7+(T7+(TO$%TQPO7+(TOOQO-E;O-E;OO$&oQSO'#HcO$&ZQSO'#HcO$&vQPO'#G_O9vQPO,5<xOGyQPO,5<xOOQO1G2b1G2bOOQO<<Kn<<KnO$'XQQO1G.oOOQO1G1Y1G1YO$'cQPO'#GxO$'pQPO,5>lOOQO1G1X1G1XO$'xQPO'#FSOOQO,5=e,5=eOOQO-E:w-E:wO$'}QPO'#GmO$([QPO,5>^OOQO1G/t1G/tOOQO<<IQ<<IQOOQO1G0Z1G0ZO$(dQPO1G0cO$(iQPO1G0ZO$(nQPO1G0cOOQOAN>rAN>rO!AmQPOAN>rOOQOAN>wAN>wOOQOAN?ZAN?ZO6yQPOAN?ZO$(sQPO,5:^OOQO1G/w1G/wOOQO,5=[,5=[OOQO-E:n-E:nO$)OQPO,5>bOOQO1G/c1G/cOOQO1G3y1G3yO$)aQPO1G/cOOQO1G/u1G/uOOQO1G0e1G0eO$ ^QPO1G0eO#9cQPO'#HvO$)fQPO1G3yOKYQPO1G3yOOQO1G4S1G4SO$)qQPO'#DuO)_QPO'#D^OOQO,5:z,5:zO$)xQPO,5:zO$)xQPO,5:zO$*PQQO'#H_O$+_QQO'#H`O$+iQQO'#EaO$+tQPO'#EaOOQO,5:c,5:cOOQO,5=^,5=^OOQO-E:p-E:pOOQO1G0_1G0_O$+|QPO1G0_OOQO,5=`,5=`OOQO-E:r-E:rO$,[QPO,5:tOOQO7+%x7+%xOOQO7+&X7+&XOOQO1G1^1G1^O$,cQQO1G1^OOQO-E:y-E:yO$,kQQO'#ITO$,fQPO1G1^O$#sQPO1G1^O)VQPO1G1^OOQOAN@ZAN@ZO$,vQQO<<KPO8_QPO<<KPO$,}QPO<<J|OOQO<<J|<<J|OMmQPO<<J|OOQO1G2P1G2PO$-SQQO7+(UO8_QPO7+(UOOQO<<Ko<<KoP!%[QPO'#HQOGyQPO'#HPO$-^QPO,5<yO$-iQPO1G2dO9vQPO1G2dOOQO,5=d,5=dOOQO-E:v-E:vO#FhQPO,5;nOOQO,5=X,5=XOOQO-E:k-E:kO$-nQPO7+%}OOQO7+%u7+%uO$-|QPO7+%}OOQOG24^G24^OOQOG24uG24uOOQO,59j,59jO$.RQPO1G/xO$.^QPO1G3|OOQO7+$}7+$}OOQO7+&P7+&POOQO7+)e7+)eO$.oQPO7+)eO!0WQPO,5:`OOQO1G0f1G0fO$.zQPO1G0fO$/RQPO,59pO$/gQPO,5:{O6yQPO,5:{OOQO7+%y7+%yOOQO7+&x7+&xO)VQPO'#G|O$/lQPO,5>oO$/tQPO7+&xO$/yQQO'#IUOOQOAN@kAN@kO$0UQQOAN@kOOQOAN@hAN@hO$0]QPOAN@hO$0bQQO<<KpO$0lQPO,5=kOOQO-E:}-E:}OOQO7+(O7+(OO$0}QPO7+(OO$1SQPO<<IiOOQO<<Ii<<IiO#FhQPO<<IiO$1SQPO<<IiOOQO1G/U1G/UOOQO<<MP<<MPOOQO7+&Q7+&QO$1bQPO1G0iO$1mQQO1G0gOOQO1G0g1G0gO$1uQPO1G0gO$1zQQO,5=hOOQO-E:z-E:zOOQO<<Jd<<JdO$2VQPO,5>pOOQOG26VG26VOOQOG26SG26SOOQO<<Kj<<KjOOQOAN?TAN?TO#FhQPOAN?TO$2_QPOAN?TO$2dQPOAN?TO6yQPO7+&RO$2rQPO7+&ROOQO7+&R7+&RO$2wQPOG24oOOQOG24oG24oO#FhQPOG24oO$2|QPO<<ImOOQO<<Im<<ImOOQOLD*ZLD*ZO$3RQPOLD*ZOOQOAN?XAN?XOOQO!$'Mu!$'MuO$3WQQO'#H[O)VQPO'#CaO@[QPO'#DOO@[QPO'#DOO$3nQQO,59iO$3xQQO'#CbOMtQPO'#CxO@[QPO,59jO@[QPO,59jO$4]QQO'#HhO$5dQQO,59dO$6kQPO'#DOO$6sQPO'#DOOMtQPO,5;`O$6{QQO1G.oO$8QQQO1G0oO$9PQQO1G0oO$9^QQO1G0oO$:YQQO1G0oO$:jQQO1G0|O$:qQQO<<JUOMtQPO'#CxOLQQPO,59TOLQQPO,5;TOLQQPO,5;TOLQQPO,5;TOLQQPO,5;TO$:xQPO,5;bOLQQPO7+&jO$;PQQO'#EdO$;^QQO'#H`O$;kQPO'#EvOLQQPO'#E{OLQQPO'#E}OLQQPO,5;TOLQQPO,5;TOLQQPO1G1WO$;pQQO1G0oO$<QQQO1G1OOLQQPO7+&rO$<XQPO,5;lO8_QPO,5;dO$<dQPO1G1WO-|QPO'#DT",
            stateData: "$<o~OPOSQOS%wOS~OZ^O_TO`TOaTObTOcTOdTOf[Og[Oo}OuyOviOy|O|aO!OtO!RwO!SwO!TwO!UwO!VwO!WwO!XwO!YxO!Z!]O![wO!]wO!^wO!t{O!yzO#dnO#pmO#rnO#snO#w!PO#x!OO$U!QO$W!RO$^!SO$a!TO$c!UO$i!VO$k!WO$p!XO$r!YO$u!ZO$x![O${!^O$}!_O%{SO%}QO&PPO&obO~OWhXW&OXZ&OXshXs&OX!a&OX#[&OX#^&OX#`&OX#b&OX#c&OX#d&OX#e&OX#f&OX#g&OX#i&OX#m&OX#p&OX%{hX%}hX&PhX&X&OX&YhX&Y&OX&i&OX&qhX&q&OX&s!`XY&OX~O!O&OX#n&OXt&OXp&OX{&OX~P$qOWUXW&WXZUXsUXs&WX!OUX!aUX#[UX#^UX#`UX#bUX#cUX#dUX#eUX#fUX#gUX#iUX#mUX#pUX%{&WX%}&WX&P&WX&XUX&YUX&Y&WX&iUX&qUX&q&WX&s!`X~O#n$[X~P'RO%}RO&P!`O~Of[Og[O!RwO!SwO!TwO!UwO!VwO!WwO!XwO!YxO![wO!]wO!^wO%{SO%}!cO&PUOf!QXg!QX%}!QX&P!QX~O#w!hO#x!gO$U!iOu!QX!t!QX!y!QX&o!QX~P)_OW!sOs!jO%{SO%}!nO&P!nO&q&[X~OW!vOs&VX%{&VX%}&VX&P&VX&q&VXY&VXv&VX&i&VX&l&VXZ&VXp&VX&X&VX!O&VX#^&VX#`&VX#b&VX#c&VX#d&VX#e&VX#f&VX#g&VX#i&VX#m&VX#p&VX|&VX!q&VX#n&VXt&VX{&VX~O&Y!tO~P+nO&Y&VX~P+nOZ^O_TO`TOaTObTOcTOdTOf[Og[Oo}OviOy|O!RwO!SwO!TwO!UwO!VwO!WwO!XwO!YxO![wO!]wO!^wO#dnO#pmO#rnO#snO%{SO%}!wO&P0eOY&kP~O%{SOf%`Xg%`Xu%`X!R%`X!S%`X!T%`X!U%`X!V%`X!W%`X!X%`X!Y%`X![%`X!]%`X!^%`X!t%`X!y%`X%}%`X&P%`X&o%`X&Y%`X~O!RwO!SwO!TwO!UwO!VwO!WwO!XwO!YxO![wO!]wO!^wOf!QXg!QXu!QX!t!QX!y!QX%}!QX&P!QX&o!QX&Y!QX~O{#UO~P]Of[Og[Ou#ZO!t#]O!y#[O%}!cO&PUO&o#YO~Os#_O&q#`O!O&RX#^&RX#`&RX#b&RX#c&RX#d&RX#e&RX#f&RX#g&RX#i&RX#m&RX#p&RX&X&RX&Y&RX&i&RX~OW#^OY&RX#n&RXt&RXp&RX{&RX~P3gO!a#aO#[#aOW&SXs&SX!O&SX#^&SX#`&SX#b&SX#c&SX#d&SX#e&SX#f&SX#g&SX#i&SX#m&SX#p&SX&X&SX&Y&SX&i&SX&q&SXY&SX#n&SXp&SX{&SX~OZ#WX~P5UOZ#bO~O&q#`O~O#^#fO#`#gO#b#hO#c#hO#d#iO#e#jO#f#kO#g#kO#i#oO#m#lO#p#mO&X#dO&Y#dO&i#eO~O!O#nO~P7TO&s#pO~OZ^O_TO`TOaTObTOcTOdTOf[Og[Oo}OviOy|O#dnO#pmO#rnO#snO%{SO%}0jO&PPO~O#n#tO~O!Z#vO~O%}!nO&P!nO~Of[Og[O%}!cO&PUO&Y!tO~OW#|O&q#`O~O#x!gO~O!V$QO%}RO&P!`O~OZ$RO~OZ$UO~O!O$]O%}$[O~O!O$`O%}$_O~O!O$cO~P8_OZ$fO|aO~OW$iOZ$jOfTagTa%{Ta%}Ta&PTa~OuTa!RTa!STa!TTa!UTa!VTa!WTa!XTa!YTa![Ta!]Ta!^Ta!tTa!yTa#wTa#xTa$UTa&oTasTaYTa&YTapTa{Ta!OTa~P;tO%{SOpla&XlaYla&ila!Ola~Os0gO&qla|la!qla~P={O!RwO!SwO!TwO!UwO!VwO!WwO!XwO!YxO![wO!]wO!^wO~Of!Qag!Qau!Qa!t!Qa!y!Qa%}!Qa&P!Qa&o!Qa&Y!Qa~P>qO#x$nO~Ot$pO~Os$rO%{SO~O%{qa&iqa#^qa#`qa#bqa#cqa#dqa#eqa#fqa#gqa#iqa#mqa#pqa&Xqa&Yqa~Os!jOWqa%}qa&Pqa&qqaYqavqa&lqa!Oqa#nqapqa{qa~P@iOs0gO%{SOp&dX!O&dX!a&dX~OY&dX#n&dX~PBdO!a$uOp!_X!O!_XY!_X~Op$vO!O&cX~O!O$xO~Ou$yO~Of[Og[O%{0fO%}!cO&PUO&]$|O~O&X&ZP~PCqO%{SO%}!cO&PUO~OWUXW&WXYUXZUXsUXs&WX!aUX#[UX#^UX#`UX#bUX#cUX#dUX#eUX#fUX#gUX#iUX#mUX#pUX%{&WX%}&WX&P&WX&XUX&YUX&Y&WX&iUX&qUX&q&WX&s!`X~OY!`XY&WXp!`Xv&WX&i&WX&l&WX~PDiOv%WO%{SO%}%TO&P%SO&l%VO~OW!sOs!jOY&[X&i&[X&q&[X~PF|OY%YO~P7TOf[Og[O%}!cO&PUO~Op%[OY&kX~OY%^O~Of[Og[O%{SO%}!cO&PUOY&kP~P>qOY%dO&i%bO&q#`O~Op%eO&s#pOY&rX~OY%gO~O%{SOf%`ag%`au%`a!R%`a!S%`a!T%`a!U%`a!V%`a!W%`a!X%`a!Y%`a![%`a!]%`a!^%`a!t%`a!y%`a%}%`a&P%`a&o%`a&Y%`a~O{%hO~P]O|%iO~Os0gO%{SO%}!nO&P!nO~Oo%uOv%vO%}RO&P!`O&Y!tO~Oy%tO~PKhOZ1bO_TO`TOaTObTOcTOdTOf[Og[Oo}OviOy|O#d1WO#p1VO#r1WO#s1WO%{SO%}0jO&PPO~Oy%xO%}RO&P!`O&Y!tO~OY&`P~P8_Of[Og[O%{SO%}!cO&PUO~O|aO~P8_OW!sOs!jO%{SO&q&[X~O#p#mO!O#qa#^#qa#`#qa#b#qa#c#qa#d#qa#e#qa#f#qa#g#qa#i#qa#m#qa&X#qa&Y#qa&i#qaY#qa#n#qat#qap#qa{#qa~On&]O|&[O!q&^O&Y&ZO~O|&cO!q&^O~On&gO|&fO&Y&ZO~OZ#bOs&kO%{SO~OW$iO|&qO~OW$iO!O&sO~OW&tO!O&uO~O!RwO!SwO!TwO!UwO!VwO!WwO!XwO!YxO![wO!]wO!^wO!O&`P~P8_O!O'QO#n'RO~P7TO|'SO~O$a'UO~O!O'VO~O!O'WO~O!O'XO~P7TO!O'ZO~P7TOZ$RO_TO`TOaTObTOcTOdTOf[Og[Oo}OviOy|O%{SO%}']O&P'[O~P>qO%P'fO%T'gOZ$|a_$|a`$|aa$|ab$|ac$|ad$|af$|ag$|ao$|au$|av$|ay$|a|$|a!O$|a!R$|a!S$|a!T$|a!U$|a!V$|a!W$|a!X$|a!Y$|a!Z$|a![$|a!]$|a!^$|a!t$|a!y$|a#d$|a#p$|a#r$|a#s$|a#w$|a#x$|a$U$|a$W$|a$^$|a$a$|a$c$|a$i$|a$k$|a$p$|a$r$|a$u$|a$x$|a${$|a$}$|a%u$|a%{$|a%}$|a&P$|a&o$|a{$|a$_$|a$n$|a~O|'mOY&uP~P8_Os0gO%{qa&qqa%}qa&Pqapqa&XqaYqavqa&iqa&lqa|qa!qqa&yqa!Oqa~OW$iO!O'uO~Ot$pOsra%{ra%}ra&Pra&qraYravra&ira&lra!Ora&Xra#nrapra~OWra#^ra#`ra#bra#cra#dra#era#fra#gra#ira#mra#pra&Yra{ra~P!+jOs0gO%{SOp&da!O&da!a&daY&da#n&da~O|'xO~P8_Op$vO!O&ca~Of[Og[O%{0fO%}!cO&PUO~O&](PO~P!.`O%{SOp&[X&X&[XY&[X&i&[X!O&[X~Os0gO|&[X!q&[X~P!.xOn(ROo(ROpmX&XmX~Op(SO&X&ZX~O&X(UO~Os0gOv(WO%{SO%}RO&P!`O~OYla&ila&qla~P!0WOW&OXY!`Xp!`Xs!`X%{!`X~OWUXY!`Xp!`Xs!`X%{!`X~OW(ZO~Os0gO%{SO%}!nO&P!nO&l(]O~Of[Og[O%{SO%}!cO&PUO~P>qOp%[OY&ka~Os0gO%{SO%}!nO&P!nO&l%VO~O%{SO~P1dOY(`O~OY(cO&i%bO~Op%eOY&ra~Of[Og[OuyO{(kO!t{O%{SO%}!cO&PUO&obO~P>qO!O(lO~OW^iZ#WXs^i!O^i!a^i#[^i#^^i#`^i#b^i#c^i#d^i#e^i#f^i#g^i#i^i#m^i#p^i&X^i&Y^i&i^i&q^iY^i#n^it^ip^i{^i~OW({O~O#^1XO#`0|O#b0}O#c0}O#d1OO#e1PO#f1YO#g1YO#i0rO#m1`O#p#mO&X#dO&Y#dO&i#eO~Ot(|O~P!6ZOy(}O%}RO&P!`O~O!O]iY]i#n]ip]i{]i~P7TOp)OOY&`X!O&`X~P7TOY)QO~O#p#mO!O#]i#^#]i#`#]i#b#]i#c#]i#d#]i#e#]i#i#]i#m#]i&X#]i&Y#]i&i#]iY#]i#n#]ip#]i{#]i~O#f#kO#g#kO~P!8bO#^#fO#e#jO#f#kO#g#kO#i#oO#p#mO&X#dO&Y#dO!O#]i#`#]i#b#]i#c#]i#m#]i&i#]iY#]i#n#]ip#]i{#]i~O#d#iO~P!9sO#^#fO#e#jO#f#kO#g#kO#i#oO#p#mO&X#dO&Y#dO!O#]i#b#]i#c#]i#m#]iY#]i#n#]ip#]i{#]i~O#`#gO#d#iO&i#eO~P!;UO#d#]i~P!9sO#p#mO!O#]i#`#]i#b#]i#c#]i#d#]i#e#]i#m#]i&i#]iY#]i#n#]ip#]i{#]i~O#^#fO#f#kO#g#kO#i#oO&X#dO&Y#dO~P!<nO#f#]i#g#]it#]i~P!8bO#n)RO~P7TOs!jO#^&[X#`&[X#b&[X#c&[X#d&[X#e&[X#f&[X#g&[X#i&[X#m&[X#p&[X&Y&[X#n&[X{&[X~P!.xO!O#jiY#ji#n#jip#ji{#ji~P7TOf[Og[OuyO|aO!O)aO!RwO!SwO!TwO!UwO!V)eO!WwO!XwO!YxO![wO!]wO!^wO!t{O!yzO%{SO%})XO&P)YO&Y&ZO&obO~O{)dO~P!?{O|&[O~O|&[O!q&^O~On&]O|&[O!q&^O~O%{SO%}!nO&P!nO{&nP!O&nP~P>qO|&cO~Of[Og[OuyO{)sO!O)qO!t{O!yzO%{SO%}!cO&PUO&Y&ZO&obO~P>qO|&fO~On&gO|&fO~Ot)uO~PLQOs)wO%{SO~Os&kO|'xO%{SOW#Yi!O#Yi#^#Yi#`#Yi#b#Yi#c#Yi#d#Yi#e#Yi#f#Yi#g#Yi#i#Yi#m#Yi#p#Yi&X#Yi&Y#Yi&i#Yi&q#YiY#Yi#n#Yit#Yip#Yi{#Yi~O|&[OW&_is&_i!O&_i#^&_i#`&_i#b&_i#c&_i#d&_i#e&_i#f&_i#g&_i#i&_i#m&_i#p&_i&X&_i&Y&_i&i&_i&q&_iY&_i#n&_it&_ip&_i{&_i~O#{*PO#}*QO$P*QO$Q*RO$R*SO~O{*OO~P!GdO$X*TO%}RO&P!`O~OW*UO!O*VO~O$_*WOZ$]i_$]i`$]ia$]ib$]ic$]id$]if$]ig$]io$]iu$]iv$]iy$]i|$]i!O$]i!R$]i!S$]i!T$]i!U$]i!V$]i!W$]i!X$]i!Y$]i!Z$]i![$]i!]$]i!^$]i!t$]i!y$]i#d$]i#p$]i#r$]i#s$]i#w$]i#x$]i$U$]i$W$]i$^$]i$a$]i$c$]i$i$]i$k$]i$p$]i$r$]i$u$]i$x$]i${$]i$}$]i%u$]i%{$]i%}$]i&P$]i&o$]i{$]i$n$]i~O!O*[O~P8_O!O*]O~OZ^O_TO`TOaTObTOcTOdTOf[Og[Oo}OuyOviOy|O|aO!OtO!RwO!SwO!TwO!UwO!VwO!WwO!XwO!Y*bO!Z!]O![wO!]wO!^wO!t{O!yzO#dnO#pmO#rnO#snO#w!PO#x!OO$U!QO$W!RO$^!SO$a!TO$c!UO$i!VO$k!WO$n*cO$p!XO$r!YO$u!ZO$x![O${!^O$}!_O%{SO%}QO&PPO&obO~O{*aO~P!L_OWhXW&OXY&OXZ&OXshXs&OX%{hX%}hX&PhX&YhX&qhX&q&OX~O!O&OX~P# }OWUXW&WXYUXZUXsUXs&WX!OUX%{&WX%}&WX&P&WX&Y&WX&qUX&q&WX~OW#^Os#_O&q#`O~OW&SXY%WXs&SX!O%WX&q&SX~OZ#WX~P#$SOY*iO!O*gO~O%P'fO%T'gOZ$|i_$|i`$|ia$|ib$|ic$|id$|if$|ig$|io$|iu$|iv$|iy$|i|$|i!O$|i!R$|i!S$|i!T$|i!U$|i!V$|i!W$|i!X$|i!Y$|i!Z$|i![$|i!]$|i!^$|i!t$|i!y$|i#d$|i#p$|i#r$|i#s$|i#w$|i#x$|i$U$|i$W$|i$^$|i$a$|i$c$|i$i$|i$k$|i$p$|i$r$|i$u$|i$x$|i${$|i$}$|i%u$|i%{$|i%}$|i&P$|i&o$|i{$|i$_$|i$n$|i~OZ*lO~O%P'fO%T'gOZ%Ui_%Ui`%Uia%Uib%Uic%Uid%Uif%Uig%Uio%Uiu%Uiv%Uiy%Ui|%Ui!O%Ui!R%Ui!S%Ui!T%Ui!U%Ui!V%Ui!W%Ui!X%Ui!Y%Ui!Z%Ui![%Ui!]%Ui!^%Ui!t%Ui!y%Ui#d%Ui#p%Ui#r%Ui#s%Ui#w%Ui#x%Ui$U%Ui$W%Ui$^%Ui$a%Ui$c%Ui$i%Ui$k%Ui$p%Ui$r%Ui$u%Ui$x%Ui${%Ui$}%Ui%u%Ui%{%Ui%}%Ui&P%Ui&o%Ui{%Ui$_%Ui$n%Ui~OW&SXZ#WXs&SX#^&SX#`&SX#b&SX#c&SX#d&SX#e&SX#f&SX#g&SX#i&SX#m&SX#p&SX&X&SX&Y&SX&i&SX&q&SX~O!a*qO#[#aOY&SX~P#,iOY&QXp&QX{&QX!O&QX~P7TO|'mO{&tP~P8_OY&QXf%YXg%YX%{%YX%}%YX&P%YXp&QX{&QX!O&QX~Op*tOY&uX~OY*vO~O!ara|ra!qra&yra!lra!Yra~P!+jOt$pOsri%{ri%}ri&Pri&qriYrivri&iri&lri!Ori&Xri#nripri~OWri#^ri#`ri#bri#cri#dri#eri#fri#gri#iri#mri#pri&Yri{ri~P#0OO|'xO{&fP~P8_Op&eX!O&eX{&eXY&eX~P7TO&]Ta~P;tOn(ROo(ROpma&Xma~Op(SO&X&Za~OW+PO~Ov+QO~Os0gO%{SO%}+UO&P+TO~Of[Og[Ou#ZO!t#]O%}!cO&PUO&o#YO~Of[Og[OuyO{+ZO!t{O%{SO%}!cO&PUO&obO~P>qOv+fO%}RO&P!`O&Y!tO~Op)OOY&`a!O&`a~Os!jO#^la#`la#bla#cla#dla#ela#fla#gla#ila#mla#pla&Yla#nla{la~P={On+kOp!eX&X!eX~Op+mO&X&hX~O&X+oO~OW&WXs&WX%{&WX%}&WX&P&WX&Y&WX~OZ!`X~P#6}OWhXshX%{hX%}hX&PhX&YhX~OZ!`X~P#7jOf[Og[Ou#ZO!t#]O!y#[O&Y&ZO&o#YO~O%})XO&P)YO~P#8VOf[Og[O%{SO%})XO&P)YO~O|aO!O+yO~OZ+zO~O|+|O!l,PO~O{,RO~P!?{O|aOf&bXg&bXu&bX!R&bX!S&bX!T&bX!U&bX!V&bX!W&bX!X&bX!Y&bX![&bX!]&bX!^&bX!t&bX!y&bX%{&bX%}&bX&P&bX&Y&bX&o&bX~Op,TO|&mX!O&mX~OZ#bO|&[Op!{X{!{X!O!{X~Op,YO{&nX!O&nX~O{,]O!O,[O~O&Y&ZO~P2{Of[Og[OuyO{,aO!O)qO!t{O!yzO%{SO%}!cO&PUO&Y&ZO&obO~P>qOt,bO~P!6ZOt,bO~PLQO|&[OW&_qs&_q!O&_q#^&_q#`&_q#b&_q#c&_q#d&_q#e&_q#f&_q#g&_q#i&_q#m&_q#p&_q&X&_q&Y&_q&i&_q&q&_qY&_q#n&_qt&_qp&_q{&_q~O{,fO~P!GdO!V,jO#|,jO%}RO&P!`O~O!O,mO~O$X,nO%}RO&P!`O~O!a$uO#n,pOp!_X!O!_X~O!O,rO~P7TO!O,rO~P8_O!O,uO~P7TO{,wO~P!L_O!Z#vO#n,xO~O!O,zO~O!a,{O~OY-OOZ$RO_TO`TOaTObTOcTOdTOf[Og[Oo}OviOy|O%{SO%}']O&P'[O~P>qOY-OO!O-PO~O%P'fO%T'gOZ%Uq_%Uq`%Uqa%Uqb%Uqc%Uqd%Uqf%Uqg%Uqo%Uqu%Uqv%Uqy%Uq|%Uq!O%Uq!R%Uq!S%Uq!T%Uq!U%Uq!V%Uq!W%Uq!X%Uq!Y%Uq!Z%Uq![%Uq!]%Uq!^%Uq!t%Uq!y%Uq#d%Uq#p%Uq#r%Uq#s%Uq#w%Uq#x%Uq$U%Uq$W%Uq$^%Uq$a%Uq$c%Uq$i%Uq$k%Uq$p%Uq$r%Uq$u%Uq$x%Uq${%Uq$}%Uq%u%Uq%{%Uq%}%Uq&P%Uq&o%Uq{%Uq$_%Uq$n%Uq~O|'mO~P8_Op-[O{&tX~O{-^O~Op*tOY&ua~O!ari|ri!qri&yri!lri!Yri~P#0OOp-bO{&fX~O{-dO~Ov-eO~Op!`Xs!`X!O!`X!a!`X%{!`X~OZ&OX~P#HOOZUX~P#HOO!O-fO~OZ-gO~OW^yZ#WXs^y!O^y!a^y#[^y#^^y#`^y#b^y#c^y#d^y#e^y#f^y#g^y#i^y#m^y#p^y&X^y&Y^y&i^y&q^yY^y#n^yt^yp^y{^y~OY%^ap%^a!O%^a~P7TO!O#lyY#ly#n#lyp#ly{#ly~P7TOn+kOp!ea&X!ea~Op+mO&X&ha~OZ+zO~PBdO!O-tO~O!l,PO|&ga!O&ga~O|aO!O-wO~OZ^O_TO`TOaTObTOcTOdTOf[Og[Oo.VOuyOv.UOy|O{.QO|aO!OtO!Z!]O!t{O!yzO#dnO#pmO#rnO#snO#w!PO#x!OO$U!QO$W!RO$^!SO$a!TO$c!UO$i!VO$k!WO$p!XO$r!YO$u!ZO$x![O${!^O$}!_O%{SO%}QO&PPO&Y!tO&obO~P>qO|+|O~Op,TO|&ma!O&ma~O|&[Op!{a{!{a!O!{a~OZ#bO|&[Op!{a{!{a!O!{a~O%{SO%}!nO&P!nOp%hX{%hX!O%hX~P>qOp,YO{&na!O&na~O{!|X~P!?{O{.aO~Ot.bO~P!6ZOW$iO!O.cO~OW$iO$O.hO%}RO&P!`O!O&wP~OW$iO$S.iO~O!O.jO~O!a$uO#n.lOp!_X!O!_X~OY.nO~O!O.oO~P7TO#n.pO~P7TO!a.rO~OY.sOZ$RO_TO`TOaTObTOcTOdTOf[Og[Oo}OviOy|O%{SO%}']O&P'[O~P>qOW!vOs&VX%{&VX%}&VX&P&VX&y&VX~O&Y!tO~P$&ZOs0gO%{SO&y.uO%}%RX&P%RX~OY&QXp&QX~P7TO|'mOp%lX{%lX~P8_Op-[O{&ta~O!a.{O~O|'xOp%aX{%aX~P8_Op-bO{&fa~OY/OO~O!O/PO~OZ/QO~O&i%bOp!fa&X!fa~Os0gO%{SO|&ja!O&ja!l&ja~O!O/WO~O!l,PO|&gi!O&gi~Os0gO~PF|O{/]O~P]OW/_O~P3gOW&SXs&SX#^&SX#`&SX#b&SX#c&SX#d&SX#e&SX#f&SX#g&SX#i&SX#m&SX#p&SX&X&SX&Y&SX&i&SX&q&SX~OZ#bO!O&SX~P$*WOW#|OZ#bO&q#`O~Oo/aOv/aO~O|&[Op!{i{!{i!O!{i~O{!|a~P!?{OW$iO!O/cO~OW$iOp/dO!O&wX~OY/hO~P7TOY/jO~OY%Wq!O%Wq~P7TO&y.uO%}%Ra&P%Ra~OY/oO~Os0gO!O/rO!Y/sO%{SO~OY/tO~O&i%bOp!fi&X!fi~Os0gO%{SO|&ji!O&ji!l&ji~O!l,PO|&gq!O&gq~O{/wO~P]Oo/yOv%vOy%tO%}RO&P!`O&Y!tO~O!O/zO~Op/dO!O&wa~O!O0OO~OW$iOp/dO!O&xX~OY0QO~P7TOY0RO~OY%Wy!O%Wy~P7TOs0gO%{SO%}%sa&P%sa&y%sa~OY0SO~Os0gO!O0TO!Y0UO%{SO~Oo0XO%}RO&P!`O~OW({OZ#bO~O!O0ZO~OW$iOp%pa!O%pa~Op/dO!O&xa~O!O0]O~Os0gO!O0]O!Y0^O%{SO~O!O0`O~O!O0aO~O!O0cO~O!O0dO~OYhXY!`Xp!`XvhX&ihX&lhX~P$qOs0hOtqa~P@iO#nUXYUXtUXpUX{UX~P'ROs0hO%{SOt&[X#^&[X#`&[X#b&[X#c&[X#d&[X#e&[X#f&[X#g&[X#i&[X#m&[X#p&[X&X&[X&Y&[X&i&[X~Os0hO%{SOtla#^la#`la#bla#cla#dla#ela#fla#gla#ila#mla#pla&Xla&Yla&ila~Os0lO%{SO~Os0mO%{SO~Ot]i~P!6ZO#^1XO#e1PO#f1YO#g1YO#i0rO#p#mO&X#dO&Y#dOt#]i#`#]i#b#]i#c#]i#m#]i&i#]i~O#d1OO~P$7SO#^1XO#e1PO#f1YO#g1YO#i0rO#p#mO&X#dO&Y#dOt#]i#b#]i#c#]i#m#]i~O#`0|O#d1OO&i#eO~P$8XO#d#]i~P$7SO#f1YO#g1YO#p#mOt#]i#`#]i#b#]i#c#]i#d#]i#e#]i#m#]i&i#]i~O#^1XO#i0rO&X#dO&Y#dO~P$9eOt#ji~P!6ZOt#ly~P!6ZO|aO~PLQO!a0{O#[0{Ot&SX~P#,iO!a0{O#[0{Ot&SX~P$*WO&s1QO~O#^#]i#i#]i&X#]i&Y#]i~P$9eO#n1RO~P7TOY1ZO&i%bO&q#`O~OY1^O&i%bO~O`#e~",
            goto: "#1q&yPPPP&z'_+T.iP'_PP.}/R0vPPPPPP2sPP4l7n:j=f>O@TPPP@ZCQPPPPC}2sPFVPPGQPGwG}PPPPPPPPPPPPIXInPMTM]MgNPNVN]!!^!!c!!c!!lP!!{!$S!$u!%PP!%f!$SP!%l!%v!&V!&_P!&|!'W!'^!$S!'a!'gGwGw!'k!'u!'x2s!)u2s2s!+}P/RP!,RP!,|PPPPPP/RP/R!-q/RPP/RP/RPP/R!/h!/rPP!/x!0RPPPPPPPP&zP&zPP!0V!0V!0j!0VPP!0VP!0VP!0}!1Q!0V!1h!0VP!0VP!1k!1nP!0VP!0VP!1r!0VP!1u!0VP!0V!0VP!0VP!1xP!2O!2R!2XP!0V!2e!2h!2p!3S!7l!7r!8}!9g!9m!9w!:|!;S!;Y!;h!;n!;t!;z!<Q!<W!<^!<d!<j!<p!<v!<|!=S!=^!=d!=n!=tPPP!=z!0V!>oP!BgP!CkP!F]!Fs!Jb2s!L_#!`#%`PP#([#(_P#*z#+Q#,}#-^#-d#.e#.{#/t#/}#0Q#0^P#0a#0mP#0u#0|P#1PP#1YP#1^#1a#1d#1h#1nsrOav!X#V#t$S$T$V$W'S*W*`+|.R.S/^(gpOVW^_amnv!V!X![!^!d!k!o!t!v!x!y#O#S#V#X#_#a#b#f#g#h#i#j#k#l#o#p#q#r#t#z$R$S$T$U$V$W$f$j$t$u$z${%Q%R%Z%[%_%`%b%d%i&U&Z&[&]&^&c&f&g&k&l&n&y&z&|'R'S'^'m'x(R(S(c(g(j)O)R)S)U)Z)])c)n)o)r)w*W*Y*[*]*`*c*f*g*l*q+X+k+m+p+s+v+w+z+|,P,T,Y,[,_,p,r,{-P-T-[-b-s-|.O.P.R.S.`.l.o.r.t.{/O/V/[/^/m/q/s/t0U0W0^0k0n0o0p0q0r0z0{0|0}1O1P1Q1R1V1W1X1Y1Z1^1`1b#pfO^amnv!V!X![!^#V#a#b#f#g#h#i#j#k#l#p#t$R$S$T$U$V$W$u%d&|'R'S'm'x(c)O)R*W*[*]*`*c*q+|,p,r,{-[-b.R.S.l.o.r.{/^/s0U0^1`1bt!bS!O!Q!R!g!i$Q$n*P*Q*R*S,i,k.h.i/d0fQ#WbS%X!y.OQ%l#YU%q#^#|/_Q%x#`W'`$f*g-P.tU'j$i&t*UQ'k$jS(X%R/[U(x%s+e/xQ(}%yQ+W(gQ+c({Q-_*tQ-i+Xq1S#_&k)w0{0|0}1O1P1Q1R1V1W1X1Y1Z1^u!bS!O!Q!R!g!i$Q$n*P*Q*R*S,i,k.h.i/d0fT$k!a(O$eoO^amnv!V!X![!^#V#_#a#b#f#g#h#i#j#k#l#p#t$R$S$T$U$V$W$j$u%d&k&|'R'S'm'x(c)O)R)w*W*[*]*`*c*q+|,p,r,{-[-b.R.S.l.o.r.{/^/s0U0^0{0|0}1O1P1Q1R1V1W1X1Y1Z1^1`1b#rjO^amnv!V!X![!^#V#a#b#f#g#h#i#j#k#l#p#t$R$S$T$U$V$W$j$u%d&|'R'S'm'x(c)O)R*W*[*]*`*c*q+|,p,r,{-[-b.R.S.l.o.r.{/^/s0U0^1`1bW'a$f*g-P.tq1T#_&k)w0{0|0}1O1P1Q1R1V1W1X1Y1Z1^$miO^amnv!V!X![!^#V#_#a#b#f#g#h#i#j#k#l#p#t$R$S$T$U$V$W$f$j$u%d&k&|'R'S'm'x(c)O)R)w*W*[*]*`*c*g*q+|,p,r,{-P-[-b.R.S.l.o.r.t.{/^/s0U0^0{0|0}1O1P1Q1R1V1W1X1Y1Z1^1`1b&hYOV^acmnv|!V!X![!^!t!x!{#O#V#_#a#b#f#g#h#i#j#k#l#o#p#q#t#{$R$S$T$U$V$W$f$j$u$z%[%b%d%i%t&[&]&^&f&g&k&y&{&|'R'S'b'm'x(R(S(c(h(j)O)R)[)])c)o)p)r)w*W*[*]*`*c*g*q+k+w+z+|,P,T,[,p,r,{-P-[-b.P.R.S.`.l.o.r.t.{/^/s0U0^0k0r0z0{0|0}1O1P1Q1R1V1W1X1Y1Z1^1`1bQ%P!vQ(V%QV-R*l-V.u&hYOV^acmnv|!V!X![!^!t!x!{#O#V#_#a#b#f#g#h#i#j#k#l#o#p#q#t#{$R$S$T$U$V$W$f$j$u$z%[%b%d%i%t&[&]&^&f&g&k&y&{&|'R'S'b'm'x(R(S(c(h(j)O)R)[)])c)o)p)r)w*W*[*]*`*c*g*q+k+w+z+|,P,T,[,p,r,{-P-[-b.P.R.S.`.l.o.r.t.{/^/s0U0^0k0r0z0{0|0}1O1P1Q1R1V1W1X1Y1Z1^1`1bV-R*l-V.u&hZOV^acmnv|!V!X![!^!t!x!{#O#V#_#a#b#f#g#h#i#j#k#l#o#p#q#t#{$R$S$T$U$V$W$f$j$u$z%[%b%d%i%t&[&]&^&f&g&k&y&{&|'R'S'b'm'x(R(S(c(h(j)O)R)[)])c)o)p)r)w*W*[*]*`*c*g*q+k+w+z+|,P,T,[,p,r,{-P-[-b.P.R.S.`.l.o.r.t.{/^/s0U0^0k0r0z0{0|0}1O1P1Q1R1V1W1X1Y1Z1^1`1bV-S*l-V.uS!uY-RS#{|%tS%s#^#|Q%y#`Q+e({Q.W+|R/x/_%VXO^amnv!V!X![!^!t#V#_#a#b#f#g#h#i#j#k#l#o#p#t$R$S$T$U$V$W$f$j$u%b%d&]&^&g&k&|'R'S'm'x(R(S(c)O)R)w*W*[*]*`*c*g*q+k+|,P,T,p,r,{-P-[-b.R.S.l.o.r.t.{/^/s0U0^0r0{0|0}1O1P1Q1R1V1W1X1Y1Z1^1`1bQ$}!tR*}(S&i]OV^acmnv!V!X![!^!t!x!{#O#V#_#a#b#f#g#h#i#j#k#l#o#p#q#t$R$S$T$U$V$W$f$j$u$z%[%b%d%i&[&]&^&f&g&k&y&{&|'R'S'b'm'x(R(S(c(h(j)O)R)[)])c)o)p)r)w*W*[*]*`*c*g*l*q+k+w+z+|,P,T,[,p,r,{-P-V-[-b.P.R.S.`.l.o.r.t.u.{/^/s0U0^0k0r0z0{0|0}1O1P1Q1R1V1W1X1Y1Z1^1`1b!u!lW!d!m!o!y#X#r$l$t${%R%Z%_&U&z'^(g)S)Z)n*Y*f+X+p+s+v,_-T-s-|.O/O/V/[/m/q/t0W0i0n0o$liO^amnv!V!X![!^#V#_#a#b#f#g#h#i#j#k#l#p#t$R$S$T$U$V$W$f$j$u%d&k&|'R'S'm'x(c)O)R)w*W*[*]*`*c*g*q+|,p,r,{-P-[-b.R.S.l.o.r.t.{/^/s0U0^0{0|0}1O1P1Q1R1V1W1X1Y1Z1^1`1bQ$S!SQ$T!TQ$Y!WQ$d!]R*d'UQ#cgS&o#z(zQ(w%rQ){&pQ+b(yQ,W)jQ-m+dQ.],XQ/S-nS/`.U.VQ/{/aQ0Y/yR0_0XQ&_#wW(n%m&`&a&bQ)z&oU+[(o(p(qQ,V)jQ,d){S-j+]+^S.[,W,XQ/R-kR/b.]X)a&[)c,[.`rcOav!X#V#t$S$T$V$W'S*W*`+|.R.S/^Y!{^#O%[+z1bQ&{$UW'b$f*g-P.tS(h%i(jW)[&[)c,[.`S)k&c,YS)p&f)rR-V*ld!qW#X&z(g)Z)n*Y+X+s,_Q'|$vQ(Y%VR+R(]#nlOamnv!V!X![!^#V#a#b#f#g#h#i#j#k#l#p#t$R$S$T$U$V$W$j$u%d&|'R'S'm'x(c)O)R*W*[*]*`*c*q+|,p,r,{-[-b.R.S.l.o.r.{/^/s0U0^1`r!oW!y#X$v%V%Z%_&z'^(](g*Y*f+X-U.O.xS#Q^1bQ#wyQ#xzQ#y{Q%m#ZQ%n#[Q%o#]Q(e%eS)T&Z+mY)_&[)[)c,[.`S)j&c,YQ+l)UW+p)Z)n+s,_Q+x)]Q,X)kS-z+v-|q1U#_&k)w0{0|0}1O1P1Q1R1V1W1X1Y1Z1^U'z$u'x-bR)y&nW)a&[)c,[.`T)q&f)rQ&b#wQ&j#yQ(q%mQ(v%oY)]&[)[)c,[.`V)o&f)p)rQ)V&ZR-q+mQ+j)TR-p+l#rlO^amnv!V!X![!^#V#a#b#f#g#h#i#j#k#l#p#t$R$S$T$U$V$W$j$u%d&|'R'S'm'x(c)O)R*W*[*]*`*c*q+|,p,r,{-[-b.R.S.l.o.r.{/^/s0U0^1`1bQ+{)_S-s+p-zQ-}+xq1U#_&k)w0{0|0}1O1P1Q1R1V1W1X1Y1Z1^V#O^+z1bW!|^#O+z1bR(^%[Q,O)`Q-u+rQ-y+uQ/Y-{R/v/ZrtOav!X#V#t$S$T$V$W'S*W*`+|.R.S/^Q$g!_S&X#p1QQ'Y$dQ'i$hW)a&[)c,[.`Q*n'gQ+y)^Q,S)eQ-W*mR-w+trrOav!X#V#t$S$T$V$W'S*W*`+|.R.S/^S(i%i(jW)a&[)c,[.`T)q&f)rQ&a#wS(p%m&bR+^(qQ&`#wQ&e#xU(o%m&a&bQ(s%nS+](p(qR-k+^Q)i&^R)t&gQ&i#yS(u%o&jR+a(vQ&h#yU(t%o&i&jS+`(u(vR-l+aS(i%i(jT)q&f)rrrOav!X#V#t$S$T$V$W'S*W*`+|.R.S/^W)a&[)c,[.`T)q&f)rQ&d#xS(r%n&eR+_(sQ)l&cR.^,YR,^)mQ%j#WR(m%lT(i%i(jQ+})`S-x+u,OR/X-yR.S+|Wi$f*g-P.t#rjO^amnv!V!X![!^#V#a#b#f#g#h#i#j#k#l#p#t$R$S$T$U$V$W$j$u%d&|'R'S'm'x(c)O)R*W*[*]*`*c*q+|,p,r,{-[-b.R.S.l.o.r.{/^/s0U0^1`1bq1T#_&k)w0{0|0}1O1P1Q1R1V1W1X1Y1Z1^$lgO^amnv!V!X![!^#V#_#a#b#f#g#h#i#j#k#l#p#t$R$S$T$U$V$W$f$j$u%d&k&|'R'S'm'x(c)O)R)w*W*[*]*`*c*g*q+|,p,r,{-P-[-b.R.S.l.o.r.t.{/^/s0U0^0{0|0}1O1P1Q1R1V1W1X1Y1Z1^1`1bU%r#^#|/_S(y%s/xQ+d({R-n+eT&m#z&n!W#fk!z$X$b$e%z%{&O&P&Q&R&T&W'l'y*Z*^+g+i,t,y-Y.k.q/i/l1]e1X%w)v,c0s0t0u0v0w0x0y!Q#gk!z$X$b$e%z%{&P&T&W'l'y*Z*^+g+i,t,y-Y.k.q/i/l1]_0|%w)v,c0s0u0x0y#rlO^amnv!V!X![!^#V#a#b#f#g#h#i#j#k#l#p#t$R$S$T$U$V$W$j$u%d&|'R'S'm'x(c)O)R*W*[*]*`*c*q+|,p,r,{-[-b.R.S.l.o.r.{/^/s0U0^1`1bq1U#_&k)w0{0|0}1O1P1Q1R1V1W1X1Y1Z1^a'n$j'm*q-[.{/s0U0^Q'p$jR-`*tQ&r#}Q's$mR*x'tT)|&q)}stOav!X#V#t$S$T$V$W'S*W*`+|.R.S/^ssOav!X#V#t$S$T$V$W'S*W*`+|.R.S/^R$V!UrtOav!X#V#t$S$T$V$W'S*W*`+|.R.S/^R&|$UR$W!UR'T$YT*_'S*`R$^!YR$a!ZX'd$g'e'i*oR*m'fQ-U*lR.x-VQ'h$gQ*k'eQ*p'iR-X*oR$h!_Q'c$fV,}*g-P.tQvOQ#VaW#uv#V.R/^Q.R+|R/^.SrVOav!X#V#t$S$T$V$W'S*W*`+|.R.S/^r!fV!k!x#S#q$z%Q%`&l&y)U+w.P0k0p0q0z^!kW!y#r&U&z'^)SS!x^1bQ#S_#z#qmn!V![!^#_#a#b#f#g#h#i#j#k#l#p$R$j$u%b%d&]&^&g&k&|'R'm'x(R(c)O)R)w*[*]*c*q+k,P,T,p,r,{-[-b.l.o.r.{/s0U0^0{0|0}1O1P1Q1R1V1W1X1Y1Z1^1`S$z!t(SQ%Q!vj%`#O%[%i&[&c&f(j)c)r*l,Y,[.`S&l#z&nY&y$U$f*g-P.tS)U&Z+mS+w)])oQ.P+zQ0k#o![0p!d!o#X$t${%R%Z%_(g)Z)n*Y*f+X+p+s+v,_-T-s-|.O/O/V/[/m/q/t0WS0q0n0oR0z0rQ(T$}R+O(T^!mW!y#r&U&z'^)Sx$l!d#X${%R%Z%_(g)Z)n*Y*f+X+s+v,_-T-|.O/[/m^$s!m$l$t/V/q0W0iS$t!o+pQ/V-sQ/q/OQ0W/tT0i0n0oQ$q!jQ'r0gW'v$q'r'w*wQ'w$rQ*w0lQ/T0hR/u0mQ)P%{R+h)PQ)c&[S,Q)c.`R.`,[!n`O^av!X#O#V#t$S$T$U$V$W$f%[%i&[&c&f'S(j)c)r*W*`*g*l+z+|,Y,[-P.R.S.`.t/^1bY!eV!x%`&y.PT#T`!eQ-c*yR.}-cQ$w!qR'}$wQ%c#PU(b%c/U1aQ/U-oR1a1_Q+n)VR-r+nQ%]!|R(_%]Q,U)gR.Z,UQ)r&fR,`)rQ,Z)lR._,ZQ(j%iR+Y(jQ&n#zR)x&nQ%f#QR(f%fQ-]*rR.z-]Q*u'pR-a*uQ)}&qR,e)}Q,i*PR.e,iQ/e.fS/}/e0PR0P/gQ*`'SR,v*`Q'e$gS*j'e*oR*o'iQ.v-TR/n.vQ*h'cR-Q*h`uOav#V+|.R.S/^Q$Z!XQ&Y#tQ&w$SQ&x$TQ'O$VQ'P$WS*_'S*`R,o*W(UqOVW^_amnv!V!X![!^!d!k!o!t!v!x!y#O#S#V#X#_#a#b#f#g#h#i#j#k#l#o#p#q#r#t#z$R$S$T$U$V$W$f$t$u$z${%Q%R%Z%[%_%`%b%d%i&U&Z&[&]&^&c&f&g&k&l&n&y&z&|'R'S'^'x(R(S(c(g(j)O)R)S)U)Z)])c)n)o)r)w*W*Y*[*]*`*c*f*g*l+X+k+m+p+s+v+w+z+|,P,T,Y,[,_,p,r,{-P-T-b-s-|.O.P.R.S.`.l.o.r.t/O/V/[/^/m/q/t0W0k0n0o0p0q0r0z0{0|0}1O1P1Q1R1V1W1X1Y1Z1^1`1ba'o$j'm*q-[.{/s0U0^Q!aSQ#}!OQ$O!QQ$P!RQ$m!gQ$o!iQ&v$QQ't$nQ(O0fS,g*P*RQ,k*QQ,l*SQ.d,iS.f,k.hQ/g.iR/|/d&_ROS^abmnv!O!Q!R!V!X![!^!g!i!y#V#Y#^#_#`#a#b#f#g#h#i#j#k#l#p#t#|$Q$R$S$T$U$V$W$f$i$j$n$u%R%d%s%y&k&t&|'R'S'm'x(c(g({)O)R)w*P*Q*R*S*U*W*[*]*`*c*g*q*t+X+e+|,i,k,p,r,{-P-[-b.O.R.S.h.i.l.o.r.t.{/[/^/_/d/s/x0U0^0f0{0|0}1O1P1Q1R1V1W1X1Y1Z1^1`1bQ'q$jQ*r'mS-Z*q.{Q.y-[Q0V/sQ0[0UR0b0^rkOav!X#V#t$S$T$V$W'S*W*`+|.R.S/^U!z^$R1bS#mm1VS#sn1WQ$X!VQ$b![Q$e!^Q%w#_Q%z#aY%{#b$U*[,r.oQ%}#fQ&O#gQ&P#hQ&Q#iQ&R#jS&S#k1YQ&T#lQ&W#p^'l$j'm-[.{/s0U0^U'y$u'x-bS(d%d1ZQ)v&kQ*Z&|Q*^'RS+S(c1^Q+g)OQ+i)RQ,c)wQ,t*]Q,y*cQ-Y*qQ.k,pQ.q,{Q/i.lQ/l.rQ0s0{Q0t0|Q0u0}Q0v1OQ0w1PQ0x1QQ0y1RQ1[1XR1]1`$beO^amnv!V!X![!^#V#_#a#b#f#g#h#i#j#k#l#p#t$R$S$T$U$V$W$j$u%d&k&|'R'S'm'x(c)O)R)w*W*[*]*`*c*q,p,r,{-[-b.R.S.l.o.r.{/^/s0U0^0{0|0}1O1P1Q1R1V1W1X1Y1Z1^1`1bW'_$f*g-P.tR.T+|rWOav!X#V#t$S$T$V$W'S*W*`+|.R.S/^W!dV#q$z&yS!y^1bQ#Xc#j#rmn!V![!^#_#a#b#f#g#h#i#j#k#l#p$R$j$u%d&k&|'R'm'x(c)O)R)w*[*]*c*q,p,r,{-[-b.l.o.r.{/s0U0^0{0|0}1O1P1Q1R1V1W1X1Y1Z1^1`d${!t%b&]&^&g(R(S+k,P,TQ%R!xQ%Z!{S%_#O%[Q&U#oQ&z$UW'^$f*g-P.tS(g%i(jQ)S0kW)Z&[)c,[.`S)n&f)rQ*Y&{Q*f'bQ+X(hQ+s)[S+v)])oQ,_)pS-T*l-VQ-|+wQ.O+zQ/[.PQ/m.uQ0n0rR0o0z&h]OV^acmnv!V!X![!^!t!x!{#O#V#_#a#b#f#g#h#i#j#k#l#o#p#q#t$R$S$T$U$V$W$f$j$u$z%[%b%d%i&[&]&^&f&g&k&y&{&|'R'S'b'm'x(R(S(c(h(j)O)R)[)])c)o)p)r)w*W*[*]*`*c*g*l*q+k+w+z+|,P,T,[,p,r,{-P-V-[-b.P.R.S.`.l.o.r.t.u.{/^/s0U0^0k0r0z0{0|0}1O1P1Q1R1V1W1X1Y1Z1^1`1bQ#z|Q&p#{R(z%t&sUOV^acmnv|!V!X![!^!t!v!x!{#O#V#_#a#b#f#g#h#i#j#k#l#o#p#q#t#{$R$S$T$U$V$W$f$j$u$z%Q%[%b%d%i%t&[&]&^&f&g&k&y&{&|'R'S'b'm'x(R(S(c(h(j)O)R)[)])c)o)p)r)w*W*[*]*`*c*g*l*q+k+w+z+|,P,T,[,p,r,{-P-V-[-b.P.R.S.`.l.o.r.t.u.{/^/s0U0^0k0r0z0{0|0}1O1P1Q1R1V1W1X1Y1Z1^1`1bR%O!t$hhOamnv!V!X![!^#V#_#a#b#f#g#h#i#j#k#l#p#t$R$S$T$U$V$W$f$j$u%d&k&|'R'S'm'x(c)O)R)w*W*[*]*`*c*g*q+|,p,r,{-P-[-b.R.S.l.o.r.t.{/^/s0U0^0{0|0}1O1P1Q1R1V1W1X1Y1Z1^1`Q#P^Q$}!tS&V#o0rQ(a%bQ)f&]U)g&^&g,PQ*|(RQ*}(SQ-o+kQ.Y,TR1_1bQ(Q$|R*{(P$ldO^amnv!V!X![!^#V#_#a#b#f#g#h#i#j#k#l#p#t$R$S$T$U$V$W$f$j$u%d&k&|'R'S'm'x(c)O)R)w*W*[*]*`*c*g*q+|,p,r,{-P-[-b.R.S.l.o.r.t.{/^/s0U0^0{0|0}1O1P1Q1R1V1W1X1Y1Z1^1`1bT%p#^/_Q%|#bQ&}$UQ,s*[Q.m,rR/k.oX)b&[)c,[.`!}_OV^`av!X!e!x#O#V#t$S$T$U$V$W$f%[%`%i&[&c&f&y'S(j)c)r*W*`*g*l+z+|,Y,[-P.P.R.S.`.t/^1bS!rW&zS%k#X*YS+V(g)nQ+q)ZS-h+X,_R-v+sf!pW#X$v%V(](g)Z)n+X+s,_U%U!y%_.OQ([%ZQ*X&zQ*e'^Q,q*YQ,|*fQ.w-UR/p.xQ'{$uQ*y'xR.|-bR*z'x[)^&[&f)c)r,[.`T+t)[)pR)W&ZW+r)Z)n+s,_Q-{+vR/Z-|U!}^+z1bR%a#OS)h&^&gR.X,PR)m&cW)`&[)c,[.`R+u)[T#R^1bR*s'mR'q$jT,h*P,iQ.g,kR/f.hR/f.i",
            nodeNames: "⚠ LineComment BlockComment Program ModuleDeclaration MarkerAnnotation Identifier ScopedIdentifier . Annotation ) ( AnnotationArgumentList AssignmentExpression FieldAccess IntegerLiteral FloatingPointLiteral BooleanLiteral CharacterLiteral StringLiteral null ClassLiteral void PrimitiveType TypeName ScopedTypeName GenericType TypeArguments AnnotatedType Wildcard extends super , ArrayType Dimension [ ] class this ParenthesizedExpression ObjectCreationExpression new ArgumentList } { ClassBody ; FieldDeclaration Modifiers public protected private abstract static final strictfp default synchronized native transient volatile VariableDeclarator Definition AssignOp ArrayInitializer MethodDeclaration TypeParameters TypeParameter TypeBound FormalParameters ReceiverParameter FormalParameter SpreadParameter Throws throws Block ClassDeclaration Superclass SuperInterfaces implements InterfaceTypeList InterfaceDeclaration interface ExtendsInterfaces InterfaceBody ConstantDeclaration EnumDeclaration enum EnumBody EnumConstant EnumBodyDeclarations AnnotationTypeDeclaration AnnotationTypeBody AnnotationTypeElementDeclaration StaticInitializer ConstructorDeclaration ConstructorBody ExplicitConstructorInvocation ArrayAccess MethodInvocation MethodName MethodReference ArrayCreationExpression Dimension AssignOp BinaryExpression CompareOp CompareOp LogicOp BitOp BitOp LogicOp ArithOp ArithOp ArithOp BitOp InstanceofExpression instanceof LambdaExpression InferredParameters TernaryExpression LogicOp : UpdateExpression UpdateOp UnaryExpression LogicOp BitOp CastExpression ElementValueArrayInitializer ElementValuePair open module ModuleBody ModuleDirective requires transitive exports to opens uses provides with PackageDeclaration package ImportDeclaration import Asterisk ExpressionStatement LabeledStatement Label IfStatement if else WhileStatement while ForStatement for ForSpec LocalVariableDeclaration EnhancedForStatement ForSpec AssertStatement assert SwitchStatement switch SwitchBlock SwitchLabel case DoStatement do BreakStatement break Label ContinueStatement continue Label ReturnStatement return SynchronizedStatement ThrowStatement throw TryStatement try CatchClause catch CatchFormalParameter CatchType FinallyClause finally TryWithResourcesStatement ResourceSpecification Resource",
            maxTerm: 271,
            nodeProps: [
                [Ti.group, -26, 4, 46, 75, 76, 81, 86, 91, 143, 145, 148, 149, 151, 154, 156, 159, 160, 162, 164, 169, 171, 174, 177, 179, 180, 182, 190, "Statement", -24, 6, 13, 14, 15, 16, 17, 18, 19, 20, 21, 38, 39, 40, 98, 99, 101, 102, 105, 116, 118, 120, 123, 125, 128, "Expression", -7, 22, 23, 24, 25, 26, 28, 33, "Type"],
                [Ti.openedBy, 10, "(", 43, "{"],
                [Ti.closedBy, 11, ")", 44, "}"]
            ],
            skippedNodes: [0, 1, 2],
            repeatNodeCount: 28,
            tokenData: "Cr~R{X^#xpq#xqr$mrs$ztu%ruv&Wvw&ewx&uxy(]yz(bz{(g{|(q|})R}!O)W!O!P)k!P!Q-S!Q!R.b!R![3S![!]?[!]!^?i!^!_?n!_!`@R!`!a@Z!a!b@q!b!c@x!c!}BX!}#OBm#P#QBr#Q#RBw#R#S%r#T#o%r#o#pCP#p#qCU#q#rCh#r#sCm#y#z#x$f$g#x#BY#BZ#x$IS$I_#x$I|$JO#x$JT$JU#x$KV$KW#x&FU&FV#x~#}Y%w~X^#xpq#x#y#z#x$f$g#x#BY#BZ#x$IS$I_#x$I|$JO#x$JT$JU#x$KV$KW#x&FU&FV#xR$rP#rP!_!`$uQ$zO#^Q~$}UOY$zZr$zrs%as#O$z#O#P%f#P~$z~%fOc~~%iROY$zYZ$zZ~$z~%wT%}~tu%r!Q![%r!c!}%r#R#S%r#T#o%r~&]P#f~!_!`&`Q&eO#[Q~&jQ&i~vw&p!_!`&`~&uO#`~~&xTOY'XZw'Xx#O'X#O#P(P#P~'X~'[UOY'XZw'Xwx'nx#O'X#O#P's#P~'X~'sOb~~'vROY'XYZ'XZ~'X~(SROY'XYZ'XZ~'X~(bOZ~~(gOY~R(nP$XP#eQ!_!`&`~(vQ#d~{|(|!_!`&`~)RO#p~~)WOp~~)]R#d~}!O(|!_!`&`!`!a)f~)kO&s~~)pQWU!O!P)v!Q![*R~)yP!O!P)|~*RO&l~P*WW`P!Q![*R!f!g*p!g!h*u!h!i*p#R#S,_#W#X*p#X#Y*u#Y#Z*pP*uO`PP*xR{|+R}!O+R!Q![+XP+UP!Q![+XP+^U`P!Q![+X!f!g*p!h!i*p#R#S+p#W#X*p#Y#Z*pP+sP!Q![+vP+{U`P!Q![+v!f!g*p!h!i*p#R#S+p#W#X*p#Y#Z*pP,bP!Q![,eP,jW`P!Q![,e!f!g*p!g!h*u!h!i*p#R#S,_#W#X*p#X#Y*u#Y#Z*p~-XR#eQz{-b!P!Q.V!_!`&`~-eROz-bz{-n{~-b~-qTOz-bz{-n{!P-b!P!Q.Q!Q~-b~.VOQ~~.[QP~OY.VZ~.V~.ga_~!O!P/l!Q![3S!d!e6g!f!g*p!g!h3z!h!i*p!n!o5d!q!r7s!z!{8s#R#S5i#U#V6g#W#X*p#X#Y3z#Y#Z*p#`#a5d#c#d7s#l#m8sP/qV`P!Q![0W!f!g*p!g!h0u!h!i*p#W#X*p#X#Y0u#Y#Z*pP0]W`P!Q![0W!f!g*p!g!h0u!h!i*p#R#S2_#W#X*p#X#Y0u#Y#Z*pP0xR{|1R}!O1R!Q![1XP1UP!Q![1XP1^U`P!Q![1X!f!g*p!h!i*p#R#S1p#W#X*p#Y#Z*pP1sP!Q![1vP1{U`P!Q![1v!f!g*p!h!i*p#R#S1p#W#X*p#Y#Z*pP2bP!Q![2eP2jW`P!Q![2e!f!g*p!g!h0u!h!i*p#R#S2_#W#X*p#X#Y0u#Y#Z*p~3XZ_~!O!P/l!Q![3S!f!g*p!g!h3z!h!i*p!n!o5d#R#S5i#W#X*p#X#Y3z#Y#Z*p#`#a5dP3}R{|4W}!O4W!Q![4^P4ZP!Q![4^P4cU`P!Q![4^!f!g*p!h!i*p#R#S4u#W#X*p#Y#Z*pP4xP!Q![4{P5QU`P!Q![4{!f!g*p!h!i*p#R#S4u#W#X*p#Y#Z*p~5iO_~~5lP!Q![5o~5tZ_~!O!P/l!Q![5o!f!g*p!g!h3z!h!i*p!n!o5d#R#S5i#W#X*p#X#Y3z#Y#Z*p#`#a5d~6jQ!Q!R6p!R!S6p~6uT_~!Q!R6p!R!S6p!n!o5d#R#S7U#`#a5d~7XQ!Q!R7_!R!S7_~7dT_~!Q!R7_!R!S7_!n!o5d#R#S7U#`#a5d~7vP!Q!Y7y~8OS_~!Q!Y7y!n!o5d#R#S8[#`#a5d~8_P!Q!Y8b~8gS_~!Q!Y8b!n!o5d#R#S8[#`#a5d~8vS!O!P9S!Q![<Q!c!i<Q#T#Z<QP9VR!Q![9`!c!i9`#T#Z9`P9cU!Q![9`!c!i9`!r!s9u#R#S;_#T#Z9`#d#e9uP9xR{|:R}!O:R!Q![:XP:UP!Q![:XP:^U`P!Q![:X!f!g*p!h!i*p#R#S:p#W#X*p#Y#Z*pP:sP!Q![:vP:{U`P!Q![:v!f!g*p!h!i*p#R#S:p#W#X*p#Y#Z*pP;bR!Q![;k!c!i;k#T#Z;kP;nU!Q![;k!c!i;k!r!s9u#R#S;_#T#Z;k#d#e9u~<VX_~!O!P<r!Q![<Q!c!i<Q!n!o5d!r!s9u#R#S>^#T#Z<Q#`#a5d#d#e9uP<uT!Q![=U!c!i=U!r!s9u#T#Z=U#d#e9uP=XU!Q![=U!c!i=U!r!s9u#R#S=k#T#Z=U#d#e9uP=nR!Q![=w!c!i=w#T#Z=wP=zU!Q![=w!c!i=w!r!s9u#R#S=k#T#Z=w#d#e9u~>aR!Q![>j!c!i>j#T#Z>j~>oX_~!O!P<r!Q![>j!c!i>j!n!o5d!r!s9u#R#S>^#T#Z>j#`#a5d#d#e9u~?aP#n~![!]?d~?iO&q~~?nO!O~~?sQ&Y~!^!_?y!_!`$u~@OP#g~!_!`&`~@WP!a~!_!`$u~@`Q&X~!_!`$u!`!a@f~@kQ#g~!_!`&`!`!a?yV@xO&]T#mQ~@}P%{~#]#^AQ~ATP#b#cAW~AZP#h#iA^~AaP#X#YAd~AgP#f#gAj~AmP#Y#ZAp~AsP#T#UAv~AyP#V#WA|~BPP#X#YBS~BXO&o~~B^T&P~tuBX!Q![BX!c!}BX#R#SBX#T#oBX~BrOs~~BwOt~QB|P#bQ!_!`&`~CUO|~VC]Q&yT#bQ!_!`&`#p#qCcQChO#cQ~CmO{~~CrO#s~",
            tokenizers: [0, 1, 2],
            topRules: {
                Program: [0, 3]
            },
            dynamicPrecedences: {
                26: 1,
                230: -1,
                238: -1
            },
            specialized: [{
                term: 229,
                get: e => pp[e] || -1
            }],
            tokenPrec: 7618
        }),
        fp = ea.define({
            parser: hp.configure({
                props: [Qa.add({
                    IfStatement: va({
                        except: /^\s*({|else\b)/
                    }),
                    TryStatement: va({
                        except: /^\s*({|catch|finally)\b/
                    }),
                    LabeledStatement: ya,
                    SwitchBlock: e => {
                        let t = e.textAfter,
                            n = /^\s*\}/.test(t),
                            r = /^\s*(case|default)\b/.test(t);
                        return e.baseIndent + (n ? 0 : r ? 1 : 2) * e.unit
                    },
                    BlockComment: () => -1,
                    Statement: va({
                        except: /^{/
                    })
                }), Sa.add({
                    "Block SwitchBlock ClassBody ElementValueArrayInitializer ModuleBody EnumBody ConstructorBody InterfaceBody ArrayInitializer": _a,
                    BlockComment: e => ({
                        from: e.from + 2,
                        to: e.to - 2
                    })
                }), ks({
                    null: Fs.null,
                    instanceof: Fs.operatorKeyword,
                    this: Fs.self,
                    "new super assert open to with void": Fs.keyword,
                    "class interface extends implements module package import enum": Fs.definitionKeyword,
                    "switch while for if else case default do break continue return try catch finally throw": Fs.controlKeyword,
                    "requires exports opens uses provides public private protected static transitive abstract final strictfp synchronized native transient volatile throws": Fs.modifier,
                    IntegerLiteral: Fs.integer,
                    FloatLiteral: Fs.float,
                    StringLiteral: Fs.string,
                    CharacterLiteral: Fs.character,
                    LineComment: Fs.lineComment,
                    BlockComment: Fs.blockComment,
                    BooleanLiteral: Fs.bool,
                    PrimitiveType: Fs.standard(Fs.typeName),
                    TypeName: Fs.typeName,
                    Identifier: Fs.variableName,
                    "MethodName/Identifier": Fs.function(Fs.variableName),
                    Definition: Fs.definition(Fs.variableName),
                    ArithOp: Fs.arithmeticOperator,
                    LogicOp: Fs.logicOperator,
                    BitOp: Fs.bitwiseOperator,
                    CompareOp: Fs.compareOperator,
                    AssignOp: Fs.definitionOperator,
                    UpdateOp: Fs.updateOperator,
                    Asterisk: Fs.punctuation,
                    Label: Fs.labelName,
                    "( )": Fs.paren,
                    "[ ]": Fs.squareBracket,
                    "{ }": Fs.brace,
                    ".": Fs.derefOperator,
                    ", ;": Fs.separator
                })]
            }),
            languageData: {
                commentTokens: {
                    line: "//",
                    block: {
                        open: "/*",
                        close: "*/"
                    }
                },
                indentOnInput: /^\s*(?:case |default:|\{|\})$/
            }
        });
    var mp = Object.freeze({
        __proto__: null,
        java: function() {
            return new ca(fp)
        },
        javaLanguage: fp
    });
    const gp = El.deserialize({
        version: 13,
        states: "$bOVQPOOOOQO'#Cb'#CbOnQPO'#CeOvQPO'#CjOOQO'#Cp'#CpQOQPOOOOQO'#Cg'#CgO}QPO'#CfO!SQPO'#CrOOQO,59P,59PO![QPO,59PO!aQPO'#CuOOQO,59U,59UO!iQPO,59UOVQPO,59QOqQPO'#CkO!nQPO,59^OOQO1G.k1G.kOVQPO'#ClO!vQPO,59aOOQO1G.p1G.pOOQO1G.l1G.lOOQO,59V,59VOOQO-E6i-E6iOOQO,59W,59WOOQO-E6j-E6j",
        stateData: "#O~OcOS~OQSORSOSSOTSOWQO]ROePO~OVXOeUO~O[[O~PVOg^O~Oh_OVfX~OVaO~OhbO[iX~O[dO~Oh_OVfa~OhbO[ia~O",
        goto: "!kjPPPPPPkPPkqwPPk{!RPPP!XP!ePP!hXSOR^bQWQRf_TVQ_Q`WRg`QcZRicQTOQZRQe^RhbRYQR]R",
        nodeNames: "⚠ JsonText True False Null Number String } { Object Property PropertyName ] [ Array",
        maxTerm: 25,
        nodeProps: [
            [Ti.openedBy, 7, "{", 12, "["],
            [Ti.closedBy, 8, "}", 13, "]"]
        ],
        skippedNodes: [0],
        repeatNodeCount: 2,
        tokenData: "(p~RaXY!WYZ!W]^!Wpq!Wrs!]|}$i}!O$n!Q!R$w!R![&V![!]&h!}#O&m#P#Q&r#Y#Z&w#b#c'f#h#i'}#o#p(f#q#r(k~!]Oc~~!`Upq!]qr!]rs!rs#O!]#O#P!w#P~!]~!wOe~~!zXrs!]!P!Q!]#O#P!]#U#V!]#Y#Z!]#b#c!]#f#g!]#h#i!]#i#j#g~#jR!Q![#s!c!i#s#T#Z#s~#vR!Q![$P!c!i$P#T#Z$P~$SR!Q![$]!c!i$]#T#Z$]~$`R!Q![!]!c!i!]#T#Z!]~$nOh~~$qQ!Q!R$w!R![&V~$|RT~!O!P%V!g!h%k#X#Y%k~%YP!Q![%]~%bRT~!Q![%]!g!h%k#X#Y%k~%nR{|%w}!O%w!Q![%}~%zP!Q![%}~&SPT~!Q![%}~&[ST~!O!P%V!Q![&V!g!h%k#X#Y%k~&mOg~~&rO]~~&wO[~~&zP#T#U&}~'QP#`#a'T~'WP#g#h'Z~'^P#X#Y'a~'fOR~~'iP#i#j'l~'oP#`#a'r~'uP#`#a'x~'}OS~~(QP#f#g(T~(WP#i#j(Z~(^P#X#Y(a~(fOQ~~(kOW~~(pOV~",
        tokenizers: [0],
        topRules: {
            JsonText: [0, 1]
        },
        tokenPrec: 0
    });
    const Qp = ea.define({
        parser: gp.configure({
            props: [Qa.add({
                Object: va({
                    except: /^\s*\}/
                }),
                Array: va({
                    except: /^\s*\]/
                })
            }), Sa.add({
                "Object Array": _a
            }), ks({
                String: Fs.string,
                Number: Fs.number,
                "True False": Fs.bool,
                PropertyName: Fs.propertyName,
                null: Fs.null,
                ",": Fs.separator,
                "[ ]": Fs.squareBracket,
                "{ }": Fs.brace
            })]
        }),
        languageData: {
            closeBrackets: {
                brackets: ["[", "{", '"']
            },
            indentOnInput: /^\s*[\}\]]$/
        }
    });
    var $p = Object.freeze({
        __proto__: null,
        json: function() {
            return new ca(Qp)
        },
        jsonLanguage: Qp,
        jsonParseLinter: () => e => {
            try {
                JSON.parse(e.state.doc.toString())
            } catch (t) {
                if (!(t instanceof SyntaxError)) throw t;
                const n = function(e, t) {
                    let n;
                    return (n = e.message.match(/at position (\d+)/)) ? Math.min(+n[1], t.length) : (n = e.message.match(/at line (\d+) column (\d+)/)) ? Math.min(t.line(+n[1]).from + +n[2] - 1, t.length) : 0
                }(t, e.state.doc);
                return [{
                    from: n,
                    message: t.message,
                    severity: "error",
                    to: n
                }]
            }
            return []
        }
    });
    const bp = [21, 47, 48, 52, 55, 56, 59, 60, 61];
    let xp = 0,
        Pp = null,
        wp = 0;

    function kp(e, t) {
        return t == wp && e == Pp ? xp : (Pp = e, wp = t, xp = function(e, t) {
            for (let n = 0;; t++) {
                let r = e.get(t);
                if (32 == r) n++;
                else {
                    if (9 != r) return 10 == r || 13 == r || 35 == r ? -1 : n;
                    n += 8 - n % 8
                }
            }
        }(e, t))
    }
    const yp = new Pl(((e, t, n) => {
            let r = e.get(t.start);
            r < 0 ? t.accept(167, t.start) : 10 != r && 13 != r || (null != n.startOf(bp) ? t.accept(165, t.start + 1) : kp(e, t.start + 1) < 0 ? t.accept(166, t.start + 1) : t.accept(164, t.start + 1))
        }), {
            contextual: !0,
            fallback: !0
        }),
        vp = new Pl(((e, t, n) => {
            let r, i = e.get(t.start - 1);
            (10 == i || 13 == i) && (r = kp(e, t.start)) >= 0 && r != n.context.depth && null == n.startOf(bp) && t.accept(r < n.context.depth ? 163 : 162, t.start)
        }));

    function Sp(e, t) {
        this.parent = e, this.depth = t, this.hash = (e ? e.hash + e.hash << 8 : 0) + t + (t << 4)
    }
    const _p = new Zl({
            start: new Sp(null, 0),
            shift: (e, t, n, r) => 162 == t ? new Sp(e, kp(n, r.pos)) : 163 == t ? e.parent : e,
            hash: e => e.hash
        }),
        Xp = new Pl(((e, t) => {
            let n = t.start;
            for (let t = "print", r = 0; r < t.length; r++, n++)
                if (e.get(n) != t.charCodeAt(r)) return;
            let r = n;
            if (!/\w/.test(String.fromCharCode(e.get(n))))
                for (;; n++) {
                    let i = e.get(n);
                    if (32 != i && 9 != i) return void(40 != i && 46 != i && 10 != i && 13 != i && 35 != i && t.accept(1, r))
                }
        })),
        Tp = {
            __proto__: null,
            await: 40,
            or: 48,
            and: 50,
            in: 54,
            not: 56,
            is: 58,
            if: 64,
            else: 66,
            lambda: 70,
            yield: 88,
            from: 90,
            async: 98,
            for: 100,
            None: 152,
            True: 154,
            False: 154,
            del: 168,
            pass: 172,
            break: 176,
            continue: 180,
            return: 184,
            raise: 192,
            import: 196,
            as: 198,
            global: 202,
            nonlocal: 204,
            assert: 208,
            elif: 218,
            while: 222,
            try: 228,
            except: 230,
            finally: 232,
            with: 236,
            def: 240,
            class: 250
        },
        Rp = El.deserialize({
            version: 13,
            states: "!?|O`Q$IXOOO%cQ$I[O'#GaOOQ$IS'#Cm'#CmOOQ$IS'#Cn'#CnO'RQ$IWO'#ClO(tQ$I[O'#G`OOQ$IS'#Ga'#GaOOQ$IS'#DR'#DROOQ$IS'#G`'#G`O)bQ$IWO'#CqO)rQ$IWO'#DbO*SQ$IWO'#DfOOQ$IS'#Ds'#DsO*gO`O'#DsO*oOpO'#DsO*wO!bO'#DtO+SO#tO'#DtO+_O&jO'#DtO+jO,UO'#DtO-lQ$I[O'#GQOOQ$IS'#GQ'#GQO'RQ$IWO'#GPO/OQ$I[O'#GPOOQ$IS'#E]'#E]O/gQ$IWO'#E^OOQ$IS'#GO'#GOO/qQ$IWO'#F}OOQ$IV'#F}'#F}O/|Q$IWO'#FPOOQ$IS'#Fr'#FrO0RQ$IWO'#FOOOQ$IV'#HZ'#HZOOQ$IV'#F|'#F|OOQ$IT'#FR'#FRQ`Q$IXOOO'RQ$IWO'#CoO0aQ$IWO'#CzO0hQ$IWO'#DOO0vQ$IWO'#GeO1WQ$I[O'#EQO'RQ$IWO'#EROOQ$IS'#ET'#ETOOQ$IS'#EV'#EVOOQ$IS'#EX'#EXO1lQ$IWO'#EZO2SQ$IWO'#E_O/|Q$IWO'#EaO2gQ$I[O'#EaO/|Q$IWO'#EdO/gQ$IWO'#EgO/gQ$IWO'#EkO/gQ$IWO'#EnO2rQ$IWO'#EpO2yQ$IWO'#EuO3UQ$IWO'#EqO/gQ$IWO'#EuO/|Q$IWO'#EwO/|Q$IWO'#E|OOQ$IS'#Cc'#CcOOQ$IS'#Cd'#CdOOQ$IS'#Ce'#CeOOQ$IS'#Cf'#CfOOQ$IS'#Cg'#CgOOQ$IS'#Ch'#ChOOQ$IS'#Cj'#CjO'RQ$IWO,58|O'RQ$IWO,58|O'RQ$IWO,58|O'RQ$IWO,58|O'RQ$IWO,58|O'RQ$IWO,58|O3ZQ$IWO'#DmOOQ$IS,5:W,5:WO3nQ$IWO,5:ZO3{Q%1`O,5:ZO4QQ$I[O,59WO0aQ$IWO,59_O0aQ$IWO,59_O0aQ$IWO,59_O6pQ$IWO,59_O6uQ$IWO,59_O6|Q$IWO,59gO7TQ$IWO'#G`O8ZQ$IWO'#G_OOQ$IS'#G_'#G_OOQ$IS'#DX'#DXO8rQ$IWO,59]O'RQ$IWO,59]O9QQ$IWO,59]O9VQ$IWO,5:PO'RQ$IWO,5:POOQ$IS,59|,59|O9eQ$IWO,59|O9jQ$IWO,5:VO'RQ$IWO,5:VO'RQ$IWO,5:TOOQ$IS,5:Q,5:QO9{Q$IWO,5:QO:QQ$IWO,5:UOOOO'#FZ'#FZO:VO`O,5:_OOQ$IS,5:_,5:_OOOO'#F['#F[O:_OpO,5:_O:gQ$IWO'#DuOOOO'#F]'#F]O:wO!bO,5:`OOQ$IS,5:`,5:`OOOO'#F`'#F`O;SO#tO,5:`OOOO'#Fa'#FaO;_O&jO,5:`OOOO'#Fb'#FbO;jO,UO,5:`OOQ$IS'#Fc'#FcO;uQ$I[O,5:dO>gQ$I[O,5<kO?QQ%GlO,5<kO?qQ$I[O,5<kOOQ$IS,5:x,5:xO@YQ$IXO'#FkOAiQ$IWO,5;TOOQ$IV,5<i,5<iOAtQ$I[O'#HWOB]Q$IWO,5;kOOQ$IS-E9p-E9pOOQ$IV,5;j,5;jO3PQ$IWO'#EwOOQ$IT-E9P-E9POBeQ$I[O,59ZODlQ$I[O,59fOEVQ$IWO'#GbOEbQ$IWO'#GbO/|Q$IWO'#GbOEmQ$IWO'#DQOEuQ$IWO,59jOEzQ$IWO'#GfO'RQ$IWO'#GfO/gQ$IWO,5=POOQ$IS,5=P,5=PO/gQ$IWO'#D|OOQ$IS'#D}'#D}OFiQ$IWO'#FeOFyQ$IWO,58zOGXQ$IWO,58zO)eQ$IWO,5:jOG^Q$I[O'#GhOOQ$IS,5:m,5:mOOQ$IS,5:u,5:uOGqQ$IWO,5:yOHSQ$IWO,5:{OOQ$IS'#Fh'#FhOHbQ$I[O,5:{OHpQ$IWO,5:{OHuQ$IWO'#HYOOQ$IS,5;O,5;OOITQ$IWO'#HVOOQ$IS,5;R,5;RO3UQ$IWO,5;VO3UQ$IWO,5;YOIfQ$I[O'#H[O'RQ$IWO'#H[OIpQ$IWO,5;[O2rQ$IWO,5;[O/gQ$IWO,5;aO/|Q$IWO,5;cOIuQ$IXO'#ElOKOQ$IZO,5;]ONaQ$IWO'#H]O3UQ$IWO,5;aONlQ$IWO,5;cONqQ$IWO,5;hO!#fQ$I[O1G.hO!#mQ$I[O1G.hO!&^Q$I[O1G.hO!&hQ$I[O1G.hO!)RQ$I[O1G.hO!)fQ$I[O1G.hO!)yQ$IWO'#GnO!*XQ$I[O'#GQO/gQ$IWO'#GnO!*cQ$IWO'#GmOOQ$IS,5:X,5:XO!*kQ$IWO,5:XO!*pQ$IWO'#GoO!*{Q$IWO'#GoO!+`Q$IWO1G/uOOQ$IS'#Dq'#DqOOQ$IS1G/u1G/uOOQ$IS1G.y1G.yO!,`Q$I[O1G.yO!,gQ$I[O1G.yO0aQ$IWO1G.yO!-SQ$IWO1G/ROOQ$IS'#DW'#DWO/gQ$IWO,59qOOQ$IS1G.w1G.wO!-ZQ$IWO1G/cO!-kQ$IWO1G/cO!-sQ$IWO1G/dO'RQ$IWO'#GgO!-xQ$IWO'#GgO!-}Q$I[O1G.wO!._Q$IWO,59fO!/eQ$IWO,5=VO!/uQ$IWO,5=VO!/}Q$IWO1G/kO!0SQ$I[O1G/kOOQ$IS1G/h1G/hO!0dQ$IWO,5=QO!1ZQ$IWO,5=QO/gQ$IWO1G/oO!1xQ$IWO1G/qO!1}Q$I[O1G/qO!2_Q$I[O1G/oOOQ$IS1G/l1G/lOOQ$IS1G/p1G/pOOOO-E9X-E9XOOQ$IS1G/y1G/yOOOO-E9Y-E9YO!2oQ$IWO'#GzO/gQ$IWO'#GzO!2}Q$IWO,5:aOOOO-E9Z-E9ZOOQ$IS1G/z1G/zOOOO-E9^-E9^OOOO-E9_-E9_OOOO-E9`-E9`OOQ$IS-E9a-E9aO!3YQ%GlO1G2VO!3yQ$I[O1G2VO'RQ$IWO,5<OOOQ$IS,5<O,5<OOOQ$IS-E9b-E9bOOQ$IS,5<V,5<VOOQ$IS-E9i-E9iOOQ$IV1G0o1G0oO/|Q$IWO'#FgO!4bQ$I[O,5=rOOQ$IS1G1V1G1VO!4yQ$IWO1G1VOOQ$IS'#DS'#DSO/gQ$IWO,5<|OOQ$IS,5<|,5<|O!5OQ$IWO'#FSO!5ZQ$IWO,59lO!5cQ$IWO1G/UO!5mQ$I[O,5=QOOQ$IS1G2k1G2kOOQ$IS,5:h,5:hO!6^Q$IWO'#GPOOQ$IS,5<P,5<POOQ$IS-E9c-E9cO!6oQ$IWO1G.fOOQ$IS1G0U1G0UO!6}Q$IWO,5=SO!7_Q$IWO,5=SO/gQ$IWO1G0eO/gQ$IWO1G0eO/|Q$IWO1G0gOOQ$IS-E9f-E9fO!7pQ$IWO1G0gO!7{Q$IWO1G0gO!8QQ$IWO,5=tO!8`Q$IWO,5=tO!8nQ$IWO,5=qO!9UQ$IWO,5=qO!9gQ$IZO1G0qO!<uQ$IZO1G0tO!@QQ$IWO,5=vO!@[Q$IWO,5=vO!@dQ$I[O,5=vO/gQ$IWO1G0vO!@nQ$IWO1G0vO3UQ$IWO1G0{ONlQ$IWO1G0}OOQ$IV,5;W,5;WO!@sQ$IYO,5;WO!@xQ$IZO1G0wO!DZQ$IWO'#FoO3UQ$IWO1G0wO3UQ$IWO1G0wO!DhQ$IWO,5=wO!DuQ$IWO,5=wO/|Q$IWO,5=wOOQ$IV1G0{1G0{O!D}Q$IWO'#EyO!E`Q%1`O1G0}OOQ$IV1G1S1G1SO3UQ$IWO1G1SOOQ$IS,5=Y,5=YOOQ$IS'#Dn'#DnO/gQ$IWO,5=YO!EhQ$IWO,5=XO!E{Q$IWO,5=XOOQ$IS1G/s1G/sO!FTQ$IWO,5=ZO!FeQ$IWO,5=ZO!FmQ$IWO,5=ZO!GQQ$IWO,5=ZO!GbQ$IWO,5=ZOOQ$IS7+%a7+%aOOQ$IS7+$e7+$eO!5cQ$IWO7+$mO!ITQ$IWO1G.yO!I[Q$IWO1G.yOOQ$IS1G/]1G/]OOQ$IS,5;p,5;pO'RQ$IWO,5;pOOQ$IS7+$}7+$}O!IcQ$IWO7+$}OOQ$IS-E9S-E9SOOQ$IS7+%O7+%OO!IsQ$IWO,5=RO'RQ$IWO,5=ROOQ$IS7+$c7+$cO!IxQ$IWO7+$}O!JQQ$IWO7+%OO!JVQ$IWO1G2qOOQ$IS7+%V7+%VO!JgQ$IWO1G2qO!JoQ$IWO7+%VOOQ$IS,5;o,5;oO'RQ$IWO,5;oO!JtQ$IWO1G2lOOQ$IS-E9R-E9RO!KkQ$IWO7+%ZOOQ$IS7+%]7+%]O!KyQ$IWO1G2lO!LhQ$IWO7+%]O!LmQ$IWO1G2rO!L}Q$IWO1G2rO!MVQ$IWO7+%ZO!M[Q$IWO,5=fO!MrQ$IWO,5=fO!MrQ$IWO,5=fO!NQO!LQO'#DwO!N]OSO'#G{OOOO1G/{1G/{O!NbQ$IWO1G/{O!NjQ%GlO7+'qO# ZQ$I[O1G1jP# tQ$IWO'#FdOOQ$IS,5<R,5<ROOQ$IS-E9e-E9eOOQ$IS7+&q7+&qOOQ$IS1G2h1G2hOOQ$IS,5;n,5;nOOQ$IS-E9Q-E9QOOQ$IS7+$p7+$pO#!RQ$IWO,5<kO#!lQ$IWO,5<kO#!}Q$I[O,5;qO##bQ$IWO1G2nOOQ$IS-E9T-E9TOOQ$IS7+&P7+&PO##rQ$IWO7+&POOQ$IS7+&R7+&RO#$QQ$IWO'#HXO/|Q$IWO7+&RO#$fQ$IWO7+&ROOQ$IS,5<U,5<UO#$qQ$IWO1G3`OOQ$IS-E9h-E9hOOQ$IS,5<Q,5<QO#%PQ$IWO1G3]OOQ$IS-E9d-E9dO#%gQ$IZO7+&]O!DZQ$IWO'#FmO3UQ$IWO7+&]O3UQ$IWO7+&`O#(uQ$I[O,5<YO'RQ$IWO,5<YO#)PQ$IWO1G3bOOQ$IS-E9l-E9lO#)ZQ$IWO1G3bO3UQ$IWO7+&bO/gQ$IWO7+&bOOQ$IV7+&g7+&gO!E`Q%1`O7+&iO#)cQ$IXO1G0rOOQ$IV-E9m-E9mO3UQ$IWO7+&cO3UQ$IWO7+&cOOQ$IV,5<Z,5<ZO#+UQ$IWO,5<ZOOQ$IV7+&c7+&cO#+aQ$IZO7+&cO#.lQ$IWO,5<[O#.wQ$IWO1G3cOOQ$IS-E9n-E9nO#/UQ$IWO1G3cO#/^Q$IWO'#H_O#/lQ$IWO'#H_O/|Q$IWO'#H_OOQ$IS'#H_'#H_O#/wQ$IWO'#H^OOQ$IS,5;e,5;eO#0PQ$IWO,5;eO/gQ$IWO'#E{OOQ$IV7+&i7+&iO3UQ$IWO7+&iOOQ$IV7+&n7+&nOOQ$IS1G2t1G2tOOQ$IS,5;s,5;sO#0UQ$IWO1G2sOOQ$IS-E9V-E9VO#0iQ$IWO,5;tO#0tQ$IWO,5;tO#1XQ$IWO1G2uOOQ$IS-E9W-E9WO#1iQ$IWO1G2uO#1qQ$IWO1G2uO#2RQ$IWO1G2uO#1iQ$IWO1G2uOOQ$IS<<HX<<HXO#2^Q$I[O1G1[OOQ$IS<<Hi<<HiP#2kQ$IWO'#FUO6|Q$IWO1G2mO#2xQ$IWO1G2mO#2}Q$IWO<<HiOOQ$IS<<Hj<<HjO#3_Q$IWO7+(]OOQ$IS<<Hq<<HqO#3oQ$I[O1G1ZP#4`Q$IWO'#FTO#4mQ$IWO7+(^O#4}Q$IWO7+(^O#5VQ$IWO<<HuO#5[Q$IWO7+(WOOQ$IS<<Hw<<HwO#6RQ$IWO,5;rO'RQ$IWO,5;rOOQ$IS-E9U-E9UOOQ$IS<<Hu<<HuOOQ$IS,5;x,5;xO/gQ$IWO,5;xO#6WQ$IWO1G3QOOQ$IS-E9[-E9[O#6nQ$IWO1G3QOOOO'#F_'#F_O#6|O!LQO,5:cOOOO,5=g,5=gOOOO7+%g7+%gO#7XQ$IWO1G2VO#7rQ$IWO1G2VP'RQ$IWO'#FVO/gQ$IWO<<IkO#8TQ$IWO,5=sO#8fQ$IWO,5=sO/|Q$IWO,5=sO#8wQ$IWO<<ImOOQ$IS<<Im<<ImO/|Q$IWO<<ImP/|Q$IWO'#FjP/gQ$IWO'#FfOOQ$IV-E9k-E9kO3UQ$IWO<<IwOOQ$IV,5<X,5<XO3UQ$IWO,5<XOOQ$IV<<Iw<<IwOOQ$IV<<Iz<<IzO#8|Q$I[O1G1tP#9WQ$IWO'#FnO#9_Q$IWO7+(|O#9iQ$IZO<<I|O3UQ$IWO<<I|OOQ$IV<<JT<<JTO3UQ$IWO<<JTOOQ$IV'#Fl'#FlO#<tQ$IZO7+&^OOQ$IV<<I}<<I}O#>mQ$IZO<<I}OOQ$IV1G1u1G1uO/|Q$IWO1G1uO3UQ$IWO<<I}O/|Q$IWO1G1vP/gQ$IWO'#FpO#AxQ$IWO7+(}O#BVQ$IWO7+(}OOQ$IS'#Ez'#EzO/gQ$IWO,5=yO#B_Q$IWO,5=yOOQ$IS,5=y,5=yO#BjQ$IWO,5=xO#B{Q$IWO,5=xOOQ$IS1G1P1G1POOQ$IS,5;g,5;gP#CTQ$IWO'#FXO#CeQ$IWO1G1`O#CxQ$IWO1G1`O#DYQ$IWO1G1`P#DeQ$IWO'#FYO#DrQ$IWO7+(aO#ESQ$IWO7+(aO#ESQ$IWO7+(aO#E[Q$IWO7+(aO#ElQ$IWO7+(XO6|Q$IWO7+(XOOQ$ISAN>TAN>TO#FVQ$IWO<<KxOOQ$ISAN>aAN>aO/gQ$IWO1G1^O#FgQ$I[O1G1^P#FqQ$IWO'#FWOOQ$IS1G1d1G1dP#GOQ$IWO'#F^O#G]Q$IWO7+(lOOOO-E9]-E9]O#GsQ$IWO7+'qOOQ$ISAN?VAN?VO#H^Q$IWO,5<TO#HrQ$IWO1G3_OOQ$IS-E9g-E9gO#ITQ$IWO1G3_OOQ$ISAN?XAN?XO#IfQ$IWOAN?XOOQ$IVAN?cAN?cOOQ$IV1G1s1G1sO3UQ$IWOAN?hO#IkQ$IZOAN?hOOQ$IVAN?oAN?oOOQ$IV-E9j-E9jOOQ$IV<<Ix<<IxO3UQ$IWOAN?iO3UQ$IWO7+'aOOQ$IVAN?iAN?iOOQ$IS7+'b7+'bO#LvQ$IWO<<LiOOQ$IS1G3e1G3eO/gQ$IWO1G3eOOQ$IS,5<],5<]O#MTQ$IWO1G3dOOQ$IS-E9o-E9oO#MfQ$IWO7+&zO#MvQ$IWO7+&zOOQ$IS7+&z7+&zO#NRQ$IWO<<K{O#NcQ$IWO<<K{O#NcQ$IWO<<K{O#NkQ$IWO'#GiOOQ$IS<<Ks<<KsO#NuQ$IWO<<KsOOQ$IS7+&x7+&xO/|Q$IWO1G1oP/|Q$IWO'#FiO$ `Q$IWO7+(yO$ qQ$IWO7+(yOOQ$ISG24sG24sOOQ$IVG25SG25SO3UQ$IWOG25SOOQ$IVG25TG25TOOQ$IV<<J{<<J{OOQ$IS7+)P7+)PP$!SQ$IWO'#FqOOQ$IS<<Jf<<JfO$!bQ$IWO<<JfO$!rQ$IWOANAgO$#SQ$IWOANAgO$#[Q$IWO'#GjOOQ$IS'#Gj'#GjO0hQ$IWO'#DaO$#uQ$IWO,5=TOOQ$ISANA_ANA_OOQ$IS7+'Z7+'ZO$$^Q$IWO<<LeOOQ$IVLD*nLD*nOOQ$ISAN@QAN@QO$$oQ$IWOG27RO$%PQ$IWO,59{OOQ$IS1G2o1G2oO#NkQ$IWO1G/gOOQ$IS7+%R7+%RO6|Q$IWO'#CzO6|Q$IWO,59_O6|Q$IWO,59_O6|Q$IWO,59_O$%UQ$I[O,5<kO6|Q$IWO1G.yO/gQ$IWO1G/UO/gQ$IWO7+$mP$%iQ$IWO'#FdO'RQ$IWO'#GPO$%vQ$IWO,59_O$%{Q$IWO,59_O$&SQ$IWO,59jO$&XQ$IWO1G/RO0hQ$IWO'#DOO6|Q$IWO,59g",
            stateData: "$&o~O$oOS$lOS$kOSQOS~OPhOTeOdsOfXOltOp!SOsuO|vO}!PO!R!VO!S!UO!VYO!ZZO!fdO!mdO!ndO!odO!vxO!xyO!zzO!|{O#O|O#S}O#U!OO#X!QO#Y!QO#[!RO#c!TO#f!WO#j!XO#l!YO#q!ZO#tlO$jqO$zQO${QO%PRO%QVO%e[O%f]O%i^O%l_O%r`O%uaO%wbO~OT!aO]!aO_!bOf!iO!V!kO!d!lO$u![O$v!]O$w!^O$x!_O$y!_O$z!`O${!`O$|!aO$}!aO%O!aO~Oh%TXi%TXj%TXk%TXl%TXm%TXp%TXw%TXx%TX!s%TX#^%TX$j%TX$m%TX%V%TX!O%TX!R%TX!S%TX%W%TX!W%TX![%TX}%TX#V%TXq%TX!j%TX~P$_OdsOfXO!VYO!ZZO!fdO!mdO!ndO!odO$zQO${QO%PRO%QVO%e[O%f]O%i^O%l_O%r`O%uaO%wbO~Ow%SXx%SX#^%SX$j%SX$m%SX%V%SX~Oh!oOi!pOj!nOk!nOl!qOm!rOp!sO!s%SX~P(`OT!yOl-fOs-tO|vO~P'ROT!|Ol-fOs-tO!W!}O~P'ROT#QO_#ROl-fOs-tO![#SO~P'RO%g#VO%h#XO~O%j#YO%k#XO~O!Z#[O%m#]O%q#_O~O!Z#[O%s#`O%t#_O~O!Z#[O%h#_O%v#bO~O!Z#[O%k#_O%x#dO~OT$tX]$tX_$tXf$tXh$tXi$tXj$tXk$tXl$tXm$tXp$tXw$tX!V$tX!d$tX$u$tX$v$tX$w$tX$x$tX$y$tX$z$tX${$tX$|$tX$}$tX%O$tX!O$tX!R$tX!S$tX~O%e[O%f]O%i^O%l_O%r`O%uaO%wbOx$tX!s$tX#^$tX$j$tX$m$tX%V$tX%W$tX!W$tX![$tX}$tX#V$tXq$tX!j$tX~P+uOw#iOx$sX!s$sX#^$sX$j$sX$m$sX%V$sX~Ol-fOs-tO~P'RO#^#lO$j#nO$m#nO~O%QVO~O!R#sO#l!YO#q!ZO#tlO~OltO~P'ROT#xO_#yO%QVOxtP~OT#}Ol-fOs-tO}$OO~P'ROx$QO!s$VO%V$RO#^!tX$j!tX$m!tX~OT#}Ol-fOs-tO#^!}X$j!}X$m!}X~P'ROl-fOs-tO#^#RX$j#RX$m#RX~P'RO!d$]O!m$]O%QVO~OT$gO~P'RO!S$iO#j$jO#l$kO~Ox$lO~OT$zO_$zOl-fOs-tO!O$|O~P'ROl-fOs-tOx%PO~P'RO%d%RO~O_!bOf!iO!V!kO!d!lOT`a]`ah`ai`aj`ak`al`am`ap`aw`ax`a!s`a#^`a$j`a$m`a$u`a$v`a$w`a$x`a$y`a$z`a${`a$|`a$}`a%O`a%V`a!O`a!R`a!S`a%W`a!W`a![`a}`a#V`aq`a!j`a~Ok%WO~Ol%WO~P'ROl-fO~P'ROh-hOi-iOj-gOk-gOl-pOm-qOp-uO!O%SX!R%SX!S%SX%W%SX!W%SX![%SX}%SX#V%SX!j%SX~P(`O%W%YOw%RX!O%RX!R%RX!S%RX!W%RXx%RX~Ow%]O!O%[O!R%aO!S%`O~O!O%[O~Ow%dO!R%aO!S%`O!W%_X~O!W%hO~Ow%iOx%kO!R%aO!S%`O![%YX~O![%oO~O![%pO~O%g#VO%h%rO~O%j#YO%k%rO~OT%uOl-fOs-tO|vO~P'RO!Z#[O%m#]O%q%xO~O!Z#[O%s#`O%t%xO~O!Z#[O%h%xO%v#bO~O!Z#[O%k%xO%x#dO~OT!la]!la_!laf!lah!lai!laj!lak!lal!lam!lap!law!lax!la!V!la!d!la!s!la#^!la$j!la$m!la$u!la$v!la$w!la$x!la$y!la$z!la${!la$|!la$}!la%O!la%V!la!O!la!R!la!S!la%W!la!W!la![!la}!la#V!laq!la!j!la~P#vOw%}Ox$sa!s$sa#^$sa$j$sa$m$sa%V$sa~P$_OT&POltOsuOx$sa!s$sa#^$sa$j$sa$m$sa%V$sa~P'ROw%}Ox$sa!s$sa#^$sa$j$sa$m$sa%V$sa~OPhOTeOltOsuO|vO}!PO!vxO!xyO!zzO!|{O#O|O#S}O#U!OO#X!QO#Y!QO#[!RO#^$_X$j$_X$m$_X~P'RO#^#lO$j&UO$m&UO~O!d&VOf%zX$j%zX#V%zX#^%zX$m%zX#U%zX~Of!iO$j&XO~Ohcaicajcakcalcamcapcawcaxca!sca#^ca$jca$mca%Vca!Oca!Rca!Sca%Wca!Wca![ca}ca#Vcaqca!jca~P$_Opnawnaxna#^na$jna$mna%Vna~Oh!oOi!pOj!nOk!nOl!qOm!rO!sna~PDTO%V&ZOw%UXx%UX~O%QVOw%UXx%UX~Ow&^OxtX~Ox&`O~Ow%iO#^%YX$j%YX$m%YX!O%YXx%YX![%YX!j%YX%V%YX~OT-oOl-fOs-tO|vO~P'RO%V$RO#^Sa$jSa$mSa~O%V$RO~Ow&iO#^%[X$j%[X$m%[Xk%[X~P$_Ow&lO}&kO#^#Ra$j#Ra$m#Ra~O#V&mO#^#Ta$j#Ta$m#Ta~O!d$]O!m$]O#U&oO%QVO~O#U&oO~Ow&qO#^%|X$j%|X$m%|X~Ow&sO#^%yX$j%yX$m%yXx%yX~Ow&wOk&OX~P$_Ok&zO~OPhOTeOltOsuO|vO}!PO!vxO!xyO!zzO!|{O#O|O#S}O#U!OO#X!QO#Y!QO#[!RO$j'PO~P'ROq'TO#g'RO#h'SOP#eaT#ead#eaf#eal#eap#eas#ea|#ea}#ea!R#ea!S#ea!V#ea!Z#ea!f#ea!m#ea!n#ea!o#ea!v#ea!x#ea!z#ea!|#ea#O#ea#S#ea#U#ea#X#ea#Y#ea#[#ea#c#ea#f#ea#j#ea#l#ea#q#ea#t#ea$g#ea$j#ea$z#ea${#ea%P#ea%Q#ea%e#ea%f#ea%i#ea%l#ea%r#ea%u#ea%w#ea$i#ea$m#ea~Ow'UO#V'WOx&PX~Of'YO~Of!iOx$lO~OT!aO]!aO_!bOf!iO!V!kO!d!lO$w!^O$x!_O$y!_O$z!`O${!`O$|!aO$}!aO%O!aOhUiiUijUikUilUimUipUiwUixUi!sUi#^Ui$jUi$mUi$uUi%VUi!OUi!RUi!SUi%WUi!WUi![Ui}Ui#VUiqUi!jUi~O$v!]O~PNyO$vUi~PNyOT!aO]!aO_!bOf!iO!V!kO!d!lO$z!`O${!`O$|!aO$}!aO%O!aOhUiiUijUikUilUimUipUiwUixUi!sUi#^Ui$jUi$mUi$uUi$vUi$wUi%VUi!OUi!RUi!SUi%WUi!WUi![Ui}Ui#VUiqUi!jUi~O$x!_O$y!_O~P!#tO$xUi$yUi~P!#tO_!bOf!iO!V!kO!d!lOhUiiUijUikUilUimUipUiwUixUi!sUi#^Ui$jUi$mUi$uUi$vUi$wUi$xUi$yUi$zUi${Ui%VUi!OUi!RUi!SUi%WUi!WUi![Ui}Ui#VUiqUi!jUi~OT!aO]!aO$|!aO$}!aO%O!aO~P!&rOTUi]Ui$|Ui$}Ui%OUi~P!&rO!R%aO!S%`Ow%bX!O%bX~O%V'_O%W'_O~P+uOw'aO!O%aX~O!O'cO~Ow'dOx'fO!W%cX~Ol-fOs-tOw'dOx'gO!W%cX~P'RO!W'iO~Oj!nOk!nOl!qOm!rOhgipgiwgixgi!sgi#^gi$jgi$mgi%Vgi~Oi!pO~P!+eOigi~P!+eOh-hOi-iOj-gOk-gOl-pOm-qO~Oq'kO~P!,nOT'pOl-fOs-tO!O'qO~P'ROw'rO!O'qO~O!O'tO~O!S'vO~Ow'rO!O'wO!R%aO!S%`O~P$_Oh-hOi-iOj-gOk-gOl-pOm-qO!Ona!Rna!Sna%Wna!Wna![na}na#Vnaqna!jna~PDTOT'pOl-fOs-tO!W%_a~P'ROw'zO!W%_a~O!W'{O~Ow'zO!R%aO!S%`O!W%_a~P$_OT(POl-fOs-tO![%Ya#^%Ya$j%Ya$m%Ya!O%Yax%Ya!j%Ya%V%Ya~P'ROw(QO![%Ya#^%Ya$j%Ya$m%Ya!O%Yax%Ya!j%Ya%V%Ya~O![(TO~Ow(QO!R%aO!S%`O![%Ya~P$_Ow(WO!R%aO!S%`O![%`a~P$_Ow(ZOx%nX![%nX!j%nX~Ox(^O![(`O!j(aO~OT&POltOsuOx$si!s$si#^$si$j$si$m$si%V$si~P'ROw(bOx$si!s$si#^$si$j$si$m$si%V$si~O!d&VOf%za$j%za#V%za#^%za$m%za#U%za~O$j(gO~OT#xO_#yO%QVO~Ow&^Oxta~OltOsuO~P'ROw(QO#^%Ya$j%Ya$m%Ya!O%Yax%Ya![%Ya!j%Ya%V%Ya~P$_Ow(lO#^$sX$j$sX$m$sX%V$sX~O%V$RO#^Si$jSi$mSi~O#^%[a$j%[a$m%[ak%[a~P'ROw(oO#^%[a$j%[a$m%[ak%[a~OT(sOf(uO%QVO~O#U(vO~O%QVO#^%|a$j%|a$m%|a~Ow(xO#^%|a$j%|a$m%|a~Ol-fOs-tO#^%ya$j%ya$m%yax%ya~P'ROw({O#^%ya$j%ya$m%yax%ya~Oq)PO#a)OOP#_iT#_id#_if#_il#_ip#_is#_i|#_i}#_i!R#_i!S#_i!V#_i!Z#_i!f#_i!m#_i!n#_i!o#_i!v#_i!x#_i!z#_i!|#_i#O#_i#S#_i#U#_i#X#_i#Y#_i#[#_i#c#_i#f#_i#j#_i#l#_i#q#_i#t#_i$g#_i$j#_i$z#_i${#_i%P#_i%Q#_i%e#_i%f#_i%i#_i%l#_i%r#_i%u#_i%w#_i$i#_i$m#_i~Oq)QOP#biT#bid#bif#bil#bip#bis#bi|#bi}#bi!R#bi!S#bi!V#bi!Z#bi!f#bi!m#bi!n#bi!o#bi!v#bi!x#bi!z#bi!|#bi#O#bi#S#bi#U#bi#X#bi#Y#bi#[#bi#c#bi#f#bi#j#bi#l#bi#q#bi#t#bi$g#bi$j#bi$z#bi${#bi%P#bi%Q#bi%e#bi%f#bi%i#bi%l#bi%r#bi%u#bi%w#bi$i#bi$m#bi~OT)SOk&Oa~P'ROw)TOk&Oa~Ow)TOk&Oa~P$_Ok)XO~O$h)[O~Oq)_O#g'RO#h)^OP#eiT#eid#eif#eil#eip#eis#ei|#ei}#ei!R#ei!S#ei!V#ei!Z#ei!f#ei!m#ei!n#ei!o#ei!v#ei!x#ei!z#ei!|#ei#O#ei#S#ei#U#ei#X#ei#Y#ei#[#ei#c#ei#f#ei#j#ei#l#ei#q#ei#t#ei$g#ei$j#ei$z#ei${#ei%P#ei%Q#ei%e#ei%f#ei%i#ei%l#ei%r#ei%u#ei%w#ei$i#ei$m#ei~Ol-fOs-tOx$lO~P'ROl-fOs-tOx&Pa~P'ROw)eOx&Pa~OT)iO_)jO!O)mO$|)kO%QVO~Ox$lO&S)oO~OT$zO_$zOl-fOs-tO!O%aa~P'ROw)uO!O%aa~Ol-fOs-tOx)xO!W%ca~P'ROw)yO!W%ca~Ol-fOs-tOw)yOx)|O!W%ca~P'ROl-fOs-tOw)yO!W%ca~P'ROw)yOx)|O!W%ca~Oj-gOk-gOl-pOm-qOhgipgiwgi!Ogi!Rgi!Sgi%Wgi!Wgixgi![gi#^gi$jgi$mgi}gi#Vgiqgi!jgi%Vgi~Oi-iO~P!GmOigi~P!GmOT'pOl-fOs-tO!O*RO~P'ROk*TO~Ow*VO!O*RO~O!O*WO~OT'pOl-fOs-tO!W%_i~P'ROw*XO!W%_i~O!W*YO~OT(POl-fOs-tO![%Yi#^%Yi$j%Yi$m%Yi!O%Yix%Yi!j%Yi%V%Yi~P'ROw*]O!R%aO!S%`O![%`i~Ow*`O![%Yi#^%Yi$j%Yi$m%Yi!O%Yix%Yi!j%Yi%V%Yi~O![*aO~O_*cOl-fOs-tO![%`i~P'ROw*]O![%`i~O![*eO~OT*gOl-fOs-tOx%na![%na!j%na~P'ROw*hOx%na![%na!j%na~O!Z#[O%p*kO![!kX~O![*mO~Ox(^O![*nO~OT&POltOsuOx$sq!s$sq#^$sq$j$sq$m$sq%V$sq~P'ROw$Wix$Wi!s$Wi#^$Wi$j$Wi$m$Wi%V$Wi~P$_OT&POltOsuO~P'ROT&POl-fOs-tO#^$sa$j$sa$m$sa%V$sa~P'ROw*oO#^$sa$j$sa$m$sa%V$sa~Ow#ya#^#ya$j#ya$m#yak#ya~P$_O#^%[i$j%[i$m%[ik%[i~P'ROw*rO#^#Rq$j#Rq$m#Rq~Ow*sO#V*uO#^%{X$j%{X$m%{X!O%{X~OT*wOf*xO%QVO~O%QVO#^%|i$j%|i$m%|i~Ol-fOs-tO#^%yi$j%yi$m%yix%yi~P'ROq*|O#a)OOP#_qT#_qd#_qf#_ql#_qp#_qs#_q|#_q}#_q!R#_q!S#_q!V#_q!Z#_q!f#_q!m#_q!n#_q!o#_q!v#_q!x#_q!z#_q!|#_q#O#_q#S#_q#U#_q#X#_q#Y#_q#[#_q#c#_q#f#_q#j#_q#l#_q#q#_q#t#_q$g#_q$j#_q$z#_q${#_q%P#_q%Q#_q%e#_q%f#_q%i#_q%l#_q%r#_q%u#_q%w#_q$i#_q$m#_q~Ok$baw$ba~P$_OT)SOk&Oi~P'ROw+TOk&Oi~OPhOTeOltOp!SOsuO|vO}!PO!R!VO!S!UO!vxO!xyO!zzO!|{O#O|O#S}O#U!OO#X!QO#Y!QO#[!RO#c!TO#f!WO#j!XO#l!YO#q!ZO#tlO~P'ROw+_Ox$lO#V+_O~O#h+`OP#eqT#eqd#eqf#eql#eqp#eqs#eq|#eq}#eq!R#eq!S#eq!V#eq!Z#eq!f#eq!m#eq!n#eq!o#eq!v#eq!x#eq!z#eq!|#eq#O#eq#S#eq#U#eq#X#eq#Y#eq#[#eq#c#eq#f#eq#j#eq#l#eq#q#eq#t#eq$g#eq$j#eq$z#eq${#eq%P#eq%Q#eq%e#eq%f#eq%i#eq%l#eq%r#eq%u#eq%w#eq$i#eq$m#eq~O#V+aOw$dax$da~Ol-fOs-tOx&Pi~P'ROw+cOx&Pi~Ox$QO%V+eOw&RX!O&RX~O%QVOw&RX!O&RX~Ow+iO!O&QX~O!O+kO~OT$zO_$zOl-fOs-tO!O%ai~P'ROx+nOw#|a!W#|a~Ol-fOs-tOx+oOw#|a!W#|a~P'ROl-fOs-tOx)xO!W%ci~P'ROw+rO!W%ci~Ol-fOs-tOw+rO!W%ci~P'ROw+rOx+uO!W%ci~Ow#xi!O#xi!W#xi~P$_OT'pOl-fOs-tO~P'ROk+wO~OT'pOl-fOs-tO!O+xO~P'ROT'pOl-fOs-tO!W%_q~P'ROw#wi![#wi#^#wi$j#wi$m#wi!O#wix#wi!j#wi%V#wi~P$_OT(POl-fOs-tO~P'RO_*cOl-fOs-tO![%`q~P'ROw+yO![%`q~O![+zO~OT(POl-fOs-tO![%Yq#^%Yq$j%Yq$m%Yq!O%Yqx%Yq!j%Yq%V%Yq~P'ROx+{O~OT*gOl-fOs-tOx%ni![%ni!j%ni~P'ROw,QOx%ni![%ni!j%ni~O!Z#[O%p*kO![!ka~OT&POl-fOs-tO#^$si$j$si$m$si%V$si~P'ROw,SO#^$si$j$si$m$si%V$si~O%QVO#^%{a$j%{a$m%{a!O%{a~Ow,VO#^%{a$j%{a$m%{a!O%{a~O!O,YO~Ok$biw$bi~P$_OT)SO~P'ROT)SOk&Oq~P'ROq,^OP#dyT#dyd#dyf#dyl#dyp#dys#dy|#dy}#dy!R#dy!S#dy!V#dy!Z#dy!f#dy!m#dy!n#dy!o#dy!v#dy!x#dy!z#dy!|#dy#O#dy#S#dy#U#dy#X#dy#Y#dy#[#dy#c#dy#f#dy#j#dy#l#dy#q#dy#t#dy$g#dy$j#dy$z#dy${#dy%P#dy%Q#dy%e#dy%f#dy%i#dy%l#dy%r#dy%u#dy%w#dy$i#dy$m#dy~OPhOTeOltOp!SOsuO|vO}!PO!R!VO!S!UO!vxO!xyO!zzO!|{O#O|O#S}O#U!OO#X!QO#Y!QO#[!RO#c!TO#f!WO#j!XO#l!YO#q!ZO#tlO$i,bO$m,bO~P'RO#h,cOP#eyT#eyd#eyf#eyl#eyp#eys#ey|#ey}#ey!R#ey!S#ey!V#ey!Z#ey!f#ey!m#ey!n#ey!o#ey!v#ey!x#ey!z#ey!|#ey#O#ey#S#ey#U#ey#X#ey#Y#ey#[#ey#c#ey#f#ey#j#ey#l#ey#q#ey#t#ey$g#ey$j#ey$z#ey${#ey%P#ey%Q#ey%e#ey%f#ey%i#ey%l#ey%r#ey%u#ey%w#ey$i#ey$m#ey~Ol-fOs-tOx&Pq~P'ROw,gOx&Pq~O%V+eOw&Ra!O&Ra~OT)iO_)jO$|)kO%QVO!O&Qa~Ow,kO!O&Qa~OT$zO_$zOl-fOs-tO~P'ROl-fOs-tOx,mOw#|i!W#|i~P'ROl-fOs-tOw#|i!W#|i~P'ROx,mOw#|i!W#|i~Ol-fOs-tOx)xO~P'ROl-fOs-tOx)xO!W%cq~P'ROw,pO!W%cq~Ol-fOs-tOw,pO!W%cq~P'ROp,sO!R%aO!S%`O!O%Zq!W%Zq![%Zqw%Zq~P!,nO_*cOl-fOs-tO![%`y~P'ROw#zi![#zi~P$_O_*cOl-fOs-tO~P'ROT*gOl-fOs-tO~P'ROT*gOl-fOs-tOx%nq![%nq!j%nq~P'ROT&POl-fOs-tO#^$sq$j$sq$m$sq%V$sq~P'RO#V,wOw$]a#^$]a$j$]a$m$]a!O$]a~O%QVO#^%{i$j%{i$m%{i!O%{i~Ow,yO#^%{i$j%{i$m%{i!O%{i~O!O,{O~Oq,}OP#d!RT#d!Rd#d!Rf#d!Rl#d!Rp#d!Rs#d!R|#d!R}#d!R!R#d!R!S#d!R!V#d!R!Z#d!R!f#d!R!m#d!R!n#d!R!o#d!R!v#d!R!x#d!R!z#d!R!|#d!R#O#d!R#S#d!R#U#d!R#X#d!R#Y#d!R#[#d!R#c#d!R#f#d!R#j#d!R#l#d!R#q#d!R#t#d!R$g#d!R$j#d!R$z#d!R${#d!R%P#d!R%Q#d!R%e#d!R%f#d!R%i#d!R%l#d!R%r#d!R%u#d!R%w#d!R$i#d!R$m#d!R~Ol-fOs-tOx&Py~P'ROT)iO_)jO$|)kO%QVO!O&Qi~Ol-fOs-tOw#|q!W#|q~P'ROx-TOw#|q!W#|q~Ol-fOs-tOx)xO!W%cy~P'ROw-UO!W%cy~Ol-fOs-YO~P'ROp,sO!R%aO!S%`O!O%Zy!W%Zy![%Zyw%Zy~P!,nO%QVO#^%{q$j%{q$m%{q!O%{q~Ow-^O#^%{q$j%{q$m%{q!O%{q~OT)iO_)jO$|)kO%QVO~Ol-fOs-tOw#|y!W#|y~P'ROl-fOs-tOx)xO!W%c!R~P'ROw-aO!W%c!R~Op%^X!O%^X!R%^X!S%^X!W%^X![%^Xw%^X~P!,nOp,sO!R%aO!S%`O!O%]a!W%]a![%]aw%]a~O%QVO#^%{y$j%{y$m%{y!O%{y~Ol-fOs-tOx)xO!W%c!Z~P'ROx-dO~Ow*oO#^$sa$j$sa$m$sa%V$sa~P$_OT&POl-fOs-tO~P'ROk-kO~Ol-kO~P'ROx-lO~Oq-mO~P!,nO%f%i%u%w%e!Z%m%s%v%x%l%r%l%Q~",
            goto: "!,u&SPPPP&TP&])n*T*k+S+l,VP,qP&]-_-_&]P&]P0pPPPPPP0p3`PP3`P5l5u:yPP:|;[;_PPP&]&]PP;k&]PP&]&]PP&]&]&]&];o<c&]P<fP<i<i@OP@d&]PPP@h@n&TP&T&TP&TP&TP&TP&TP&T&T&TP&TPP&TPP&TP@tP@{ARP@{P@{@{PPP@{PBzPCTCZCaBzP@{CgPCnCtCzDWDjDpDzEQEnEtEzFQF[FbFhFnFtFzG^GhGnGtGzHUH[HbHhHnHxIOIYI`PPPPPPPPPIiIqIzJUJaPPPPPPPPPPPPNv! `!%n!(zPP!)S!)b!)k!*a!*W!*j!*p!*s!*v!*y!+RPPPPPPPPPP!+U!+XPPPPPPPPP!+_!+k!+w!,T!,W!,^!,d!,j!,m]iOr#l$l)[+Z'odOSXYZehrstvx|}!R!S!T!U!X!c!d!e!f!g!h!i!k!n!o!p!r!s!y!|#Q#R#[#i#l#}$O$Q$S$V$g$i$j$l$z%P%W%Z%]%`%d%i%k%u%}&P&[&`&i&k&l&s&w&z'R'U'`'a'd'f'g'k'p'r'v'z(P(Q(W(Z(b(d(l(o({)O)S)T)X)[)e)o)u)x)y)|*S*T*V*X*[*]*`*c*g*h*o*q*r*z+S+T+Z+b+c+f+m+n+o+q+r+u+w+y+{+},P,Q,S,g,i,m,p,s-T-U-a-d-f-g-h-i-k-l-m-n-o-q-uw!cP#h#u$W$f%b%g%m%n&a&y(c(n)R*Q*Z+R+|-jy!dP#h#u$W$f$r%b%g%m%n&a&y(c(n)R*Q*Z+R+|-j{!eP#h#u$W$f$r$s%b%g%m%n&a&y(c(n)R*Q*Z+R+|-j}!fP#h#u$W$f$r$s$t%b%g%m%n&a&y(c(n)R*Q*Z+R+|-j!P!gP#h#u$W$f$r$s$t$u%b%g%m%n&a&y(c(n)R*Q*Z+R+|-j!R!hP#h#u$W$f$r$s$t$u$v%b%g%m%n&a&y(c(n)R*Q*Z+R+|-j!V!hP!m#h#u$W$f$r$s$t$u$v$w%b%g%m%n&a&y(c(n)R*Q*Z+R+|-j'oSOSXYZehrstvx|}!R!S!T!U!X!c!d!e!f!g!h!i!k!n!o!p!r!s!y!|#Q#R#[#i#l#}$O$Q$S$V$g$i$j$l$z%P%W%Z%]%`%d%i%k%u%}&P&[&`&i&k&l&s&w&z'R'U'`'a'd'f'g'k'p'r'v'z(P(Q(W(Z(b(d(l(o({)O)S)T)X)[)e)o)u)x)y)|*S*T*V*X*[*]*`*c*g*h*o*q*r*z+S+T+Z+b+c+f+m+n+o+q+r+u+w+y+{+},P,Q,S,g,i,m,p,s-T-U-a-d-f-g-h-i-k-l-m-n-o-q-u&ZUOXYZhrtv|}!R!S!T!X!i!k!n!o!p!r!s#[#i#l$O$Q$S$V$j$l$z%P%W%Z%]%d%i%k%u%}&[&`&k&l&s&z'R'U'`'a'd'f'g'k'r'z(Q(W(Z(b(d(l({)O)X)[)e)o)u)x)y)|*S*T*V*X*[*]*`*g*h*o*r*z+Z+b+c+f+m+n+o+q+r+u+w+y+{+},P,Q,S,g,i,m,p,s-T-U-a-d-f-g-h-i-k-l-m-n-q-u%eWOXYZhrv|}!R!S!T!X!i!k#[#i#l$O$Q$S$V$j$l$z%P%Z%]%d%i%k%u%}&[&`&k&l&s&z'R'U'`'a'd'f'g'k'r'z(Q(W(Z(b(d(l({)O)X)[)e)o)u)x)y)|*S*V*X*[*]*`*g*h*o*r*z+Z+b+c+f+m+n+o+q+r+u+y+{+},P,Q,S,g,i,m,p-T-U-a-l-m-nQ#{uQ-b-YR-r-t'fdOSXYZehrstvx|}!R!S!T!U!X!c!d!e!f!g!h!k!n!o!p!r!s!y!|#Q#R#[#i#l#}$O$Q$S$V$g$i$j$l$z%P%W%Z%]%`%d%i%k%u%}&P&[&`&i&k&l&s&w&z'R'U'`'d'f'g'k'p'r'v'z(P(Q(W(Z(b(d(l(o({)O)S)T)X)[)e)o)x)y)|*S*T*V*X*[*]*`*c*g*h*o*q*r*z+S+T+Z+b+c+f+n+o+q+r+u+w+y+{+},P,Q,S,g,i,m,p,s-T-U-a-d-f-g-h-i-k-l-m-n-o-q-uW#ol!O!P$^W#wu&^-Y-tQ$`!QQ$p!YQ$q!ZW$y!i'a)u+mS&]#x#yQ&}$kQ(e&VQ(s&mW(t&o(u(v*xU(w&q(x*yQ)g'WW)h'Y+i,k-RS+h)i)jY,U*s,V,x,y-^Q,X*uQ,d+_Q,f+aR-],wR&[#wi!vXY!S!T%]%d'r'z)O*S*V*XR%Z!uQ!zXQ%v#[Q&e$SR&h$VT-X,s-d!U!jP!m#h#u$W$f$r$s$t$u$v$w%b%g%m%n&a&y(c(n)R*Q*Z+R+|-jQ&Y#pR']$qR'`$yR%S!l'ncOSXYZehrstvx|}!R!S!T!U!X!c!d!e!f!g!h!i!k!n!o!p!r!s!y!|#Q#R#[#i#l#}$O$Q$S$V$g$i$j$l$z%P%W%Z%]%`%d%i%k%u%}&P&[&`&i&k&l&s&w&z'R'U'`'a'd'f'g'k'p'r'v'z(P(Q(W(Z(b(d(l(o({)O)S)T)X)[)e)o)u)x)y)|*S*T*V*X*[*]*`*c*g*h*o*q*r*z+S+T+Z+b+c+f+m+n+o+q+r+u+w+y+{+},P,Q,S,g,i,m,p,s-T-U-a-d-f-g-h-i-k-l-m-n-o-q-uT#fc#gS#]_#^S#``#aS#ba#cS#db#eT*k(^*lT(_%v(aQ$UwR+g)hX$Sw$T$U&gZkOr$l)[+ZXoOr)[+ZQ$m!WQ&u$dQ&v$eQ'X$oQ'[$qQ)Y&|Q)`'RQ)b'SQ)c'TQ)p'ZQ)r']Q*})OQ+P)PQ+Q)QQ+U)WS+W)Z)qQ+[)^Q+])_Q+^)aQ,[*|Q,]+OQ,_+VQ,`+XQ,e+`Q,|,^Q-O,cQ-P,dR-_,}WoOr)[+ZR#rnQ'Z$pR)Z&}Q+f)hR,i+gQ)q'ZR+X)ZZmOnr)[+ZQrOR#trQ&_#zR(j&_S%j#P#|S(R%j(UT(U%m&aQ%^!xQ%e!{W's%^%e'x'|Q'x%bR'|%gQ&j$WR(p&jQ(X%nQ*^(ST*d(X*^Q'b${R)v'bS'e%O%PY)z'e){+s,q-VU){'f'g'hU+s)|)}*OS,q+t+uR-V,rQ#W]R%q#WQ#Z^R%s#ZQ#^_R%w#^Q([%tS*i([*jR*j(]Q*l(^R,R*lQ#a`R%y#aQ#caR%z#cQ#ebR%{#eQ#gcR%|#gQ#jfQ&O#hW&R#j&O(m*pQ(m&dR*p-jQ$TwS&f$T&gR&g$UQ&t$bR(|&tQ&W#oR(f&WQ$^!PR&n$^Q*t(tS,W*t,zR,z,XQ&r$`R(y&rQ#mjR&T#mQ+Z)[R,a+ZQ(}&uR*{(}Q&x$fS)U&x)VR)V&yQ'Q$mR)]'QQ'V$nS)f'V+dR+d)gQ+j)lR,l+jWnOr)[+ZR#qnSqOrT+Y)[+ZWpOr)[+ZR'O$lYjOr$l)[+ZR&S#l[wOr#l$l)[+ZR&e$S&YPOXYZhrtv|}!R!S!T!X!i!k!n!o!p!r!s#[#i#l$O$Q$S$V$j$l$z%P%W%Z%]%d%i%k%u%}&[&`&k&l&s&z'R'U'`'a'd'f'g'k'r'z(Q(W(Z(b(d(l({)O)X)[)e)o)u)x)y)|*S*T*V*X*[*]*`*g*h*o*r*z+Z+b+c+f+m+n+o+q+r+u+w+y+{+},P,Q,S,g,i,m,p,s-T-U-a-d-f-g-h-i-k-l-m-n-q-uQ!mSQ#heQ#usU$Wx%`'vS$f!U$iQ$r!cQ$s!dQ$t!eQ$u!fQ$v!gQ$w!hQ%b!yQ%g!|Q%m#QQ%n#RQ&a#}Q&y$gQ(c&PU(n&i(o*qW)R&w)T+S+TQ*Q'pQ*Z(PQ+R)SQ+|*cR-j-oQ!xXQ!{YQ$d!SQ$e!T^'o%]%d'r'z*S*V*XR+O)O[fOr#l$l)[+Zh!uXY!S!T%]%d'r'z)O*S*V*XQ#PZQ#khS#|v|Q$Z}W$b!R$V&z)XS$n!X$jW$x!i'a)u+mQ%O!kQ%t#[`&Q#i%}(b(d(l*o,S-nQ&b$OQ&c$QQ&d$SQ'^$zQ'h%PQ'n%ZW(O%i(Q*[*`Q(S%kQ(]%uQ(h&[S(k&`-lQ(q&kQ(r&lU(z&s({*zQ)a'RY)d'U)e+b+c,gQ)s'`^)w'd)y+q+r,p-U-aQ)}'fQ*O'gS*P'k-mW*b(W*]+y+}W*f(Z*h,P,QQ+l)oQ+p)xQ+t)|Q,O*gQ,T*rQ,h+fQ,n+nQ,o+oQ,r+uQ,v+{Q-Q,iQ-S,mR-`-ThTOr#i#l$l%}&`'k(b(d)[+Z$z!tXYZhv|}!R!S!T!X!i!k#[$O$Q$S$V$j$z%P%Z%]%d%i%k%u&[&k&l&s&z'R'U'`'a'd'f'g'r'z(Q(W(Z(l({)O)X)e)o)u)x)y)|*S*V*X*[*]*`*g*h*o*r*z+b+c+f+m+n+o+q+r+u+y+{+},P,Q,S,g,i,m,p-T-U-a-l-m-nQ#vtW%T!n!r-g-qQ%U!oQ%V!pQ%X!sQ%c-fS'j%W-kQ'l-hQ'm-iQ+v*TQ,u+wS-W,s-dR-s-uU#zu-Y-tR(i&^[gOr#l$l)[+ZX!wX#[$S$VQ#UZQ$PvR$Y|Q%_!xQ%f!{Q%l#PQ'^$xQ'y%bQ'}%gQ(V%mQ(Y%nQ*_(SQ,t+vQ-[,uR-c-ZQ$XxQ'u%`R*U'vQ-Z,sR-e-dR#OYR#TZR$}!iQ${!iV)t'a)u+mR%Q!kR%v#[Q(`%vR*n(aQ$c!RQ&h$VQ)W&zR+V)XQ#plQ$[!OQ$_!PR&p$^Q(s&oQ*v(uQ*w(vR,Z*xR$a!QXpOr)[+ZQ$h!UR&{$iQ$o!XR&|$jR)n'YQ)l'YV,j+i,k-R",
            nodeNames: "⚠ print Comment Script AssignStatement * BinaryExpression BitOp BitOp BitOp BitOp ArithOp ArithOp @ ArithOp ** UnaryExpression ArithOp BitOp AwaitExpression await ParenthesizedExpression ( BinaryExpression or and CompareOp in not is UnaryExpression ConditionalExpression if else LambdaExpression lambda ParamList VariableName AssignOp , : NamedExpression AssignOp YieldExpression yield from ) TupleExpression ComprehensionExpression async for LambdaExpression ArrayExpression [ ] ArrayComprehensionExpression DictionaryExpression { } DictionaryComprehensionExpression SetExpression SetComprehensionExpression CallExpression ArgList AssignOp MemberExpression . PropertyName Number String FormatString FormatReplacement FormatConversion FormatSpec ContinuedString Ellipsis None Boolean TypeDef AssignOp UpdateStatement UpdateOp ExpressionStatement DeleteStatement del PassStatement pass BreakStatement break ContinueStatement continue ReturnStatement return YieldStatement PrintStatement RaiseStatement raise ImportStatement import as ScopeStatement global nonlocal AssertStatement assert StatementGroup ; IfStatement Body elif WhileStatement while ForStatement TryStatement try except finally WithStatement with FunctionDefinition def ParamList AssignOp TypeDef ClassDefinition class DecoratedStatement Decorator At",
            maxTerm: 234,
            context: _p,
            nodeProps: [
                [Ti.group, -14, 4, 80, 82, 83, 85, 87, 89, 91, 93, 94, 95, 97, 100, 103, "Statement Statement", -22, 6, 16, 19, 21, 37, 47, 48, 52, 55, 56, 59, 60, 61, 62, 65, 68, 69, 70, 74, 75, 76, 77, "Expression", -9, 105, 107, 110, 112, 113, 117, 119, 124, 126, "Statement"]
            ],
            skippedNodes: [0, 2],
            repeatNodeCount: 32,
            tokenData: "(#RMgR!^OX$}XY!5[Y[$}[]!5[]p$}pq!5[qr!7frs!;]st#+otu$}uv%3Tvw%5gwx%6sxy&)oyz&*uz{&+{{|&.k|}&/w}!O&0}!O!P&3d!P!Q&>j!Q!R&AY!R![&GW![!]'$S!]!^'&f!^!_''l!_!`'*[!`!a'+h!a!b$}!b!c'.T!c!d'/c!d!e'1T!e!h'/c!h!i'=R!i!t'/c!t!u'Fg!u!w'/c!w!x';a!x!}'/c!}#O'Hq#O#P'Iw#P#Q'Ji#Q#R'Ko#R#S'/c#S#T$}#T#U'/c#U#V'1T#V#Y'/c#Y#Z'=R#Z#f'/c#f#g'Fg#g#i'/c#i#j';a#j#o'/c#o#p'L{#p#q'Mq#q#r'N}#r#s( {#s$g$}$g~'/c<r%`Z%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux#O$}#O#P!3Q#P#o$}#o#p!4h#p#q$}#q#r!3f#r~$}9[&^Z%p7[%gS%m`%v!bOr'PrsLQsw'Pwx(Px#O'P#O#PNp#P#o'P#o#pKQ#p#q'P#q#rGW#r~'P9['^Z%p7[%gS%jW%m`%v!bOr'Prs&Rsw'Pwx(Px#O'P#O#PFr#P#o'P#o#pKQ#p#q'P#q#rGW#r~'P8z(WZ%p7[%jWOr(yrs)wsw(ywxAjx#O(y#O#PF^#P#o(y#o#p>v#p#q(y#q#r5T#r~(y8z)UZ%p7[%gS%jW%v!bOr(yrs)wsw(ywx(Px#O(y#O#PAU#P#o(y#o#p?p#p#q(y#q#r5T#r~(y8z*QZ%p7[%gS%v!bOr(yrs*ssw(ywx(Px#O(y#O#P@p#P#o(y#o#p?p#p#q(y#q#r5T#r~(y8z*|Z%p7[%gS%v!bOr(yrs+osw(ywx(Px#O(y#O#P4o#P#o(y#o#p?p#p#q(y#q#r5T#r~(y8r+xX%p7[%gS%v!bOw+owx,ex#O+o#O#P4Z#P#o+o#o#p3Z#p#q+o#q#r.k#r~+o8r,jX%p7[Ow+owx-Vx#O+o#O#P3u#P#o+o#o#p2i#p#q+o#q#r.k#r~+o8r-[X%p7[Ow+owx-wx#O+o#O#P.V#P#o+o#o#p0^#p#q+o#q#r.k#r~+o7[-|R%p7[O#o-w#p#q-w#r~-w8r.[T%p7[O#o+o#o#p.k#p#q+o#q#r.k#r~+o!f.rV%gS%v!bOw.kwx/Xx#O.k#O#P3T#P#o.k#o#p3Z#p~.k!f/[VOw.kwx/qx#O.k#O#P2c#P#o.k#o#p2i#p~.k!f/tUOw.kx#O.k#O#P0W#P#o.k#o#p0^#p~.k!f0ZPO~.k!f0cV%gSOw0xwx1^x#O0x#O#P2]#P#o0x#o#p.k#p~0xS0}T%gSOw0xwx1^x#O0x#O#P2]#P~0xS1aTOw0xwx1px#O0x#O#P2V#P~0xS1sSOw0xx#O0x#O#P2P#P~0xS2SPO~0xS2YPO~0xS2`PO~0x!f2fPO~.k!f2nV%gSOw0xwx1^x#O0x#O#P2]#P#o0x#o#p.k#p~0x!f3WPO~.k!f3`V%gSOw0xwx1^x#O0x#O#P2]#P#o0x#o#p.k#p~0x8r3zT%p7[O#o+o#o#p.k#p#q+o#q#r.k#r~+o8r4`T%p7[O#o+o#o#p.k#p#q+o#q#r.k#r~+o8z4tT%p7[O#o(y#o#p5T#p#q(y#q#r5T#r~(y!n5^X%gS%jW%v!bOr5Trs5ysw5Twx7ax#O5T#O#P@j#P#o5T#o#p?p#p~5T!n6QX%gS%v!bOr5Trs6msw5Twx7ax#O5T#O#P@d#P#o5T#o#p?p#p~5T!n6tX%gS%v!bOr5Trs.ksw5Twx7ax#O5T#O#P?j#P#o5T#o#p?p#p~5T!n7fX%jWOr5Trs5ysw5Twx8Rx#O5T#O#P>p#P#o5T#o#p>v#p~5T!n8WX%jWOr5Trs5ysw5Twx8sx#O5T#O#P:^#P#o5T#o#p:d#p~5TW8xT%jWOr8srs9Xs#O8s#O#P:W#P~8sW9[TOr8srs9ks#O8s#O#P:Q#P~8sW9nSOr8ss#O8s#O#P9z#P~8sW9}PO~8sW:TPO~8sW:ZPO~8s!n:aPO~5T!n:kX%gS%jWOr;Wrs;tsw;Wwx<zx#O;W#O#P>j#P#o;W#o#p5T#p~;W[;_V%gS%jWOr;Wrs;tsw;Wwx<zx#O;W#O#P>j#P~;W[;yV%gSOr;Wrs<`sw;Wwx<zx#O;W#O#P>d#P~;W[<eV%gSOr;Wrs0xsw;Wwx<zx#O;W#O#P>^#P~;W[=PV%jWOr;Wrs;tsw;Wwx=fx#O;W#O#P>W#P~;W[=kV%jWOr;Wrs;tsw;Wwx8sx#O;W#O#P>Q#P~;W[>TPO~;W[>ZPO~;W[>aPO~;W[>gPO~;W[>mPO~;W!n>sPO~5T!n>}X%gS%jWOr;Wrs;tsw;Wwx<zx#O;W#O#P>j#P#o;W#o#p5T#p~;W!n?mPO~5T!n?wX%gS%jWOr;Wrs;tsw;Wwx<zx#O;W#O#P>j#P#o;W#o#p5T#p~;W!n@gPO~5T!n@mPO~5T8z@uT%p7[O#o(y#o#p5T#p#q(y#q#r5T#r~(y8zAZT%p7[O#o(y#o#p5T#p#q(y#q#r5T#r~(y8zAqZ%p7[%jWOr(yrs)wsw(ywxBdx#O(y#O#PEx#P#o(y#o#p:d#p#q(y#q#r5T#r~(y7dBkX%p7[%jWOrBdrsCWs#OBd#O#PEd#P#oBd#o#p8s#p#qBd#q#r8s#r~Bd7dC]X%p7[OrBdrsCxs#OBd#O#PEO#P#oBd#o#p8s#p#qBd#q#r8s#r~Bd7dC}X%p7[OrBdrs-ws#OBd#O#PDj#P#oBd#o#p8s#p#qBd#q#r8s#r~Bd7dDoT%p7[O#oBd#o#p8s#p#qBd#q#r8s#r~Bd7dETT%p7[O#oBd#o#p8s#p#qBd#q#r8s#r~Bd7dEiT%p7[O#oBd#o#p8s#p#qBd#q#r8s#r~Bd8zE}T%p7[O#o(y#o#p5T#p#q(y#q#r5T#r~(y8zFcT%p7[O#o(y#o#p5T#p#q(y#q#r5T#r~(y9[FwT%p7[O#o'P#o#pGW#p#q'P#q#rGW#r~'P#OGcX%gS%jW%m`%v!bOrGWrsHOswGWwx7ax#OGW#O#PKz#P#oGW#o#pKQ#p~GW#OHXX%gS%m`%v!bOrGWrsHtswGWwx7ax#OGW#O#PKt#P#oGW#o#pKQ#p~GW#OH}X%gS%m`%v!bOrGWrsIjswGWwx7ax#OGW#O#PJz#P#oGW#o#pKQ#p~GW!vIsV%gS%m`%v!bOwIjwx/Xx#OIj#O#PJY#P#oIj#o#pJ`#p~Ij!vJ]PO~Ij!vJeV%gSOw0xwx1^x#O0x#O#P2]#P#o0x#o#pIj#p~0x#OJ}PO~GW#OKXX%gS%jWOr;Wrs;tsw;Wwx<zx#O;W#O#P>j#P#o;W#o#pGW#p~;W#OKwPO~GW#OK}PO~GW9[L]Z%p7[%gS%m`%v!bOr'PrsMOsw'Pwx(Px#O'P#O#PN[#P#o'P#o#pKQ#p#q'P#q#rGW#r~'P9SMZX%p7[%gS%m`%v!bOwMOwx,ex#OMO#O#PMv#P#oMO#o#pJ`#p#qMO#q#rIj#r~MO9SM{T%p7[O#oMO#o#pIj#p#qMO#q#rIj#r~MO9[NaT%p7[O#o'P#o#pGW#p#q'P#q#rGW#r~'P9[NuT%p7[O#o'P#o#pGW#p#q'P#q#rGW#r~'P<b! aZ%p7[%jW%sp%x#tOr!!Srs)wsw!!Swx!-Qx#O!!S#O#P!2l#P#o!!S#o#p!+d#p#q!!S#q#r!#j#r~!!S<b!!cZ%p7[%gS%jW%sp%v!b%x#tOr!!Srs)wsw!!Swx! Ux#O!!S#O#P!#U#P#o!!S#o#p!,^#p#q!!S#q#r!#j#r~!!S<b!#ZT%p7[O#o!!S#o#p!#j#p#q!!S#q#r!#j#r~!!S&U!#wX%gS%jW%sp%v!b%x#tOr!#jrs5ysw!#jwx!$dx#O!#j#O#P!,W#P#o!#j#o#p!,^#p~!#j&U!$mX%jW%sp%x#tOr!#jrs5ysw!#jwx!%Yx#O!#j#O#P!+^#P#o!#j#o#p!+d#p~!#j&U!%cX%jW%sp%x#tOr!#jrs5ysw!#jwx!&Ox#O!#j#O#P!*d#P#o!#j#o#p!*j#p~!#j$n!&XX%jW%sp%x#tOr!&trs9Xsw!&twx!&Ox#O!&t#O#P!)r#P#o!&t#o#p!)x#p~!&t$n!&}X%jW%sp%x#tOr!&trs9Xsw!&twx!'jx#O!&t#O#P!)Q#P#o!&t#o#p!)W#p~!&t$n!'sX%jW%sp%x#tOr!&trs9Xsw!&twx!&Ox#O!&t#O#P!(`#P#o!&t#o#p!(f#p~!&t$n!(cPO~!&t$n!(kV%jWOr8srs9Xs#O8s#O#P:W#P#o8s#o#p!&t#p~8s$n!)TPO~!&t$n!)]V%jWOr8srs9Xs#O8s#O#P:W#P#o8s#o#p!&t#p~8s$n!)uPO~!&t$n!)}V%jWOr8srs9Xs#O8s#O#P:W#P#o8s#o#p!&t#p~8s&U!*gPO~!#j&U!*qX%gS%jWOr;Wrs;tsw;Wwx<zx#O;W#O#P>j#P#o;W#o#p!#j#p~;W&U!+aPO~!#j&U!+kX%gS%jWOr;Wrs;tsw;Wwx<zx#O;W#O#P>j#P#o;W#o#p!#j#p~;W&U!,ZPO~!#j&U!,eX%gS%jWOr;Wrs;tsw;Wwx<zx#O;W#O#P>j#P#o;W#o#p!#j#p~;W<b!-]Z%p7[%jW%sp%x#tOr!!Srs)wsw!!Swx!.Ox#O!!S#O#P!2W#P#o!!S#o#p!*j#p#q!!S#q#r!#j#r~!!S:z!.ZZ%p7[%jW%sp%x#tOr!.|rsCWsw!.|wx!.Ox#O!.|#O#P!1r#P#o!.|#o#p!)x#p#q!.|#q#r!&t#r~!.|:z!/XZ%p7[%jW%sp%x#tOr!.|rsCWsw!.|wx!/zx#O!.|#O#P!1^#P#o!.|#o#p!)W#p#q!.|#q#r!&t#r~!.|:z!0VZ%p7[%jW%sp%x#tOr!.|rsCWsw!.|wx!.Ox#O!.|#O#P!0x#P#o!.|#o#p!(f#p#q!.|#q#r!&t#r~!.|:z!0}T%p7[O#o!.|#o#p!&t#p#q!.|#q#r!&t#r~!.|:z!1cT%p7[O#o!.|#o#p!&t#p#q!.|#q#r!&t#r~!.|:z!1wT%p7[O#o!.|#o#p!&t#p#q!.|#q#r!&t#r~!.|<b!2]T%p7[O#o!!S#o#p!#j#p#q!!S#q#r!#j#r~!!S<b!2qT%p7[O#o!!S#o#p!#j#p#q!!S#q#r!#j#r~!!S<r!3VT%p7[O#o$}#o#p!3f#p#q$}#q#r!3f#r~$}&f!3uX%gS%jW%m`%sp%v!b%x#tOr!3frsHOsw!3fwx!$dx#O!3f#O#P!4b#P#o!3f#o#p!4h#p~!3f&f!4ePO~!3f&f!4oX%gS%jWOr;Wrs;tsw;Wwx<zx#O;W#O#P>j#P#o;W#o#p!3f#p~;WMg!5oa%p7[%gS%jW$o1s%m`%sp%v!b%x#tOX$}XY!5[Y[$}[]!5[]p$}pq!5[qr$}rs&Rsw$}wx! Ux#O$}#O#P!6t#P#o$}#o#p!4h#p#q$}#q#r!3f#r~$}Mg!6yX%p7[OY$}YZ!5[Z]$}]^!5[^#o$}#o#p!3f#p#q$}#q#r!3f#r~$}<u!7wb%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux!_$}!_!`!9P!`#O$}#O#P!3Q#P#T$}#T#U!:V#U#f$}#f#g!:V#g#h!:V#h#o$}#o#p!4h#p#q$}#q#r!3f#r~$}<u!9dZjR%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux#O$}#O#P!3Q#P#o$}#o#p!4h#p#q$}#q#r!3f#r~$}<u!:jZ!jR%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux#O$}#O#P!3Q#P#o$}#o#p!4h#p#q$}#q#r!3f#r~$}G{!;l_%tp%p7[%gS%e,X%m`%v!bOY!<kYZ'PZ]!<k]^'P^r!<krs#(ysw!<kwx!>yx#O!<k#O#P#+Z#P#o!<k#o#p#'w#p#q!<k#q#r#%s#r~!<kDe!<z_%p7[%gS%jW%e,X%m`%v!bOY!<kYZ'PZ]!<k]^'P^r!<krs!=ysw!<kwx!>yx#O!<k#O#P#%_#P#o!<k#o#p#'w#p#q!<k#q#r#%s#r~!<kDe!>WZ%p7[%gS%e,X%m`%v!bOr'PrsLQsw'Pwx(Px#O'P#O#PNp#P#o'P#o#pKQ#p#q'P#q#rGW#r~'PDT!?S_%p7[%jW%e,XOY!@RYZ(yZ]!@R]^(y^r!@Rrs!A_sw!@Rwx# Rx#O!@R#O#P#$y#P#o!@R#o#p!Lw#p#q!@R#q#r!Bq#r~!@RDT!@`_%p7[%gS%jW%e,X%v!bOY!@RYZ(yZ]!@R]^(y^r!@Rrs!A_sw!@Rwx!>yx#O!@R#O#P!B]#P#o!@R#o#p!NP#p#q!@R#q#r!Bq#r~!@RDT!AjZ%p7[%gS%e,X%v!bOr(yrs*ssw(ywx(Px#O(y#O#P@p#P#o(y#o#p?p#p#q(y#q#r5T#r~(yDT!BbT%p7[O#o!@R#o#p!Bq#p#q!@R#q#r!Bq#r~!@R-w!B|]%gS%jW%e,X%v!bOY!BqYZ5TZ]!Bq]^5T^r!Bqrs!Cusw!Bqwx!Dkx#O!Bq#O#P!My#P#o!Bq#o#p!NP#p~!Bq-w!DOX%gS%e,X%v!bOr5Trs6msw5Twx7ax#O5T#O#P@d#P#o5T#o#p?p#p~5T-w!Dr]%jW%e,XOY!BqYZ5TZ]!Bq]^5T^r!Bqrs!Cusw!Bqwx!Ekx#O!Bq#O#P!Lq#P#o!Bq#o#p!Lw#p~!Bq-w!Er]%jW%e,XOY!BqYZ5TZ]!Bq]^5T^r!Bqrs!Cusw!Bqwx!Fkx#O!Bq#O#P!Gy#P#o!Bq#o#p!HP#p~!Bq,a!FrX%jW%e,XOY!FkYZ8sZ]!Fk]^8s^r!Fkrs!G_s#O!Fk#O#P!Gs#P~!Fk,a!GdT%e,XOr8srs9ks#O8s#O#P:Q#P~8s,a!GvPO~!Fk-w!G|PO~!Bq-w!HY]%gS%jW%e,XOY!IRYZ;WZ]!IR]^;W^r!IRrs!I}sw!IRwx!Jkx#O!IR#O#P!Lk#P#o!IR#o#p!Bq#p~!IR,e!I[Z%gS%jW%e,XOY!IRYZ;WZ]!IR]^;W^r!IRrs!I}sw!IRwx!Jkx#O!IR#O#P!Lk#P~!IR,e!JUV%gS%e,XOr;Wrs<`sw;Wwx<zx#O;W#O#P>d#P~;W,e!JrZ%jW%e,XOY!IRYZ;WZ]!IR]^;W^r!IRrs!I}sw!IRwx!Kex#O!IR#O#P!Le#P~!IR,e!KlZ%jW%e,XOY!IRYZ;WZ]!IR]^;W^r!IRrs!I}sw!IRwx!Fkx#O!IR#O#P!L_#P~!IR,e!LbPO~!IR,e!LhPO~!IR,e!LnPO~!IR-w!LtPO~!Bq-w!MQ]%gS%jW%e,XOY!IRYZ;WZ]!IR]^;W^r!IRrs!I}sw!IRwx!Jkx#O!IR#O#P!Lk#P#o!IR#o#p!Bq#p~!IR-w!M|PO~!Bq-w!NY]%gS%jW%e,XOY!IRYZ;WZ]!IR]^;W^r!IRrs!I}sw!IRwx!Jkx#O!IR#O#P!Lk#P#o!IR#o#p!Bq#p~!IRDT# [_%p7[%jW%e,XOY!@RYZ(yZ]!@R]^(y^r!@Rrs!A_sw!@Rwx#!Zx#O!@R#O#P#$e#P#o!@R#o#p!HP#p#q!@R#q#r!Bq#r~!@RBm#!d]%p7[%jW%e,XOY#!ZYZBdZ]#!Z]^Bd^r#!Zrs##]s#O#!Z#O#P#$P#P#o#!Z#o#p!Fk#p#q#!Z#q#r!Fk#r~#!ZBm##dX%p7[%e,XOrBdrsCxs#OBd#O#PEO#P#oBd#o#p8s#p#qBd#q#r8s#r~BdBm#$UT%p7[O#o#!Z#o#p!Fk#p#q#!Z#q#r!Fk#r~#!ZDT#$jT%p7[O#o!@R#o#p!Bq#p#q!@R#q#r!Bq#r~!@RDT#%OT%p7[O#o!@R#o#p!Bq#p#q!@R#q#r!Bq#r~!@RDe#%dT%p7[O#o!<k#o#p#%s#p#q!<k#q#r#%s#r~!<k.X#&Q]%gS%jW%e,X%m`%v!bOY#%sYZGWZ]#%s]^GW^r#%srs#&ysw#%swx!Dkx#O#%s#O#P#'q#P#o#%s#o#p#'w#p~#%s.X#'UX%gS%e,X%m`%v!bOrGWrsHtswGWwx7ax#OGW#O#PKt#P#oGW#o#pKQ#p~GW.X#'tPO~#%s.X#(Q]%gS%jW%e,XOY!IRYZ;WZ]!IR]^;W^r!IRrs!I}sw!IRwx!Jkx#O!IR#O#P!Lk#P#o!IR#o#p#%s#p~!IRGZ#)WZ%p7[%gS%e,X%m`%v!bOr'Prs#)ysw'Pwx(Px#O'P#O#P#*u#P#o'P#o#pKQ#p#q'P#q#rGW#r~'PGZ#*YX%k#|%p7[%gS%i,X%m`%v!bOwMOwx,ex#OMO#O#PMv#P#oMO#o#pJ`#p#qMO#q#rIj#r~MO9[#*zT%p7[O#o'P#o#pGW#p#q'P#q#rGW#r~'PDe#+`T%p7[O#o!<k#o#p#%s#p#q!<k#q#r#%s#r~!<kMg#,S_Q1s%p7[%gS%jW%m`%sp%v!b%x#tOY#+oYZ$}Z]#+o]^$}^r#+ors#-Rsw#+owx$Bmx#O#+o#O#P%/o#P#o#+o#o#p%2R#p#q#+o#q#r%0c#r~#+oJP#-`_Q1s%p7[%gS%m`%v!bOY#._YZ'PZ]#._]^'P^r#._rs$>Psw#._wx#/mx#O#._#O#P$Ay#P#o#._#o#p$<T#p#q#._#q#r$6T#r~#._JP#.n_Q1s%p7[%gS%jW%m`%v!bOY#._YZ'PZ]#._]^'P^r#._rs#-Rsw#._wx#/mx#O#._#O#P$5a#P#o#._#o#p$<T#p#q#._#q#r$6T#r~#._Io#/v_Q1s%p7[%jWOY#0uYZ(yZ]#0u]^(y^r#0urs#2Rsw#0uwx$-ex#O#0u#O#P$4m#P#o#0u#o#p$(k#p#q#0u#q#r#Eg#r~#0uIo#1S_Q1s%p7[%gS%jW%v!bOY#0uYZ(yZ]#0u]^(y^r#0urs#2Rsw#0uwx#/mx#O#0u#O#P$,q#P#o#0u#o#p$*R#p#q#0u#q#r#Eg#r~#0uIo#2^_Q1s%p7[%gS%v!bOY#0uYZ(yZ]#0u]^(y^r#0urs#3]sw#0uwx#/mx#O#0u#O#P$+}#P#o#0u#o#p$*R#p#q#0u#q#r#Eg#r~#0uIo#3h_Q1s%p7[%gS%v!bOY#0uYZ(yZ]#0u]^(y^r#0urs#4gsw#0uwx#/mx#O#0u#O#P#Ds#P#o#0u#o#p$*R#p#q#0u#q#r#Eg#r~#0uIg#4r]Q1s%p7[%gS%v!bOY#4gYZ+oZ]#4g]^+o^w#4gwx#5kx#O#4g#O#P#DP#P#o#4g#o#p#Bc#p#q#4g#q#r#9a#r~#4gIg#5r]Q1s%p7[OY#4gYZ+oZ]#4g]^+o^w#4gwx#6kx#O#4g#O#P#C]#P#o#4g#o#p#AT#p#q#4g#q#r#9a#r~#4gIg#6r]Q1s%p7[OY#4gYZ+oZ]#4g]^+o^w#4gwx#7kx#O#4g#O#P#8m#P#o#4g#o#p#<a#p#q#4g#q#r#9a#r~#4gHP#7rXQ1s%p7[OY#7kYZ-wZ]#7k]^-w^#o#7k#o#p#8_#p#q#7k#q#r#8_#r~#7k1s#8dRQ1sOY#8_Z]#8_^~#8_Ig#8tXQ1s%p7[OY#4gYZ+oZ]#4g]^+o^#o#4g#o#p#9a#p#q#4g#q#r#9a#r~#4g3Z#9jZQ1s%gS%v!bOY#9aYZ.kZ]#9a]^.k^w#9awx#:]x#O#9a#O#P#A}#P#o#9a#o#p#Bc#p~#9a3Z#:bZQ1sOY#9aYZ.kZ]#9a]^.k^w#9awx#;Tx#O#9a#O#P#@o#P#o#9a#o#p#AT#p~#9a3Z#;YZQ1sOY#9aYZ.kZ]#9a]^.k^w#9awx#8_x#O#9a#O#P#;{#P#o#9a#o#p#<a#p~#9a3Z#<QTQ1sOY#9aYZ.kZ]#9a]^.k^~#9a3Z#<hZQ1s%gSOY#=ZYZ0xZ]#=Z]^0x^w#=Zwx#=}x#O#=Z#O#P#@Z#P#o#=Z#o#p#9a#p~#=Z1w#=bXQ1s%gSOY#=ZYZ0xZ]#=Z]^0x^w#=Zwx#=}x#O#=Z#O#P#@Z#P~#=Z1w#>SXQ1sOY#=ZYZ0xZ]#=Z]^0x^w#=Zwx#>ox#O#=Z#O#P#?u#P~#=Z1w#>tXQ1sOY#=ZYZ0xZ]#=Z]^0x^w#=Zwx#8_x#O#=Z#O#P#?a#P~#=Z1w#?fTQ1sOY#=ZYZ0xZ]#=Z]^0x^~#=Z1w#?zTQ1sOY#=ZYZ0xZ]#=Z]^0x^~#=Z1w#@`TQ1sOY#=ZYZ0xZ]#=Z]^0x^~#=Z3Z#@tTQ1sOY#9aYZ.kZ]#9a]^.k^~#9a3Z#A[ZQ1s%gSOY#=ZYZ0xZ]#=Z]^0x^w#=Zwx#=}x#O#=Z#O#P#@Z#P#o#=Z#o#p#9a#p~#=Z3Z#BSTQ1sOY#9aYZ.kZ]#9a]^.k^~#9a3Z#BjZQ1s%gSOY#=ZYZ0xZ]#=Z]^0x^w#=Zwx#=}x#O#=Z#O#P#@Z#P#o#=Z#o#p#9a#p~#=ZIg#CdXQ1s%p7[OY#4gYZ+oZ]#4g]^+o^#o#4g#o#p#9a#p#q#4g#q#r#9a#r~#4gIg#DWXQ1s%p7[OY#4gYZ+oZ]#4g]^+o^#o#4g#o#p#9a#p#q#4g#q#r#9a#r~#4gIo#DzXQ1s%p7[OY#0uYZ(yZ]#0u]^(y^#o#0u#o#p#Eg#p#q#0u#q#r#Eg#r~#0u3c#Er]Q1s%gS%jW%v!bOY#EgYZ5TZ]#Eg]^5T^r#Egrs#Fksw#Egwx#Hox#O#Eg#O#P$+i#P#o#Eg#o#p$*R#p~#Eg3c#Ft]Q1s%gS%v!bOY#EgYZ5TZ]#Eg]^5T^r#Egrs#Gmsw#Egwx#Hox#O#Eg#O#P$+T#P#o#Eg#o#p$*R#p~#Eg3c#Gv]Q1s%gS%v!bOY#EgYZ5TZ]#Eg]^5T^r#Egrs#9asw#Egwx#Hox#O#Eg#O#P$)m#P#o#Eg#o#p$*R#p~#Eg3c#Hv]Q1s%jWOY#EgYZ5TZ]#Eg]^5T^r#Egrs#Fksw#Egwx#Iox#O#Eg#O#P$(V#P#o#Eg#o#p$(k#p~#Eg3c#Iv]Q1s%jWOY#EgYZ5TZ]#Eg]^5T^r#Egrs#Fksw#Egwx#Jox#O#Eg#O#P#NT#P#o#Eg#o#p#Ni#p~#Eg1{#JvXQ1s%jWOY#JoYZ8sZ]#Jo]^8s^r#Jors#Kcs#O#Jo#O#P#Mo#P~#Jo1{#KhXQ1sOY#JoYZ8sZ]#Jo]^8s^r#Jors#LTs#O#Jo#O#P#MZ#P~#Jo1{#LYXQ1sOY#JoYZ8sZ]#Jo]^8s^r#Jors#8_s#O#Jo#O#P#Lu#P~#Jo1{#LzTQ1sOY#JoYZ8sZ]#Jo]^8s^~#Jo1{#M`TQ1sOY#JoYZ8sZ]#Jo]^8s^~#Jo1{#MtTQ1sOY#JoYZ8sZ]#Jo]^8s^~#Jo3c#NYTQ1sOY#EgYZ5TZ]#Eg]^5T^~#Eg3c#Nr]Q1s%gS%jWOY$ kYZ;WZ]$ k]^;W^r$ krs$!gsw$ kwx$$Zx#O$ k#O#P$'q#P#o$ k#o#p#Eg#p~$ k2P$ tZQ1s%gS%jWOY$ kYZ;WZ]$ k]^;W^r$ krs$!gsw$ kwx$$Zx#O$ k#O#P$'q#P~$ k2P$!nZQ1s%gSOY$ kYZ;WZ]$ k]^;W^r$ krs$#asw$ kwx$$Zx#O$ k#O#P$']#P~$ k2P$#hZQ1s%gSOY$ kYZ;WZ]$ k]^;W^r$ krs#=Zsw$ kwx$$Zx#O$ k#O#P$&w#P~$ k2P$$bZQ1s%jWOY$ kYZ;WZ]$ k]^;W^r$ krs$!gsw$ kwx$%Tx#O$ k#O#P$&c#P~$ k2P$%[ZQ1s%jWOY$ kYZ;WZ]$ k]^;W^r$ krs$!gsw$ kwx#Jox#O$ k#O#P$%}#P~$ k2P$&STQ1sOY$ kYZ;WZ]$ k]^;W^~$ k2P$&hTQ1sOY$ kYZ;WZ]$ k]^;W^~$ k2P$&|TQ1sOY$ kYZ;WZ]$ k]^;W^~$ k2P$'bTQ1sOY$ kYZ;WZ]$ k]^;W^~$ k2P$'vTQ1sOY$ kYZ;WZ]$ k]^;W^~$ k3c$([TQ1sOY#EgYZ5TZ]#Eg]^5T^~#Eg3c$(t]Q1s%gS%jWOY$ kYZ;WZ]$ k]^;W^r$ krs$!gsw$ kwx$$Zx#O$ k#O#P$'q#P#o$ k#o#p#Eg#p~$ k3c$)rTQ1sOY#EgYZ5TZ]#Eg]^5T^~#Eg3c$*[]Q1s%gS%jWOY$ kYZ;WZ]$ k]^;W^r$ krs$!gsw$ kwx$$Zx#O$ k#O#P$'q#P#o$ k#o#p#Eg#p~$ k3c$+YTQ1sOY#EgYZ5TZ]#Eg]^5T^~#Eg3c$+nTQ1sOY#EgYZ5TZ]#Eg]^5T^~#EgIo$,UXQ1s%p7[OY#0uYZ(yZ]#0u]^(y^#o#0u#o#p#Eg#p#q#0u#q#r#Eg#r~#0uIo$,xXQ1s%p7[OY#0uYZ(yZ]#0u]^(y^#o#0u#o#p#Eg#p#q#0u#q#r#Eg#r~#0uIo$-n_Q1s%p7[%jWOY#0uYZ(yZ]#0u]^(y^r#0urs#2Rsw#0uwx$.mx#O#0u#O#P$3y#P#o#0u#o#p#Ni#p#q#0u#q#r#Eg#r~#0uHX$.v]Q1s%p7[%jWOY$.mYZBdZ]$.m]^Bd^r$.mrs$/os#O$.m#O#P$3V#P#o$.m#o#p#Jo#p#q$.m#q#r#Jo#r~$.mHX$/v]Q1s%p7[OY$.mYZBdZ]$.m]^Bd^r$.mrs$0os#O$.m#O#P$2c#P#o$.m#o#p#Jo#p#q$.m#q#r#Jo#r~$.mHX$0v]Q1s%p7[OY$.mYZBdZ]$.m]^Bd^r$.mrs#7ks#O$.m#O#P$1o#P#o$.m#o#p#Jo#p#q$.m#q#r#Jo#r~$.mHX$1vXQ1s%p7[OY$.mYZBdZ]$.m]^Bd^#o$.m#o#p#Jo#p#q$.m#q#r#Jo#r~$.mHX$2jXQ1s%p7[OY$.mYZBdZ]$.m]^Bd^#o$.m#o#p#Jo#p#q$.m#q#r#Jo#r~$.mHX$3^XQ1s%p7[OY$.mYZBdZ]$.m]^Bd^#o$.m#o#p#Jo#p#q$.m#q#r#Jo#r~$.mIo$4QXQ1s%p7[OY#0uYZ(yZ]#0u]^(y^#o#0u#o#p#Eg#p#q#0u#q#r#Eg#r~#0uIo$4tXQ1s%p7[OY#0uYZ(yZ]#0u]^(y^#o#0u#o#p#Eg#p#q#0u#q#r#Eg#r~#0uJP$5hXQ1s%p7[OY#._YZ'PZ]#._]^'P^#o#._#o#p$6T#p#q#._#q#r$6T#r~#._3s$6b]Q1s%gS%jW%m`%v!bOY$6TYZGWZ]$6T]^GW^r$6Trs$7Zsw$6Twx#Hox#O$6T#O#P$=k#P#o$6T#o#p$<T#p~$6T3s$7f]Q1s%gS%m`%v!bOY$6TYZGWZ]$6T]^GW^r$6Trs$8_sw$6Twx#Hox#O$6T#O#P$=V#P#o$6T#o#p$<T#p~$6T3s$8j]Q1s%gS%m`%v!bOY$6TYZGWZ]$6T]^GW^r$6Trs$9csw$6Twx#Hox#O$6T#O#P$;o#P#o$6T#o#p$<T#p~$6T3k$9nZQ1s%gS%m`%v!bOY$9cYZIjZ]$9c]^Ij^w$9cwx#:]x#O$9c#O#P$:a#P#o$9c#o#p$:u#p~$9c3k$:fTQ1sOY$9cYZIjZ]$9c]^Ij^~$9c3k$:|ZQ1s%gSOY#=ZYZ0xZ]#=Z]^0x^w#=Zwx#=}x#O#=Z#O#P#@Z#P#o#=Z#o#p$9c#p~#=Z3s$;tTQ1sOY$6TYZGWZ]$6T]^GW^~$6T3s$<^]Q1s%gS%jWOY$ kYZ;WZ]$ k]^;W^r$ krs$!gsw$ kwx$$Zx#O$ k#O#P$'q#P#o$ k#o#p$6T#p~$ k3s$=[TQ1sOY$6TYZGWZ]$6T]^GW^~$6T3s$=pTQ1sOY$6TYZGWZ]$6T]^GW^~$6TJP$>^_Q1s%p7[%gS%m`%v!bOY#._YZ'PZ]#._]^'P^r#._rs$?]sw#._wx#/mx#O#._#O#P$AV#P#o#._#o#p$<T#p#q#._#q#r$6T#r~#._Iw$?j]Q1s%p7[%gS%m`%v!bOY$?]YZMOZ]$?]]^MO^w$?]wx#5kx#O$?]#O#P$@c#P#o$?]#o#p$:u#p#q$?]#q#r$9c#r~$?]Iw$@jXQ1s%p7[OY$?]YZMOZ]$?]]^MO^#o$?]#o#p$9c#p#q$?]#q#r$9c#r~$?]JP$A^XQ1s%p7[OY#._YZ'PZ]#._]^'P^#o#._#o#p$6T#p#q#._#q#r$6T#r~#._JP$BQXQ1s%p7[OY#._YZ'PZ]#._]^'P^#o#._#o#p$6T#p#q#._#q#r$6T#r~#._MV$Bz_Q1s%p7[%jW%sp%x#tOY$CyYZ!!SZ]$Cy]^!!S^r$Cyrs#2Rsw$Cywx%&{x#O$Cy#O#P%.{#P#o$Cy#o#p%$c#p#q$Cy#q#r$E}#r~$CyMV$D[_Q1s%p7[%gS%jW%sp%v!b%x#tOY$CyYZ!!SZ]$Cy]^!!S^r$Cyrs#2Rsw$Cywx$Bmx#O$Cy#O#P$EZ#P#o$Cy#o#p%%y#p#q$Cy#q#r$E}#r~$CyMV$EbXQ1s%p7[OY$CyYZ!!SZ]$Cy]^!!S^#o$Cy#o#p$E}#p#q$Cy#q#r$E}#r~$Cy6y$F^]Q1s%gS%jW%sp%v!b%x#tOY$E}YZ!#jZ]$E}]^!#j^r$E}rs#Fksw$E}wx$GVx#O$E}#O#P%%e#P#o$E}#o#p%%y#p~$E}6y$Gb]Q1s%jW%sp%x#tOY$E}YZ!#jZ]$E}]^!#j^r$E}rs#Fksw$E}wx$HZx#O$E}#O#P%#}#P#o$E}#o#p%$c#p~$E}6y$Hf]Q1s%jW%sp%x#tOY$E}YZ!#jZ]$E}]^!#j^r$E}rs#Fksw$E}wx$I_x#O$E}#O#P%!g#P#o$E}#o#p%!{#p~$E}5c$Ij]Q1s%jW%sp%x#tOY$JcYZ!&tZ]$Jc]^!&t^r$Jcrs#Kcsw$Jcwx$I_x#O$Jc#O#P% X#P#o$Jc#o#p% m#p~$Jc5c$Jn]Q1s%jW%sp%x#tOY$JcYZ!&tZ]$Jc]^!&t^r$Jcrs#Kcsw$Jcwx$Kgx#O$Jc#O#P$My#P#o$Jc#o#p$N_#p~$Jc5c$Kr]Q1s%jW%sp%x#tOY$JcYZ!&tZ]$Jc]^!&t^r$Jcrs#Kcsw$Jcwx$I_x#O$Jc#O#P$Lk#P#o$Jc#o#p$MP#p~$Jc5c$LpTQ1sOY$JcYZ!&tZ]$Jc]^!&t^~$Jc5c$MWZQ1s%jWOY#JoYZ8sZ]#Jo]^8s^r#Jors#Kcs#O#Jo#O#P#Mo#P#o#Jo#o#p$Jc#p~#Jo5c$NOTQ1sOY$JcYZ!&tZ]$Jc]^!&t^~$Jc5c$NfZQ1s%jWOY#JoYZ8sZ]#Jo]^8s^r#Jors#Kcs#O#Jo#O#P#Mo#P#o#Jo#o#p$Jc#p~#Jo5c% ^TQ1sOY$JcYZ!&tZ]$Jc]^!&t^~$Jc5c% tZQ1s%jWOY#JoYZ8sZ]#Jo]^8s^r#Jors#Kcs#O#Jo#O#P#Mo#P#o#Jo#o#p$Jc#p~#Jo6y%!lTQ1sOY$E}YZ!#jZ]$E}]^!#j^~$E}6y%#U]Q1s%gS%jWOY$ kYZ;WZ]$ k]^;W^r$ krs$!gsw$ kwx$$Zx#O$ k#O#P$'q#P#o$ k#o#p$E}#p~$ k6y%$STQ1sOY$E}YZ!#jZ]$E}]^!#j^~$E}6y%$l]Q1s%gS%jWOY$ kYZ;WZ]$ k]^;W^r$ krs$!gsw$ kwx$$Zx#O$ k#O#P$'q#P#o$ k#o#p$E}#p~$ k6y%%jTQ1sOY$E}YZ!#jZ]$E}]^!#j^~$E}6y%&S]Q1s%gS%jWOY$ kYZ;WZ]$ k]^;W^r$ krs$!gsw$ kwx$$Zx#O$ k#O#P$'q#P#o$ k#o#p$E}#p~$ kMV%'Y_Q1s%p7[%jW%sp%x#tOY$CyYZ!!SZ]$Cy]^!!S^r$Cyrs#2Rsw$Cywx%(Xx#O$Cy#O#P%.X#P#o$Cy#o#p%!{#p#q$Cy#q#r$E}#r~$CyKo%(f_Q1s%p7[%jW%sp%x#tOY%)eYZ!.|Z]%)e]^!.|^r%)ers$/osw%)ewx%(Xx#O%)e#O#P%-e#P#o%)e#o#p% m#p#q%)e#q#r$Jc#r~%)eKo%)r_Q1s%p7[%jW%sp%x#tOY%)eYZ!.|Z]%)e]^!.|^r%)ers$/osw%)ewx%*qx#O%)e#O#P%,q#P#o%)e#o#p$N_#p#q%)e#q#r$Jc#r~%)eKo%+O_Q1s%p7[%jW%sp%x#tOY%)eYZ!.|Z]%)e]^!.|^r%)ers$/osw%)ewx%(Xx#O%)e#O#P%+}#P#o%)e#o#p$MP#p#q%)e#q#r$Jc#r~%)eKo%,UXQ1s%p7[OY%)eYZ!.|Z]%)e]^!.|^#o%)e#o#p$Jc#p#q%)e#q#r$Jc#r~%)eKo%,xXQ1s%p7[OY%)eYZ!.|Z]%)e]^!.|^#o%)e#o#p$Jc#p#q%)e#q#r$Jc#r~%)eKo%-lXQ1s%p7[OY%)eYZ!.|Z]%)e]^!.|^#o%)e#o#p$Jc#p#q%)e#q#r$Jc#r~%)eMV%.`XQ1s%p7[OY$CyYZ!!SZ]$Cy]^!!S^#o$Cy#o#p$E}#p#q$Cy#q#r$E}#r~$CyMV%/SXQ1s%p7[OY$CyYZ!!SZ]$Cy]^!!S^#o$Cy#o#p$E}#p#q$Cy#q#r$E}#r~$CyMg%/vXQ1s%p7[OY#+oYZ$}Z]#+o]^$}^#o#+o#o#p%0c#p#q#+o#q#r%0c#r~#+o7Z%0t]Q1s%gS%jW%m`%sp%v!b%x#tOY%0cYZ!3fZ]%0c]^!3f^r%0crs$7Zsw%0cwx$GVx#O%0c#O#P%1m#P#o%0c#o#p%2R#p~%0c7Z%1rTQ1sOY%0cYZ!3fZ]%0c]^!3f^~%0c7Z%2[]Q1s%gS%jWOY$ kYZ;WZ]$ k]^;W^r$ krs$!gsw$ kwx$$Zx#O$ k#O#P$'q#P#o$ k#o#p%0c#p~$ kGz%3h]$}Q%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux!_$}!_!`%4a!`#O$}#O#P!3Q#P#o$}#o#p!4h#p#q$}#q#r!3f#r~$}Gz%4tZ!s,W%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux#O$}#O#P!3Q#P#o$}#o#p!4h#p#q$}#q#r!3f#r~$}Gz%5z]$wQ%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux!_$}!_!`%4a!`#O$}#O#P!3Q#P#o$}#o#p!4h#p#q$}#q#r!3f#r~$}G{%7S_%q`%p7[%jW%e,X%sp%x#tOY%8RYZ!!SZ]%8R]^!!S^r%8Rrs%9csw%8Rwx&$}x#O%8R#O#P&(X#P#o%8R#o#p&(m#p#q%8R#q#r& u#r~%8RGk%8d_%p7[%gS%jW%e,X%sp%v!b%x#tOY%8RYZ!!SZ]%8R]^!!S^r%8Rrs%9csw%8Rwx%Nax#O%8R#O#P& a#P#o%8R#o#p&#{#p#q%8R#q#r& u#r~%8RDT%9n_%p7[%gS%e,X%v!bOY%:mYZ(yZ]%:m]^(y^r%:mrs%JPsw%:mwx%;yx#O%:m#O#P%M{#P#o%:m#o#p%ER#p#q%:m#q#r%=Z#r~%:mDT%:z_%p7[%gS%jW%e,X%v!bOY%:mYZ(yZ]%:m]^(y^r%:mrs%9csw%:mwx%;yx#O%:m#O#P%<u#P#o%:m#o#p%ER#p#q%:m#q#r%=Z#r~%:mDT%<SZ%p7[%jW%e,XOr(yrs)wsw(ywxAjx#O(y#O#PF^#P#o(y#o#p>v#p#q(y#q#r5T#r~(yDT%<zT%p7[O#o%:m#o#p%=Z#p#q%:m#q#r%=Z#r~%:m-w%=f]%gS%jW%e,X%v!bOY%=ZYZ5TZ]%=Z]^5T^r%=Zrs%>_sw%=Zwx%DXx#O%=Z#O#P%Iy#P#o%=Z#o#p%ER#p~%=Z-w%>h]%gS%e,X%v!bOY%=ZYZ5TZ]%=Z]^5T^r%=Zrs%?asw%=Zwx%DXx#O%=Z#O#P%Is#P#o%=Z#o#p%ER#p~%=Z-w%?j]%gS%e,X%v!bOY%=ZYZ5TZ]%=Z]^5T^r%=Zrs%@csw%=Zwx%DXx#O%=Z#O#P%D{#P#o%=Z#o#p%ER#p~%=Z-o%@lZ%gS%e,X%v!bOY%@cYZ.kZ]%@c]^.k^w%@cwx%A_x#O%@c#O#P%Ay#P#o%@c#o#p%BP#p~%@c-o%AdV%e,XOw.kwx/qx#O.k#O#P2c#P#o.k#o#p2i#p~.k-o%A|PO~%@c-o%BWZ%gS%e,XOY%ByYZ0xZ]%By]^0x^w%Bywx%Cmx#O%By#O#P%DR#P#o%By#o#p%@c#p~%By,]%CQX%gS%e,XOY%ByYZ0xZ]%By]^0x^w%Bywx%Cmx#O%By#O#P%DR#P~%By,]%CrT%e,XOw0xwx1px#O0x#O#P2V#P~0x,]%DUPO~%By-w%D`X%jW%e,XOr5Trs5ysw5Twx8Rx#O5T#O#P>p#P#o5T#o#p>v#p~5T-w%EOPO~%=Z-w%E[]%gS%jW%e,XOY%FTYZ;WZ]%FT]^;W^r%FTrs%GPsw%FTwx%Hsx#O%FT#O#P%Im#P#o%FT#o#p%=Z#p~%FT,e%F^Z%gS%jW%e,XOY%FTYZ;WZ]%FT]^;W^r%FTrs%GPsw%FTwx%Hsx#O%FT#O#P%Im#P~%FT,e%GWZ%gS%e,XOY%FTYZ;WZ]%FT]^;W^r%FTrs%Gysw%FTwx%Hsx#O%FT#O#P%Ig#P~%FT,e%HQZ%gS%e,XOY%FTYZ;WZ]%FT]^;W^r%FTrs%Bysw%FTwx%Hsx#O%FT#O#P%Ia#P~%FT,e%HzV%jW%e,XOr;Wrs;tsw;Wwx=fx#O;W#O#P>W#P~;W,e%IdPO~%FT,e%IjPO~%FT,e%IpPO~%FT-w%IvPO~%=Z-w%I|PO~%=ZDT%J[_%p7[%gS%e,X%v!bOY%:mYZ(yZ]%:m]^(y^r%:mrs%KZsw%:mwx%;yx#O%:m#O#P%Mg#P#o%:m#o#p%ER#p#q%:m#q#r%=Z#r~%:mC{%Kf]%p7[%gS%e,X%v!bOY%KZYZ+oZ]%KZ]^+o^w%KZwx%L_x#O%KZ#O#P%MR#P#o%KZ#o#p%BP#p#q%KZ#q#r%@c#r~%KZC{%LfX%p7[%e,XOw+owx-Vx#O+o#O#P3u#P#o+o#o#p2i#p#q+o#q#r.k#r~+oC{%MWT%p7[O#o%KZ#o#p%@c#p#q%KZ#q#r%@c#r~%KZDT%MlT%p7[O#o%:m#o#p%=Z#p#q%:m#q#r%=Z#r~%:mDT%NQT%p7[O#o%:m#o#p%=Z#p#q%:m#q#r%=Z#r~%:mGk%NnZ%p7[%jW%e,X%sp%x#tOr!!Srs)wsw!!Swx!-Qx#O!!S#O#P!2l#P#o!!S#o#p!+d#p#q!!S#q#r!#j#r~!!SGk& fT%p7[O#o%8R#o#p& u#p#q%8R#q#r& u#r~%8R1_&!U]%gS%jW%e,X%sp%v!b%x#tOY& uYZ!#jZ]& u]^!#j^r& urs%>_sw& uwx&!}x#O& u#O#P&#u#P#o& u#o#p&#{#p~& u1_&#YX%jW%e,X%sp%x#tOr!#jrs5ysw!#jwx!%Yx#O!#j#O#P!+^#P#o!#j#o#p!+d#p~!#j1_&#xPO~& u1_&$U]%gS%jW%e,XOY%FTYZ;WZ]%FT]^;W^r%FTrs%GPsw%FTwx%Hsx#O%FT#O#P%Im#P#o%FT#o#p& u#p~%FTGk&%[Z%p7[%jW%e,X%sp%x#tOr!!Srs)wsw!!Swx&%}x#O!!S#O#P&'P#P#o!!S#o#p&'e#p#q!!S#q#r!#j#r~!!SGk&&^Z%h!f%p7[%jW%f,X%sp%x#tOr!.|rsCWsw!.|wx!.Ox#O!.|#O#P!1r#P#o!.|#o#p!)x#p#q!.|#q#r!&t#r~!.|<b&'UT%p7[O#o!!S#o#p!#j#p#q!!S#q#r!#j#r~!!S&U&'lX%gS%jWOr;Wrs;tsw;Wwx<zx#O;W#O#P>j#P#o;W#o#p!#j#p~;WGk&(^T%p7[O#o%8R#o#p& u#p#q%8R#q#r& u#r~%8R1_&(v]%gS%jW%e,XOY%FTYZ;WZ]%FT]^;W^r%FTrs%GPsw%FTwx%Hsx#O%FT#O#P%Im#P#o%FT#o#p& u#p~%FTG{&*SZf,X%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux#O$}#O#P!3Q#P#o$}#o#p!4h#p#q$}#q#r!3f#r~$}<u&+YZ!OR%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux#O$}#O#P!3Q#P#o$}#o#p!4h#p#q$}#q#r!3f#r~$}G{&,`_T,X%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Uxz$}z{&-_{!_$}!_!`%4a!`#O$}#O#P!3Q#P#o$}#o#p!4h#p#q$}#q#r!3f#r~$}G{&-r]_R%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux!_$}!_!`%4a!`#O$}#O#P!3Q#P#o$}#o#p!4h#p#q$}#q#r!3f#r~$}G{&/O]$z,X%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux!_$}!_!`%4a!`#O$}#O#P!3Q#P#o$}#o#p!4h#p#q$}#q#r!3f#r~$}<u&0[ZwR%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux#O$}#O#P!3Q#P#o$}#o#p!4h#p#q$}#q#r!3f#r~$}Mg&1b^${,X%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux!_$}!_!`%4a!`!a&2^!a#O$}#O#P!3Q#P#o$}#o#p!4h#p#q$}#q#r!3f#r~$}B^&2qZ&S&j%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux#O$}#O#P!3Q#P#o$}#o#p!4h#p#q$}#q#r!3f#r~$}G{&3w_!dQ%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux!O$}!O!P&4v!P!Q$}!Q![&7W![#O$}#O#P!3Q#P#o$}#o#p!4h#p#q$}#q#r!3f#r~$}G{&5X]%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux!O$}!O!P&6Q!P#O$}#O#P!3Q#P#o$}#o#p!4h#p#q$}#q#r!3f#r~$}G{&6eZ!m,X%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux#O$}#O#P!3Q#P#o$}#o#p!4h#p#q$}#q#r!3f#r~$}Gy&7kg!f,V%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux!Q$}!Q![&7W![!g$}!g!h&9S!h!l$}!l!m&=d!m#O$}#O#P!3Q#P#R$}#R#S&7W#S#X$}#X#Y&9S#Y#^$}#^#_&=d#_#o$}#o#p!4h#p#q$}#q#r!3f#r~$}Gy&9ea%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux{$}{|&:j|}$}}!O&:j!O!Q$}!Q![&;t![#O$}#O#P!3Q#P#o$}#o#p!4h#p#q$}#q#r!3f#r~$}Gy&:{]%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux!Q$}!Q![&;t![#O$}#O#P!3Q#P#o$}#o#p!4h#p#q$}#q#r!3f#r~$}Gy&<Xc!f,V%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux!Q$}!Q![&;t![!l$}!l!m&=d!m#O$}#O#P!3Q#P#R$}#R#S&;t#S#^$}#^#_&=d#_#o$}#o#p!4h#p#q$}#q#r!3f#r~$}Gy&=wZ!f,V%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux#O$}#O#P!3Q#P#o$}#o#p!4h#p#q$}#q#r!3f#r~$}G{&>}_$|R%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux!P$}!P!Q&?|!Q!_$}!_!`%4a!`#O$}#O#P!3Q#P#o$}#o#p!4h#p#q$}#q#r!3f#r~$}Gz&@a]%OQ%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux!_$}!_!`%4a!`#O$}#O#P!3Q#P#o$}#o#p!4h#p#q$}#q#r!3f#r~$}Gy&Amu!f,V%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux!O$}!O!P&DQ!P!Q$}!Q![&GW![!d$}!d!e&IY!e!g$}!g!h&9S!h!l$}!l!m&=d!m!q$}!q!r&LS!r!z$}!z!{&Nv!{#O$}#O#P!3Q#P#R$}#R#S&GW#S#U$}#U#V&IY#V#X$}#X#Y&9S#Y#^$}#^#_&=d#_#c$}#c#d&LS#d#l$}#l#m&Nv#m#o$}#o#p!4h#p#q$}#q#r!3f#r~$}Gy&Dc]%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux!Q$}!Q![&E[![#O$}#O#P!3Q#P#o$}#o#p!4h#p#q$}#q#r!3f#r~$}Gy&Eog!f,V%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux!Q$}!Q![&E[![!g$}!g!h&9S!h!l$}!l!m&=d!m#O$}#O#P!3Q#P#R$}#R#S&E[#S#X$}#X#Y&9S#Y#^$}#^#_&=d#_#o$}#o#p!4h#p#q$}#q#r!3f#r~$}Gy&Gki!f,V%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux!O$}!O!P&DQ!P!Q$}!Q![&GW![!g$}!g!h&9S!h!l$}!l!m&=d!m#O$}#O#P!3Q#P#R$}#R#S&GW#S#X$}#X#Y&9S#Y#^$}#^#_&=d#_#o$}#o#p!4h#p#q$}#q#r!3f#r~$}Gy&Ik`%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux!Q$}!Q!R&Jm!R!S&Jm!S#O$}#O#P!3Q#P#R$}#R#S&Jm#S#o$}#o#p!4h#p#q$}#q#r!3f#r~$}Gy&KQ`!f,V%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux!Q$}!Q!R&Jm!R!S&Jm!S#O$}#O#P!3Q#P#R$}#R#S&Jm#S#o$}#o#p!4h#p#q$}#q#r!3f#r~$}Gy&Le_%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux!Q$}!Q!Y&Md!Y#O$}#O#P!3Q#P#R$}#R#S&Md#S#o$}#o#p!4h#p#q$}#q#r!3f#r~$}Gy&Mw_!f,V%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux!Q$}!Q!Y&Md!Y#O$}#O#P!3Q#P#R$}#R#S&Md#S#o$}#o#p!4h#p#q$}#q#r!3f#r~$}Gy' Xc%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux!Q$}!Q!['!d![!c$}!c!i'!d!i#O$}#O#P!3Q#P#R$}#R#S'!d#S#T$}#T#Z'!d#Z#o$}#o#p!4h#p#q$}#q#r!3f#r~$}Gy'!wc!f,V%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux!Q$}!Q!['!d![!c$}!c!i'!d!i#O$}#O#P!3Q#P#R$}#R#S'!d#S#T$}#T#Z'!d#Z#o$}#o#p!4h#p#q$}#q#r!3f#r~$}Mg'$g]x1s%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux!_$}!_!`'%`!`#O$}#O#P!3Q#P#o$}#o#p!4h#p#q$}#q#r!3f#r~$}<u'%sZ%WR%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux#O$}#O#P!3Q#P#o$}#o#p!4h#p#q$}#q#r!3f#r~$}G{'&yZ#^,X%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux#O$}#O#P!3Q#P#o$}#o#p!4h#p#q$}#q#r!3f#r~$}G{'(P_jR%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux!^$}!^!_')O!_!`!9P!`!a!9P!a#O$}#O#P!3Q#P#o$}#o#p!4h#p#q$}#q#r!3f#r~$}Gz')c]$xQ%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux!_$}!_!`%4a!`#O$}#O#P!3Q#P#o$}#o#p!4h#p#q$}#q#r!3f#r~$}G{'*o]%V,X%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux!_$}!_!`!9P!`#O$}#O#P!3Q#P#o$}#o#p!4h#p#q$}#q#r!3f#r~$}G{'+{^jR%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux!_$}!_!`!9P!`!a',w!a#O$}#O#P!3Q#P#o$}#o#p!4h#p#q$}#q#r!3f#r~$}Gz'-[]$yQ%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux!_$}!_!`%4a!`#O$}#O#P!3Q#P#o$}#o#p!4h#p#q$}#q#r!3f#r~$}G{'.j]]Q#tP%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux!_$}!_!`%4a!`#O$}#O#P!3Q#P#o$}#o#p!4h#p#q$}#q#r!3f#r~$}Mg'/xc%p7[%gS%jW%d&j%m`%sp%v!b%x#t%Q,XOr$}rs&Rsw$}wx! Ux!Q$}!Q!['/c![!c$}!c!}'/c!}#O$}#O#P!3Q#P#R$}#R#S'/c#S#T$}#T#o'/c#o#p!4h#p#q$}#q#r!3f#r$g$}$g~'/cMg'1jg%p7[%gS%jW%d&j%m`%sp%v!b%x#t%Q,XOr$}rs'3Rsw$}wx'6mx!Q$}!Q!['/c![!c$}!c!t'/c!t!u';a!u!}'/c!}#O$}#O#P!3Q#P#R$}#R#S'/c#S#T$}#T#f'/c#f#g';a#g#o'/c#o#p!4h#p#q$}#q#r!3f#r$g$}$g~'/cDe'3`_%p7[%gS%e,X%m`%v!bOY!<kYZ'PZ]!<k]^'P^r!<krs'4_sw!<kwx!>yx#O!<k#O#P'6X#P#o!<k#o#p#'w#p#q!<k#q#r#%s#r~!<kDe'4lZ%p7[%gS%e,X%m`%v!bOr'Prs'5_sw'Pwx(Px#O'P#O#PN[#P#o'P#o#pKQ#p#q'P#q#rGW#r~'PD]'5lX%p7[%gS%i,X%m`%v!bOwMOwx,ex#OMO#O#PMv#P#oMO#o#pJ`#p#qMO#q#rIj#r~MODe'6^T%p7[O#o!<k#o#p#%s#p#q!<k#q#r#%s#r~!<kGk'6z_%p7[%jW%e,X%sp%x#tOY%8RYZ!!SZ]%8R]^!!S^r%8Rrs%9csw%8Rwx'7yx#O%8R#O#P'9y#P#o%8R#o#p':_#p#q%8R#q#r& u#r~%8RGk'8WZ%p7[%jW%e,X%sp%x#tOr!!Srs)wsw!!Swx'8yx#O!!S#O#P!2W#P#o!!S#o#p!*j#p#q!!S#q#r!#j#r~!!SFT'9WZ%p7[%jW%f,X%sp%x#tOr!.|rsCWsw!.|wx!.Ox#O!.|#O#P!1r#P#o!.|#o#p!)x#p#q!.|#q#r!&t#r~!.|Gk':OT%p7[O#o%8R#o#p& u#p#q%8R#q#r& u#r~%8R1_':h]%gS%jW%e,XOY%FTYZ;WZ]%FT]^;W^r%FTrs%GPsw%FTwx%Hsx#O%FT#O#P%Im#P#o%FT#o#p& u#p~%FTMg';vc%p7[%gS%jW%d&j%m`%sp%v!b%x#t%Q,XOr$}rs'3Rsw$}wx'6mx!Q$}!Q!['/c![!c$}!c!}'/c!}#O$}#O#P!3Q#P#R$}#R#S'/c#S#T$}#T#o'/c#o#p!4h#p#q$}#q#r!3f#r$g$}$g~'/cMg'=hg%p7[%gS%jW%d&j%m`%sp%v!b%x#t%Q,XOr$}rs'?Psw$}wx'Awx!Q$}!Q!['/c![!c$}!c!t'/c!t!u'Du!u!}'/c!}#O$}#O#P!3Q#P#R$}#R#S'/c#S#T$}#T#f'/c#f#g'Du#g#o'/c#o#p!4h#p#q$}#q#r!3f#r$g$}$g~'/cDe'?^Z%p7[%gS%m`%v!b%r,XOr'Prs'@Psw'Pwx(Px#O'P#O#PNp#P#o'P#o#pKQ#p#q'P#q#rGW#r~'PDe'@[Z%p7[%gS%m`%v!bOr'Prs'@}sw'Pwx(Px#O'P#O#PN[#P#o'P#o#pKQ#p#q'P#q#rGW#r~'PD]'A[X%p7[%gS%w,X%m`%v!bOwMOwx,ex#OMO#O#PMv#P#oMO#o#pJ`#p#qMO#q#rIj#r~MOGk'BUZ%p7[%jW%sp%x#t%l,XOr!!Srs)wsw!!Swx'Bwx#O!!S#O#P!2l#P#o!!S#o#p!+d#p#q!!S#q#r!#j#r~!!SGk'CSZ%p7[%jW%sp%x#tOr!!Srs)wsw!!Swx'Cux#O!!S#O#P!2W#P#o!!S#o#p!*j#p#q!!S#q#r!#j#r~!!SFT'DSZ%p7[%jW%u,X%sp%x#tOr!.|rsCWsw!.|wx!.Ox#O!.|#O#P!1r#P#o!.|#o#p!)x#p#q!.|#q#r!&t#r~!.|Mg'E[c%p7[%gS%jW%d&j%m`%sp%v!b%x#t%Q,XOr$}rs'?Psw$}wx'Awx!Q$}!Q!['/c![!c$}!c!}'/c!}#O$}#O#P!3Q#P#R$}#R#S'/c#S#T$}#T#o'/c#o#p!4h#p#q$}#q#r!3f#r$g$}$g~'/cMg'F|k%p7[%gS%jW%d&j%m`%sp%v!b%x#t%Q,XOr$}rs'3Rsw$}wx'6mx!Q$}!Q!['/c![!c$}!c!h'/c!h!i'Du!i!t'/c!t!u';a!u!}'/c!}#O$}#O#P!3Q#P#R$}#R#S'/c#S#T$}#T#U'/c#U#V';a#V#Y'/c#Y#Z'Du#Z#o'/c#o#p!4h#p#q$}#q#r!3f#r$g$}$g~'/cG{'IUZ!V,X%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux#O$}#O#P!3Q#P#o$}#o#p!4h#p#q$}#q#r!3f#r~$}Mg'I|X%p7[OY$}YZ!5[Z]$}]^!5[^#o$}#o#p!3f#p#q$}#q#r!3f#r~$}<u'J|Z!WR%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux#O$}#O#P!3Q#P#o$}#o#p!4h#p#q$}#q#r!3f#r~$}Gz'LS]$vQ%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux!_$}!_!`%4a!`#O$}#O#P!3Q#P#o$}#o#p!4h#p#q$}#q#r!3f#r~$}Gy'MUX%gS%jW!ZGmOr;Wrs;tsw;Wwx<zx#O;W#O#P>j#P#o;W#o#p!3f#p~;WGz'NU]$uQ%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux!_$}!_!`%4a!`#O$}#O#P!3Q#P#o$}#o#p!4h#p#q$}#q#r!3f#r~$}<u( `X![7_%gS%jW%m`%sp%v!b%x#tOr!3frsHOsw!3fwx!$dx#O!3f#O#P!4b#P#o!3f#o#p!4h#p~!3fGy(!`Z%P,V%p7[%gS%jW%m`%sp%v!b%x#tOr$}rs&Rsw$}wx! Ux#O$}#O#P!3Q#P#o$}#o#p!4h#p#q$}#q#r!3f#r~$}",
            tokenizers: [Xp, vp, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, yp],
            topRules: {
                Script: [0, 3]
            },
            specialized: [{
                term: 186,
                get: e => Tp[e] || -1
            }],
            tokenPrec: 6594
        }),
        Wp = ea.define({
            parser: Rp.configure({
                props: [Qa.add({
                    Body: va()
                }), Sa.add({
                    "Body ArrayExpression DictionaryExpression": _a
                }), ks({
                    "async '*' '**' FormatConversion": Fs.modifier,
                    "for while if elif else try except finally return raise break continue with pass assert await yield": Fs.controlKeyword,
                    "in not and or is del": Fs.operatorKeyword,
                    "import from def class global nonlocal lambda": Fs.definitionKeyword,
                    "with as print": Fs.keyword,
                    self: Fs.self,
                    Boolean: Fs.bool,
                    None: Fs.null,
                    VariableName: Fs.variableName,
                    "CallExpression/VariableName": Fs.function(Fs.variableName),
                    "FunctionDefinition/VariableName": Fs.function(Fs.definition(Fs.variableName)),
                    "ClassDefinition/VariableName": Fs.definition(Fs.className),
                    PropertyName: Fs.propertyName,
                    "CallExpression/MemberExpression/ProperyName": Fs.function(Fs.propertyName),
                    Comment: Fs.lineComment,
                    Number: Fs.number,
                    String: Fs.string,
                    FormatString: Fs.special(Fs.string),
                    UpdateOp: Fs.updateOperator,
                    ArithOp: Fs.arithmeticOperator,
                    BitOp: Fs.bitwiseOperator,
                    CompareOp: Fs.compareOperator,
                    AssignOp: Fs.definitionOperator,
                    Ellipsis: Fs.punctuation,
                    At: Fs.meta,
                    "( )": Fs.paren,
                    "[ ]": Fs.squareBracket,
                    "{ }": Fs.brace,
                    ".": Fs.derefOperator,
                    ", ;": Fs.separator
                })]
            }),
            languageData: {
                closeBrackets: {
                    brackets: ["(", "[", "{", "'", '"', "'''", '"""']
                },
                commentTokens: {
                    line: "#"
                },
                indentOnInput: /^\s*[\}\]\)]$/
            }
        });
    var qp = Object.freeze({
        __proto__: null,
        python: function() {
            return new ca(Wp)
        },
        pythonLanguage: Wp
    });

    function Yp(e) {
        return e >= 48 && e <= 57
    }

    function zp(e) {
        return Yp(e) || 95 == e
    }
    const Zp = new Pl(((e, t, n) => {
            let r = t.start,
                i = e.get(r);
            if (Yp(i)) {
                let n = !1;
                do {
                    i = e.get(++r)
                } while (zp(i));
                if (46 == i)
                    if (n = !0, i = e.get(++r), Yp(i))
                        do {
                            i = e.get(++r)
                        } while (zp(i));
                    else if (46 == i || i > 127 || /\w/.test(String.fromCharCode(i))) return;
                if (101 == i || 69 == i) {
                    n = !0, i = e.get(++r), 43 != i && 45 != i || (i = e.get(++r));
                    let t = r;
                    for (; zp(i);) i = e.get(++r);
                    if (r == t) return
                }
                if (102 == i) {
                    if (!/32|64/.test(e.read(r + 1, r + 3))) return;
                    n = !0, r += 3
                }
                n && t.accept(5, r)
            } else if (98 == i || 114 == i) {
                if (98 == i && (i = e.get(++r)), 114 != i) return;
                i = e.get(++r);
                let n = 0;
                for (; 35 == i;) n++, i = e.get(++r);
                if (34 != i) return;
                i = e.get(++r);
                e: for (;;) {
                    if (i < 0) return;
                    let a = 34 == i;
                    if (i = e.get(++r), a) {
                        for (let t = 0; t < n; t++) {
                            if (35 != i) continue e;
                            i = e.get(++r)
                        }
                        return void t.accept(4, r)
                    }
                }
            }
        })),
        Ep = new Pl(((e, t) => {
            124 == e.get(t.start) && t.accept(1, t.start + 1)
        })),
        Ip = new Pl(((e, t) => {
            let n = t.start,
                r = e.get(n);
            60 == r ? t.accept(2, n + 1) : 62 == r && t.accept(3, n + 1)
        })),
        Up = {
            __proto__: null,
            self: 28,
            super: 32,
            crate: 34,
            impl: 46,
            true: 72,
            false: 72,
            pub: 88,
            in: 92,
            const: 96,
            unsafe: 104,
            async: 108,
            move: 110,
            if: 114,
            let: 118,
            ref: 142,
            mut: 144,
            _: 198,
            else: 200,
            match: 204,
            as: 248,
            return: 252,
            await: 262,
            break: 270,
            continue: 276,
            while: 312,
            loop: 316,
            for: 320,
            macro_rules: 327,
            mod: 334,
            extern: 342,
            struct: 346,
            where: 364,
            union: 379,
            enum: 382,
            type: 390,
            default: 395,
            fn: 396,
            trait: 412,
            use: 420,
            static: 438,
            dyn: 476
        },
        Vp = El.deserialize({
            version: 13,
            states: "$3tQ]Q_OOP$wOWOOO&sQWO'#CnO)WQWO'#IaOOQP'#Ia'#IaOOQQ'#If'#IfO)hO`O'#C}OOQR'#Ii'#IiO)sQWO'#IvOOQO'#Hk'#HkO)xQWO'#DpOOQR'#Ix'#IxO)xQWO'#DpO*ZQWO'#DpOOQO'#Iw'#IwO,SQWO'#J`O,ZQWO'#EiOOQV'#Hp'#HpO,cQYO'#F{OOQV'#El'#ElOOQV'#Em'#EmOOQV'#En'#EnO.YQ_O'#EkO0_Q_O'#EoO2gQWOOO4QQ_O'#FPO7hQWO'#J`OOQV'#FY'#FYO7{Q_O'#F^O:WQ_O'#FaOOQO'#F`'#F`O=sQ_O'#FcO=}Q_O'#FbO@VQWO'#FgOOQO'#J`'#J`OOQV'#Ip'#IpOA]Q_O'#IoOEPQWO'#IoOOQV'#Fw'#FwOF[QWO'#JuOFcQWO'#F|OOQO'#IO'#IOOGrQWO'#GhOOQV'#In'#InOOQV'#Im'#ImOOQV'#Hj'#HjQGyQ_OOOKeQ_O'#DUOKlQYO'#CqOOQP'#I`'#I`OOQV'#Hg'#HgQ]Q_OOOLuQWO'#IaONsQYO'#DXO!!eQWO'#JuO!!lQWO'#JuO!!vQ_O'#DfO!%]Q_O'#E}O!(sQ_O'#FWO!,ZQWO'#FZO!.^QXO'#FbO!.cQ_O'#EeO!!vQ_O'#FmO!0uQWO'#FoO!0zQWO'#FoO!1PQ^O'#FqO!1WQWO'#JuO!1_QWO'#FtO!1dQWO'#FxO!2WQWO'#JjO!2_QWO'#GOO!2_QWO'#G`O!2_QWO'#GbO!2_QWO'#GsOOQO'#Ju'#JuO!2dQWO'#GhO!2lQYO'#GpO!2_QWO'#GqO!3uQ^O'#GtO!3|QWO'#GuO!4hQWO'#HOP!4sOpO'#CcPOOO)CDO)CDOOOOO'#Hi'#HiO!5OO`O,59iOOQV,59i,59iO!5ZQYO,5?bOOQO-E;i-E;iOOQO,5:[,5:[OOQP,59Z,59ZO)xQWO,5:[O)xQWO,5:[O!5oQWO,5?lO!5zQYO,5;qO!6PQYO,5;TO!6hQWO,59QO!7kQXO'#CnO!7rQXO'#IaO!8vQWO'#CoO,^QWO'#EiOOQV-E;n-E;nO!9XQWO'#FsOOQV,5<g,5<gO!8vQWO'#CoO!9^QWO'#CoO!9cQWO'#IaO! yQWO'#JuO!9mQWO'#J`O!:TQWO,5;VOOQO'#Io'#IoO!0zQWO'#DaO!<TQWO'#DcO!<]QWO,5;ZO.YQ_O,5;ZOOQO,5;[,5;[OOQV'#Er'#ErOOQV'#Es'#EsOOQV'#Et'#EtOOQV'#Eu'#EuOOQV'#Ev'#EvOOQV'#Ew'#EwOOQV'#Ex'#ExOOQV'#Ey'#EyO.YQ_O,5;]O.YQ_O,5;]O.YQ_O,5;]O.YQ_O,5;]O.YQ_O,5;]O.YQ_O,5;]O.YQ_O,5;]O.YQ_O,5;]O.YQ_O,5;]O.YQ_O,5;fO!<sQ_O,5;kO!@ZQ_O'#FROOQO,5;l,5;lO!BfQWO,5;pO.YQ_O,5;wOKlQYO,5;gO!DRQWO,5;kO!DrQWO,5;xOOQO,5;x,5;xO!EPQWO,5;xO!EUQ_O,5;xO!GaQWO'#CfO!GfQWO,5<QO!GpQ_O,5<QOOQO,5;{,5;{O!J^QXO'#CnO!KoQXO'#IaOOQS'#Dk'#DkOOQP'#Is'#IsO!LiQ[O'#IsO!LqQXO'#DjO!MoQWO'#DnO!MoQWO'#DnO!NQQWO'#DnOOQP'#Iu'#IuO!NVQXO'#IuO# QQ^O'#DoO# [QWO'#DrO# dQ^O'#DzO# nQ^O'#D|O# uQWO'#EPO#!QQXO'#FdOOQP'#ES'#ESOOQP'#Ir'#IrO#!`QXO'#JfOOQP'#Je'#JeO#!hQXO,5;}O#!mQXO'#IaO!1PQ^O'#DyO!1PQ^O'#FdO##gQWO,5;|OOQO,5;|,5;|OKlQYO,5;|O##}QWO'#FhOOQO,5<R,5<ROOQV,5=l,5=lO#&SQYO'#FzOOQV,5<h,5<hO#&ZQWO,5<hO#&bQWO,5=SO!1WQWO,59rO!1dQWO,5<dO#&iQWO,5=iO!2_QWO,5<jO!2_QWO,5<zO!2_QWO,5<|O!2_QWO,5=QO#&pQWO,5=]O#&wQWO,5=SO!2_QWO,5=]O!3|QWO,5=aO#'PQWO,5=jOOQO-E;|-E;|O#'[QWO'#JjOOQV-E;h-E;hO#'sQWO'#HRO#'zQ_O,59pOOQV,59p,59pO#(RQWO,59pO#(WQ_O,59pO#(vQZO'#CuO#+OQZO'#CvOOQV'#C|'#C|O#-kQWO'#HTO#-rQYO'#IeOOQO'#Hh'#HhO#-zQWO'#CwO#-zQWO'#CwO#.]QWO'#CwOOQR'#Id'#IdO#.bQZO'#IcO#0wQYO'#HTO#1eQYO'#H[O#2qQYO'#H_OKlQYO'#H`OOQR'#Hb'#HbO#3}QWO'#HeO#4SQYO,59]OOQR'#Ic'#IcO#4sQZO'#CtO#7OQYO'#HUO#7TQWO'#HTO#7YQYO'#CrO#7yQWO'#H]O#7YQYO'#HcOOQV-E;e-E;eO#8RQWO,59sOOQV,59{,59{O#8aQYO,5=[OOQV,59},59}O!0zQWO,59}O#;TQWO'#IqOOQO'#Iq'#IqO!1PQ^O'#DhO!0zQWO,5:QO#;[QWO,5;iO#;rQWO,5;rO#<YQ_O,5;rOOQO,5;u,5;uO#?sQ_O,5;|O#A{QWO,5;PO!0zQWO,5<XO#BSQWO,5<ZOOQV,5<Z,5<ZO#B_QWO,5<]O!1PQ^O'#EOOOQQ'#D_'#D_O#BgQWO,59rO#BlQWO,5<`O#BqQWO,5<dOOQO,5@U,5@UO#ByQWO,5=iOOQQ'#Cv'#CvO#COQYO,5<jO#CaQYO,5<zO#ClQYO,5<|O#CwQYO,5=_O#DVQYO,5=SO#EoQYO'#GQO#E|QYO,5=[O#FaQWO,5=[O#FoQYO,5=[O#GxQYO,5=]O#HWQWO,5=`O!1PQ^O,5=`O#HfQWO'#CnO#HwQWO'#IaOOQO'#Jy'#JyO#IYQWO'#IQO#I_QWO'#GwOOQO'#Jz'#JzO#IvQWO'#GzOOQO'#G|'#G|OOQO'#Jx'#JxO#I_QWO'#GwO#I}QWO'#GxO#JSQWO,5=aO#JXQWO,5=jO!1dQWO,5=jO#'SQWO,5=jPOOO'#Hf'#HfP#J^OpO,58}POOO,58},58}OOOO-E;g-E;gOOQV1G/T1G/TO#JiQWO1G4|O#JnQ^O'#CyPOQQ'#Cx'#CxOOQO1G/v1G/vOOQP1G.u1G.uO)xQWO1G/vO#MwQ!fO'#EUO#NOQ!fO'#EVO#NVQ!fO'#ETO$ _QWO1G5WO$!RQ_O1G5WOOQO1G1]1G1]O$%uQWO1G0oO$%zQWO'#CiO!7rQXO'#IaO!6PQYO1G.lO!5oQWO,5<_O!8vQWO,59ZO!8vQWO,59ZO!5oQWO,5?lO$&]QWO1G0uO$(jQWO1G0wO$*bQWO1G0wO$*xQWO1G0wO$,|QWO1G0wO$-TQWO1G0wO$/UQWO1G0wO$/]QWO1G0wO$1^QWO1G0wO$1eQWO1G0wO$2|QWO1G1QO$4}QWO1G1VO$5nQ_O'#JcO$7vQWO'#JcOOQO'#Jb'#JbO$8QQWO,5;mOOQO'#Dw'#DwOOQO1G1[1G1[OOQO1G1Y1G1YO$8VQWO1G1cOOQO1G1R1G1RO$8^Q_O'#HrO$:lQWO,5@OO.YQ_O1G1dOOQO1G1d1G1dO$:tQWO1G1dO$;RQWO1G1dO$;WQWO1G1eOOQO1G1l1G1lO$;`QWO1G1lOOQP,5?_,5?_O$;jQ^O,5:kO$<TQXO,5:YO!MoQWO,5:YO!MoQWO,5:YO!1PQ^O,5:gO$=UQWO'#IzOOQO'#Iy'#IyO$=dQWO,5:ZO# QQ^O,5:ZO$=iQWO'#DsOOQP,5:^,5:^O$=zQWO,5:fOOQP,5:h,5:hO!1PQ^O,5:hO!1PQ^O,5:mO$>PQYO,5<OO$>ZQ_O'#HsO$>hQXO,5@QOOQV1G1i1G1iOOQP,5:e,5:eO$>pQXO,5<OO$?OQWO1G1hO$?WQWO'#CnO$?cQWO'#FiOOQO'#Fi'#FiO$?kQWO'#FjO.YQ_O'#FkOOQO'#Ji'#JiO$?pQWO'#JhOOQO'#Jg'#JgO$?xQWO,5<SOOQQ'#Hv'#HvO$?}QYO,5<fOOQV,5<f,5<fO$@UQYO,5<fOOQV1G2S1G2SO$@]QWO1G2nO$@eQWO1G/^O$@jQWO1G2OO#ByQWO1G3TO$@rQYO1G2UO#CaQYO1G2fO#ClQYO1G2hO$ATQYO1G2lO!2_QWO1G2wO#DVQYO1G2nO#GxQYO1G2wO$A]QWO1G2{O$AbQWO1G3UO!1dQWO1G3UO$AgQWO1G3UOOQV1G/[1G/[O$AoQWO1G/[O$AtQ_O1G/[O#7TQWO,5=oO$A{QYO,5?PO$BaQWO,5?PO$BfQZO'#IfOOQO-E;f-E;fOOQR,59c,59cO#-zQWO,59cO#-zQWO,59cOOQR,5=n,5=nO$ERQYO'#HVO$FkQZO,5=oO!5oQWO,5={O$H}QWO,5=oO$IUQZO,5=vO$KeQYO,5=vO$>PQYO,5=vO$KuQWO'#KRO$LQQWO,5=xOOQR,5=y,5=yO$LVQWO,5=zO$>PQYO,5>PO$>PQYO,5>POOQO1G.w1G.wO$>PQYO1G.wO$LbQYO,5=pO$LjQZO,59^OOQR,59^,59^O$>PQYO,5=wO$N|QZO,5=}OOQR,5=},5=}O%#`QWO1G/_O!6PQYO1G/_O#E|QYO1G2vO%#eQWO1G2vO%#sQYO1G2vOOQV1G/i1G/iO%$|QWO,5:SO%%UQ_O1G/lO%*_QWO1G1^O%*uQWO1G1hOOQO1G1h1G1hO$>PQYO1G1hO%+]Q^O'#EgOOQV1G0k1G0kOOQV1G1s1G1sO!!vQ_O1G1sO!0zQWO1G1uO!1PQ^O1G1wO!.cQ_O1G1wOOQP,5:j,5:jO$>PQYO1G/^OOQO'#Cn'#CnO%+jQWO1G1zOOQV1G2O1G2OO%+rQWO'#CnO%+zQWO1G3TO%,PQWO1G3TO%,UQYO'#GQO%,gQWO'#G]O%,xQYO'#G_O%.[QYO'#GXOOQV1G2U1G2UO%/kQWO1G2UO%/pQWO1G2UO$@uQWO1G2UOOQV1G2f1G2fO%/kQWO1G2fO#CdQWO1G2fO%/xQWO'#GdOOQV1G2h1G2hO%0ZQWO1G2hO#CoQWO1G2hO%0`QYO'#GSO$>PQYO1G2lO$AWQWO1G2lOOQV1G2y1G2yO%1lQWO1G2yO%3[Q^O'#GkO%3fQWO1G2nO#DYQWO1G2nO%3tQYO,5<lO%4OQYO,5<lO%4^QYO,5<lO%4{QYO,5<lOOQQ,5<l,5<lO!1WQWO'#JuO%5WQYO,5<lO%5`QWO1G2vOOQV1G2v1G2vO%5hQWO1G2vO$>PQYO1G2vOOQV1G2w1G2wO%5hQWO1G2wO%5mQWO1G2wO#G{QWO1G2wOOQV1G2z1G2zO.YQ_O1G2zO$>PQYO1G2zO%5uQWO1G2zOOQO,5>l,5>lOOQO-E<O-E<OOOQO,5=c,5=cOOQO,5=e,5=eOOQO,5=g,5=gOOQO,5=h,5=hO%6TQWO'#J|OOQO'#J{'#J{O%6]QWO,5=fO%6bQWO,5=cO!1dQWO,5=dOOQV1G2{1G2{O$>PQYO1G3UPOOO-E;d-E;dPOOO1G.i1G.iOOQO7+*h7+*hO%6yQYO'#IdO%7bQYO'#IgO%7mQYO'#IgO%7uQYO'#IgO%8QQYO,59eOOQO7+%b7+%bOOQP7+$a7+$aOOQV,5:p,5:pO%8VQ!fO,5:pO%8^Q!fO'#JTOOQS'#EZ'#EZOOQS'#E['#E[OOQS'#E]'#E]OOQS'#JT'#JTO%;PQWO'#EYOOQS'#Eb'#EbOOQS'#JR'#JROOQS'#Hn'#HnOOQV,5:q,5:qO%;UQ!fO,5:qO%;]Q!fO,5:oOOQV,5:o,5:oOOQV7+'e7+'eOOQV7+&Z7+&ZO%;dQ[O,59TO%;xQ^O,59TO%<cQWO7+$WO%<hQWO1G1yOOQV1G1y1G1yO!8vQWO1G.uOOQP1G5W1G5WO%<mQWO,5?}O%<wQ_O'#HqO%?SQWO,5?}OOQO1G1X1G1XOOQO7+&}7+&}O%?[QWO,5>^OOQO-E;p-E;pO%?iQWO7+'OO%?pQ_O7+'OOOQO7+'O7+'OOOQO7+'P7+'PO%ArQWO7+'POOQO7+'W7+'WOOQP1G0V1G0VO%AzQXO1G/tO!MoQWO1G/tO%B{QXO1G0RO%CsQ^O'#HlO%DTQWO,5?fOOQP1G/u1G/uO%D`QWO1G/uO%DeQWO'#D_OOQO'#Dt'#DtO%DpQWO'#DtO%DuQWO'#I|OOQO'#I{'#I{O%D}QWO,5:_O%ESQWO'#DtO%EXQWO'#DtOOQP1G0Q1G0QOOQP1G0S1G0SOOQP1G0X1G0XO%EaQXO1G1jO%ElQXO'#FeOOQP,5>_,5>_O!1PQ^O'#FeOOQP-E;q-E;qO$>PQYO1G1jOOQO7+'S7+'SOOQO,5<T,5<TO%EzQWO,5<UO%?pQ_O,5<UO%FPQWO,5<VO%FZQWO'#HtO%FlQWO,5@SOOQO1G1n1G1nOOQQ-E;t-E;tOOQV1G2Q1G2QO%FtQYO1G2QO#DVQYO7+(YO$>PQYO7+$xOOQV7+'j7+'jO%F{QWO7+(oO%GQQWO7+(oOOQV7+'p7+'pO%/kQWO7+'pO%GVQWO7+'pO%G_QWO7+'pOOQV7+(Q7+(QO%/kQWO7+(QO#CdQWO7+(QOOQV7+(S7+(SO%0ZQWO7+(SO#CoQWO7+(SO$>PQYO7+(WO%GmQWO7+(WO#GxQYO7+(cO%GrQWO7+(YO#DYQWO7+(YOOQV7+(c7+(cO%5hQWO7+(cO%5mQWO7+(cO#G{QWO7+(cOOQV7+(g7+(gO$>PQYO7+(pO%HQQWO7+(pO!1dQWO7+(pOOQV7+$v7+$vO%HVQWO7+$vO%H[QZO1G3ZO%JnQWO1G4kOOQO1G4k1G4kOOQR1G.}1G.}O#-zQWO1G.}O%JsQWO'#KQOOQO'#HW'#HWO%KUQWO'#HXO%KaQWO'#KQOOQO'#KP'#KPO%KiQWO,5=qO%KnQYO'#H[O%LzQWO'#GmO%MVQYO'#CtO%MaQWO'#GmO$>PQYO1G3ZOOQR1G3g1G3gO#7TQWO1G3ZO%MfQZO1G3bO$>PQYO1G3bO& uQYO'#IVO&!VQWO,5@mOOQR1G3d1G3dOOQR1G3f1G3fO%?pQ_O1G3fOOQR1G3k1G3kO&!_QYO7+$cO&!gQYO'#KOOOQQ'#J}'#J}O&!oQYO1G3[O&!tQZO1G3cOOQQ7+$y7+$yO&%TQWO7+$yO&%YQWO7+(bOOQV7+(b7+(bO%5hQWO7+(bO$>PQYO7+(bO#E|QYO7+(bO&%bQWO7+(bO!.cQ_O1G/nO&%pQWO7+%WO$?OQWO7+'SO&%xQWO'#EhO&&TQ^O'#EhOOQU'#Ho'#HoO&&TQ^O,5;ROOQV,5;R,5;RO&&_QWO,5;RO&&dQ^O,5;RO!0zQWO7+'_OOQV7+'a7+'aO&&qQWO7+'cO&&yQWO7+'cO&'QQWO7+$xO&)uQ!fO7+'fO&)|Q!fO7+'fOOQV7+(o7+(oO!1dQWO7+(oO&*TQYO,5<lO&*`QYO,5<lO!1dQWO'#GWO&*nQWO'#JpO&*|QWO'#G^O!BlQWO'#G^O&+RQWO'#JpOOQO'#Jo'#JoO&+ZQWO,5<wOOQO'#DX'#DXO&+`QYO'#JrO&,oQWO'#JrO$>PQYO'#JrOOQO'#Jq'#JqO&,zQWO,5<yO&-PQWO'#GZO#DQQWO'#G[O&-XQWO'#G[O&-aQWO'#JmOOQO'#Jl'#JlO&-lQYO'#GTOOQO,5<s,5<sO&-qQWO7+'pO&-vQWO'#JtO&.UQWO'#GeO#BlQWO'#GeO&.gQWO'#JtOOQO'#Js'#JsO&.oQWO,5=OO$>PQYO'#GUO&.tQYO'#JkOOQQ,5<n,5<nO&/]QWO7+(WOOQV7+(e7+(eO&/eQ^O'#D|O&0kQWO'#GlO&0sQ^O'#JwOOQO'#Gn'#GnO&0zQWO'#JwOOQO'#Jv'#JvO&1SQWO,5=VO&1XQWO'#IaO&1iQ^O'#GmO&2lQWO'#IrO&2zQWO'#GmOOQV7+(Y7+(YO&3SQWO7+(YO$>PQYO7+(YO&3[QYO'#HxO&3pQYO1G2WOOQQ1G2W1G2WOOQQ,5<m,5<mO$>PQYO,5<qO&3xQWO,5<rO&3}QWO7+(bO&4YQWO7+(fO&4aQWO7+(fOOQV7+(f7+(fO%?pQ_O7+(fO$>PQYO7+(fO&4lQWO'#IRO&4vQWO,5@hOOQO1G3Q1G3QOOQO1G2}1G2}OOQO1G3P1G3POOQO1G3R1G3ROOQO1G3S1G3SOOQO1G3O1G3OO&5OQWO7+(pO$>PQYO,59fO&5ZQ^O'#ISO&6QQYO,5?ROOQR1G/P1G/POOQV1G0[1G0[OOQS-E;l-E;lO&6YQ!bO,5:rO&6_Q!fO,5:tOOQV1G0]1G0]OOQV1G0Z1G0ZOOQO1G.o1G.oO&6fQWO'#KTOOQO'#KS'#KSO&6nQWO1G.oOOQV<<Gr<<GrO&6sQWO1G5iO&6{Q_O,5>]O&9QQWO,5>]OOQO-E;o-E;oOOQO<<Jj<<JjO&9[QWO<<JjOOQO<<Jk<<JkO&9cQXO7+%`O&:dQWO,5>WOOQO-E;j-E;jOOQP7+%a7+%aO!1PQ^O,5:`O&:rQWO'#HmO&;WQWO,5?hOOQP1G/y1G/yOOQO,5:`,5:`O&;`QWO,5:`O%ESQWO,5:`O$>PQYO,5<PO&;eQXO,5<PO&;sQXO7+'UO%?pQ_O1G1pO&<OQWO1G1pOOQO,5>`,5>`OOQO-E;r-E;rOOQV7+'l7+'lO&<YQWO<<KtO#DYQWO<<KtO&<hQWO<<HdOOQV<<LZ<<LZO!1dQWO<<LZOOQV<<K[<<K[O&<sQWO<<K[O%/kQWO<<K[O&<xQWO<<K[OOQV<<Kl<<KlO%/kQWO<<KlOOQV<<Kn<<KnO%0ZQWO<<KnO&=QQWO<<KrO$>PQYO<<KrOOQV<<K}<<K}O%5hQWO<<K}O%5mQWO<<K}O#G{QWO<<K}OOQV<<Kt<<KtO&=YQWO<<KtO$>PQYO<<KtO&=bQWO<<L[O$>PQYO<<L[O&=mQWO<<L[OOQV<<Hb<<HbO$>PQYO7+(uOOQO7+*V7+*VOOQR7+$i7+$iO&=rQWO,5@lOOQO'#Gm'#GmO&=zQWO'#GmO&>VQYO'#IUO&=rQWO,5@lOOQR1G3]1G3]O&?rQYO,5=vO&ARQYO,5=XO&A]QWO,5=XOOQO,5=X,5=XOOQR7+(u7+(uO&AbQZO7+(uO&CtQZO7+(|O&FTQWO,5>qOOQO-E<T-E<TO&F`QWO7+)QOOQO<<G}<<G}O&FgQYO'#ITO&FrQYO,5@jOOQQ7+(v7+(vOOQQ<<He<<HeO$>PQYO<<K|OOQV<<K|<<K|O&3}QWO<<K|O&FzQWO<<K|O%5hQWO<<K|O&GSQWO7+%YOOQV<<Hr<<HrOOQO<<Jn<<JnO%?pQ_O,5;SO&GZQWO,5;SO%?pQ_O'#EjO&G`QWO,5;SOOQU-E;m-E;mO&GkQWO1G0mOOQV1G0m1G0mO&&TQ^O1G0mOOQV<<Jy<<JyO!.cQ_O<<J}OOQV<<J}<<J}OOQV<<Hd<<HdO%?pQ_O<<HdO&GpQWO'#JTO&GxQWO'#FvO&G}QWO<<KQO&HVQ!fO<<KQO&H^QWO<<KQO&HcQWO<<KQO&HkQ!fO<<KQOOQV<<KQ<<KQO&HrQWO<<LZO&HwQWO,5@[O$>PQYO,5<xO&IPQWO,5<xO&IUQWO'#H{O&HwQWO,5@[OOQV1G2c1G2cO&IjQWO,5@^O$>PQYO,5@^O&IuQYO'#H|O&K[QWO,5@^OOQO1G2e1G2eO%,bQWO,5<uOOQO,5<v,5<vO&KdQYO'#HzO&LvQWO,5@XO%,UQYO,5=pO$>PQYO,5<oO&MRQWO,5@`O%?pQ_O,5=PO&MZQWO,5=PO&MfQWO,5=PO&MwQWO'#H}O&MRQWO,5@`OOQV1G2j1G2jO&N]QYO,5<pO%0`QYO,5>PO&NtQYO,5@VOOQV<<Kr<<KrO' ]QWO,5=XO' mQ^O,5:hO'!pQWO,5=XO$>PQYO,5=WO'!xQWO,5@cO'#QQWO,5@cO'#`Q^O'#IPO'!xQWO,5@cOOQO1G2q1G2qO'$rQWO,5=WO'$zQWO<<KtO'%YQYO,5>oO'%eQYO,5>dO'%sQYO,5>dOOQQ,5>d,5>dOOQQ-E;v-E;vOOQQ7+'r7+'rO'&OQYO1G2]O$>PQYO1G2^OOQV<<LQ<<LQO%?pQ_O<<LQO'&ZQWO<<LQO'&bQWO<<LQOOQO,5>m,5>mOOQO-E<P-E<POOQV<<L[<<L[O%?pQ_O<<L[O'&mQYO1G/QO'&xQYO,5>nOOQQ,5>n,5>nO''TQYO,5>nOOQQ-E<Q-E<QOOQS1G0^1G0^O')cQ!fO1G0`O')pQ!fO1G0`O')wQ^O'#IWO'*eQWO,5@oOOQO7+$Z7+$ZO'*mQWO1G3wOOQOAN@UAN@UO'*wQWO1G/zOOQO,5>X,5>XOOQO-E;k-E;kO!1PQ^O1G/zOOQO1G/z1G/zO'+SQWO1G/zO'+XQXO1G1kO$>PQYO1G1kO'+dQWO7+'[OOQVANA`ANA`O'+nQWOANA`O$>PQYOANA`O'+vQWOANA`OOQVAN>OAN>OO%?pQ_OAN>OO',UQWOANAuOOQVAN@vAN@vO',ZQWOAN@vOOQVANAWANAWOOQVANAYANAYOOQVANA^ANA^O',`QWOANA^OOQVANAiANAiO%5hQWOANAiO%5mQWOANAiO',hQWOANA`OOQVANAvANAvO%?pQ_OANAvO',vQWOANAvO$>PQYOANAvOOQR<<La<<LaO'-RQWO1G6WO%JsQWO,5>pOOQO'#HY'#HYO'-ZQWO'#HZOOQO,5>p,5>pOOQO-E<S-E<SO'-fQYO1G2sO'-pQWO1G2sOOQO1G2s1G2sO$>PQYO<<LaOOQR<<Ll<<LlOOQQ,5>o,5>oOOQQ-E<R-E<RO&3}QWOANAhOOQVANAhANAhO%5hQWOANAhO$>PQYOANAhO'-uQWO1G1rO'.iQ^O1G0nO%?pQ_O1G0nO'0_QWO,5;UO'0fQWO1G0nP'0kQWO'#ERP&&TQ^O'#HpOOQV7+&X7+&XO'0vQWO7+&XO&&yQWOAN@iO'0{QWOAN>OO!5oQWO,5<bOOQS,5>a,5>aO'1SQWOAN@lO'1XQWOAN@lOOQS-E;s-E;sOOQVAN@lAN@lO'1aQWOAN@lOOQVANAuANAuO'1iQWO1G5vO'1qQWO1G2dO$>PQYO1G2dO&*nQWO,5>gOOQO,5>g,5>gOOQO-E;y-E;yO'1|QWO1G5xO'2UQWO1G5xO&+`QYO,5>hO'2aQWO,5>hO$>PQYO,5>hOOQO-E;z-E;zO'2lQWO'#JnOOQO1G2a1G2aOOQO,5>f,5>fOOQO-E;x-E;xO&*TQYO,5<lO'2zQYO1G2ZO'3fQWO1G5zO'3nQWO1G2kO%?pQ_O1G2kO'3xQWO1G2kO&-vQWO,5>iOOQO,5>i,5>iOOQO-E;{-E;{OOQQ,5>c,5>cOOQQ-E;u-E;uO'4TQWO1G2sO'4eQWO1G2rO'4pQWO1G5}O'4xQ^O,5>kOOQO'#Go'#GoOOQO,5>k,5>kO'6UQWO,5>kOOQO-E;}-E;}O$>PQYO1G2rO'6dQYO7+'xO'6oQWOANAlOOQVANAlANAlO%?pQ_OANAlO'6vQWOANAvOOQS7+%z7+%zO'6}QWO7+%zO'7YQ!fO7+%zOOQO,5>r,5>rOOQO-E<U-E<UO'7gQWO7+%fO!1PQ^O7+%fO'7rQXO7+'VOOQVG26zG26zO'7}QWOG26zO'8]QWOG26zO$>PQYOG26zO'8eQWOG23jOOQVG27aG27aOOQVG26bG26bOOQVG26xG26xOOQVG27TG27TO%5hQWOG27TO'8lQWOG27bOOQVG27bG27bO%?pQ_OG27bO'8sQWOG27bOOQO1G4[1G4[OOQO7+(_7+(_OOQRANA{ANA{OOQVG27SG27SO%5hQWOG27SO&3}QWOG27SO'9OQ^O7+&YO':iQWO7+'^O';]Q^O7+&YO%?pQ_O7+&YP%?pQ_O,5;SP'<iQWO,5;SP'<nQWO,5;SOOQV<<Is<<IsOOQVG26TG26TOOQVG23jG23jOOQO1G1|1G1|OOQVG26WG26WO'<yQWOG26WP&HfQWO'#HuO'=OQWO7+(OOOQO1G4R1G4RO'=ZQWO7++dO'=cQWO1G4SO$>PQYO1G4SO%,bQWO'#HyO'=nQWO,5@YO'=|QWO7+(VO%?pQ_O7+(VOOQO1G4T1G4TOOQO1G4V1G4VO'>WQWO1G4VO'>fQWO7+(^OOQVG27WG27WO'>qQWOG27WOOQS<<If<<IfO'>xQWO<<IfO'?TQWO<<IQOOQVLD,fLD,fO'?`QWOLD,fO'?hQWOLD,fOOQVLD)ULD)UOOQVLD,oLD,oOOQVLD,|LD,|O'?vQWOLD,|O%?pQ_OLD,|OOQVLD,nLD,nO%5hQWOLD,nO'?}Q^O<<ItO'AhQWO<<JxO'B[Q^O<<ItP'ChQWO1G0nP'DXQ^O1G0nP%?pQ_O1G0nP'EzQWO1G0nOOQVLD+rLD+rO'FPQWO7+)nOOQO,5>e,5>eOOQO-E;w-E;wO'F[QWO<<KqOOQVLD,rLD,rOOQSAN?QAN?QOOQV!$(!Q!$(!QO'FfQWO!$(!QOOQV!$(!h!$(!hO'FnQWO!$(!hOOQV!$(!Y!$(!YO'FuQ^OAN?`POQU7+&Y7+&YP'H`QWO7+&YP'IPQ^O7+&YP%?pQ_O7+&YOOQV!)9El!)9ElOOQV!)9FS!)9FSPOQU<<It<<ItP'JrQWO<<ItP'KcQ^O<<ItPOQUAN?`AN?`O'MUQWO'#CnO'M]QXO'#CnO'NUQWO'#IaO( kQXO'#IaO(!bQWO'#DpO(!bQWO'#DpO!.cQ_O'#EkO(!sQ_O'#EoO(!zQ_O'#FPO(%{Q_O'#FbO(&SQXO'#IaO(&yQ_O'#E}O('|Q_O'#FWO(!bQWO,5:[O(!bQWO,5:[O!.cQ_O,5;ZO!.cQ_O,5;]O!.cQ_O,5;]O!.cQ_O,5;]O!.cQ_O,5;]O!.cQ_O,5;]O!.cQ_O,5;]O!.cQ_O,5;]O!.cQ_O,5;]O!.cQ_O,5;]O!.cQ_O,5;fO()PQ_O,5;kO(,QQWO,5;kO(,bQWO,5;|O(,iQYO'#CuO(,tQYO'#CvO(-PQWO'#CwO(-PQWO'#CwO(-bQYO'#CtO(-mQWO,5;iO(-tQWO,5;rO(-{Q_O,5;rO(/RQ_O,5;|O(!bQWO1G/vO(/YQWO1G0uO(0wQWO1G0wO(1RQWO1G0wO(2vQWO1G0wO(2}QWO1G0wO(4oQWO1G0wO(4vQWO1G0wO(6hQWO1G0wO(6oQWO1G0wO(6vQWO1G1QO(7WQWO1G1VO(7hQYO'#IfO(-PQWO,59cO(-PQWO,59cO(7sQWO1G1^O(7zQWO1G1hO(-PQWO1G.}O(8RQWO'#DpO!.^QXO'#FbO(8WQWO,5;ZO(8_QWO'#Cw",
            stateData: "(8q~O&}OSUOS'OPQ~OPoOQ!QOSVOTVOZeO[lO^RO_RO`ROa!UOd[Og!nOsVOtVOuVOw!POyvO|!VO}mO!Q!dO!U!WO!W!XO!X!^O!Z!YO!]!pO!liO!qgO!tiO#Y!_O#r!ZO#{![O$O!]O$b!`O$d!bO$f!cO$i!eO$m!fO$q!gO$s!hO%T!iO%V!jO%Z!kO%]!lO%^!mO%f!oO%j!qO%s!rO'R`O'UQO'[kO'_UO'hcO'riO(QdO~O'O!sO~OZbX[bXdbXdlXobXwjX}bX!lbX!qbX!tbX#QbX#RbX#pbX'hbX'rbX'sbX'xbX'ybX'zbX'{bX'|bX'}bX(ObX(PbX(QbX(RbX(TbX~OybXXbX!ebX!PbXvbX#TbX~P$|OZ'TX['TXd'TXd'YXo'TXw'lXy'TX}'TX!l'TX!q'TX!t'TX#Q'TX#R'TX#p'TX'h'TX'r'TX's'TX'x'TX'y'TX'z'TX'{'TX'|'TX'}'TX(O'TX(P'TX(Q'TX(R'TX(T'TXv'TX~OX'TX!e'TX!P'TX#T'TX~P'ZOr!uO'^!wO'`!uO~Od!xO~O^RO_RO`ROaRO'UQO~Od!}O~Od#PO[(SXo(SXy(SX}(SX!l(SX!q(SX!t(SX#Q(SX#R(SX#p(SX'h(SX'r(SX's(SX'x(SX'y(SX'z(SX'{(SX'|(SX'}(SX(O(SX(P(SX(Q(SX(R(SX(T(SXv(SX~OZ#OO~P*`OZ#RO[#QO~OQ!QO^#TO_#TO`#TOa#]Od#ZOg!nOyvO|!VO!Q!dO!U#^O!W!lO!]!pO$i!eO$m!fO$q!gO$s!hO%T!iO%V!jO%Z!kO%]!lO%^!mO%f!oO%j!qO%s!rO'R#VO'U#SO~OPoOQ!QOSVOTVOZeO[lOd[OsVOtVOuVOw!PO}mO!U#bO!W#cO!X!^O!Z!YO!liO!qgO!tiO#Y!_O#r!ZO#{![O$O!]O$b!`O$d!bO$f!cO'[kO'_UO'hcO'riO(QdO~P)xOPoOQ!QOSVOTVOZeO[lOd[OsVOtVOuVOw!PO}mO!U#bO!W#cO!X!^O!Z!YO!j#eO!liO!qgO!tiO#Y!_O#r!ZO#{![O$O!]O$b!`O$d!bO$f!cO'[kO'_UO'hcO'riO(QdO~P)xO[#}Oo#xO}#zO!l#yO!q#jO!t#yO#Q#xO#R#uO#p$OO'h#gO'r#yO's#lO'x#hO'y#iO'z#iO'{#kO'|#nO'}#mO(O#|O(P#gO(Q#hO(R#fO(T#hO~OPoOQ!QOSVOTVOZeOd[OsVOtVOuVOw!PO!U#bO!W#cO!X!^O!Z!YO#Y!_O#r!ZO#{![O$O!]O$b!`O$d!bO$f!cO'[kO'_UO[#sXo#sXy#sX}#sX!l#sX!q#sX!t#sX#Q#sX#R#sX#p#sX'h#sX'r#sX's#sX'x#sX'y#sX'z#sX'{#sX'|#sX'}#sX(O#sX(P#sX(Q#sX(R#sX(T#sXX#sX!e#sX!P#sXv#sX#T#sX~P)xOX(SX!e(SX!P(SXw(SX#T(SX~P*`OPoOQ!QOSVOTVOX$ROZeO[lOd[OsVOtVOuVOw!PO}mO!U#bO!W#cO!X!^O!Z!YO!liO!qgO!tiO#Y!_O#r!ZO#{![O$O!]O$b!`O$d!bO$f!cO'R$UO'[kO'_UO'hcO'riO(QdO~P)xOPoOQ!QOSVOTVOZeO[lOd[OsVOtVOuVOw!PO}mO!P$XO!U#bO!W#cO!X!^O!Z!YO!liO!qgO!tiO#Y!_O#r!ZO#{![O$O!]O$b!`O$d!bO$f!cO'R$UO'[kO'_UO'hcO'riO(QdO~P)xOQ!QOSVOTVO[$gO^$pO_$ZO`:QOa:QOd$aOsVOtVOuVO}$eO!i$qO!l$lO!q$hO#V$lO'U$YO'_UO'h$[O~O!j$rOP(XP~P<cOPoOQ!QOSVOTVOZeO[lOd[OsVOtVOuVOw!PO}mO!U#bO!W#cO!X!^O!Z!YO!liO!qgO!tiO#S$uO#Y!_O#r!ZO#{![O$O!]O$b!`O$d!bO$f!cO'[kO'_UO'hcO'riO(QdO~P)xOw$vO~Oo'cX#Q'cX#R'cX#p'cX's'cX'x'cX'y'cX'z'cX'{'cX'|'cX'}'cX(O'cX(P'cX(R'cX(T'cX~OP%tXQ%tXS%tXT%tXZ%tX[%tX^%tX_%tX`%tXa%tXd%tXg%tXs%tXt%tXu%tXw%tXy%tX|%tX}%tX!Q%tX!U%tX!W%tX!X%tX!Z%tX!]%tX!l%tX!q%tX!t%tX#Y%tX#r%tX#{%tX$O%tX$b%tX$d%tX$f%tX$i%tX$m%tX$q%tX$s%tX%T%tX%V%tX%Z%tX%]%tX%^%tX%f%tX%j%tX%s%tX&{%tX'R%tX'U%tX'[%tX'_%tX'h%tX'r%tX(Q%tXv%tX~P@[Oy$xO['cX}'cX!l'cX!q'cX!t'cX'h'cX'r'cX(Q'cXv'cX~P@[Ow$yO!Q(iX!U(iX!W(iX$q(iX%](iX%^(iX~Oy$zO~PEsO!Q$}O!U%UO!W!lO$m%OO$q%PO$s%QO%T%RO%V%SO%Z%TO%]!lO%^%VO%f%WO%j%XO%s%YO~O!Q!lO!U!lO!W!lO$q%[O%]!lO~O%^%VO~PGaOPoOQ!QOSVOTVOZeO[lO^RO_RO`ROa!UOd[Og!nOsVOtVOuVOw!POyvO|!VO}mO!Q!dO!U!WO!W!XO!X!^O!Z!YO!]!pO!liO!qgO!tiO#Y!_O#r!ZO#{![O$O!]O$b!`O$d!bO$f!cO$i!eO$m!fO$q!gO$s!hO%T!iO%V!jO%Z!kO%]!lO%^!mO%f!oO%j!qO%s!rO'R#VO'UQO'[kO'_UO'hcO'riO(QdO~Ov%`O~P]OQ!QOZ%rO[%qO^%vO_%cO`TOaTOd%jOg%yO}%pO!q%oO$f%wO%^%xO&W%{O'U%dO'[%eO(Q%zO~PGaO!Q{X!U{X!W{X$m{X$q{X$s{X%T{X%V{X%Z{X%]{X%^{X%f{X%j{X%s{X~P'ZO!Q{X!U{X!W{X$m{X$q{X$s{X%T{X%V{X%Z{X%]{X%^{X%f{X%j{X%s{X~O}%}O'U{XQ{XZ{X[{X^{X_{X`{Xa{Xd{Xg{X!q{X$f{X&W{X'[{X(Q{X~PMuOg&PO%f%WO!Q(iX!U(iX!W(iX$q(iX%](iX%^(iX~Ow!PO~P! yOw!PO!X&RO~PEvOPoOQ!QOSVOTVOZeO[lO^9xO_9xO`9xOa9xOd9{OsVOtVOuVOw!PO}mO!U#bO!W#cO!X;RO!Z!YO!]&UO!l:OO!q9}O!t:OO#Y!_O#r:RO#{:SO$O!]O$b!`O$d!bO$f!cO'U9vO'[kO'_UO'hcO'r:OO(QdO~OPoOQ!QOSVOTVOZeO[lOd[OsVOtVOuVOw!PO}mO!U#bO!W#cO!X!^O!Z!YO!liO!qgO!tiO#Y!_O#r!ZO#{![O$O!]O$b!`O$d!bO$f!cO'[kO'_UO'hcO'riO(QdOo#qXy#qX#Q#qX#R#qX#p#qX's#qX'x#qX'y#qX'z#qX'{#qX'|#qX'}#qX(O#qX(P#qX(R#qX(T#qXX#qX!e#qX!P#qXv#qX#T#qX~P)xOPoOQ!QOSVOTVOZeO[lOd[OsVOtVOuVOw!PO}mO!U#bO!W#cO!X!^O!Z!YO!liO!qgO!tiO#Y!_O#r!ZO#{![O$O!]O$b!`O$d!bO$f!cO'[kO'_UO'hcO'riO(QdOo#zXy#zX#Q#zX#R#zX#p#zX's#zX'x#zX'y#zX'z#zX'{#zX'|#zX'}#zX(O#zX(P#zX(R#zX(T#zXX#zX!e#zX!P#zXv#zX#T#zX~P)xO'[kO[#}Xo#}Xy#}X}#}X!l#}X!q#}X!t#}X#Q#}X#R#}X#p#}X'h#}X'r#}X's#}X'x#}X'y#}X'z#}X'{#}X'|#}X'}#}X(O#}X(P#}X(Q#}X(R#}X(T#}XX#}X!e#}X!P#}Xv#}Xw#}X#T#}X~OPoO~OPoOQ!QOSVOTVOZeO[lO^9xO_9xO`9xOa9xOd9{OsVOtVOuVOw!PO}mO!U#bO!W#cO!X;RO!Z!YO!l:OO!q9}O!t:OO#Y!_O#r:RO#{:SO$O!]O$b!`O$d!bO$f!cO'U9vO'[kO'_UO'hcO'r:OO(QdO~O!S&_O~Ow!PO~O!j&bO~P<cO'U&cO~PEvOZ&eO~O'U&cO~O'_UOw(^Xy(^X!Q(^X!U(^X!W(^X$q(^X%](^X%^(^X~Oa&hO~P!1iO'U&iO~O_&nO'U&cO~OQ&oOZ&pO[%qO^%vO_%cO`TOaTOd%jOg%yO}%pO!q%oO$f%wO%^%xO&W%{O'U%dO'[%eO(Q%zO~PGaO!j&uO~P<cO^&wO_&wO`&wOa&wOd'POw&|O'U&vO(Q&}O~O!i'UO!j'TO'U&cO~O'O!sO'P'VO'Q'XO~Or!uO'^'ZO'`!uO~OQ']O^'ja_'ja`'jaa'ja'U'ja~O['bOw'cO}'dO~OQ']O~OQ!QO^#TO_#TO`#TOa'jOd#ZO'U#SO~O['kO~OZbXdlXXbXobXPbX!SbX!ebX'sbX!PbX!ObXybX!ZbX#TbXvbX~O}bX~P!6mOZ'TXd'YXX'TXo'TX}'TX#p'TXP'TX!S'TX!e'TX's'TX!P'TX!O'TXy'TX!Z'TX#T'TXv'TX~O^#TO_#TO`#TOa'jO'U#SO~OZ'lO~Od'nO~OZ'TXd'YX~PMuOZ'oOX(SX!e(SX!P(SXw(SX#T(SX~P*`O[#}O}#zO(O#|O(R#fOo#_ay#_a!l#_a!q#_a!t#_a#Q#_a#R#_a#p#_a'h#_a'r#_a's#_a'x#_a'y#_a'z#_a'{#_a'|#_a'}#_a(P#_a(Q#_a(T#_aX#_a!e#_a!P#_av#_aw#_a#T#_a~Ow!PO!X&RO~Oy#caX#ca!e#ca!P#cav#ca#T#ca~P2gOPoOQ!QOSVOTVOZeOd[OsVOtVOuVOw!PO!U#bO!W#cO!X!^O!Z!YO#Y!_O#r!ZO#{![O$O!]O$b!`O$d!bO$f!cO'[kO'_UO[#sao#say#sa}#sa!l#sa!q#sa!t#sa#Q#sa#R#sa#p#sa'h#sa'r#sa's#sa'x#sa'y#sa'z#sa'{#sa'|#sa'}#sa(O#sa(P#sa(Q#sa(R#sa(T#saX#sa!e#sa!P#sav#sa#T#sa~P)xOPoOQ!QOSVOTVOZeO[lOd[OsVOtVOuVOw!PO}mO!U#bO!W#cO!X!^O!Z!YO!liO!qgO!tiO#Y!_O#r!ZO#{![O$O!]O$b!`O$d!bO$f!cO'R#VO'[kO'_UO'hcO'riO(QdO!P(UP~P)xOu(RO#w(SO'U(QO~O[#}O}#zO!q#jO'h#gO's#lO'x#hO'y#iO'z#iO'{#kO'|#nO'}#mO(O#|O(P#gO(Q#hO(R#fO(T#hO!l#sa!t#sa#p#sa'r#sa~Oo#xO#Q#xO#R#uOy#saX#sa!e#sa!P#sav#sa#T#sa~P!BqOy(XO!e(VOX(WX~P2gOX(YO~OPoOQ!QOSVOTVOX(YOZeO[lOd[OsVOtVOuVOw!PO}mO!U#bO!W#cO!X!^O!Z!YO!liO!qgO!tiO#Y!_O#r!ZO#{![O$O!]O$b!`O$d!bO$f!cO'R$UO'[kO'_UO'hcO'riO(QdO~P)xOZ#RO~O!P(^O!e(VO~P2gOPoOQ!QOSVOTVOZeO[lOd[OsVOtVOuVOw!PO}mO!U#bO!W#cO!X!^O!Z!YO!liO!qgO!tiO#Y!_O#r!ZO#{![O$O!]O$b!`O$d!bO$f!cO'R$UO'[kO'_UO'hcO'riO(QdO~P)xOZbXdlXwjX}jX!tbX'rbX~OP!RX!S!RX!e!RX'q!RX's!RX!O!RXo!RXy!RX!P!RXX!RX!Z!RX#T!RXv!RX~P!IxOZ'TXd'YXw'lX}'lX!t'TX'r'TX~OP!`X!S!`X!e!`X's!`X!O!`Xo!`Xy!`X!P!`XX!`X!Z!`X#T!`Xv!`X~P!KZOT(`Ou(`O~O!t(aO'r(aOP!^X!S!^X!e!^X's!^X!O!^Xo!^Xy!^X!P!^XX!^X!Z!^X#T!^Xv!^X~O^9yO_9yO`:QOa:QO'U9wO~Od(dO~O'q(eOP'iX!S'iX!e'iX's'iX!O'iXo'iXy'iX!P'iXX'iX!Z'iX#T'iXv'iX~O!j&bO!P'mP~P<cOw(jO}(iO~O!j&bOX'mP~P<cO!j(nO~P<cOZ'oO!t(aO'r(aO~O!S(pO's(oOP$WX!e$WX~O!e(qOP(YX~OP(sO~OP!aX!S!aX!e!aX's!aX!O!aXo!aXy!aX!P!aXX!aX!Z!aX#T!aXv!aX~P!KZOy$UaX$Ua!e$Ua!P$Uav$Ua#T$Ua~P2gO!l({O'R#VO'U(wOv(ZP~OQ!QO^#TO_#TO`#TOa#]Od#ZOg!nOyvO|!VO!Q!dO!U#^O!W!lO!]!pO$i!eO$m!fO$q!gO$s!hO%T!iO%V!jO%Z!kO%]!lO%^!mO%f!oO%j!qO%s!rO'R`O'U#SO~Ov)SO~P#$]Oy)UO~PEsO%^)VO~PGaOa)YO~P!1iO%f)_O~PEvO_)`O'U&cO~O!i)eO!j)dO'U&cO~O'_UO!Q(^X!U(^X!W(^X$q(^X%](^X%^(^X~Ov%uX~P2gOv)fO~PGyOv)fO~Ov)fO~P]OQiXQ'YXZiXd'YX}iX#piX(PiX~ORiXwiX$fiX$|iX[iXoiXyiX!liX!qiX!tiX#QiX#RiX'hiX'riX'siX'xiX'yiX'ziX'{iX'|iX'}iX(OiX(QiX(RiX(TiX!PiX!eiXXiXPiXviX!SiX#TiX~P#(_OQjXQlXRjXZjXdlX}jX#pjX(PjXwjX$fjX$|jX[jXojXyjX!ljX!qjX!tjX#QjX#RjX'hjX'rjX'sjX'xjX'yjX'zjX'{jX'|jX'}jX(OjX(QjX(RjX(TjX!PjX!ejXXjX!SjXPjXvjX#TjX~O%^)iO~PGaOQ']Od)jO~O^)lO_)lO`)lOa)lO'U%dO~Od)pO~OQ']OZ)tO})rOR'VX#p'VX(P'VXw'VX$f'VX$|'VX['VXo'VXy'VX!l'VX!q'VX!t'VX#Q'VX#R'VX'h'VX'r'VX's'VX'x'VX'y'VX'z'VX'{'VX'|'VX'}'VX(O'VX(Q'VX(R'VX(T'VX!P'VX!e'VXX'VXP'VXv'VX!S'VX#T'VX~OQ!QO^:iO_:eO`TOaTOd:hO%^)iO'U:fO~PGaOQ!QOZ%rO[%qO^%vO_%cO`TOaTOd%jOg%yO}%pO!j)xO!q%oO$f%wO%^%xO&W%{O'U%dO'[%eO(Q%zO~PGaOQ!QOZ%rO[%qO^%vO_%cO`TOaTOd%jOg%yO}%pO!P){O!q%oO$f%wO%^%xO&W%{O'U%dO'[%eO(Q%zO~PGaO(P)}O~OR*PO#p*QO(P*OO~OQhXQ'YXZhXd'YX}hX(PhX~ORhX#phXwhX$fhX$|hX[hXohXyhX!lhX!qhX!thX#QhX#RhX'hhX'rhX'shX'xhX'yhX'zhX'{hX'|hX'}hX(OhX(QhX(RhX(ThX!PhX!ehXXhXPhXvhX!ShX#ThX~P#4_OQ*RO~O})rO~OQ!QO^%vO_%cO`TOaTOd%jO$f%wO%^%xO'U%dO~PGaO!Q*UO!j*UO~O^*XO`*XOa*XO!O*YO~OQ&oOZ*ZO[%qO^%vO_%cO`TOaTOd%jOg%yO}%pO!q%oO$f%wO%^%xO&W%{O'U%dO'[%eO(Q%zO~PGaO[#}Oo:aO}#zO!l:bO!q#jO!t:bO#Q:aO#R:^O#p$OO'h#gO'r:bO's#lO'x#hO'y#iO'z#iO'{#kO'|#nO'}#mO(O#|O(P#gO(Q#hO(R#fO(T#hO~Ow'eX~P#9jOy#qaX#qa!e#qa!P#qav#qa#T#qa~P2gOy#zaX#za!e#za!P#zav#za#T#za~P2gOPoOQ!QOSVOTVOZeO[lOd[OsVOtVOuVOw!PO}mO!S&_O!U#bO!W#cO!X!^O!Z!YO!liO!qgO!tiO#Y!_O#r!ZO#{![O$O!]O$b!`O$d!bO$f!cO'[kO'_UO'hcO'riO(QdOo#zay#za#Q#za#R#za#p#za's#za'x#za'y#za'z#za'{#za'|#za'}#za(O#za(P#za(R#za(T#zaX#za!e#za!P#zav#za#T#za~P)xOPoOQ!QOSVOTVOZeO[lOd[OsVOtVOuVOw!PO}mO!U#bO!W#cO!X!^O!Z!YO!liO!qgO!tiO#S*dO#Y!_O#r!ZO#{![O$O!]O$b!`O$d!bO$f!cO'[kO'_UO'hcO'riO(QdO~P)xOw*eO~P#9jO$b*hO$d*iO$f*jO~O!O*kO's(oO~O!S*mO~O'U*nO~Ow$yOy*pO~O'U*qO~OQ*tOw*uOy*xO}*vO$|*wO~OQ*tOw*uO$|*wO~OQ*tOw+PO$|*wO~OQ*tOo+UOy+WO!S+TO~OQ*tO}+YO~OQ!QOZ%rO[%qO^%vO`TOaTOd%jOg%yO}%pO!U!lO!W!lO!q%oO$f%wO$q%[O%]!lO%^%xO&W%{O'U%dO'[%eO(Q%zO~OR+aO_+]O!Q+bO~P#D_O_%cO!Q!lOw&UX$|&UX(P&UX~P#D_Ow$yO$f+gO$|*wO(P*OO~OQ!QOZ*ZO[%qO^%vO_%cO`TOaTOd%jOg%yO}%pO!q%oO$f%wO%^%xO&W%{O'U%dO'[%eO(Q%zO~PGaOQ*tOw$yO!S+TO$|*wO~Oo+mOy+lO!S+nO's(oO~OdlXy!RX#pbXv!RX!e!RX~Od'YXy(mX#p'TXv(mX!e(mX~Od+pO~O^#TO_#TO`#TOa'jOw&|O'U&vO(Q+uO~Ov(oP~P!3|O#p+zO~Oy+{O~O!S+|O~O'O!sO'P'VO'Q,OO~Od,PO~OSVOTVO_%cOsVOtVOuVOw!PO!Q!lO'_UO~P#D_OS,_OT,_OZ,_O['bO_,ZOd,_Oo,_Os,_Ou,_Ow'cOy,_O}'dO!S,_O!e,_O!l,_O!q,]O!t,_O!{,_O#Q,_O#R,_O#S,_O#T,_O'R,_O'[%eO'_UO'h,[O's,]O'v,`O'x,[O'y,]O'z,]O'{,]O'|,^O'},^O(O,_O(P,aO(Q,aO(R,bO~OX,XO~P#K_Ov,dO~P#K_O!P,gO~P#K_Oo'ti#Q'ti#R'ti#p'ti's'ti'x'ti'y'ti'z'ti'{'ti'|'ti'}'ti(O'ti(P'ti(R'ti(T'ti~Oy,hO['ti}'ti!l'ti!q'ti!t'ti'h'ti'r'ti(Q'tiv'ti~P#N^OP$giQ$giS$giT$giZ$gi[$gi^$gi_$gi`$gia$gid$gig$gis$git$giu$giw$giy$gi|$gi}$gi!Q$gi!U$gi!W$gi!X$gi!Z$gi!]$gi!l$gi!q$gi!t$gi#Y$gi#r$gi#{$gi$O$gi$b$gi$d$gi$f$gi$i$gi$m$gi$q$gi$s$gi%T$gi%V$gi%Z$gi%]$gi%^$gi%f$gi%j$gi%s$gi&{$gi'R$gi'U$gi'[$gi'_$gi'h$gi'r$gi(Q$giv$gi~P#N^OX,iO~Oo,jO},kOX]X!P]X!e]X~Oy#ciX#ci!e#ci!P#civ#ci#T#ci~P2gO[#}O}#zO'x#hO(O#|O(Q#hO(R#fO(T#hOo#eiy#ei!l#ei!q#ei!t#ei#Q#ei#R#ei#p#ei'r#ei's#ei'y#ei'z#ei'{#ei'|#ei'}#eiX#ei!e#ei!P#eiv#ei#T#ei~O'h#ei(P#ei~P$&sO[#}O}#zO(O#|O(R#fOo#eiy#ei!l#ei!q#ei!t#ei#Q#ei#R#ei#p#ei'r#ei's#ei'y#ei'z#ei'{#ei'|#ei'}#eiX#ei!e#ei!P#eiv#ei#T#ei~O'h#ei'x#ei(P#ei(Q#ei(T#eiw#ei~P$(tO'h#gO(P#gO~P$&sO[#}O}#zO'h#gO'x#hO'y#iO'z#iO(O#|O(P#gO(Q#hO(R#fO(T#hOo#eiy#ei!l#ei!t#ei#Q#ei#R#ei#p#ei'r#ei's#ei'{#ei'|#ei'}#eiX#ei!e#ei!P#eiv#ei#T#ei~O!q#ei~P$+SO!q#jO~P$+SO[#}O}#zO!q#jO'h#gO'x#hO'y#iO'z#iO'{#kO(O#|O(P#gO(Q#hO(R#fO(T#hOo#eiy#ei!l#ei!t#ei#Q#ei#R#ei#p#ei'r#ei'|#ei'}#eiX#ei!e#ei!P#eiv#ei#T#ei~O's#ei~P$-[O's#lO~P$-[O[#}O}#zO!q#jO#R#uO'h#gO's#lO'x#hO'y#iO'z#iO'{#kO(O#|O(P#gO(Q#hO(R#fO(T#hOo#eiy#ei!l#ei!t#ei#Q#ei#p#ei'r#ei'|#eiX#ei!e#ei!P#eiv#ei#T#ei~O'}#ei~P$/dO'}#mO~P$/dO[#}O}#zO!q#jO'h#gO's#lO'x#hO'y#iO'z#iO'{#kO'|#nO'}#mO(O#|O(P#gO(Q#hO(R#fO(T#hO!l#ni!t#ni#p#ni'r#ni~Oo#xO#Q#xO#R#uOy#niX#ni!e#ni!P#niv#ni#T#ni~P$1lO[#}O}#zO!q#jO'h#gO's#lO'x#hO'y#iO'z#iO'{#kO'|#nO'}#mO(O#|O(P#gO(Q#hO(R#fO(T#hO!l#si!t#si#p#si'r#si~Oo#xO#Q#xO#R#uOy#siX#si!e#si!P#siv#si#T#si~P$3mOPoOQ!QOSVOTVOZeO[lOd[OsVOtVOuVOw!PO}mO!U#bO!W#cO!X!^O!Z!YO!liO!qgO!tiO#Y!_O#r!ZO#{![O$O!]O$b!`O$d!bO$f!cO'R#VO'[kO'_UO'hcO'riO(QdO~P)xO!e,rO!P(VX~P2gO!P,tO~OX,uO~P2gOPoOQ!QOSVOTVOZeO[lOd[OsVOtVOuVOw!PO}mO!U#bO!W#cO!X!^O!Z!YO!liO!qgO!tiO#Y!_O#r!ZO#{![O$O!]O$b!`O$d!bO$f!cO'[kO'_UO'hcO'riO(QdOX&fX!e&fX!P&fX~P)xO!e(VOX(Wa~Oy,yO!e(VOX(WX~P2gOX,zO~O!P,{O!e(VO~O!P,}O!e(VO~P2gOSVOTVOsVOtVOuVO'_UO'h$[O~P!6POP!baZca!S!ba!e!ba!tca'rca's!ba!O!bao!bay!ba!P!baX!ba!Z!ba#T!bav!ba~O!e-SO's(oO!P'nXX'nX~O!P-UO~O!i-_O!j-^O!l-ZO'U-WOv'oP~OX-`O~O_%cO!Q!lO~P#D_O!j-fOP&gX!e&gX~P<cO!e(qOP(Ya~O!S-hO's(oOP$Wa!e$Wa~Ow!PO(P*OO~OvbX!S!kX!ebX~O'R#VO'U(wO~O!S-lO~O!e-nOv([X~Ov-pO~Ov-rO~P,cOv-rO~P#$]O_-tO'U&cO~O!S-uO~Ow$yOy-vO~OQ*tOw*uOy-yO}*vO$|*wO~OQ*tOo.TO~Oy.^O~O!S._O~O!j.aO'U&cO~Ov.bO~Ov.bO~PGyOQ']O^'Xa_'Xa`'Xaa'Xa'U'Xa~Od.fO~OQ'YXQ'lXR'lXZ'lXd'YX}'lX#p'lX(P'lXw'lX$f'lX$|'lX['lXo'lXy'lX!l'lX!q'lX!t'lX#Q'lX#R'lX'h'lX'r'lX's'lX'x'lX'y'lX'z'lX'{'lX'|'lX'}'lX(O'lX(Q'lX(R'lX(T'lX!P'lX!e'lXX'lXP'lXv'lX!S'lX#T'lX~OQ!QOZ%rO[%qO^.qO_%cO`TOaTOd%jOg%yO}%pO!j.rO!q.oO!t.jO#V.lO$f%wO%^%xO&W%{O'R#VO'U%dO'[%eO(Q%zO!P(sP~PGaO#S.sOR%wa#p%wa(P%waw%wa$f%wa$|%wa[%wao%way%wa}%wa!l%wa!q%wa!t%wa#Q%wa#R%wa'h%wa'r%wa's%wa'x%wa'y%wa'z%wa'{%wa'|%wa'}%wa(O%wa(Q%wa(R%wa(T%wa!P%wa!e%waX%waP%wav%wa!S%wa#T%wa~O%^.uO~PGaO(P*OOR&Oa#p&Oaw&Oa$f&Oa$|&Oa[&Oao&Oay&Oa}&Oa!l&Oa!q&Oa!t&Oa#Q&Oa#R&Oa'h&Oa'r&Oa's&Oa'x&Oa'y&Oa'z&Oa'{&Oa'|&Oa'}&Oa(O&Oa(Q&Oa(R&Oa(T&Oa!P&Oa!e&OaX&OaP&Oav&Oa!S&Oa#T&Oa~O_%cO!Q!lO!j.wO(P)}O~P#D_O!e.xO(P*OO!P(uX~O!P.zO~OX.{Oy.|O(P*OO~O'[%eOR(qP~OQ']O})rORfa#pfa(Pfawfa$ffa$|fa[faofayfa!lfa!qfa!tfa#Qfa#Rfa'hfa'rfa'sfa'xfa'yfa'zfa'{fa'|fa'}fa(Ofa(Qfa(Rfa(Tfa!Pfa!efaXfaPfavfa!Sfa#Tfa~OQ']O})rOR&Va#p&Va(P&Vaw&Va$f&Va$|&Va[&Vao&Vay&Va!l&Va!q&Va!t&Va#Q&Va#R&Va'h&Va'r&Va's&Va'x&Va'y&Va'z&Va'{&Va'|&Va'}&Va(O&Va(Q&Va(R&Va(T&Va!P&Va!e&VaX&VaP&Vav&Va!S&Va#T&Va~O!P/TO~Ow$yO$f/YO$|*wO(P*OO~OQ!QOZ/ZO[%qO^%vO_%cO`TOaTOd%jOg%yO}%pO!q%oO$f%wO%^%xO&W%{O'U%dO'[%eO(Q%zO~PGaOo/]O's(oO~O#W/^OP!YiQ!YiS!YiT!YiZ!Yi[!Yi^!Yi_!Yi`!Yia!Yid!Yig!Yio!Yis!Yit!Yiu!Yiw!Yiy!Yi|!Yi}!Yi!Q!Yi!U!Yi!W!Yi!X!Yi!Z!Yi!]!Yi!l!Yi!q!Yi!t!Yi#Q!Yi#R!Yi#Y!Yi#p!Yi#r!Yi#{!Yi$O!Yi$b!Yi$d!Yi$f!Yi$i!Yi$m!Yi$q!Yi$s!Yi%T!Yi%V!Yi%Z!Yi%]!Yi%^!Yi%f!Yi%j!Yi%s!Yi&{!Yi'R!Yi'U!Yi'[!Yi'_!Yi'h!Yi'r!Yi's!Yi'x!Yi'y!Yi'z!Yi'{!Yi'|!Yi'}!Yi(O!Yi(P!Yi(Q!Yi(R!Yi(T!YiX!Yi!e!Yi!P!Yiv!Yi!i!Yi!j!Yi#V!Yi#T!Yi~Oy#ziX#zi!e#zi!P#ziv#zi#T#zi~P2gOy$UiX$Ui!e$Ui!P$Uiv$Ui#T$Ui~P2gOv/dO!j&bO'R`O~P<cOw/mO}/lO~Oy!RX#pbX~Oy/nO~O#p/oO~OR+aO_+cO!Q/rO'U&iO'[%eO~Oa/yO|!VO'R#VO'U(QOv(cP~OQ!QOZ%rO[%qO^%vO_%cO`TOa/yOd%jOg%yO|!VO}%pO!q%oO$f%wO%^%xO&W%{O'R#VO'U%dO'[%eO(Q%zO!P(eP~PGaOQ!QOZ%rO[%qO^%vO_%cO`TOaTOd%jOg%yO}%pO!q%oO$f0UO%^%xO&W%{O'U%dO'[%eO(Q%zOw(`Py(`P~PGaOw*uO~Oy-yO$|*wO~Oa/yO|!VO'R#VO'U*nOv(gP~Ow+PO~OQ!QOZ%rO[%qO^%vO_%cO`TOaTOd%jOg%yO}%pO!q%oO$f0UO%^%xO&W%{O'U%dO'[%eO(Q%zO(R0_O~PGaOy0cO~OQ!QOSVOTVO[$gO^0kO_$ZO`:QOa:QOd$aOsVOtVOuVO}$eO!i$qO!j0lO!l$lO!q0dO!t0gO'R#VO'U$YO'[%eO'_UO'h$[O~O#V0mO!P(jP~P%1qOw!POy0oO#S0qO$|*wO~OR0tO!e0rO~P#(_OR0tO!S+TO!e0rO(P)}O~OR0tOo0vO!S+TO!e0rOQ'WXZ'WX}'WX#p'WX(P'WX~OR0tOo0vO!e0rO~OR0tO!e0rO~O$f/YO(P*OO~Ow$yO~Ow$yO$|*wO~Oo0|Oy0{O!S0}O's(oO~O!e1OOv(pX~Ov1QO~O^#TO_#TO`#TOa'jOw&|O'U&vO(Q1UO~Oo1XOQ'WXR'WXZ'WX}'WX!e'WX(P'WX~O!e1YO(P*OOR'ZX~O!e1YOR'ZX~O!e1YO(P)}OR'ZX~OR1[O~OX1]O~P#K_O!S1_OS'wXT'wXX'wXZ'wX['wX_'wXd'wXo'wXs'wXu'wXw'wXy'wX}'wX!e'wX!l'wX!q'wX!t'wX!{'wX#Q'wX#R'wX#S'wX#T'wX'R'wX'['wX'_'wX'h'wX's'wX'v'wX'x'wX'y'wX'z'wX'{'wX'|'wX'}'wX(O'wX(P'wX(Q'wX(R'wXv'wX!P'wX~O}1`O~Ov1aO~P#K_O!P1bO~P#K_OSVOTVOsVOtVOuVO'_UO~OSVOTVOsVOtVOuVO'_UO!P(vP~P!6POX1gO~Oy,hO~O!e,rO!P(Va~P2gOPoOQ!QOZeO[lO^RO_RO`ROaROd[Ow!PO}mO!U#bO!W#cO!X!^O!Z!YO!liO!qgO!tiO#Y!_O#r!ZO#{![O$O!]O$b!`O$d!bO$f!cO'R#VO'UQO'[kO'hcO'riO(QdO!P&eX!e&eX~P%;dO!e,rO!P(Va~OX&fa!e&fa!P&fa~P2gOX1lO~P2gOPoOQ!QOZeO[lO^RO_RO`ROaROd[Ow!PO}mO!U#bO!W#cO!X!^O!Z!YO!liO!qgO!tiO#Y!_O#r!ZO#{![O$O!]O$b!`O$d!bO$f!cO'UQO'[kO'hcO'riO(QdO~P%;dO!P1nO!e(VO~OP!biZci!S!bi!e!bi!tci'rci's!bi!O!bio!biy!bi!P!biX!bi!Z!bi#T!biv!bi~O's(oOP!oi!S!oi!e!oi!O!oio!oiy!oi!P!oiX!oi!Z!oi#T!oiv!oi~O!j&bO!P&`X!e&`XX&`X~P<cO!e-SO!P'naX'na~O!P1rO~Ov!RX!S!kX!e!RX~O!S1sO~O!e1tOv'pX~Ov1vO~O'U-WO~O!j1yO'U-WO~O(P*OOP$Wi!e$Wi~O!S1zO's(oOP$XX!e$XX~O!S1}O~Ov$_a!e$_a~P2gO!l({O'R#VO'U(wOv&hX!e&hX~O!e-nOv([a~Ov2RO~P,cOy2VO~O#p2WO~Oy2XO$|*wO~Ow*uOy2XO}*vO$|*wO~Oo2bO~Ow!POy2gO#S2iO$|*wO~O!S2kO~Ov2mO~O#S2nOR%wi#p%wi(P%wiw%wi$f%wi$|%wi[%wio%wiy%wi}%wi!l%wi!q%wi!t%wi#Q%wi#R%wi'h%wi'r%wi's%wi'x%wi'y%wi'z%wi'{%wi'|%wi'}%wi(O%wi(Q%wi(R%wi(T%wi!P%wi!e%wiX%wiP%wiv%wi!S%wi#T%wi~Od2oO~O^2rO!j.rO!q2sO'R#VO'[%eO~O(P*OO!P%{X!e%{X~O!e2tO!P(tX~O!P2vO~OQ!QOZ%rO[%qO^2xO_%cO`TOaTOd%jOg%yO}%pO!j2yO!q%oO$f%wO%^%xO&W%{O'U%dO'[%eO(Q%zO~PGaO^2zO!j2yO(P)}O~O!P%aX!e%aX~P#4_O^2zO~O(P*OOR&Oi#p&Oiw&Oi$f&Oi$|&Oi[&Oio&Oiy&Oi}&Oi!l&Oi!q&Oi!t&Oi#Q&Oi#R&Oi'h&Oi'r&Oi's&Oi'x&Oi'y&Oi'z&Oi'{&Oi'|&Oi'}&Oi(O&Oi(Q&Oi(R&Oi(T&Oi!P&Oi!e&OiX&OiP&Oiv&Oi!S&Oi#T&Oi~O_%cO!Q!lO!P&yX!e&yX~P#D_O!e.xO!P(ua~OR3RO(P*OO~O!e3SOR(rX~OR3UO~O(P*OOR&Pi#p&Piw&Pi$f&Pi$|&Pi[&Pio&Piy&Pi}&Pi!l&Pi!q&Pi!t&Pi#Q&Pi#R&Pi'h&Pi'r&Pi's&Pi'x&Pi'y&Pi'z&Pi'{&Pi'|&Pi'}&Pi(O&Pi(Q&Pi(R&Pi(T&Pi!P&Pi!e&PiX&PiP&Piv&Pi!S&Pi#T&Pi~O!P3VO~O$f3WO(P*OO~Ow$yO$f3WO$|*wO(P*OO~Ow!PO!Z!YO~O!Z3bO#T3`O's(oO~O!j&bO'R#VO~P<cOv3fO~Ov3fO!j&bO'R`O~P<cO!O3iO's(oO~Ow!PO~P#9jOo3lOy3kO(P*OO~OS,_OT,_OZ,_O['bO_3mOd,_Oo,_Os,_Ou,_Ow'cOy,_O}'dO!S,_O!e,_O!l,_O!q,]O!t,_O!{,_O#Q,_O#R,_O#S,_O#T,_O'R,_O'[%eO'_UO'h,[O's,]O'v,`O'x,[O'y,]O'z,]O'{,]O'|,^O'},^O(O,_O(P,aO(Q,aO(R,bO~O!P3qO~P&']Ov3tO~P&']OR0tO!S+TO!e0rO~OR0tOo0vO!S+TO!e0rO~Oa/yO|!VO'R#VO'U(QO~O!S3wO~O!e3yOv(dX~Ov3{O~OQ!QOZ%rO[%qO^%vO_%cO`TOa/yOd%jOg%yO|!VO}%pO!q%oO$f%wO%^%xO&W%{O'R#VO'U%dO'[%eO(Q%zO~PGaO!e4OO(P*OO!P(fX~O!P4QO~O!S4RO(P)}O~O!S+TO(P*OO~O!e4TOw(aXy(aX~OQ4VO~Oy2XO~Oa/yO|!VO'R#VO'U*nO~Oo4YOw*uO}*vOv%XX!e%XX~O!e4]Ov(hX~Ov4_O~O(P4aOy(_Xw(_X$|(_XR(_Xo(_X!e(_X~Oy4cO(P*OO~OQ!QO[$gO^4dO_$ZO`:QOa:QOd$aO}$eO!i$qO!j4eO!l$lO!q$hO#V$lO'U$YO'[%eO'h$[O~P%;dO!S4gO's(oO~O#V4iO~P%1qO!e4jO!P(kX~O!P4lO~O!P%aX!S!aX!e%aX's!aX~P!KZOQ!QO[$gO^4dO_$ZO`:QOa:QOd$aO}$eO!i$qO!j&bO!l$lO!q$hO#V$lO'U$YO'h$[O~P%;dO!e4jO!P(kX!S'fX's'fX~O^2zO!j2yO~Ow!POy2gO~O_4rO!Q/rO'U&iO'[%eOR&lX!e&lX~OR4tO!e0rO~O!S4vO~Ow$yO$|*wO(P*OO~Oy4wO~P2gOo4xOy4wO(P*OO~Ov&uX!e&uX~P!3|O!e1OOv(pa~Oo5OOy4}O(P*OO~OSVOTVO_%cOsVOtVOuVOw!PO!Q!lO'_UOR&vX!e&vX~P#D_O!e1YOR'Za~O!{5UO~O!P5VO~P#K_O!e5XO!P(wX~O!P5ZO~O!e,rO!P(Vi~OPoOQ!QOZeO[lO^RO_RO`ROaROd[Ow!PO}mO!U#bO!W#cO!X!^O!Z!YO!liO!qgO!tiO#Y!_O#r!ZO#{![O$O!]O$b!`O$d!bO$f!cO'R#VO'UQO'[kO'hcO'riO(QdO~P%;dO!P&ea!e&ea~P2gOX5]O~P2gOP!bqZcq!S!bq!e!bq!tcq'rcq's!bq!O!bqo!bqy!bq!P!bqX!bq!Z!bq#T!bqv!bq~O's(oO!P&`a!e&`aX&`a~O!i-_O!j-^O!l5_O'U-WOv&aX!e&aX~O!e1tOv'pa~O!S5aO~O!S5eO's(oOP$Xa!e$Xa~O(P*OOP$Wq!e$Wq~Ov$^i!e$^i~P2gOw!POy5gO#S5iO$|*wO~Oo5lOy5kO(P*OO~Oy5nO~Oy5nO$|*wO~Oy5rO(P*OO~Ow!POy5gO~Oo5yOy5xO(P*OO~O!S5{O~O!e2tO!P(ta~O^2zO!j2yO'[%eO~OQ!QOZ%rO[%qO^.qO_%cO`TOaTOd%jOg%yO}%pO!j.rO!q.oO!t6PO#V6RO$f%wO%^%xO&W%{O'R#VO'U%dO'[%eO(Q%zO!P&xX!e&xX~PGaOQ!QOZ%rO[%qO^6TO_%cO`TOaTOd%jOg%yO}%pO!j6UO!q%oO$f%wO%^%xO&W%{O'U%dO'[%eO(P)}O(Q%zO~PGaO!P%aa!e%aa~P#4_O^6VO~O#S6WOR%wq#p%wq(P%wqw%wq$f%wq$|%wq[%wqo%wqy%wq}%wq!l%wq!q%wq!t%wq#Q%wq#R%wq'h%wq'r%wq's%wq'x%wq'y%wq'z%wq'{%wq'|%wq'}%wq(O%wq(Q%wq(R%wq(T%wq!P%wq!e%wqX%wqP%wqv%wq!S%wq#T%wq~O(P*OOR&Oq#p&Oqw&Oq$f&Oq$|&Oq[&Oqo&Oqy&Oq}&Oq!l&Oq!q&Oq!t&Oq#Q&Oq#R&Oq'h&Oq'r&Oq's&Oq'x&Oq'y&Oq'z&Oq'{&Oq'|&Oq'}&Oq(O&Oq(Q&Oq(R&Oq(T&Oq!P&Oq!e&OqX&OqP&Oqv&Oq!S&Oq#T&Oq~O(P*OO!P&ya!e&ya~OX6XO~P2gO'[%eOR&wX!e&wX~O!e3SOR(ra~O$f6_O(P*OO~Ow![q~P#9jO#T6bO~O!Z3bO#T6bO's(oO~Ov6gO~O!S1_O#T'wX~O#T6kO~Oy6lO!P6mO~O!P6mO~P&']Oy6pO~Ov6pOy6lO~Ov6pO~P&']Oy6rO~O!e3yOv(da~O!S6uO~Oa/yO|!VO'R#VO'U(QOv&oX!e&oX~O!e4OO(P*OO!P(fa~OQ!QOZ%rO[%qO^%vO_%cO`TOa/yOd%jOg%yO|!VO}%pO!q%oO$f%wO%^%xO&W%{O'R#VO'U%dO'[%eO(Q%zO!P&pX!e&pX~PGaO!e4OO!P(fa~OQ!QOZ%rO[%qO^%vO_%cO`TOaTOd%jOg%yO}%pO!q%oO$f0UO%^%xO&W%{O'U%dO'[%eO(Q%zOw&nX!e&nXy&nX~PGaO!e4TOw(aay(aa~O!e4]Ov(ha~Oo7XOv%Xa!e%Xa~Oo7XOw*uO}*vOv%Xa!e%Xa~Oa/yO|!VO'R#VO'U*nOv&qX!e&qX~O(P*OOy$xaw$xa$|$xaR$xao$xa!e$xa~O(P4aOy(_aw(_a$|(_aR(_ao(_a!e(_a~O!P%aa!S!aX!e%aa's!aX~P!KZOQ!QO[$gO^7`O_$ZO`:QOa:QOd$aO}$eO!i$qO!j&bO!l$lO!q$hO#V$lO'U$YO'h$[O~P%;dO^6VO!j6UO~O!e4jO!P(ka~O!e4jO!P(ka!S'fX's'fX~OQ!QO[$gO^0kO_$ZO`:QOa:QOd$aO}$eO!i$qO!j0lO!l$lO!q0dO!t7dO#V7fO'R#VO'U$YO'[%eO'h$[O!P&sX!e&sX~P%;dO!S7hO's(oO~Ow!POy5gO$|*wO(P*OO~O!S+TOR&la!e&la~Oo0vO!S+TOR&la!e&la~Oo0vOR&la!e&la~O(P*OOR$yi!e$yi~Oy7kO~P2gOo7lOy7kO(P*OO~O(P*OORni!eni~O(P*OOR&va!e&va~O(P)}OR&va!e&va~OS,_OT,_OZ,_O_,_Od,_Oo,_Os,_Ou,_Oy,_O!S,_O!e,_O!l,_O!q,]O!t,_O!{,_O#Q,_O#R,_O#S,_O#T,_O'R,_O'[%eO'_UO'h,[O's,]O'x,[O'y,]O'z,]O'{,]O'|,^O'},^O(O,_O~O(P7nO(Q7nO(R7nO~P''`O!P7pO~P#K_OSVOTVOsVOtVOuVO'_UO!P&zX!e&zX~P!6PO!e5XO!P(wa~O!P&ei!e&ei~P2gO's(oOv!hi!e!hi~O!S7tO~O(P*OOP$Xi!e$Xi~Ov$^q!e$^q~P2gOw!POy7vO~Ow!POy7vO#S7yO$|*wO~Oy7{O~Oy7|O~Oy7}O(P*OO~Ow!POy7vO$|*wO(P*OO~Oo8SOy8RO(P*OO~O!e2tO!P(ti~O(P*OO!P%}X!e%}X~O!P%ai!e%ai~P#4_O^8VO~O!e8[O['cXv$`i}'cX!l'cX!q'cX!t'cX'h'cX'r'cX(Q'cX~P@[OQ#[iS#[iT#[i[#[i^#[i_#[i`#[ia#[id#[is#[it#[iu#[iv$`i}#[i!i#[i!j#[i!l#[i!q#[i!t'cX#V#[i'R#[i'U#[i'_#[i'h#[i'r'cX(Q'cX~P@[O#T#^a~P2gO#T8_O~O!Z3bO#T8`O's(oO~Ov8cO~Oy8eO~P2gOy8gO~Oy6lO!P8hO~Ov8gOy6lO~O!e3yOv(di~O(P*OOv%Qi!e%Qi~O!e4OO!P(fi~O!e4OO(P*OO!P(fi~O(P*OO!P&pa!e&pa~O(P8oOw(bX!e(bXy(bX~O(P*OO!S$wiy$wiw$wi$|$wiR$wio$wi!e$wi~O!e4]Ov(hi~Ov%Xi!e%Xi~P2gOo8rOv%Xi!e%Xi~O!P%ai!S!aX!e%ai's!aX~P!KZO(P*OO!P%`i!e%`i~O!e4jO!P(ki~OQ!QO[$gO^0kO_$ZO`:QOa:QOd$aO}$eO!i$qO!j0lO!l$lO!q0dO!t7dO#V8uO'R#VO'U$YO'[%eO'h$[O~P%;dO!P&sa!S'fX!e&sa's'fX~O(P*OOR$zq!e$zq~Oy8wO~P2gOy8RO~P2gO(P8yO(Q8yO(R8yO~O(P8yO(Q8yO(R8yO~P''`O's(oOv!hq!e!hq~O(P*OOP$Xq!e$Xq~Ow!POy8|O$|*wO(P*OO~Ow!POy8|O~Oy9PO~P2gOy9RO~P2gOo9TOy9RO(P*OO~OQ#[qS#[qT#[q[#[q^#[q_#[q`#[qa#[qd#[qs#[qt#[qu#[qv$`q}#[q!i#[q!j#[q!l#[q!q#[q#V#[q'R#[q'U#[q'_#[q'h#[q~O!e9WO['cXv$`q}'cX!l'cX!q'cX!t'cX'h'cX'r'cX(Q'cX~P@[Oo'cX!t'cX#Q'cX#R'cX#p'cX'r'cX's'cX'x'cX'y'cX'z'cX'{'cX'|'cX'}'cX(O'cX(P'cX(Q'cX(R'cX(T'cX~P'9OO#T9]O~O!Z3bO#T9]O's(oO~Oy9_O~O(P*OOv%Qq!e%Qq~O!e4OO!P(fq~O(P*OO!P&pi!e&pi~O(P8oOw(ba!e(bay(ba~Ov%Xq!e%Xq~P2gO!P&si!S'fX!e&si's'fX~O(P*OO!P%`q!e%`q~Oy9dO~P2gO(P9eO(Q9eO(R9eO~O's(oOv!hy!e!hy~Ow!POy9fO~Ow!POy9fO$|*wO(P*OO~Oy9hO~P2gOQ#[yS#[yT#[y[#[y^#[y_#[y`#[ya#[yd#[ys#[yt#[yu#[yv$`y}#[y!i#[y!j#[y!l#[y!q#[y#V#[y'R#[y'U#[y'_#[y'h#[y~O!e9kO['cXv$`y}'cX!l'cX!q'cX!t'cX'h'cX'r'cX(Q'cX~P@[Oo'cX!t'cX#Q'cX#R'cX#p'cX'r'cX's'cX'x'cX'y'cX'z'cX'{'cX'|'cX'}'cX(O'cX(P'cX(Q'cX(R'cX(T'cX~P'?}O!e9lO['cX}'cX!l'cX!q'cX!t'cX'h'cX'r'cX(Q'cX~P@[OQ#[iS#[iT#[i[#[i^#[i_#[i`#[ia#[id#[is#[it#[iu#[i}#[i!i#[i!j#[i!l#[i!q#[i!t'cX#V#[i'R#[i'U#[i'_#[i'h#[i'r'cX(Q'cX~P@[O#T9oO~O(P*OO!P&pq!e&pq~Ov%Xy!e%Xy~P2gOw!POy9pO~Oy9qO~P2gOQ#[!RS#[!RT#[!R[#[!R^#[!R_#[!R`#[!Ra#[!Rd#[!Rs#[!Rt#[!Ru#[!Rv$`!R}#[!R!i#[!R!j#[!R!l#[!R!q#[!R#V#[!R'R#[!R'U#[!R'_#[!R'h#[!R~O!e9rO['cX}'cX!l'cX!q'cX!t'cX'h'cX'r'cX(Q'cX~P@[OQ#[qS#[qT#[q[#[q^#[q_#[q`#[qa#[qd#[qs#[qt#[qu#[q}#[q!i#[q!j#[q!l#[q!q#[q!t'cX#V#[q'R#[q'U#[q'_#[q'h#[q'r'cX(Q'cX~P@[O!e9uO['cX}'cX!l'cX!q'cX!t'cX'h'cX'r'cX(Q'cX~P@[OQ#[yS#[yT#[y[#[y^#[y_#[y`#[ya#[yd#[ys#[yt#[yu#[y}#[y!i#[y!j#[y!l#[y!q#[y!t'cX#V#[y'R#[y'U#[y'_#[y'h#[y'r'cX(Q'cX~P@[OwbX~P$|OwjX}jX!tbX'rbX~P!6mOZ'TXd'YXo'TXw'lX!t'TX'r'TX's'TX~O['TXd'TXw'TX}'TX!l'TX!q'TX#Q'TX#R'TX#p'TX'h'TX'x'TX'y'TX'z'TX'{'TX'|'TX'}'TX(O'TX(P'TX(Q'TX(R'TX(T'TX~P'MmOP'TX}'lX!S'TX!e'TX!O'TXy'TX!P'TXX'TX!Z'TX#T'TXv'TX~P'MmO^9xO_9xO`9xOa9xO'U9vO~O!j:VO~P!.cOPoOQ!QOZeO^9xO_9xO`9xOa9xOd9{O!U#bO!W#cO!X;RO!Z!YO#Y!_O#r:RO#{:SO$O!]O$b!`O$d!bO$f!cO'U9vO'[kO[#sXo#sXw#sX}#sX!l#sX!q#sX!t#sX#Q#sX#R#sX#p#sX'h#sX'r#sX's#sX'x#sX'y#sX'z#sX'{#sX'|#sX'}#sX(O#sX(P#sX(Q#sX(R#sX(T#sX~P%;dO#S$uO~P!.cO}'lXP'TX!S'TX!e'TX!O'TXy'TX!P'TXX'TX!Z'TX#T'TXv'TX~P'MmOo#qX#Q#qX#R#qX#p#qX's#qX'x#qX'y#qX'z#qX'{#qX'|#qX'}#qX(O#qX(P#qX(R#qX(T#qX~P!.cOo#zX#Q#zX#R#zX#p#zX's#zX'x#zX'y#zX'z#zX'{#zX'|#zX'}#zX(O#zX(P#zX(R#zX(T#zX~P!.cOPoOQ!QOZeO^9xO_9xO`9xOa9xOd9{O!U#bO!W#cO!X;RO!Z!YO#Y!_O#r:RO#{:SO$O!]O$b!`O$d!bO$f!cO'U9vO'[kO[#sao#saw#sa}#sa!l#sa!q#sa!t#sa#Q#sa#R#sa#p#sa'h#sa'r#sa's#sa'x#sa'y#sa'z#sa'{#sa'|#sa'}#sa(O#sa(P#sa(Q#sa(R#sa(T#sa~P%;dOo:aO#Q:aO#R:^Ow#sa~P!BqOw$Ua~P#9jOQ'YXd'YX}iX~OQlXdlX}jX~O^:zO_:zO`:zOa:zO'U:fO~OQ'YXd'YX}hX~Ow#qa~P#9jOw#za~P#9jO!S&_Oo#za#Q#za#R#za#p#za's#za'x#za'y#za'z#za'{#za'|#za'}#za(O#za(P#za(R#za(T#za~P!.cO#S*dO~P!.cOw#ci~P#9jO[#}O}#zO'x#hO(O#|O(Q#hO(R#fO(T#hOo#eiw#ei!l#ei!q#ei!t#ei#Q#ei#R#ei#p#ei'r#ei's#ei'y#ei'z#ei'{#ei'|#ei'}#ei~O'h#ei(P#ei~P(/aO'h#gO(P#gO~P(/aO[#}O}#zO'h#gO'x#hO'y#iO'z#iO(O#|O(P#gO(Q#hO(R#fO(T#hOo#eiw#ei!l#ei!t#ei#Q#ei#R#ei#p#ei'r#ei's#ei'{#ei'|#ei'}#ei~O!q#ei~P(1]O!q#jO~P(1]O[#}O}#zO!q#jO'h#gO'x#hO'y#iO'z#iO'{#kO(O#|O(P#gO(Q#hO(R#fO(T#hOo#eiw#ei!l#ei!t#ei#Q#ei#R#ei#p#ei'r#ei'|#ei'}#ei~O's#ei~P(3UO's#lO~P(3UO[#}O}#zO!q#jO#R:^O'h#gO's#lO'x#hO'y#iO'z#iO'{#kO(O#|O(P#gO(Q#hO(R#fO(T#hOo#eiw#ei!l#ei!t#ei#Q#ei#p#ei'r#ei'|#ei~O'}#ei~P(4}O'}#mO~P(4}Oo:aO#Q:aO#R:^Ow#ni~P$1lOo:aO#Q:aO#R:^Ow#si~P$3mOQ'YXd'YX}'lX~Ow#zi~P#9jOw$Ui~P#9jOd:UO~Ow#ca~P#9jOd:|O~OU'x_'v'Q'P'_s!{'_'U'[~",
            goto: "$L^(xPPPPPPP(yPP)QPP)`PPPP)l-rP0r5oP7a7a9U7a?VDoEQPEWHaPPPPPPKqP! b! pPPPPP!!hP!%QP!%QPP!'QP!)TP!)Y!*P!*w!*w!*w!)Y!+nP!)Y!.c!.fPP!.lP!)Y!)Y!)Y!)YP!)Y!)YP!)Y!)Y!/[!/[!/y!0hP!0hKaKaKaPPPP!0hPP!%QP!0v!0y!1P!2Q!2^!4^!4^!6[!8^!2^!2^!:Y!;w!=h!?T!@n!BV!Cl!D}!2^!2^P!2^P!2^!2^!F^!2^P!G}!2^!2^P!I}!2^P!2^!8^!8^!2^!8^!2^!LU!N^!Na!8^!2^!Nd!Ng!Ng!Ng!Nk!%QP!%QP!%QP! b! bP!Nu! b! bP# R#!g! bP! bP#!v##{#$T#$s#$w#$}#$}#%VP#']#']#'c#(X#(e! bP! bP#(u#)U! bP! bPP#)b#)p#)|#*f#)v! b! bP! b! b! bP#*l#*l#*r#*x#*l#*l! b! bP#+V#+`#+j#+j#-b#/U#/b#/b#/e#/e5o5o5o5o5o5o5o5oP5o#/h#/n#0Y#2e#2k#2z#6x#7O#7U#7h#7r#9c#9m#9|#:S#:Y#:d#:n#:t#;R#;X#;_#;i#;w#<R#>a#>m#>z#?Q#?Y#?a#?k#?qPPPPPPP#?w#CTP#GS#Kn#Mi$ h$'UP$'XPPP$*`$*i$*{$0V$2e$2n$4gP!)Y$5a$8u$;l$?W$?a$?f$?iPPP$?l$BcP$BsPPPPPPPPPP$CXP$Eg$Ej$Em$Es$Ev$Ey$E|$FP$FV$Ha$Hd$Hg$Hj$Hm$Hp$Hs$Hv$Hy$H|$IP$KV$KY$K]#*l$Ki$Ko$Kr$Ku$Ky$K}$LQ$LT$LW$LZQ!tPT'V!s'Wi!SOlm!P!T$T$W$y%b)T*e/fQ'h#QQ,l'kQ1d,kR7q5X(SSOY[bfgilmop!O!P!T!Y!Z![!_!`!c!p!q!|!}#Q#U#Z#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W$`$a$e$g$h$q$r$y%X%_%b&U&Y&[&b&u&z&|'P'a'k'm'n'|(V(X(a(c(d(e(i(n(o(q({)R)T)h*Y*e*h*j*k+Y+m+y,k,o,r,y-Q-S-f-l-s.|/]/a/c/f0d0f0l0|1O1i1s1}3`3b3g3i3l4Y4e4j4x5O5X5a5l5y6b6f7X7c7l7t8S8_8`8r9T9]9o9z9{9|9}:O:P:R:S:T:U:V:W:X:Y:Z:[:]:^:_:`:a:b:l:m:nS(y$v-nQ*o&eQ*s&hQ-j(xQ-x)YW0Y+P0X4]7ZR4[0Z&{!RObfgilmop!O!P!T!Y!Z![!_!`!c!p#Q#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W$e$g$h$q$r$y%_%b&U&Y&[&b&u'k'|(V(X(a(e(i(n(o(q({)R)T)h*Y*e*h*j*k+Y+m,k,r,y-S-f-l-s.|/]/a/c/f0d0f0l0|1i1s1}3`3b3g3i3l4Y4e4j4x5O5X5a5l5y6b6f7X7c7l7t8S8_8`8r9T9]9o9|9}:O:P:R:S:V:W:X:Y:Z:[:]:^:_:`:a:b:l:m#r]Ofgilmp!O!P!T!Z![#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W%_%b&Y&['|(V(X({)h+m,r,y-l.|0|1i1}3`3b3l4Y4x5O5l5y6b7X7l8S8_8`8r9T9]9of#[b#Q$y'k(a)R)T*Y,k-s5X!h$bo!c!p$e$g$h$q$r&U&b&u(e(i(n(o(q*e*j+Y-S-f/a/c/f0d0f0l1s3g4e4j5a6f7c7t$b%k!Q!n$O$u%o%p%q%y%{&P&o&p&r'](p)r)w)x)}*O*Q*U*Z*]*d*m*v*w+T+U+g+n+|-h-u.T._.o.s.w.x/Y/Z/z/|0_0q0v0}1X1Y1z2b2i2k2n2t2w3W3w3}4O4T4W4a4g4v5e5i5{6W6_6u6{6}7h7y8n!W;Q!Y!_!`*h*k/]3i9|9}:O:P:R:S:V:W:X:Y:Z:[:]:^:_:`:a:b:l:mR;T%n$_%u!Q!n$O$u%o%p%q&P&o&p&r'](p)r)w)x)}*O*Q*U*Z*]*d*m*v*w+T+U+g+n+|-h-u.T._.o.s.w.x/Y/Z/z/|0_0q0v0}1X1Y1z2b2i2k2n2t2w3W3w3}4O4T4W4a4g4v5e5i5{6W6_6u6{6}7h7y8n$e%l!Q!n$O$u%n%o%p%q%y%{&P&o&p&r'](p)r)w)x)}*O*Q*U*Z*]*d*m*v*w+T+U+g+n+|-h-u.T._.o.s.w.x/Y/Z/z/|0_0q0v0}1X1Y1z2b2i2k2n2t2w3W3w3}4O4T4W4a4g4v5e5i5{6W6_6u6{6}7h7y8n'hZOY[fgilmop!O!P!T!Y!Z![!_!`!c!p!|!}#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W$`$a$e$g$h$q$r%_%b%i%j&U&Y&[&b&u'a'|(V(X(c(d(e(i(n(o(q({)h)o)p*e*h*j*k+Y+m,r,y-Q-S-f-l.h.|/]/a/c/f0d0f0l0|1i1s1}3`3b3g3i3l4Y4e4j4x5O5a5l5y6b6f7X7c7l7t8S8_8`8r9T9]9o9z9{9|9}:O:P:R:S:T:U:V:W:X:Y:Z:[:]:^:_:`:a:b:g:h:l:m:n:{:|;P$^%l!Q!n$O$u%n%o%p%q%y%{&P&p&r(p)r)w)x)}*O*Q*U*Z*]*d*m*v*w+T+U+g+n+|-h-u.T._.o.s.w.x/Y/Z/z/|0_0q0v0}1X1z2b2i2k2n2t2w3W3w3}4O4T4W4a4g4v5e5i5{6W6_6u6{6}7h7y8nQ&j!hQ&k!iQ&l!jQ&m!kQ&s!oQ)Z%QQ)[%RQ)]%SQ)^%TQ)a%WQ+_&oS,Q']1YQ.V)_S/q*t4VR4p0r+}TOY[bfgilmop!O!P!Q!T!Y!Z![!_!`!c!n!p!q!|!}#Q#U#Z#e#o#p#q#r#s#t#u#v#w#x#y#z#}$O$T$W$`$a$e$g$h$q$r$u$y%X%_%b%i%j%n%o%p%q%y%{&P&U&Y&[&b&o&p&r&u&z&|'P']'a'k'm'n'|(V(X(a(c(d(e(i(n(o(p(q({)R)T)h)o)p)r)w)x)}*O*Q*U*Y*Z*]*d*e*h*j*k*m*v*w+T+U+Y+g+m+n+y+|,k,o,r,y-Q-S-f-h-l-s-u.T._.h.o.s.w.x.|/Y/Z/]/a/c/f/z/|0_0d0f0l0q0v0|0}1O1X1Y1i1s1z1}2b2i2k2n2t2w3W3`3b3g3i3l3w3}4O4T4W4Y4a4e4g4j4v4x5O5X5a5e5i5l5y5{6W6_6b6f6u6{6}7X7c7h7l7t7y8S8_8`8n8r9T9]9o9z9{9|9}:O:P:R:S:T:U:V:W:X:Y:Z:[:]:^:_:`:a:b:g:h:l:m:n:{:|;PQ'[!xQ'g#PQ)k%gU)q%m*S*VR.e)jQ,S']R5R1Y#t%s!Q!n$O$u%p%q&P&p&r(p)w)x)}*Q*U*Z*]*d*m*v+U+g+n+|-h-u.T._.s.w.x/Y/Z/z/|0_0q0v0}1X1z2b2i2k2n2w3W3w3}4O4W4g4v5e5i5{6W6_6u6{6}7h7y8nQ)w%oQ+^&oQ,T']l,_'b'c'd,Y,e,f/l/m1`3p3s5V5W7pS.p)r2tQ.}*OQ/P*RQ/p*tS0P*w4TQ0`+T[0n+Y.i0f4j6O7cQ2w.oS4f0d2sQ4o0rQ5S1YQ6Y3SQ7P4RQ7T4VQ7^4aR9a8o&pVOfgilmop!O!P!T!Y!Z![!_!`!c!p#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W$e$g$h$q$r%_%b&U&Y&[&b&u']'|(V(X(a(e(i(n(o(q({)h*e*h*j*k+Y+m,j,k,r,y-S-f-l.|/]/a/c/f0d0f0l0|1Y1i1s1}3`3b3g3i3l4Y4e4j4x5O5X5a5l5y6b6f7X7c7l7t8S8_8`8r9T9]9o9|9}:O:P:R:S:V:W:X:Y:Z:[:]:^:_:`:a:b:l:mU&g!g%P%[m,_'b'c'd,Y,e,f/l/m1`3p3s5V5W7p$nsOfgilm!O!P!T!Y!Z![!_!`#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W%_%b&Y'|(V(X({)h*h*k+m,r,y-l.|/]0|1i1}3`3b3i3l4Y4x5O5l5y6b7X7l8S8_8`8r9T9]9o9|9}:R:S:V:W:X:Y:Z:[:]:^:_:`:a:lS$tp:PS&O!W#bS&Q!X#cQ&`!bQ*^&RQ*`&VS*c&[:mQ*g&^Q,S']Q-i(vQ/h*iQ0o+ZS2g.W0pQ3^/^Q3_/_Q3h/gQ3j/jQ5R1YU5g2S2h4nU7v5h5j5wQ8d6iS8|7w7xS9f8}9OR9p9gi{Ob!O!P!T$y%_%b)R)T)h-shxOb!O!P!T$y%_%b)R)T)h-sW/u*u/s3y6vQ/|*vW0Z+P0X4]7ZQ3}/zQ6}4OR8n6{!h$do!c!p$e$g$h$q$r&U&b&u(e(i(n(o(q*e*j+Y-S-f/a/c/f0d0f0l1s3g4e4j5a6f7c7tQ&d!dQ&f!fQ&n!mW&x!q%X&|1OQ'S!rQ)W$}Q)X%OQ)`%VU)c%Y'T'UQ*r&hS+r&z'PS-X(j1tQ-t)VQ-w)YS.`)d)eS0w+b/rQ1R+yQ1V+zS1w-^-_Q2l.aQ3u/oQ5b1yR5m2W${sOfgilmp!O!P!T!Y!Z![!_!`#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W%_%b&Y&['|(V(X({)h*h*k+m,r,y-l.|/]0|1i1}3`3b3i3l4Y4x5O5l5y6b7X7l8S8_8`8r9T9]9o9|9}:O:P:R:S:V:W:X:Y:Z:[:]:^:_:`:a:b:l:m$zsOfgilmp!O!P!T!Y!Z![!_!`#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W%_%b&Y&['|(V(X({)h*h*k+m,r,y-l.|/]0|1i1}3`3b3i3l4Y4x5O5l5y6b7X7l8S8_8`8r9T9]9o9|9}:O:P:R:S:V:W:X:Y:Z:[:]:^:_:`:a:b:l:mR3^/^V&T!Y!`*h!i$lo!c!p$e$g$h$q$r&U&b&u(e(i(n(o(q*e*j+Y-S-f/a/c/f0d0f0l1s3g4e4j5a6f7c7t!k$^o!c!p$e$g$h$q$r&U&b&u(a(e(i(n(o(q*e*j+Y-S-f/a/c/f0d0f0l1s3g4e4j5a6f7c7t!i$co!c!p$e$g$h$q$r&U&b&u(e(i(n(o(q*e*j+Y-S-f/a/c/f0d0f0l1s3g4e4j5a6f7c7t&e^Ofgilmop!O!P!T!Y!Z![!_!`!c!p#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W$e$g$h$q$r%_%b&U&Y&[&b&u'|(V(X(e(i(n(o(q({)h*e*h*j*k+Y+m,r,y-S-f-l.|/]/a/c/f0d0f0l0|1i1s1}3`3b3g3i3l4Y4e4j4x5O5a5l5y6b6f7X7c7l7t8S8_8`8r9T9]9o9|9}:O:P:R:S:V:W:X:Y:Z:[:]:^:_:`:a:b:l:mR(k$fQ-Z(jR5_1tQ(R#|S(z$v-nS-Y(j1tQ-k(xW/t*u/s3y6vS1x-^-_Q3x/uR5c1yQ'e#Oh,b'b'c'd,Y,e,f/l/m1`3p3s5WQ,m'lQ,p'oQ.t)tR8f6kQ'f#Oh,b'b'c'd,Y,e,f/l/m1`3p3s5WQ,n'lQ,p'oQ.t)tR8f6ki,b'b'c'd,Y,e,f/l/m1`3p3s5WR*f&]X/b*e/c/f3g!}aOb!O!P!T#z$v$y%_%b'|(x)R)T)h)r*e*u*v+P+Y,r-n-s.i/a/c/f/s/z0X0f1i2t3g3y4O4]4j6O6f6v6{7Z7cQ3a/`Q6d3cQ8a6eR9^8b${rOfgilmp!O!P!T!Y!Z![!_!`#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W%_%b&Y&['|(V(X({)h*h*k+m,r,y-l.|/]0|1i1}3`3b3i3l4Y4x5O5l5y6b7X7l8S8_8`8r9T9]9o9|9}:O:P:R:S:V:W:X:Y:Z:[:]:^:_:`:a:b:l:m#nfOfglmp!O!P!T!Z![#e#o#p#q#r#s#t#u#v#w#x#z#}$T$W%_%b&Y&['|(V(X({)h+m,r,y-l.|0|1i1}3`3b3l4Y4x5O5l5y6b7X7l8S8_8`8r9T9]9o!T9|!Y!_!`*h*k/]3i9|9}:P:R:S:V:W:X:Y:Z:[:]:^:_:`:a:l:m#rfOfgilmp!O!P!T!Z![#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W%_%b&Y&['|(V(X({)h+m,r,y-l.|0|1i1}3`3b3l4Y4x5O5l5y6b7X7l8S8_8`8r9T9]9o!X9|!Y!_!`*h*k/]3i9|9}:O:P:R:S:V:W:X:Y:Z:[:]:^:_:`:a:b:l:m$srOfglmp!O!P!T!Y!Z![!_!`#e#o#p#q#r#s#t#u#v#w#x#z#}$T$W%_%b&Y&['|(V(X({)h*h*k+m,r,y-l.|/]0|1i1}3`3b3i3l4Y4x5O5l5y6b7X7l8S8_8`8r9T9]9o9|9}:P:R:S:V:W:X:Y:Z:[:]:^:_:`:a:l:m#U#oh#d$P$Q$V$s%^&W&X'p's't'u'v'w'x'y'z'{'}(T(Z(_*a*b,q,v,x-m0y1j1m2O3Q4y5[5f6c6j7W7j7m7z8Q8q8x9S9c9i}:W&S&]/j3]6i:c:d:j:k:o:q:r:s:t:u:v:w:x:y:};O;S#W#ph#d$P$Q$V$s%^&W&X'p'q's't'u'v'w'x'y'z'{'}(T(Z(_*a*b,q,v,x-m0y1j1m2O3Q4y5[5f6c6j7W7j7m7z8Q8q8x9S9c9i!P:X&S&]/j3]6i:c:d:j:k:o:p:q:r:s:t:u:v:w:x:y:};O;S#S#qh#d$P$Q$V$s%^&W&X'p't'u'v'w'x'y'z'{'}(T(Z(_*a*b,q,v,x-m0y1j1m2O3Q4y5[5f6c6j7W7j7m7z8Q8q8x9S9c9i{:Y&S&]/j3]6i:c:d:j:k:o:r:s:t:u:v:w:x:y:};O;S#Q#rh#d$P$Q$V$s%^&W&X'p'u'v'w'x'y'z'{'}(T(Z(_*a*b,q,v,x-m0y1j1m2O3Q4y5[5f6c6j7W7j7m7z8Q8q8x9S9c9iy:Z&S&]/j3]6i:c:d:j:k:o:s:t:u:v:w:x:y:};O;S#O#sh#d$P$Q$V$s%^&W&X'p'v'w'x'y'z'{'}(T(Z(_*a*b,q,v,x-m0y1j1m2O3Q4y5[5f6c6j7W7j7m7z8Q8q8x9S9c9iw:[&S&]/j3]6i:c:d:j:k:o:t:u:v:w:x:y:};O;S!|#th#d$P$Q$V$s%^&W&X'p'w'x'y'z'{'}(T(Z(_*a*b,q,v,x-m0y1j1m2O3Q4y5[5f6c6j7W7j7m7z8Q8q8x9S9c9iu:]&S&]/j3]6i:c:d:j:k:o:u:v:w:x:y:};O;S!x#vh#d$P$Q$V$s%^&W&X'p'y'z'{'}(T(Z(_*a*b,q,v,x-m0y1j1m2O3Q4y5[5f6c6j7W7j7m7z8Q8q8x9S9c9iq:_&S&]/j3]6i:c:d:j:k:o:w:x:y:};O;S!v#wh#d$P$Q$V$s%^&W&X'p'z'{'}(T(Z(_*a*b,q,v,x-m0y1j1m2O3Q4y5[5f6c6j7W7j7m7z8Q8q8x9S9c9io:`&S&]/j3]6i:c:d:j:k:o:x:y:};O;S$]#{h#`#d$P$Q$V$s%^&S&W&X&]'p'q'r's't'u'v'w'x'y'z'{'}(T(Z(_*a*b,q,v,x-m/j0y1j1m2O3Q3]4y5[5f6c6i6j7W7j7m7z8Q8q8x9S9c9i:c:d:j:k:o:p:q:r:s:t:u:v:w:x:y:};O;S${jOfgilmp!O!P!T!Y!Z![!_!`#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W%_%b&Y&['|(V(X({)h*h*k+m,r,y-l.|/]0|1i1}3`3b3i3l4Y4x5O5l5y6b7X7l8S8_8`8r9T9]9o9|9}:O:P:R:S:V:W:X:Y:Z:[:]:^:_:`:a:b:l:m$v!aOfgilmp!O!P!T!Y!Z!_!`#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W%_%b&Y&['|(V(X({)h*h*k+m,r,y-l.|/]0|1i1}3`3b3i3l4Y4x5O5l5y6b7X7l8S8_8`8r9T9]9o9|9}:O:P:R:V:W:X:Y:Z:[:]:^:_:`:a:b:l:mQ&Y![Q&Z!]R:l:S#rpOfgilmp!O!P!T!Z![#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W%_%b&Y&['|(V(X({)h+m,r,y-l.|0|1i1}3`3b3l4Y4x5O5l5y6b7X7l8S8_8`8r9T9]9oQ&[!^!W:P!Y!_!`*h*k/]3i9|9}:O:P:R:S:V:W:X:Y:Z:[:]:^:_:`:a:b:l:mR:m;RR$moR-e(qR$wqT(|$v-nQ/e*eS3e/c/fR6h3gQ3o/lQ3r/mQ6n3pR6q3sQ$zwQ)U${Q*p&fQ+e&qQ+h&sQ-v)XW.Y)a+i+j+kS/W*[+fW2c.V.Z.[.]U3X/X/[0xU5t2d2e2fS6]3Y3[S8O5u5vS8X6[6^Q9Q8PS9U8Y8ZR9j9V^|O!O!P!T%_%b)hX)Q$y)R)T-sQ&r!nQ*]&PQ*{&jQ+O&kQ+S&lQ+V&mQ+[&nQ+k&sQ-|)ZQ.P)[Q.S)]Q.U)^Q.X)`Q.])aQ2T-tQ2f.VR4W0UU+`&o*t4VR4q0rQ+X&mQ+j&sS.[)a+k^0u+^+_/p/q4o4p7TS2e.V.]S4S0Q0RR5v2fS0Q*w4TQ0`+TR7^4aU+c&o*t4VR4r0rQ*y&jQ*}&kQ+R&lQ+f&qQ+i&sS-z)Z*{S.O)[+OS.R)]+SU.Z)a+j+kQ/X*[Q0W*zQ0p+ZQ2Y-{Q2Z-|Q2^.PQ2`.SU2d.V.[.]Q2h.WS3[/[0xS5h2S4nQ5o2[S5u2e2fQ6^3YS7x5j5wQ8P5vQ8Y6[Q8}7wQ9V8ZR9g9OQ0S*wR7R4TQ*x&jQ*|&kU-y)Z*y*{U-})[*}+OS2X-z-|S2].O.PQ4Z0YQ5n2ZQ5p2^R7Y4[Q/v*uQ3v/sQ6w3yR8k6vQ*z&jS-{)Z*{Q2[-|Q4Z0YR7Y4[Q+Q&lU.Q)]+R+SS2_.R.SR5q2`Q0[+PQ4X0XQ7[4]R8s7ZQ+Z&nS.W)`+[S2S-t.XR5j2TQ0h+YQ4h0fQ7e4jR8t7cQ.l)rQ0h+YQ2q.iQ4h0fQ6R2tQ7e4jQ8U6OR8t7cQ0h+YR4h0fX'O!q%X&|1OX&{!q%X&|1OW'O!q%X&|1OS+t&z'PR1T+y_|O!O!P!T%_%b)hQ%a!PS)g%_%bR.c)h$^%u!Q!n$O$u%o%p%q&P&o&p&r'](p)r)w)x)}*O*Q*U*Z*]*d*m*v*w+T+U+g+n+|-h-u.T._.o.s.w.x/Y/Z/z/|0_0q0v0}1X1Y1z2b2i2k2n2t2w3W3w3}4O4T4W4a4g4v5e5i5{6W6_6u6{6}7h7y8nQ*T%yR*W%{$c%n!Q!n$O$u%o%p%q%y%{&P&o&p&r'](p)r)w)x)}*O*Q*U*Z*]*d*m*v*w+T+U+g+n+|-h-u.T._.o.s.w.x/Y/Z/z/|0_0q0v0}1X1Y1z2b2i2k2n2t2w3W3w3}4O4T4W4a4g4v5e5i5{6W6_6u6{6}7h7y8nW)s%m%x*S*VQ.d)iR2|.uR.l)rR6R2tQ'W!sR+}'WQ!TOQ$TlQ$WmQ%b!P[%|!T$T$W%b)T/fQ)T$yR/f*e$b%i!Q!n$O$u%o%p%q%y%{&P&o&p&r'](p)r)w)x)}*O*Q*U*Z*]*d*m*v*w+T+U+g+n+|-h-u.T._.o.s.w.x/Y/Z/z/|0_0q0v0}1X1Y1z2b2i2k2n2t2w3W3w3}4O4T4W4a4g4v5e5i5{6W6_6u6{6}7h7y8n[)m%i)o.h:g:{;PQ)o%jQ.h)pQ:g%nQ:{:hR;P:|Q!vUR'Y!vS!OO!TU%]!O%_)hQ%_!PR)h%b#rYOfgilmp!O!P!T!Z![#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W%_%b&Y&['|(V(X({)h+m,r,y-l.|0|1i1}3`3b3l4Y4x5O5l5y6b7X7l8S8_8`8r9T9]9oh!yY!|#U$`'a'm(c,o-Q9z:T:nQ!|[f#Ub#Q$y'k(a)R)T*Y,k-s5X!h$`o!c!p$e$g$h$q$r&U&b&u(e(i(n(o(q*e*j+Y-S-f/a/c/f0d0f0l1s3g4e4j5a6f7c7tQ'a!}Q'm#ZQ(c$aQ,o'nQ-Q(d!W9z!Y!_!`*h*k/]3i9|9}:O:P:R:S:V:W:X:Y:Z:[:]:^:_:`:a:b:l:mQ:T9{R:n:UQ-T(fR1q-TQ1u-ZR5`1uQ,Y'bQ,e'cQ,f'dW1^,Y,e,f5WR5W1`Q/c*eS3d/c3gR3g/ffbO!O!P!T$y%_%b)R)T)h-sp#Wb'|(x.i/a/s/z0X0f1i6O6f6v6{7Z7cQ'|#zS(x$v-nQ.i)rW/a*e/c/f3gQ/s*uQ/z*vQ0X+PQ0f+YQ1i,rQ6O2tQ6v3yQ6{4OQ7Z4]R7c4jQ,s'}Q1h,qT1k,s1hS(W$Q(ZQ(]$VU,w(W(],|R,|(_Q(r$mR-g(rQ-o(}R2Q-oQ3p/lQ3s/mT6o3p3sQ)R$yS-q)R-sR-s)TQ4b0`R7_4b`0s+]+^+_+`+c/p/q7TR4s0sQ8p7PR9b8pQ4U0SR7S4UQ3z/vQ6s3vT6x3z6sQ4P/{Q6y3|U7O4P6y8lR8l6zQ4^0[Q7V4XT7]4^7VhzOb!O!P!T$y%_%b)R)T)h-sQ$|xW%Zz$|%f)u$b%f!Q!n$O$u%o%p%q%y%{&P&o&p&r'](p)r)w)x)}*O*Q*U*Z*]*d*m*v*w+T+U+g+n+|-h-u.T._.o.s.w.x/Y/Z/z/|0_0q0v0}1X1Y1z2b2i2k2n2t2w3W3w3}4O4T4W4a4g4v5e5i5{6W6_6u6{6}7h7y8nR)u%nS4k0h0mS7b4h4iT7g4k7bW&z!q%X&|1OS+q&z+yR+y'PQ1P+vR4|1PU1Z,R,S,TR5T1ZS3T/P7TR6Z3TQ2u.lQ5}2qT6S2u5}Q.y)yR3P.yQ5Y1dR7r5Y^_O!O!P!T%_%b)hY#Xb$y)R)T-s$l#_fgilmp!Y!Z![!_!`#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W&Y&['|(V(X({*h*k+m,r,y-l.|/]0|1i1}3`3b3i3l4Y4x5O5l5y6b7X7l8S8_8`8r9T9]9o9|9}:O:P:R:S:V:W:X:Y:Z:[:]:^:_:`:a:b:l:m!h$io!c!p$e$g$h$q$r&U&b&u(e(i(n(o(q*e*j+Y-S-f/a/c/f0d0f0l1s3g4e4j5a6f7c7tW'i#Q'k,k5XQ-O(aR/U*Y&z!RObfgilmop!O!P!T!Y!Z![!_!`!c!p#Q#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W$e$g$h$q$r$y%_%b&U&Y&[&b&u'k'|(V(X(a(e(i(n(o(q({)R)T)h*Y*e*h*j*k+Y+m,k,r,y-S-f-l-s.|/]/a/c/f0d0f0l0|1i1s1}3`3b3g3i3l4Y4e4j4x5O5X5a5l5y6b6f7X7c7l7t8S8_8`8r9T9]9o9|9}:O:P:R:S:V:W:X:Y:Z:[:]:^:_:`:a:b:l:m[!{Y[#U#Z9z9{W&{!q%X&|1O['`!|!}'m'n:T:US(b$`$aS+s&z'PU,W'a,o:nS-P(c(dQ1S+yR1o-QS%t!Q&oQ&q!nQ(U$OQ(v$uS)v%o.oQ)y%pQ)|%qS*[&P&rQ+d&pQ,R']Q-c(pQ.k)rU.v)w)x2wS.})}*OQ/O*QQ/S*UQ/V*ZQ/[*]Q/_*dQ/k*mQ/{*vS0R*w4TQ0`+TQ0b+UQ0x+gQ0z+nQ1W+|Q1|-hQ2U-uQ2a.TQ2j._Q2{.sQ2}.wQ3O.xQ3Y/YQ3Z/ZS3|/z/|Q4`0_Q4n0qQ4u0vQ4z0}Q5P1XQ5Q1YQ5d1zQ5s2bQ5w2iQ5z2kQ5|2nQ6Q2tQ6[3WQ6t3wQ6z3}Q6|4OQ7U4WQ7^4aQ7a4gQ7i4vQ7u5eQ7w5iQ8T5{Q8W6WQ8Z6_Q8j6uS8m6{6}Q8v7hQ9O7yR9`8n$^%m!Q!n$O$u%o%p%q&P&o&p&r'](p)r)w)x)}*O*Q*U*Z*]*d*m*v*w+T+U+g+n+|-h-u.T._.o.s.w.x/Y/Z/z/|0_0q0v0}1X1Y1z2b2i2k2n2t2w3W3w3}4O4T4W4a4g4v5e5i5{6W6_6u6{6}7h7y8nQ)i%nQ*S%yR*V%{$y%h!Q!n$O$u%i%j%n%o%p%q%y%{&P&o&p&r'](p)o)p)r)w)x)}*O*Q*U*Z*]*d*m*v*w+T+U+g+n+|-h-u.T._.h.o.s.w.x/Y/Z/z/|0_0q0v0}1X1Y1z2b2i2k2n2t2w3W3w3}4O4T4W4a4g4v5e5i5{6W6_6u6{6}7h7y8n:g:h:{:|;P'tWOY[bfgilmop!O!P!T!Y!Z![!_!`!c!p!|!}#Q#U#Z#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W$`$a$e$g$h$q$r$y%_%b&U&Y&[&b&u'a'k'm'n'|(V(X(a(c(d(e(i(n(o(q({)R)T)h*Y*e*h*j*k+Y+m,k,o,r,y-Q-S-f-l-s.|/]/a/c/f0d0f0l0|1i1s1}3`3b3g3i3l4Y4e4j4x5O5X5a5l5y6b6f7X7c7l7t8S8_8`8r9T9]9o9z9{9|9}:O:P:R:S:T:U:V:W:X:Y:Z:[:]:^:_:`:a:b:l:m:n$x%g!Q!n$O$u%i%j%n%o%p%q%y%{&P&o&p&r'](p)o)p)r)w)x)}*O*Q*U*Z*]*d*m*v*w+T+U+g+n+|-h-u.T._.h.o.s.w.x/Y/Z/z/|0_0q0v0}1X1Y1z2b2i2k2n2t2w3W3w3}4O4T4W4a4g4v5e5i5{6W6_6u6{6}7h7y8n:g:h:{:|;P_&y!q%X&z&|'P+y1OR,U']$zrOfgilmp!O!P!T!Y!Z![!_!`#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W%_%b&Y&['|(V(X({)h*h*k+m,r,y-l.|/]0|1i1}3`3b3i3l4Y4x5O5l5y6b7X7l8S8_8`8r9T9]9o9|9}:O:P:R:S:V:W:X:Y:Z:[:]:^:_:`:a:b:l:m!j$]o!c!p$e$g$h$q$r&U&b&u(a(e(i(n(o(q*e*j+Y-S-f/a/c/f0d0f0l1s3g4e4j5a6f7c7tQ,S']Q1c,jQ1d,kQ5R1YR7q5X_}O!O!P!T%_%b)h^|O!O!P!T%_%b)hQ#YbX)Q$y)R)T-sbhO!O!T3`6b8_8`9]9oS#`f9|Q#dgQ$PiQ$QlQ$VmQ$spW%^!P%_%b)hU&S!Y!`*hQ&W!ZQ&X![Q&]!_Q'p#eQ'q#oS'r#p:XQ's#qQ't#rQ'u#sQ'v#tQ'w#uQ'x#vQ'y#wQ'z#xQ'{#yQ'}#zQ(T#}Q(Z$TQ(_$WQ*a&YQ*b&[Q,q'|Q,v(VQ,x(XQ-m({Q/j*kQ0y+mQ1j,rQ1m,yQ2O-lQ3Q.|Q3]/]Q4y0|Q5[1iQ5f1}Q6c3bQ6i3iQ6j3lQ7W4YQ7j4xQ7m5OQ7z5lQ8Q5yQ8q7XQ8x7lQ9S8SQ9c8rQ9i9TQ:c:OQ:d:PQ:j:RQ:k:SQ:o:VQ:p:WQ:q:YQ:r:ZQ:s:[Q:t:]Q:u:^Q:v:_Q:w:`Q:x:aQ:y:bQ:}:lQ;O:mR;S9}^tO!O!P!T%_%b)h$`#afgilmp!Y!Z![!_!`#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W&Y&['|(V(X({*h*k+m,r,y-l.|/]0|1i1}3b3i3l4Y4x5O5l5y7X7l8S8r9T9|9}:O:P:R:S:V:W:X:Y:Z:[:]:^:_:`:a:b:l:mQ6a3`Q8^6bQ9Y8_Q9[8`Q9n9]R9t9oQ&V!YQ&^!`R/g*hQ$joQ&a!cQ&t!pU(f$e$g(iS(m$h0dQ(t$qQ(u$rQ*_&UQ*l&bQ+o&uQ-R(eS-a(n4eQ-b(oQ-d(qW/`*e/c/f3gQ/i*jW0e+Y0f4j7cQ1p-SQ1{-fQ3c/aQ4m0lQ5^1sQ7s5aQ8b6fR8{7t!h$_o!c!p$e$g$h$q$r&U&b&u(e(i(n(o(q*e*j+Y-S-f/a/c/f0d0f0l1s3g4e4j5a6f7c7tR-O(a'uXOY[bfgilmop!O!P!T!Y!Z![!_!`!c!p!|!}#Q#U#Z#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W$`$a$e$g$h$q$r$y%_%b&U&Y&[&b&u'a'k'm'n'|(V(X(a(c(d(e(i(n(o(q({)R)T)h*Y*e*h*j*k+Y+m,k,o,r,y-Q-S-f-l-s.|/]/a/c/f0d0f0l0|1i1s1}3`3b3g3i3l4Y4e4j4x5O5X5a5l5y6b6f7X7c7l7t8S8_8`8r9T9]9o9z9{9|9}:O:P:R:S:T:U:V:W:X:Y:Z:[:]:^:_:`:a:b:l:m:n$zqOfgilmp!O!P!T!Y!Z![!_!`#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W%_%b&Y&['|(V(X({)h*h*k+m,r,y-l.|/]0|1i1}3`3b3i3l4Y4x5O5l5y6b7X7l8S8_8`8r9T9]9o9|9}:O:P:R:S:V:W:X:Y:Z:[:]:^:_:`:a:b:l:m!i$fo!c!p$e$g$h$q$r&U&b&u(e(i(n(o(q*e*j+Y-S-f/a/c/f0d0f0l1s3g4e4j5a6f7c7t&d^Ofgilmop!O!P!T!Y!Z![!_!`!c!p#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W$e$g$h$q$r%_%b&U&Y&[&b&u'|(V(X(e(i(n(o(q({)h*e*h*j*k+Y+m,r,y-S-f-l.|/]/a/c/f0d0f0l0|1i1s1}3`3b3g3i3l4Y4e4j4x5O5a5l5y6b6f7X7c7l7t8S8_8`8r9T9]9o9|9}:O:P:R:S:V:W:X:Y:Z:[:]:^:_:`:a:b:l:m[!zY[$`$a9z9{['_!|!}(c(d:T:UW)n%i%j:g:hU,V'a-Q:nW.g)o)p:{:|T2p.h;PQ(h$eQ(l$gR-V(iV(g$e$g(iR-](jR-[(j$znOfgilmp!O!P!T!Y!Z![!_!`#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W%_%b&Y&['|(V(X({)h*h*k+m,r,y-l.|/]0|1i1}3`3b3i3l4Y4x5O5l5y6b7X7l8S8_8`8r9T9]9o9|9}:O:P:R:S:V:W:X:Y:Z:[:]:^:_:`:a:b:l:m!i$ko!c!p$e$g$h$q$r&U&b&u(e(i(n(o(q*e*j+Y-S-f/a/c/f0d0f0l1s3g4e4j5a6f7c7t`,c'b'c'd,Y,e,f1`5WX3n/l/m3p3sh,b'b'c'd,Y,e,f/l/m1`3p3s5WQ7o5VR8z7p^uO!O!P!T%_%b)h$`#afgilmp!Y!Z![!_!`#e#o#p#q#r#s#t#u#v#w#x#y#z#}$T$W&Y&['|(V(X({*h*k+m,r,y-l.|/]0|1i1}3b3i3l4Y4x5O5l5y7X7l8S8r9T9|9}:O:P:R:S:V:W:X:Y:Z:[:]:^:_:`:a:b:l:mQ6`3`Q8]6bQ9X8_Q9Z8`Q9m9]R9s9oR(P#zR(O#zQ$SlR([$TR$ooR$noR)P$vR)O$vQ(}$vR2P-nhwOb!O!P!T$y%_%b)R)T)h-s$l!lz!Q!n$O$u$|%f%n%o%p%q%y%{&P&o&p&r'](p)r)u)w)x)}*O*Q*U*Z*]*d*m*v*w+T+U+g+n+|-h-u.T._.o.s.w.x/Y/Z/z/|0_0q0v0}1X1Y1z2b2i2k2n2t2w3W3w3}4O4T4W4a4g4v5e5i5{6W6_6u6{6}7h7y8nR${xR0a+TR0V*wR0T*wR7Q4RR/x*uR/w*uR0O*vR/}*vR0^+PR0]+P%XyObxz!O!P!Q!T!n$O$u$y$|%_%b%f%n%o%p%q%y%{&P&o&p&r'](p)R)T)h)r)u)w)x)}*O*Q*U*Z*]*d*m*v*w+T+U+g+n+|-h-s-u.T._.o.s.w.x/Y/Z/z/|0_0q0v0}1X1Y1z2b2i2k2n2t2w3W3w3}4O4T4W4a4g4v5e5i5{6W6_6u6{6}7h7y8nR0j+YR0i+YQ'R!qQ)b%XQ+v&|R4{1OX'Q!q%X&|1OR+x&|R+w&|T/R*R4VT/Q*R4VR.n)rR.m)rR)z%pR1f,kR1e,k",
            nodeNames: "⚠ | < > RawString Float LineComment BlockComment SourceFile ] InnerAttribute ! [ MetaItem self Metavariable super crate Identifier ScopedIdentifier :: QualifiedScope AbstractType impl SelfType MetaType TypeIdentifier ScopedTypeIdentifier ScopeIdentifier TypeArgList TypeBinding = Lifetime String Escape Char Boolean Integer } { Block ; ConstItem Vis pub ( in ) const BoundIdentifier : UnsafeBlock unsafe AsyncBlock async move IfExpression if LetDeclaration let LiteralPattern ArithOp MetaPattern SelfPattern ScopedIdentifier TuplePattern ScopedTypeIdentifier , StructPattern FieldPatternList FieldPattern ref mut FieldIdentifier .. RefPattern SlicePattern CapturedPattern ReferencePattern & MutPattern RangePattern ... OrPattern MacroPattern ParenthesizedTokens BracketedTokens BracedTokens TokenBinding Identifier TokenRepetition ArithOp BitOp LogicOp UpdateOp CompareOp -> => ArithOp _ else MatchExpression match MatchBlock MatchArm Attribute Guard UnaryExpression ArithOp DerefOp LogicOp ReferenceExpression TryExpression BinaryExpression ArithOp ArithOp BitOp BitOp BitOp BitOp LogicOp LogicOp AssignmentExpression TypeCastExpression as ReturnExpression return RangeExpression CallExpression ArgList AwaitExpression await FieldExpression GenericFunction BreakExpression break LoopLabel ContinueExpression continue IndexExpression ArrayExpression TupleExpression MacroInvocation UnitExpression ClosureExpression ParamList Parameter Parameter ParenthesizedExpression StructExpression FieldInitializerList ShorthandFieldInitializer FieldInitializer BaseFieldInitializer MatchArm WhileExpression while LoopExpression loop ForExpression for MacroInvocation MacroDefinition macro_rules MacroRule EmptyStatement ModItem mod DeclarationList AttributeItem ForeignModItem extern StructItem struct TypeParamList ConstrainedTypeParameter TraitBounds HigherRankedTraitBound RemovedTraitBound OptionalTypeParameter ConstParameter WhereClause where LifetimeClause TypeBoundClause FieldDeclarationList FieldDeclaration OrderedFieldDeclarationList UnionItem union EnumItem enum EnumVariantList EnumVariant TypeItem type FunctionItem default fn ParamList Parameter SelfParameter VariadicParameter VariadicParameter ImplItem TraitItem trait AssociatedType LetDeclaration UseDeclaration use ScopedIdentifier UseAsClause ScopedIdentifier UseList ScopedUseList UseWildcard ExternCrateDeclaration StaticItem static ExpressionStatement ExpressionStatement GenericType FunctionType ForLifetimes ParamList VariadicParameter Parameter VariadicParameter Parameter ReferenceType PointerType TupleType UnitType ArrayType MacroInvocation EmptyType DynamicType dyn BoundedType",
            maxTerm: 361,
            nodeProps: [
                [Ti.group, -42, 4, 5, 14, 15, 16, 17, 18, 19, 33, 35, 36, 37, 40, 51, 53, 56, 101, 107, 111, 112, 113, 122, 123, 125, 127, 128, 130, 132, 133, 134, 137, 139, 140, 141, 142, 143, 144, 148, 149, 155, 157, 159, "Expression", -16, 22, 24, 25, 26, 27, 222, 223, 230, 231, 232, 233, 234, 235, 236, 237, 239, "Type", -20, 42, 161, 162, 165, 166, 169, 170, 172, 188, 190, 194, 196, 204, 205, 207, 208, 209, 217, 218, 220, "Statement", -17, 49, 60, 62, 63, 64, 65, 68, 74, 75, 76, 77, 78, 80, 81, 83, 84, 99, "Pattern"],
                [Ti.openedBy, 9, "[", 38, "{", 47, "("],
                [Ti.closedBy, 12, "]", 39, "}", 45, ")"]
            ],
            skippedNodes: [0, 6, 7, 240],
            repeatNodeCount: 33,
            tokenData: "#CO_R!VOX$hXY1_YZ2ZZ]$h]^1_^p$hpq1_qr2srs4qst5Ztu6Vuv9lvw;jwx=nxy!#yyz!$uz{!%q{|!'k|}!(m}!O!)i!O!P!+j!P!Q!/f!Q!R!7q!R![!9f![!]!La!]!^!N_!^!_# Z!_!`##b!`!a#%c!a!b#'j!b!c#(f!c!}#)b!}#O#+X#O#P#,T#P#Q#4d#Q#R#5`#R#S#)b#S#T$h#T#U#)b#U#V#6b#V#f#)b#f#g#9u#g#o#)b#o#p#?S#p#q#@O#q#r#BS#r${$h${$|#)b$|4w$h4w5b#)b5b5i$h5i6S#)b6S~$hU$oZ'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$hU%iT'`Q'PSOz%xz{&^{!P%x!P!Q'S!Q~%xS%}T'PSOz%xz{&^{!P%x!P!Q'S!Q~%xS&aTOz&pz{&^{!P&p!P!Q({!Q~&pS&sTOz%xz{&^{!P%x!P!Q'S!Q~%xS'VSOz&p{!P&p!P!Q'c!Q~&pS'fSOz'r{!P'r!P!Q'c!Q~'rS'uTOz(Uz{(l{!P(U!P!Q'c!Q~(US(]T'QS'PSOz(Uz{(l{!P(U!P!Q'c!Q~(US(oSOz'rz{(l{!P'r!Q~'rS)QO'QSU)VZ'`QOY)xYZ+hZr)xrs&psz)xz{)Q{!P)x!P!Q0w!Q#O)x#O#P&p#P~)xU)}Z'`QOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$hU*uZ'`QOY)xYZ+hZr)xrs&psz)xz{+|{!P)x!P!Q,g!Q#O)x#O#P&p#P~)xU+mT'`QOz%xz{&^{!P%x!P!Q'S!Q~%xQ,RT'`QOY+|YZ,bZr+|s#O+|#P~+|Q,gO'`QU,lZ'`QOY-_YZ0cZr-_rs'rsz-_z{+|{!P-_!P!Q,g!Q#O-_#O#P'r#P~-_U-dZ'`QOY.VYZ/RZr.Vrs(Usz.Vz{/k{!P.V!P!Q,g!Q#O.V#O#P(U#P~.VU.`Z'`Q'QS'PSOY.VYZ/RZr.Vrs(Usz.Vz{/k{!P.V!P!Q,g!Q#O.V#O#P(U#P~.VU/[T'`Q'QS'PSOz(Uz{(l{!P(U!P!Q'c!Q~(UU/pZ'`QOY-_YZ0cZr-_rs'rsz-_z{/k{!P-_!P!Q+|!Q#O-_#O#P'r#P~-_U0hT'`QOz(Uz{(l{!P(U!P!Q'c!Q~(UU1OT'`Q'QSOY+|YZ,bZr+|s#O+|#P~+|_1hZ'`Q&}X'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$h_2dT'`Q&}X'PSOz%xz{&^{!P%x!P!Q'S!Q~%x_2|]ZX'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q!_$h!_!`3u!`#O$h#O#P%x#P~$h_4OZ#RX'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$h_4zT'^Q'PS'_XOz%xz{&^{!P%x!P!Q'S!Q~%x_5dZ'RX'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$h_6`g'`Q'vW'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q!c$h!c!}7w!}#O$h#O#P%x#P#R$h#R#S7w#S#T$h#T#o7w#o${$h${$|7w$|4w$h4w5b7w5b5i$h5i6S7w6S~$h_8Qh'`Q_X'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q![7w![!c$h!c!}7w!}#O$h#O#P%x#P#R$h#R#S7w#S#T$h#T#o7w#o${$h${$|7w$|4w$h4w5b7w5b5i$h5i6S7w6S~$h_9u](TP'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q!_$h!_!`:n!`#O$h#O#P%x#P~$h_:wZ#QX'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$h_;s_!qX'`Q'PSOY$hYZ%bZr$hrs%xsv$hvw<rwz$hz{)Q{!P$h!P!Q*p!Q!_$h!_!`:n!`#O$h#O#P%x#P~$h_<{Z'}X'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$h_=ui'`Q'PSOY?dYZA`Zr?drsBdsw?dwx@dxz?dz{CO{!P?d!P!QDv!Q!c?d!c!}Et!}#O?d#O#PId#P#R?d#R#SEt#S#T?d#T#oEt#o${?d${$|Et$|4w?d4w5bEt5b5i?d5i6SEt6S~?d_?k]'`Q'PSOY$hYZ%bZr$hrs%xsw$hwx@dxz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$h_@mZ'`Q'PSsXOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$h_AgV'`Q'PSOw%xwxA|xz%xz{&^{!P%x!P!Q'S!Q~%x]BTT'PSsXOz%xz{&^{!P%x!P!Q'S!Q~%x]BiV'PSOw%xwxA|xz%xz{&^{!P%x!P!Q'S!Q~%x_CT]'`QOY)xYZ+hZr)xrs&psw)xwxC|xz)xz{)Q{!P)x!P!Q0w!Q#O)x#O#P&p#P~)x_DTZ'`QsXOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$h_D{]'`QOY)xYZ+hZr)xrs&psw)xwxC|xz)xz{+|{!P)x!P!Q,g!Q#O)x#O#P&p#P~)x_E}j'`Q'PS'[XOY$hYZ%bZr$hrs%xsw$hwx@dxz$hz{)Q{!P$h!P!Q*p!Q![Go![!c$h!c!}Go!}#O$h#O#P%x#P#R$h#R#SGo#S#T$h#T#oGo#o${$h${$|Go$|4w$h4w5bGo5b5i$h5i6SGo6S~$h_Gxh'`Q'PS'[XOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q![Go![!c$h!c!}Go!}#O$h#O#P%x#P#R$h#R#SGo#S#T$h#T#oGo#o${$h${$|Go$|4w$h4w5bGo5b5i$h5i6SGo6S~$h]IiX'PSOzBdz{JU{!PBd!P!QKS!Q#iBd#i#jKi#j#lBd#l#m!!a#m~Bd]JXVOw&pwxJnxz&pz{&^{!P&p!P!Q({!Q~&p]JsTsXOz%xz{&^{!P%x!P!Q'S!Q~%x]KVUOw&pwxJnxz&p{!P&p!P!Q'c!Q~&p]Kn['PSOz%xz{&^{!P%x!P!Q'S!Q![Ld![!c%x!c!iLd!i#T%x#T#ZLd#Z#o%x#o#pNq#p~%x]LiY'PSOz%xz{&^{!P%x!P!Q'S!Q![MX![!c%x!c!iMX!i#T%x#T#ZMX#Z~%x]M^Y'PSOz%xz{&^{!P%x!P!Q'S!Q![M|![!c%x!c!iM|!i#T%x#T#ZM|#Z~%x]NRY'PSOz%xz{&^{!P%x!P!Q'S!Q![Bd![!c%x!c!iBd!i#T%x#T#ZBd#Z~%x]NvY'PSOz%xz{&^{!P%x!P!Q'S!Q![! f![!c%x!c!i! f!i#T%x#T#Z! f#Z~%x]! k['PSOz%xz{&^{!P%x!P!Q'S!Q![! f![!c%x!c!i! f!i#T%x#T#Z! f#Z#q%x#q#rBd#r~%x]!!fY'PSOz%xz{&^{!P%x!P!Q'S!Q![!#U![!c%x!c!i!#U!i#T%x#T#Z!#U#Z~%x]!#ZY'PSOz%xz{&^{!P%x!P!Q'S!Q![Bd![!c%x!c!iBd!i#T%x#T#ZBd#Z~%x_!$SZ}X'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$h_!%OZ!PX'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$h_!%x](QX'`QOY)xYZ+hZr)xrs&psz)xz{)Q{!P)x!P!Q0w!Q!_)x!_!`!&q!`#O)x#O#P&p#P~)x_!&xZ#QX'`QOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$h_!'t](PX'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q!_$h!_!`:n!`#O$h#O#P%x#P~$h_!(vZ!eX'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$h_!)r^'hX'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q!_$h!_!`:n!`!a!*n!a#O$h#O#P%x#P~$h_!*wZ#SX'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$h_!+s[(OX'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!O$h!O!P!,i!P!Q*p!Q#O$h#O#P%x#P~$h_!,r^!lX'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!O$h!O!P!-n!P!Q*p!Q!_$h!_!`!.j!`#O$h#O#P%x#P~$h_!-wZ!tX'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$hV!.sZ'rP'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$h_!/m]'`Q'xXOY)xYZ+hZr)xrs&psz)xz{!0f{!P)x!P!Q!0|!Q!_)x!_!`!&q!`#O)x#O#P&p#P~)x_!0mT'O]'`QOY+|YZ,bZr+|s#O+|#P~+|_!1TZ'`QUXOY!1vYZ0cZr!1vrs!4xsz!1vz{!7T{!P!1v!P!Q!0|!Q#O!1v#O#P!4x#P~!1v_!1}Z'`QUXOY!2pYZ/RZr!2prs!3nsz!2pz{!6Z{!P!2p!P!Q!0|!Q#O!2p#O#P!3n#P~!2p_!2{Z'`QUX'QS'PSOY!2pYZ/RZr!2prs!3nsz!2pz{!6Z{!P!2p!P!Q!0|!Q#O!2p#O#P!3n#P~!2p]!3wVUX'QS'PSOY!3nYZ(UZz!3nz{!4^{!P!3n!P!Q!5d!Q~!3n]!4cVUXOY!4xYZ'rZz!4xz{!4^{!P!4x!P!Q!6O!Q~!4x]!4}VUXOY!3nYZ(UZz!3nz{!4^{!P!3n!P!Q!5d!Q~!3n]!5iVUXOY!4xYZ'rZz!4xz{!6O{!P!4x!P!Q!5d!Q~!4xX!6TQUXOY!6OZ~!6O_!6bZ'`QUXOY!1vYZ0cZr!1vrs!4xsz!1vz{!6Z{!P!1v!P!Q!7T!Q#O!1v#O#P!4x#P~!1vZ!7[V'`QUXOY!7TYZ,bZr!7Trs!6Os#O!7T#O#P!6O#P~!7T_!7zhuX'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q![!9f![#O$h#O#P%x#P#R$h#R#S!9f#S#U$h#U#V!Dc#V#]$h#]#^!:w#^#c$h#c#d!F}#d#i$h#i#j!:w#j#l$h#l#m!Ic#m~$h_!9obuX'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q![!9f![#O$h#O#P%x#P#R$h#R#S!9f#S#]$h#]#^!:w#^#i$h#i#j!:w#j~$h_!;Oe'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q!R$h!R!S!<a!S!T$h!T!U!?c!U!W$h!W!X!@c!X!Y$h!Y!Z!>g!Z#O$h#O#P%x#P#g$h#g#h!Ac#h~$h_!<h_'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q!S$h!S!T!=g!T!W$h!W!X!>g!X#O$h#O#P%x#P~$h_!=n]'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q!Y$h!Y!Z!>g!Z#O$h#O#P%x#P~$h_!>pZuX'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$h_!?j]'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q!S$h!S!T!>g!T#O$h#O#P%x#P~$h_!@j]'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q!U$h!U!V!>g!V#O$h#O#P%x#P~$h_!Aj]'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P#]$h#]#^!Bc#^~$h_!Bj]'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P#n$h#n#o!Cc#o~$h_!Cj]'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P#X$h#X#Y!>g#Y~$h_!Dj_'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q!R!Ei!R!S!Ei!S#O$h#O#P%x#P#R$h#R#S!Ei#S~$h_!ErcuX'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q!R!Ei!R!S!Ei!S#O$h#O#P%x#P#R$h#R#S!Ei#S#]$h#]#^!:w#^#i$h#i#j!:w#j~$h_!GU^'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q!Y!HQ!Y#O$h#O#P%x#P#R$h#R#S!HQ#S~$h_!HZbuX'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q!Y!HQ!Y#O$h#O#P%x#P#R$h#R#S!HQ#S#]$h#]#^!:w#^#i$h#i#j!:w#j~$h_!Ijb'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q![!Jr![!c$h!c!i!Jr!i#O$h#O#P%x#P#R$h#R#S!Jr#S#T$h#T#Z!Jr#Z~$h_!J{fuX'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q![!Jr![!c$h!c!i!Jr!i#O$h#O#P%x#P#R$h#R#S!Jr#S#T$h#T#Z!Jr#Z#]$h#]#^!:w#^#i$h#i#j!:w#j~$h_!Lj]!SX'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q![$h![!]!Mc!]#O$h#O#P%x#P~$h_!MlZdX'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$h_!NhZyX'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$h_# d^#RX'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q!^$h!^!_#!`!_!`3u!`#O$h#O#P%x#P~$h_#!i]'yX'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q!_$h!_!`:n!`#O$h#O#P%x#P~$h_##k^oX'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q!_$h!_!`3u!`!a#$g!a#O$h#O#P%x#P~$h_#$pZ#TX'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$h_#%l^#RX'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q!_$h!_!`3u!`!a#&h!a#O$h#O#P%x#P~$h_#&q]'zX'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q!_$h!_!`:n!`#O$h#O#P%x#P~$h_#'sZ(RX'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$hV#(oZ'qP'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$h_#)mh'`Q'PS!{W'UPOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q![#)b![!c$h!c!}#)b!}#O$h#O#P%x#P#R$h#R#S#)b#S#T$h#T#o#)b#o${$h${$|#)b$|4w$h4w5b#)b5b5i$h5i6S#)b6S~$h_#+bZ[X'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$hU#,YX'PSOz#,uz{#-]{!P#,u!P!Q#-q!Q#i#,u#i#j#.S#j#l#,u#l#m#2z#m~#,uU#,|TrQ'PSOz%xz{&^{!P%x!P!Q'S!Q~%xU#-bTrQOz&pz{&^{!P&p!P!Q({!Q~&pU#-vSrQOz&p{!P&p!P!Q'c!Q~&pU#.X['PSOz%xz{&^{!P%x!P!Q'S!Q![#.}![!c%x!c!i#.}!i#T%x#T#Z#.}#Z#o%x#o#p#1[#p~%xU#/SY'PSOz%xz{&^{!P%x!P!Q'S!Q![#/r![!c%x!c!i#/r!i#T%x#T#Z#/r#Z~%xU#/wY'PSOz%xz{&^{!P%x!P!Q'S!Q![#0g![!c%x!c!i#0g!i#T%x#T#Z#0g#Z~%xU#0lY'PSOz%xz{&^{!P%x!P!Q'S!Q![#,u![!c%x!c!i#,u!i#T%x#T#Z#,u#Z~%xU#1aY'PSOz%xz{&^{!P%x!P!Q'S!Q![#2P![!c%x!c!i#2P!i#T%x#T#Z#2P#Z~%xU#2U['PSOz%xz{&^{!P%x!P!Q'S!Q![#2P![!c%x!c!i#2P!i#T%x#T#Z#2P#Z#q%x#q#r#,u#r~%xU#3PY'PSOz%xz{&^{!P%x!P!Q'S!Q![#3o![!c%x!c!i#3o!i#T%x#T#Z#3o#Z~%xU#3tY'PSOz%xz{&^{!P%x!P!Q'S!Q![#,u![!c%x!c!i#,u!i#T%x#T#Z#,u#Z~%x_#4mZXX'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$h_#5i]'{X'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q!_$h!_!`:n!`#O$h#O#P%x#P~$h_#6mj'`Q'PS!{W'UPOY$hYZ%bZr$hrs#8_sw$hwx#8uxz$hz{)Q{!P$h!P!Q*p!Q![#)b![!c$h!c!}#)b!}#O$h#O#P%x#P#R$h#R#S#)b#S#T$h#T#o#)b#o${$h${$|#)b$|4w$h4w5b#)b5b5i$h5i6S#)b6S~$h]#8fT'PS'_XOz%xz{&^{!P%x!P!Q'S!Q~%x_#8|]'`Q'PSOY?dYZA`Zr?drsBdsw?dwx@dxz?dz{CO{!P?d!P!QDv!Q#O?d#O#PId#P~?d_#:Qi'`Q'PS!{W'UPOY$hYZ%bZr$hrs%xst#;otz$hz{)Q{!P$h!P!Q*p!Q![#)b![!c$h!c!}#)b!}#O$h#O#P%x#P#R$h#R#S#)b#S#T$h#T#o#)b#o${$h${$|#)b$|4w$h4w5b#)b5b5i$h5i6S#)b6S~$hV#;vg'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q!c$h!c!}#=_!}#O$h#O#P%x#P#R$h#R#S#=_#S#T$h#T#o#=_#o${$h${$|#=_$|4w$h4w5b#=_5b5i$h5i6S#=_6S~$hV#=hh'`Q'PS'UPOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q![#=_![!c$h!c!}#=_!}#O$h#O#P%x#P#R$h#R#S#=_#S#T$h#T#o#=_#o${$h${$|#=_$|4w$h4w5b#=_5b5i$h5i6S#=_6S~$h_#?]ZwX'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$h_#@X_'sX'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q!_$h!_!`:n!`#O$h#O#P%x#P#p$h#p#q#AW#q~$h_#AaZ'|X'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$h_#B]ZvX'`Q'PSOY$hYZ%bZr$hrs%xsz$hz{)Q{!P$h!P!Q*p!Q#O$h#O#P%x#P~$h",
            tokenizers: [Ep, Ip, Zp, 0, 1, 2, 3],
            topRules: {
                SourceFile: [0, 8]
            },
            specialized: [{
                term: 282,
                get: e => Up[e] || -1
            }],
            tokenPrec: 15890
        }),
        jp = ea.define({
            parser: Vp.configure({
                props: [Qa.add({
                    IfExpression: va({
                        except: /^\s*({|else\b)/
                    }),
                    "String BlockComment": () => -1,
                    "Statement MatchArm": va()
                }), Sa.add((e => /(Block|edTokens|List)$/.test(e.name) ? _a : "BlockComment" == e.name ? e => ({
                    from: e.from + 2,
                    to: e.to - 2
                }) : void 0)), ks({
                    "const macro_rules mod struct union enum type fn impl trait let use crate static": Fs.definitionKeyword,
                    "pub unsafe async mut extern default move": Fs.modifier,
                    "for if else loop while match continue break return await": Fs.controlKeyword,
                    "as in ref": Fs.operatorKeyword,
                    "where _ crate super dyn": Fs.keyword,
                    self: Fs.self,
                    String: Fs.string,
                    RawString: Fs.special(Fs.string),
                    Boolean: Fs.bool,
                    Identifier: Fs.variableName,
                    "CallExpression/Identifier": Fs.function(Fs.variableName),
                    BoundIdentifier: Fs.definition(Fs.variableName),
                    LoopLabel: Fs.labelName,
                    FieldIdentifier: Fs.propertyName,
                    "CallExpression/FieldExpression/FieldIdentifier": Fs.function(Fs.propertyName),
                    Lifetime: Fs.special(Fs.variableName),
                    ScopeIdentifier: Fs.namespace,
                    TypeIdentifier: Fs.typeName,
                    "MacroInvocation/Identifier MacroInvocation/ScopedIdentifier/Identifier": Fs.macroName,
                    "MacroInvocation/TypeIdentifier MacroInvocation/ScopedIdentifier/TypeIdentifier": Fs.macroName,
                    '"!"': Fs.macroName,
                    UpdateOp: Fs.updateOperator,
                    LineComment: Fs.lineComment,
                    BlockComment: Fs.blockComment,
                    Integer: Fs.integer,
                    Float: Fs.float,
                    ArithOp: Fs.arithmeticOperator,
                    LogicOp: Fs.logicOperator,
                    BitOp: Fs.bitwiseOperator,
                    CompareOp: Fs.compareOperator,
                    "=": Fs.definitionOperator,
                    ".. ... => ->": Fs.punctuation,
                    "( )": Fs.paren,
                    "[ ]": Fs.squareBracket,
                    "{ }": Fs.brace,
                    ".": Fs.derefOperator,
                    "&": Fs.operator,
                    ", ; ::": Fs.separator
                })]
            }),
            languageData: {
                commentTokens: {
                    line: "//",
                    block: {
                        open: "/*",
                        close: "*/"
                    }
                },
                indentOnInput: /^\s*(?:\{|\})$/
            }
        });
    var Ap = Object.freeze({
        __proto__: null,
        rust: function() {
            return new ca(jp)
        },
        rustLanguage: jp
    });

    function Cp(e) {
        return 45 == e || 46 == e || 58 == e || e >= 65 && e <= 90 || 95 == e || e >= 97 && e <= 122 || e >= 161
    }

    function Gp(e) {
        return 9 == e || 10 == e || 13 == e || 32 == e
    }
    let Lp = null,
        Np = null,
        Dp = 0;

    function Mp(e, t) {
        if (Dp == t && Np == e) return Lp;
        let n = e.get(t);
        for (; Gp(n);) n = e.get(++t);
        let r = t;
        for (; Cp(n);) n = e.get(++t);
        return Np = e, Dp = t, Lp = t > r ? e.read(r, t).toLowerCase() : null
    }

    function Bp(e, t) {
        this.name = e, this.parent = t, this.hash = t ? t.hash : 0;
        for (let t = 0; t < e.length; t++) this.hash += (this.hash << 4) + e.charCodeAt(t) + (e.charCodeAt(t) << 8)
    }
    const Fp = new Zl({
            start: null,
            shift: (e, t, n, r) => 1 == t ? new Bp(Mp(n, r.pos) || "", e) : e,
            reduce: (e, t) => 9 == t && e ? e.parent : e,
            reuse(e, t, n, r) {
                let i = t.type.id;
                return 1 == i || 11 == i ? new Bp(Mp(n, r.pos - t.length + 1) || "", e) : e
            },
            hash: e => e ? e.hash : 0,
            strict: !1
        }),
        Hp = new Pl(((e, t, n) => {
            let r = t.start;
            if (60 != e.get(r++)) return;
            let i = e.get(r);
            if (47 == i) {
                r++;
                let i = Mp(e, r);
                if (!i) return t.accept(4, r);
                if (n.context && i == n.context.name) return t.accept(2, r);
                for (let e = n.context; e; e = e.parent)
                    if (e.name == i) return;
                t.accept(3, r)
            } else if (33 != i && 63 != i) return t.accept(1, r)
        }));

    function Jp(e, t) {
        return new Pl(((n, r) => {
            let i = r.start,
                a = 0;
            for (;;) {
                let e = n.get(i);
                if (e < 0) break;
                if (i++, e == t.charCodeAt(a)) {
                    if (a++, a == t.length) {
                        i -= t.length;
                        break
                    }
                } else a = 0
            }
            i > r.start && r.accept(e, i)
        }))
    }
    const Kp = Jp(35, "--\x3e"),
        eh = Jp(36, "?>"),
        th = Jp(37, "?>"),
        nh = El.deserialize({
            version: 13,
            states: "-OOQOaOOOcObO'#CbOkOdO'#CcOOOP'#Cu'#CuOsOaO'#DSO!XOaOOOOOQ'#Cv'#CvO!aObO,58|OOOP,58|,58|OOOS'#Cw'#CwO!iOdO,58}OOOP,58},58}OOOP-E6s-E6sO!qO`O'#CgO!yOqO'#CeOOOP'#Ce'#CeO#kOaO'#CxQ#|OPOOO$ROaOOOOOQ-E6t-E6tOOOP1G.h1G.hOOOS-E6u-E6uOOOP1G.i1G.iOOOO'#Cy'#CyO$aO`O,59RO$iO!bO,59RO$wOhO'#CpO%PO`O'#CqOOOP'#D['#D[OOOP'#C|'#C|O!yOqO,59PO%XO`O'#CrOOOP,59P,59POOOP,59d,59dOOOP-E6v-E6vO#|OPOOOOOO-E6w-E6wO%aO!bO1G.mO%aO!bO1G.mO%oO`O'#CiO%wO!bO'#CzO&VO!bO1G.mOOOP1G.m1G.mOOOP1G.z1G.zOOOW'#C}'#C}O&bOhO,59[OOOP,59[,59[O&jO`O,59]O&rO`O,59]OOOP-E6z-E6zOOOP1G.k1G.kO&zO`O,59^O'SO`O,59^O'[O!bO7+$XO'jO!bO7+$XOOOP7+$X7+$XOOOP7+$f7+$fO'uO`O,59TO'}O`O,59TO(VO!bO,59fOOOO-E6x-E6xOOOW-E6{-E6{OOOP1G.v1G.vO(eO`O1G.wO(eO`O1G.wOOOP1G.w1G.wO(mO`O1G.xO(mO`O1G.xOOOP1G.x1G.xO(uO!bO<<GsOOOP<<Gs<<GsOOOP<<HQ<<HQO'}O`O1G.oO'}O`O1G.oO)QO#tO'#ClOOOO1G.o1G.oO)`O`O7+$cOOOP7+$c7+$cO)hO`O7+$dOOOP7+$d7+$dOOOPAN=_AN=_OOOPAN=lAN=lO'}O`O7+$ZOOOO7+$Z7+$ZOOOO'#C{'#C{O)pO#tO,59WOOOO,59W,59WOOOP<<G}<<G}OOOP<<HO<<HOOOOO<<Gu<<GuOOOO-E6y-E6yOOOO1G.r1G.r",
            stateData: "*O~OxPOyRO{QOPvPWvP~OsUOwWO~OtXOzZO~OxPOyRO{QOPvXWvXrvX~OP]OWbO~OsUOwdO~OtXOzfO~O[iOygO~OP]OQoORkOSlOalOblOclOxPO{QO!QjO~OxPOyRO{QOPvPrvP~OP]O~OxPOyRO{QOPvP~O[uOygO~OYzO^wOg{OygO~Ou|O!P!OO~O[!QOygO~O[!UOygO~OY!XO^wOg!YOygO~O_![OygO~OygOYnX^nXgnX~OY!XO^wOg!YO~Ou|O!P!`O~O[!aOygO~OY!cOygO~O[!dOygO~OY!fOygO~OY!hO^wOg!iOygO~OY!hO^wOg!iO~O_!jOygO~OygO|!lO~OygOYna^nagna~OY!oOygO~OY!qOygO~OY!rO^wOg!sO~Oa!vOb!vO|!xO}!vO~OY!yOygO~OY!zOygO~Oa!vOb!vO|!}O}!vO~O",
            goto: "&R!PPPPPPP!Q!QP![P!eP!lPP!uPPP!W!W#PP#V#^#f#l#r#y%R%b%h%nPPPP%tPPPPPPP%}WROS`bTl^nU`TasTl^nZ^T^ans_xiuvy!V!W!gQ!m![S!u!j!kR!{!tQp^R!SnZ_T^ansUSO`bR[SQVPRcVQYQReYSaTsRraQh]jthv!P!T!V!Z!]!b!e!k!n!p!tQviQ!PkQ!ToQ!VuQ!ZwQ!]xQ!b!QQ!e!UQ!k![Q!n!aQ!p!dR!t!jQyiS!WuvU!^y!W!gR!g!VQ!w!lR!|!wQn^R!RnQ}jR!_}QTOQq`RsbTm^n",
            nodeNames: "⚠ StartTag StartCloseTag StartCloseTag StartCloseTag Document Comment ProcessingInst DoctypeDecl Element EndTag OpenTag TagName Attribute AttributeName Is AttributeValue EntityReference CharacterReference Text Cdata MismatchedCloseTag CloseTag SelfCloseEndTag SelfClosingTag",
            maxTerm: 48,
            context: Fp,
            nodeProps: [
                [Ti.closedBy, 1, "SelfCloseEndTag EndTag", 11, "CloseTag"],
                [Ti.openedBy, 10, "StartTag StartCloseTag", 22, "OpenTag", 23, "StartTag"]
            ],
            skippedNodes: [0],
            repeatNodeCount: 9,
            tokenData: "Bk~R!WOX$kXY%rYZ%rZ]$k]^%r^p$kpq%rqr$krs&tsv$kvw'Uw}$k}!O(q!O!P$k!P!Q*n!Q![$k![!]+z!]!^$k!^!_/s!_!`=i!`!a>U!a!b>q!b!c$k!c!}+z!}#P$k#P#Q?}#Q#R$k#R#S+z#S#T$k#T#o+z#o%W$k%W%o+z%o%p$k%p&a+z&a&b$k&b1p+z1p4U$k4U4d+z4d4e$k4e$IS+z$IS$I`$k$I`$Ib+z$Ib$Kh$k$Kh%#t+z%#t&/x$k&/x&Et+z&Et&FV$k&FV;'S+z;'S;:jAz;:j?&r$k?&r?Ah+z?Ah?BY$k?BY?Mn+z?Mn~$kY$rUcQ}WOr$krs%Usv$kw!^$k!^!_%d!_~$kQ%ZRcQOv%Uw!^%U!_~%UW%iR}WOr%dsv%dw~%d_%{]cQ}WyTOX$kXY%rYZ%rZ]$k]^%r^p$kpq%rqr$krs%Usv$kw!^$k!^!_%d!_~$kZ&{R|XcQOv%Uw!^%U!_~%U~'XTOp'hqs'hst(Pt!]'h!^~'h~'kTOp'hqs'ht!]'h!]!^'z!^~'h~(POa~~(SROp(]q!](]!^~(]~(`SOp(]q!](]!]!^(l!^~(]~(qOb~Z(xWcQ}WOr$krs%Usv$kw}$k}!O)b!O!^$k!^!_%d!_~$kZ)iWcQ}WOr$krs%Usv$kw!^$k!^!_%d!_!`$k!`!a*R!a~$kZ*[UwPcQ}WOr$krs%Usv$kw!^$k!^!_%d!_~$k^*uWcQ}WOr$krs%Usv$kw!^$k!^!_%d!_!`$k!`!a+_!a~$k^+hUgScQ}WOr$krs%Usv$kw!^$k!^!_%d!_~$k_,V}^S[PcQ}WOr$krs%Usv$kw}$k}!O+z!O!P+z!P!Q$k!Q![+z![!]+z!]!^$k!^!_%d!_!c$k!c!}+z!}#R$k#R#S+z#S#T$k#T#o+z#o$}$k$}%O+z%O%W$k%W%o+z%o%p$k%p&a+z&a&b$k&b1p+z1p4U+z4U4d+z4d4e$k4e$IS+z$IS$I`$k$I`$Ib+z$Ib$Je$k$Je$Jg+z$Jg$Kh$k$Kh%#t+z%#t&/x$k&/x&Et+z&Et&FV$k&FV;'S+z;'S;:j/S;:j?&r$k?&r?Ah+z?Ah?BY$k?BY?Mn+z?Mn~$k_/ZWcQ}WOr$krs%Usv$kw!^$k!^!_%d!_;=`$k;=`<%l+z<%l~$kZ/xU}WOq%dqr0[sv%dw!a%d!a!b=X!b~%dZ0aZ}WOr%dsv%dw}%d}!O1S!O!f%d!f!g1x!g!}%d!}#O5s#O#W%d#W#X:k#X~%dZ1XT}WOr%dsv%dw}%d}!O1h!O~%dZ1oRxR}WOr%dsv%dw~%dX1}T}WOr%dsv%dw!q%d!q!r2^!r~%dX2cT}WOr%dsv%dw!e%d!e!f2r!f~%dX2wT}WOr%dsv%dw!v%d!v!w3W!w~%dX3]T}WOr%dsv%dw!{%d!{!|3l!|~%dX3qT}WOr%dsv%dw!r%d!r!s4Q!s~%dX4VT}WOr%dsv%dw!g%d!g!h4f!h~%dX4kV}WOr4frs5Qsv4fvw5Qw!`4f!`!a5c!a~4fP5TRO!`5Q!`!a5^!a~5QP5cOWPX5jRWP}WOr%dsv%dw~%dY5xV}WOr%dsv%dw!e%d!e!f6_!f#V%d#V#W8w#W~%dY6dT}WOr%dsv%dw!f%d!f!g6s!g~%dY6xT}WOr%dsv%dw!c%d!c!d7X!d~%dY7^T}WOr%dsv%dw!v%d!v!w7m!w~%dY7rT}WOr%dsv%dw!c%d!c!d8R!d~%dY8WT}WOr%dsv%dw!}%d!}#O8g#O~%dY8nR}W!QQOr%dsv%dw~%dY8|T}WOr%dsv%dw#W%d#W#X9]#X~%dY9bT}WOr%dsv%dw#T%d#T#U9q#U~%dY9vT}WOr%dsv%dw#h%d#h#i:V#i~%dY:[T}WOr%dsv%dw#T%d#T#U8R#U~%dX:pT}WOr%dsv%dw#c%d#c#d;P#d~%dX;UT}WOr%dsv%dw#V%d#V#W;e#W~%dX;jT}WOr%dsv%dw#h%d#h#i;y#i~%dX<OT}WOr%dsv%dw#m%d#m#n<_#n~%dX<dT}WOr%dsv%dw#d%d#d#e<s#e~%dX<xT}WOr%dsv%dw#X%d#X#Y4f#Y~%dZ=`R{R}WOr%dsv%dw~%dZ=rU_PcQ}WOr$krs%Usv$kw!^$k!^!_%d!_~$k_>_UYTcQ}WOr$krs%Usv$kw!^$k!^!_%d!_~$kZ>xWcQ}WOr$krs%Usv$kw!^$k!^!_%d!_!`$k!`!a?b!a~$kZ?kUzPcQ}WOr$krs%Usv$kw!^$k!^!_%d!_~$kZ@UWcQ}WOr$krs%Usv$kw!^$k!^!_%d!_#P$k#P#Q@n#Q~$kZ@uWcQ}WOr$krs%Usv$kw!^$k!^!_%d!_!`$k!`!aA_!a~$kZAhU!PPcQ}WOr$krs%Usv$kw!^$k!^!_%d!_~$k_BRWcQ}WOr$krs%Usv$kw!^$k!^!_%d!_;=`$k;=`<%l+z<%l~$k",
            tokenizers: [Hp, Kp, eh, th, 0, 1, 2, 3],
            topRules: {
                Document: [0, 5]
            },
            tokenPrec: 0
        });

    function rh(e, t) {
        let n = t && t.getChild("TagName");
        return n ? e.sliceString(n.from, n.to) : ""
    }

    function ih(e, t) {
        let n = t && t.firstChild;
        return n && "OpenTag" == n.name ? rh(e, n) : ""
    }

    function ah(e) {
        for (let t = e && e.parent; t; t = t.parent)
            if ("Element" == t.name) return t;
        return null
    }
    class oh {
        constructor(e, t, n) {
            this.attrs = t, this.attrValues = n, this.children = [], this.name = e.name, this.completion = Object.assign(Object.assign({
                type: "type"
            }, e.completion || {}), {
                label: this.name
            }), this.openCompletion = Object.assign(Object.assign({}, this.completion), {
                label: "<" + this.name
            }), this.closeCompletion = Object.assign(Object.assign({}, this.completion), {
                label: "</" + this.name + ">",
                boost: 2
            }), this.closeNameCompletion = Object.assign(Object.assign({}, this.completion), {
                label: this.name + ">"
            }), this.text = e.textContent ? e.textContent.map((e => ({
                label: e,
                type: "text"
            }))) : []
        }
    }
    const sh = /^[:\-\.\w\u00b7-\uffff]*$/;

    function Oh(e) {
        return Object.assign(Object.assign({
            type: "property"
        }, e.completion || {}), {
            label: e.name
        })
    }

    function lh(e) {
        return "string" == typeof e ? {
            label: `"${e}"`,
            type: "constant"
        } : /^"/.test(e.label) ? e : Object.assign(Object.assign({}, e), {
            label: `"${e.label}"`
        })
    }

    function ch(e, t) {
        let n = [],
            r = [],
            i = Object.create(null);
        for (let e of t) {
            let t = Oh(e);
            n.push(t), e.global && r.push(t), e.values && (i[e.name] = e.values.map(lh))
        }
        let a = [],
            o = [],
            s = Object.create(null);
        for (let t of e) {
            let e = r,
                O = i;
            t.attributes && (e = e.concat(t.attributes.map((e => "string" == typeof e ? n.find((t => t.label == e)) || {
                label: e,
                type: "property"
            } : (e.values && (O == i && (O = Object.create(O)), O[e.name] = e.values.map(lh)), Oh(e))))));
            let l = new oh(t, e, O);
            s[l.name] = l, a.push(l), t.top && o.push(l)
        }
        o.length || (o = a);
        for (let t = 0; t < a.length; t++) {
            let n = e[t],
                r = a[t];
            if (n.children)
                for (let e of n.children) s[e] && r.children.push(s[e]);
            else r.children = a
        }
        return e => {
            var t;
            let {
                doc: n
            } = e.state, O = function(e, t) {
                var n;
                let r = ta(e).resolve(t, -1),
                    i = null;
                for (let e = r; !i && e.parent; e = e.parent) "OpenTag" != e.name && "CloseTag" != e.name && "SelfClosingTag" != e.name && "MismatchedCloseTag" != e.name || (i = e);
                if (i && (i.to > t || i.lastChild.type.isError)) {
                    let e = i.parent;
                    if ("TagName" == r.name) return "CloseTag" == i.name || "MismatchedCloseTag" == i.name ? {
                        type: "closeTag",
                        from: r.from,
                        context: e
                    } : {
                        type: "openTag",
                        from: r.from,
                        context: ah(e)
                    };
                    if ("AttributeName" == r.name) return {
                        type: "attrName",
                        from: r.from,
                        context: i
                    };
                    if ("AttributeValue" == r.name) return {
                        type: "attrValue",
                        from: r.from,
                        context: i
                    };
                    let n = r == i || "Attribute" == r.name ? r.childBefore(t) : r;
                    return "StartTag" == (null == n ? void 0 : n.name) ? {
                        type: "openTag",
                        from: t,
                        context: ah(e)
                    } : "StartCloseTag" == (null == n ? void 0 : n.name) && n.to <= t ? {
                        type: "closeTag",
                        from: t,
                        context: e
                    } : "Is" == (null == n ? void 0 : n.name) ? {
                        type: "attrValue",
                        from: t,
                        context: i
                    } : n ? {
                        type: "attrName",
                        from: t,
                        context: i
                    } : null
                }
                if ("StartCloseTag" == r.name) return {
                    type: "closeTag",
                    from: t,
                    context: r.parent
                };
                for (; r.parent && r.to == t && !(null === (n = r.lastChild) || void 0 === n ? void 0 : n.type.isError);) r = r.parent;
                return "Element" == r.name || "Text" == r.name || "Document" == r.name ? {
                    type: "tag",
                    from: t,
                    context: "Element" == r.name ? r : ah(r)
                } : null
            }(e.state, e.pos);
            if (!O || "tag" == O.type && !e.explicit) return null;
            let {
                type: l,
                from: c,
                context: u
            } = O;
            if ("openTag" == l) {
                let e = o,
                    t = ih(n, u);
                if (t) {
                    let n = s[t];
                    e = (null == n ? void 0 : n.children) || a
                }
                return {
                    from: c,
                    options: e.map((e => e.completion)),
                    span: sh
                }
            }
            if ("closeTag" == l) {
                let r = ih(n, u);
                return r ? {
                    from: c,
                    to: e.pos + (">" == n.sliceString(e.pos, e.pos + 1) ? 1 : 0),
                    options: [(null === (t = s[r]) || void 0 === t ? void 0 : t.closeNameCompletion) || {
                        label: r + ">",
                        type: "type"
                    }],
                    span: sh
                } : null
            }
            if ("attrName" == l) {
                let e = s[rh(n, u)];
                return {
                    from: c,
                    options: (null == e ? void 0 : e.attrs) || r,
                    span: sh
                }
            }
            if ("attrValue" == l) {
                let t = function(e, t, n) {
                    let r = t && t.getChildren("Attribute").find((e => e.from <= n && e.to >= n)),
                        i = r && r.getChild("AttributeName");
                    return i ? e.sliceString(i.from, i.to) : ""
                }(n, u, c);
                if (!t) return null;
                let r = s[rh(n, u)],
                    a = ((null == r ? void 0 : r.attrValues) || i)[t];
                return a && a.length ? {
                    from: c,
                    to: e.pos + ('"' == n.sliceString(e.pos, e.pos + 1) ? 1 : 0),
                    options: a,
                    span: /^"[^"]*"?$/
                } : null
            }
            if ("tag" == l) {
                let t = ih(n, u),
                    r = s[t],
                    i = [],
                    O = u && u.lastChild;
                !t || O && "CloseTag" == O.name && rh(n, O) == t || i.push(r ? r.closeCompletion : {
                    label: "</" + t + ">",
                    type: "type",
                    boost: 2
                });
                let l = i.concat(((null == r ? void 0 : r.children) || (u ? a : o)).map((e => e.openCompletion)));
                if (u && (null == r ? void 0 : r.text.length)) {
                    let t = u.firstChild;
                    t.to > e.pos - 20 && !/\S/.test(e.state.sliceDoc(t.to, e.pos)) && (l = l.concat(r.text))
                }
                return {
                    from: c,
                    options: l,
                    span: /^<\/?[:\-\.\w\u00b7-\uffff]*$/
                }
            }
            return null
        }
    }
    const uh = ea.define({
        parser: nh.configure({
            props: [Qa.add({
                Element(e) {
                    let t = /^\s*<\//.test(e.textAfter);
                    return e.lineIndent(e.state.doc.lineAt(e.node.from)) + (t ? 0 : e.unit)
                },
                "OpenTag CloseTag SelfClosingTag": e => e.column(e.node.from) + e.unit
            }), Sa.add({
                Element(e) {
                    let t = e.firstChild,
                        n = e.lastChild;
                    return t && "OpenTag" == t.name ? {
                        from: t.to,
                        to: "CloseTag" == n.name ? n.from : e.to
                    } : null
                }
            }), ks({
                AttributeValue: Fs.string,
                Text: Fs.content,
                "StartTag StartCloseTag EndTag SelfCloseEndTag": Fs.angleBracket,
                TagName: Fs.tagName,
                "MismatchedCloseTag/Tagname": [Fs.tagName, Fs.invalid],
                AttributeName: Fs.propertyName,
                UnquotedAttributeValue: Fs.string,
                Is: Fs.definitionOperator,
                "EntityReference CharacterReference": Fs.character,
                Comment: Fs.blockComment,
                ProcessingInst: Fs.processingInstruction,
                DoctypeDecl: Fs.documentMeta,
                Cdata: Fs.special(Fs.string)
            })]
        }),
        languageData: {
            commentTokens: {
                block: {
                    open: "\x3c!--",
                    close: "--\x3e"
                }
            },
            indentOnInput: /^\s*<\/$/
        }
    });
    var dh = Object.freeze({
            __proto__: null,
            completeFromSchema: ch,
            xml: function(e = {}) {
                return new ca(uh, uh.data.of({
                    autocomplete: ch(e.elements || [], e.attributes || [])
                }))
            },
            xmlLanguage: uh
        }),
        ph = {
            "+": ["conjugate", "add"],
            "−": ["negate", "subtract"],
            "×": ["signOf", "multiply"],
            "÷": ["reciprocal", "divide"],
            "⌈": ["ceiling", "greaterOf"],
            "⌊": ["floor", "lesserOf"],
            "∣": ["absolute", "residue"],
            "⍳": ["indexGenerate", "indexOf"],
            "?": ["roll", "deal"],
            "⋆": ["exponentiate", "toThePowerOf"],
            "⍟": ["naturalLog", "logToTheBase"],
            "○": ["piTimes", "circularFuncs"],
            "!": ["factorial", "binomial"],
            "⌹": ["matrixInverse", "matrixDivide"],
            "<": [null, "lessThan"],
            "≤": [null, "lessThanOrEqual"],
            "=": [null, "equals"],
            ">": [null, "greaterThan"],
            "≥": [null, "greaterThanOrEqual"],
            "≠": [null, "notEqual"],
            "≡": ["depth", "match"],
            "≢": [null, "notMatch"],
            "∈": ["enlist", "membership"],
            "⍷": [null, "find"],
            "∪": ["unique", "union"],
            "∩": [null, "intersection"],
            "∼": ["not", "without"],
            "∨": [null, "or"],
            "∧": [null, "and"],
            "⍱": [null, "nor"],
            "⍲": [null, "nand"],
            "⍴": ["shapeOf", "reshape"],
            ",": ["ravel", "catenate"],
            "⍪": [null, "firstAxisCatenate"],
            "⌽": ["reverse", "rotate"],
            "⊖": ["axis1Reverse", "axis1Rotate"],
            "⍉": ["transpose", null],
            "↑": ["first", "take"],
            "↓": [null, "drop"],
            "⊂": ["enclose", "partitionWithAxis"],
            "⊃": ["diclose", "pick"],
            "⌷": [null, "index"],
            "⍋": ["gradeUp", null],
            "⍒": ["gradeDown", null],
            "⊤": ["encode", null],
            "⊥": ["decode", null],
            "⍕": ["format", "formatByExample"],
            "⍎": ["execute", null],
            "⊣": ["stop", "left"],
            "⊢": ["pass", "right"]
        },
        hh = /[\.\/⌿⍀¨⍣]/,
        fh = /⍬/,
        mh = /[\+−×÷⌈⌊∣⍳\?⋆⍟○!⌹<≤=>≥≠≡≢∈⍷∪∩∼∨∧⍱⍲⍴,⍪⌽⊖⍉↑↓⊂⊃⌷⍋⍒⊤⊥⍕⍎⊣⊢]/,
        gh = /←/,
        Qh = /[⍝#].*$/;
    const $h = {
        startState: function() {
            return {
                prev: !1,
                func: !1,
                op: !1,
                string: !1,
                escape: !1
            }
        },
        token: function(e, t) {
            var n;
            return e.eatSpace() ? null : '"' === (n = e.next()) || "'" === n ? (e.eatWhile(function(e) {
                var t;
                return t = !1,
                    function(n) {
                        return t = n, n !== e || "\\" === t
                    }
            }(n)), e.next(), t.prev = !0, "string") : /[\[{\(]/.test(n) ? (t.prev = !1, null) : /[\]}\)]/.test(n) ? (t.prev = !0, null) : fh.test(n) ? (t.prev = !1, "atom") : /[¯\d]/.test(n) ? (t.func ? (t.func = !1, t.prev = !1) : t.prev = !0, e.eatWhile(/[\w\.]/), "number") : hh.test(n) || gh.test(n) ? "operator" : mh.test(n) ? (t.func = !0, t.prev = !1, ph[n] ? "variableName.function.standard" : "variableName.function") : Qh.test(n) ? (e.skipToEnd(), "comment") : "∘" === n && "." === e.peek() ? (e.next(), "variableName.function") : (e.eatWhile(/[\w\$_]/), t.prev = !0, "keyword")
        }
    };
    var bh = Object.freeze({
        __proto__: null,
        apl: $h
    });

    function xh(e) {
        var t = e.match(/^\s*\S/);
        return e.skipToEnd(), t ? "error" : null
    }
    const Ph = {
        token: function(e, t) {
            var n;
            if ("top" == t.state) return e.sol() && (n = e.match(/^-----BEGIN (.*)?-----\s*$/)) ? (t.state = "headers", t.type = n[1], "tag") : xh(e);
            if ("headers" == t.state) {
                if (e.sol() && e.match(/^\w+:/)) return t.state = "header", "atom";
                var r = xh(e);
                return r && (t.state = "body"), r
            }
            return "header" == t.state ? (e.skipToEnd(), t.state = "headers", "string") : "body" == t.state ? e.sol() && (n = e.match(/^-----END (.*)?-----\s*$/)) ? n[1] != t.type ? "error" : (t.state = "end", "tag") : e.eatWhile(/[A-Za-z0-9+\/=]/) ? null : (e.next(), "error") : "end" == t.state ? xh(e) : void 0
        },
        blankLine: function(e) {
            "headers" == e.state && (e.state = "body")
        },
        startState: function() {
            return {
                state: "top",
                type: null
            }
        }
    };
    var wh = Object.freeze({
        __proto__: null,
        asciiArmor: Ph
    });

    function kh(e) {
        for (var t = {}, n = e.split(" "), r = 0; r < n.length; ++r) t[n[r]] = !0;
        return t
    }
    const yh = {
        keywords: kh("DEFINITIONS OBJECTS IF DERIVED INFORMATION ACTION REPLY ANY NAMED CHARACTERIZED BEHAVIOUR REGISTERED WITH AS IDENTIFIED CONSTRAINED BY PRESENT BEGIN IMPORTS FROM UNITS SYNTAX MIN-ACCESS MAX-ACCESS MINACCESS MAXACCESS REVISION STATUS DESCRIPTION SEQUENCE SET COMPONENTS OF CHOICE DistinguishedName ENUMERATED SIZE MODULE END INDEX AUGMENTS EXTENSIBILITY IMPLIED EXPORTS"),
        cmipVerbs: kh("ACTIONS ADD GET NOTIFICATIONS REPLACE REMOVE"),
        compareTypes: kh("OPTIONAL DEFAULT MANAGED MODULE-TYPE MODULE_IDENTITY MODULE-COMPLIANCE OBJECT-TYPE OBJECT-IDENTITY OBJECT-COMPLIANCE MODE CONFIRMED CONDITIONAL SUBORDINATE SUPERIOR CLASS TRUE FALSE NULL TEXTUAL-CONVENTION"),
        status: kh("current deprecated mandatory obsolete"),
        tags: kh("APPLICATION AUTOMATIC EXPLICIT IMPLICIT PRIVATE TAGS UNIVERSAL"),
        storage: kh("BOOLEAN INTEGER OBJECT IDENTIFIER BIT OCTET STRING UTCTime InterfaceIndex IANAifType CMIP-Attribute REAL PACKAGE PACKAGES IpAddress PhysAddress NetworkAddress BITS BMPString TimeStamp TimeTicks TruthValue RowStatus DisplayString GeneralString GraphicString IA5String NumericString PrintableString SnmpAdminString TeletexString UTF8String VideotexString VisibleString StringStore ISO646String T61String UniversalString Unsigned32 Integer32 Gauge Gauge32 Counter Counter32 Counter64"),
        modifier: kh("ATTRIBUTE ATTRIBUTES MANDATORY-GROUP MANDATORY-GROUPS GROUP GROUPS ELEMENTS EQUALITY ORDERING SUBSTRINGS DEFINED"),
        accessTypes: kh("not-accessible accessible-for-notify read-only read-create read-write"),
        multiLineStrings: !0
    };
    var vh = Object.freeze({
            __proto__: null,
            asn1: function(e) {
                var t, n = e.keywords || yh.keywords,
                    r = e.cmipVerbs || yh.cmipVerbs,
                    i = e.compareTypes || yh.compareTypes,
                    a = e.status || yh.status,
                    o = e.tags || yh.tags,
                    s = e.storage || yh.storage,
                    O = e.modifier || yh.modifier,
                    l = e.accessTypes || yh.accessTypes,
                    c = e.multiLineStrings || yh.multiLineStrings,
                    u = !1 !== e.indentStatements,
                    d = /[\|\^]/;

                function p(e, u) {
                    var p = e.next();
                    if ('"' == p || "'" == p) return u.tokenize = function(e) {
                        return function(t, n) {
                            for (var r, i = !1, a = !1; null != (r = t.next());) {
                                if (r == e && !i) {
                                    var o = t.peek();
                                    o && ("b" != (o = o.toLowerCase()) && "h" != o && "o" != o || t.next()), a = !0;
                                    break
                                }
                                i = !i && "\\" == r
                            }
                            return (a || !i && !c) && (n.tokenize = null), "string"
                        }
                    }(p), u.tokenize(e, u);
                    if (/[\[\]\(\){}:=,;]/.test(p)) return t = p, "punctuation";
                    if ("-" == p && e.eat("-")) return e.skipToEnd(), "comment";
                    if (/\d/.test(p)) return e.eatWhile(/[\w\.]/), "number";
                    if (d.test(p)) return e.eatWhile(d), "operator";
                    e.eatWhile(/[\w\-]/);
                    var h = e.current();
                    return n.propertyIsEnumerable(h) ? "keyword" : r.propertyIsEnumerable(h) ? "variableName" : i.propertyIsEnumerable(h) ? "atom" : a.propertyIsEnumerable(h) ? "comment" : o.propertyIsEnumerable(h) ? "typeName" : s.propertyIsEnumerable(h) || O.propertyIsEnumerable(h) || l.propertyIsEnumerable(h) ? "modifier" : "variableName"
                }

                function h(e, t, n, r, i) {
                    this.indented = e, this.column = t, this.type = n, this.align = r, this.prev = i
                }

                function f(e, t, n) {
                    var r = e.indented;
                    return e.context && "statement" == e.context.type && (r = e.context.indented), e.context = new h(r, t, n, null, e.context)
                }

                function m(e) {
                    var t = e.context.type;
                    return ")" != t && "]" != t && "}" != t || (e.indented = e.context.indented), e.context = e.context.prev
                }
                return {
                    startState: function() {
                        return {
                            tokenize: null,
                            context: new h(-2, 0, "top", !1),
                            indented: 0,
                            startOfLine: !0
                        }
                    },
                    token: function(e, n) {
                        var r = n.context;
                        if (e.sol() && (null == r.align && (r.align = !1), n.indented = e.indentation(), n.startOfLine = !0), e.eatSpace()) return null;
                        t = null;
                        var i = (n.tokenize || p)(e, n);
                        if ("comment" == i) return i;
                        if (null == r.align && (r.align = !0), ";" != t && ":" != t && "," != t || "statement" != r.type)
                            if ("{" == t) f(n, e.column(), "}");
                            else if ("[" == t) f(n, e.column(), "]");
                        else if ("(" == t) f(n, e.column(), ")");
                        else if ("}" == t) {
                            for (;
                                "statement" == r.type;) r = m(n);
                            for ("}" == r.type && (r = m(n));
                                "statement" == r.type;) r = m(n)
                        } else t == r.type ? m(n) : u && (("}" == r.type || "top" == r.type) && ";" != t || "statement" == r.type && "newstatement" == t) && f(n, e.column(), "statement");
                        else m(n);
                        return n.startOfLine = !1, i
                    },
                    languageData: {
                        indentOnInput: /^\s*[{}]$/,
                        commentTokens: {
                            line: "--"
                        }
                    }
                }
            }
        }),
        Sh = ["exten", "same", "include", "ignorepat", "switch"],
        _h = ["#include", "#exec"],
        Xh = ["addqueuemember", "adsiprog", "aelsub", "agentlogin", "agentmonitoroutgoing", "agi", "alarmreceiver", "amd", "answer", "authenticate", "background", "backgrounddetect", "bridge", "busy", "callcompletioncancel", "callcompletionrequest", "celgenuserevent", "changemonitor", "chanisavail", "channelredirect", "chanspy", "clearhash", "confbridge", "congestion", "continuewhile", "controlplayback", "dahdiacceptr2call", "dahdibarge", "dahdiras", "dahdiscan", "dahdisendcallreroutingfacility", "dahdisendkeypadfacility", "datetime", "dbdel", "dbdeltree", "deadagi", "dial", "dictate", "directory", "disa", "dumpchan", "eagi", "echo", "endwhile", "exec", "execif", "execiftime", "exitwhile", "extenspy", "externalivr", "festival", "flash", "followme", "forkcdr", "getcpeid", "gosub", "gosubif", "goto", "gotoif", "gotoiftime", "hangup", "iax2provision", "ices", "importvar", "incomplete", "ivrdemo", "jabberjoin", "jabberleave", "jabbersend", "jabbersendgroup", "jabberstatus", "jack", "log", "macro", "macroexclusive", "macroexit", "macroif", "mailboxexists", "meetme", "meetmeadmin", "meetmechanneladmin", "meetmecount", "milliwatt", "minivmaccmess", "minivmdelete", "minivmgreet", "minivmmwi", "minivmnotify", "minivmrecord", "mixmonitor", "monitor", "morsecode", "mp3player", "mset", "musiconhold", "nbscat", "nocdr", "noop", "odbc", "odbc", "odbcfinish", "originate", "ospauth", "ospfinish", "osplookup", "ospnext", "page", "park", "parkandannounce", "parkedcall", "pausemonitor", "pausequeuemember", "pickup", "pickupchan", "playback", "playtones", "privacymanager", "proceeding", "progress", "queue", "queuelog", "raiseexception", "read", "readexten", "readfile", "receivefax", "receivefax", "receivefax", "record", "removequeuemember", "resetcdr", "retrydial", "return", "ringing", "sayalpha", "saycountedadj", "saycountednoun", "saycountpl", "saydigits", "saynumber", "sayphonetic", "sayunixtime", "senddtmf", "sendfax", "sendfax", "sendfax", "sendimage", "sendtext", "sendurl", "set", "setamaflags", "setcallerpres", "setmusiconhold", "sipaddheader", "sipdtmfmode", "sipremoveheader", "skel", "slastation", "slatrunk", "sms", "softhangup", "speechactivategrammar", "speechbackground", "speechcreate", "speechdeactivategrammar", "speechdestroy", "speechloadgrammar", "speechprocessingsound", "speechstart", "speechunloadgrammar", "stackpop", "startmusiconhold", "stopmixmonitor", "stopmonitor", "stopmusiconhold", "stopplaytones", "system", "testclient", "testserver", "transfer", "tryexec", "trysystem", "unpausemonitor", "unpausequeuemember", "userevent", "verbose", "vmauthenticate", "vmsayname", "voicemail", "voicemailmain", "wait", "waitexten", "waitfornoise", "waitforring", "waitforsilence", "waitmusiconhold", "waituntil", "while", "zapateller"];
    const Th = {
        startState: function() {
            return {
                blockComment: !1,
                extenStart: !1,
                extenSame: !1,
                extenInclude: !1,
                extenExten: !1,
                extenPriority: !1,
                extenApplication: !1
            }
        },
        token: function(e, t) {
            var n = "";
            return e.eatSpace() ? null : t.extenStart ? (e.eatWhile(/[^\s]/), n = e.current(), /^=>?$/.test(n) ? (t.extenExten = !0, t.extenStart = !1, "strong") : (t.extenStart = !1, e.skipToEnd(), "error")) : t.extenExten ? (t.extenExten = !1, t.extenPriority = !0, e.eatWhile(/[^,]/), t.extenInclude && (e.skipToEnd(), t.extenPriority = !1, t.extenInclude = !1), t.extenSame && (t.extenPriority = !1, t.extenSame = !1, t.extenApplication = !0), "tag") : t.extenPriority ? (t.extenPriority = !1, t.extenApplication = !0, e.next(), t.extenSame ? null : (e.eatWhile(/[^,]/), "number")) : t.extenApplication ? (e.eatWhile(/,/), "," === (n = e.current()) ? null : (e.eatWhile(/\w/), n = e.current().toLowerCase(), t.extenApplication = !1, -1 !== Xh.indexOf(n) ? "def" : null)) : function(e, t) {
                var n = "",
                    r = e.next();
                if (t.blockComment) return "-" == r && e.match("-;", !0) ? t.blockComment = !1 : e.skipTo("--;") ? (e.next(), e.next(), e.next(), t.blockComment = !1) : e.skipToEnd(), "comment";
                if (";" == r) return e.match("--", !0) && !e.match("-", !1) ? (t.blockComment = !0, "comment") : (e.skipToEnd(), "comment");
                if ("[" == r) return e.skipTo("]"), e.eat("]"), "header";
                if ('"' == r) return e.skipTo('"'), "string";
                if ("'" == r) return e.skipTo("'"), "string.special";
                if ("#" == r && (e.eatWhile(/\w/), n = e.current(), -1 !== _h.indexOf(n))) return e.skipToEnd(), "strong";
                if ("$" == r && "{" == e.peek()) return e.skipTo("}"), e.eat("}"), "variableName.special";
                if (e.eatWhile(/\w/), n = e.current(), -1 !== Sh.indexOf(n)) {
                    switch (t.extenStart = !0, n) {
                        case "same":
                            t.extenSame = !0;
                            break;
                        case "include":
                        case "switch":
                        case "ignorepat":
                            t.extenInclude = !0
                    }
                    return "atom"
                }
            }(e, t)
        },
        languageData: {
            commentTokens: {
                line: ";",
                block: {
                    open: ";--",
                    close: "--;"
                }
            }
        }
    };
    var Rh = Object.freeze({
            __proto__: null,
            asterisk: Th
        }),
        Wh = "><+-.,[]".split("");
    const qh = {
        startState: function() {
            return {
                commentLine: !1,
                left: 0,
                right: 0,
                commentLoop: !1
            }
        },
        token: function(e, t) {
            if (e.eatSpace()) return null;
            e.sol() && (t.commentLine = !1);
            var n = e.next().toString();
            return -1 === Wh.indexOf(n) ? (t.commentLine = !0, e.eol() && (t.commentLine = !1), "comment") : !0 === t.commentLine ? (e.eol() && (t.commentLine = !1), "comment") : "]" === n || "[" === n ? ("[" === n ? t.left++ : t.right++, "bracket") : "+" === n || "-" === n ? "keyword" : "<" === n || ">" === n ? "atom" : "." === n || "," === n ? "def" : void(e.eol() && (t.commentLine = !1))
        }
    };
    var Yh = Object.freeze({
            __proto__: null,
            brainfuck: qh
        }),
        zh = "string",
        Zh = "atom";

    function Eh(e) {
        for (var t = {}, n = e.split(" "), r = 0; r < n.length; ++r) t[n[r]] = !0;
        return t
    }
    var Ih = Eh("TRUE FALSE ZEROES ZEROS ZERO SPACES SPACE LOW-VALUE LOW-VALUES "),
        Uh = Eh("ACCEPT ACCESS ACQUIRE ADD ADDRESS ADVANCING AFTER ALIAS ALL ALPHABET ALPHABETIC ALPHABETIC-LOWER ALPHABETIC-UPPER ALPHANUMERIC ALPHANUMERIC-EDITED ALSO ALTER ALTERNATE AND ANY ARE AREA AREAS ARITHMETIC ASCENDING ASSIGN AT ATTRIBUTE AUTHOR AUTO AUTO-SKIP AUTOMATIC B-AND B-EXOR B-LESS B-NOT B-OR BACKGROUND-COLOR BACKGROUND-COLOUR BEEP BEFORE BELL BINARY BIT BITS BLANK BLINK BLOCK BOOLEAN BOTTOM BY CALL CANCEL CD CF CH CHARACTER CHARACTERS CLASS CLOCK-UNITS CLOSE COBOL CODE CODE-SET COL COLLATING COLUMN COMMA COMMIT COMMITMENT COMMON COMMUNICATION COMP COMP-0 COMP-1 COMP-2 COMP-3 COMP-4 COMP-5 COMP-6 COMP-7 COMP-8 COMP-9 COMPUTATIONAL COMPUTATIONAL-0 COMPUTATIONAL-1 COMPUTATIONAL-2 COMPUTATIONAL-3 COMPUTATIONAL-4 COMPUTATIONAL-5 COMPUTATIONAL-6 COMPUTATIONAL-7 COMPUTATIONAL-8 COMPUTATIONAL-9 COMPUTE CONFIGURATION CONNECT CONSOLE CONTAINED CONTAINS CONTENT CONTINUE CONTROL CONTROL-AREA CONTROLS CONVERTING COPY CORR CORRESPONDING COUNT CRT CRT-UNDER CURRENCY CURRENT CURSOR DATA DATE DATE-COMPILED DATE-WRITTEN DAY DAY-OF-WEEK DB DB-ACCESS-CONTROL-KEY DB-DATA-NAME DB-EXCEPTION DB-FORMAT-NAME DB-RECORD-NAME DB-SET-NAME DB-STATUS DBCS DBCS-EDITED DE DEBUG-CONTENTS DEBUG-ITEM DEBUG-LINE DEBUG-NAME DEBUG-SUB-1 DEBUG-SUB-2 DEBUG-SUB-3 DEBUGGING DECIMAL-POINT DECLARATIVES DEFAULT DELETE DELIMITED DELIMITER DEPENDING DESCENDING DESCRIBED DESTINATION DETAIL DISABLE DISCONNECT DISPLAY DISPLAY-1 DISPLAY-2 DISPLAY-3 DISPLAY-4 DISPLAY-5 DISPLAY-6 DISPLAY-7 DISPLAY-8 DISPLAY-9 DIVIDE DIVISION DOWN DROP DUPLICATE DUPLICATES DYNAMIC EBCDIC EGI EJECT ELSE EMI EMPTY EMPTY-CHECK ENABLE END END. END-ACCEPT END-ACCEPT. END-ADD END-CALL END-COMPUTE END-DELETE END-DISPLAY END-DIVIDE END-EVALUATE END-IF END-INVOKE END-MULTIPLY END-OF-PAGE END-PERFORM END-READ END-RECEIVE END-RETURN END-REWRITE END-SEARCH END-START END-STRING END-SUBTRACT END-UNSTRING END-WRITE END-XML ENTER ENTRY ENVIRONMENT EOP EQUAL EQUALS ERASE ERROR ESI EVALUATE EVERY EXCEEDS EXCEPTION EXCLUSIVE EXIT EXTEND EXTERNAL EXTERNALLY-DESCRIBED-KEY FD FETCH FILE FILE-CONTROL FILE-STREAM FILES FILLER FINAL FIND FINISH FIRST FOOTING FOR FOREGROUND-COLOR FOREGROUND-COLOUR FORMAT FREE FROM FULL FUNCTION GENERATE GET GIVING GLOBAL GO GOBACK GREATER GROUP HEADING HIGH-VALUE HIGH-VALUES HIGHLIGHT I-O I-O-CONTROL ID IDENTIFICATION IF IN INDEX INDEX-1 INDEX-2 INDEX-3 INDEX-4 INDEX-5 INDEX-6 INDEX-7 INDEX-8 INDEX-9 INDEXED INDIC INDICATE INDICATOR INDICATORS INITIAL INITIALIZE INITIATE INPUT INPUT-OUTPUT INSPECT INSTALLATION INTO INVALID INVOKE IS JUST JUSTIFIED KANJI KEEP KEY LABEL LAST LD LEADING LEFT LEFT-JUSTIFY LENGTH LENGTH-CHECK LESS LIBRARY LIKE LIMIT LIMITS LINAGE LINAGE-COUNTER LINE LINE-COUNTER LINES LINKAGE LOCAL-STORAGE LOCALE LOCALLY LOCK MEMBER MEMORY MERGE MESSAGE METACLASS MODE MODIFIED MODIFY MODULES MOVE MULTIPLE MULTIPLY NATIONAL NATIVE NEGATIVE NEXT NO NO-ECHO NONE NOT NULL NULL-KEY-MAP NULL-MAP NULLS NUMBER NUMERIC NUMERIC-EDITED OBJECT OBJECT-COMPUTER OCCURS OF OFF OMITTED ON ONLY OPEN OPTIONAL OR ORDER ORGANIZATION OTHER OUTPUT OVERFLOW OWNER PACKED-DECIMAL PADDING PAGE PAGE-COUNTER PARSE PERFORM PF PH PIC PICTURE PLUS POINTER POSITION POSITIVE PREFIX PRESENT PRINTING PRIOR PROCEDURE PROCEDURE-POINTER PROCEDURES PROCEED PROCESS PROCESSING PROGRAM PROGRAM-ID PROMPT PROTECTED PURGE QUEUE QUOTE QUOTES RANDOM RD READ READY REALM RECEIVE RECONNECT RECORD RECORD-NAME RECORDS RECURSIVE REDEFINES REEL REFERENCE REFERENCE-MONITOR REFERENCES RELATION RELATIVE RELEASE REMAINDER REMOVAL RENAMES REPEATED REPLACE REPLACING REPORT REPORTING REPORTS REPOSITORY REQUIRED RERUN RESERVE RESET RETAINING RETRIEVAL RETURN RETURN-CODE RETURNING REVERSE-VIDEO REVERSED REWIND REWRITE RF RH RIGHT RIGHT-JUSTIFY ROLLBACK ROLLING ROUNDED RUN SAME SCREEN SD SEARCH SECTION SECURE SECURITY SEGMENT SEGMENT-LIMIT SELECT SEND SENTENCE SEPARATE SEQUENCE SEQUENTIAL SET SHARED SIGN SIZE SKIP1 SKIP2 SKIP3 SORT SORT-MERGE SORT-RETURN SOURCE SOURCE-COMPUTER SPACE-FILL SPECIAL-NAMES STANDARD STANDARD-1 STANDARD-2 START STARTING STATUS STOP STORE STRING SUB-QUEUE-1 SUB-QUEUE-2 SUB-QUEUE-3 SUB-SCHEMA SUBFILE SUBSTITUTE SUBTRACT SUM SUPPRESS SYMBOLIC SYNC SYNCHRONIZED SYSIN SYSOUT TABLE TALLYING TAPE TENANT TERMINAL TERMINATE TEST TEXT THAN THEN THROUGH THRU TIME TIMES TITLE TO TOP TRAILING TRAILING-SIGN TRANSACTION TYPE TYPEDEF UNDERLINE UNEQUAL UNIT UNSTRING UNTIL UP UPDATE UPON USAGE USAGE-MODE USE USING VALID VALIDATE VALUE VALUES VARYING VLR WAIT WHEN WHEN-COMPILED WITH WITHIN WORDS WORKING-STORAGE WRITE XML XML-CODE XML-EVENT XML-NTEXT XML-TEXT ZERO ZERO-FILL "),
        Vh = Eh("- * ** / + < <= = > >= "),
        jh = {
            digit: /\d/,
            digit_or_colon: /[\d:]/,
            hex: /[0-9a-f]/i,
            sign: /[+-]/,
            exponent: /e/i,
            keyword_char: /[^\s\(\[\;\)\]]/,
            symbol: /[\w*+\-]/
        };
    const Ah = {
        startState: function() {
            return {
                indentStack: null,
                indentation: 0,
                mode: !1
            }
        },
        token: function(e, t) {
            if (null == t.indentStack && e.sol() && (t.indentation = 6), e.eatSpace()) return null;
            var n = null;
            switch (t.mode) {
                case "string":
                    for (var r = !1; null != (r = e.next());)
                        if ('"' == r || "'" == r) {
                            t.mode = !1;
                            break
                        }
                    n = zh;
                    break;
                default:
                    var i = e.next(),
                        a = e.column();
                    if (a >= 0 && a <= 5) n = "def";
                    else if (a >= 72 && a <= 79) e.skipToEnd(), n = "header";
                    else if ("*" == i && 6 == a) e.skipToEnd(), n = "comment";
                    else if ('"' == i || "'" == i) t.mode = "string", n = zh;
                    else if ("'" != i || jh.digit_or_colon.test(e.peek()))
                        if ("." == i) n = "link";
                        else if (function(e, t) {
                            return "0" === e && t.eat(/x/i) ? (t.eatWhile(jh.hex), !0) : ("+" != e && "-" != e || !jh.digit.test(t.peek()) || (t.eat(jh.sign), e = t.next()), !!jh.digit.test(e) && (t.eat(e), t.eatWhile(jh.digit), "." == t.peek() && (t.eat("."), t.eatWhile(jh.digit)), t.eat(jh.exponent) && (t.eat(jh.sign), t.eatWhile(jh.digit)), !0))
                        }(i, e)) n = "number";
                    else {
                        if (e.current().match(jh.symbol))
                            for (; a < 71 && void 0 !== e.eat(jh.symbol);) a++;
                        n = Uh && Uh.propertyIsEnumerable(e.current().toUpperCase()) ? "keyword" : Vh && Vh.propertyIsEnumerable(e.current().toUpperCase()) ? "builtin" : Ih && Ih.propertyIsEnumerable(e.current().toUpperCase()) ? Zh : null
                    } else n = Zh
            }
            return n
        },
        indent: function(e) {
            return null == e.indentStack ? e.indentation : e.indentStack.indent
        }
    };
    var Ch = Object.freeze({
        __proto__: null,
        cobol: Ah
    });

    function Gh(e, t, n, r, i, a) {
        this.indented = e, this.column = t, this.type = n, this.info = r, this.align = i, this.prev = a
    }

    function Lh(e, t, n, r) {
        var i = e.indented;
        return e.context && "statement" == e.context.type && "statement" != n && (i = e.context.indented), e.context = new Gh(i, t, n, r, null, e.context)
    }

    function Nh(e) {
        var t = e.context.type;
        return ")" != t && "]" != t && "}" != t || (e.indented = e.context.indented), e.context = e.context.prev
    }

    function Dh(e, t, n) {
        return "variable" == t.prevToken || "type" == t.prevToken || (!!/\S(?:[^- ]>|[*\]])\s*$|\*$/.test(e.string.slice(0, n)) || (!(!t.typeAtEndOfLine || e.column() != e.indentation()) || void 0))
    }

    function Mh(e) {
        for (;;) {
            if (!e || "top" == e.type) return !0;
            if ("}" == e.type && "namespace" != e.prev.info) return !1;
            e = e.prev
        }
    }

    function Bh(e) {
        var t, n, r = e.statementIndentUnit,
            i = e.dontAlignCalls,
            a = e.keywords || {},
            o = e.types || {},
            s = e.builtin || {},
            O = e.blockKeywords || {},
            l = e.defKeywords || {},
            c = e.atoms || {},
            u = e.hooks || {},
            d = e.multiLineStrings,
            p = !1 !== e.indentStatements,
            h = !1 !== e.indentSwitch,
            f = e.namespaceSeparator,
            m = e.isPunctuationChar || /[\[\]{}\(\),;\:\.]/,
            g = e.numberStart || /[\d\.]/,
            Q = e.number || /^(?:0x[a-f\d]+|0b[01]+|(?:\d+\.?\d*|\.\d+)(?:e[-+]?\d+)?)(u|ll?|l|f)?/i,
            $ = e.isOperatorChar || /[+\-*&%=<>!?|\/]/,
            b = e.isIdentifierChar || /[\w\$_\xa1-\uffff]/,
            x = e.isReservedIdentifier || !1;

        function P(e, r) {
            var i = e.next();
            if (u[i]) {
                var p = u[i](e, r);
                if (!1 !== p) return p
            }
            if ('"' == i || "'" == i) return r.tokenize = function(e) {
                return function(t, n) {
                    for (var r, i = !1, a = !1; null != (r = t.next());) {
                        if (r == e && !i) {
                            a = !0;
                            break
                        }
                        i = !i && "\\" == r
                    }
                    return (a || !i && !d) && (n.tokenize = null), "string"
                }
            }(i), r.tokenize(e, r);
            if (g.test(i)) {
                if (e.backUp(1), e.match(Q)) return "number";
                e.next()
            }
            if (m.test(i)) return t = i, null;
            if ("/" == i) {
                if (e.eat("*")) return r.tokenize = w, w(e, r);
                if (e.eat("/")) return e.skipToEnd(), "comment"
            }
            if ($.test(i)) {
                for (; !e.match(/^\/[\/*]/, !1) && e.eat($););
                return "operator"
            }
            if (e.eatWhile(b), f)
                for (; e.match(f);) e.eatWhile(b);
            var h = e.current();
            return Hh(a, h) ? (Hh(O, h) && (t = "newstatement"), Hh(l, h) && (n = !0), "keyword") : Hh(o, h) ? "type" : Hh(s, h) || x && x(h) ? (Hh(O, h) && (t = "newstatement"), "builtin") : Hh(c, h) ? "atom" : "variable"
        }

        function w(e, t) {
            for (var n, r = !1; n = e.next();) {
                if ("/" == n && r) {
                    t.tokenize = null;
                    break
                }
                r = "*" == n
            }
            return "comment"
        }

        function k(t, n) {
            e.typeFirstDefinitions && t.eol() && Mh(n.context) && (n.typeAtEndOfLine = Dh(t, n, t.pos))
        }
        return {
            startState: function(e) {
                return {
                    tokenize: null,
                    context: new Gh(-e, 0, "top", null, !1),
                    indented: 0,
                    startOfLine: !0,
                    prevToken: null
                }
            },
            token: function(r, i) {
                var a = i.context;
                if (r.sol() && (null == a.align && (a.align = !1), i.indented = r.indentation(), i.startOfLine = !0), r.eatSpace()) return k(r, i), null;
                t = n = null;
                var o = (i.tokenize || P)(r, i);
                if ("comment" == o || "meta" == o) return o;
                if (null == a.align && (a.align = !0), ";" == t || ":" == t || "," == t && r.match(/^\s*(?:\/\/.*)?$/, !1))
                    for (;
                        "statement" == i.context.type;) Nh(i);
                else if ("{" == t) Lh(i, r.column(), "}");
                else if ("[" == t) Lh(i, r.column(), "]");
                else if ("(" == t) Lh(i, r.column(), ")");
                else if ("}" == t) {
                    for (;
                        "statement" == a.type;) a = Nh(i);
                    for ("}" == a.type && (a = Nh(i));
                        "statement" == a.type;) a = Nh(i)
                } else t == a.type ? Nh(i) : p && (("}" == a.type || "top" == a.type) && ";" != t || "statement" == a.type && "newstatement" == t) && Lh(i, r.column(), "statement", r.current());
                if ("variable" == o && ("def" == i.prevToken || e.typeFirstDefinitions && Dh(r, i, r.start) && Mh(i.context) && r.match(/^\s*\(/, !1)) && (o = "def"), u.token) {
                    var s = u.token(r, i, o);
                    void 0 !== s && (o = s)
                }
                return "def" == o && !1 === e.styleDefs && (o = "variable"), i.startOfLine = !1, i.prevToken = n ? "def" : o || t, k(r, i), o
            },
            indent: function(t, n, a) {
                if (t.tokenize != P && null != t.tokenize || t.typeAtEndOfLine) return null;
                var o = t.context,
                    s = n && n.charAt(0),
                    O = s == o.type;
                if ("statement" == o.type && "}" == s && (o = o.prev), e.dontIndentStatements)
                    for (;
                        "statement" == o.type && e.dontIndentStatements.test(o.info);) o = o.prev;
                if (u.indent) {
                    var l = u.indent(t, o, n, a.unit);
                    if ("number" == typeof l) return l
                }
                var c = o.prev && "switch" == o.prev.info;
                if (e.allmanIndentation && /[{(]/.test(s)) {
                    for (;
                        "top" != o.type && "}" != o.type;) o = o.prev;
                    return o.indented
                }
                return "statement" == o.type ? o.indented + ("{" == s ? 0 : r || a.unit) : !o.align || i && ")" == o.type ? ")" != o.type || O ? o.indented + (O ? 0 : a.unit) + (O || !c || /^(?:case|default)\b/.test(n) ? 0 : a.unit) : o.indented + (r || a.unit) : o.column + (O ? 0 : 1)
            },
            languageData: {
                indentOnInput: h ? /^\s*(?:case .*?:|default:|\{\}?|\})$/ : /^\s*[{}]$/,
                commentTokens: {
                    line: "//",
                    block: {
                        open: "/*",
                        close: "*/"
                    }
                },
                autocomplete: Object.keys(a).concat(Object.keys(o)).concat(Object.keys(s)).concat(Object.keys(c)),
                ...e.languageData
            }
        }
    }

    function Fh(e) {
        for (var t = {}, n = e.split(" "), r = 0; r < n.length; ++r) t[n[r]] = !0;
        return t
    }

    function Hh(e, t) {
        return "function" == typeof e ? e(t) : e.propertyIsEnumerable(t)
    }
    var Jh = "auto if break case register continue return default do sizeof static else struct switch extern typedef union for goto while enum const volatile inline restrict asm fortran",
        Kh = "alignas alignof and and_eq audit axiom bitand bitor catch class compl concept constexpr const_cast decltype delete dynamic_cast explicit export final friend import module mutable namespace new noexcept not not_eq operator or or_eq override private protected public reinterpret_cast requires static_assert static_cast template this thread_local throw try typeid typename using virtual xor xor_eq",
        ef = "bycopy byref in inout oneway out self super atomic nonatomic retain copy readwrite readonly strong weak assign typeof nullable nonnull null_resettable _cmd @interface @implementation @end @protocol @encode @property @synthesize @dynamic @class @public @package @private @protected @required @optional @try @catch @finally @import @selector @encode @defs @synchronized @autoreleasepool @compatibility_alias @available",
        tf = "FOUNDATION_EXPORT FOUNDATION_EXTERN NS_INLINE NS_FORMAT_FUNCTION  NS_RETURNS_RETAINEDNS_ERROR_ENUM NS_RETURNS_NOT_RETAINED NS_RETURNS_INNER_POINTER NS_DESIGNATED_INITIALIZER NS_ENUM NS_OPTIONS NS_REQUIRES_NIL_TERMINATION NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_END NS_SWIFT_NAME NS_REFINED_FOR_SWIFT",
        nf = Fh("int long char short double float unsigned signed void bool"),
        rf = Fh("SEL instancetype id Class Protocol BOOL");

    function af(e) {
        return Hh(nf, e) || /.+_t$/.test(e)
    }

    function of (e) {
        return af(e) || Hh(rf, e)
    }
    var sf = "case do else for if switch while struct enum union",
        Of = "struct enum union";

    function lf(e, t) {
        if (!t.startOfLine) return !1;
        for (var n, r = null; n = e.peek();) {
            if ("\\" == n && e.match(/^.$/)) {
                r = lf;
                break
            }
            if ("/" == n && e.match(/^\/[\/\*]/, !1)) break;
            e.next()
        }
        return t.tokenize = r, "meta"
    }

    function cf(e, t) {
        return "type" == t.prevToken && "type"
    }

    function uf(e) {
        return !(!e || e.length < 2) && ("_" == e[0] && ("_" == e[1] || e[1] !== e[1].toLowerCase()))
    }

    function df(e) {
        return e.eatWhile(/[\w\.']/), "number"
    }

    function pf(e, t) {
        if (e.backUp(1), e.match(/^(?:R|u8R|uR|UR|LR)/)) {
            var n = e.match(/^"([^\s\\()]{0,16})\(/);
            return !!n && (t.cpp11RawStringDelim = n[1], t.tokenize = mf, mf(e, t))
        }
        return e.match(/^(?:u8|u|U|L)/) ? !!e.match(/^["']/, !1) && "string" : (e.next(), !1)
    }

    function hf(e) {
        var t = /(\w+)::~?(\w+)$/.exec(e);
        return t && t[1] == t[2]
    }

    function ff(e, t) {
        for (var n; null != (n = e.next());)
            if ('"' == n && !e.eat('"')) {
                t.tokenize = null;
                break
            }
        return "string"
    }

    function mf(e, t) {
        var n = t.cpp11RawStringDelim.replace(/[^\w\s]/g, "\\$&");
        return e.match(new RegExp(".*?\\)" + n + '"')) ? t.tokenize = null : e.skipToEnd(), "string"
    }
    const gf = Bh({
            keywords: Fh(Jh),
            types: af,
            blockKeywords: Fh(sf),
            defKeywords: Fh(Of),
            typeFirstDefinitions: !0,
            atoms: Fh("NULL true false"),
            isReservedIdentifier: uf,
            hooks: {
                "#": lf,
                "*": cf
            }
        }),
        Qf = Bh({
            keywords: Fh(Jh + " " + Kh),
            types: af,
            blockKeywords: Fh(sf + " class try catch"),
            defKeywords: Fh(Of + " class namespace"),
            typeFirstDefinitions: !0,
            atoms: Fh("true false NULL nullptr"),
            dontIndentStatements: /^template$/,
            isIdentifierChar: /[\w\$_~\xa1-\uffff]/,
            isReservedIdentifier: uf,
            hooks: {
                "#": lf,
                "*": cf,
                u: pf,
                U: pf,
                L: pf,
                R: pf,
                0: df,
                1: df,
                2: df,
                3: df,
                4: df,
                5: df,
                6: df,
                7: df,
                8: df,
                9: df,
                token: function(e, t, n) {
                    if ("variable" == n && "(" == e.peek() && (";" == t.prevToken || null == t.prevToken || "}" == t.prevToken) && hf(e.current())) return "def"
                }
            },
            namespaceSeparator: "::"
        }),
        $f = Bh({
            keywords: Fh("abstract assert break case catch class const continue default do else enum extends final finally for goto if implements import instanceof interface native new package private protected public return static strictfp super switch synchronized this throw throws transient try volatile while @interface"),
            types: Fh("byte short int long float double boolean char void Boolean Byte Character Double Float Integer Long Number Object Short String StringBuffer StringBuilder Void"),
            blockKeywords: Fh("catch class do else finally for if switch try while"),
            defKeywords: Fh("class interface enum @interface"),
            typeFirstDefinitions: !0,
            atoms: Fh("true false null"),
            number: /^(?:0x[a-f\d_]+|0b[01_]+|(?:[\d_]+\.?\d*|\.\d+)(?:e[-+]?[\d_]+)?)(u|ll?|l|f)?/i,
            hooks: {
                "@": function(e) {
                    return !e.match("interface", !1) && (e.eatWhile(/[\w\$_]/), "meta")
                }
            }
        }),
        bf = Bh({
            keywords: Fh("abstract as async await base break case catch checked class const continue default delegate do else enum event explicit extern finally fixed for foreach goto if implicit in interface internal is lock namespace new operator out override params private protected public readonly ref return sealed sizeof stackalloc static struct switch this throw try typeof unchecked unsafe using virtual void volatile while add alias ascending descending dynamic from get global group into join let orderby partial remove select set value var yield"),
            types: Fh("Action Boolean Byte Char DateTime DateTimeOffset Decimal Double Func Guid Int16 Int32 Int64 Object SByte Single String Task TimeSpan UInt16 UInt32 UInt64 bool byte char decimal double short int long object sbyte float string ushort uint ulong"),
            blockKeywords: Fh("catch class do else finally for foreach if struct switch try while"),
            defKeywords: Fh("class interface namespace struct var"),
            typeFirstDefinitions: !0,
            atoms: Fh("true false null"),
            hooks: {
                "@": function(e, t) {
                    return e.eat('"') ? (t.tokenize = ff, ff(e, t)) : (e.eatWhile(/[\w\$_]/), "meta")
                }
            }
        });

    function xf(e, t) {
        for (var n = !1; !e.eol();) {
            if (!n && e.match('"""')) {
                t.tokenize = null;
                break
            }
            n = "\\" == e.next() && !n
        }
        return "string"
    }

    function Pf(e) {
        return function(t, n) {
            for (var r; r = t.next();) {
                if ("*" == r && t.eat("/")) {
                    if (1 == e) {
                        n.tokenize = null;
                        break
                    }
                    return n.tokenize = Pf(e - 1), n.tokenize(t, n)
                }
                if ("/" == r && t.eat("*")) return n.tokenize = Pf(e + 1), n.tokenize(t, n)
            }
            return "comment"
        }
    }
    const wf = Bh({
        keywords: Fh("abstract case catch class def do else extends final finally for forSome if implicit import lazy match new null object override package private protected return sealed super this throw trait try type val var while with yield _ assert assume require print println printf readLine readBoolean readByte readShort readChar readInt readLong readFloat readDouble"),
        types: Fh("AnyVal App Application Array BufferedIterator BigDecimal BigInt Char Console Either Enumeration Equiv Error Exception Fractional Function IndexedSeq Int Integral Iterable Iterator List Map Numeric Nil NotNull Option Ordered Ordering PartialFunction PartialOrdering Product Proxy Range Responder Seq Serializable Set Specializable Stream StringBuilder StringContext Symbol Throwable Traversable TraversableOnce Tuple Unit Vector Boolean Byte Character CharSequence Class ClassLoader Cloneable Comparable Compiler Double Exception Float Integer Long Math Number Object Package Pair Process Runtime Runnable SecurityManager Short StackTraceElement StrictMath String StringBuffer System Thread ThreadGroup ThreadLocal Throwable Triple Void"),
        multiLineStrings: !0,
        blockKeywords: Fh("catch class enum do else finally for forSome if match switch try while"),
        defKeywords: Fh("class enum def object package trait type val var"),
        atoms: Fh("true false null"),
        indentStatements: !1,
        indentSwitch: !1,
        isOperatorChar: /[+\-*&%=<>!?|\/#:@]/,
        hooks: {
            "@": function(e) {
                return e.eatWhile(/[\w\$_]/), "meta"
            },
            '"': function(e, t) {
                return !!e.match('""') && (t.tokenize = xf, t.tokenize(e, t))
            },
            "'": function(e) {
                return e.eatWhile(/[\w\$_\xa1-\uffff]/), "atom"
            },
            "=": function(e, t) {
                var n = t.context;
                return !("}" != n.type || !n.align || !e.eat(">")) && (t.context = new Gh(n.indented, n.column, n.type, n.info, null, n.prev), "operator")
            },
            "/": function(e, t) {
                return !!e.eat("*") && (t.tokenize = Pf(1), t.tokenize(e, t))
            }
        },
        languageData: {
            closeBrackets: {
                brackets: ["(", "[", "{", "'", '"', '"""']
            }
        }
    });
    const kf = Bh({
            keywords: Fh("package as typealias class interface this super val operator var fun for is in This throw return annotation break continue object if else while do try when !in !is as? file import where by get set abstract enum open inner override private public internal protected catch finally out final vararg reified dynamic companion constructor init sealed field property receiver param sparam lateinit data inline noinline tailrec external annotation crossinline const operator infix suspend actual expect setparam"),
            types: Fh("Boolean Byte Character CharSequence Class ClassLoader Cloneable Comparable Compiler Double Exception Float Integer Long Math Number Object Package Pair Process Runtime Runnable SecurityManager Short StackTraceElement StrictMath String StringBuffer System Thread ThreadGroup ThreadLocal Throwable Triple Void Annotation Any BooleanArray ByteArray Char CharArray DeprecationLevel DoubleArray Enum FloatArray Function Int IntArray Lazy LazyThreadSafetyMode LongArray Nothing ShortArray Unit"),
            intendSwitch: !1,
            indentStatements: !1,
            multiLineStrings: !0,
            number: /^(?:0x[a-f\d_]+|0b[01_]+|(?:[\d_]+(\.\d+)?|\.\d+)(?:e[-+]?[\d_]+)?)(u|ll?|l|f)?/i,
            blockKeywords: Fh("catch class do else finally for if where try while enum"),
            defKeywords: Fh("class val var object interface fun"),
            atoms: Fh("true false null this"),
            hooks: {
                "@": function(e) {
                    return e.eatWhile(/[\w\$_]/), "meta"
                },
                "*": function(e, t) {
                    return "." == t.prevToken ? "variable" : "operator"
                },
                '"': function(e, t) {
                    var n;
                    return t.tokenize = (n = e.match('""'), function(e, t) {
                        for (var r, i = !1, a = !1; !e.eol();) {
                            if (!n && !i && e.match('"')) {
                                a = !0;
                                break
                            }
                            if (n && e.match('"""')) {
                                a = !0;
                                break
                            }
                            r = e.next(), !i && "$" == r && e.match("{") && e.skipTo("}"), i = !i && "\\" == r && !n
                        }
                        return !a && n || (t.tokenize = null), "string"
                    }), t.tokenize(e, t)
                },
                "/": function(e, t) {
                    return !!e.eat("*") && (t.tokenize = Pf(1), t.tokenize(e, t))
                },
                indent: function(e, t, n, r) {
                    var i = n && n.charAt(0);
                    return "}" != e.prevToken && ")" != e.prevToken || "" != n ? "operator" == e.prevToken && "}" != n && "}" != e.context.type || "variable" == e.prevToken && "." == i || ("}" == e.prevToken || ")" == e.prevToken) && "." == i ? 2 * r + t.indented : t.align && "}" == t.type ? t.indented + (e.context.type == (n || "").charAt(0) ? 0 : r) : void 0 : e.indented
                }
            },
            languageData: {
                closeBrackets: {
                    brackets: ["(", "[", "{", "'", '"', '"""']
                }
            }
        }),
        yf = Bh({
            keywords: Fh("sampler1D sampler2D sampler3D samplerCube sampler1DShadow sampler2DShadow const attribute uniform varying break continue discard return for while do if else struct in out inout"),
            types: Fh("float int bool void vec2 vec3 vec4 ivec2 ivec3 ivec4 bvec2 bvec3 bvec4 mat2 mat3 mat4"),
            blockKeywords: Fh("for while do if else struct"),
            builtin: Fh("radians degrees sin cos tan asin acos atan pow exp log exp2 sqrt inversesqrt abs sign floor ceil fract mod min max clamp mix step smoothstep length distance dot cross normalize ftransform faceforward reflect refract matrixCompMult lessThan lessThanEqual greaterThan greaterThanEqual equal notEqual any all not texture1D texture1DProj texture1DLod texture1DProjLod texture2D texture2DProj texture2DLod texture2DProjLod texture3D texture3DProj texture3DLod texture3DProjLod textureCube textureCubeLod shadow1D shadow2D shadow1DProj shadow2DProj shadow1DLod shadow2DLod shadow1DProjLod shadow2DProjLod dFdx dFdy fwidth noise1 noise2 noise3 noise4"),
            atoms: Fh("true false gl_FragColor gl_SecondaryColor gl_Normal gl_Vertex gl_MultiTexCoord0 gl_MultiTexCoord1 gl_MultiTexCoord2 gl_MultiTexCoord3 gl_MultiTexCoord4 gl_MultiTexCoord5 gl_MultiTexCoord6 gl_MultiTexCoord7 gl_FogCoord gl_PointCoord gl_Position gl_PointSize gl_ClipVertex gl_FrontColor gl_BackColor gl_FrontSecondaryColor gl_BackSecondaryColor gl_TexCoord gl_FogFragCoord gl_FragCoord gl_FrontFacing gl_FragData gl_FragDepth gl_ModelViewMatrix gl_ProjectionMatrix gl_ModelViewProjectionMatrix gl_TextureMatrix gl_NormalMatrix gl_ModelViewMatrixInverse gl_ProjectionMatrixInverse gl_ModelViewProjectionMatrixInverse gl_TextureMatrixTranspose gl_ModelViewMatrixInverseTranspose gl_ProjectionMatrixInverseTranspose gl_ModelViewProjectionMatrixInverseTranspose gl_TextureMatrixInverseTranspose gl_NormalScale gl_DepthRange gl_ClipPlane gl_Point gl_FrontMaterial gl_BackMaterial gl_LightSource gl_LightModel gl_FrontLightModelProduct gl_BackLightModelProduct gl_TextureColor gl_EyePlaneS gl_EyePlaneT gl_EyePlaneR gl_EyePlaneQ gl_FogParameters gl_MaxLights gl_MaxClipPlanes gl_MaxTextureUnits gl_MaxTextureCoords gl_MaxVertexAttribs gl_MaxVertexUniformComponents gl_MaxVaryingFloats gl_MaxVertexTextureImageUnits gl_MaxTextureImageUnits gl_MaxFragmentUniformComponents gl_MaxCombineTextureImageUnits gl_MaxDrawBuffers"),
            indentSwitch: !1,
            hooks: {
                "#": lf
            }
        }),
        vf = Bh({
            keywords: Fh(Jh + " as atomic async call command component components configuration event generic implementation includes interface module new norace nx_struct nx_union post provides signal task uses abstract extends"),
            types: af,
            blockKeywords: Fh(sf),
            atoms: Fh("null true false"),
            hooks: {
                "#": lf
            }
        }),
        Sf = Bh({
            keywords: Fh(Jh + " " + ef),
            types: of ,
            builtin: Fh(tf),
            blockKeywords: Fh(sf + " @synthesize @try @catch @finally @autoreleasepool @synchronized"),
            defKeywords: Fh(Of + " @interface @implementation @protocol @class"),
            dontIndentStatements: /^@.*$/,
            typeFirstDefinitions: !0,
            atoms: Fh("YES NO NULL Nil nil true false nullptr"),
            isReservedIdentifier: uf,
            hooks: {
                "#": lf,
                "*": cf
            }
        }),
        _f = Bh({
            keywords: Fh(Jh + " " + ef + " " + Kh),
            types: of ,
            builtin: Fh(tf),
            blockKeywords: Fh(sf + " @synthesize @try @catch @finally @autoreleasepool @synchronized class try catch"),
            defKeywords: Fh(Of + " @interface @implementation @protocol @class class namespace"),
            dontIndentStatements: /^@.*$|^template$/,
            typeFirstDefinitions: !0,
            atoms: Fh("YES NO NULL Nil nil true false nullptr"),
            isReservedIdentifier: uf,
            hooks: {
                "#": lf,
                "*": cf,
                u: pf,
                U: pf,
                L: pf,
                R: pf,
                0: df,
                1: df,
                2: df,
                3: df,
                4: df,
                5: df,
                6: df,
                7: df,
                8: df,
                9: df,
                token: function(e, t, n) {
                    if ("variable" == n && "(" == e.peek() && (";" == t.prevToken || null == t.prevToken || "}" == t.prevToken) && hf(e.current())) return "def"
                }
            },
            namespaceSeparator: "::"
        }),
        Xf = Bh({
            keywords: Fh("base break clone continue const default delete enum extends function in class foreach local resume return this throw typeof yield constructor instanceof static"),
            types: af,
            blockKeywords: Fh("case catch class else for foreach if switch try while"),
            defKeywords: Fh("function local class"),
            typeFirstDefinitions: !0,
            atoms: Fh("true false null"),
            hooks: {
                "#": lf
            }
        });
    var Tf = null;

    function Rf(e) {
        return function(t, n) {
            for (var r, i = !1, a = !1; !t.eol();) {
                if (!i && t.match('"') && ("single" == e || t.match('""'))) {
                    a = !0;
                    break
                }
                if (!i && t.match("``")) {
                    Tf = Rf(e), a = !0;
                    break
                }
                r = t.next(), i = "single" == e && !i && "\\" == r
            }
            return a && (n.tokenize = null), "string"
        }
    }
    const Wf = Bh({
        keywords: Fh("abstracts alias assembly assert assign break case catch class continue dynamic else exists extends finally for function given if import in interface is let module new nonempty object of out outer package return satisfies super switch then this throw try value void while"),
        types: function(e) {
            var t = e.charAt(0);
            return t === t.toUpperCase() && t !== t.toLowerCase()
        },
        blockKeywords: Fh("case catch class dynamic else finally for function if interface module new object switch try while"),
        defKeywords: Fh("class dynamic function interface module object package value"),
        builtin: Fh("abstract actual aliased annotation by default deprecated doc final formal late license native optional sealed see serializable shared suppressWarnings tagged throws variable"),
        isPunctuationChar: /[\[\]{}\(\),;\:\.`]/,
        isOperatorChar: /[+\-*&%=<>!?|^~:\/]/,
        numberStart: /[\d#$]/,
        number: /^(?:#[\da-fA-F_]+|\$[01_]+|[\d_]+[kMGTPmunpf]?|[\d_]+\.[\d_]+(?:[eE][-+]?\d+|[kMGTPmunpf]|)|)/i,
        multiLineStrings: !0,
        typeFirstDefinitions: !0,
        atoms: Fh("true false null larger smaller equal empty finished"),
        indentSwitch: !1,
        styleDefs: !1,
        hooks: {
            "@": function(e) {
                return e.eatWhile(/[\w\$_]/), "meta"
            },
            '"': function(e, t) {
                return t.tokenize = Rf(e.match('""') ? "triple" : "single"), t.tokenize(e, t)
            },
            "`": function(e, t) {
                return !(!Tf || !e.match("`")) && (t.tokenize = Tf, Tf = null, t.tokenize(e, t))
            },
            "'": function(e) {
                return e.eatWhile(/[\w\$_\xa1-\uffff]/), "atom"
            },
            token: function(e, t, n) {
                if (("variable" == n || "type" == n) && "." == t.prevToken) return "variableName.special"
            }
        },
        languageData: {
            closeBrackets: {
                brackets: ["(", "[", "{", "'", '"', '"""']
            }
        }
    });

    function qf(e) {
        (e.interpolationStack || (e.interpolationStack = [])).push(e.tokenize)
    }

    function Yf(e) {
        return (e.interpolationStack || (e.interpolationStack = [])).pop()
    }

    function zf(e, t, n, r) {
        var i = !1;
        if (t.eat(e)) {
            if (!t.eat(e)) return "string";
            i = !0
        }

        function a(t, n) {
            for (var a = !1; !t.eol();) {
                if (!r && !a && "$" == t.peek()) return qf(n), n.tokenize = Zf, "string";
                var o = t.next();
                if (o == e && !a && (!i || t.match(e + e))) {
                    n.tokenize = null;
                    break
                }
                a = !r && !a && "\\" == o
            }
            return "string"
        }
        return n.tokenize = a, a(t, n)
    }

    function Zf(e, t) {
        return e.eat("$"), e.eat("{") ? t.tokenize = null : t.tokenize = Ef, null
    }

    function Ef(e, t) {
        return e.eatWhile(/[\w_]/), t.tokenize = Yf(t), "variable"
    }
    const If = Bh({
        keywords: Fh("this super static final const abstract class extends external factory implements mixin get native set typedef with enum throw rethrow assert break case continue default in return new deferred async await covariant try catch finally do else for if switch while import library export part of show hide is as extension on yield late required"),
        blockKeywords: Fh("try catch finally do else for if switch while"),
        builtin: Fh("void bool num int double dynamic var String Null Never"),
        atoms: Fh("true false null"),
        hooks: {
            "@": function(e) {
                return e.eatWhile(/[\w\$_\.]/), "meta"
            },
            "'": function(e, t) {
                return zf("'", e, t, !1)
            },
            '"': function(e, t) {
                return zf('"', e, t, !1)
            },
            r: function(e, t) {
                var n = e.peek();
                return ("'" == n || '"' == n) && zf(e.next(), e, t, !0)
            },
            "}": function(e, t) {
                return function(e) {
                    return e.interpolationStack ? e.interpolationStack.length : 0
                }(t) > 0 && (t.tokenize = Yf(t), null)
            },
            "/": function(e, t) {
                return !!e.eat("*") && (t.tokenize = Pf(1), t.tokenize(e, t))
            },
            token: function(e, t, n) {
                if ("variable" == n && RegExp("^[_$]*[A-Z][a-zA-Z0-9_$]*$", "g").test(e.current())) return "type"
            }
        }
    });
    var Uf = Object.freeze({
            __proto__: null,
            clike: Bh,
            c: gf,
            cpp: Qf,
            java: $f,
            csharp: bf,
            scala: wf,
            kotlin: kf,
            shader: yf,
            nesC: vf,
            objectiveC: Sf,
            objectiveCpp: _f,
            squirrel: Xf,
            ceylon: Wf,
            dart: If
        }),
        Vf = ["false", "nil", "true"],
        jf = [".", "catch", "def", "do", "if", "monitor-enter", "monitor-exit", "new", "quote", "recur", "set!", "throw", "try", "var"],
        Af = ["*", "*'", "*1", "*2", "*3", "*agent*", "*allow-unresolved-vars*", "*assert*", "*clojure-version*", "*command-line-args*", "*compile-files*", "*compile-path*", "*compiler-options*", "*data-readers*", "*default-data-reader-fn*", "*e", "*err*", "*file*", "*flush-on-newline*", "*fn-loader*", "*in*", "*math-context*", "*ns*", "*out*", "*print-dup*", "*print-length*", "*print-level*", "*print-meta*", "*print-namespace-maps*", "*print-readably*", "*read-eval*", "*reader-resolver*", "*source-path*", "*suppress-read*", "*unchecked-math*", "*use-context-classloader*", "*verbose-defrecords*", "*warn-on-reflection*", "+", "+'", "-", "-'", "->", "->>", "->ArrayChunk", "->Eduction", "->Vec", "->VecNode", "->VecSeq", "-cache-protocol-fn", "-reset-methods", "..", "/", "<", "<=", "=", "==", ">", ">=", "EMPTY-NODE", "Inst", "StackTraceElement->vec", "Throwable->map", "accessor", "aclone", "add-classpath", "add-watch", "agent", "agent-error", "agent-errors", "aget", "alength", "alias", "all-ns", "alter", "alter-meta!", "alter-var-root", "amap", "ancestors", "and", "any?", "apply", "areduce", "array-map", "as->", "aset", "aset-boolean", "aset-byte", "aset-char", "aset-double", "aset-float", "aset-int", "aset-long", "aset-short", "assert", "assoc", "assoc!", "assoc-in", "associative?", "atom", "await", "await-for", "await1", "bases", "bean", "bigdec", "bigint", "biginteger", "binding", "bit-and", "bit-and-not", "bit-clear", "bit-flip", "bit-not", "bit-or", "bit-set", "bit-shift-left", "bit-shift-right", "bit-test", "bit-xor", "boolean", "boolean-array", "boolean?", "booleans", "bound-fn", "bound-fn*", "bound?", "bounded-count", "butlast", "byte", "byte-array", "bytes", "bytes?", "case", "cast", "cat", "char", "char-array", "char-escape-string", "char-name-string", "char?", "chars", "chunk", "chunk-append", "chunk-buffer", "chunk-cons", "chunk-first", "chunk-next", "chunk-rest", "chunked-seq?", "class", "class?", "clear-agent-errors", "clojure-version", "coll?", "comment", "commute", "comp", "comparator", "compare", "compare-and-set!", "compile", "complement", "completing", "concat", "cond", "cond->", "cond->>", "condp", "conj", "conj!", "cons", "constantly", "construct-proxy", "contains?", "count", "counted?", "create-ns", "create-struct", "cycle", "dec", "dec'", "decimal?", "declare", "dedupe", "default-data-readers", "definline", "definterface", "defmacro", "defmethod", "defmulti", "defn", "defn-", "defonce", "defprotocol", "defrecord", "defstruct", "deftype", "delay", "delay?", "deliver", "denominator", "deref", "derive", "descendants", "destructure", "disj", "disj!", "dissoc", "dissoc!", "distinct", "distinct?", "doall", "dorun", "doseq", "dosync", "dotimes", "doto", "double", "double-array", "double?", "doubles", "drop", "drop-last", "drop-while", "eduction", "empty", "empty?", "ensure", "ensure-reduced", "enumeration-seq", "error-handler", "error-mode", "eval", "even?", "every-pred", "every?", "ex-data", "ex-info", "extend", "extend-protocol", "extend-type", "extenders", "extends?", "false?", "ffirst", "file-seq", "filter", "filterv", "find", "find-keyword", "find-ns", "find-protocol-impl", "find-protocol-method", "find-var", "first", "flatten", "float", "float-array", "float?", "floats", "flush", "fn", "fn?", "fnext", "fnil", "for", "force", "format", "frequencies", "future", "future-call", "future-cancel", "future-cancelled?", "future-done?", "future?", "gen-class", "gen-interface", "gensym", "get", "get-in", "get-method", "get-proxy-class", "get-thread-bindings", "get-validator", "group-by", "halt-when", "hash", "hash-combine", "hash-map", "hash-ordered-coll", "hash-set", "hash-unordered-coll", "ident?", "identical?", "identity", "if-let", "if-not", "if-some", "ifn?", "import", "in-ns", "inc", "inc'", "indexed?", "init-proxy", "inst-ms", "inst-ms*", "inst?", "instance?", "int", "int-array", "int?", "integer?", "interleave", "intern", "interpose", "into", "into-array", "ints", "io!", "isa?", "iterate", "iterator-seq", "juxt", "keep", "keep-indexed", "key", "keys", "keyword", "keyword?", "last", "lazy-cat", "lazy-seq", "let", "letfn", "line-seq", "list", "list*", "list?", "load", "load-file", "load-reader", "load-string", "loaded-libs", "locking", "long", "long-array", "longs", "loop", "macroexpand", "macroexpand-1", "make-array", "make-hierarchy", "map", "map-entry?", "map-indexed", "map?", "mapcat", "mapv", "max", "max-key", "memfn", "memoize", "merge", "merge-with", "meta", "method-sig", "methods", "min", "min-key", "mix-collection-hash", "mod", "munge", "name", "namespace", "namespace-munge", "nat-int?", "neg-int?", "neg?", "newline", "next", "nfirst", "nil?", "nnext", "not", "not-any?", "not-empty", "not-every?", "not=", "ns", "ns-aliases", "ns-imports", "ns-interns", "ns-map", "ns-name", "ns-publics", "ns-refers", "ns-resolve", "ns-unalias", "ns-unmap", "nth", "nthnext", "nthrest", "num", "number?", "numerator", "object-array", "odd?", "or", "parents", "partial", "partition", "partition-all", "partition-by", "pcalls", "peek", "persistent!", "pmap", "pop", "pop!", "pop-thread-bindings", "pos-int?", "pos?", "pr", "pr-str", "prefer-method", "prefers", "primitives-classnames", "print", "print-ctor", "print-dup", "print-method", "print-simple", "print-str", "printf", "println", "println-str", "prn", "prn-str", "promise", "proxy", "proxy-call-with-super", "proxy-mappings", "proxy-name", "proxy-super", "push-thread-bindings", "pvalues", "qualified-ident?", "qualified-keyword?", "qualified-symbol?", "quot", "rand", "rand-int", "rand-nth", "random-sample", "range", "ratio?", "rational?", "rationalize", "re-find", "re-groups", "re-matcher", "re-matches", "re-pattern", "re-seq", "read", "read-line", "read-string", "reader-conditional", "reader-conditional?", "realized?", "record?", "reduce", "reduce-kv", "reduced", "reduced?", "reductions", "ref", "ref-history-count", "ref-max-history", "ref-min-history", "ref-set", "refer", "refer-clojure", "reify", "release-pending-sends", "rem", "remove", "remove-all-methods", "remove-method", "remove-ns", "remove-watch", "repeat", "repeatedly", "replace", "replicate", "require", "reset!", "reset-meta!", "reset-vals!", "resolve", "rest", "restart-agent", "resultset-seq", "reverse", "reversible?", "rseq", "rsubseq", "run!", "satisfies?", "second", "select-keys", "send", "send-off", "send-via", "seq", "seq?", "seqable?", "seque", "sequence", "sequential?", "set", "set-agent-send-executor!", "set-agent-send-off-executor!", "set-error-handler!", "set-error-mode!", "set-validator!", "set?", "short", "short-array", "shorts", "shuffle", "shutdown-agents", "simple-ident?", "simple-keyword?", "simple-symbol?", "slurp", "some", "some->", "some->>", "some-fn", "some?", "sort", "sort-by", "sorted-map", "sorted-map-by", "sorted-set", "sorted-set-by", "sorted?", "special-symbol?", "spit", "split-at", "split-with", "str", "string?", "struct", "struct-map", "subs", "subseq", "subvec", "supers", "swap!", "swap-vals!", "symbol", "symbol?", "sync", "tagged-literal", "tagged-literal?", "take", "take-last", "take-nth", "take-while", "test", "the-ns", "thread-bound?", "time", "to-array", "to-array-2d", "trampoline", "transduce", "transient", "tree-seq", "true?", "type", "unchecked-add", "unchecked-add-int", "unchecked-byte", "unchecked-char", "unchecked-dec", "unchecked-dec-int", "unchecked-divide-int", "unchecked-double", "unchecked-float", "unchecked-inc", "unchecked-inc-int", "unchecked-int", "unchecked-long", "unchecked-multiply", "unchecked-multiply-int", "unchecked-negate", "unchecked-negate-int", "unchecked-remainder-int", "unchecked-short", "unchecked-subtract", "unchecked-subtract-int", "underive", "unquote", "unquote-splicing", "unreduced", "unsigned-bit-shift-right", "update", "update-in", "update-proxy", "uri?", "use", "uuid?", "val", "vals", "var-get", "var-set", "var?", "vary-meta", "vec", "vector", "vector-of", "vector?", "volatile!", "volatile?", "vreset!", "vswap!", "when", "when-first", "when-let", "when-not", "when-some", "while", "with-bindings", "with-bindings*", "with-in-str", "with-loading-context", "with-local-vars", "with-meta", "with-open", "with-out-str", "with-precision", "with-redefs", "with-redefs-fn", "xml-seq", "zero?", "zipmap"],
        Cf = em(Vf),
        Gf = em(jf),
        Lf = em(Af),
        Nf = em(["->", "->>", "as->", "binding", "bound-fn", "case", "catch", "comment", "cond", "cond->", "cond->>", "condp", "def", "definterface", "defmethod", "defn", "defmacro", "defprotocol", "defrecord", "defstruct", "deftype", "do", "doseq", "dotimes", "doto", "extend", "extend-protocol", "extend-type", "fn", "for", "future", "if", "if-let", "if-not", "if-some", "let", "letfn", "locking", "loop", "ns", "proxy", "reify", "struct-map", "some->", "some->>", "try", "when", "when-first", "when-let", "when-not", "when-some", "while", "with-bindings", "with-bindings*", "with-in-str", "with-loading-context", "with-local-vars", "with-meta", "with-open", "with-out-str", "with-precision", "with-redefs", "with-redefs-fn"]),
        Df = /^(?:[\\\[\]\s"(),;@^`{}~]|$)/,
        Mf = /^(?:[+\-]?\d+(?:(?:N|(?:[eE][+\-]?\d+))|(?:\.?\d*(?:M|(?:[eE][+\-]?\d+))?)|\/\d+|[xX][0-9a-fA-F]+|r[0-9a-zA-Z]+)?(?=[\\\[\]\s"#'(),;@^`{}~]|$))/,
        Bf = /^(?:\\(?:backspace|formfeed|newline|return|space|tab|o[0-7]{3}|u[0-9A-Fa-f]{4}|x[0-9A-Fa-f]{4}|.)?(?=[\\\[\]\s"(),;@^`{}~]|$))/,
        Ff = /^(?:(?:[^\\\/\[\]\d\s"#'(),;@^`{}~.][^\\\[\]\s"(),;@^`{}~.\/]*(?:\.[^\\\/\[\]\d\s"#'(),;@^`{}~.][^\\\[\]\s"(),;@^`{}~.\/]*)*\/)?(?:\/|[^\\\/\[\]\d\s"#'(),;@^`{}~][^\\\[\]\s"(),;@^`{}~]*)*(?=[\\\[\]\s"(),;@^`{}~]|$))/;

    function Hf(e, t) {
        if (e.eatSpace() || e.eat(",")) return ["space", null];
        if (e.match(Mf)) return [null, "number"];
        if (e.match(Bf)) return [null, "string.special"];
        if (e.eat(/^"/)) return (t.tokenize = Jf)(e, t);
        if (e.eat(/^[(\[{]/)) return ["open", "bracket"];
        if (e.eat(/^[)\]}]/)) return ["close", "bracket"];
        if (e.eat(/^;/)) return e.skipToEnd(), ["space", "comment"];
        if (e.eat(/^[#'@^`~]/)) return [null, "meta"];
        var n = e.match(Ff),
            r = n && n[0];
        return r ? "comment" === r && "(" === t.lastToken ? (t.tokenize = Kf)(e, t) : tm(r, Cf) || ":" === r.charAt(0) ? ["symbol", "atom"] : tm(r, Gf) || tm(r, Lf) ? ["symbol", "keyword"] : "(" === t.lastToken ? ["symbol", "builtin"] : ["symbol", "variable"] : (e.next(), e.eatWhile((function(e) {
            return !tm(e, Df)
        })), [null, "error"])
    }

    function Jf(e, t) {
        for (var n, r = !1; n = e.next();) {
            if ('"' === n && !r) {
                t.tokenize = Hf;
                break
            }
            r = !r && "\\" === n
        }
        return [null, "string"]
    }

    function Kf(e, t) {
        for (var n, r = 1; n = e.next();)
            if (")" === n && r--, "(" === n && r++, 0 === r) {
                e.backUp(1), t.tokenize = Hf;
                break
            }
        return ["space", "comment"]
    }

    function em(e) {
        for (var t = {}, n = 0; n < e.length; ++n) t[e[n]] = !0;
        return t
    }

    function tm(e, t) {
        return t instanceof RegExp ? t.test(e) : t instanceof Object ? t.propertyIsEnumerable(e) : void 0
    }
    const nm = {
        startState: function() {
            return {
                ctx: {
                    prev: null,
                    start: 0,
                    indentTo: 0
                },
                lastToken: null,
                tokenize: Hf
            }
        },
        token: function(e, t) {
            e.sol() && "number" != typeof t.ctx.indentTo && (t.ctx.indentTo = t.ctx.start + 1);
            var n = t.tokenize(e, t),
                r = n[0],
                i = n[1],
                a = e.current();
            return "space" !== r && ("(" === t.lastToken && null === t.ctx.indentTo ? "symbol" === r && tm(a, Nf) ? t.ctx.indentTo = t.ctx.start + e.indentUnit : t.ctx.indentTo = "next" : "next" === t.ctx.indentTo && (t.ctx.indentTo = e.column()), t.lastToken = a), "open" === r ? t.ctx = {
                prev: t.ctx,
                start: e.column(),
                indentTo: null
            } : "close" === r && (t.ctx = t.ctx.prev || t.ctx), i
        },
        indent: function(e) {
            var t = e.ctx.indentTo;
            return "number" == typeof t ? t : e.ctx.start + 1
        },
        languageData: {
            closeBrackets: {
                brackets: ["(", "[", "{", '"']
            },
            commentTokens: {
                line: ";;"
            },
            autocomplete: [].concat(Vf, jf, Af)
        }
    };
    var rm = Object.freeze({
        __proto__: null,
        clojure: nm
    });

    function im(e) {
        var t, n, r = (e = { ...ym,
                ...e
            }).inline,
            i = e.tokenHooks,
            a = e.documentTypes || {},
            o = e.mediaTypes || {},
            s = e.mediaFeatures || {},
            O = e.mediaValueKeywords || {},
            l = e.propertyKeywords || {},
            c = e.nonStandardPropertyKeywords || {},
            u = e.fontProperties || {},
            d = e.counterDescriptors || {},
            p = e.colorKeywords || {},
            h = e.valueKeywords || {},
            f = e.allowNested,
            m = e.lineComment,
            g = !0 === e.supportsAtComponent,
            Q = !1 !== e.highlightNonStandardPropertyKeywords;

        function $(e, n) {
            return t = n, e
        }

        function b(e, t) {
            var n = e.next();
            if (i[n]) {
                var r = i[n](e, t);
                if (!1 !== r) return r
            }
            return "@" == n ? (e.eatWhile(/[\w\\\-]/), $("def", e.current())) : "=" == n || ("~" == n || "|" == n) && e.eat("=") ? $(null, "compare") : '"' == n || "'" == n ? (t.tokenize = x(n), t.tokenize(e, t)) : "#" == n ? (e.eatWhile(/[\w\\\-]/), $("atom", "hash")) : "!" == n ? (e.match(/^\s*\w*/), $("keyword", "important")) : /\d/.test(n) || "." == n && e.eat(/\d/) ? (e.eatWhile(/[\w.%]/), $("number", "unit")) : "-" !== n ? /[,+>*\/]/.test(n) ? $(null, "select-op") : "." == n && e.match(/^-?[_a-z][_a-z0-9-]*/i) ? $("qualifier", "qualifier") : /[:;{}\[\]\(\)]/.test(n) ? $(null, n) : e.match(/^[\w-.]+(?=\()/) ? (/^(url(-prefix)?|domain|regexp)$/i.test(e.current()) && (t.tokenize = P), $("variableName.function", "variable")) : /[\w\\\-]/.test(n) ? (e.eatWhile(/[\w\\\-]/), $("property", "word")) : $(null, null) : /[\d.]/.test(e.peek()) ? (e.eatWhile(/[\w.%]/), $("number", "unit")) : e.match(/^-[\w\\\-]*/) ? (e.eatWhile(/[\w\\\-]/), e.match(/^\s*:/, !1) ? $("def", "variable-definition") : $("variableName", "variable")) : e.match(/^\w+-/) ? $("meta", "meta") : void 0
        }

        function x(e) {
            return function(t, n) {
                for (var r, i = !1; null != (r = t.next());) {
                    if (r == e && !i) {
                        ")" == e && t.backUp(1);
                        break
                    }
                    i = !i && "\\" == r
                }
                return (r == e || !i && ")" != e) && (n.tokenize = null), $("string", "string")
            }
        }

        function P(e, t) {
            return e.next(), e.match(/^\s*[\"\')]/, !1) ? t.tokenize = null : t.tokenize = x(")"), $(null, "(")
        }

        function w(e, t, n) {
            this.type = e, this.indent = t, this.prev = n
        }

        function k(e, t, n, r) {
            return e.context = new w(n, t.indentation() + (!1 === r ? 0 : t.indentUnit), e.context), n
        }

        function y(e) {
            return e.context.prev && (e.context = e.context.prev), e.context.type
        }

        function v(e, t, n) {
            return X[n.context.type](e, t, n)
        }

        function S(e, t, n, r) {
            for (var i = r || 1; i > 0; i--) n.context = n.context.prev;
            return v(e, t, n)
        }

        function _(e) {
            var t = e.current().toLowerCase();
            n = h.hasOwnProperty(t) ? "atom" : p.hasOwnProperty(t) ? "keyword" : "variable"
        }
        var X = {
            top: function(e, t, r) {
                if ("{" == e) return k(r, t, "block");
                if ("}" == e && r.context.prev) return y(r);
                if (g && /@component/i.test(e)) return k(r, t, "atComponentBlock");
                if (/^@(-moz-)?document$/i.test(e)) return k(r, t, "documentTypes");
                if (/^@(media|supports|(-moz-)?document|import)$/i.test(e)) return k(r, t, "atBlock");
                if (/^@(font-face|counter-style)/i.test(e)) return r.stateArg = e, "restricted_atBlock_before";
                if (/^@(-(moz|ms|o|webkit)-)?keyframes$/i.test(e)) return "keyframes";
                if (e && "@" == e.charAt(0)) return k(r, t, "at");
                if ("hash" == e) n = "builtin";
                else if ("word" == e) n = "tag";
                else {
                    if ("variable-definition" == e) return "maybeprop";
                    if ("interpolation" == e) return k(r, t, "interpolation");
                    if (":" == e) return "pseudo";
                    if (f && "(" == e) return k(r, t, "parens")
                }
                return r.context.type
            },
            block: function(e, t, r) {
                if ("word" == e) {
                    var i = t.current().toLowerCase();
                    return l.hasOwnProperty(i) ? (n = "property", "maybeprop") : c.hasOwnProperty(i) ? (n = Q ? "string.special" : "property", "maybeprop") : f ? (n = t.match(/^\s*:(?:\s|$)/, !1) ? "property" : "tag", "block") : (n = "error", "maybeprop")
                }
                return "meta" == e ? "block" : f || "hash" != e && "qualifier" != e ? X.top(e, t, r) : (n = "error", "block")
            },
            maybeprop: function(e, t, n) {
                return ":" == e ? k(n, t, "prop") : v(e, t, n)
            },
            prop: function(e, t, r) {
                if (";" == e) return y(r);
                if ("{" == e && f) return k(r, t, "propBlock");
                if ("}" == e || "{" == e) return S(e, t, r);
                if ("(" == e) return k(r, t, "parens");
                if ("hash" != e || /^#([0-9a-fA-f]{3,4}|[0-9a-fA-f]{6}|[0-9a-fA-f]{8})$/.test(t.current())) {
                    if ("word" == e) _(t);
                    else if ("interpolation" == e) return k(r, t, "interpolation")
                } else n = "error";
                return "prop"
            },
            propBlock: function(e, t, r) {
                return "}" == e ? y(r) : "word" == e ? (n = "property", "maybeprop") : r.context.type
            },
            parens: function(e, t, n) {
                return "{" == e || "}" == e ? S(e, t, n) : ")" == e ? y(n) : "(" == e ? k(n, t, "parens") : "interpolation" == e ? k(n, t, "interpolation") : ("word" == e && _(t), "parens")
            },
            pseudo: function(e, t, r) {
                return "meta" == e ? "pseudo" : "word" == e ? (n = "variableName.constant", r.context.type) : v(e, t, r)
            },
            documentTypes: function(e, t, r) {
                return "word" == e && a.hasOwnProperty(t.current()) ? (n = "tag", r.context.type) : X.atBlock(e, t, r)
            },
            atBlock: function(e, t, r) {
                if ("(" == e) return k(r, t, "atBlock_parens");
                if ("}" == e || ";" == e) return S(e, t, r);
                if ("{" == e) return y(r) && k(r, t, f ? "block" : "top");
                if ("interpolation" == e) return k(r, t, "interpolation");
                if ("word" == e) {
                    var i = t.current().toLowerCase();
                    n = "only" == i || "not" == i || "and" == i || "or" == i ? "keyword" : o.hasOwnProperty(i) ? "attribute" : s.hasOwnProperty(i) ? "property" : O.hasOwnProperty(i) ? "keyword" : l.hasOwnProperty(i) ? "property" : c.hasOwnProperty(i) ? Q ? "string.special" : "property" : h.hasOwnProperty(i) ? "atom" : p.hasOwnProperty(i) ? "keyword" : "error"
                }
                return r.context.type
            },
            atComponentBlock: function(e, t, r) {
                return "}" == e ? S(e, t, r) : "{" == e ? y(r) && k(r, t, f ? "block" : "top", !1) : ("word" == e && (n = "error"), r.context.type)
            },
            atBlock_parens: function(e, t, n) {
                return ")" == e ? y(n) : "{" == e || "}" == e ? S(e, t, n, 2) : X.atBlock(e, t, n)
            },
            restricted_atBlock_before: function(e, t, r) {
                return "{" == e ? k(r, t, "restricted_atBlock") : "word" == e && "@counter-style" == r.stateArg ? (n = "variable", "restricted_atBlock_before") : v(e, t, r)
            },
            restricted_atBlock: function(e, t, r) {
                return "}" == e ? (r.stateArg = null, y(r)) : "word" == e ? (n = "@font-face" == r.stateArg && !u.hasOwnProperty(t.current().toLowerCase()) || "@counter-style" == r.stateArg && !d.hasOwnProperty(t.current().toLowerCase()) ? "error" : "property", "maybeprop") : "restricted_atBlock"
            },
            keyframes: function(e, t, r) {
                return "word" == e ? (n = "variable", "keyframes") : "{" == e ? k(r, t, "top") : v(e, t, r)
            },
            at: function(e, t, r) {
                return ";" == e ? y(r) : "{" == e || "}" == e ? S(e, t, r) : ("word" == e ? n = "tag" : "hash" == e && (n = "builtin"), "at")
            },
            interpolation: function(e, t, r) {
                return "}" == e ? y(r) : "{" == e || ";" == e ? S(e, t, r) : ("word" == e ? n = "variable" : "variable" != e && "(" != e && ")" != e && (n = "error"), "interpolation")
            }
        };
        return {
            startState: function() {
                return {
                    tokenize: null,
                    state: r ? "block" : "top",
                    stateArg: null,
                    context: new w(r ? "block" : "top", 0, null)
                }
            },
            token: function(e, r) {
                if (!r.tokenize && e.eatSpace()) return null;
                var i = (r.tokenize || b)(e, r);
                return i && "object" == typeof i && (t = i[1], i = i[0]), n = i, "comment" != t && (r.state = X[r.state](t, e, r)), n
            },
            indent: function(e, t, n) {
                var r = e.context,
                    i = t && t.charAt(0),
                    a = r.indent;
                return "prop" != r.type || "}" != i && ")" != i || (r = r.prev), r.prev && ("}" != i || "block" != r.type && "top" != r.type && "interpolation" != r.type && "restricted_atBlock" != r.type ? (")" != i || "parens" != r.type && "atBlock_parens" != r.type) && ("{" != i || "at" != r.type && "atBlock" != r.type) || (a = Math.max(0, r.indent - n.unit)) : a = (r = r.prev).indent), a
            },
            languageData: {
                indentOnInput: /^\s*\}$/,
                commentTokens: {
                    line: m,
                    block: {
                        open: "/*",
                        close: "*/"
                    }
                },
                autocomplete: km
            }
        }
    }

    function am(e) {
        for (var t = {}, n = 0; n < e.length; ++n) t[e[n].toLowerCase()] = !0;
        return t
    }
    var om = ["domain", "regexp", "url", "url-prefix"],
        sm = am(om),
        Om = ["all", "aural", "braille", "handheld", "print", "projection", "screen", "tty", "tv", "embossed"],
        lm = am(Om),
        cm = ["width", "min-width", "max-width", "height", "min-height", "max-height", "device-width", "min-device-width", "max-device-width", "device-height", "min-device-height", "max-device-height", "aspect-ratio", "min-aspect-ratio", "max-aspect-ratio", "device-aspect-ratio", "min-device-aspect-ratio", "max-device-aspect-ratio", "color", "min-color", "max-color", "color-index", "min-color-index", "max-color-index", "monochrome", "min-monochrome", "max-monochrome", "resolution", "min-resolution", "max-resolution", "scan", "grid", "orientation", "device-pixel-ratio", "min-device-pixel-ratio", "max-device-pixel-ratio", "pointer", "any-pointer", "hover", "any-hover", "prefers-color-scheme"],
        um = am(cm),
        dm = ["landscape", "portrait", "none", "coarse", "fine", "on-demand", "hover", "interlace", "progressive", "dark", "light"],
        pm = am(dm),
        hm = ["align-content", "align-items", "align-self", "alignment-adjust", "alignment-baseline", "all", "anchor-point", "animation", "animation-delay", "animation-direction", "animation-duration", "animation-fill-mode", "animation-iteration-count", "animation-name", "animation-play-state", "animation-timing-function", "appearance", "azimuth", "backdrop-filter", "backface-visibility", "background", "background-attachment", "background-blend-mode", "background-clip", "background-color", "background-image", "background-origin", "background-position", "background-position-x", "background-position-y", "background-repeat", "background-size", "baseline-shift", "binding", "bleed", "block-size", "bookmark-label", "bookmark-level", "bookmark-state", "bookmark-target", "border", "border-bottom", "border-bottom-color", "border-bottom-left-radius", "border-bottom-right-radius", "border-bottom-style", "border-bottom-width", "border-collapse", "border-color", "border-image", "border-image-outset", "border-image-repeat", "border-image-slice", "border-image-source", "border-image-width", "border-left", "border-left-color", "border-left-style", "border-left-width", "border-radius", "border-right", "border-right-color", "border-right-style", "border-right-width", "border-spacing", "border-style", "border-top", "border-top-color", "border-top-left-radius", "border-top-right-radius", "border-top-style", "border-top-width", "border-width", "bottom", "box-decoration-break", "box-shadow", "box-sizing", "break-after", "break-before", "break-inside", "caption-side", "caret-color", "clear", "clip", "color", "color-profile", "column-count", "column-fill", "column-gap", "column-rule", "column-rule-color", "column-rule-style", "column-rule-width", "column-span", "column-width", "columns", "contain", "content", "counter-increment", "counter-reset", "crop", "cue", "cue-after", "cue-before", "cursor", "direction", "display", "dominant-baseline", "drop-initial-after-adjust", "drop-initial-after-align", "drop-initial-before-adjust", "drop-initial-before-align", "drop-initial-size", "drop-initial-value", "elevation", "empty-cells", "fit", "fit-position", "flex", "flex-basis", "flex-direction", "flex-flow", "flex-grow", "flex-shrink", "flex-wrap", "float", "float-offset", "flow-from", "flow-into", "font", "font-family", "font-feature-settings", "font-kerning", "font-language-override", "font-optical-sizing", "font-size", "font-size-adjust", "font-stretch", "font-style", "font-synthesis", "font-variant", "font-variant-alternates", "font-variant-caps", "font-variant-east-asian", "font-variant-ligatures", "font-variant-numeric", "font-variant-position", "font-variation-settings", "font-weight", "gap", "grid", "grid-area", "grid-auto-columns", "grid-auto-flow", "grid-auto-rows", "grid-column", "grid-column-end", "grid-column-gap", "grid-column-start", "grid-gap", "grid-row", "grid-row-end", "grid-row-gap", "grid-row-start", "grid-template", "grid-template-areas", "grid-template-columns", "grid-template-rows", "hanging-punctuation", "height", "hyphens", "icon", "image-orientation", "image-rendering", "image-resolution", "inline-box-align", "inset", "inset-block", "inset-block-end", "inset-block-start", "inset-inline", "inset-inline-end", "inset-inline-start", "isolation", "justify-content", "justify-items", "justify-self", "left", "letter-spacing", "line-break", "line-height", "line-height-step", "line-stacking", "line-stacking-ruby", "line-stacking-shift", "line-stacking-strategy", "list-style", "list-style-image", "list-style-position", "list-style-type", "margin", "margin-bottom", "margin-left", "margin-right", "margin-top", "marks", "marquee-direction", "marquee-loop", "marquee-play-count", "marquee-speed", "marquee-style", "mask-clip", "mask-composite", "mask-image", "mask-mode", "mask-origin", "mask-position", "mask-repeat", "mask-size", "mask-type", "max-block-size", "max-height", "max-inline-size", "max-width", "min-block-size", "min-height", "min-inline-size", "min-width", "mix-blend-mode", "move-to", "nav-down", "nav-index", "nav-left", "nav-right", "nav-up", "object-fit", "object-position", "offset", "offset-anchor", "offset-distance", "offset-path", "offset-position", "offset-rotate", "opacity", "order", "orphans", "outline", "outline-color", "outline-offset", "outline-style", "outline-width", "overflow", "overflow-style", "overflow-wrap", "overflow-x", "overflow-y", "padding", "padding-bottom", "padding-left", "padding-right", "padding-top", "page", "page-break-after", "page-break-before", "page-break-inside", "page-policy", "pause", "pause-after", "pause-before", "perspective", "perspective-origin", "pitch", "pitch-range", "place-content", "place-items", "place-self", "play-during", "position", "presentation-level", "punctuation-trim", "quotes", "region-break-after", "region-break-before", "region-break-inside", "region-fragment", "rendering-intent", "resize", "rest", "rest-after", "rest-before", "richness", "right", "rotate", "rotation", "rotation-point", "row-gap", "ruby-align", "ruby-overhang", "ruby-position", "ruby-span", "scale", "scroll-behavior", "scroll-margin", "scroll-margin-block", "scroll-margin-block-end", "scroll-margin-block-start", "scroll-margin-bottom", "scroll-margin-inline", "scroll-margin-inline-end", "scroll-margin-inline-start", "scroll-margin-left", "scroll-margin-right", "scroll-margin-top", "scroll-padding", "scroll-padding-block", "scroll-padding-block-end", "scroll-padding-block-start", "scroll-padding-bottom", "scroll-padding-inline", "scroll-padding-inline-end", "scroll-padding-inline-start", "scroll-padding-left", "scroll-padding-right", "scroll-padding-top", "scroll-snap-align", "scroll-snap-type", "shape-image-threshold", "shape-inside", "shape-margin", "shape-outside", "size", "speak", "speak-as", "speak-header", "speak-numeral", "speak-punctuation", "speech-rate", "stress", "string-set", "tab-size", "table-layout", "target", "target-name", "target-new", "target-position", "text-align", "text-align-last", "text-combine-upright", "text-decoration", "text-decoration-color", "text-decoration-line", "text-decoration-skip", "text-decoration-skip-ink", "text-decoration-style", "text-emphasis", "text-emphasis-color", "text-emphasis-position", "text-emphasis-style", "text-height", "text-indent", "text-justify", "text-orientation", "text-outline", "text-overflow", "text-rendering", "text-shadow", "text-size-adjust", "text-space-collapse", "text-transform", "text-underline-position", "text-wrap", "top", "touch-action", "transform", "transform-origin", "transform-style", "transition", "transition-delay", "transition-duration", "transition-property", "transition-timing-function", "translate", "unicode-bidi", "user-select", "vertical-align", "visibility", "voice-balance", "voice-duration", "voice-family", "voice-pitch", "voice-range", "voice-rate", "voice-stress", "voice-volume", "volume", "white-space", "widows", "width", "will-change", "word-break", "word-spacing", "word-wrap", "writing-mode", "z-index", "clip-path", "clip-rule", "mask", "enable-background", "filter", "flood-color", "flood-opacity", "lighting-color", "stop-color", "stop-opacity", "pointer-events", "color-interpolation", "color-interpolation-filters", "color-rendering", "fill", "fill-opacity", "fill-rule", "image-rendering", "marker", "marker-end", "marker-mid", "marker-start", "paint-order", "shape-rendering", "stroke", "stroke-dasharray", "stroke-dashoffset", "stroke-linecap", "stroke-linejoin", "stroke-miterlimit", "stroke-opacity", "stroke-width", "text-rendering", "baseline-shift", "dominant-baseline", "glyph-orientation-horizontal", "glyph-orientation-vertical", "text-anchor", "writing-mode"],
        fm = am(hm),
        mm = ["border-block", "border-block-color", "border-block-end", "border-block-end-color", "border-block-end-style", "border-block-end-width", "border-block-start", "border-block-start-color", "border-block-start-style", "border-block-start-width", "border-block-style", "border-block-width", "border-inline", "border-inline-color", "border-inline-end", "border-inline-end-color", "border-inline-end-style", "border-inline-end-width", "border-inline-start", "border-inline-start-color", "border-inline-start-style", "border-inline-start-width", "border-inline-style", "border-inline-width", "margin-block", "margin-block-end", "margin-block-start", "margin-inline", "margin-inline-end", "margin-inline-start", "padding-block", "padding-block-end", "padding-block-start", "padding-inline", "padding-inline-end", "padding-inline-start", "scroll-snap-stop", "scrollbar-3d-light-color", "scrollbar-arrow-color", "scrollbar-base-color", "scrollbar-dark-shadow-color", "scrollbar-face-color", "scrollbar-highlight-color", "scrollbar-shadow-color", "scrollbar-track-color", "searchfield-cancel-button", "searchfield-decoration", "searchfield-results-button", "searchfield-results-decoration", "shape-inside", "zoom"],
        gm = am(mm),
        Qm = am(["font-display", "font-family", "src", "unicode-range", "font-variant", "font-feature-settings", "font-stretch", "font-weight", "font-style"]),
        $m = am(["additive-symbols", "fallback", "negative", "pad", "prefix", "range", "speak-as", "suffix", "symbols", "system"]),
        bm = ["aliceblue", "antiquewhite", "aqua", "aquamarine", "azure", "beige", "bisque", "black", "blanchedalmond", "blue", "blueviolet", "brown", "burlywood", "cadetblue", "chartreuse", "chocolate", "coral", "cornflowerblue", "cornsilk", "crimson", "cyan", "darkblue", "darkcyan", "darkgoldenrod", "darkgray", "darkgreen", "darkkhaki", "darkmagenta", "darkolivegreen", "darkorange", "darkorchid", "darkred", "darksalmon", "darkseagreen", "darkslateblue", "darkslategray", "darkturquoise", "darkviolet", "deeppink", "deepskyblue", "dimgray", "dodgerblue", "firebrick", "floralwhite", "forestgreen", "fuchsia", "gainsboro", "ghostwhite", "gold", "goldenrod", "gray", "grey", "green", "greenyellow", "honeydew", "hotpink", "indianred", "indigo", "ivory", "khaki", "lavender", "lavenderblush", "lawngreen", "lemonchiffon", "lightblue", "lightcoral", "lightcyan", "lightgoldenrodyellow", "lightgray", "lightgreen", "lightpink", "lightsalmon", "lightseagreen", "lightskyblue", "lightslategray", "lightsteelblue", "lightyellow", "lime", "limegreen", "linen", "magenta", "maroon", "mediumaquamarine", "mediumblue", "mediumorchid", "mediumpurple", "mediumseagreen", "mediumslateblue", "mediumspringgreen", "mediumturquoise", "mediumvioletred", "midnightblue", "mintcream", "mistyrose", "moccasin", "navajowhite", "navy", "oldlace", "olive", "olivedrab", "orange", "orangered", "orchid", "palegoldenrod", "palegreen", "paleturquoise", "palevioletred", "papayawhip", "peachpuff", "peru", "pink", "plum", "powderblue", "purple", "rebeccapurple", "red", "rosybrown", "royalblue", "saddlebrown", "salmon", "sandybrown", "seagreen", "seashell", "sienna", "silver", "skyblue", "slateblue", "slategray", "snow", "springgreen", "steelblue", "tan", "teal", "thistle", "tomato", "turquoise", "violet", "wheat", "white", "whitesmoke", "yellow", "yellowgreen"],
        xm = am(bm),
        Pm = ["above", "absolute", "activeborder", "additive", "activecaption", "afar", "after-white-space", "ahead", "alias", "all", "all-scroll", "alphabetic", "alternate", "always", "amharic", "amharic-abegede", "antialiased", "appworkspace", "arabic-indic", "armenian", "asterisks", "attr", "auto", "auto-flow", "avoid", "avoid-column", "avoid-page", "avoid-region", "axis-pan", "background", "backwards", "baseline", "below", "bidi-override", "binary", "bengali", "blink", "block", "block-axis", "bold", "bolder", "border", "border-box", "both", "bottom", "break", "break-all", "break-word", "bullets", "button", "button-bevel", "buttonface", "buttonhighlight", "buttonshadow", "buttontext", "calc", "cambodian", "capitalize", "caps-lock-indicator", "caption", "captiontext", "caret", "cell", "center", "checkbox", "circle", "cjk-decimal", "cjk-earthly-branch", "cjk-heavenly-stem", "cjk-ideographic", "clear", "clip", "close-quote", "col-resize", "collapse", "color", "color-burn", "color-dodge", "column", "column-reverse", "compact", "condensed", "contain", "content", "contents", "content-box", "context-menu", "continuous", "copy", "counter", "counters", "cover", "crop", "cross", "crosshair", "currentcolor", "cursive", "cyclic", "darken", "dashed", "decimal", "decimal-leading-zero", "default", "default-button", "dense", "destination-atop", "destination-in", "destination-out", "destination-over", "devanagari", "difference", "disc", "discard", "disclosure-closed", "disclosure-open", "document", "dot-dash", "dot-dot-dash", "dotted", "double", "down", "e-resize", "ease", "ease-in", "ease-in-out", "ease-out", "element", "ellipse", "ellipsis", "embed", "end", "ethiopic", "ethiopic-abegede", "ethiopic-abegede-am-et", "ethiopic-abegede-gez", "ethiopic-abegede-ti-er", "ethiopic-abegede-ti-et", "ethiopic-halehame-aa-er", "ethiopic-halehame-aa-et", "ethiopic-halehame-am-et", "ethiopic-halehame-gez", "ethiopic-halehame-om-et", "ethiopic-halehame-sid-et", "ethiopic-halehame-so-et", "ethiopic-halehame-ti-er", "ethiopic-halehame-ti-et", "ethiopic-halehame-tig", "ethiopic-numeric", "ew-resize", "exclusion", "expanded", "extends", "extra-condensed", "extra-expanded", "fantasy", "fast", "fill", "fill-box", "fixed", "flat", "flex", "flex-end", "flex-start", "footnotes", "forwards", "from", "geometricPrecision", "georgian", "graytext", "grid", "groove", "gujarati", "gurmukhi", "hand", "hangul", "hangul-consonant", "hard-light", "hebrew", "help", "hidden", "hide", "higher", "highlight", "highlighttext", "hiragana", "hiragana-iroha", "horizontal", "hsl", "hsla", "hue", "icon", "ignore", "inactiveborder", "inactivecaption", "inactivecaptiontext", "infinite", "infobackground", "infotext", "inherit", "initial", "inline", "inline-axis", "inline-block", "inline-flex", "inline-grid", "inline-table", "inset", "inside", "intrinsic", "invert", "italic", "japanese-formal", "japanese-informal", "justify", "kannada", "katakana", "katakana-iroha", "keep-all", "khmer", "korean-hangul-formal", "korean-hanja-formal", "korean-hanja-informal", "landscape", "lao", "large", "larger", "left", "level", "lighter", "lighten", "line-through", "linear", "linear-gradient", "lines", "list-item", "listbox", "listitem", "local", "logical", "loud", "lower", "lower-alpha", "lower-armenian", "lower-greek", "lower-hexadecimal", "lower-latin", "lower-norwegian", "lower-roman", "lowercase", "ltr", "luminosity", "malayalam", "manipulation", "match", "matrix", "matrix3d", "media-controls-background", "media-current-time-display", "media-fullscreen-button", "media-mute-button", "media-play-button", "media-return-to-realtime-button", "media-rewind-button", "media-seek-back-button", "media-seek-forward-button", "media-slider", "media-sliderthumb", "media-time-remaining-display", "media-volume-slider", "media-volume-slider-container", "media-volume-sliderthumb", "medium", "menu", "menulist", "menulist-button", "menulist-text", "menulist-textfield", "menutext", "message-box", "middle", "min-intrinsic", "mix", "mongolian", "monospace", "move", "multiple", "multiple_mask_images", "multiply", "myanmar", "n-resize", "narrower", "ne-resize", "nesw-resize", "no-close-quote", "no-drop", "no-open-quote", "no-repeat", "none", "normal", "not-allowed", "nowrap", "ns-resize", "numbers", "numeric", "nw-resize", "nwse-resize", "oblique", "octal", "opacity", "open-quote", "optimizeLegibility", "optimizeSpeed", "oriya", "oromo", "outset", "outside", "outside-shape", "overlay", "overline", "padding", "padding-box", "painted", "page", "paused", "persian", "perspective", "pinch-zoom", "plus-darker", "plus-lighter", "pointer", "polygon", "portrait", "pre", "pre-line", "pre-wrap", "preserve-3d", "progress", "push-button", "radial-gradient", "radio", "read-only", "read-write", "read-write-plaintext-only", "rectangle", "region", "relative", "repeat", "repeating-linear-gradient", "repeating-radial-gradient", "repeat-x", "repeat-y", "reset", "reverse", "rgb", "rgba", "ridge", "right", "rotate", "rotate3d", "rotateX", "rotateY", "rotateZ", "round", "row", "row-resize", "row-reverse", "rtl", "run-in", "running", "s-resize", "sans-serif", "saturation", "scale", "scale3d", "scaleX", "scaleY", "scaleZ", "screen", "scroll", "scrollbar", "scroll-position", "se-resize", "searchfield", "searchfield-cancel-button", "searchfield-decoration", "searchfield-results-button", "searchfield-results-decoration", "self-start", "self-end", "semi-condensed", "semi-expanded", "separate", "serif", "show", "sidama", "simp-chinese-formal", "simp-chinese-informal", "single", "skew", "skewX", "skewY", "skip-white-space", "slide", "slider-horizontal", "slider-vertical", "sliderthumb-horizontal", "sliderthumb-vertical", "slow", "small", "small-caps", "small-caption", "smaller", "soft-light", "solid", "somali", "source-atop", "source-in", "source-out", "source-over", "space", "space-around", "space-between", "space-evenly", "spell-out", "square", "square-button", "start", "static", "status-bar", "stretch", "stroke", "stroke-box", "sub", "subpixel-antialiased", "svg_masks", "super", "sw-resize", "symbolic", "symbols", "system-ui", "table", "table-caption", "table-cell", "table-column", "table-column-group", "table-footer-group", "table-header-group", "table-row", "table-row-group", "tamil", "telugu", "text", "text-bottom", "text-top", "textarea", "textfield", "thai", "thick", "thin", "threeddarkshadow", "threedface", "threedhighlight", "threedlightshadow", "threedshadow", "tibetan", "tigre", "tigrinya-er", "tigrinya-er-abegede", "tigrinya-et", "tigrinya-et-abegede", "to", "top", "trad-chinese-formal", "trad-chinese-informal", "transform", "translate", "translate3d", "translateX", "translateY", "translateZ", "transparent", "ultra-condensed", "ultra-expanded", "underline", "unidirectional-pan", "unset", "up", "upper-alpha", "upper-armenian", "upper-greek", "upper-hexadecimal", "upper-latin", "upper-norwegian", "upper-roman", "uppercase", "urdu", "url", "var", "vertical", "vertical-text", "view-box", "visible", "visibleFill", "visiblePainted", "visibleStroke", "visual", "w-resize", "wait", "wave", "wider", "window", "windowframe", "windowtext", "words", "wrap", "wrap-reverse", "x-large", "x-small", "xor", "xx-large", "xx-small"],
        wm = am(Pm),
        km = om.concat(Om).concat(cm).concat(dm).concat(hm).concat(mm).concat(bm).concat(Pm);
    const ym = {
            documentTypes: sm,
            mediaTypes: lm,
            mediaFeatures: um,
            mediaValueKeywords: pm,
            propertyKeywords: fm,
            nonStandardPropertyKeywords: gm,
            fontProperties: Qm,
            counterDescriptors: $m,
            colorKeywords: xm,
            valueKeywords: wm,
            tokenHooks: {
                "/": function(e, t) {
                    return !!e.eat("*") && (t.tokenize = Sm, Sm(e, t))
                }
            }
        },
        vm = im({});

    function Sm(e, t) {
        for (var n, r = !1; null != (n = e.next());) {
            if (r && "/" == n) {
                t.tokenize = null;
                break
            }
            r = "*" == n
        }
        return ["comment", "comment"]
    }
    const _m = im({
            mediaTypes: lm,
            mediaFeatures: um,
            mediaValueKeywords: pm,
            propertyKeywords: fm,
            nonStandardPropertyKeywords: gm,
            colorKeywords: xm,
            valueKeywords: wm,
            fontProperties: Qm,
            allowNested: !0,
            lineComment: "//",
            tokenHooks: {
                "/": function(e, t) {
                    return e.eat("/") ? (e.skipToEnd(), ["comment", "comment"]) : e.eat("*") ? (t.tokenize = Sm, Sm(e, t)) : ["operator", "operator"]
                },
                ":": function(e) {
                    return !!e.match(/^\s*\{/, !1) && [null, null]
                },
                $: function(e) {
                    return e.match(/^[\w-]+/), e.match(/^\s*:/, !1) ? ["def", "variable-definition"] : ["variableName.special", "variable"]
                },
                "#": function(e) {
                    return !!e.eat("{") && [null, "interpolation"]
                }
            }
        }),
        Xm = im({
            mediaTypes: lm,
            mediaFeatures: um,
            mediaValueKeywords: pm,
            propertyKeywords: fm,
            nonStandardPropertyKeywords: gm,
            colorKeywords: xm,
            valueKeywords: wm,
            fontProperties: Qm,
            allowNested: !0,
            lineComment: "//",
            tokenHooks: {
                "/": function(e, t) {
                    return e.eat("/") ? (e.skipToEnd(), ["comment", "comment"]) : e.eat("*") ? (t.tokenize = Sm, Sm(e, t)) : ["operator", "operator"]
                },
                "@": function(e) {
                    return e.eat("{") ? [null, "interpolation"] : !e.match(/^(charset|document|font-face|import|(-(moz|ms|o|webkit)-)?keyframes|media|namespace|page|supports)\b/i, !1) && (e.eatWhile(/[\w\\\-]/), e.match(/^\s*:/, !1) ? ["def", "variable-definition"] : ["variableName", "variable"])
                },
                "&": function() {
                    return ["atom", "atom"]
                }
            }
        }),
        Tm = im({
            documentTypes: sm,
            mediaTypes: lm,
            mediaFeatures: um,
            propertyKeywords: fm,
            nonStandardPropertyKeywords: gm,
            fontProperties: Qm,
            counterDescriptors: $m,
            colorKeywords: xm,
            valueKeywords: wm,
            supportsAtComponent: !0,
            tokenHooks: {
                "/": function(e, t) {
                    return !!e.eat("*") && (t.tokenize = Sm, Sm(e, t))
                }
            }
        });
    var Rm = Object.freeze({
            __proto__: null,
            mkCSS: im,
            css: vm,
            sCSS: _m,
            less: Xm,
            gss: Tm
        }),
        Wm = /({)?[a-zA-Z0-9_]+(})?/;

    function qm(e, t) {
        for (var n, r, i = !1; !e.eol() && (n = e.next()) != t.pending;) {
            if ("$" === n && "\\" != r && '"' == t.pending) {
                i = !0;
                break
            }
            r = n
        }
        return i && e.backUp(1), n == t.pending ? t.continueString = !1 : t.continueString = !0, "string"
    }
    const Ym = {
        startState: function() {
            var e = {
                inDefinition: !1,
                inInclude: !1,
                continueString: !1,
                pending: !1
            };
            return e
        },
        token: function(e, t) {
            return e.eatSpace() ? null : function(e, t) {
                var n = e.next();
                return "$" === n ? e.match(Wm) ? "variableName.special" : "variable" : t.continueString ? (e.backUp(1), qm(e, t)) : e.match(/(\s+)?\w+\(/) || e.match(/(\s+)?\w+\ \(/) ? (e.backUp(1), "def") : "#" == n ? (e.skipToEnd(), "comment") : "'" == n || '"' == n ? (t.pending = n, qm(e, t)) : "(" == n || ")" == n ? "bracket" : n.match(/[0-9]/) ? "number" : (e.eatWhile(/[\w-]/), null)
            }(e, t)
        }
    };
    var zm = Object.freeze({
            __proto__: null,
            cmake: Ym
        }),
        Zm = "error";

    function Em(e) {
        return new RegExp("^((" + e.join(")|(") + "))\\b")
    }
    var Im = /^(?:->|=>|\+[+=]?|-[\-=]?|\*[\*=]?|\/[\/=]?|[=!]=|<[><]?=?|>>?=?|%=?|&=?|\|=?|\^=?|\~|!|\?|(or|and|\|\||&&|\?)=)/,
        Um = /^(?:[()\[\]{},:`=;]|\.\.?\.?)/,
        Vm = /^[_A-Za-z$][_A-Za-z$0-9]*/,
        jm = /^@[_A-Za-z$][_A-Za-z$0-9]*/,
        Am = Em(["and", "or", "not", "is", "isnt", "in", "instanceof", "typeof"]),
        Cm = ["for", "while", "loop", "if", "unless", "else", "switch", "try", "catch", "finally", "class"],
        Gm = Em(Cm.concat(["break", "by", "continue", "debugger", "delete", "do", "in", "of", "new", "return", "then", "this", "@", "throw", "when", "until", "extends"]));
    Cm = Em(Cm);
    var Lm = /^('{3}|\"{3}|['\"])/,
        Nm = /^(\/{3}|\/)/,
        Dm = Em(["Infinity", "NaN", "undefined", "null", "true", "false", "on", "off", "yes", "no"]);

    function Mm(e, t) {
        if (e.sol()) {
            null === t.scope.align && (t.scope.align = !1);
            var n = t.scope.offset;
            if (e.eatSpace()) {
                var r = e.indentation();
                return r > n && "coffee" == t.scope.type ? "indent" : r < n ? "dedent" : null
            }
            n > 0 && Jm(e, t)
        }
        if (e.eatSpace()) return null;
        var i = e.peek();
        if (e.match("####")) return e.skipToEnd(), "comment";
        if (e.match("###")) return t.tokenize = Fm, t.tokenize(e, t);
        if ("#" === i) return e.skipToEnd(), "comment";
        if (e.match(/^-?[0-9\.]/, !1)) {
            var a = !1;
            if (e.match(/^-?\d*\.\d+(e[\+\-]?\d+)?/i) && (a = !0), e.match(/^-?\d+\.\d*/) && (a = !0), e.match(/^-?\.\d+/) && (a = !0), a) return "." == e.peek() && e.backUp(1), "number";
            var o = !1;
            if (e.match(/^-?0x[0-9a-f]+/i) && (o = !0), e.match(/^-?[1-9]\d*(e[\+\-]?\d+)?/) && (o = !0), e.match(/^-?0(?![\dx])/i) && (o = !0), o) return "number"
        }
        if (e.match(Lm)) return t.tokenize = Bm(e.current(), !1, "string"), t.tokenize(e, t);
        if (e.match(Nm)) {
            if ("/" != e.current() || e.match(/^.*\//, !1)) return t.tokenize = Bm(e.current(), !0, "string.special"), t.tokenize(e, t);
            e.backUp(1)
        }
        return e.match(Im) || e.match(Am) ? "operator" : e.match(Um) ? "punctuation" : e.match(Dm) ? "atom" : e.match(jm) || t.prop && e.match(Vm) ? "property" : e.match(Gm) ? "keyword" : e.match(Vm) ? "variable" : (e.next(), Zm)
    }

    function Bm(e, t, n) {
        return function(r, i) {
            for (; !r.eol();)
                if (r.eatWhile(/[^'"\/\\]/), r.eat("\\")) {
                    if (r.next(), t && r.eol()) return n
                } else {
                    if (r.match(e)) return i.tokenize = Mm, n;
                    r.eat(/['"\/]/)
                }
            return t && (i.tokenize = Mm), n
        }
    }

    function Fm(e, t) {
        for (; !e.eol();) {
            if (e.eatWhile(/[^#]/), e.match("###")) {
                t.tokenize = Mm;
                break
            }
            e.eatWhile("#")
        }
        return "comment"
    }

    function Hm(e, t, n = "coffee") {
        for (var r = 0, i = !1, a = null, o = t.scope; o; o = o.prev)
            if ("coffee" === o.type || "}" == o.type) {
                r = o.offset + e.indentUnit;
                break
            }
        "coffee" !== n ? (i = null, a = e.column() + e.current().length) : t.scope.align && (t.scope.align = !1), t.scope = {
            offset: r,
            type: n,
            prev: t.scope,
            align: i,
            alignOffset: a
        }
    }

    function Jm(e, t) {
        if (t.scope.prev) {
            if ("coffee" === t.scope.type) {
                for (var n = e.indentation(), r = !1, i = t.scope; i; i = i.prev)
                    if (n === i.offset) {
                        r = !0;
                        break
                    }
                if (!r) return !0;
                for (; t.scope.prev && t.scope.offset !== n;) t.scope = t.scope.prev;
                return !1
            }
            return t.scope = t.scope.prev, !1
        }
    }
    const Km = {
        startState: function() {
            return {
                tokenize: Mm,
                scope: {
                    offset: 0,
                    type: "coffee",
                    prev: null,
                    align: !1
                },
                prop: !1,
                dedent: 0
            }
        },
        token: function(e, t) {
            var n = null === t.scope.align && t.scope;
            n && e.sol() && (n.align = !1);
            var r = function(e, t) {
                var n = t.tokenize(e, t),
                    r = e.current();
                "return" === r && (t.dedent = !0), (("->" === r || "=>" === r) && e.eol() || "indent" === n) && Hm(e, t);
                var i = "[({".indexOf(r);
                if (-1 !== i && Hm(e, t, "])}".slice(i, i + 1)), Cm.exec(r) && Hm(e, t), "then" == r && Jm(e, t), "dedent" === n && Jm(e, t)) return Zm;
                if (-1 !== (i = "])}".indexOf(r))) {
                    for (;
                        "coffee" == t.scope.type && t.scope.prev;) t.scope = t.scope.prev;
                    t.scope.type == r && (t.scope = t.scope.prev)
                }
                return t.dedent && e.eol() && ("coffee" == t.scope.type && t.scope.prev && (t.scope = t.scope.prev), t.dedent = !1), "indent" == n || "dedent" == n ? null : n
            }(e, t);
            return r && "comment" != r && (n && (n.align = !0), t.prop = "punctuation" == r && "." == e.current()), r
        },
        indent: function(e, t) {
            if (e.tokenize != Mm) return 0;
            var n = e.scope,
                r = t && "])}".indexOf(t.charAt(0)) > -1;
            if (r)
                for (;
                    "coffee" == n.type && n.prev;) n = n.prev;
            var i = r && n.type === t.charAt(0);
            return n.align ? n.alignOffset - (i ? 1 : 0) : (i ? n.prev : n).offset
        },
        languageData: {
            commentTokens: {
                line: "#"
            }
        }
    };
    var eg, tg = Object.freeze({
            __proto__: null,
            coffeeScript: Km
        }),
        ng = /^(block|let*|return-from|catch|load-time-value|setq|eval-when|locally|symbol-macrolet|flet|macrolet|tagbody|function|multiple-value-call|the|go|multiple-value-prog1|throw|if|progn|unwind-protect|labels|progv|let|quote)$/,
        rg = /^with|^def|^do|^prog|case$|^cond$|bind$|when$|unless$/,
        ig = /^(?:[+\-]?(?:\d+|\d*\.\d+)(?:[efd][+\-]?\d+)?|[+\-]?\d+(?:\/[+\-]?\d+)?|#b[+\-]?[01]+|#o[+\-]?[0-7]+|#x[+\-]?[\da-f]+)/,
        ag = /[^\s'`,@()\[\]";]/;

    function og(e) {
        for (var t; t = e.next();)
            if ("\\" == t) e.next();
            else if (!ag.test(t)) {
            e.backUp(1);
            break
        }
        return e.current()
    }

    function sg(e, t) {
        if (e.eatSpace()) return eg = "ws", null;
        if (e.match(ig)) return "number";
        var n;
        if ("\\" == (n = e.next()) && (n = e.next()), '"' == n) return (t.tokenize = Og)(e, t);
        if ("(" == n) return eg = "open", "bracket";
        if (")" == n || "]" == n) return eg = "close", "bracket";
        if (";" == n) return e.skipToEnd(), eg = "ws", "comment";
        if (/['`,@]/.test(n)) return null;
        if ("|" == n) return e.skipTo("|") ? (e.next(), "variableName") : (e.skipToEnd(), "error");
        if ("#" == n) return "(" == (n = e.next()) ? (eg = "open", "bracket") : /[+\-=\.']/.test(n) || /\d/.test(n) && e.match(/^\d*#/) ? null : "|" == n ? (t.tokenize = lg)(e, t) : ":" == n ? (og(e), "meta") : "\\" == n ? (e.next(), og(e), "string.special") : "error";
        var r = og(e);
        return "." == r ? null : (eg = "symbol", "nil" == r || "t" == r || ":" == r.charAt(0) ? "atom" : "open" == t.lastType && (ng.test(r) || rg.test(r)) ? "keyword" : "&" == r.charAt(0) ? "variableName.special" : "variableName")
    }

    function Og(e, t) {
        for (var n, r = !1; n = e.next();) {
            if ('"' == n && !r) {
                t.tokenize = sg;
                break
            }
            r = !r && "\\" == n
        }
        return "string"
    }

    function lg(e, t) {
        for (var n, r; n = e.next();) {
            if ("#" == n && "|" == r) {
                t.tokenize = sg;
                break
            }
            r = n
        }
        return eg = "ws", "comment"
    }
    const cg = {
        startState: function() {
            return {
                ctx: {
                    prev: null,
                    start: 0,
                    indentTo: 0
                },
                lastType: null,
                tokenize: sg
            }
        },
        token: function(e, t) {
            e.sol() && "number" != typeof t.ctx.indentTo && (t.ctx.indentTo = t.ctx.start + 1), eg = null;
            var n = t.tokenize(e, t);
            return "ws" != eg && (null == t.ctx.indentTo ? "symbol" == eg && rg.test(e.current()) ? t.ctx.indentTo = t.ctx.start + e.indentUnit : t.ctx.indentTo = "next" : "next" == t.ctx.indentTo && (t.ctx.indentTo = e.column()), t.lastType = eg), "open" == eg ? t.ctx = {
                prev: t.ctx,
                start: e.column(),
                indentTo: null
            } : "close" == eg && (t.ctx = t.ctx.prev || t.ctx), n
        },
        indent: function(e) {
            var t = e.ctx.indentTo;
            return "number" == typeof t ? t : e.ctx.start + 1
        },
        languageData: {
            commentTokens: {
                line: ";;",
                block: {
                    open: "#|",
                    close: "|#"
                }
            },
            closeBrackets: {
                brackets: ["(", "[", "{", '"']
            }
        }
    };
    var ug, dg = Object.freeze({
            __proto__: null,
            commonLisp: cg
        }),
        pg = function(e) {
            return new RegExp("^(?:" + e.join("|") + ")$", "i")
        },
        hg = function(e) {
            var t = e.next();
            if ('"' === t) return e.match(/^.*?"/), "string";
            if ("'" === t) return e.match(/^.*?'/), "string";
            if (/[{}\(\),\.;\[\]]/.test(t)) return ug = t, "punctuation";
            if ("/" === t && e.eat("/")) return e.skipToEnd(), "comment";
            if (xg.test(t)) return e.eatWhile(xg), null;
            if (e.eatWhile(/[_\w\d]/), e.eat(":")) return e.eatWhile(/[\w\d_\-]/), "atom";
            var n = e.current();
            return gg.test(n) ? "builtin" : Qg.test(n) ? "def" : $g.test(n) || bg.test(n) ? "keyword" : "variable"
        },
        fg = function(e, t, n) {
            return e.context = {
                prev: e.context,
                indent: e.indent,
                col: n,
                type: t
            }
        },
        mg = function(e) {
            return e.indent = e.context.indent, e.context = e.context.prev
        },
        gg = pg(["abs", "acos", "allShortestPaths", "asin", "atan", "atan2", "avg", "ceil", "coalesce", "collect", "cos", "cot", "count", "degrees", "e", "endnode", "exp", "extract", "filter", "floor", "haversin", "head", "id", "keys", "labels", "last", "left", "length", "log", "log10", "lower", "ltrim", "max", "min", "node", "nodes", "percentileCont", "percentileDisc", "pi", "radians", "rand", "range", "reduce", "rel", "relationship", "relationships", "replace", "reverse", "right", "round", "rtrim", "shortestPath", "sign", "sin", "size", "split", "sqrt", "startnode", "stdev", "stdevp", "str", "substring", "sum", "tail", "tan", "timestamp", "toFloat", "toInt", "toString", "trim", "type", "upper"]),
        Qg = pg(["all", "and", "any", "contains", "exists", "has", "in", "none", "not", "or", "single", "xor"]),
        $g = pg(["as", "asc", "ascending", "assert", "by", "case", "commit", "constraint", "create", "csv", "cypher", "delete", "desc", "descending", "detach", "distinct", "drop", "else", "end", "ends", "explain", "false", "fieldterminator", "foreach", "from", "headers", "in", "index", "is", "join", "limit", "load", "match", "merge", "null", "on", "optional", "order", "periodic", "profile", "remove", "return", "scan", "set", "skip", "start", "starts", "then", "true", "union", "unique", "unwind", "using", "when", "where", "with", "call", "yield"]),
        bg = pg(["access", "active", "assign", "all", "alter", "as", "catalog", "change", "copy", "create", "constraint", "constraints", "current", "database", "databases", "dbms", "default", "deny", "drop", "element", "elements", "exists", "from", "grant", "graph", "graphs", "if", "index", "indexes", "label", "labels", "management", "match", "name", "names", "new", "node", "nodes", "not", "of", "on", "or", "password", "populated", "privileges", "property", "read", "relationship", "relationships", "remove", "replace", "required", "revoke", "role", "roles", "set", "show", "start", "status", "stop", "suspended", "to", "traverse", "type", "types", "user", "users", "with", "write"]),
        xg = /[*+\-<>=&|~%^]/;
    const Pg = {
        startState: function() {
            return {
                tokenize: hg,
                context: null,
                indent: 0,
                col: 0
            }
        },
        token: function(e, t) {
            if (e.sol() && (t.context && null == t.context.align && (t.context.align = !1), t.indent = e.indentation()), e.eatSpace()) return null;
            var n = t.tokenize(e, t);
            if ("comment" !== n && t.context && null == t.context.align && "pattern" !== t.context.type && (t.context.align = !0), "(" === ug) fg(t, ")", e.column());
            else if ("[" === ug) fg(t, "]", e.column());
            else if ("{" === ug) fg(t, "}", e.column());
            else if (/[\]\}\)]/.test(ug)) {
                for (; t.context && "pattern" === t.context.type;) mg(t);
                t.context && ug === t.context.type && mg(t)
            } else "." === ug && t.context && "pattern" === t.context.type ? mg(t) : /atom|string|variable/.test(n) && t.context && (/[\}\]]/.test(t.context.type) ? fg(t, "pattern", e.column()) : "pattern" !== t.context.type || t.context.align || (t.context.align = !0, t.context.col = e.column()));
            return n
        },
        indent: function(e, t, n) {
            var r = t && t.charAt(0),
                i = e.context;
            if (/[\]\}]/.test(r))
                for (; i && "pattern" === i.type;) i = i.prev;
            var a = i && r === i.type;
            return i ? "keywords" === i.type ? null : i.align ? i.col + (a ? 0 : 1) : i.indent + (a ? 0 : n.unit) : 0
        }
    };
    var wg = Object.freeze({
        __proto__: null,
        cypher: Pg
    });

    function kg(e) {
        return new RegExp("^((" + e.join(")|(") + "))\\b")
    }
    var yg = kg(["and", "or", "not", "is"]),
        vg = ["as", "assert", "break", "class", "continue", "def", "del", "elif", "else", "except", "finally", "for", "from", "global", "if", "import", "lambda", "pass", "raise", "return", "try", "while", "with", "yield", "in"],
        Sg = ["abs", "all", "any", "bin", "bool", "bytearray", "callable", "chr", "classmethod", "compile", "complex", "delattr", "dict", "dir", "divmod", "enumerate", "eval", "filter", "float", "format", "frozenset", "getattr", "globals", "hasattr", "hash", "help", "hex", "id", "input", "int", "isinstance", "issubclass", "iter", "len", "list", "locals", "map", "max", "memoryview", "min", "next", "object", "oct", "open", "ord", "pow", "property", "range", "repr", "reversed", "round", "set", "setattr", "slice", "sorted", "staticmethod", "str", "sum", "super", "tuple", "type", "vars", "zip", "__import__", "NotImplemented", "Ellipsis", "__debug__"];

    function _g(e) {
        return e.scopes[e.scopes.length - 1]
    }

    function Xg(e) {
        for (var t = "error", n = e.delimiters || e.singleDelimiters || /^[\(\)\[\]\{\}@,:`=;\.\\]/, r = [e.singleOperators, e.doubleOperators, e.doubleDelimiters, e.tripleDelimiters, e.operators || /^([-+*/%\/&|^]=?|[<>=]+|\/\/=?|\*\*=?|!=|[~!@]|\.\.\.)/], i = 0; i < r.length; i++) r[i] || r.splice(i--, 1);
        var a = e.hangingIndent,
            o = vg,
            s = Sg;
        null != e.extra_keywords && (o = o.concat(e.extra_keywords)), null != e.extra_builtins && (s = s.concat(e.extra_builtins));
        var O = !(e.version && Number(e.version) < 3);
        if (O) {
            var l = e.identifiers || /^[_A-Za-z\u00A1-\uFFFF][_A-Za-z0-9\u00A1-\uFFFF]*/;
            o = o.concat(["nonlocal", "False", "True", "None", "async", "await"]), s = s.concat(["ascii", "bytes", "exec", "print"]);
            var c = new RegExp("^(([rbuf]|(br)|(fr))?('{3}|\"{3}|['\"]))", "i")
        } else {
            l = e.identifiers || /^[_A-Za-z][_A-Za-z0-9]*/;
            o = o.concat(["exec", "print"]), s = s.concat(["apply", "basestring", "buffer", "cmp", "coerce", "execfile", "file", "intern", "long", "raw_input", "reduce", "reload", "unichr", "unicode", "xrange", "False", "True", "None"]);
            c = new RegExp("^(([rubf]|(ur)|(br))?('{3}|\"{3}|['\"]))", "i")
        }
        var u = kg(o),
            d = kg(s);

        function p(e, t) {
            var n = e.sol() && "\\" != t.lastToken;
            if (n && (t.indent = e.indentation()), n && "py" == _g(t).type) {
                var r = _g(t).offset;
                if (e.eatSpace()) {
                    var i = e.indentation();
                    return i > r ? f(e, t) : i < r && m(e, t) && "#" != e.peek() && (t.errorToken = !0), null
                }
                var a = h(e, t);
                return r > 0 && m(e, t) && (a += " error"), a
            }
            return h(e, t)
        }

        function h(i, a, o) {
            if (i.eatSpace()) return null;
            if (!o && i.match(/^#.*/)) return "comment";
            if (i.match(/^[0-9\.]/, !1)) {
                var s = !1;
                if (i.match(/^[\d_]*\.\d+(e[\+\-]?\d+)?/i) && (s = !0), i.match(/^[\d_]+\.\d*/) && (s = !0), i.match(/^\.\d+/) && (s = !0), s) return i.eat(/J/i), "number";
                var O = !1;
                if (i.match(/^0x[0-9a-f_]+/i) && (O = !0), i.match(/^0b[01_]+/i) && (O = !0), i.match(/^0o[0-7_]+/i) && (O = !0), i.match(/^[1-9][\d_]*(e[\+\-]?[\d_]+)?/) && (i.eat(/J/i), O = !0), i.match(/^0(?![\dx])/i) && (O = !0), O) return i.eat(/L/i), "number"
            }
            if (i.match(c)) return -1 !== i.current().toLowerCase().indexOf("f") ? (a.tokenize = function(n, r) {
                for (;
                    "rubf".indexOf(n.charAt(0).toLowerCase()) >= 0;) n = n.substr(1);
                var i = 1 == n.length,
                    a = "string";

                function o(e) {
                    return function(t, n) {
                        var r = h(t, n, !0);
                        return "punctuation" == r && ("{" == t.current() ? n.tokenize = o(e + 1) : "}" == t.current() && (n.tokenize = e > 1 ? o(e - 1) : s)), r
                    }
                }

                function s(s, O) {
                    for (; !s.eol();)
                        if (s.eatWhile(/[^'"\{\}\\]/), s.eat("\\")) {
                            if (s.next(), i && s.eol()) return a
                        } else {
                            if (s.match(n)) return O.tokenize = r, a;
                            if (s.match("{{")) return a;
                            if (s.match("{", !1)) return O.tokenize = o(0), s.current() ? a : O.tokenize(s, O);
                            if (s.match("}}")) return a;
                            if (s.match("}")) return t;
                            s.eat(/['"]/)
                        }
                    if (i) {
                        if (e.singleLineStringErrors) return t;
                        O.tokenize = r
                    }
                    return a
                }
                return s.isString = !0, s
            }(i.current(), a.tokenize), a.tokenize(i, a)) : (a.tokenize = function(n, r) {
                for (;
                    "rubf".indexOf(n.charAt(0).toLowerCase()) >= 0;) n = n.substr(1);
                var i = 1 == n.length,
                    a = "string";

                function o(o, s) {
                    for (; !o.eol();)
                        if (o.eatWhile(/[^'"\\]/), o.eat("\\")) {
                            if (o.next(), i && o.eol()) return a
                        } else {
                            if (o.match(n)) return s.tokenize = r, a;
                            o.eat(/['"]/)
                        }
                    if (i) {
                        if (e.singleLineStringErrors) return t;
                        s.tokenize = r
                    }
                    return a
                }
                return o.isString = !0, o
            }(i.current(), a.tokenize), a.tokenize(i, a));
            for (var p = 0; p < r.length; p++)
                if (i.match(r[p])) return "operator";
            return i.match(n) ? "punctuation" : "." == a.lastToken && i.match(l) ? "property" : i.match(u) || i.match(yg) ? "keyword" : i.match(d) ? "builtin" : i.match(/^(self|cls)\b/) ? "self" : i.match(l) ? "def" == a.lastToken || "class" == a.lastToken ? "def" : "variable" : (i.next(), o ? null : t)
        }

        function f(e, t) {
            for (;
                "py" != _g(t).type;) t.scopes.pop();
            t.scopes.push({
                offset: _g(t).offset + e.indentUnit,
                type: "py",
                align: null
            })
        }

        function m(e, t) {
            for (var n = e.indentation(); t.scopes.length > 1 && _g(t).offset > n;) {
                if ("py" != _g(t).type) return !0;
                t.scopes.pop()
            }
            return _g(t).offset != n
        }

        function g(e, n) {
            e.sol() && (n.beginningOfLine = !0);
            var r = n.tokenize(e, n),
                i = e.current();
            if (n.beginningOfLine && "@" == i) return e.match(l, !1) ? "meta" : O ? "operator" : t;
            if (/\S/.test(i) && (n.beginningOfLine = !1), "variable" != r && "builtin" != r || "meta" != n.lastToken || (r = "meta"), "pass" != i && "return" != i || (n.dedent += 1), "lambda" == i && (n.lambda = !0), ":" != i || n.lambda || "py" != _g(n).type || f(e, n), 1 == i.length && !/string|comment/.test(r)) {
                var o = "[({".indexOf(i);
                if (-1 != o && function(e, t, n) {
                        var r = e.match(/^([\s\[\{\(]|#.*)*$/, !1) ? null : e.column() + 1;
                        t.scopes.push({
                            offset: t.indent + (a || e.indentUnit),
                            type: n,
                            align: r
                        })
                    }(e, n, "])}".slice(o, o + 1)), -1 != (o = "])}".indexOf(i))) {
                    if (_g(n).type != i) return t;
                    n.indent = n.scopes.pop().offset - (a || e.indentUnit)
                }
            }
            return n.dedent > 0 && e.eol() && "py" == _g(n).type && (n.scopes.length > 1 && n.scopes.pop(), n.dedent -= 1), r
        }
        return {
            startState: function() {
                return {
                    tokenize: p,
                    scopes: [{
                        offset: 0,
                        type: "py",
                        align: null
                    }],
                    indent: 0,
                    lastToken: null,
                    lambda: !1,
                    dedent: 0
                }
            },
            token: function(e, n) {
                var r = n.errorToken;
                r && (n.errorToken = !1);
                var i = g(e, n);
                return i && "comment" != i && (n.lastToken = "keyword" == i || "punctuation" == i ? e.current() : i), "punctuation" == i && (i = null), e.eol() && n.lambda && (n.lambda = !1), r ? t : i
            },
            indent: function(e, t, n) {
                if (e.tokenize != p) return e.tokenize.isString ? null : 0;
                var r = _g(e),
                    i = r.type == t.charAt(0);
                return null != r.align ? r.align - (i ? 1 : 0) : r.offset - (i ? a || n.unit : 0)
            },
            languageData: {
                autocomplete: vg.concat(Sg),
                indentOnInput: /^\s*[\}\]\)]$/,
                commentTokens: {
                    line: "#"
                },
                closeBrackets: {
                    brackets: ["(", "[", "{", "'", '"', "'''", '"""']
                }
            }
        }
    }
    const Tg = Xg({}),
        Rg = Xg({
            extra_keywords: (Wg = "by cdef cimport cpdef ctypedef enum except extern gil include nogil property public readonly struct union DEF IF ELIF ELSE", Wg.split(" "))
        });
    var Wg, qg = Object.freeze({
        __proto__: null,
        mkPython: Xg,
        python: Tg,
        cython: Rg
    });

    function Yg(e, t) {
        return new RegExp((t ? "" : "^") + "(?:" + e.join("|") + ")" + (t ? "$" : "\\b"))
    }

    function zg(e, t, n) {
        return n.tokenize.push(e), e(t, n)
    }
    var Zg = /^(?:[-+/%|&^]|\*\*?|[<>]{2})/,
        Eg = /^(?:[=!]~|===|<=>|[<>=!]=?|[|&]{2}|~)/,
        Ig = /^(?:\[\][?=]?)/,
        Ug = /^(?:\.(?:\.{2})?|->|[?:])/,
        Vg = /^[a-z_\u009F-\uFFFF][a-zA-Z0-9_\u009F-\uFFFF]*/,
        jg = /^[A-Z_\u009F-\uFFFF][a-zA-Z0-9_\u009F-\uFFFF]*/,
        Ag = Yg(["abstract", "alias", "as", "asm", "begin", "break", "case", "class", "def", "do", "else", "elsif", "end", "ensure", "enum", "extend", "for", "fun", "if", "include", "instance_sizeof", "lib", "macro", "module", "next", "of", "out", "pointerof", "private", "protected", "rescue", "return", "require", "select", "sizeof", "struct", "super", "then", "type", "typeof", "uninitialized", "union", "unless", "until", "when", "while", "with", "yield", "__DIR__", "__END_LINE__", "__FILE__", "__LINE__"]),
        Cg = Yg(["true", "false", "nil", "self"]),
        Gg = Yg(["def", "fun", "macro", "class", "module", "struct", "lib", "enum", "union", "do", "for"]),
        Lg = Yg(["if", "unless", "case", "while", "until", "begin", "then"]),
        Ng = ["end", "else", "elsif", "rescue", "ensure"],
        Dg = Yg(Ng),
        Mg = ["\\)", "\\}", "\\]"],
        Bg = new RegExp("^(?:" + Mg.join("|") + ")$"),
        Fg = {
            def: tQ,
            fun: tQ,
            macro: function(e, t) {
                if (e.eatSpace()) return null;
                var n;
                if (n = e.match(Vg)) {
                    if ("def" == n) return "keyword";
                    e.eat(/[?!]/)
                }
                return t.tokenize.pop(), "def"
            },
            class: nQ,
            module: nQ,
            struct: nQ,
            lib: nQ,
            enum: nQ,
            union: nQ
        },
        Hg = {
            "[": "]",
            "{": "}",
            "(": ")",
            "<": ">"
        };

    function Jg(e, t) {
        if (e.eatSpace()) return null;
        if ("\\" != t.lastToken && e.match("{%", !1)) return zg(eQ("%", "%"), e, t);
        if ("\\" != t.lastToken && e.match("{{", !1)) return zg(eQ("{", "}"), e, t);
        if ("#" == e.peek()) return e.skipToEnd(), "comment";
        var n;
        if (e.match(Vg)) return e.eat(/[?!]/), n = e.current(), e.eat(":") ? "atom" : "." == t.lastToken ? "property" : Ag.test(n) ? (Gg.test(n) ? "fun" == n && t.blocks.indexOf("lib") >= 0 || "def" == n && "abstract" == t.lastToken || (t.blocks.push(n), t.currentIndent += 1) : "operator" != t.lastStyle && t.lastStyle || !Lg.test(n) ? "end" == n && (t.blocks.pop(), t.currentIndent -= 1) : (t.blocks.push(n), t.currentIndent += 1), Fg.hasOwnProperty(n) && t.tokenize.push(Fg[n]), "keyword") : Cg.test(n) ? "atom" : "variable";
        if (e.eat("@")) return "[" == e.peek() ? zg(Kg("[", "]", "meta"), e, t) : (e.eat("@"), e.match(Vg) || e.match(jg), "propertyName");
        if (e.match(jg)) return "tag";
        if (e.eat(":")) return e.eat('"') ? zg(rQ('"', "atom", !1), e, t) : e.match(Vg) || e.match(jg) || e.match(Zg) || e.match(Eg) || e.match(Ig) ? "atom" : (e.eat(":"), "operator");
        if (e.eat('"')) return zg(rQ('"', "string", !0), e, t);
        if ("%" == e.peek()) {
            var r, i = "string",
                a = !0;
            if (e.match("%r")) i = "string.special", r = e.next();
            else if (e.match("%w")) a = !1, r = e.next();
            else if (e.match("%q")) a = !1, r = e.next();
            else {
                if (!(r = e.match(/^%([^\w\s=])/))) return e.match(/^%[a-zA-Z0-9_\u009F-\uFFFF]*/) ? "meta" : "operator";
                r = r[1]
            }
            return Hg.hasOwnProperty(r) && (r = Hg[r]), zg(rQ(r, i, a), e, t)
        }
        return (n = e.match(/^<<-('?)([A-Z]\w*)\1/)) ? zg(function(e, t) {
            return function(n, r) {
                if (n.sol() && (n.eatSpace(), n.match(e))) return r.tokenize.pop(), "string";
                for (var i = !1; n.peek();)
                    if (i) n.next(), i = !1;
                    else {
                        if (n.match("{%", !1)) return r.tokenize.push(eQ("%", "%")), "string";
                        if (n.match("{{", !1)) return r.tokenize.push(eQ("{", "}")), "string";
                        if (t && n.match("#{", !1)) return r.tokenize.push(Kg("#{", "}", "meta")), "string";
                        i = t && "\\" == n.next()
                    }
                return "string"
            }
        }(n[2], !n[1]), e, t) : e.eat("'") ? (e.match(/^(?:[^']|\\(?:[befnrtv0'"]|[0-7]{3}|u(?:[0-9a-fA-F]{4}|\{[0-9a-fA-F]{1,6}\})))/), e.eat("'"), "atom") : e.eat("0") ? (e.eat("x") ? e.match(/^[0-9a-fA-F]+/) : e.eat("o") ? e.match(/^[0-7]+/) : e.eat("b") && e.match(/^[01]+/), "number") : e.eat(/^\d/) ? (e.match(/^\d*(?:\.\d+)?(?:[eE][+-]?\d+)?/), "number") : e.match(Zg) ? (e.eat("="), "operator") : e.match(Eg) || e.match(Ug) ? "operator" : (n = e.match(/[({[]/, !1)) ? zg(Kg(n = n[0], Hg[n], null), e, t) : e.eat("\\") ? (e.next(), "meta") : (e.next(), null)
    }

    function Kg(e, t, n, r) {
        return function(i, a) {
            if (!r && i.match(e)) return a.tokenize[a.tokenize.length - 1] = Kg(e, t, n, !0), a.currentIndent += 1, n;
            var o = Jg(i, a);
            return i.current() === t && (a.tokenize.pop(), a.currentIndent -= 1, o = n), o
        }
    }

    function eQ(e, t, n) {
        return function(r, i) {
            return !n && r.match("{" + e) ? (i.currentIndent += 1, i.tokenize[i.tokenize.length - 1] = eQ(e, t, !0), "meta") : r.match(t + "}") ? (i.currentIndent -= 1, i.tokenize.pop(), "meta") : Jg(r, i)
        }
    }

    function tQ(e, t) {
        return e.eatSpace() ? null : (e.match(Vg) ? e.eat(/[!?]/) : e.match(Zg) || e.match(Eg) || e.match(Ig), t.tokenize.pop(), "def")
    }

    function nQ(e, t) {
        return e.eatSpace() ? null : (e.match(jg), t.tokenize.pop(), "def")
    }

    function rQ(e, t, n) {
        return function(r, i) {
            for (var a = !1; r.peek();)
                if (a) r.next(), a = !1;
                else {
                    if (r.match("{%", !1)) return i.tokenize.push(eQ("%", "%")), t;
                    if (r.match("{{", !1)) return i.tokenize.push(eQ("{", "}")), t;
                    if (n && r.match("#{", !1)) return i.tokenize.push(Kg("#{", "}", "meta")), t;
                    var o = r.next();
                    if (o == e) return i.tokenize.pop(), t;
                    a = n && "\\" == o
                }
            return t
        }
    }
    const iQ = {
        startState: function() {
            return {
                tokenize: [Jg],
                currentIndent: 0,
                lastToken: null,
                lastStyle: null,
                blocks: []
            }
        },
        token: function(e, t) {
            var n = t.tokenize[t.tokenize.length - 1](e, t),
                r = e.current();
            return n && "comment" != n && (t.lastToken = r, t.lastStyle = n), n
        },
        indent: function(e, t, n) {
            return t = t.replace(/^\s*(?:\{%)?\s*|\s*(?:%\})?\s*$/g, ""), Dg.test(t) || Bg.test(t) ? n.unit * (e.currentIndent - 1) : n.unit * e.currentIndent
        },
        languageData: {
            indentOnInput: Yg(Mg.concat(Ng), !0),
            commentTokens: {
                line: "#"
            }
        }
    };
    var aQ = Object.freeze({
        __proto__: null,
        crystal: iQ
    });

    function oQ(e) {
        for (var t = {}, n = e.split(" "), r = 0; r < n.length; ++r) t[n[r]] = !0;
        return t
    }
    const sQ = {
        keywords: oQ("abstract alias align asm assert auto break case cast cdouble cent cfloat const continue debug default delegate delete deprecated export extern final finally function goto immutable import inout invariant is lazy macro module new nothrow override package pragma private protected public pure ref return shared short static super synchronized template this throw typedef typeid typeof volatile __FILE__ __LINE__ __gshared __traits __vector __parameters " + (uQ = "body catch class do else enum for foreach foreach_reverse if in interface mixin out scope struct switch try union unittest version while with")),
        blockKeywords: oQ(uQ),
        builtin: oQ("bool byte char creal dchar double float idouble ifloat int ireal long real short ubyte ucent uint ulong ushort wchar wstring void size_t sizediff_t"),
        atoms: oQ("exit failure success true false null"),
        hooks: {
            "@": function(e, t) {
                return e.eatWhile(/[\w\$_]/), "meta"
            }
        }
    };
    var OQ, lQ = sQ.keywords,
        cQ = sQ.builtin,
        uQ = sQ.blockKeywords,
        dQ = sQ.atoms,
        pQ = sQ.hooks,
        hQ = sQ.multiLineStrings,
        fQ = /[+\-*&%=<>!?|\/]/;

    function mQ(e, t) {
        var n = e.next();
        if (pQ[n]) {
            var r = pQ[n](e, t);
            if (!1 !== r) return r
        }
        if ('"' == n || "'" == n || "`" == n) return t.tokenize = function(e) {
            return function(t, n) {
                for (var r, i = !1, a = !1; null != (r = t.next());) {
                    if (r == e && !i) {
                        a = !0;
                        break
                    }
                    i = !i && "\\" == r
                }
                return (a || !i && !hQ) && (n.tokenize = null), "string"
            }
        }(n), t.tokenize(e, t);
        if (/[\[\]{}\(\),;\:\.]/.test(n)) return OQ = n, null;
        if (/\d/.test(n)) return e.eatWhile(/[\w\.]/), "number";
        if ("/" == n) {
            if (e.eat("+")) return t.tokenize = QQ, QQ(e, t);
            if (e.eat("*")) return t.tokenize = gQ, gQ(e, t);
            if (e.eat("/")) return e.skipToEnd(), "comment"
        }
        if (fQ.test(n)) return e.eatWhile(fQ), "operator";
        e.eatWhile(/[\w\$_\xa1-\uffff]/);
        var i = e.current();
        return lQ.propertyIsEnumerable(i) ? (uQ.propertyIsEnumerable(i) && (OQ = "newstatement"), "keyword") : cQ.propertyIsEnumerable(i) ? (uQ.propertyIsEnumerable(i) && (OQ = "newstatement"), "builtin") : dQ.propertyIsEnumerable(i) ? "atom" : "variable"
    }

    function gQ(e, t) {
        for (var n, r = !1; n = e.next();) {
            if ("/" == n && r) {
                t.tokenize = null;
                break
            }
            r = "*" == n
        }
        return "comment"
    }

    function QQ(e, t) {
        for (var n, r = !1; n = e.next();) {
            if ("/" == n && r) {
                t.tokenize = null;
                break
            }
            r = "+" == n
        }
        return "comment"
    }

    function $Q(e, t, n, r, i) {
        this.indented = e, this.column = t, this.type = n, this.align = r, this.prev = i
    }

    function bQ(e, t, n) {
        var r = e.indented;
        return e.context && "statement" == e.context.type && (r = e.context.indented), e.context = new $Q(r, t, n, null, e.context)
    }

    function xQ(e) {
        var t = e.context.type;
        return ")" != t && "]" != t && "}" != t || (e.indented = e.context.indented), e.context = e.context.prev
    }
    const PQ = {
        startState: function(e) {
            return {
                tokenize: null,
                context: new $Q(-e, 0, "top", !1),
                indented: 0,
                startOfLine: !0
            }
        },
        token: function(e, t) {
            var n = t.context;
            if (e.sol() && (null == n.align && (n.align = !1), t.indented = e.indentation(), t.startOfLine = !0), e.eatSpace()) return null;
            OQ = null;
            var r = (t.tokenize || mQ)(e, t);
            if ("comment" == r || "meta" == r) return r;
            if (null == n.align && (n.align = !0), ";" != OQ && ":" != OQ && "," != OQ || "statement" != n.type)
                if ("{" == OQ) bQ(t, e.column(), "}");
                else if ("[" == OQ) bQ(t, e.column(), "]");
            else if ("(" == OQ) bQ(t, e.column(), ")");
            else if ("}" == OQ) {
                for (;
                    "statement" == n.type;) n = xQ(t);
                for ("}" == n.type && (n = xQ(t));
                    "statement" == n.type;) n = xQ(t)
            } else OQ == n.type ? xQ(t) : (("}" == n.type || "top" == n.type) && ";" != OQ || "statement" == n.type && "newstatement" == OQ) && bQ(t, e.column(), "statement");
            else xQ(t);
            return t.startOfLine = !1, r
        },
        indent: function(e, t, n) {
            if (e.tokenize != mQ && null != e.tokenize) return null;
            var r = e.context,
                i = t && t.charAt(0);
            "statement" == r.type && "}" == i && (r = r.prev);
            var a = i == r.type;
            return "statement" == r.type ? r.indented + ("{" == i ? 0 : n.unit) : r.align ? r.column + (a ? 0 : 1) : r.indented + (a ? 0 : n.unit)
        },
        languageData: {
            indentOnInput: /^\s*[{}]$/,
            commentTokens: {
                line: "//",
                block: {
                    open: "/*",
                    close: "*/"
                }
            }
        }
    };
    var wQ = Object.freeze({
            __proto__: null,
            d: PQ
        }),
        kQ = {
            "+": "inserted",
            "-": "deleted",
            "@": "meta"
        };
    const yQ = {
        token: function(e) {
            var t = e.string.search(/[\t ]+?$/);
            if (!e.sol() || 0 === t) return e.skipToEnd(), ("error " + (kQ[e.string.charAt(0)] || "")).replace(/ $/, "");
            var n = kQ[e.peek()] || e.skipToEnd();
            return -1 === t ? e.skipToEnd() : e.pos = t, n
        }
    };
    var vQ = Object.freeze({
        __proto__: null,
        diff: yQ
    });

    function SQ(e) {
        _Q(e, "start");
        var t = {},
            n = e.languageData || {},
            r = !1;
        for (var i in e)
            if (i != n && e.hasOwnProperty(i))
                for (var a = t[i] = [], o = e[i], s = 0; s < o.length; s++) {
                    var O = o[s];
                    a.push(new XQ(O, e)), (O.indent || O.dedent) && (r = !0)
                }
        return {
            startState: function() {
                return {
                    state: "start",
                    pending: null,
                    indent: r ? [] : null
                }
            },
            copyState: function(e) {
                var t = {
                    state: e.state,
                    pending: e.pending,
                    indent: e.indent && e.indent.slice(0)
                };
                return e.stack && (t.stack = e.stack.slice(0)), t
            },
            token: TQ(t),
            indent: RQ(t, n),
            languageData: n
        }
    }

    function _Q(e, t) {
        if (!e.hasOwnProperty(t)) throw new Error("Undefined state " + t + " in simple mode")
    }

    function XQ(e, t) {
        (e.next || e.push) && _Q(t, e.next || e.push), this.regex = function(e, t) {
            if (!e) return /(?:)/;
            var n = "";
            return e instanceof RegExp ? (e.ignoreCase && (n = "i"), e = e.source) : e = String(e), new RegExp((!1 === t ? "" : "^") + "(?:" + e + ")", n)
        }(e.regex), this.token = function(e) {
            if (!e) return null;
            if (e.apply) return e;
            if ("string" == typeof e) return e.replace(/\./g, " ");
            for (var t = [], n = 0; n < e.length; n++) t.push(e[n] && e[n].replace(/\./g, " "));
            return t
        }(e.token), this.data = e
    }

    function TQ(e) {
        return function(t, n) {
            if (n.pending) {
                var r = n.pending.shift();
                return 0 == n.pending.length && (n.pending = null), t.pos += r.text.length, r.token
            }
            for (var i = e[n.state], a = 0; a < i.length; a++) {
                var o = i[a],
                    s = (!o.data.sol || t.sol()) && t.match(o.regex);
                if (s) {
                    o.data.next ? n.state = o.data.next : o.data.push ? ((n.stack || (n.stack = [])).push(n.state), n.state = o.data.push) : o.data.pop && n.stack && n.stack.length && (n.state = n.stack.pop()), o.data.indent && n.indent.push(t.indentation() + t.indentUnit), o.data.dedent && n.indent.pop();
                    var O = o.token;
                    if (O && O.apply && (O = O(s)), s.length > 2 && o.token && "string" != typeof o.token) {
                        n.pending = [];
                        for (var l = 2; l < s.length; l++) s[l] && n.pending.push({
                            text: s[l],
                            token: o.token[l - 1]
                        });
                        return t.backUp(s[0].length - (s[1] ? s[1].length : 0)), O[0]
                    }
                    return O && O.join ? O[0] : O
                }
            }
            return t.next(), null
        }
    }

    function RQ(e, t) {
        return function(n, r) {
            if (null == n.indent || t.dontIndentStates && t.doneIndentState.indexOf(n.state) > -1) return null;
            var i = n.indent.length - 1,
                a = e[n.state];
            e: for (;;) {
                for (var o = 0; o < a.length; o++) {
                    var s = a[o];
                    if (s.data.dedent && !1 !== s.data.dedentIfLineStart) {
                        var O = s.regex.exec(r);
                        if (O && O[0]) {
                            i--, (s.next || s.push) && (a = e[s.next || s.push]), r = r.slice(O[0].length);
                            continue e
                        }
                    }
                }
                break
            }
            return i < 0 ? 0 : n.indent[i]
        }
    }
    var WQ = "from",
        qQ = new RegExp("^(\\s*)\\b(" + WQ + ")\\b", "i"),
        YQ = ["run", "cmd", "entrypoint", "shell"],
        zQ = new RegExp("^(\\s*)(" + YQ.join("|") + ")(\\s+\\[)", "i"),
        ZQ = "expose",
        EQ = new RegExp("^(\\s*)(" + ZQ + ")(\\s+)", "i"),
        IQ = "(" + [WQ, ZQ].concat(YQ).concat(["arg", "from", "maintainer", "label", "env", "add", "copy", "volume", "user", "workdir", "onbuild", "stopsignal", "healthcheck", "shell"]).join("|") + ")";
    const UQ = SQ({
        start: [{
            regex: /^\s*#.*$/,
            sol: !0,
            token: "comment"
        }, {
            regex: qQ,
            token: [null, "keyword"],
            sol: !0,
            next: "from"
        }, {
            regex: new RegExp("^(\\s*)" + IQ + "(\\s*)(#.*)?$", "i"),
            token: [null, "keyword", null, "error"],
            sol: !0
        }, {
            regex: zQ,
            token: [null, "keyword", null],
            sol: !0,
            next: "array"
        }, {
            regex: EQ,
            token: [null, "keyword", null],
            sol: !0,
            next: "expose"
        }, {
            regex: new RegExp("^(\\s*)" + IQ + "(\\s+)", "i"),
            token: [null, "keyword", null],
            sol: !0,
            next: "arguments"
        }, {
            regex: /./,
            token: null
        }],
        from: [{
            regex: /\s*$/,
            token: null,
            next: "start"
        }, {
            regex: /(\s*)(#.*)$/,
            token: [null, "error"],
            next: "start"
        }, {
            regex: /(\s*\S+\s+)(as)/i,
            token: [null, "keyword"],
            next: "start"
        }, {
            token: null,
            next: "start"
        }],
        single: [{
            regex: /(?:[^\\']|\\.)/,
            token: "string"
        }, {
            regex: /'/,
            token: "string",
            pop: !0
        }],
        double: [{
            regex: /(?:[^\\"]|\\.)/,
            token: "string"
        }, {
            regex: /"/,
            token: "string",
            pop: !0
        }],
        array: [{
            regex: /\]/,
            token: null,
            next: "start"
        }, {
            regex: /"(?:[^\\"]|\\.)*"?/,
            token: "string"
        }],
        expose: [{
            regex: /\d+$/,
            token: "number",
            next: "start"
        }, {
            regex: /[^\d]+$/,
            token: null,
            next: "start"
        }, {
            regex: /\d+/,
            token: "number"
        }, {
            regex: /[^\d]+/,
            token: null
        }, {
            token: null,
            next: "start"
        }],
        arguments: [{
            regex: /^\s*#.*$/,
            sol: !0,
            token: "comment"
        }, {
            regex: /"(?:[^\\"]|\\.)*"?$/,
            token: "string",
            next: "start"
        }, {
            regex: /"/,
            token: "string",
            push: "double"
        }, {
            regex: /'(?:[^\\']|\\.)*'?$/,
            token: "string",
            next: "start"
        }, {
            regex: /'/,
            token: "string",
            push: "single"
        }, {
            regex: /[^#"']+[\\`]$/,
            token: null
        }, {
            regex: /[^#"']+$/,
            token: null,
            next: "start"
        }, {
            regex: /[^#"']+/,
            token: null
        }, {
            token: null,
            next: "start"
        }],
        languageData: {
            commentTokens: {
                line: "#"
            }
        }
    });
    var VQ, jQ = Object.freeze({
        __proto__: null,
        dockerFile: UQ
    });

    function AQ(e, t) {
        return VQ = t, e
    }

    function CQ(e, t) {
        var n = e.next();
        if ("<" != n || !e.eat("!")) {
            if ("<" == n && e.eat("?")) return t.tokenize = function(e, t) {
                return function(n, r) {
                    for (; !n.eol();) {
                        if (n.match(t)) {
                            r.tokenize = CQ;
                            break
                        }
                        n.next()
                    }
                    return e
                }
            }("meta", "?>"), AQ("meta", n);
            if ("#" == n && e.eatWhile(/[\w]/)) return AQ("atom", "tag");
            if ("|" == n) return AQ("keyword", "separator");
            if (n.match(/[\(\)\[\]\-\.,\+\?>]/)) return AQ(null, n);
            if (n.match(/[\[\]]/)) return AQ("rule", n);
            if ('"' == n || "'" == n) return t.tokenize = function(e) {
                return function(t, n) {
                    for (var r, i = !1; null != (r = t.next());) {
                        if (r == e && !i) {
                            n.tokenize = CQ;
                            break
                        }
                        i = !i && "\\" == r
                    }
                    return AQ("string", "tag")
                }
            }(n), t.tokenize(e, t);
            if (e.eatWhile(/[a-zA-Z\?\+\d]/)) {
                var r = e.current();
                return null !== r.substr(r.length - 1, r.length).match(/\?|\+/) && e.backUp(1), AQ("tag", "tag")
            }
            return "%" == n || "*" == n ? AQ("number", "number") : (e.eatWhile(/[\w\\\-_%.{,]/), AQ(null, null))
        }
        return e.eatWhile(/[\-]/) ? (t.tokenize = GQ, GQ(e, t)) : e.eatWhile(/[\w]/) ? AQ("keyword", "doindent") : void 0
    }

    function GQ(e, t) {
        for (var n, r = 0; null != (n = e.next());) {
            if (r >= 2 && ">" == n) {
                t.tokenize = CQ;
                break
            }
            r = "-" == n ? r + 1 : 0
        }
        return AQ("comment", "comment")
    }
    const LQ = {
        startState: function() {
            return {
                tokenize: CQ,
                baseIndent: 0,
                stack: []
            }
        },
        token: function(e, t) {
            if (e.eatSpace()) return null;
            var n = t.tokenize(e, t),
                r = t.stack[t.stack.length - 1];
            return "[" == e.current() || "doindent" === VQ || "[" == VQ ? t.stack.push("rule") : "endtag" === VQ ? t.stack[t.stack.length - 1] = "endtag" : "]" == e.current() || "]" == VQ || ">" == VQ && "rule" == r ? t.stack.pop() : "[" == VQ && t.stack.push("["), n
        },
        indent: function(e, t, n) {
            var r = e.stack.length;
            return "]" === t.charAt(0) ? r-- : ">" === t.substr(t.length - 1, t.length) && ("<" === t.substr(0, 1) || "doindent" == VQ && t.length > 1 || ("doindent" == VQ ? r-- : ">" == VQ && t.length > 1 || "tag" == VQ && ">" !== t || ("tag" == VQ && "rule" == e.stack[e.stack.length - 1] ? r-- : "tag" == VQ ? r++ : ">" === t && "rule" == e.stack[e.stack.length - 1] && ">" === VQ ? r-- : ">" === t && "rule" == e.stack[e.stack.length - 1] || ("<" !== t.substr(0, 1) && ">" === t.substr(0, 1) ? r -= 1 : ">" === t || (r -= 1)))), null != VQ && "]" != VQ || r--), e.baseIndent + r * n.unit
        },
        languageData: {
            indentOnInput: /^\s*[\]>]$/
        }
    };
    var NQ = Object.freeze({
        __proto__: null,
        dtd: LQ
    });

    function DQ(e, t) {
        for (var n = 0; n < e.length; n++) t(e[n], n)
    }

    function MQ(e, t) {
        for (var n = 0; n < e.length; n++)
            if (t(e[n], n)) return !0;
        return !1
    }
    var BQ = {
        unnamedDefinition: ["interface"],
        namedDefinition: ["module", "library", "macro", "C-struct", "C-union", "C-function", "C-callable-wrapper"],
        typeParameterizedDefinition: ["class", "C-subtype", "C-mapped-subtype"],
        otherParameterizedDefinition: ["method", "function", "C-variable", "C-address"],
        constantSimpleDefinition: ["constant"],
        variableSimpleDefinition: ["variable"],
        otherSimpleDefinition: ["generic", "domain", "C-pointer-type", "table"],
        statement: ["if", "block", "begin", "method", "case", "for", "select", "when", "unless", "until", "while", "iterate", "profiling", "dynamic-bind"],
        separator: ["finally", "exception", "cleanup", "else", "elseif", "afterwards"],
        other: ["above", "below", "by", "from", "handler", "in", "instance", "let", "local", "otherwise", "slot", "subclass", "then", "to", "keyed-by", "virtual"],
        signalingCalls: ["signal", "error", "cerror", "break", "check-type", "abort"]
    };
    BQ.otherDefinition = BQ.unnamedDefinition.concat(BQ.namedDefinition).concat(BQ.otherParameterizedDefinition), BQ.definition = BQ.typeParameterizedDefinition.concat(BQ.otherDefinition), BQ.parameterizedDefinition = BQ.typeParameterizedDefinition.concat(BQ.otherParameterizedDefinition), BQ.simpleDefinition = BQ.constantSimpleDefinition.concat(BQ.variableSimpleDefinition).concat(BQ.otherSimpleDefinition), BQ.keyword = BQ.statement.concat(BQ.separator).concat(BQ.other);
    var FQ = "[-_a-zA-Z?!*@<>$%]+",
        HQ = new RegExp("^" + FQ),
        JQ = {
            symbolKeyword: FQ + ":",
            symbolClass: "<" + FQ + ">",
            symbolGlobal: "\\*" + FQ + "\\*",
            symbolConstant: "\\$" + FQ
        },
        KQ = {
            symbolKeyword: "atom",
            symbolClass: "tag",
            symbolGlobal: "variableName.standard",
            symbolConstant: "variableName.constant"
        };
    for (var e$ in JQ) JQ.hasOwnProperty(e$) && (JQ[e$] = new RegExp("^" + JQ[e$]));
    JQ.keyword = [/^with(?:out)?-[-_a-zA-Z?!*@<>$%]+/];
    var t$ = {
            keyword: "keyword",
            definition: "def",
            simpleDefinition: "def",
            signalingCalls: "builtin"
        },
        n$ = {},
        r$ = {};

    function i$(e, t, n) {
        return t.tokenize = n, n(e, t)
    }

    function a$(e, t) {
        var n = e.peek();
        if ("'" == n || '"' == n) return e.next(), i$(e, t, s$(n, "string"));
        if ("/" == n) {
            if (e.next(), e.eat("*")) return i$(e, t, o$);
            if (e.eat("/")) return e.skipToEnd(), "comment";
            e.backUp(1)
        } else if (/[+\-\d\.]/.test(n)) {
            if (e.match(/^[+-]?[0-9]*\.[0-9]*([esdx][+-]?[0-9]+)?/i) || e.match(/^[+-]?[0-9]+([esdx][+-]?[0-9]+)/i) || e.match(/^[+-]?\d+/)) return "number"
        } else {
            if ("#" == n) return e.next(), '"' == (n = e.peek()) ? (e.next(), i$(e, t, s$('"', "string"))) : "b" == n ? (e.next(), e.eatWhile(/[01]/), "number") : "x" == n ? (e.next(), e.eatWhile(/[\da-f]/i), "number") : "o" == n ? (e.next(), e.eatWhile(/[0-7]/), "number") : "#" == n ? (e.next(), "punctuation") : "[" == n || "(" == n ? (e.next(), "bracket") : e.match(/f|t|all-keys|include|key|next|rest/i) ? "atom" : (e.eatWhile(/[-a-zA-Z]/), "error");
            if ("~" == n) return e.next(), "=" == (n = e.peek()) ? (e.next(), "=" == (n = e.peek()) ? (e.next(), "operator") : "operator") : "operator";
            if (":" == n) {
                if (e.next(), "=" == (n = e.peek())) return e.next(), "operator";
                if (":" == n) return e.next(), "punctuation"
            } else {
                if (-1 != "[](){}".indexOf(n)) return e.next(), "bracket";
                if (-1 != ".,".indexOf(n)) return e.next(), "punctuation";
                if (e.match("end")) return "keyword"
            }
        }
        for (var r in JQ)
            if (JQ.hasOwnProperty(r)) {
                var i = JQ[r];
                if (i instanceof Array && MQ(i, (function(t) {
                        return e.match(t)
                    })) || e.match(i)) return KQ[r]
            }
        return /[+\-*\/^=<>&|]/.test(n) ? (e.next(), "operator") : e.match("define") ? "def" : (e.eatWhile(/[\w\-]/), n$.hasOwnProperty(e.current()) ? r$[e.current()] : e.current().match(HQ) ? "variable" : (e.next(), "variableName.standard"))
    }

    function o$(e, t) {
        for (var n, r = !1, i = !1, a = 0; n = e.next();) {
            if ("/" == n && r) {
                if (!(a > 0)) {
                    t.tokenize = a$;
                    break
                }
                a--
            } else "*" == n && i && a++;
            r = "*" == n, i = "/" == n
        }
        return "comment"
    }

    function s$(e, t) {
        return function(n, r) {
            for (var i, a = !1, o = !1; null != (i = n.next());) {
                if (i == e && !a) {
                    o = !0;
                    break
                }
                a = !a && "\\" == i
            }
            return !o && a || (r.tokenize = a$), t
        }
    }
    DQ(["keyword", "definition", "simpleDefinition", "signalingCalls"], (function(e) {
        DQ(BQ[e], (function(t) {
            n$[t] = e, r$[t] = t$[e]
        }))
    }));
    const O$ = {
        startState: function() {
            return {
                tokenize: a$,
                currentIndent: 0
            }
        },
        token: function(e, t) {
            return e.eatSpace() ? null : t.tokenize(e, t)
        },
        languageData: {
            commentTokens: {
                block: {
                    open: "/*",
                    close: "*/"
                }
            }
        }
    };
    var l$ = Object.freeze({
            __proto__: null,
            dylan: O$
        }),
        c$ = 0,
        u$ = 1,
        d$ = 0,
        p$ = 1,
        h$ = 2;
    const f$ = {
        startState: function() {
            return {
                stringType: null,
                commentType: null,
                braced: 0,
                lhs: !0,
                localState: null,
                stack: [],
                inDefinition: !1
            }
        },
        token: function(e, t) {
            if (e) {
                switch (0 === t.stack.length && ('"' == e.peek() || "'" == e.peek() ? (t.stringType = e.peek(), e.next(), t.stack.unshift(p$)) : e.match("/*") ? (t.stack.unshift(d$), t.commentType = c$) : e.match("(*") && (t.stack.unshift(d$), t.commentType = u$)), t.stack[0]) {
                    case p$:
                        for (; t.stack[0] === p$ && !e.eol();) e.peek() === t.stringType ? (e.next(), t.stack.shift()) : "\\" === e.peek() ? (e.next(), e.next()) : e.match(/^.[^\\\"\']*/);
                        return t.lhs ? "property" : "string";
                    case d$:
                        for (; t.stack[0] === d$ && !e.eol();) t.commentType === c$ && e.match("*/") || t.commentType === u$ && e.match("*)") ? (t.stack.shift(), t.commentType = null) : e.match(/^.[^\*]*/);
                        return "comment";
                    case h$:
                        for (; t.stack[0] === h$ && !e.eol();) e.match(/^[^\]\\]+/) || e.match(".") || t.stack.shift();
                        return "operator"
                }
                var n = e.peek();
                switch (n) {
                    case "[":
                        return e.next(), t.stack.unshift(h$), "bracket";
                    case ":":
                    case "|":
                    case ";":
                        return e.next(), "operator";
                    case "%":
                        if (e.match("%%")) return "header";
                        if (e.match(/[%][A-Za-z]+/)) return "keyword";
                        if (e.match(/[%][}]/)) return "bracket";
                        break;
                    case "/":
                        if (e.match(/[\/][A-Za-z]+/)) return "keyword";
                    case "\\":
                        if (e.match(/[\][a-z]+/)) return "string.special";
                    case ".":
                        if (e.match(".")) return "atom";
                    case "*":
                    case "-":
                    case "+":
                    case "^":
                        if (e.match(n)) return "atom";
                    case "$":
                        if (e.match("$$")) return "builtin";
                        if (e.match(/[$][0-9]+/)) return "variableName.special";
                    case "<":
                        if (e.match(/<<[a-zA-Z_]+>>/)) return "builtin"
                }
                return e.match("//") ? (e.skipToEnd(), "comment") : e.match("return") ? "operator" : e.match(/^[a-zA-Z_][a-zA-Z0-9_]*/) ? e.match(/(?=[\(.])/) ? "variable" : e.match(/(?=[\s\n]*[:=])/) ? "def" : "variableName.special" : -1 != ["[", "]", "(", ")"].indexOf(e.peek()) ? (e.next(), "bracket") : (e.eatSpace() || e.next(), null)
            }
        }
    };
    var m$ = Object.freeze({
        __proto__: null,
        ebnf: f$
    });

    function g$(e) {
        for (var t = {}, n = e.split(" "), r = 0; r < n.length; ++r) t[n[r]] = !0;
        return t
    }
    var Q$, $$ = g$("abs acos allnodes ascii asin asstring atan atan2 ave case choose choosen choosesets clustersize combine correlation cos cosh count covariance cron dataset dedup define denormalize distribute distributed distribution ebcdic enth error evaluate event eventextra eventname exists exp failcode failmessage fetch fromunicode getisvalid global graph group hash hash32 hash64 hashcrc hashmd5 having if index intformat isvalid iterate join keyunicode length library limit ln local log loop map matched matchlength matchposition matchtext matchunicode max merge mergejoin min nolocal nonempty normalize parse pipe power preload process project pull random range rank ranked realformat recordof regexfind regexreplace regroup rejected rollup round roundup row rowdiff sample set sin sinh sizeof soapcall sort sorted sqrt stepped stored sum table tan tanh thisnode topn tounicode transfer trim truncate typeof ungroup unicodeorder variance which workunit xmldecode xmlencode xmltext xmlunicode"),
        b$ = g$("apply assert build buildindex evaluate fail keydiff keypatch loadxml nothor notify output parallel sequential soapcall wait"),
        x$ = g$("__compressed__ all and any as atmost before beginc++ best between case const counter csv descend encrypt end endc++ endmacro except exclusive expire export extend false few first flat from full function group header heading hole ifblock import in interface joined keep keyed last left limit load local locale lookup macro many maxcount maxlength min skew module named nocase noroot noscan nosort not of only opt or outer overwrite packed partition penalty physicallength pipe quote record relationship repeat return right scan self separator service shared skew skip sql store terminator thor threshold token transform trim true type unicodeorder unsorted validate virtual whole wild within xml xpath"),
        P$ = g$("ascii big_endian boolean data decimal ebcdic integer pattern qstring real record rule set of string token udecimal unicode unsigned varstring varunicode"),
        w$ = g$("checkpoint deprecated failcode failmessage failure global independent onwarning persist priority recovery stored success wait when"),
        k$ = g$("catch class do else finally for if switch try while"),
        y$ = g$("true false null"),
        v$ = {
            "#": function(e, t) {
                return !!t.startOfLine && (e.skipToEnd(), "meta")
            }
        },
        S$ = /[+\-*&%=<>!?|\/]/;

    function _$(e, t) {
        var n = e.next();
        if (v$[n]) {
            var r = v$[n](e, t);
            if (!1 !== r) return r
        }
        if ('"' == n || "'" == n) return t.tokenize = function(e) {
            return function(t, n) {
                for (var r, i = !1, a = !1; null != (r = t.next());) {
                    if (r == e && !i) {
                        a = !0;
                        break
                    }
                    i = !i && "\\" == r
                }
                return !a && i || (n.tokenize = _$), "string"
            }
        }(n), t.tokenize(e, t);
        if (/[\[\]{}\(\),;\:\.]/.test(n)) return Q$ = n, null;
        if (/\d/.test(n)) return e.eatWhile(/[\w\.]/), "number";
        if ("/" == n) {
            if (e.eat("*")) return t.tokenize = X$, X$(e, t);
            if (e.eat("/")) return e.skipToEnd(), "comment"
        }
        if (S$.test(n)) return e.eatWhile(S$), "operator";
        e.eatWhile(/[\w\$_]/);
        var i = e.current().toLowerCase();
        if ($$.propertyIsEnumerable(i)) return k$.propertyIsEnumerable(i) && (Q$ = "newstatement"), "keyword";
        if (b$.propertyIsEnumerable(i)) return k$.propertyIsEnumerable(i) && (Q$ = "newstatement"), "variable";
        if (x$.propertyIsEnumerable(i)) return k$.propertyIsEnumerable(i) && (Q$ = "newstatement"), "modifier";
        if (P$.propertyIsEnumerable(i)) return k$.propertyIsEnumerable(i) && (Q$ = "newstatement"), "type";
        if (w$.propertyIsEnumerable(i)) return k$.propertyIsEnumerable(i) && (Q$ = "newstatement"), "builtin";
        for (var a = i.length - 1; a >= 0 && (!isNaN(i[a]) || "_" == i[a]);) --a;
        if (a > 0) {
            var o = i.substr(0, a + 1);
            if (P$.propertyIsEnumerable(o)) return k$.propertyIsEnumerable(o) && (Q$ = "newstatement"), "type"
        }
        return y$.propertyIsEnumerable(i) ? "atom" : null
    }

    function X$(e, t) {
        for (var n, r = !1; n = e.next();) {
            if ("/" == n && r) {
                t.tokenize = _$;
                break
            }
            r = "*" == n
        }
        return "comment"
    }

    function T$(e, t, n, r, i) {
        this.indented = e, this.column = t, this.type = n, this.align = r, this.prev = i
    }

    function R$(e, t, n) {
        return e.context = new T$(e.indented, t, n, null, e.context)
    }

    function W$(e) {
        var t = e.context.type;
        return ")" != t && "]" != t && "}" != t || (e.indented = e.context.indented), e.context = e.context.prev
    }
    const q$ = {
        startState: function(e) {
            return {
                tokenize: null,
                context: new T$(-e, 0, "top", !1),
                indented: 0,
                startOfLine: !0
            }
        },
        token: function(e, t) {
            var n = t.context;
            if (e.sol() && (null == n.align && (n.align = !1), t.indented = e.indentation(), t.startOfLine = !0), e.eatSpace()) return null;
            Q$ = null;
            var r = (t.tokenize || _$)(e, t);
            if ("comment" == r || "meta" == r) return r;
            if (null == n.align && (n.align = !0), ";" != Q$ && ":" != Q$ || "statement" != n.type)
                if ("{" == Q$) R$(t, e.column(), "}");
                else if ("[" == Q$) R$(t, e.column(), "]");
            else if ("(" == Q$) R$(t, e.column(), ")");
            else if ("}" == Q$) {
                for (;
                    "statement" == n.type;) n = W$(t);
                for ("}" == n.type && (n = W$(t));
                    "statement" == n.type;) n = W$(t)
            } else Q$ == n.type ? W$(t) : ("}" == n.type || "top" == n.type || "statement" == n.type && "newstatement" == Q$) && R$(t, e.column(), "statement");
            else W$(t);
            return t.startOfLine = !1, r
        },
        indent: function(e, t, n) {
            if (e.tokenize != _$ && null != e.tokenize) return 0;
            var r = e.context,
                i = t && t.charAt(0);
            "statement" == r.type && "}" == i && (r = r.prev);
            var a = i == r.type;
            return "statement" == r.type ? r.indented + ("{" == i ? 0 : n.unit) : r.align ? r.column + (a ? 0 : 1) : r.indented + (a ? 0 : n.unit)
        },
        languageData: {
            indentOnInput: /^\s*[{}]$/
        }
    };
    var Y$ = Object.freeze({
        __proto__: null,
        ecl: q$
    });

    function z$(e) {
        for (var t = {}, n = 0, r = e.length; n < r; ++n) t[e[n]] = !0;
        return t
    }
    var Z$ = z$(["note", "across", "when", "variant", "until", "unique", "undefine", "then", "strip", "select", "retry", "rescue", "require", "rename", "reference", "redefine", "prefix", "once", "old", "obsolete", "loop", "local", "like", "is", "inspect", "infix", "include", "if", "frozen", "from", "external", "export", "ensure", "end", "elseif", "else", "do", "creation", "create", "check", "alias", "agent", "separate", "invariant", "inherit", "indexing", "feature", "expanded", "deferred", "class", "Void", "True", "Result", "Precursor", "False", "Current", "create", "attached", "detachable", "as", "and", "implies", "not", "or"]),
        E$ = z$([":=", "and then", "and", "or", "<<", ">>"]);

    function I$(e, t) {
        if (e.eatSpace()) return null;
        var n = e.next();
        return '"' == n || "'" == n ? function(e, t, n) {
            return n.tokenize.push(e), e(t, n)
        }(function(e, t, n) {
            return function(r, i) {
                for (var a, o = !1; null != (a = r.next());) {
                    if (a == e && (n || !o)) {
                        i.tokenize.pop();
                        break
                    }
                    o = !o && "%" == a
                }
                return t
            }
        }(n, "string"), e, t) : "-" == n && e.eat("-") ? (e.skipToEnd(), "comment") : ":" == n && e.eat("=") ? "operator" : /[0-9]/.test(n) ? (e.eatWhile(/[xXbBCc0-9\.]/), e.eat(/[\?\!]/), "variable") : /[a-zA-Z_0-9]/.test(n) ? (e.eatWhile(/[a-zA-Z_0-9]/), e.eat(/[\?\!]/), "variable") : /[=+\-\/*^%<>~]/.test(n) ? (e.eatWhile(/[=+\-\/*^%<>~]/), "operator") : null
    }
    const U$ = {
        startState: function() {
            return {
                tokenize: [I$]
            }
        },
        token: function(e, t) {
            var n = t.tokenize[t.tokenize.length - 1](e, t);
            if ("variable" == n) {
                var r = e.current();
                n = Z$.propertyIsEnumerable(e.current()) ? "keyword" : E$.propertyIsEnumerable(e.current()) ? "operator" : /^[A-Z][A-Z_0-9]*$/g.test(r) ? "tag" : /^0[bB][0-1]+$/g.test(r) || /^0[cC][0-7]+$/g.test(r) || /^0[xX][a-fA-F0-9]+$/g.test(r) || /^([0-9]+\.[0-9]*)|([0-9]*\.[0-9]+)$/g.test(r) || /^[0-9]+$/g.test(r) ? "number" : "variable"
            }
            return n
        },
        languageData: {
            commentTokens: {
                line: "--"
            }
        }
    };
    var V$ = Object.freeze({
        __proto__: null,
        eiffel: U$
    });

    function j$(e, t, n) {
        return t(n), n(e, t)
    }
    var A$ = /[a-z]/,
        C$ = /[A-Z]/,
        G$ = /[a-zA-Z0-9_]/,
        L$ = /[0-9]/,
        N$ = /[0-9A-Fa-f]/,
        D$ = /[-&*+.\\/<>=?^|:]/,
        M$ = /[(),[\]{}]/,
        B$ = /[ \v\f]/;

    function F$() {
        return function(e, t) {
            if (e.eatWhile(B$)) return null;
            var n = e.next();
            if (M$.test(n)) return "{" === n && e.eat("-") ? j$(e, t, H$(1)) : "[" === n && e.match("glsl|") ? j$(e, t, tb) : "builtin";
            if ("'" === n) return j$(e, t, eb);
            if ('"' === n) return e.eat('"') ? e.eat('"') ? j$(e, t, J$) : "string" : j$(e, t, K$);
            if (C$.test(n)) return e.eatWhile(G$), "type";
            if (A$.test(n)) {
                var r = 1 === e.pos;
                return e.eatWhile(G$), r ? "def" : "variable"
            }
            if (L$.test(n)) {
                if ("0" === n) {
                    if (e.eat(/[xX]/)) return e.eatWhile(N$), "number"
                } else e.eatWhile(L$);
                return e.eat(".") && e.eatWhile(L$), e.eat(/[eE]/) && (e.eat(/[-+]/), e.eatWhile(L$)), "number"
            }
            return D$.test(n) ? "-" === n && e.eat("-") ? (e.skipToEnd(), "comment") : (e.eatWhile(D$), "keyword") : "_" === n ? "keyword" : "error"
        }
    }

    function H$(e) {
        return 0 == e ? F$() : function(t, n) {
            for (; !t.eol();) {
                var r = t.next();
                if ("{" == r && t.eat("-")) ++e;
                else if ("-" == r && t.eat("}") && 0 === --e) return n(F$()), "comment"
            }
            return n(H$(e)), "comment"
        }
    }

    function J$(e, t) {
        for (; !e.eol();) {
            if ('"' === e.next() && e.eat('"') && e.eat('"')) return t(F$()), "string"
        }
        return "string"
    }

    function K$(e, t) {
        for (; e.skipTo('\\"');) e.next(), e.next();
        return e.skipTo('"') ? (e.next(), t(F$()), "string") : (e.skipToEnd(), t(F$()), "error")
    }

    function eb(e, t) {
        for (; e.skipTo("\\'");) e.next(), e.next();
        return e.skipTo("'") ? (e.next(), t(F$()), "string") : (e.skipToEnd(), t(F$()), "error")
    }

    function tb(e, t) {
        for (; !e.eol();) {
            if ("|" === e.next() && e.eat("]")) return t(F$()), "string"
        }
        return "string"
    }
    var nb = {
        case: 1,
        of: 1,
        as: 1,
        if: 1,
        then: 1,
        else: 1,
        let: 1,
        in: 1,
        type: 1,
        alias: 1,
        module: 1,
        where: 1,
        import: 1,
        exposing: 1,
        port: 1
    };
    const rb = {
        startState: function() {
            return {
                f: F$()
            }
        },
        copyState: function(e) {
            return {
                f: e.f
            }
        },
        token: function(e, t) {
            var n = t.f(e, (function(e) {
                    t.f = e
                })),
                r = e.current();
            return nb.hasOwnProperty(r) ? "keyword" : n
        }
    };
    var ib = Object.freeze({
            __proto__: null,
            elm: rb
        }),
        ab = ["-type", "-spec", "-export_type", "-opaque"],
        ob = ["after", "begin", "catch", "case", "cond", "end", "fun", "if", "let", "of", "query", "receive", "try", "when"],
        sb = /[\->,;]/,
        Ob = ["->", ";", ","],
        lb = ["and", "andalso", "band", "bnot", "bor", "bsl", "bsr", "bxor", "div", "not", "or", "orelse", "rem", "xor"],
        cb = /[\+\-\*\/<>=\|:!]/,
        ub = ["=", "+", "-", "*", "/", ">", ">=", "<", "=<", "=:=", "==", "=/=", "/=", "||", "<-", "!"],
        db = /[<\(\[\{]/,
        pb = ["<<", "(", "[", "{"],
        hb = /[>\)\]\}]/,
        fb = ["}", "]", ")", ">>"],
        mb = ["is_atom", "is_binary", "is_bitstring", "is_boolean", "is_float", "is_function", "is_integer", "is_list", "is_number", "is_pid", "is_port", "is_record", "is_reference", "is_tuple", "atom", "binary", "bitstring", "boolean", "function", "integer", "list", "number", "pid", "port", "record", "reference", "tuple"],
        gb = ["abs", "adler32", "adler32_combine", "alive", "apply", "atom_to_binary", "atom_to_list", "binary_to_atom", "binary_to_existing_atom", "binary_to_list", "binary_to_term", "bit_size", "bitstring_to_list", "byte_size", "check_process_code", "contact_binary", "crc32", "crc32_combine", "date", "decode_packet", "delete_module", "disconnect_node", "element", "erase", "exit", "float", "float_to_list", "garbage_collect", "get", "get_keys", "group_leader", "halt", "hd", "integer_to_list", "internal_bif", "iolist_size", "iolist_to_binary", "is_alive", "is_atom", "is_binary", "is_bitstring", "is_boolean", "is_float", "is_function", "is_integer", "is_list", "is_number", "is_pid", "is_port", "is_process_alive", "is_record", "is_reference", "is_tuple", "length", "link", "list_to_atom", "list_to_binary", "list_to_bitstring", "list_to_existing_atom", "list_to_float", "list_to_integer", "list_to_pid", "list_to_tuple", "load_module", "make_ref", "module_loaded", "monitor_node", "node", "node_link", "node_unlink", "nodes", "notalive", "now", "open_port", "pid_to_list", "port_close", "port_command", "port_connect", "port_control", "pre_loaded", "process_flag", "process_info", "processes", "purge_module", "put", "register", "registered", "round", "self", "setelement", "size", "spawn", "spawn_link", "spawn_monitor", "spawn_opt", "split_binary", "statistics", "term_to_binary", "time", "throw", "tl", "trunc", "tuple_size", "tuple_to_list", "unlink", "unregister", "whereis"],
        Qb = /[\w@Ø-ÞÀ-Öß-öø-ÿ]/,
        $b = /[0-7]{1,3}|[bdefnrstv\\"']|\^[a-zA-Z]|x[0-9a-zA-Z]{2}|x{[0-9a-zA-Z]+}/;

    function bb(e, t, n) {
        if (1 == e.current().length && t.test(e.current())) {
            for (e.backUp(1); t.test(e.peek());)
                if (e.next(), yb(e.current(), n)) return !0;
            e.backUp(e.current().length - 1)
        }
        return !1
    }

    function xb(e, t, n) {
        if (1 == e.current().length && t.test(e.current())) {
            for (; t.test(e.peek());) e.next();
            for (; 0 < e.current().length;) {
                if (yb(e.current(), n)) return !0;
                e.backUp(1)
            }
            e.next()
        }
        return !1
    }

    function Pb(e) {
        return kb(e, '"', "\\")
    }

    function wb(e) {
        return kb(e, "'", "\\")
    }

    function kb(e, t, n) {
        for (; !e.eol();) {
            var r = e.next();
            if (r == t) return !0;
            r == n && e.next()
        }
        return !1
    }

    function yb(e, t) {
        return -1 < t.indexOf(e)
    }

    function vb(e, t, n) {
        switch (function(e, t) {
            "comment" != t.type && "whitespace" != t.type && (e.tokenStack = function(e, t) {
                var n = e.length - 1;
                0 < n && "record" === e[n].type && "dot" === t.type ? e.pop() : 0 < n && "group" === e[n].type ? (e.pop(), e.push(t)) : e.push(t);
                return e
            }(e.tokenStack, t), e.tokenStack = function(e) {
                if (!e.length) return e;
                var t = e.length - 1;
                if ("dot" === e[t].type) return [];
                if (t > 1 && "fun" === e[t].type && "fun" === e[t - 1].token) return e.slice(0, t - 1);
                switch (e[t].token) {
                    case "}":
                        return Tb(e, {
                            g: ["{"]
                        });
                    case "]":
                        return Tb(e, {
                            i: ["["]
                        });
                    case ")":
                        return Tb(e, {
                            i: ["("]
                        });
                    case ">>":
                        return Tb(e, {
                            i: ["<<"]
                        });
                    case "end":
                        return Tb(e, {
                            i: ["begin", "case", "fun", "if", "receive", "try"]
                        });
                    case ",":
                        return Tb(e, {
                            e: ["begin", "try", "when", "->", ",", "(", "[", "{", "<<"]
                        });
                    case "->":
                        return Tb(e, {
                            r: ["when"],
                            m: ["try", "if", "case", "receive"]
                        });
                    case ";":
                        return Tb(e, {
                            E: ["case", "fun", "if", "receive", "try", "when"]
                        });
                    case "catch":
                        return Tb(e, {
                            e: ["try"]
                        });
                    case "of":
                        return Tb(e, {
                            e: ["case"]
                        });
                    case "after":
                        return Tb(e, {
                            e: ["receive", "try"]
                        });
                    default:
                        return e
                }
            }(e.tokenStack))
        }(e, function(e, t) {
            return Sb(t.current(), t.column(), t.indentation(), e)
        }(n, t)), n) {
            case "atom":
                return "atom";
            case "attribute":
                return "attribute";
            case "boolean":
                return "atom";
            case "builtin":
                return "builtin";
            case "close_paren":
            case "colon":
                return null;
            case "comment":
                return "comment";
            case "dot":
                return null;
            case "error":
                return "error";
            case "fun":
                return "meta";
            case "function":
                return "tag";
            case "guard":
                return "property";
            case "keyword":
                return "keyword";
            case "macro":
                return "macroName";
            case "number":
                return "number";
            case "open_paren":
                return null;
            case "operator":
                return "operator";
            case "record":
                return "bracket";
            case "separator":
                return null;
            case "string":
                return "string";
            case "type":
                return "def";
            case "variable":
                return "variable";
            default:
                return null
        }
    }

    function Sb(e, t, n, r) {
        return {
            token: e,
            column: t,
            indent: n,
            type: r
        }
    }

    function _b(e) {
        return Sb(e, 0, 0, e)
    }

    function Xb(e, t) {
        var n = e.tokenStack.length,
            r = t || 1;
        return !(n < r) && e.tokenStack[n - r]
    }

    function Tb(e, t) {
        for (var n in t)
            for (var r = e.length - 1, i = t[n], a = r - 1; - 1 < a; a--)
                if (yb(e[a].token, i)) {
                    var o = e.slice(0, a);
                    switch (n) {
                        case "m":
                            return o.concat(e[a]).concat(e[r]);
                        case "r":
                            return o.concat(e[r]);
                        case "i":
                            return o;
                        case "g":
                            return o.concat(_b("group"));
                        case "E":
                        case "e":
                            return o.concat(e[a])
                    }
                }
        return "E" == n ? [] : e
    }

    function Rb(e, t) {
        var n = e.tokenStack,
            r = Wb(n, "token", t);
        return !!qb(n[r]) && n[r]
    }

    function Wb(e, t, n) {
        for (var r = e.length - 1; - 1 < r; r--)
            if (yb(e[r][t], n)) return r;
        return !1
    }

    function qb(e) {
        return !1 !== e && null != e
    }
    const Yb = {
        startState: () => ({
            tokenStack: [],
            in_string: !1,
            in_atom: !1
        }),
        token: function(e, t) {
            if (t.in_string) return t.in_string = !Pb(e), vb(t, e, "string");
            if (t.in_atom) return t.in_atom = !wb(e), vb(t, e, "atom");
            if (e.eatSpace()) return vb(t, e, "whitespace");
            if (!Xb(t) && e.match(/-\s*[a-zß-öø-ÿ][\wØ-ÞÀ-Öß-öø-ÿ]*/)) return yb(e.current(), ab) ? vb(t, e, "type") : vb(t, e, "attribute");
            var n = e.next();
            if ("%" == n) return e.skipToEnd(), vb(t, e, "comment");
            if (":" == n) return vb(t, e, "colon");
            if ("?" == n) return e.eatSpace(), e.eatWhile(Qb), vb(t, e, "macro");
            if ("#" == n) return e.eatSpace(), e.eatWhile(Qb), vb(t, e, "record");
            if ("$" == n) return "\\" != e.next() || e.match($b) ? vb(t, e, "number") : vb(t, e, "error");
            if ("." == n) return vb(t, e, "dot");
            if ("'" == n) {
                if (!(t.in_atom = !wb(e))) {
                    if (e.match(/\s*\/\s*[0-9]/, !1)) return e.match(/\s*\/\s*[0-9]/, !0), vb(t, e, "fun");
                    if (e.match(/\s*\(/, !1) || e.match(/\s*:/, !1)) return vb(t, e, "function")
                }
                return vb(t, e, "atom")
            }
            if ('"' == n) return t.in_string = !Pb(e), vb(t, e, "string");
            if (/[A-Z_Ø-ÞÀ-Ö]/.test(n)) return e.eatWhile(Qb), vb(t, e, "variable");
            if (/[a-z_ß-öø-ÿ]/.test(n)) {
                if (e.eatWhile(Qb), e.match(/\s*\/\s*[0-9]/, !1)) return e.match(/\s*\/\s*[0-9]/, !0), vb(t, e, "fun");
                var r = e.current();
                return yb(r, ob) ? vb(t, e, "keyword") : yb(r, lb) ? vb(t, e, "operator") : e.match(/\s*\(/, !1) ? !yb(r, gb) || ":" == Xb(t).token && "erlang" != Xb(t, 2).token ? yb(r, mb) ? vb(t, e, "guard") : vb(t, e, "function") : vb(t, e, "builtin") : ":" == function(e) {
                    var t = e.match(/([\n\s]+|%[^\n]*\n)*(.)/, !1);
                    return t ? t.pop() : ""
                }(e) ? vb(t, e, "erlang" == r ? "builtin" : "function") : yb(r, ["true", "false"]) ? vb(t, e, "boolean") : vb(t, e, "atom")
            }
            var i = /[0-9]/;
            return i.test(n) ? (e.eatWhile(i), e.eat("#") ? e.eatWhile(/[0-9a-zA-Z]/) || e.backUp(1) : e.eat(".") && (e.eatWhile(i) ? e.eat(/[eE]/) && (e.eat(/[-+]/) ? e.eatWhile(i) || e.backUp(2) : e.eatWhile(i) || e.backUp(1)) : e.backUp(1)), vb(t, e, "number")) : bb(e, db, pb) ? vb(t, e, "open_paren") : bb(e, hb, fb) ? vb(t, e, "close_paren") : xb(e, sb, Ob) ? vb(t, e, "separator") : xb(e, cb, ub) ? vb(t, e, "operator") : vb(t, e, null)
        },
        indent: function(e, t, n) {
            var r, i = function(e) {
                    var t = e.match(/,|[a-z]+|\}|\]|\)|>>|\|+|\(/);
                    return qb(t) && 0 === t.index ? t[0] : ""
                }(t),
                a = Xb(e, 1),
                o = Xb(e, 2);
            return e.in_string || e.in_atom ? null : o ? "when" == a.token ? a.column + n.unit : "when" === i && "function" === o.type ? o.indent + n.unit : "(" === i && "fun" === a.token ? a.column + 3 : "catch" === i && (r = Rb(e, ["try"])) ? r.column : yb(i, ["end", "after", "of"]) ? (r = Rb(e, ["begin", "case", "fun", "if", "receive", "try"])) ? r.column : null : yb(i, fb) ? (r = Rb(e, pb)) ? r.column : null : yb(a.token, [",", "|", "||"]) || yb(i, [",", "|", "||"]) ? (r = function(e) {
                var t = e.tokenStack.slice(0, -1),
                    n = Wb(t, "type", ["open_paren"]);
                return !!qb(t[n]) && t[n]
            }(e)) ? r.column + r.token.length : n.unit : "->" == a.token ? yb(o.token, ["receive", "case", "if", "try"]) ? o.column + n.unit + n.unit : o.column + n.unit : yb(a.token, pb) ? a.column + a.token.length : (r = function(e) {
                var t = e.tokenStack,
                    n = Wb(t, "type", ["open_paren", "separator", "keyword"]),
                    r = Wb(t, "type", ["operator"]);
                return qb(n) && qb(r) && n < r ? t[n + 1] : !!qb(n) && t[n]
            }(e), qb(r) ? r.column + n.unit : 0) : 0
        },
        languageData: {
            commentTokens: {
                line: "%"
            }
        }
    };
    var zb = Object.freeze({
        __proto__: null,
        erlang: Yb
    });

    function Zb(e) {
        var t = e.client || {},
            n = e.atoms || {
                false: !0,
                true: !0,
                null: !0
            },
            r = e.builtin || jb(Ab),
            i = e.keywords || jb(Vb),
            a = e.operatorChars || /^[*+\-%<>!=&|~^\/]/,
            o = e.support || {},
            s = e.hooks || {},
            O = e.dateSQL || {
                date: !0,
                time: !0,
                timestamp: !0
            },
            l = !1 !== e.backslashStringEscapes,
            c = e.brackets || /^[\{}\(\)\[\]]/,
            u = e.punctuation || /^[;.,:]/;

        function d(e, l) {
            var d = e.next();
            if (s[d]) {
                var f = s[d](e, l);
                if (!1 !== f) return f
            }
            if (o.hexNumber && ("0" == d && e.match(/^[xX][0-9a-fA-F]+/) || ("x" == d || "X" == d) && e.match(/^'[0-9a-fA-F]+'/))) return "number";
            if (o.binaryNumber && (("b" == d || "B" == d) && e.match(/^'[01]+'/) || "0" == d && e.match(/^b[01]+/))) return "number";
            if (d.charCodeAt(0) > 47 && d.charCodeAt(0) < 58) return e.match(/^[0-9]*(\.[0-9]+)?([eE][-+]?[0-9]+)?/), o.decimallessFloat && e.match(/^\.(?!\.)/), "number";
            if ("?" == d && (e.eatSpace() || e.eol() || e.eat(";"))) return "macroName";
            if ("'" == d || '"' == d && o.doubleQuote) return l.tokenize = p(d), l.tokenize(e, l);
            if ((o.nCharCast && ("n" == d || "N" == d) || o.charsetCast && "_" == d && e.match(/[a-z][a-z0-9]*/i)) && ("'" == e.peek() || '"' == e.peek())) return "keyword";
            if (o.escapeConstant && ("e" == d || "E" == d) && ("'" == e.peek() || '"' == e.peek() && o.doubleQuote)) return l.tokenize = function(e, t) {
                return (t.tokenize = p(e.next(), !0))(e, t)
            }, "keyword";
            if (o.commentSlashSlash && "/" == d && e.eat("/")) return e.skipToEnd(), "comment";
            if (o.commentHash && "#" == d || "-" == d && e.eat("-") && (!o.commentSpaceRequired || e.eat(" "))) return e.skipToEnd(), "comment";
            if ("/" == d && e.eat("*")) return l.tokenize = h(1), l.tokenize(e, l);
            if ("." != d) {
                if (a.test(d)) return e.eatWhile(a), "operator";
                if (c.test(d)) return "bracket";
                if (u.test(d)) return e.eatWhile(u), "punctuation";
                if ("{" == d && (e.match(/^( )*(d|D|t|T|ts|TS)( )*'[^']*'( )*}/) || e.match(/^( )*(d|D|t|T|ts|TS)( )*"[^"]*"( )*}/))) return "number";
                e.eatWhile(/^[_\w\d]/);
                var m = e.current().toLowerCase();
                return O.hasOwnProperty(m) && (e.match(/^( )+'[^']*'/) || e.match(/^( )+"[^"]*"/)) ? "number" : n.hasOwnProperty(m) ? "atom" : r.hasOwnProperty(m) ? "builtin" : i.hasOwnProperty(m) ? "keyword" : t.hasOwnProperty(m) ? "string.special" : null
            }
            return o.zerolessFloat && e.match(/^(?:\d+(?:e[+-]?\d+)?)/i) ? "number" : e.match(/^\.+/) ? null : o.ODBCdotTable && e.match(/^[\w\d_$#]+/) ? "type" : void 0
        }

        function p(e, t) {
            return function(n, r) {
                for (var i, a = !1; null != (i = n.next());) {
                    if (i == e && !a) {
                        r.tokenize = d;
                        break
                    }
                    a = (l || t) && !a && "\\" == i
                }
                return "string"
            }
        }

        function h(e) {
            return function(t, n) {
                var r = t.match(/^.*?(\/\*|\*\/)/);
                return r ? "/*" == r[1] ? n.tokenize = h(e + 1) : n.tokenize = e > 1 ? h(e - 1) : d : t.skipToEnd(), "comment"
            }
        }

        function f(e, t, n) {
            t.context = {
                prev: t.context,
                indent: e.indentation(),
                col: e.column(),
                type: n
            }
        }
        return {
            startState: function() {
                return {
                    tokenize: d,
                    context: null
                }
            },
            token: function(e, t) {
                if (e.sol() && t.context && null == t.context.align && (t.context.align = !1), t.tokenize == d && e.eatSpace()) return null;
                var n = t.tokenize(e, t);
                if ("comment" == n) return n;
                t.context && null == t.context.align && (t.context.align = !0);
                var r = e.current();
                return "(" == r ? f(e, t, ")") : "[" == r ? f(e, t, "]") : t.context && t.context.type == r && function(e) {
                    e.indent = e.context.indent, e.context = e.context.prev
                }(t), n
            },
            indent: function(e, t, n) {
                var r = e.context;
                if (!r) return null;
                var i = t.charAt(0) == r.type;
                return r.align ? r.col + (i ? 0 : 1) : r.indent + (i ? 0 : n.unit)
            },
            languageData: {
                commentTokens: {
                    line: o.commentSlashSlash ? "//" : o.commentHash ? "#" : "--",
                    block: {
                        open: "/*",
                        close: "*/"
                    }
                },
                closeBrackets: {
                    brackets: ["(", "[", "{", "'", '"', "`"]
                }
            }
        }
    }

    function Eb(e) {
        for (var t; null != (t = e.next());)
            if ("`" == t && !e.eat("`")) return "string.special";
        return e.backUp(e.current().length - 1), e.eatWhile(/\w/) ? "string.special" : null
    }

    function Ib(e) {
        return e.eat("@") && (e.match("session."), e.match("local."), e.match("global.")), e.eat("'") ? (e.match(/^.*'/), "string.special") : e.eat('"') ? (e.match(/^.*"/), "string.special") : e.eat("`") ? (e.match(/^.*`/), "string.special") : e.match(/^[0-9a-zA-Z$\.\_]+/) ? "string.special" : null
    }

    function Ub(e) {
        return e.eat("N") ? "atom" : e.match(/^[a-zA-Z.#!?]/) ? "string.special" : null
    }
    var Vb = "alter and as asc between by count create delete desc distinct drop from group having in insert into is join like not on or order select set table union update values where limit ";

    function jb(e) {
        for (var t = {}, n = e.split(" "), r = 0; r < n.length; ++r) t[n[r]] = !0;
        return t
    }
    var Ab = "bool boolean bit blob enum long longblob longtext medium mediumblob mediumint mediumtext time timestamp tinyblob tinyint tinytext text bigint int int1 int2 int3 int4 int8 integer float float4 float8 double char varbinary varchar varcharacter precision real date datetime year unsigned signed decimal numeric";
    const Cb = Zb({
            keywords: jb(Vb + "begin"),
            builtin: jb(Ab),
            atoms: jb("false true null unknown"),
            dateSQL: jb("date time timestamp"),
            support: jb("ODBCdotTable doubleQuote binaryNumber hexNumber")
        }),
        Gb = Zb({
            client: jb("$partition binary_checksum checksum connectionproperty context_info current_request_id error_line error_message error_number error_procedure error_severity error_state formatmessage get_filestream_transaction_context getansinull host_id host_name isnull isnumeric min_active_rowversion newid newsequentialid rowcount_big xact_state object_id"),
            keywords: jb(Vb + "begin trigger proc view index for add constraint key primary foreign collate clustered nonclustered declare exec go if use index holdlock nolock nowait paglock readcommitted readcommittedlock readpast readuncommitted repeatableread rowlock serializable snapshot tablock tablockx updlock with"),
            builtin: jb("bigint numeric bit smallint decimal smallmoney int tinyint money float real char varchar text nchar nvarchar ntext binary varbinary image cursor timestamp hierarchyid uniqueidentifier sql_variant xml table "),
            atoms: jb("is not null like and or in left right between inner outer join all any some cross unpivot pivot exists"),
            operatorChars: /^[*+\-%<>!=^\&|\/]/,
            brackets: /^[\{}\(\)]/,
            punctuation: /^[;.,:/]/,
            backslashStringEscapes: !1,
            dateSQL: jb("date datetimeoffset datetime2 smalldatetime datetime time"),
            hooks: {
                "@": Ib
            }
        }),
        Lb = Zb({
            client: jb("charset clear connect edit ego exit go help nopager notee nowarning pager print prompt quit rehash source status system tee"),
            keywords: jb(Vb + "accessible action add after algorithm all analyze asensitive at authors auto_increment autocommit avg avg_row_length before binary binlog both btree cache call cascade cascaded case catalog_name chain change changed character check checkpoint checksum class_origin client_statistics close coalesce code collate collation collations column columns comment commit committed completion concurrent condition connection consistent constraint contains continue contributors convert cross current current_date current_time current_timestamp current_user cursor data database databases day_hour day_microsecond day_minute day_second deallocate dec declare default delay_key_write delayed delimiter des_key_file describe deterministic dev_pop dev_samp deviance diagnostics directory disable discard distinctrow div dual dumpfile each elseif enable enclosed end ends engine engines enum errors escape escaped even event events every execute exists exit explain extended fast fetch field fields first flush for force foreign found_rows full fulltext function general get global grant grants group group_concat handler hash help high_priority hosts hour_microsecond hour_minute hour_second if ignore ignore_server_ids import index index_statistics infile inner innodb inout insensitive insert_method install interval invoker isolation iterate key keys kill language last leading leave left level limit linear lines list load local localtime localtimestamp lock logs low_priority master master_heartbeat_period master_ssl_verify_server_cert masters match max max_rows maxvalue message_text middleint migrate min min_rows minute_microsecond minute_second mod mode modifies modify mutex mysql_errno natural next no no_write_to_binlog offline offset one online open optimize option optionally out outer outfile pack_keys parser partition partitions password phase plugin plugins prepare preserve prev primary privileges procedure processlist profile profiles purge query quick range read read_write reads real rebuild recover references regexp relaylog release remove rename reorganize repair repeatable replace require resignal restrict resume return returns revoke right rlike rollback rollup row row_format rtree savepoint schedule schema schema_name schemas second_microsecond security sensitive separator serializable server session share show signal slave slow smallint snapshot soname spatial specific sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_no_cache sql_small_result sqlexception sqlstate sqlwarning ssl start starting starts status std stddev stddev_pop stddev_samp storage straight_join subclass_origin sum suspend table_name table_statistics tables tablespace temporary terminated to trailing transaction trigger triggers truncate uncommitted undo uninstall unique unlock upgrade usage use use_frm user user_resources user_statistics using utc_date utc_time utc_timestamp value variables varying view views warnings when while with work write xa xor year_month zerofill begin do then else loop repeat"),
            builtin: jb("bool boolean bit blob decimal double float long longblob longtext medium mediumblob mediumint mediumtext time timestamp tinyblob tinyint tinytext text bigint int int1 int2 int3 int4 int8 integer float float4 float8 double char varbinary varchar varcharacter precision date datetime year unsigned signed numeric"),
            atoms: jb("false true null unknown"),
            operatorChars: /^[*+\-%<>!=&|^]/,
            dateSQL: jb("date time timestamp"),
            support: jb("ODBCdotTable decimallessFloat zerolessFloat binaryNumber hexNumber doubleQuote nCharCast charsetCast commentHash commentSpaceRequired"),
            hooks: {
                "@": Ib,
                "`": Eb,
                "\\": Ub
            }
        }),
        Nb = Zb({
            client: jb("charset clear connect edit ego exit go help nopager notee nowarning pager print prompt quit rehash source status system tee"),
            keywords: jb(Vb + "accessible action add after algorithm all always analyze asensitive at authors auto_increment autocommit avg avg_row_length before binary binlog both btree cache call cascade cascaded case catalog_name chain change changed character check checkpoint checksum class_origin client_statistics close coalesce code collate collation collations column columns comment commit committed completion concurrent condition connection consistent constraint contains continue contributors convert cross current current_date current_time current_timestamp current_user cursor data database databases day_hour day_microsecond day_minute day_second deallocate dec declare default delay_key_write delayed delimiter des_key_file describe deterministic dev_pop dev_samp deviance diagnostics directory disable discard distinctrow div dual dumpfile each elseif enable enclosed end ends engine engines enum errors escape escaped even event events every execute exists exit explain extended fast fetch field fields first flush for force foreign found_rows full fulltext function general generated get global grant grants group groupby_concat handler hard hash help high_priority hosts hour_microsecond hour_minute hour_second if ignore ignore_server_ids import index index_statistics infile inner innodb inout insensitive insert_method install interval invoker isolation iterate key keys kill language last leading leave left level limit linear lines list load local localtime localtimestamp lock logs low_priority master master_heartbeat_period master_ssl_verify_server_cert masters match max max_rows maxvalue message_text middleint migrate min min_rows minute_microsecond minute_second mod mode modifies modify mutex mysql_errno natural next no no_write_to_binlog offline offset one online open optimize option optionally out outer outfile pack_keys parser partition partitions password persistent phase plugin plugins prepare preserve prev primary privileges procedure processlist profile profiles purge query quick range read read_write reads real rebuild recover references regexp relaylog release remove rename reorganize repair repeatable replace require resignal restrict resume return returns revoke right rlike rollback rollup row row_format rtree savepoint schedule schema schema_name schemas second_microsecond security sensitive separator serializable server session share show shutdown signal slave slow smallint snapshot soft soname spatial specific sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_no_cache sql_small_result sqlexception sqlstate sqlwarning ssl start starting starts status std stddev stddev_pop stddev_samp storage straight_join subclass_origin sum suspend table_name table_statistics tables tablespace temporary terminated to trailing transaction trigger triggers truncate uncommitted undo uninstall unique unlock upgrade usage use use_frm user user_resources user_statistics using utc_date utc_time utc_timestamp value variables varying view views virtual warnings when while with work write xa xor year_month zerofill begin do then else loop repeat"),
            builtin: jb("bool boolean bit blob decimal double float long longblob longtext medium mediumblob mediumint mediumtext time timestamp tinyblob tinyint tinytext text bigint int int1 int2 int3 int4 int8 integer float float4 float8 double char varbinary varchar varcharacter precision date datetime year unsigned signed numeric"),
            atoms: jb("false true null unknown"),
            operatorChars: /^[*+\-%<>!=&|^]/,
            dateSQL: jb("date time timestamp"),
            support: jb("ODBCdotTable decimallessFloat zerolessFloat binaryNumber hexNumber doubleQuote nCharCast charsetCast commentHash commentSpaceRequired"),
            hooks: {
                "@": Ib,
                "`": Eb,
                "\\": Ub
            }
        }),
        Db = Zb({
            client: jb("auth backup bail binary changes check clone databases dbinfo dump echo eqp exit explain fullschema headers help import imposter indexes iotrace limit lint load log mode nullvalue once open output print prompt quit read restore save scanstats schema separator session shell show stats system tables testcase timeout timer trace vfsinfo vfslist vfsname width"),
            keywords: jb(Vb + "abort action add after all analyze attach autoincrement before begin cascade case cast check collate column commit conflict constraint cross current_date current_time current_timestamp database default deferrable deferred detach each else end escape except exclusive exists explain fail for foreign full glob if ignore immediate index indexed initially inner instead intersect isnull key left limit match natural no notnull null of offset outer plan pragma primary query raise recursive references regexp reindex release rename replace restrict right rollback row savepoint temp temporary then to transaction trigger unique using vacuum view virtual when with without"),
            builtin: jb("bool boolean bit blob decimal double float long longblob longtext medium mediumblob mediumint mediumtext time timestamp tinyblob tinyint tinytext text clob bigint int int2 int8 integer float double char varchar date datetime year unsigned signed numeric real"),
            atoms: jb("null current_date current_time current_timestamp"),
            operatorChars: /^[*+\-%<>!=&|/~]/,
            dateSQL: jb("date time timestamp datetime"),
            support: jb("decimallessFloat zerolessFloat"),
            identifierQuote: '"',
            hooks: {
                "@": Ib,
                ":": Ib,
                "?": Ib,
                $: Ib,
                '"': function(e) {
                    for (var t; null != (t = e.next());)
                        if ('"' == t && !e.eat('"')) return "string.special";
                    return e.backUp(e.current().length - 1), e.eatWhile(/\w/) ? "string.special" : null
                },
                "`": Eb
            }
        }),
        Mb = Zb({
            client: {},
            keywords: jb("add all allow alter and any apply as asc authorize batch begin by clustering columnfamily compact consistency count create custom delete desc distinct drop each_quorum exists filtering from grant if in index insert into key keyspace keyspaces level limit local_one local_quorum modify nan norecursive nosuperuser not of on one order password permission permissions primary quorum rename revoke schema select set storage superuser table three to token truncate ttl two type unlogged update use user users using values where with writetime"),
            builtin: jb("ascii bigint blob boolean counter decimal double float frozen inet int list map static text timestamp timeuuid tuple uuid varchar varint"),
            atoms: jb("false true infinity NaN"),
            operatorChars: /^[<>=]/,
            dateSQL: {},
            support: jb("commentSlashSlash decimallessFloat"),
            hooks: {}
        }),
        Bb = Zb({
            client: jb("appinfo arraysize autocommit autoprint autorecovery autotrace blockterminator break btitle cmdsep colsep compatibility compute concat copycommit copytypecheck define describe echo editfile embedded escape exec execute feedback flagger flush heading headsep instance linesize lno loboffset logsource long longchunksize markup native newpage numformat numwidth pagesize pause pno recsep recsepchar release repfooter repheader serveroutput shiftinout show showmode size spool sqlblanklines sqlcase sqlcode sqlcontinue sqlnumber sqlpluscompatibility sqlprefix sqlprompt sqlterminator suffix tab term termout time timing trimout trimspool ttitle underline verify version wrap"),
            keywords: jb("abort accept access add all alter and any array arraylen as asc assert assign at attributes audit authorization avg base_table begin between binary_integer body boolean by case cast char char_base check close cluster clusters colauth column comment commit compress connect connected constant constraint crash create current currval cursor data_base database date dba deallocate debugoff debugon decimal declare default definition delay delete desc digits dispose distinct do drop else elseif elsif enable end entry escape exception exception_init exchange exclusive exists exit external fast fetch file for force form from function generic goto grant group having identified if immediate in increment index indexes indicator initial initrans insert interface intersect into is key level library like limited local lock log logging long loop master maxextents maxtrans member minextents minus mislabel mode modify multiset new next no noaudit nocompress nologging noparallel not nowait number_base object of off offline on online only open option or order out package parallel partition pctfree pctincrease pctused pls_integer positive positiven pragma primary prior private privileges procedure public raise range raw read rebuild record ref references refresh release rename replace resource restrict return returning returns reverse revoke rollback row rowid rowlabel rownum rows run savepoint schema segment select separate session set share snapshot some space split sql start statement storage subtype successful synonym tabauth table tables tablespace task terminate then to trigger truncate type union unique unlimited unrecoverable unusable update use using validate value values variable view views when whenever where while with work"),
            builtin: jb("abs acos add_months ascii asin atan atan2 average bfile bfilename bigserial bit blob ceil character chartorowid chr clob concat convert cos cosh count dec decode deref dual dump dup_val_on_index empty error exp false float floor found glb greatest hextoraw initcap instr instrb int integer isopen last_day least length lengthb ln lower lpad ltrim lub make_ref max min mlslabel mod months_between natural naturaln nchar nclob new_time next_day nextval nls_charset_decl_len nls_charset_id nls_charset_name nls_initcap nls_lower nls_sort nls_upper nlssort no_data_found notfound null number numeric nvarchar2 nvl others power rawtohex real reftohex round rowcount rowidtochar rowtype rpad rtrim serial sign signtype sin sinh smallint soundex sqlcode sqlerrm sqrt stddev string substr substrb sum sysdate tan tanh to_char text to_date to_label to_multi_byte to_number to_single_byte translate true trunc uid unlogged upper user userenv varchar varchar2 variance varying vsize xml"),
            operatorChars: /^[*\/+\-%<>!=~]/,
            dateSQL: jb("date time timestamp"),
            support: jb("doubleQuote nCharCast zerolessFloat binaryNumber hexNumber")
        }),
        Fb = Zb({
            keywords: jb("select alter $elem$ $key$ $value$ add after all analyze and archive as asc before between binary both bucket buckets by cascade case cast change cluster clustered clusterstatus collection column columns comment compute concatenate continue create cross cursor data database databases dbproperties deferred delete delimited desc describe directory disable distinct distribute drop else enable end escaped exclusive exists explain export extended external fetch fields fileformat first format formatted from full function functions grant group having hold_ddltime idxproperties if import in index indexes inpath inputdriver inputformat insert intersect into is items join keys lateral left like limit lines load local location lock locks mapjoin materialized minus msck no_drop nocompress not of offline on option or order out outer outputdriver outputformat overwrite partition partitioned partitions percent plus preserve procedure purge range rcfile read readonly reads rebuild recordreader recordwriter recover reduce regexp rename repair replace restrict revoke right rlike row schema schemas semi sequencefile serde serdeproperties set shared show show_database sort sorted ssl statistics stored streamtable table tables tablesample tblproperties temporary terminated textfile then tmp to touch transform trigger unarchive undo union uniquejoin unlock update use using utc utc_tmestamp view when where while with admin authorization char compact compactions conf cube current current_date current_timestamp day decimal defined dependency directories elem_type exchange file following for grouping hour ignore inner interval jar less logical macro minute month more none noscan over owner partialscan preceding pretty principals protection reload rewrite role roles rollup rows second server sets skewed transactions truncate unbounded unset uri user values window year"),
            builtin: jb("bool boolean long timestamp tinyint smallint bigint int float double date datetime unsigned string array struct map uniontype key_type utctimestamp value_type varchar"),
            atoms: jb("false true null unknown"),
            operatorChars: /^[*+\-%<>!=]/,
            dateSQL: jb("date timestamp"),
            support: jb("ODBCdotTable doubleQuote binaryNumber hexNumber")
        }),
        Hb = Zb({
            client: jb("source"),
            keywords: jb(Vb + "a abort abs absent absolute access according action ada add admin after aggregate alias all allocate also alter always analyse analyze and any are array array_agg array_max_cardinality as asc asensitive assert assertion assignment asymmetric at atomic attach attribute attributes authorization avg backward base64 before begin begin_frame begin_partition bernoulli between bigint binary bit bit_length blob blocked bom boolean both breadth by c cache call called cardinality cascade cascaded case cast catalog catalog_name ceil ceiling chain char char_length character character_length character_set_catalog character_set_name character_set_schema characteristics characters check checkpoint class class_origin clob close cluster coalesce cobol collate collation collation_catalog collation_name collation_schema collect column column_name columns command_function command_function_code comment comments commit committed concurrently condition condition_number configuration conflict connect connection connection_name constant constraint constraint_catalog constraint_name constraint_schema constraints constructor contains content continue control conversion convert copy corr corresponding cost count covar_pop covar_samp create cross csv cube cume_dist current current_catalog current_date current_default_transform_group current_path current_role current_row current_schema current_time current_timestamp current_transform_group_for_type current_user cursor cursor_name cycle data database datalink datatype date datetime_interval_code datetime_interval_precision day db deallocate debug dec decimal declare default defaults deferrable deferred defined definer degree delete delimiter delimiters dense_rank depends depth deref derived desc describe descriptor detach detail deterministic diagnostics dictionary disable discard disconnect dispatch distinct dlnewcopy dlpreviouscopy dlurlcomplete dlurlcompleteonly dlurlcompletewrite dlurlpath dlurlpathonly dlurlpathwrite dlurlscheme dlurlserver dlvalue do document domain double drop dump dynamic dynamic_function dynamic_function_code each element else elseif elsif empty enable encoding encrypted end end_frame end_partition endexec enforced enum equals errcode error escape event every except exception exclude excluding exclusive exec execute exists exit exp explain expression extension external extract false family fetch file filter final first first_value flag float floor following for force foreach foreign fortran forward found frame_row free freeze from fs full function functions fusion g general generated get global go goto grant granted greatest group grouping groups handler having header hex hierarchy hint hold hour id identity if ignore ilike immediate immediately immutable implementation implicit import in include including increment indent index indexes indicator info inherit inherits initially inline inner inout input insensitive insert instance instantiable instead int integer integrity intersect intersection interval into invoker is isnull isolation join k key key_member key_type label lag language large last last_value lateral lead leading leakproof least left length level library like like_regex limit link listen ln load local localtime localtimestamp location locator lock locked log logged loop lower m map mapping match matched materialized max max_cardinality maxvalue member merge message message_length message_octet_length message_text method min minute minvalue mod mode modifies module month more move multiset mumps name names namespace national natural nchar nclob nesting new next nfc nfd nfkc nfkd nil no none normalize normalized not nothing notice notify notnull nowait nth_value ntile null nullable nullif nulls number numeric object occurrences_regex octet_length octets of off offset oids old on only open operator option options or order ordering ordinality others out outer output over overlaps overlay overriding owned owner p pad parallel parameter parameter_mode parameter_name parameter_ordinal_position parameter_specific_catalog parameter_specific_name parameter_specific_schema parser partial partition pascal passing passthrough password path percent percent_rank percentile_cont percentile_disc perform period permission pg_context pg_datatype_name pg_exception_context pg_exception_detail pg_exception_hint placing plans pli policy portion position position_regex power precedes preceding precision prepare prepared preserve primary print_strict_params prior privileges procedural procedure procedures program public publication query quote raise range rank read reads real reassign recheck recovery recursive ref references referencing refresh regr_avgx regr_avgy regr_count regr_intercept regr_r2 regr_slope regr_sxx regr_sxy regr_syy reindex relative release rename repeatable replace replica requiring reset respect restart restore restrict result result_oid return returned_cardinality returned_length returned_octet_length returned_sqlstate returning returns reverse revoke right role rollback rollup routine routine_catalog routine_name routine_schema routines row row_count row_number rows rowtype rule savepoint scale schema schema_name schemas scope scope_catalog scope_name scope_schema scroll search second section security select selective self sensitive sequence sequences serializable server server_name session session_user set setof sets share show similar simple size skip slice smallint snapshot some source space specific specific_name specifictype sql sqlcode sqlerror sqlexception sqlstate sqlwarning sqrt stable stacked standalone start state statement static statistics stddev_pop stddev_samp stdin stdout storage strict strip structure style subclass_origin submultiset subscription substring substring_regex succeeds sum symmetric sysid system system_time system_user t table table_name tables tablesample tablespace temp template temporary text then ties time timestamp timezone_hour timezone_minute to token top_level_count trailing transaction transaction_active transactions_committed transactions_rolled_back transform transforms translate translate_regex translation treat trigger trigger_catalog trigger_name trigger_schema trim trim_array true truncate trusted type types uescape unbounded uncommitted under unencrypted union unique unknown unlink unlisten unlogged unnamed unnest until untyped update upper uri usage use_column use_variable user user_defined_type_catalog user_defined_type_code user_defined_type_name user_defined_type_schema using vacuum valid validate validator value value_of values var_pop var_samp varbinary varchar variable_conflict variadic varying verbose version versioning view views volatile warning when whenever where while whitespace width_bucket window with within without work wrapper write xml xmlagg xmlattributes xmlbinary xmlcast xmlcomment xmlconcat xmldeclaration xmldocument xmlelement xmlexists xmlforest xmliterate xmlnamespaces xmlparse xmlpi xmlquery xmlroot xmlschema xmlserialize xmltable xmltext xmlvalidate year yes zone"),
            builtin: jb("bigint int8 bigserial serial8 bit varying varbit boolean bool box bytea character char varchar cidr circle date double precision float8 inet integer int int4 interval json jsonb line lseg macaddr macaddr8 money numeric decimal path pg_lsn point polygon real float4 smallint int2 smallserial serial2 serial serial4 text time without zone with timetz timestamp timestamptz tsquery tsvector txid_snapshot uuid xml"),
            atoms: jb("false true null unknown"),
            operatorChars: /^[*\/+\-%<>!=&|^\/#@?~]/,
            backslashStringEscapes: !1,
            dateSQL: jb("date time timestamp"),
            support: jb("ODBCdotTable decimallessFloat zerolessFloat binaryNumber hexNumber nCharCast charsetCast escapeConstant")
        }),
        Jb = Zb({
            keywords: jb("ancestor and asc by contains desc descendant distinct from group has in is limit offset on order select superset where"),
            atoms: jb("false true"),
            builtin: jb("blob datetime first key __key__ string integer double boolean null"),
            operatorChars: /^[*+\-%<>!=]/
        }),
        Kb = Zb({
            client: jb("source"),
            keywords: jb("abort absolute access action active add admin after aggregate all also alter always analyse analyze and any array as asc assertion assignment asymmetric at authorization backward before begin between bigint binary bit boolean both by cache called cascade cascaded case cast chain char character characteristics check checkpoint class close cluster coalesce codegen collate column comment commit committed concurrency concurrently configuration connection constraint constraints contains content continue conversion copy cost cpu_rate_limit create createdb createexttable createrole createuser cross csv cube current current_catalog current_date current_role current_schema current_time current_timestamp current_user cursor cycle data database day deallocate dec decimal declare decode default defaults deferrable deferred definer delete delimiter delimiters deny desc dictionary disable discard distinct distributed do document domain double drop dxl each else enable encoding encrypted end enum errors escape every except exchange exclude excluding exclusive execute exists explain extension external extract false family fetch fields filespace fill filter first float following for force foreign format forward freeze from full function global grant granted greatest group group_id grouping handler hash having header hold host hour identity if ignore ilike immediate immutable implicit in including inclusive increment index indexes inherit inherits initially inline inner inout input insensitive insert instead int integer intersect interval into invoker is isnull isolation join key language large last leading least left level like limit list listen load local localtime localtimestamp location lock log login mapping master match maxvalue median merge minute minvalue missing mode modifies modify month move name names national natural nchar new newline next no nocreatedb nocreateexttable nocreaterole nocreateuser noinherit nologin none noovercommit nosuperuser not nothing notify notnull nowait null nullif nulls numeric object of off offset oids old on only operator option options or order ordered others out outer over overcommit overlaps overlay owned owner parser partial partition partitions passing password percent percentile_cont percentile_disc placing plans position preceding precision prepare prepared preserve primary prior privileges procedural procedure protocol queue quote randomly range read readable reads real reassign recheck recursive ref references reindex reject relative release rename repeatable replace replica reset resource restart restrict returning returns revoke right role rollback rollup rootpartition row rows rule savepoint scatter schema scroll search second security segment select sequence serializable session session_user set setof sets share show similar simple smallint some split sql stable standalone start statement statistics stdin stdout storage strict strip subpartition subpartitions substring superuser symmetric sysid system table tablespace temp template temporary text then threshold ties time timestamp to trailing transaction treat trigger trim true truncate trusted type unbounded uncommitted unencrypted union unique unknown unlisten until update user using vacuum valid validation validator value values varchar variadic varying verbose version view volatile web when where whitespace window with within without work writable write xml xmlattributes xmlconcat xmlelement xmlexists xmlforest xmlparse xmlpi xmlroot xmlserialize year yes zone"),
            builtin: jb("bigint int8 bigserial serial8 bit varying varbit boolean bool box bytea character char varchar cidr circle date double precision float float8 inet integer int int4 interval json jsonb line lseg macaddr macaddr8 money numeric decimal path pg_lsn point polygon real float4 smallint int2 smallserial serial2 serial serial4 text time without zone with timetz timestamp timestamptz tsquery tsvector txid_snapshot uuid xml"),
            atoms: jb("false true null unknown"),
            operatorChars: /^[*+\-%<>!=&|^\/#@?~]/,
            dateSQL: jb("date time timestamp"),
            support: jb("ODBCdotTable decimallessFloat zerolessFloat binaryNumber hexNumber nCharCast charsetCast")
        }),
        ex = Zb({
            keywords: jb("add after all alter analyze and anti archive array as asc at between bucket buckets by cache cascade case cast change clear cluster clustered codegen collection column columns comment commit compact compactions compute concatenate cost create cross cube current current_date current_timestamp database databases data dbproperties defined delete delimited deny desc describe dfs directories distinct distribute drop else end escaped except exchange exists explain export extended external false fields fileformat first following for format formatted from full function functions global grant group grouping having if ignore import in index indexes inner inpath inputformat insert intersect interval into is items join keys last lateral lazy left like limit lines list load local location lock locks logical macro map minus msck natural no not null nulls of on optimize option options or order out outer outputformat over overwrite partition partitioned partitions percent preceding principals purge range recordreader recordwriter recover reduce refresh regexp rename repair replace reset restrict revoke right rlike role roles rollback rollup row rows schema schemas select semi separated serde serdeproperties set sets show skewed sort sorted start statistics stored stratify struct table tables tablesample tblproperties temp temporary terminated then to touch transaction transactions transform true truncate unarchive unbounded uncache union unlock unset use using values view when where window with"),
            builtin: jb("tinyint smallint int bigint boolean float double string binary timestamp decimal array map struct uniontype delimited serde sequencefile textfile rcfile inputformat outputformat"),
            atoms: jb("false true null"),
            operatorChars: /^[*\/+\-%<>!=~&|^]/,
            dateSQL: jb("date time timestamp"),
            support: jb("ODBCdotTable doubleQuote zerolessFloat")
        }),
        tx = Zb({
            client: jb("source"),
            keywords: jb("alter and as asc between by count create delete desc distinct drop from group having in insert into is join like not on or order select set table union update values where limit after all and as at asc avedev avg between by case cast coalesce count create current_timestamp day days delete define desc distinct else end escape events every exists false first from full group having hour hours in inner insert instanceof into irstream is istream join last lastweekday left limit like max match_recognize matches median measures metadatasql min minute minutes msec millisecond milliseconds not null offset on or order outer output partition pattern prev prior regexp retain-union retain-intersection right rstream sec second seconds select set some snapshot sql stddev sum then true unidirectional until update variable weekday when where window"),
            builtin: {},
            atoms: jb("false true null"),
            operatorChars: /^[*+\-%<>!=&|^\/#@?~]/,
            dateSQL: jb("time"),
            support: jb("decimallessFloat zerolessFloat binaryNumber hexNumber")
        });
    var nx = Object.freeze({
        __proto__: null,
        sql: Zb,
        standardSQL: Cb,
        msSQL: Gb,
        mySQL: Lb,
        mariaDB: Nb,
        sqlite: Db,
        cassandra: Mb,
        plSQL: Bb,
        hive: Fb,
        pgSQL: Hb,
        gql: Jb,
        gpSQL: Kb,
        sparkSQL: ex,
        esper: tx
    });
    const rx = SQ({
        start: [{
            regex: /#?!.*/,
            token: "comment"
        }, {
            regex: /"""/,
            token: "string",
            next: "string3"
        }, {
            regex: /(STRING:)(\s)/,
            token: ["keyword", null],
            next: "string2"
        }, {
            regex: /\S*?"/,
            token: "string",
            next: "string"
        }, {
            regex: /(?:0x[\d,a-f]+)|(?:0o[0-7]+)|(?:0b[0,1]+)|(?:\-?\d+.?\d*)(?=\s)/,
            token: "number"
        }, {
            regex: /((?:GENERIC)|\:?\:)(\s+)(\S+)(\s+)(\()/,
            token: ["keyword", null, "def", null, "bracket"],
            next: "stack"
        }, {
            regex: /(M\:)(\s+)(\S+)(\s+)(\S+)/,
            token: ["keyword", null, "def", null, "tag"]
        }, {
            regex: /USING\:/,
            token: "keyword",
            next: "vocabulary"
        }, {
            regex: /(USE\:|IN\:)(\s+)(\S+)(?=\s|$)/,
            token: ["keyword", null, "tag"]
        }, {
            regex: /(\S+\:)(\s+)(\S+)(?=\s|$)/,
            token: ["keyword", null, "def"]
        }, {
            regex: /(?:;|\\|t|f|if|loop|while|until|do|PRIVATE>|<PRIVATE|\.|\S*\[|\]|\S*\{|\})(?=\s|$)/,
            token: "keyword"
        }, {
            regex: /\S+[\)>\.\*\?]+(?=\s|$)/,
            token: "builtin"
        }, {
            regex: /[\)><]+\S+(?=\s|$)/,
            token: "builtin"
        }, {
            regex: /(?:[\+\-\=\/\*<>])(?=\s|$)/,
            token: "keyword"
        }, {
            regex: /\S+/,
            token: "variable"
        }, {
            regex: /\s+|./,
            token: null
        }],
        vocabulary: [{
            regex: /;/,
            token: "keyword",
            next: "start"
        }, {
            regex: /\S+/,
            token: "tag"
        }, {
            regex: /\s+|./,
            token: null
        }],
        string: [{
            regex: /(?:[^\\]|\\.)*?"/,
            token: "string",
            next: "start"
        }, {
            regex: /.*/,
            token: "string"
        }],
        string2: [{
            regex: /^;/,
            token: "keyword",
            next: "start"
        }, {
            regex: /.*/,
            token: "string"
        }],
        string3: [{
            regex: /(?:[^\\]|\\.)*?"""/,
            token: "string",
            next: "start"
        }, {
            regex: /.*/,
            token: "string"
        }],
        stack: [{
            regex: /\)/,
            token: "bracket",
            next: "start"
        }, {
            regex: /--/,
            token: "bracket"
        }, {
            regex: /\S+/,
            token: "meta"
        }, {
            regex: /\s+|./,
            token: null
        }],
        languageData: {
            dontIndentStates: ["start", "vocabulary", "string", "string3", "stack"],
            commentTokens: {
                line: "!"
            }
        }
    });
    var ix = Object.freeze({
            __proto__: null,
            factor: rx
        }),
        ax = {
            term: !0,
            method: !0,
            accu: !0,
            rule: !0,
            then: !0,
            is: !0,
            and: !0,
            or: !0,
            if: !0,
            default: !0
        },
        ox = {
            var_input: !0,
            var_output: !0,
            fuzzify: !0,
            defuzzify: !0,
            function_block: !0,
            ruleblock: !0
        },
        sx = {
            end_ruleblock: !0,
            end_defuzzify: !0,
            end_function_block: !0,
            end_fuzzify: !0,
            end_var: !0
        },
        Ox = {
            true: !0,
            false: !0,
            nan: !0,
            real: !0,
            min: !0,
            max: !0,
            cog: !0,
            cogs: !0
        },
        lx = /[+\-*&^%:=<>!|\/]/;

    function cx(e, t) {
        var n = e.next();
        if (/[\d\.]/.test(n)) return "." == n ? e.match(/^[0-9]+([eE][\-+]?[0-9]+)?/) : "0" == n ? e.match(/^[xX][0-9a-fA-F]+/) || e.match(/^0[0-7]+/) : e.match(/^[0-9]*\.?[0-9]*([eE][\-+]?[0-9]+)?/), "number";
        if ("/" == n || "(" == n) {
            if (e.eat("*")) return t.tokenize = ux, ux(e, t);
            if (e.eat("/")) return e.skipToEnd(), "comment"
        }
        if (lx.test(n)) return e.eatWhile(lx), "operator";
        e.eatWhile(/[\w\$_\xa1-\uffff]/);
        var r = e.current().toLowerCase();
        return ax.propertyIsEnumerable(r) || ox.propertyIsEnumerable(r) || sx.propertyIsEnumerable(r) ? "keyword" : Ox.propertyIsEnumerable(r) ? "atom" : "variable"
    }

    function ux(e, t) {
        for (var n, r = !1; n = e.next();) {
            if (("/" == n || ")" == n) && r) {
                t.tokenize = cx;
                break
            }
            r = "*" == n
        }
        return "comment"
    }

    function dx(e, t, n, r, i) {
        this.indented = e, this.column = t, this.type = n, this.align = r, this.prev = i
    }
    const px = {
        startState: function(e) {
            return {
                tokenize: null,
                context: new dx(-e, 0, "top", !1),
                indented: 0,
                startOfLine: !0
            }
        },
        token: function(e, t) {
            var n = t.context;
            if (e.sol() && (null == n.align && (n.align = !1), t.indented = e.indentation(), t.startOfLine = !0), e.eatSpace()) return null;
            var r = (t.tokenize || cx)(e, t);
            if ("comment" == r) return r;
            null == n.align && (n.align = !0);
            var i = e.current().toLowerCase();
            return ox.propertyIsEnumerable(i) ? function(e, t, n) {
                e.context = new dx(e.indented, t, n, null, e.context)
            }(t, e.column(), "end_block") : sx.propertyIsEnumerable(i) && function(e) {
                if (e.context.prev) "end_block" == e.context.type && (e.indented = e.context.indented), e.context = e.context.prev
            }(t), t.startOfLine = !1, r
        },
        indent: function(e, t, n) {
            if (e.tokenize != cx && null != e.tokenize) return 0;
            var r = e.context,
                i = sx.propertyIsEnumerable(t);
            return r.align ? r.column + (i ? 0 : 1) : r.indented + (i ? 0 : n.unit)
        },
        languageData: {
            commentTokens: {
                line: "//",
                block: {
                    open: "(*",
                    close: "*)"
                }
            }
        }
    };
    var hx = Object.freeze({
        __proto__: null,
        fcl: px
    });

    function fx(e) {
        var t = [];
        return e.split(" ").forEach((function(e) {
            t.push({
                name: e
            })
        })), t
    }
    var mx = fx("INVERT AND OR XOR 2* 2/ LSHIFT RSHIFT 0= = 0< < > U< MIN MAX 2DROP 2DUP 2OVER 2SWAP ?DUP DEPTH DROP DUP OVER ROT SWAP >R R> R@ + - 1+ 1- ABS NEGATE S>D * M* UM* FM/MOD SM/REM UM/MOD */ */MOD / /MOD MOD HERE , @ ! CELL+ CELLS C, C@ C! CHARS 2@ 2! ALIGN ALIGNED +! ALLOT CHAR [CHAR] [ ] BL FIND EXECUTE IMMEDIATE COUNT LITERAL STATE ; DOES> >BODY EVALUATE SOURCE >IN <# # #S #> HOLD SIGN BASE >NUMBER HEX DECIMAL FILL MOVE . CR EMIT SPACE SPACES TYPE U. .R U.R ACCEPT TRUE FALSE <> U> 0<> 0> NIP TUCK ROLL PICK 2>R 2R@ 2R> WITHIN UNUSED MARKER I J TO COMPILE, [COMPILE] SAVE-INPUT RESTORE-INPUT PAD ERASE 2LITERAL DNEGATE D- D+ D0< D0= D2* D2/ D< D= DMAX DMIN D>S DABS M+ M*/ D. D.R 2ROT DU< CATCH THROW FREE RESIZE ALLOCATE CS-PICK CS-ROLL GET-CURRENT SET-CURRENT FORTH-WORDLIST GET-ORDER SET-ORDER PREVIOUS SEARCH-WORDLIST WORDLIST FIND ALSO ONLY FORTH DEFINITIONS ORDER -TRAILING /STRING SEARCH COMPARE CMOVE CMOVE> BLANK SLITERAL"),
        gx = fx("IF ELSE THEN BEGIN WHILE REPEAT UNTIL RECURSE [IF] [ELSE] [THEN] ?DO DO LOOP +LOOP UNLOOP LEAVE EXIT AGAIN CASE OF ENDOF ENDCASE");

    function Qx(e, t) {
        var n;
        for (n = e.length - 1; n >= 0; n--)
            if (e[n].name === t.toUpperCase()) return e[n]
    }
    const $x = {
        startState: function() {
            return {
                state: "",
                base: 10,
                coreWordList: mx,
                immediateWordList: gx,
                wordList: []
            }
        },
        token: function(e, t) {
            var n;
            if (e.eatSpace()) return null;
            if ("" === t.state) {
                if (e.match(/^(\]|:NONAME)(\s|$)/i)) return t.state = " compilation", "builtin";
                if (n = e.match(/^(\:)\s+(\S+)(\s|$)+/)) return t.wordList.push({
                    name: n[2].toUpperCase()
                }), t.state = " compilation", "def";
                if (n = e.match(/^(VARIABLE|2VARIABLE|CONSTANT|2CONSTANT|CREATE|POSTPONE|VALUE|WORD)\s+(\S+)(\s|$)+/i)) return t.wordList.push({
                    name: n[2].toUpperCase()
                }), "def";
                if (n = e.match(/^(\'|\[\'\])\s+(\S+)(\s|$)+/)) return "builtin"
            } else {
                if (e.match(/^(\;|\[)(\s)/)) return t.state = "", e.backUp(1), "builtin";
                if (e.match(/^(\;|\[)($)/)) return t.state = "", "builtin";
                if (e.match(/^(POSTPONE)\s+\S+(\s|$)+/)) return "builtin"
            }
            return (n = e.match(/^(\S+)(\s+|$)/)) ? void 0 !== Qx(t.wordList, n[1]) ? "variable" : "\\" === n[1] ? (e.skipToEnd(), "comment") : void 0 !== Qx(t.coreWordList, n[1]) ? "builtin" : void 0 !== Qx(t.immediateWordList, n[1]) ? "keyword" : "(" === n[1] ? (e.eatWhile((function(e) {
                return ")" !== e
            })), e.eat(")"), "comment") : ".(" === n[1] ? (e.eatWhile((function(e) {
                return ")" !== e
            })), e.eat(")"), "string") : 'S"' === n[1] || '."' === n[1] || 'C"' === n[1] ? (e.eatWhile((function(e) {
                return '"' !== e
            })), e.eat('"'), "string") : n[1] - 68719476735 ? "number" : "atom" : void 0
        }
    };
    var bx = Object.freeze({
        __proto__: null,
        forth: $x
    });

    function xx(e) {
        for (var t = {}, n = 0; n < e.length; ++n) t[e[n]] = !0;
        return t
    }
    var Px = xx(["abstract", "accept", "allocatable", "allocate", "array", "assign", "asynchronous", "backspace", "bind", "block", "byte", "call", "case", "class", "close", "common", "contains", "continue", "cycle", "data", "deallocate", "decode", "deferred", "dimension", "do", "elemental", "else", "encode", "end", "endif", "entry", "enumerator", "equivalence", "exit", "external", "extrinsic", "final", "forall", "format", "function", "generic", "go", "goto", "if", "implicit", "import", "include", "inquire", "intent", "interface", "intrinsic", "module", "namelist", "non_intrinsic", "non_overridable", "none", "nopass", "nullify", "open", "optional", "options", "parameter", "pass", "pause", "pointer", "print", "private", "program", "protected", "public", "pure", "read", "recursive", "result", "return", "rewind", "save", "select", "sequence", "stop", "subroutine", "target", "then", "to", "type", "use", "value", "volatile", "where", "while", "write"]),
        wx = xx(["abort", "abs", "access", "achar", "acos", "adjustl", "adjustr", "aimag", "aint", "alarm", "all", "allocated", "alog", "amax", "amin", "amod", "and", "anint", "any", "asin", "associated", "atan", "besj", "besjn", "besy", "besyn", "bit_size", "btest", "cabs", "ccos", "ceiling", "cexp", "char", "chdir", "chmod", "clog", "cmplx", "command_argument_count", "complex", "conjg", "cos", "cosh", "count", "cpu_time", "cshift", "csin", "csqrt", "ctime", "c_funloc", "c_loc", "c_associated", "c_null_ptr", "c_null_funptr", "c_f_pointer", "c_null_char", "c_alert", "c_backspace", "c_form_feed", "c_new_line", "c_carriage_return", "c_horizontal_tab", "c_vertical_tab", "dabs", "dacos", "dasin", "datan", "date_and_time", "dbesj", "dbesj", "dbesjn", "dbesy", "dbesy", "dbesyn", "dble", "dcos", "dcosh", "ddim", "derf", "derfc", "dexp", "digits", "dim", "dint", "dlog", "dlog", "dmax", "dmin", "dmod", "dnint", "dot_product", "dprod", "dsign", "dsinh", "dsin", "dsqrt", "dtanh", "dtan", "dtime", "eoshift", "epsilon", "erf", "erfc", "etime", "exit", "exp", "exponent", "extends_type_of", "fdate", "fget", "fgetc", "float", "floor", "flush", "fnum", "fputc", "fput", "fraction", "fseek", "fstat", "ftell", "gerror", "getarg", "get_command", "get_command_argument", "get_environment_variable", "getcwd", "getenv", "getgid", "getlog", "getpid", "getuid", "gmtime", "hostnm", "huge", "iabs", "iachar", "iand", "iargc", "ibclr", "ibits", "ibset", "ichar", "idate", "idim", "idint", "idnint", "ieor", "ierrno", "ifix", "imag", "imagpart", "index", "int", "ior", "irand", "isatty", "ishft", "ishftc", "isign", "iso_c_binding", "is_iostat_end", "is_iostat_eor", "itime", "kill", "kind", "lbound", "len", "len_trim", "lge", "lgt", "link", "lle", "llt", "lnblnk", "loc", "log", "logical", "long", "lshift", "lstat", "ltime", "matmul", "max", "maxexponent", "maxloc", "maxval", "mclock", "merge", "move_alloc", "min", "minexponent", "minloc", "minval", "mod", "modulo", "mvbits", "nearest", "new_line", "nint", "not", "or", "pack", "perror", "precision", "present", "product", "radix", "rand", "random_number", "random_seed", "range", "real", "realpart", "rename", "repeat", "reshape", "rrspacing", "rshift", "same_type_as", "scale", "scan", "second", "selected_int_kind", "selected_real_kind", "set_exponent", "shape", "short", "sign", "signal", "sinh", "sin", "sleep", "sngl", "spacing", "spread", "sqrt", "srand", "stat", "sum", "symlnk", "system", "system_clock", "tan", "tanh", "time", "tiny", "transfer", "transpose", "trim", "ttynam", "ubound", "umask", "unlink", "unpack", "verify", "xor", "zabs", "zcos", "zexp", "zlog", "zsin", "zsqrt"]),
        kx = xx(["c_bool", "c_char", "c_double", "c_double_complex", "c_float", "c_float_complex", "c_funptr", "c_int", "c_int16_t", "c_int32_t", "c_int64_t", "c_int8_t", "c_int_fast16_t", "c_int_fast32_t", "c_int_fast64_t", "c_int_fast8_t", "c_int_least16_t", "c_int_least32_t", "c_int_least64_t", "c_int_least8_t", "c_intmax_t", "c_intptr_t", "c_long", "c_long_double", "c_long_double_complex", "c_long_long", "c_ptr", "c_short", "c_signed_char", "c_size_t", "character", "complex", "double", "integer", "logical", "real"]),
        yx = /[+\-*&=<>\/\:]/,
        vx = new RegExp("(.and.|.or.|.eq.|.lt.|.le.|.gt.|.ge.|.ne.|.not.|.eqv.|.neqv.)", "i");

    function Sx(e, t) {
        if (e.match(vx)) return "operator";
        var n = e.next();
        if ("!" == n) return e.skipToEnd(), "comment";
        if ('"' == n || "'" == n) return t.tokenize = function(e) {
            return function(t, n) {
                for (var r, i = !1, a = !1; null != (r = t.next());) {
                    if (r == e && !i) {
                        a = !0;
                        break
                    }
                    i = !i && "\\" == r
                }
                return !a && i || (n.tokenize = null), "string"
            }
        }(n), t.tokenize(e, t);
        if (/[\[\]\(\),]/.test(n)) return null;
        if (/\d/.test(n)) return e.eatWhile(/[\w\.]/), "number";
        if (yx.test(n)) return e.eatWhile(yx), "operator";
        e.eatWhile(/[\w\$_]/);
        var r = e.current().toLowerCase();
        return Px.hasOwnProperty(r) ? "keyword" : wx.hasOwnProperty(r) || kx.hasOwnProperty(r) ? "builtin" : "variable"
    }
    const _x = {
        startState: function() {
            return {
                tokenize: null
            }
        },
        token: function(e, t) {
            if (e.eatSpace()) return null;
            var n = (t.tokenize || Sx)(e, t);
            return n
        }
    };
    var Xx = Object.freeze({
        __proto__: null,
        fortran: _x
    });

    function Tx(e) {
        var t = {
                as: "keyword",
                do: "keyword",
                else: "keyword",
                end: "keyword",
                exception: "keyword",
                fun: "keyword",
                functor: "keyword",
                if: "keyword",
                in: "keyword",
                include: "keyword",
                let: "keyword",
                of: "keyword",
                open: "keyword",
                rec: "keyword",
                struct: "keyword",
                then: "keyword",
                type: "keyword",
                val: "keyword",
                while: "keyword",
                with: "keyword"
            },
            n = e.extraWords || {};
        for (var r in n) n.hasOwnProperty(r) && (t[r] = e.extraWords[r]);
        var i = [];
        for (var a in t) i.push(a);

        function o(n, r) {
            var i = n.next();
            if ('"' === i) return r.tokenize = s, r.tokenize(n, r);
            if ("{" === i && n.eat("|")) return r.longString = !0, r.tokenize = l, r.tokenize(n, r);
            if ("(" === i && n.eat("*")) return r.commentLevel++, r.tokenize = O, r.tokenize(n, r);
            if ("~" === i || "?" === i) return n.eatWhile(/\w/), "variableName.special";
            if ("`" === i) return n.eatWhile(/\w/), "quote";
            if ("/" === i && e.slashComments && n.eat("/")) return n.skipToEnd(), "comment";
            if (/\d/.test(i)) return "0" === i && n.eat(/[bB]/) && n.eatWhile(/[01]/), "0" === i && n.eat(/[xX]/) && n.eatWhile(/[0-9a-fA-F]/), "0" === i && n.eat(/[oO]/) ? n.eatWhile(/[0-7]/) : (n.eatWhile(/[\d_]/), n.eat(".") && n.eatWhile(/[\d]/), n.eat(/[eE]/) && n.eatWhile(/[\d\-+]/)), "number";
            if (/[+\-*&%=<>!?|@\.~:]/.test(i)) return "operator";
            if (/[\w\xa1-\uffff]/.test(i)) {
                n.eatWhile(/[\w\xa1-\uffff]/);
                var a = n.current();
                return t.hasOwnProperty(a) ? t[a] : "variable"
            }
            return null
        }

        function s(e, t) {
            for (var n, r = !1, i = !1; null != (n = e.next());) {
                if ('"' === n && !i) {
                    r = !0;
                    break
                }
                i = !i && "\\" === n
            }
            return r && !i && (t.tokenize = o), "string"
        }

        function O(e, t) {
            for (var n, r; t.commentLevel > 0 && null != (r = e.next());) "(" === n && "*" === r && t.commentLevel++, "*" === n && ")" === r && t.commentLevel--, n = r;
            return t.commentLevel <= 0 && (t.tokenize = o), "comment"
        }

        function l(e, t) {
            for (var n, r; t.longString && null != (r = e.next());) "|" === n && "}" === r && (t.longString = !1), n = r;
            return t.longString || (t.tokenize = o), "string"
        }
        return {
            startState: function() {
                return {
                    tokenize: o,
                    commentLevel: 0,
                    longString: !1
                }
            },
            token: function(e, t) {
                return e.eatSpace() ? null : t.tokenize(e, t)
            },
            languageData: {
                autocomplete: i,
                commentTokens: {
                    line: e.slashComments ? "//" : void 0,
                    block: {
                        open: "(*",
                        close: "*)"
                    }
                }
            }
        }
    }
    const Rx = Tx({
            extraWords: {
                and: "keyword",
                assert: "keyword",
                begin: "keyword",
                class: "keyword",
                constraint: "keyword",
                done: "keyword",
                downto: "keyword",
                external: "keyword",
                function: "keyword",
                initializer: "keyword",
                lazy: "keyword",
                match: "keyword",
                method: "keyword",
                module: "keyword",
                mutable: "keyword",
                new: "keyword",
                nonrec: "keyword",
                object: "keyword",
                private: "keyword",
                sig: "keyword",
                to: "keyword",
                try: "keyword",
                value: "keyword",
                virtual: "keyword",
                when: "keyword",
                raise: "builtin",
                failwith: "builtin",
                true: "builtin",
                false: "builtin",
                asr: "builtin",
                land: "builtin",
                lor: "builtin",
                lsl: "builtin",
                lsr: "builtin",
                lxor: "builtin",
                mod: "builtin",
                or: "builtin",
                raise_notrace: "builtin",
                trace: "builtin",
                exit: "builtin",
                print_string: "builtin",
                print_endline: "builtin",
                int: "type",
                float: "type",
                bool: "type",
                char: "type",
                string: "type",
                unit: "type",
                List: "builtin"
            }
        }),
        Wx = Tx({
            extraWords: {
                abstract: "keyword",
                assert: "keyword",
                base: "keyword",
                begin: "keyword",
                class: "keyword",
                default: "keyword",
                delegate: "keyword",
                "do!": "keyword",
                done: "keyword",
                downcast: "keyword",
                downto: "keyword",
                elif: "keyword",
                extern: "keyword",
                finally: "keyword",
                for: "keyword",
                function: "keyword",
                global: "keyword",
                inherit: "keyword",
                inline: "keyword",
                interface: "keyword",
                internal: "keyword",
                lazy: "keyword",
                "let!": "keyword",
                match: "keyword",
                member: "keyword",
                module: "keyword",
                mutable: "keyword",
                namespace: "keyword",
                new: "keyword",
                null: "keyword",
                override: "keyword",
                private: "keyword",
                public: "keyword",
                "return!": "keyword",
                return: "keyword",
                select: "keyword",
                static: "keyword",
                to: "keyword",
                try: "keyword",
                upcast: "keyword",
                "use!": "keyword",
                use: "keyword",
                void: "keyword",
                when: "keyword",
                "yield!": "keyword",
                yield: "keyword",
                atomic: "keyword",
                break: "keyword",
                checked: "keyword",
                component: "keyword",
                const: "keyword",
                constraint: "keyword",
                constructor: "keyword",
                continue: "keyword",
                eager: "keyword",
                event: "keyword",
                external: "keyword",
                fixed: "keyword",
                method: "keyword",
                mixin: "keyword",
                object: "keyword",
                parallel: "keyword",
                process: "keyword",
                protected: "keyword",
                pure: "keyword",
                sealed: "keyword",
                tailcall: "keyword",
                trait: "keyword",
                virtual: "keyword",
                volatile: "keyword",
                List: "builtin",
                Seq: "builtin",
                Map: "builtin",
                Set: "builtin",
                Option: "builtin",
                int: "builtin",
                string: "builtin",
                not: "builtin",
                true: "builtin",
                false: "builtin",
                raise: "builtin",
                failwith: "builtin"
            },
            slashComments: !0
        }),
        qx = Tx({
            extraWords: {
                abstype: "keyword",
                and: "keyword",
                andalso: "keyword",
                case: "keyword",
                datatype: "keyword",
                fn: "keyword",
                handle: "keyword",
                infix: "keyword",
                infixr: "keyword",
                local: "keyword",
                nonfix: "keyword",
                op: "keyword",
                orelse: "keyword",
                raise: "keyword",
                withtype: "keyword",
                eqtype: "keyword",
                sharing: "keyword",
                sig: "keyword",
                signature: "keyword",
                structure: "keyword",
                where: "keyword",
                true: "keyword",
                false: "keyword",
                int: "builtin",
                real: "builtin",
                string: "builtin",
                char: "builtin",
                bool: "builtin"
            },
            slashComments: !0
        });
    var Yx = Object.freeze({
        __proto__: null,
        oCaml: Rx,
        fSharp: Wx,
        sml: qx
    });

    function zx(e) {
        var t = [],
            n = "",
            r = {
                ".abort": "builtin",
                ".align": "builtin",
                ".altmacro": "builtin",
                ".ascii": "builtin",
                ".asciz": "builtin",
                ".balign": "builtin",
                ".balignw": "builtin",
                ".balignl": "builtin",
                ".bundle_align_mode": "builtin",
                ".bundle_lock": "builtin",
                ".bundle_unlock": "builtin",
                ".byte": "builtin",
                ".cfi_startproc": "builtin",
                ".comm": "builtin",
                ".data": "builtin",
                ".def": "builtin",
                ".desc": "builtin",
                ".dim": "builtin",
                ".double": "builtin",
                ".eject": "builtin",
                ".else": "builtin",
                ".elseif": "builtin",
                ".end": "builtin",
                ".endef": "builtin",
                ".endfunc": "builtin",
                ".endif": "builtin",
                ".equ": "builtin",
                ".equiv": "builtin",
                ".eqv": "builtin",
                ".err": "builtin",
                ".error": "builtin",
                ".exitm": "builtin",
                ".extern": "builtin",
                ".fail": "builtin",
                ".file": "builtin",
                ".fill": "builtin",
                ".float": "builtin",
                ".func": "builtin",
                ".global": "builtin",
                ".gnu_attribute": "builtin",
                ".hidden": "builtin",
                ".hword": "builtin",
                ".ident": "builtin",
                ".if": "builtin",
                ".incbin": "builtin",
                ".include": "builtin",
                ".int": "builtin",
                ".internal": "builtin",
                ".irp": "builtin",
                ".irpc": "builtin",
                ".lcomm": "builtin",
                ".lflags": "builtin",
                ".line": "builtin",
                ".linkonce": "builtin",
                ".list": "builtin",
                ".ln": "builtin",
                ".loc": "builtin",
                ".loc_mark_labels": "builtin",
                ".local": "builtin",
                ".long": "builtin",
                ".macro": "builtin",
                ".mri": "builtin",
                ".noaltmacro": "builtin",
                ".nolist": "builtin",
                ".octa": "builtin",
                ".offset": "builtin",
                ".org": "builtin",
                ".p2align": "builtin",
                ".popsection": "builtin",
                ".previous": "builtin",
                ".print": "builtin",
                ".protected": "builtin",
                ".psize": "builtin",
                ".purgem": "builtin",
                ".pushsection": "builtin",
                ".quad": "builtin",
                ".reloc": "builtin",
                ".rept": "builtin",
                ".sbttl": "builtin",
                ".scl": "builtin",
                ".section": "builtin",
                ".set": "builtin",
                ".short": "builtin",
                ".single": "builtin",
                ".size": "builtin",
                ".skip": "builtin",
                ".sleb128": "builtin",
                ".space": "builtin",
                ".stab": "builtin",
                ".string": "builtin",
                ".struct": "builtin",
                ".subsection": "builtin",
                ".symver": "builtin",
                ".tag": "builtin",
                ".text": "builtin",
                ".title": "builtin",
                ".type": "builtin",
                ".uleb128": "builtin",
                ".val": "builtin",
                ".version": "builtin",
                ".vtable_entry": "builtin",
                ".vtable_inherit": "builtin",
                ".warning": "builtin",
                ".weak": "builtin",
                ".weakref": "builtin",
                ".word": "builtin"
            },
            i = {};

        function a(e, t) {
            for (var n, r = !1; null != (n = e.next());) {
                if ("/" === n && r) {
                    t.tokenize = null;
                    break
                }
                r = "*" === n
            }
            return "comment"
        }
        return "x86" === e ? (n = "#", i.ax = "variable", i.eax = "variableName.special", i.rax = "variableName.special", i.bx = "variable", i.ebx = "variableName.special", i.rbx = "variableName.special", i.cx = "variable", i.ecx = "variableName.special", i.rcx = "variableName.special", i.dx = "variable", i.edx = "variableName.special", i.rdx = "variableName.special", i.si = "variable", i.esi = "variableName.special", i.rsi = "variableName.special", i.di = "variable", i.edi = "variableName.special", i.rdi = "variableName.special", i.sp = "variable", i.esp = "variableName.special", i.rsp = "variableName.special", i.bp = "variable", i.ebp = "variableName.special", i.rbp = "variableName.special", i.ip = "variable", i.eip = "variableName.special", i.rip = "variableName.special", i.cs = "keyword", i.ds = "keyword", i.ss = "keyword", i.es = "keyword", i.fs = "keyword", i.gs = "keyword") : "arm" !== e && "armv6" !== e || (n = "@", r.syntax = "builtin", i.r0 = "variable", i.r1 = "variable", i.r2 = "variable", i.r3 = "variable", i.r4 = "variable", i.r5 = "variable", i.r6 = "variable", i.r7 = "variable", i.r8 = "variable", i.r9 = "variable", i.r10 = "variable", i.r11 = "variable", i.r12 = "variable", i.sp = "variableName.special", i.lr = "variableName.special", i.pc = "variableName.special", i.r13 = i.sp, i.r14 = i.lr, i.r15 = i.pc, t.push((function(e, t) {
            if ("#" === e) return t.eatWhile(/\w/), "number"
        }))), {
            startState: function() {
                return {
                    tokenize: null
                }
            },
            token: function(e, o) {
                if (o.tokenize) return o.tokenize(e, o);
                if (e.eatSpace()) return null;
                var s, O, l = e.next();
                if ("/" === l && e.eat("*")) return o.tokenize = a, a(e, o);
                if (l === n) return e.skipToEnd(), "comment";
                if ('"' === l) return function(e, t) {
                    for (var n, r = !1; null != (n = e.next());) {
                        if (n === t && !r) return !1;
                        r = !r && "\\" === n
                    }
                }(e, '"'), "string";
                if ("." === l) return e.eatWhile(/\w/), O = e.current().toLowerCase(), (s = r[O]) || null;
                if ("=" === l) return e.eatWhile(/\w/), "tag";
                if ("{" === l) return "bracket";
                if ("}" === l) return "bracket";
                if (/\d/.test(l)) return "0" === l && e.eat("x") ? (e.eatWhile(/[0-9a-fA-F]/), "number") : (e.eatWhile(/\d/), "number");
                if (/\w/.test(l)) return e.eatWhile(/\w/), e.eat(":") ? "tag" : (O = e.current().toLowerCase(), (s = i[O]) || null);
                for (var c = 0; c < t.length; c++)
                    if (s = t[c](l, e, o)) return s
            },
            languageData: {
                commentTokens: {
                    line: n,
                    block: {
                        open: "/*",
                        close: "*/"
                    }
                }
            }
        }
    }
    const Zx = zx("x86"),
        Ex = zx("arm");
    var Ix = Object.freeze({
        __proto__: null,
        gas: Zx,
        gasArm: Ex
    });
    var Ux, Vx = Object.freeze({
            __proto__: null,
            gherkin: {
                startState: function() {
                    return {
                        lineNumber: 0,
                        tableHeaderLine: !1,
                        allowFeature: !0,
                        allowBackground: !1,
                        allowScenario: !1,
                        allowSteps: !1,
                        allowPlaceholders: !1,
                        allowMultilineArgument: !1,
                        inMultilineString: !1,
                        inMultilineTable: !1,
                        inKeywordLine: !1
                    }
                },
                token: function(e, t) {
                    if (e.sol() && (t.lineNumber++, t.inKeywordLine = !1, t.inMultilineTable && (t.tableHeaderLine = !1, e.match(/\s*\|/, !1) || (t.allowMultilineArgument = !1, t.inMultilineTable = !1))), e.eatSpace(), t.allowMultilineArgument) {
                        if (t.inMultilineString) return e.match('"""') ? (t.inMultilineString = !1, t.allowMultilineArgument = !1) : e.match(/.*/), "string";
                        if (t.inMultilineTable) return e.match(/\|\s*/) ? "bracket" : (e.match(/[^\|]*/), t.tableHeaderLine ? "header" : "string");
                        if (e.match('"""')) return t.inMultilineString = !0, "string";
                        if (e.match("|")) return t.inMultilineTable = !0, t.tableHeaderLine = !0, "bracket"
                    }
                    return e.match(/#.*/) ? "comment" : !t.inKeywordLine && e.match(/@\S+/) ? "tag" : !t.inKeywordLine && t.allowFeature && e.match(/(機能|功能|フィーチャ|기능|โครงหลัก|ความสามารถ|ความต้องการทางธุรกิจ|ಹೆಚ್ಚಳ|గుణము|ਮੁਹਾਂਦਰਾ|ਨਕਸ਼ ਨੁਹਾਰ|ਖਾਸੀਅਤ|रूप लेख|وِیژگی|خاصية|תכונה|Функціонал|Функция|Функционалност|Функционал|Үзенчәлеклелек|Свойство|Особина|Мөмкинлек|Могућност|Λειτουργία|Δυνατότητα|Właściwość|Vlastnosť|Trajto|Tính năng|Savybė|Pretty much|Požiadavka|Požadavek|Potrzeba biznesowa|Özellik|Osobina|Ominaisuus|Omadus|OH HAI|Mogućnost|Mogucnost|Jellemző|Hwæt|Hwaet|Funzionalità|Funktionalitéit|Funktionalität|Funkcja|Funkcionalnost|Funkcionalitāte|Funkcia|Fungsi|Functionaliteit|Funcționalitate|Funcţionalitate|Functionalitate|Funcionalitat|Funcionalidade|Fonctionnalité|Fitur|Fīča|Feature|Eiginleiki|Egenskap|Egenskab|Característica|Caracteristica|Business Need|Aspekt|Arwedd|Ahoy matey!|Ability):/) ? (t.allowScenario = !0, t.allowBackground = !0, t.allowPlaceholders = !1, t.allowSteps = !1, t.allowMultilineArgument = !1, t.inKeywordLine = !0, "keyword") : !t.inKeywordLine && t.allowBackground && e.match(/(背景|배경|แนวคิด|ಹಿನ್ನೆಲೆ|నేపథ్యం|ਪਿਛੋਕੜ|पृष्ठभूमि|زمینه|الخلفية|רקע|Тарих|Предыстория|Предистория|Позадина|Передумова|Основа|Контекст|Кереш|Υπόβαθρο|Założenia|Yo\-ho\-ho|Tausta|Taust|Situācija|Rerefons|Pozadina|Pozadie|Pozadí|Osnova|Latar Belakang|Kontext|Konteksts|Kontekstas|Kontekst|Háttér|Hannergrond|Grundlage|Geçmiş|Fundo|Fono|First off|Dis is what went down|Dasar|Contexto|Contexte|Context|Contesto|Cenário de Fundo|Cenario de Fundo|Cefndir|Bối cảnh|Bakgrunnur|Bakgrunn|Bakgrund|Baggrund|Background|B4|Antecedents|Antecedentes|Ær|Aer|Achtergrond):/) ? (t.allowPlaceholders = !1, t.allowSteps = !0, t.allowBackground = !1, t.allowMultilineArgument = !1, t.inKeywordLine = !0, "keyword") : !t.inKeywordLine && t.allowScenario && e.match(/(場景大綱|场景大纲|劇本大綱|剧本大纲|テンプレ|シナリオテンプレート|シナリオテンプレ|シナリオアウトライン|시나리오 개요|สรุปเหตุการณ์|โครงสร้างของเหตุการณ์|ವಿವರಣೆ|కథనం|ਪਟਕਥਾ ਰੂਪ ਰੇਖਾ|ਪਟਕਥਾ ਢਾਂਚਾ|परिदृश्य रूपरेखा|سيناريو مخطط|الگوی سناریو|תבנית תרחיש|Сценарийның төзелеше|Сценарий структураси|Структура сценарію|Структура сценария|Структура сценарија|Скица|Рамка на сценарий|Концепт|Περιγραφή Σεναρίου|Wharrimean is|Template Situai|Template Senario|Template Keadaan|Tapausaihio|Szenariogrundriss|Szablon scenariusza|Swa hwær swa|Swa hwaer swa|Struktura scenarija|Structură scenariu|Structura scenariu|Skica|Skenario konsep|Shiver me timbers|Senaryo taslağı|Schema dello scenario|Scenariomall|Scenariomal|Scenario Template|Scenario Outline|Scenario Amlinellol|Scenārijs pēc parauga|Scenarijaus šablonas|Reckon it's like|Raamstsenaarium|Plang vum Szenario|Plan du Scénario|Plan du scénario|Osnova scénáře|Osnova Scenára|Náčrt Scenáru|Náčrt Scénáře|Náčrt Scenára|MISHUN SRSLY|Menggariskan Senario|Lýsing Dæma|Lýsing Atburðarásar|Konturo de la scenaro|Koncept|Khung tình huống|Khung kịch bản|Forgatókönyv vázlat|Esquema do Cenário|Esquema do Cenario|Esquema del escenario|Esquema de l'escenari|Esbozo do escenario|Delineação do Cenário|Delineacao do Cenario|All y'all|Abstrakt Scenario|Abstract Scenario):/) ? (t.allowPlaceholders = !0, t.allowSteps = !0, t.allowMultilineArgument = !1, t.inKeywordLine = !0, "keyword") : t.allowScenario && e.match(/(例子|例|サンプル|예|ชุดของเหตุการณ์|ชุดของตัวอย่าง|ಉದಾಹರಣೆಗಳು|ఉదాహరణలు|ਉਦਾਹਰਨਾਂ|उदाहरण|نمونه ها|امثلة|דוגמאות|Үрнәкләр|Сценарији|Примеры|Примери|Приклади|Мисоллар|Мисаллар|Σενάρια|Παραδείγματα|You'll wanna|Voorbeelden|Variantai|Tapaukset|Se þe|Se the|Se ðe|Scenarios|Scenariji|Scenarijai|Przykłady|Primjeri|Primeri|Příklady|Príklady|Piemēri|Példák|Pavyzdžiai|Paraugs|Örnekler|Juhtumid|Exemplos|Exemples|Exemple|Exempel|EXAMPLZ|Examples|Esempi|Enghreifftiau|Ekzemploj|Eksempler|Ejemplos|Dữ liệu|Dead men tell no tales|Dæmi|Contoh|Cenários|Cenarios|Beispiller|Beispiele|Atburðarásir):/) ? (t.allowPlaceholders = !1, t.allowSteps = !0, t.allowBackground = !1, t.allowMultilineArgument = !0, "keyword") : !t.inKeywordLine && t.allowScenario && e.match(/(場景|场景|劇本|剧本|シナリオ|시나리오|เหตุการณ์|ಕಥಾಸಾರಾಂಶ|సన్నివేశం|ਪਟਕਥਾ|परिदृश्य|سيناريو|سناریو|תרחיש|Сценарій|Сценарио|Сценарий|Пример|Σενάριο|Tình huống|The thing of it is|Tapaus|Szenario|Swa|Stsenaarium|Skenario|Situai|Senaryo|Senario|Scenaro|Scenariusz|Scenariu|Scénario|Scenario|Scenarijus|Scenārijs|Scenarij|Scenarie|Scénář|Scenár|Primer|MISHUN|Kịch bản|Keadaan|Heave to|Forgatókönyv|Escenario|Escenari|Cenário|Cenario|Awww, look mate|Atburðarás):/) ? (t.allowPlaceholders = !1, t.allowSteps = !0, t.allowBackground = !1, t.allowMultilineArgument = !1, t.inKeywordLine = !0, "keyword") : !t.inKeywordLine && t.allowSteps && e.match(/(那麼|那么|而且|當|当|并且|同時|同时|前提|假设|假設|假定|假如|但是|但し|並且|もし|ならば|ただし|しかし|かつ|하지만|조건|먼저|만일|만약|단|그리고|그러면|และ |เมื่อ |แต่ |ดังนั้น |กำหนดให้ |ಸ್ಥಿತಿಯನ್ನು |ಮತ್ತು |ನೀಡಿದ |ನಂತರ |ಆದರೆ |మరియు |చెప్పబడినది |కాని |ఈ పరిస్థితిలో |అప్పుడు |ਪਰ |ਤਦ |ਜੇਕਰ |ਜਿਵੇਂ ਕਿ |ਜਦੋਂ |ਅਤੇ |यदि |परन्तु |पर |तब |तदा |तथा |जब |चूंकि |किन्तु |कदा |और |अगर |و |هنگامی |متى |لكن |عندما |ثم |بفرض |با فرض |اما |اذاً |آنگاه |כאשר |וגם |בהינתן |אזי |אז |אבל |Якщо |Һәм |Унда |Тоді |Тогда |То |Также |Та |Пусть |Припустимо, що |Припустимо |Онда |Но |Нехай |Нәтиҗәдә |Лекин |Ләкин |Коли |Когда |Когато |Када |Кад |К тому же |І |И |Задато |Задати |Задате |Если |Допустим |Дано |Дадено |Вә |Ва |Бирок |Әмма |Әйтик |Әгәр |Аммо |Али |Але |Агар |А також |А |Τότε |Όταν |Και |Δεδομένου |Αλλά |Þurh |Þegar |Þa þe |Þá |Þa |Zatati |Zakładając |Zadato |Zadate |Zadano |Zadani |Zadan |Za předpokladu |Za predpokladu |Youse know when youse got |Youse know like when |Yna |Yeah nah |Y'know |Y |Wun |Wtedy |When y'all |When |Wenn |WEN |wann |Ve |Và |Und |Un |ugeholl |Too right |Thurh |Thì |Then y'all |Then |Tha the |Tha |Tetapi |Tapi |Tak |Tada |Tad |Stel |Soit |Siis |Și |Şi |Si |Sed |Se |Så |Quando |Quand |Quan |Pryd |Potom |Pokud |Pokiaľ |Però |Pero |Pak |Oraz |Onda |Ond |Oletetaan |Og |Och |O zaman |Niin |Nhưng |När |Når |Mutta |Men |Mas |Maka |Majd |Mając |Mais |Maar |mä |Ma |Lorsque |Lorsqu'|Logo |Let go and haul |Kun |Kuid |Kui |Kiedy |Khi |Ketika |Kemudian |Keď |Když |Kaj |Kai |Kada |Kad |Jeżeli |Jeśli |Ja |It's just unbelievable |Ir |I CAN HAZ |I |Ha |Givun |Givet |Given y'all |Given |Gitt |Gegeven |Gegeben seien |Gegeben sei |Gdy |Gangway! |Fakat |Étant donnés |Etant donnés |Étant données |Etant données |Étant donnée |Etant donnée |Étant donné |Etant donné |Et |És |Entonces |Entón |Então |Entao |En |Eğer ki |Ef |Eeldades |E |Ðurh |Duota |Dun |Donitaĵo |Donat |Donada |Do |Diyelim ki |Diberi |Dengan |Den youse gotta |DEN |De |Dato |Dați fiind |Daţi fiind |Dati fiind |Dati |Date fiind |Date |Data |Dat fiind |Dar |Dann |dann |Dan |Dados |Dado |Dadas |Dada |Ða ðe |Ða |Cuando |Cho |Cando |Când |Cand |Cal |But y'all |But at the end of the day I reckon |BUT |But |Buh |Blimey! |Biết |Bet |Bagi |Aye |awer |Avast! |Atunci |Atesa |Atès |Apabila |Anrhegedig a |Angenommen |And y'all |And |AN |An |an |Amikor |Amennyiben |Ama |Als |Alors |Allora |Ali |Aleshores |Ale |Akkor |Ak |Adott |Ac |Aber |A zároveň |A tiež |A taktiež |A také |A |a |7 |\* )/) ? (t.inStep = !0, t.allowPlaceholders = !0, t.allowMultilineArgument = !0, t.inKeywordLine = !0, "keyword") : e.match(/"[^"]*"?/) ? "string" : t.allowPlaceholders && e.match(/<[^>]*>?/) ? "variable" : (e.next(), e.eatWhile(/[^@"<#]/), null)
                }
            }
        }),
        jx = {
            break: !0,
            case: !0,
            chan: !0,
            const: !0,
            continue: !0,
            default: !0,
            defer: !0,
            else: !0,
            fallthrough: !0,
            for: !0,
            func: !0,
            go: !0,
            goto: !0,
            if: !0,
            import: !0,
            interface: !0,
            map: !0,
            package: !0,
            range: !0,
            return: !0,
            select: !0,
            struct: !0,
            switch: !0,
            type: !0,
            var: !0,
            bool: !0,
            byte: !0,
            complex64: !0,
            complex128: !0,
            float32: !0,
            float64: !0,
            int8: !0,
            int16: !0,
            int32: !0,
            int64: !0,
            string: !0,
            uint8: !0,
            uint16: !0,
            uint32: !0,
            uint64: !0,
            int: !0,
            uint: !0,
            uintptr: !0,
            error: !0,
            rune: !0
        },
        Ax = {
            true: !0,
            false: !0,
            iota: !0,
            nil: !0,
            append: !0,
            cap: !0,
            close: !0,
            complex: !0,
            copy: !0,
            delete: !0,
            imag: !0,
            len: !0,
            make: !0,
            new: !0,
            panic: !0,
            print: !0,
            println: !0,
            real: !0,
            recover: !0
        },
        Cx = /[+\-*&^%:=<>!|\/]/;

    function Gx(e, t) {
        var n = e.next();
        if ('"' == n || "'" == n || "`" == n) return t.tokenize = function(e) {
            return function(t, n) {
                for (var r, i = !1, a = !1; null != (r = t.next());) {
                    if (r == e && !i) {
                        a = !0;
                        break
                    }
                    i = !i && "`" != e && "\\" == r
                }
                return (a || !i && "`" != e) && (n.tokenize = Gx), "string"
            }
        }(n), t.tokenize(e, t);
        if (/[\d\.]/.test(n)) return "." == n ? e.match(/^[0-9]+([eE][\-+]?[0-9]+)?/) : "0" == n ? e.match(/^[xX][0-9a-fA-F]+/) || e.match(/^0[0-7]+/) : e.match(/^[0-9]*\.?[0-9]*([eE][\-+]?[0-9]+)?/), "number";
        if (/[\[\]{}\(\),;\:\.]/.test(n)) return Ux = n, null;
        if ("/" == n) {
            if (e.eat("*")) return t.tokenize = Lx, Lx(e, t);
            if (e.eat("/")) return e.skipToEnd(), "comment"
        }
        if (Cx.test(n)) return e.eatWhile(Cx), "operator";
        e.eatWhile(/[\w\$_\xa1-\uffff]/);
        var r = e.current();
        return jx.propertyIsEnumerable(r) ? ("case" != r && "default" != r || (Ux = "case"), "keyword") : Ax.propertyIsEnumerable(r) ? "atom" : "variable"
    }

    function Lx(e, t) {
        for (var n, r = !1; n = e.next();) {
            if ("/" == n && r) {
                t.tokenize = Gx;
                break
            }
            r = "*" == n
        }
        return "comment"
    }

    function Nx(e, t, n, r, i) {
        this.indented = e, this.column = t, this.type = n, this.align = r, this.prev = i
    }

    function Dx(e, t, n) {
        return e.context = new Nx(e.indented, t, n, null, e.context)
    }

    function Mx(e) {
        if (e.context.prev) {
            var t = e.context.type;
            return ")" != t && "]" != t && "}" != t || (e.indented = e.context.indented), e.context = e.context.prev
        }
    }
    const Bx = {
        startState: function(e) {
            return {
                tokenize: null,
                context: new Nx(-e, 0, "top", !1),
                indented: 0,
                startOfLine: !0
            }
        },
        token: function(e, t) {
            var n = t.context;
            if (e.sol() && (null == n.align && (n.align = !1), t.indented = e.indentation(), t.startOfLine = !0, "case" == n.type && (n.type = "}")), e.eatSpace()) return null;
            Ux = null;
            var r = (t.tokenize || Gx)(e, t);
            return "comment" == r || (null == n.align && (n.align = !0), "{" == Ux ? Dx(t, e.column(), "}") : "[" == Ux ? Dx(t, e.column(), "]") : "(" == Ux ? Dx(t, e.column(), ")") : "case" == Ux ? n.type = "case" : ("}" == Ux && "}" == n.type || Ux == n.type) && Mx(t), t.startOfLine = !1), r
        },
        indent: function(e, t, n) {
            if (e.tokenize != Gx && null != e.tokenize) return null;
            var r = e.context,
                i = t && t.charAt(0);
            if ("case" == r.type && /^(?:case|default)\b/.test(t)) return e.context.type = "}", r.indented;
            var a = i == r.type;
            return r.align ? r.column + (a ? 0 : 1) : r.indented + (a ? 0 : n.unit)
        },
        languageData: {
            indentOnInput: /^\s([{}]|case |default\s*:)$/,
            commentTokens: {
                line: "//",
                block: {
                    open: "/*",
                    close: "*/"
                }
            }
        }
    };
    var Fx = Object.freeze({
        __proto__: null,
        go: Bx
    });

    function Hx(e) {
        for (var t = {}, n = e.split(" "), r = 0; r < n.length; ++r) t[n[r]] = !0;
        return t
    }
    var Jx, Kx = Hx("abstract as assert boolean break byte case catch char class const continue def default do double else enum extends final finally float for goto if implements import in instanceof int interface long native new package private protected public return short static strictfp super switch synchronized threadsafe throw throws trait transient try void volatile while"),
        eP = Hx("catch class def do else enum finally for if interface switch trait try while"),
        tP = Hx("return break continue"),
        nP = Hx("null true false this");

    function rP(e, t) {
        var n = e.next();
        if ('"' == n || "'" == n) return iP(n, e, t);
        if (/[\[\]{}\(\),;\:\.]/.test(n)) return Jx = n, null;
        if (/\d/.test(n)) return e.eatWhile(/[\w\.]/), e.eat(/eE/) && (e.eat(/\+\-/), e.eatWhile(/\d/)), "number";
        if ("/" == n) {
            if (e.eat("*")) return t.tokenize.push(oP), oP(e, t);
            if (e.eat("/")) return e.skipToEnd(), "comment";
            if (sP(t.lastToken, !1)) return iP(n, e, t)
        }
        if ("-" == n && e.eat(">")) return Jx = "->", null;
        if (/[+\-*&%=<>!?|\/~]/.test(n)) return e.eatWhile(/[+\-*&%=<>|~]/), "operator";
        if (e.eatWhile(/[\w\$_]/), "@" == n) return e.eatWhile(/[\w\$_\.]/), "meta";
        if ("." == t.lastToken) return "property";
        if (e.eat(":")) return Jx = "proplabel", "property";
        var r = e.current();
        return nP.propertyIsEnumerable(r) ? "atom" : Kx.propertyIsEnumerable(r) ? (eP.propertyIsEnumerable(r) ? Jx = "newstatement" : tP.propertyIsEnumerable(r) && (Jx = "standalone"), "keyword") : "variable"
    }

    function iP(e, t, n) {
        var r = !1;
        if ("/" != e && t.eat(e)) {
            if (!t.eat(e)) return "string";
            r = !0
        }

        function i(t, n) {
            for (var i, a = !1, o = !r; null != (i = t.next());) {
                if (i == e && !a) {
                    if (!r) break;
                    if (t.match(e + e)) {
                        o = !0;
                        break
                    }
                }
                if ('"' == e && "$" == i && !a && t.eat("{")) return n.tokenize.push(aP()), "string";
                a = !a && "\\" == i
            }
            return o && n.tokenize.pop(), "string"
        }
        return n.tokenize.push(i), i(t, n)
    }

    function aP() {
        var e = 1;

        function t(t, n) {
            if ("}" == t.peek()) {
                if (0 == --e) return n.tokenize.pop(), n.tokenize[n.tokenize.length - 1](t, n)
            } else "{" == t.peek() && e++;
            return rP(t, n)
        }
        return t.isBase = !0, t
    }

    function oP(e, t) {
        for (var n, r = !1; n = e.next();) {
            if ("/" == n && r) {
                t.tokenize.pop();
                break
            }
            r = "*" == n
        }
        return "comment"
    }

    function sP(e, t) {
        return !e || "operator" == e || "->" == e || /[\.\[\{\(,;:]/.test(e) || "newstatement" == e || "keyword" == e || "proplabel" == e || "standalone" == e && !t
    }

    function OP(e, t, n, r, i) {
        this.indented = e, this.column = t, this.type = n, this.align = r, this.prev = i
    }

    function lP(e, t, n) {
        return e.context = new OP(e.indented, t, n, null, e.context)
    }

    function cP(e) {
        var t = e.context.type;
        return ")" != t && "]" != t && "}" != t || (e.indented = e.context.indented), e.context = e.context.prev
    }
    rP.isBase = !0;
    const uP = {
        startState: function(e) {
            return {
                tokenize: [rP],
                context: new OP(-e, 0, "top", !1),
                indented: 0,
                startOfLine: !0,
                lastToken: null
            }
        },
        token: function(e, t) {
            var n = t.context;
            if (e.sol() && (null == n.align && (n.align = !1), t.indented = e.indentation(), t.startOfLine = !0, "statement" != n.type || sP(t.lastToken, !0) || (cP(t), n = t.context)), e.eatSpace()) return null;
            Jx = null;
            var r = t.tokenize[t.tokenize.length - 1](e, t);
            if ("comment" == r) return r;
            if (null == n.align && (n.align = !0), ";" != Jx && ":" != Jx || "statement" != n.type)
                if ("->" == Jx && "statement" == n.type && "}" == n.prev.type) cP(t), t.context.align = !1;
                else if ("{" == Jx) lP(t, e.column(), "}");
            else if ("[" == Jx) lP(t, e.column(), "]");
            else if ("(" == Jx) lP(t, e.column(), ")");
            else if ("}" == Jx) {
                for (;
                    "statement" == n.type;) n = cP(t);
                for ("}" == n.type && (n = cP(t));
                    "statement" == n.type;) n = cP(t)
            } else Jx == n.type ? cP(t) : ("}" == n.type || "top" == n.type || "statement" == n.type && "newstatement" == Jx) && lP(t, e.column(), "statement");
            else cP(t);
            return t.startOfLine = !1, t.lastToken = Jx || r, r
        },
        indent: function(e, t, n) {
            if (!e.tokenize[e.tokenize.length - 1].isBase) return null;
            var r = t && t.charAt(0),
                i = e.context;
            "statement" != i.type || sP(e.lastToken, !0) || (i = i.prev);
            var a = r == i.type;
            return "statement" == i.type ? i.indented + ("{" == r ? 0 : n.unit) : i.align ? i.column + (a ? 0 : 1) : i.indented + (a ? 0 : n.unit)
        },
        languageData: {
            indentOnInput: /^\s*[{}]$/,
            commentTokens: {
                line: "//",
                block: {
                    open: "/*",
                    close: "*/"
                }
            },
            closeBrackets: {
                brackets: ["(", "[", "{", "'", '"', "'''", '"""']
            }
        }
    };
    var dP = Object.freeze({
        __proto__: null,
        groovy: uP
    });

    function pP(e, t, n) {
        return t(n), n(e, t)
    }
    var hP = /[a-z_]/,
        fP = /[A-Z]/,
        mP = /\d/,
        gP = /[0-9A-Fa-f]/,
        QP = /[0-7]/,
        $P = /[a-z_A-Z0-9'\xa1-\uffff]/,
        bP = /[-!#$%&*+.\/<=>?@\\^|~:]/,
        xP = /[(),;[\]`{}]/,
        PP = /[ \t\v\f]/;

    function wP(e, t) {
        if (e.eatWhile(PP)) return null;
        var n = e.next();
        if (xP.test(n)) {
            if ("{" == n && e.eat("-")) {
                var r = "comment";
                return e.eat("#") && (r = "meta"), pP(e, t, kP(r, 1))
            }
            return null
        }
        if ("'" == n) return e.eat("\\"), e.next(), e.eat("'") ? "string" : "error";
        if ('"' == n) return pP(e, t, yP);
        if (fP.test(n)) return e.eatWhile($P), e.eat(".") ? "qualifier" : "type";
        if (hP.test(n)) return e.eatWhile($P), "variable";
        if (mP.test(n)) {
            if ("0" == n) {
                if (e.eat(/[xX]/)) return e.eatWhile(gP), "integer";
                if (e.eat(/[oO]/)) return e.eatWhile(QP), "number"
            }
            e.eatWhile(mP);
            r = "number";
            return e.match(/^\.\d+/) && (r = "number"), e.eat(/[eE]/) && (r = "number", e.eat(/[-+]/), e.eatWhile(mP)), r
        }
        return "." == n && e.eat(".") ? "keyword" : bP.test(n) ? "-" == n && e.eat(/-/) && (e.eatWhile(/-/), !e.eat(bP)) ? (e.skipToEnd(), "comment") : (e.eatWhile(bP), "variable") : "error"
    }

    function kP(e, t) {
        return 0 == t ? wP : function(n, r) {
            for (var i = t; !n.eol();) {
                var a = n.next();
                if ("{" == a && n.eat("-")) ++i;
                else if ("-" == a && n.eat("}") && 0 == --i) return r(wP), e
            }
            return r(kP(e, i)), e
        }
    }

    function yP(e, t) {
        for (; !e.eol();) {
            var n = e.next();
            if ('"' == n) return t(wP), "string";
            if ("\\" == n) {
                if (e.eol() || e.eat(PP)) return t(vP), "string";
                e.eat("&") || e.next()
            }
        }
        return t(wP), "error"
    }

    function vP(e, t) {
        return e.eat("\\") ? pP(e, t, yP) : (e.next(), t(wP), "error")
    }
    var SP = function() {
        var e = {};

        function t(t) {
            return function() {
                for (var n = 0; n < arguments.length; n++) e[arguments[n]] = t
            }
        }
        return t("keyword")("case", "class", "data", "default", "deriving", "do", "else", "foreign", "if", "import", "in", "infix", "infixl", "infixr", "instance", "let", "module", "newtype", "of", "then", "type", "where", "_"), t("keyword")("..", ":", "::", "=", "\\", "<-", "->", "@", "~", "=>"), t("builtin")("!!", "$!", "$", "&&", "+", "++", "-", ".", "/", "/=", "<", "<*", "<=", "<$>", "<*>", "=<<", "==", ">", ">=", ">>", ">>=", "^", "^^", "||", "*", "*>", "**"), t("builtin")("Applicative", "Bool", "Bounded", "Char", "Double", "EQ", "Either", "Enum", "Eq", "False", "FilePath", "Float", "Floating", "Fractional", "Functor", "GT", "IO", "IOError", "Int", "Integer", "Integral", "Just", "LT", "Left", "Maybe", "Monad", "Nothing", "Num", "Ord", "Ordering", "Rational", "Read", "ReadS", "Real", "RealFloat", "RealFrac", "Right", "Show", "ShowS", "String", "True"), t("builtin")("abs", "acos", "acosh", "all", "and", "any", "appendFile", "asTypeOf", "asin", "asinh", "atan", "atan2", "atanh", "break", "catch", "ceiling", "compare", "concat", "concatMap", "const", "cos", "cosh", "curry", "cycle", "decodeFloat", "div", "divMod", "drop", "dropWhile", "either", "elem", "encodeFloat", "enumFrom", "enumFromThen", "enumFromThenTo", "enumFromTo", "error", "even", "exp", "exponent", "fail", "filter", "flip", "floatDigits", "floatRadix", "floatRange", "floor", "fmap", "foldl", "foldl1", "foldr", "foldr1", "fromEnum", "fromInteger", "fromIntegral", "fromRational", "fst", "gcd", "getChar", "getContents", "getLine", "head", "id", "init", "interact", "ioError", "isDenormalized", "isIEEE", "isInfinite", "isNaN", "isNegativeZero", "iterate", "last", "lcm", "length", "lex", "lines", "log", "logBase", "lookup", "map", "mapM", "mapM_", "max", "maxBound", "maximum", "maybe", "min", "minBound", "minimum", "mod", "negate", "not", "notElem", "null", "odd", "or", "otherwise", "pi", "pred", "print", "product", "properFraction", "pure", "putChar", "putStr", "putStrLn", "quot", "quotRem", "read", "readFile", "readIO", "readList", "readLn", "readParen", "reads", "readsPrec", "realToFrac", "recip", "rem", "repeat", "replicate", "return", "reverse", "round", "scaleFloat", "scanl", "scanl1", "scanr", "scanr1", "seq", "sequence", "sequence_", "show", "showChar", "showList", "showParen", "showString", "shows", "showsPrec", "significand", "signum", "sin", "sinh", "snd", "span", "splitAt", "sqrt", "subtract", "succ", "sum", "tail", "take", "takeWhile", "tan", "tanh", "toEnum", "toInteger", "toRational", "truncate", "uncurry", "undefined", "unlines", "until", "unwords", "unzip", "unzip3", "userError", "words", "writeFile", "zip", "zip3", "zipWith", "zipWith3"), e
    }();
    const _P = {
        startState: function() {
            return {
                f: wP
            }
        },
        copyState: function(e) {
            return {
                f: e.f
            }
        },
        token: function(e, t) {
            var n = t.f(e, (function(e) {
                    t.f = e
                })),
                r = e.current();
            return SP.hasOwnProperty(r) ? SP[r] : n
        },
        languageData: {
            commentTokens: {
                line: "--",
                block: {
                    open: "{-",
                    close: "-}"
                }
            }
        }
    };
    var XP = Object.freeze({
        __proto__: null,
        haskell: _P
    });

    function TP(e) {
        return {
            type: e,
            style: "keyword"
        }
    }
    var RP, WP = TP("keyword a"),
        qP = TP("keyword b"),
        YP = TP("keyword c"),
        zP = TP("operator"),
        ZP = {
            type: "atom",
            style: "atom"
        },
        EP = {
            type: "attribute",
            style: "attribute"
        },
        IP = TP("typedef"),
        UP = {
            if: WP,
            while: WP,
            else: qP,
            do: qP,
            try: qP,
            return: YP,
            break: YP,
            continue: YP,
            new: YP,
            throw: YP,
            var: TP("var"),
            inline: EP,
            static: EP,
            using: TP("import"),
            public: EP,
            private: EP,
            cast: TP("cast"),
            import: TP("import"),
            macro: TP("macro"),
            function: TP("function"),
            catch: TP("catch"),
            untyped: TP("untyped"),
            callback: TP("cb"),
            for: TP("for"),
            switch: TP("switch"),
            case: TP("case"),
            default: TP("default"),
            in: zP,
            never: TP("property_access"),
            trace: TP("trace"),
            class: IP,
            abstract: IP,
            enum: IP,
            interface: IP,
            typedef: IP,
            extends: IP,
            implements: IP,
            dynamic: IP,
            true: ZP,
            false: ZP,
            null: ZP
        },
        VP = /[+\-*&%=<>!?|]/;

    function jP(e, t, n) {
        return t.tokenize = n, n(e, t)
    }

    function AP(e, t) {
        for (var n, r = !1; null != (n = e.next());) {
            if (n == t && !r) return !0;
            r = !r && "\\" == n
        }
    }

    function CP(e, t, n) {
        return IP = e, RP = n, t
    }

    function GP(e, t) {
        var n = e.next();
        if ('"' == n || "'" == n) return jP(e, t, function(e) {
            return function(t, n) {
                return AP(t, e) && (n.tokenize = GP), CP("string", "string")
            }
        }(n));
        if (/[\[\]{}\(\),;\:\.]/.test(n)) return CP(n);
        if ("0" == n && e.eat(/x/i)) return e.eatWhile(/[\da-f]/i), CP("number", "number");
        if (/\d/.test(n) || "-" == n && e.eat(/\d/)) return e.match(/^\d*(?:\.\d*(?!\.))?(?:[eE][+\-]?\d+)?/), CP("number", "number");
        if (t.reAllowed && "~" == n && e.eat(/\//)) return AP(e, "/"), e.eatWhile(/[gimsu]/), CP("regexp", "string.special");
        if ("/" == n) return e.eat("*") ? jP(e, t, LP) : e.eat("/") ? (e.skipToEnd(), CP("comment", "comment")) : (e.eatWhile(VP), CP("operator", null, e.current()));
        if ("#" == n) return e.skipToEnd(), CP("conditional", "meta");
        if ("@" == n) return e.eat(/:/), e.eatWhile(/[\w_]/), CP("metadata", "meta");
        if (VP.test(n)) return e.eatWhile(VP), CP("operator", null, e.current());
        if (/[A-Z]/.test(n)) return e.eatWhile(/[\w_<>]/), CP("type", "type", r = e.current());
        e.eatWhile(/[\w_]/);
        var r = e.current(),
            i = UP.propertyIsEnumerable(r) && UP[r];
        return i && t.kwAllowed ? CP(i.type, i.style, r) : CP("variable", "variable", r)
    }

    function LP(e, t) {
        for (var n, r = !1; n = e.next();) {
            if ("/" == n && r) {
                t.tokenize = GP;
                break
            }
            r = "*" == n
        }
        return CP("comment", "comment")
    }
    var NP = {
        atom: !0,
        number: !0,
        variable: !0,
        string: !0,
        regexp: !0
    };

    function DP(e, t, n, r, i, a) {
        this.indented = e, this.column = t, this.type = n, this.prev = i, this.info = a, null != r && (this.align = r)
    }

    function MP(e, t) {
        for (var n = e.localVars; n; n = n.next)
            if (n.name == t) return !0
    }

    function BP(e, t) {
        if (/[a-z]/.test(t.charAt(0))) return !1;
        for (var n = e.importedtypes.length, r = 0; r < n; r++)
            if (e.importedtypes[r] == t) return !0
    }

    function FP(e) {
        for (var t = HP.state, n = t.importedtypes; n; n = n.next)
            if (n.name == e) return;
        t.importedtypes = {
            name: e,
            next: t.importedtypes
        }
    }
    var HP = {
        state: null,
        column: null,
        marked: null,
        cc: null
    };

    function JP() {
        for (var e = arguments.length - 1; e >= 0; e--) HP.cc.push(arguments[e])
    }

    function KP() {
        return JP.apply(null, arguments), !0
    }

    function ew(e, t) {
        for (var n = t; n; n = n.next)
            if (n.name == e) return !0;
        return !1
    }

    function tw(e) {
        var t = HP.state;
        if (t.context) {
            if (HP.marked = "def", ew(e, t.localVars)) return;
            t.localVars = {
                name: e,
                next: t.localVars
            }
        } else if (t.globalVars) {
            if (ew(e, t.globalVars)) return;
            t.globalVars = {
                name: e,
                next: t.globalVars
            }
        }
    }
    var nw = {
        name: "this",
        next: null
    };

    function rw() {
        HP.state.context || (HP.state.localVars = nw), HP.state.context = {
            prev: HP.state.context,
            vars: HP.state.localVars
        }
    }

    function iw() {
        HP.state.localVars = HP.state.context.vars, HP.state.context = HP.state.context.prev
    }

    function aw(e, t) {
        var n = function() {
            var n = HP.state;
            n.lexical = new DP(n.indented, HP.stream.column(), e, null, n.lexical, t)
        };
        return n.lex = !0, n
    }

    function ow() {
        var e = HP.state;
        e.lexical.prev && (")" == e.lexical.type && (e.indented = e.lexical.indented), e.lexical = e.lexical.prev)
    }

    function sw(e) {
        return function t(n) {
            return n == e ? KP() : ";" == e ? JP() : KP(t)
        }
    }

    function Ow(e) {
        return "@" == e ? KP(pw) : "var" == e ? KP(aw("vardef"), Pw, sw(";"), ow) : "keyword a" == e ? KP(aw("form"), lw, Ow, ow) : "keyword b" == e ? KP(aw("form"), Ow, ow) : "{" == e ? KP(aw("}"), rw, xw, ow, iw) : ";" == e ? KP() : "attribute" == e ? KP(dw) : "function" == e ? KP(vw) : "for" == e ? KP(aw("form"), sw("("), aw(")"), kw, sw(")"), ow, Ow, ow) : "variable" == e ? KP(aw("stat"), gw) : "switch" == e ? KP(aw("form"), lw, aw("}", "switch"), sw("{"), xw, ow, ow) : "case" == e ? KP(lw, sw(":")) : "default" == e ? KP(sw(":")) : "catch" == e ? KP(aw("form"), rw, sw("("), Tw, sw(")"), Ow, ow, iw) : "import" == e ? KP(fw, sw(";")) : "typedef" == e ? KP(mw) : JP(aw("stat"), lw, sw(";"), ow)
    }

    function lw(e) {
        return NP.hasOwnProperty(e) || "type" == e ? KP(uw) : "function" == e ? KP(vw) : "keyword c" == e ? KP(cw) : "(" == e ? KP(aw(")"), cw, sw(")"), ow, uw) : "operator" == e ? KP(lw) : "[" == e ? KP(aw("]"), bw(cw, "]"), ow, uw) : "{" == e ? KP(aw("}"), bw($w, "}"), ow, uw) : KP()
    }

    function cw(e) {
        return e.match(/[;\}\)\],]/) ? JP() : JP(lw)
    }

    function uw(e, t) {
        return "operator" == e && /\+\+|--/.test(t) ? KP(uw) : "operator" == e || ":" == e ? KP(lw) : ";" != e ? "(" == e ? KP(aw(")"), bw(lw, ")"), ow, uw) : "." == e ? KP(Qw, uw) : "[" == e ? KP(aw("]"), lw, sw("]"), ow, uw) : void 0 : void 0
    }

    function dw(e) {
        return "attribute" == e ? KP(dw) : "function" == e ? KP(vw) : "var" == e ? KP(Pw) : void 0
    }

    function pw(e) {
        return ":" == e || "variable" == e ? KP(pw) : "(" == e ? KP(aw(")"), bw(hw, ")"), ow, Ow) : void 0
    }

    function hw(e) {
        if ("variable" == e) return KP()
    }

    function fw(e, t) {
        return "variable" == e && /[A-Z]/.test(t.charAt(0)) ? (FP(t), KP()) : "variable" == e || "property" == e || "." == e || "*" == t ? KP(fw) : void 0
    }

    function mw(e, t) {
        return "variable" == e && /[A-Z]/.test(t.charAt(0)) ? (FP(t), KP()) : "type" == e && /[A-Z]/.test(t.charAt(0)) ? KP() : void 0
    }

    function gw(e) {
        return ":" == e ? KP(ow, Ow) : JP(uw, sw(";"), ow)
    }

    function Qw(e) {
        if ("variable" == e) return HP.marked = "property", KP()
    }

    function $w(e) {
        if ("variable" == e && (HP.marked = "property"), NP.hasOwnProperty(e)) return KP(sw(":"), lw)
    }

    function bw(e, t) {
        function n(r) {
            return "," == r ? KP(e, n) : r == t ? KP() : KP(sw(t))
        }
        return function(r) {
            return r == t ? KP() : JP(e, n)
        }
    }

    function xw(e) {
        return "}" == e ? KP() : JP(Ow, xw)
    }

    function Pw(e, t) {
        return "variable" == e ? (tw(t), KP(Sw, ww)) : KP()
    }

    function ww(e, t) {
        return "=" == t ? KP(lw, ww) : "," == e ? KP(Pw) : void 0
    }

    function kw(e, t) {
        return "variable" == e ? (tw(t), KP(yw, lw)) : JP()
    }

    function yw(e, t) {
        if ("in" == t) return KP()
    }

    function vw(e, t) {
        return "variable" == e || "type" == e ? (tw(t), KP(vw)) : "new" == t ? KP(vw) : "(" == e ? KP(aw(")"), rw, bw(Tw, ")"), ow, Sw, Ow, iw) : void 0
    }

    function Sw(e) {
        if (":" == e) return KP(_w)
    }

    function _w(e) {
        return "type" == e || "variable" == e ? KP() : "{" == e ? KP(aw("}"), bw(Xw, "}"), ow) : void 0
    }

    function Xw(e) {
        if ("variable" == e) return KP(Sw)
    }

    function Tw(e, t) {
        if ("variable" == e) return tw(t), KP(Sw)
    }
    iw.lex = !0, ow.lex = !0;
    const Rw = {
        startState: function(e) {
            return {
                tokenize: GP,
                reAllowed: !0,
                kwAllowed: !0,
                cc: [],
                lexical: new DP(-e, 0, "block", !1),
                importedtypes: ["Int", "Float", "String", "Void", "Std", "Bool", "Dynamic", "Array"],
                context: null,
                indented: 0
            }
        },
        token: function(e, t) {
            if (e.sol() && (t.lexical.hasOwnProperty("align") || (t.lexical.align = !1), t.indented = e.indentation()), e.eatSpace()) return null;
            var n = t.tokenize(e, t);
            return "comment" == IP ? n : (t.reAllowed = !("operator" != IP && "keyword c" != IP && !IP.match(/^[\[{}\(,;:]$/)), t.kwAllowed = "." != IP, function(e, t, n, r, i) {
                var a = e.cc;
                for (HP.state = e, HP.stream = i, HP.marked = null, HP.cc = a, e.lexical.hasOwnProperty("align") || (e.lexical.align = !0);;)
                    if ((a.length ? a.pop() : Ow)(n, r)) {
                        for (; a.length && a[a.length - 1].lex;) a.pop()();
                        return HP.marked ? HP.marked : "variable" == n && MP(e, r) ? "variableName.local" : "variable" == n && BP(e, r) ? "variableName.special" : t
                    }
            }(t, n, IP, RP, e))
        },
        indent: function(e, t, n) {
            if (e.tokenize != GP) return 0;
            var r = t && t.charAt(0),
                i = e.lexical;
            "stat" == i.type && "}" == r && (i = i.prev);
            var a = i.type,
                o = r == a;
            return "vardef" == a ? i.indented + 4 : "form" == a && "{" == r ? i.indented : "stat" == a || "form" == a ? i.indented + n.unit : "switch" != i.info || o ? i.align ? i.column + (o ? 0 : 1) : i.indented + (o ? 0 : n.unit) : i.indented + (/^(?:case|default)\b/.test(t) ? n.unit : 2 * n.unit)
        },
        languageData: {
            indentOnInput: /^\s*[{}]$/,
            commentTokens: {
                line: "//",
                block: {
                    open: "/*",
                    close: "*/"
                }
            }
        }
    };
    var Ww = Object.freeze({
        __proto__: null,
        haxe: Rw,
        hxml: {
            startState: function() {
                return {
                    define: !1,
                    inString: !1
                }
            },
            token: function(e, t) {
                var n = e.peek(),
                    r = e.sol();
                if ("#" == n) return e.skipToEnd(), "comment";
                if (r && "-" == n) {
                    var i = "variable-2";
                    return e.eat(/-/), "-" == e.peek() && (e.eat(/-/), i = "keyword a"), "D" == e.peek() && (e.eat(/[D]/), i = "keyword c", t.define = !0), e.eatWhile(/[A-Z]/i), i
                }
                n = e.peek();
                return 0 == t.inString && "'" == n && (t.inString = !0, e.next()), 1 == t.inString ? (e.skipTo("'") || e.skipToEnd(), "'" == e.peek() && (e.next(), t.inString = !1), "string") : (e.next(), null)
            },
            languageData: {
                commentTokens: {
                    line: "#"
                }
            }
        }
    });

    function qw(e, t) {
        return e.skipToEnd(), t.cur = Uw, "error"
    }

    function Yw(e, t) {
        return e.match(/^HTTP\/\d\.\d/) ? (t.cur = zw, "keyword") : e.match(/^[A-Z]+/) && /[ \t]/.test(e.peek()) ? (t.cur = Ew, "keyword") : qw(e, t)
    }

    function zw(e, t) {
        var n = e.match(/^\d+/);
        if (!n) return qw(e, t);
        t.cur = Zw;
        var r = Number(n[0]);
        return r >= 100 && r < 400 ? "atom" : "error"
    }

    function Zw(e, t) {
        return e.skipToEnd(), t.cur = Uw, null
    }

    function Ew(e, t) {
        return e.eatWhile(/\S/), t.cur = Iw, "string.special"
    }

    function Iw(e, t) {
        return e.match(/^HTTP\/\d\.\d$/) ? (t.cur = Uw, "keyword") : qw(e, t)
    }

    function Uw(e) {
        return e.sol() && !e.eat(/[ \t]/) ? e.match(/^.*?:/) ? "atom" : (e.skipToEnd(), "error") : (e.skipToEnd(), "string")
    }

    function Vw(e) {
        return e.skipToEnd(), null
    }
    const jw = {
        token: function(e, t) {
            var n = t.cur;
            return n != Uw && n != Vw && e.eatSpace() ? null : n(e, t)
        },
        blankLine: function(e) {
            e.cur = Vw
        },
        startState: function() {
            return {
                cur: Yw
            }
        }
    };
    var Aw = Object.freeze({
        __proto__: null,
        http: jw
    });

    function Cw(e) {
        return new RegExp("^((" + e.join(")|(") + "))\\b", "i")
    }
    var Gw = ["a_correlate", "abs", "acos", "adapt_hist_equal", "alog", "alog2", "alog10", "amoeba", "annotate", "app_user_dir", "app_user_dir_query", "arg_present", "array_equal", "array_indices", "arrow", "ascii_template", "asin", "assoc", "atan", "axis", "axis", "bandpass_filter", "bandreject_filter", "barplot", "bar_plot", "beseli", "beselj", "beselk", "besely", "beta", "biginteger", "bilinear", "bin_date", "binary_template", "bindgen", "binomial", "bit_ffs", "bit_population", "blas_axpy", "blk_con", "boolarr", "boolean", "boxplot", "box_cursor", "breakpoint", "broyden", "bubbleplot", "butterworth", "bytarr", "byte", "byteorder", "bytscl", "c_correlate", "calendar", "caldat", "call_external", "call_function", "call_method", "call_procedure", "canny", "catch", "cd", "cdf", "ceil", "chebyshev", "check_math", "chisqr_cvf", "chisqr_pdf", "choldc", "cholsol", "cindgen", "cir_3pnt", "clipboard", "close", "clust_wts", "cluster", "cluster_tree", "cmyk_convert", "code_coverage", "color_convert", "color_exchange", "color_quan", "color_range_map", "colorbar", "colorize_sample", "colormap_applicable", "colormap_gradient", "colormap_rotation", "colortable", "comfit", "command_line_args", "common", "compile_opt", "complex", "complexarr", "complexround", "compute_mesh_normals", "cond", "congrid", "conj", "constrained_min", "contour", "contour", "convert_coord", "convol", "convol_fft", "coord2to3", "copy_lun", "correlate", "cos", "cosh", "cpu", "cramer", "createboxplotdata", "create_cursor", "create_struct", "create_view", "crossp", "crvlength", "ct_luminance", "cti_test", "cursor", "curvefit", "cv_coord", "cvttobm", "cw_animate", "cw_animate_getp", "cw_animate_load", "cw_animate_run", "cw_arcball", "cw_bgroup", "cw_clr_index", "cw_colorsel", "cw_defroi", "cw_field", "cw_filesel", "cw_form", "cw_fslider", "cw_light_editor", "cw_light_editor_get", "cw_light_editor_set", "cw_orient", "cw_palette_editor", "cw_palette_editor_get", "cw_palette_editor_set", "cw_pdmenu", "cw_rgbslider", "cw_tmpl", "cw_zoom", "db_exists", "dblarr", "dcindgen", "dcomplex", "dcomplexarr", "define_key", "define_msgblk", "define_msgblk_from_file", "defroi", "defsysv", "delvar", "dendro_plot", "dendrogram", "deriv", "derivsig", "determ", "device", "dfpmin", "diag_matrix", "dialog_dbconnect", "dialog_message", "dialog_pickfile", "dialog_printersetup", "dialog_printjob", "dialog_read_image", "dialog_write_image", "dictionary", "digital_filter", "dilate", "dindgen", "dissolve", "dist", "distance_measure", "dlm_load", "dlm_register", "doc_library", "double", "draw_roi", "edge_dog", "efont", "eigenql", "eigenvec", "ellipse", "elmhes", "emboss", "empty", "enable_sysrtn", "eof", "eos", "erase", "erf", "erfc", "erfcx", "erode", "errorplot", "errplot", "estimator_filter", "execute", "exit", "exp", "expand", "expand_path", "expint", "extract", "extract_slice", "f_cvf", "f_pdf", "factorial", "fft", "file_basename", "file_chmod", "file_copy", "file_delete", "file_dirname", "file_expand_path", "file_gunzip", "file_gzip", "file_info", "file_lines", "file_link", "file_mkdir", "file_move", "file_poll_input", "file_readlink", "file_same", "file_search", "file_tar", "file_test", "file_untar", "file_unzip", "file_which", "file_zip", "filepath", "findgen", "finite", "fix", "flick", "float", "floor", "flow3", "fltarr", "flush", "format_axis_values", "forward_function", "free_lun", "fstat", "fulstr", "funct", "function", "fv_test", "fx_root", "fz_roots", "gamma", "gamma_ct", "gauss_cvf", "gauss_pdf", "gauss_smooth", "gauss2dfit", "gaussfit", "gaussian_function", "gaussint", "get_drive_list", "get_dxf_objects", "get_kbrd", "get_login_info", "get_lun", "get_screen_size", "getenv", "getwindows", "greg2jul", "grib", "grid_input", "grid_tps", "grid3", "griddata", "gs_iter", "h_eq_ct", "h_eq_int", "hanning", "hash", "hdf", "hdf5", "heap_free", "heap_gc", "heap_nosave", "heap_refcount", "heap_save", "help", "hilbert", "hist_2d", "hist_equal", "histogram", "hls", "hough", "hqr", "hsv", "i18n_multibytetoutf8", "i18n_multibytetowidechar", "i18n_utf8tomultibyte", "i18n_widechartomultibyte", "ibeta", "icontour", "iconvertcoord", "idelete", "identity", "idl_base64", "idl_container", "idl_validname", "idlexbr_assistant", "idlitsys_createtool", "idlunit", "iellipse", "igamma", "igetcurrent", "igetdata", "igetid", "igetproperty", "iimage", "image", "image_cont", "image_statistics", "image_threshold", "imaginary", "imap", "indgen", "int_2d", "int_3d", "int_tabulated", "intarr", "interpol", "interpolate", "interval_volume", "invert", "ioctl", "iopen", "ir_filter", "iplot", "ipolygon", "ipolyline", "iputdata", "iregister", "ireset", "iresolve", "irotate", "isa", "isave", "iscale", "isetcurrent", "isetproperty", "ishft", "isocontour", "isosurface", "isurface", "itext", "itranslate", "ivector", "ivolume", "izoom", "journal", "json_parse", "json_serialize", "jul2greg", "julday", "keyword_set", "krig2d", "kurtosis", "kw_test", "l64indgen", "la_choldc", "la_cholmprove", "la_cholsol", "la_determ", "la_eigenproblem", "la_eigenql", "la_eigenvec", "la_elmhes", "la_gm_linear_model", "la_hqr", "la_invert", "la_least_square_equality", "la_least_squares", "la_linear_equation", "la_ludc", "la_lumprove", "la_lusol", "la_svd", "la_tridc", "la_trimprove", "la_triql", "la_trired", "la_trisol", "label_date", "label_region", "ladfit", "laguerre", "lambda", "lambdap", "lambertw", "laplacian", "least_squares_filter", "leefilt", "legend", "legendre", "linbcg", "lindgen", "linfit", "linkimage", "list", "ll_arc_distance", "lmfit", "lmgr", "lngamma", "lnp_test", "loadct", "locale_get", "logical_and", "logical_or", "logical_true", "lon64arr", "lonarr", "long", "long64", "lsode", "lu_complex", "ludc", "lumprove", "lusol", "m_correlate", "machar", "make_array", "make_dll", "make_rt", "map", "mapcontinents", "mapgrid", "map_2points", "map_continents", "map_grid", "map_image", "map_patch", "map_proj_forward", "map_proj_image", "map_proj_info", "map_proj_init", "map_proj_inverse", "map_set", "matrix_multiply", "matrix_power", "max", "md_test", "mean", "meanabsdev", "mean_filter", "median", "memory", "mesh_clip", "mesh_decimate", "mesh_issolid", "mesh_merge", "mesh_numtriangles", "mesh_obj", "mesh_smooth", "mesh_surfacearea", "mesh_validate", "mesh_volume", "message", "min", "min_curve_surf", "mk_html_help", "modifyct", "moment", "morph_close", "morph_distance", "morph_gradient", "morph_hitormiss", "morph_open", "morph_thin", "morph_tophat", "multi", "n_elements", "n_params", "n_tags", "ncdf", "newton", "noise_hurl", "noise_pick", "noise_scatter", "noise_slur", "norm", "obj_class", "obj_destroy", "obj_hasmethod", "obj_isa", "obj_new", "obj_valid", "objarr", "on_error", "on_ioerror", "online_help", "openr", "openu", "openw", "oplot", "oploterr", "orderedhash", "p_correlate", "parse_url", "particle_trace", "path_cache", "path_sep", "pcomp", "plot", "plot3d", "plot", "plot_3dbox", "plot_field", "ploterr", "plots", "polar_contour", "polar_surface", "polyfill", "polyshade", "pnt_line", "point_lun", "polarplot", "poly", "poly_2d", "poly_area", "poly_fit", "polyfillv", "polygon", "polyline", "polywarp", "popd", "powell", "pref_commit", "pref_get", "pref_set", "prewitt", "primes", "print", "printf", "printd", "pro", "product", "profile", "profiler", "profiles", "project_vol", "ps_show_fonts", "psafm", "pseudo", "ptr_free", "ptr_new", "ptr_valid", "ptrarr", "pushd", "qgrid3", "qhull", "qromb", "qromo", "qsimp", "query_*", "query_ascii", "query_bmp", "query_csv", "query_dicom", "query_gif", "query_image", "query_jpeg", "query_jpeg2000", "query_mrsid", "query_pict", "query_png", "query_ppm", "query_srf", "query_tiff", "query_video", "query_wav", "r_correlate", "r_test", "radon", "randomn", "randomu", "ranks", "rdpix", "read", "readf", "read_ascii", "read_binary", "read_bmp", "read_csv", "read_dicom", "read_gif", "read_image", "read_interfile", "read_jpeg", "read_jpeg2000", "read_mrsid", "read_pict", "read_png", "read_ppm", "read_spr", "read_srf", "read_sylk", "read_tiff", "read_video", "read_wav", "read_wave", "read_x11_bitmap", "read_xwd", "reads", "readu", "real_part", "rebin", "recall_commands", "recon3", "reduce_colors", "reform", "region_grow", "register_cursor", "regress", "replicate", "replicate_inplace", "resolve_all", "resolve_routine", "restore", "retall", "return", "reverse", "rk4", "roberts", "rot", "rotate", "round", "routine_filepath", "routine_info", "rs_test", "s_test", "save", "savgol", "scale3", "scale3d", "scatterplot", "scatterplot3d", "scope_level", "scope_traceback", "scope_varfetch", "scope_varname", "search2d", "search3d", "sem_create", "sem_delete", "sem_lock", "sem_release", "set_plot", "set_shading", "setenv", "sfit", "shade_surf", "shade_surf_irr", "shade_volume", "shift", "shift_diff", "shmdebug", "shmmap", "shmunmap", "shmvar", "show3", "showfont", "signum", "simplex", "sin", "sindgen", "sinh", "size", "skewness", "skip_lun", "slicer3", "slide_image", "smooth", "sobel", "socket", "sort", "spawn", "sph_4pnt", "sph_scat", "spher_harm", "spl_init", "spl_interp", "spline", "spline_p", "sprsab", "sprsax", "sprsin", "sprstp", "sqrt", "standardize", "stddev", "stop", "strarr", "strcmp", "strcompress", "streamline", "streamline", "stregex", "stretch", "string", "strjoin", "strlen", "strlowcase", "strmatch", "strmessage", "strmid", "strpos", "strput", "strsplit", "strtrim", "struct_assign", "struct_hide", "strupcase", "surface", "surface", "surfr", "svdc", "svdfit", "svsol", "swap_endian", "swap_endian_inplace", "symbol", "systime", "t_cvf", "t_pdf", "t3d", "tag_names", "tan", "tanh", "tek_color", "temporary", "terminal_size", "tetra_clip", "tetra_surface", "tetra_volume", "text", "thin", "thread", "threed", "tic", "time_test2", "timegen", "timer", "timestamp", "timestamptovalues", "tm_test", "toc", "total", "trace", "transpose", "tri_surf", "triangulate", "trigrid", "triql", "trired", "trisol", "truncate_lun", "ts_coef", "ts_diff", "ts_fcast", "ts_smooth", "tv", "tvcrs", "tvlct", "tvrd", "tvscl", "typename", "uindgen", "uint", "uintarr", "ul64indgen", "ulindgen", "ulon64arr", "ulonarr", "ulong", "ulong64", "uniq", "unsharp_mask", "usersym", "value_locate", "variance", "vector", "vector_field", "vel", "velovect", "vert_t3d", "voigt", "volume", "voronoi", "voxel_proj", "wait", "warp_tri", "watershed", "wdelete", "wf_draw", "where", "widget_base", "widget_button", "widget_combobox", "widget_control", "widget_displaycontextmenu", "widget_draw", "widget_droplist", "widget_event", "widget_info", "widget_label", "widget_list", "widget_propertysheet", "widget_slider", "widget_tab", "widget_table", "widget_text", "widget_tree", "widget_tree_move", "widget_window", "wiener_filter", "window", "window", "write_bmp", "write_csv", "write_gif", "write_image", "write_jpeg", "write_jpeg2000", "write_nrif", "write_pict", "write_png", "write_ppm", "write_spr", "write_srf", "write_sylk", "write_tiff", "write_video", "write_wav", "write_wave", "writeu", "wset", "wshow", "wtn", "wv_applet", "wv_cwt", "wv_cw_wavelet", "wv_denoise", "wv_dwt", "wv_fn_coiflet", "wv_fn_daubechies", "wv_fn_gaussian", "wv_fn_haar", "wv_fn_morlet", "wv_fn_paul", "wv_fn_symlet", "wv_import_data", "wv_import_wavelet", "wv_plot3d_wps", "wv_plot_multires", "wv_pwt", "wv_tool_denoise", "xbm_edit", "xdisplayfile", "xdxf", "xfont", "xinteranimate", "xloadct", "xmanager", "xmng_tmpl", "xmtool", "xobjview", "xobjview_rotate", "xobjview_write_image", "xpalette", "xpcolor", "xplot3d", "xregistered", "xroi", "xsq_test", "xsurface", "xvaredit", "xvolume", "xvolume_rotate", "xvolume_write_image", "xyouts", "zlib_compress", "zlib_uncompress", "zoom", "zoom_24"],
        Lw = Cw(Gw),
        Nw = ["begin", "end", "endcase", "endfor", "endwhile", "endif", "endrep", "endforeach", "break", "case", "continue", "for", "foreach", "goto", "if", "then", "else", "repeat", "until", "switch", "while", "do", "pro", "function"],
        Dw = Cw(Nw),
        Mw = new RegExp("^[_a-z¡-][_a-z0-9¡-]*", "i"),
        Bw = /[+\-*&=<>\/@#~$]/,
        Fw = new RegExp("(and|or|eq|lt|le|gt|ge|ne|not)", "i");
    const Hw = {
        token: function(e) {
            return function(e) {
                if (e.eatSpace()) return null;
                if (e.match(";")) return e.skipToEnd(), "comment";
                if (e.match(/^[0-9\.+-]/, !1)) {
                    if (e.match(/^[+-]?0x[0-9a-fA-F]+/)) return "number";
                    if (e.match(/^[+-]?\d*\.\d+([EeDd][+-]?\d+)?/)) return "number";
                    if (e.match(/^[+-]?\d+([EeDd][+-]?\d+)?/)) return "number"
                }
                return e.match(/^"([^"]|(""))*"/) || e.match(/^'([^']|(''))*'/) ? "string" : e.match(Dw) ? "keyword" : e.match(Lw) ? "builtin" : e.match(Mw) ? "variable" : e.match(Bw) || e.match(Fw) ? "operator" : (e.next(), null)
            }(e)
        },
        languageData: {
            autocomplete: Gw.concat(Nw)
        }
    };
    var Jw = Object.freeze({
        __proto__: null,
        idl: Hw
    });

    function Kw(e) {
        var t, n, r = e.statementIndent,
            i = e.jsonld,
            a = e.json || i,
            o = e.typescript,
            s = e.wordCharacters || /[\w$\xa1-\uffff]/,
            O = function() {
                function e(e) {
                    return {
                        type: e,
                        style: "keyword"
                    }
                }
                var t = e("keyword a"),
                    n = e("keyword b"),
                    r = e("keyword c"),
                    i = e("keyword d"),
                    a = e("operator"),
                    o = {
                        type: "atom",
                        style: "atom"
                    };
                return {
                    if: e("if"),
                    while: t,
                    with: t,
                    else: n,
                    do: n,
                    try: n,
                    finally: n,
                    return: i,
                    break: i,
                    continue: i,
                    new: e("new"),
                    delete: r,
                    void: r,
                    throw: r,
                    debugger: e("debugger"),
                    var: e("var"),
                    const: e("var"),
                    let: e("var"),
                    function: e("function"),
                    catch: e("catch"),
                    for: e("for"),
                    switch: e("switch"),
                    case: e("case"),
                    default: e("default"),
                    in: a,
                    typeof: a,
                    instanceof: a,
                    true: o,
                    false: o,
                    null: o,
                    undefined: o,
                    NaN: o,
                    Infinity: o,
                    this: e("this"),
                    class: e("class"),
                    super: e("atom"),
                    yield: r,
                    export: e("export"),
                    import: e("import"),
                    extends: r,
                    await: r
                }
            }(),
            l = /[+\-*&%=<>!?|~^@]/,
            c = /^@(context|id|value|language|type|container|list|set|reverse|index|base|vocab|graph)"/;

        function u(e, r, i) {
            return t = e, n = i, r
        }

        function d(e, t) {
            var n = e.next();
            if ('"' == n || "'" == n) return t.tokenize = function(e) {
                return function(t, n) {
                    var r, a = !1;
                    if (i && "@" == t.peek() && t.match(c)) return n.tokenize = d, u("jsonld-keyword", "meta");
                    for (; null != (r = t.next()) && (r != e || a);) a = !a && "\\" == r;
                    return a || (n.tokenize = d), u("string", "string")
                }
            }(n), t.tokenize(e, t);
            if ("." == n && e.match(/^\d[\d_]*(?:[eE][+\-]?[\d_]+)?/)) return u("number", "number");
            if ("." == n && e.match("..")) return u("spread", "meta");
            if (/[\[\]{}\(\),;\:\.]/.test(n)) return u(n);
            if ("=" == n && e.eat(">")) return u("=>", "operator");
            if ("0" == n && e.match(/^(?:x[\dA-Fa-f_]+|o[0-7_]+|b[01_]+)n?/)) return u("number", "number");
            if (/\d/.test(n)) return e.match(/^[\d_]*(?:n|(?:\.[\d_]*)?(?:[eE][+\-]?[\d_]+)?)?/), u("number", "number");
            if ("/" == n) return e.eat("*") ? (t.tokenize = p, p(e, t)) : e.eat("/") ? (e.skipToEnd(), u("comment", "comment")) : function(e, t, n) {
                return t.tokenize == d && /^(?:operator|sof|keyword [bcd]|case|new|export|default|spread|[\[{}\(,;:]|=>)$/.test(t.lastType) || "quasi" == t.lastType && /\{\s*$/.test(e.string.slice(0, e.pos - (n || 0)))
            }(e, t, 1) ? (function(e) {
                for (var t, n = !1, r = !1; null != (t = e.next());) {
                    if (!n) {
                        if ("/" == t && !r) return;
                        "[" == t ? r = !0 : r && "]" == t && (r = !1)
                    }
                    n = !n && "\\" == t
                }
            }(e), e.match(/^\b(([gimyus])(?![gimyus]*\2))+\b/), u("regexp", "string.special")) : (e.eat("="), u("operator", "operator", e.current()));
            if ("`" == n) return t.tokenize = h, h(e, t);
            if ("#" == n && "!" == e.peek()) return e.skipToEnd(), u("meta", "meta");
            if ("#" == n && e.eatWhile(s)) return u("variable", "property");
            if ("<" == n && e.match("!--") || "-" == n && e.match("->") && !/\S/.test(e.string.slice(0, e.start))) return e.skipToEnd(), u("comment", "comment");
            if (l.test(n)) return ">" == n && t.lexical && ">" == t.lexical.type || (e.eat("=") ? "!" != n && "=" != n || e.eat("=") : /[<>*+\-|&?]/.test(n) && (e.eat(n), ">" == n && e.eat(n))), "?" == n && e.eat(".") ? u(".") : u("operator", "operator", e.current());
            if (s.test(n)) {
                e.eatWhile(s);
                var r = e.current();
                if ("." != t.lastType) {
                    if (O.propertyIsEnumerable(r)) {
                        var a = O[r];
                        return u(a.type, a.style, r)
                    }
                    if ("async" == r && e.match(/^(\s|\/\*([^*]|\*(?!\/))*?\*\/)*[\[\(\w]/, !1)) return u("async", "keyword", r)
                }
                return u("variable", "variable", r)
            }
        }

        function p(e, t) {
            for (var n, r = !1; n = e.next();) {
                if ("/" == n && r) {
                    t.tokenize = d;
                    break
                }
                r = "*" == n
            }
            return u("comment", "comment")
        }

        function h(e, t) {
            for (var n, r = !1; null != (n = e.next());) {
                if (!r && ("`" == n || "$" == n && e.eat("{"))) {
                    t.tokenize = d;
                    break
                }
                r = !r && "\\" == n
            }
            return u("quasi", "string.special", e.current())
        }

        function f(e, t) {
            t.fatArrowAt && (t.fatArrowAt = null);
            var n = e.string.indexOf("=>", e.start);
            if (!(n < 0)) {
                if (o) {
                    var r = /:\s*(?:\w+(?:<[^>]*>|\[\])?|\{[^}]*\})\s*$/.exec(e.string.slice(e.start, n));
                    r && (n = r.index)
                }
                for (var i = 0, a = !1, O = n - 1; O >= 0; --O) {
                    var l = e.string.charAt(O),
                        c = "([{}])".indexOf(l);
                    if (c >= 0 && c < 3) {
                        if (!i) {
                            ++O;
                            break
                        }
                        if (0 == --i) {
                            "(" == l && (a = !0);
                            break
                        }
                    } else if (c >= 3 && c < 6) ++i;
                    else if (s.test(l)) a = !0;
                    else if (/["'\/`]/.test(l))
                        for (;; --O) {
                            if (0 == O) return;
                            if (e.string.charAt(O - 1) == l && "\\" != e.string.charAt(O - 2)) {
                                O--;
                                break
                            }
                        } else if (a && !i) {
                            ++O;
                            break
                        }
                }
                a && !i && (t.fatArrowAt = O)
            }
        }
        var m = {
            atom: !0,
            number: !0,
            variable: !0,
            string: !0,
            regexp: !0,
            this: !0,
            import: !0,
            "jsonld-keyword": !0
        };

        function g(e, t, n, r, i, a) {
            this.indented = e, this.column = t, this.type = n, this.prev = i, this.info = a, null != r && (this.align = r)
        }

        function Q(e, t) {
            for (var n = e.localVars; n; n = n.next)
                if (n.name == t) return !0;
            for (var r = e.context; r; r = r.prev)
                for (n = r.vars; n; n = n.next)
                    if (n.name == t) return !0
        }
        var $ = {
            state: null,
            column: null,
            marked: null,
            cc: null
        };

        function b() {
            for (var e = arguments.length - 1; e >= 0; e--) $.cc.push(arguments[e])
        }

        function x() {
            return b.apply(null, arguments), !0
        }

        function P(e, t) {
            for (var n = t; n; n = n.next)
                if (n.name == e) return !0;
            return !1
        }

        function w(t) {
            var n = $.state;
            if ($.marked = "def", n.context)
                if ("var" == n.lexical.info && n.context && n.context.block) {
                    var r = k(t, n.context);
                    if (null != r) return void(n.context = r)
                } else if (!P(t, n.localVars)) return void(n.localVars = new S(t, n.localVars));
            e.globalVars && !P(t, n.globalVars) && (n.globalVars = new S(t, n.globalVars))
        }

        function k(e, t) {
            if (t) {
                if (t.block) {
                    var n = k(e, t.prev);
                    return n ? n == t.prev ? t : new v(n, t.vars, !0) : null
                }
                return P(e, t.vars) ? t : new v(t.prev, new S(e, t.vars), !1)
            }
            return null
        }

        function y(e) {
            return "public" == e || "private" == e || "protected" == e || "abstract" == e || "readonly" == e
        }

        function v(e, t, n) {
            this.prev = e, this.vars = t, this.block = n
        }

        function S(e, t) {
            this.name = e, this.next = t
        }
        var _ = new S("this", new S("arguments", null));

        function X() {
            $.state.context = new v($.state.context, $.state.localVars, !1), $.state.localVars = _
        }

        function T() {
            $.state.context = new v($.state.context, $.state.localVars, !0), $.state.localVars = null
        }

        function R() {
            $.state.localVars = $.state.context.vars, $.state.context = $.state.context.prev
        }

        function W(e, t) {
            var n = function() {
                var n = $.state,
                    r = n.indented;
                if ("stat" == n.lexical.type) r = n.lexical.indented;
                else
                    for (var i = n.lexical; i && ")" == i.type && i.align; i = i.prev) r = i.indented;
                n.lexical = new g(r, $.stream.column(), e, null, n.lexical, t)
            };
            return n.lex = !0, n
        }

        function q() {
            var e = $.state;
            e.lexical.prev && (")" == e.lexical.type && (e.indented = e.lexical.indented), e.lexical = e.lexical.prev)
        }

        function Y(e) {
            return function t(n) {
                return n == e ? x() : ";" == e || "}" == n || ")" == n || "]" == n ? b() : x(t)
            }
        }

        function z(e, t) {
            return "var" == e ? x(W("vardef", t), ge, Y(";"), q) : "keyword a" == e ? x(W("form"), U, z, q) : "keyword b" == e ? x(W("form"), z, q) : "keyword d" == e ? $.stream.match(/^\s*$/, !1) ? x() : x(W("stat"), j, Y(";"), q) : "debugger" == e ? x(Y(";")) : "{" == e ? x(W("}"), T, re, q, R) : ";" == e ? x() : "if" == e ? ("else" == $.state.lexical.info && $.state.cc[$.state.cc.length - 1] == q && $.state.cc.pop()(), x(W("form"), U, z, q, we)) : "function" == e ? x(Se) : "for" == e ? x(W("form"), ke, z, q) : "class" == e || o && "interface" == t ? ($.marked = "keyword", x(W("form", "class" == e ? e : t), We, q)) : "variable" == e ? o && "declare" == t ? ($.marked = "keyword", x(z)) : o && ("module" == t || "enum" == t || "type" == t) && $.stream.match(/^\s*\w/, !1) ? ($.marked = "keyword", "enum" == t ? x(Ge) : "type" == t ? x(Xe, Y("operator"), Oe, Y(";")) : x(W("form"), Qe, Y("{"), W("}"), re, q, q)) : o && "namespace" == t ? ($.marked = "keyword", x(W("form"), E, z, q)) : o && "abstract" == t ? ($.marked = "keyword", x(z)) : x(W("stat"), F) : "switch" == e ? x(W("form"), U, Y("{"), W("}", "switch"), T, re, q, q, R) : "case" == e ? x(E, Y(":")) : "default" == e ? x(Y(":")) : "catch" == e ? x(W("form"), X, Z, z, q, R) : "export" == e ? x(W("stat"), Ze, q) : "import" == e ? x(W("stat"), Ie, q) : "async" == e ? x(z) : "@" == t ? x(E, z) : b(W("stat"), E, Y(";"), q)
        }

        function Z(e) {
            if ("(" == e) return x(Te, Y(")"))
        }

        function E(e, t) {
            return V(e, t, !1)
        }

        function I(e, t) {
            return V(e, t, !0)
        }

        function U(e) {
            return "(" != e ? b() : x(W(")"), j, Y(")"), q)
        }

        function V(e, t, n) {
            if ($.state.fatArrowAt == $.stream.start) {
                var r = n ? D : N;
                if ("(" == e) return x(X, W(")"), te(Te, ")"), q, Y("=>"), r, R);
                if ("variable" == e) return b(X, Qe, Y("=>"), r, R)
            }
            var i = n ? C : A;
            return m.hasOwnProperty(e) ? x(i) : "function" == e ? x(Se, i) : "class" == e || o && "interface" == t ? ($.marked = "keyword", x(W("form"), Re, q)) : "keyword c" == e || "async" == e ? x(n ? I : E) : "(" == e ? x(W(")"), j, Y(")"), q, i) : "operator" == e || "spread" == e ? x(n ? I : E) : "[" == e ? x(W("]"), Ce, q, i) : "{" == e ? ne(J, "}", null, i) : "quasi" == e ? b(G, i) : "new" == e ? x(function(e) {
                return function(t) {
                    return "." == t ? x(e ? B : M) : "variable" == t && o ? x(he, e ? C : A) : b(e ? I : E)
                }
            }(n)) : x()
        }

        function j(e) {
            return e.match(/[;\}\)\],]/) ? b() : b(E)
        }

        function A(e, t) {
            return "," == e ? x(j) : C(e, t, !1)
        }

        function C(e, t, n) {
            var r = 0 == n ? A : C,
                i = 0 == n ? E : I;
            return "=>" == e ? x(X, n ? D : N, R) : "operator" == e ? /\+\+|--/.test(t) || o && "!" == t ? x(r) : o && "<" == t && $.stream.match(/^([^<>]|<[^<>]*>)*>\s*\(/, !1) ? x(W(">"), te(Oe, ">"), q, r) : "?" == t ? x(E, Y(":"), i) : x(i) : "quasi" == e ? b(G, r) : ";" != e ? "(" == e ? ne(I, ")", "call", r) : "." == e ? x(H, r) : "[" == e ? x(W("]"), j, Y("]"), q, r) : o && "as" == t ? ($.marked = "keyword", x(Oe, r)) : "regexp" == e ? ($.state.lastType = $.marked = "operator", $.stream.backUp($.stream.pos - $.stream.start - 1), x(i)) : void 0 : void 0
        }

        function G(e, t) {
            return "quasi" != e ? b() : "${" != t.slice(t.length - 2) ? x(G) : x(E, L)
        }

        function L(e) {
            if ("}" == e) return $.marked = "string.special", $.state.tokenize = h, x(G)
        }

        function N(e) {
            return f($.stream, $.state), b("{" == e ? z : E)
        }

        function D(e) {
            return f($.stream, $.state), b("{" == e ? z : I)
        }

        function M(e, t) {
            if ("target" == t) return $.marked = "keyword", x(A)
        }

        function B(e, t) {
            if ("target" == t) return $.marked = "keyword", x(C)
        }

        function F(e) {
            return ":" == e ? x(q, z) : b(A, Y(";"), q)
        }

        function H(e) {
            if ("variable" == e) return $.marked = "property", x()
        }

        function J(e, t) {
            return "async" == e ? ($.marked = "property", x(J)) : "variable" == e || "keyword" == $.style ? ($.marked = "property", "get" == t || "set" == t ? x(K) : (o && $.state.fatArrowAt == $.stream.start && (n = $.stream.match(/^\s*:\s*/, !1)) && ($.state.fatArrowAt = $.stream.pos + n[0].length), x(ee))) : "number" == e || "string" == e ? ($.marked = i ? "property" : $.style + " property", x(ee)) : "jsonld-keyword" == e ? x(ee) : o && y(t) ? ($.marked = "keyword", x(J)) : "[" == e ? x(E, ie, Y("]"), ee) : "spread" == e ? x(I, ee) : "*" == t ? ($.marked = "keyword", x(J)) : ":" == e ? b(ee) : void 0;
            var n
        }

        function K(e) {
            return "variable" != e ? b(ee) : ($.marked = "property", x(Se))
        }

        function ee(e) {
            return ":" == e ? x(I) : "(" == e ? b(Se) : void 0
        }

        function te(e, t, n) {
            function r(i, a) {
                if (n ? n.indexOf(i) > -1 : "," == i) {
                    var o = $.state.lexical;
                    return "call" == o.info && (o.pos = (o.pos || 0) + 1), x((function(n, r) {
                        return n == t || r == t ? b() : b(e)
                    }), r)
                }
                return i == t || a == t ? x() : n && n.indexOf(";") > -1 ? b(e) : x(Y(t))
            }
            return function(n, i) {
                return n == t || i == t ? x() : b(e, r)
            }
        }

        function ne(e, t, n) {
            for (var r = 3; r < arguments.length; r++) $.cc.push(arguments[r]);
            return x(W(t, n), te(e, t), q)
        }

        function re(e) {
            return "}" == e ? x() : b(z, re)
        }

        function ie(e, t) {
            if (o) {
                if (":" == e) return x(Oe);
                if ("?" == t) return x(ie)
            }
        }

        function ae(e, t) {
            if (o && (":" == e || "in" == t)) return x(Oe)
        }

        function oe(e) {
            if (o && ":" == e) return $.stream.match(/^\s*\w+\s+is\b/, !1) ? x(E, se, Oe) : x(Oe)
        }

        function se(e, t) {
            if ("is" == t) return $.marked = "keyword", x()
        }

        function Oe(e, t) {
            return "keyof" == t || "typeof" == t || "infer" == t ? ($.marked = "keyword", x("typeof" == t ? I : Oe)) : "variable" == e || "void" == t ? ($.marked = "type", x(pe)) : "|" == t || "&" == t ? x(Oe) : "string" == e || "number" == e || "atom" == e ? x(pe) : "[" == e ? x(W("]"), te(Oe, "]", ","), q, pe) : "{" == e ? x(W("}"), ce, q, pe) : "(" == e ? x(te(de, ")"), le, pe) : "<" == e ? x(te(Oe, ">"), Oe) : void 0
        }

        function le(e) {
            if ("=>" == e) return x(Oe)
        }

        function ce(e) {
            return e.match(/[\}\)\]]/) ? x() : "," == e || ";" == e ? x(ce) : b(ue, ce)
        }

        function ue(e, t) {
            return "variable" == e || "keyword" == $.style ? ($.marked = "property", x(ue)) : "?" == t || "number" == e || "string" == e ? x(ue) : ":" == e ? x(Oe) : "[" == e ? x(Y("variable"), ae, Y("]"), ue) : "(" == e ? b(_e, ue) : e.match(/[;\}\)\],]/) ? void 0 : x()
        }

        function de(e, t) {
            return "variable" == e && $.stream.match(/^\s*[?:]/, !1) || "?" == t ? x(de) : ":" == e ? x(Oe) : "spread" == e ? x(de) : b(Oe)
        }

        function pe(e, t) {
            return "<" == t ? x(W(">"), te(Oe, ">"), q, pe) : "|" == t || "." == e || "&" == t ? x(Oe) : "[" == e ? x(Oe, Y("]"), pe) : "extends" == t || "implements" == t ? ($.marked = "keyword", x(Oe)) : "?" == t ? x(Oe, Y(":"), Oe) : void 0
        }

        function he(e, t) {
            if ("<" == t) return x(W(">"), te(Oe, ">"), q, pe)
        }

        function fe() {
            return b(Oe, me)
        }

        function me(e, t) {
            if ("=" == t) return x(Oe)
        }

        function ge(e, t) {
            return "enum" == t ? ($.marked = "keyword", x(Ge)) : b(Qe, ie, xe, Pe)
        }

        function Qe(e, t) {
            return o && y(t) ? ($.marked = "keyword", x(Qe)) : "variable" == e ? (w(t), x()) : "spread" == e ? x(Qe) : "[" == e ? ne(be, "]") : "{" == e ? ne($e, "}") : void 0
        }

        function $e(e, t) {
            return "variable" != e || $.stream.match(/^\s*:/, !1) ? ("variable" == e && ($.marked = "property"), "spread" == e ? x(Qe) : "}" == e ? b() : "[" == e ? x(E, Y("]"), Y(":"), $e) : x(Y(":"), Qe, xe)) : (w(t), x(xe))
        }

        function be() {
            return b(Qe, xe)
        }

        function xe(e, t) {
            if ("=" == t) return x(I)
        }

        function Pe(e) {
            if ("," == e) return x(ge)
        }

        function we(e, t) {
            if ("keyword b" == e && "else" == t) return x(W("form", "else"), z, q)
        }

        function ke(e, t) {
            return "await" == t ? x(ke) : "(" == e ? x(W(")"), ye, q) : void 0
        }

        function ye(e) {
            return "var" == e ? x(ge, ve) : "variable" == e ? x(ve) : b(ve)
        }

        function ve(e, t) {
            return ")" == e ? x() : ";" == e ? x(ve) : "in" == t || "of" == t ? ($.marked = "keyword", x(E, ve)) : b(E, ve)
        }

        function Se(e, t) {
            return "*" == t ? ($.marked = "keyword", x(Se)) : "variable" == e ? (w(t), x(Se)) : "(" == e ? x(X, W(")"), te(Te, ")"), q, oe, z, R) : o && "<" == t ? x(W(">"), te(fe, ">"), q, Se) : void 0
        }

        function _e(e, t) {
            return "*" == t ? ($.marked = "keyword", x(_e)) : "variable" == e ? (w(t), x(_e)) : "(" == e ? x(X, W(")"), te(Te, ")"), q, oe, R) : o && "<" == t ? x(W(">"), te(fe, ">"), q, _e) : void 0
        }

        function Xe(e, t) {
            return "keyword" == e || "variable" == e ? ($.marked = "type", x(Xe)) : "<" == t ? x(W(">"), te(fe, ">"), q) : void 0
        }

        function Te(e, t) {
            return "@" == t && x(E, Te), "spread" == e ? x(Te) : o && y(t) ? ($.marked = "keyword", x(Te)) : o && "this" == e ? x(ie, xe) : b(Qe, ie, xe)
        }

        function Re(e, t) {
            return "variable" == e ? We(e, t) : qe(e, t)
        }

        function We(e, t) {
            if ("variable" == e) return w(t), x(qe)
        }

        function qe(e, t) {
            return "<" == t ? x(W(">"), te(fe, ">"), q, qe) : "extends" == t || "implements" == t || o && "," == e ? ("implements" == t && ($.marked = "keyword"), x(o ? Oe : E, qe)) : "{" == e ? x(W("}"), Ye, q) : void 0
        }

        function Ye(e, t) {
            return "async" == e || "variable" == e && ("static" == t || "get" == t || "set" == t || o && y(t)) && $.stream.match(/^\s+[\w$\xa1-\uffff]/, !1) ? ($.marked = "keyword", x(Ye)) : "variable" == e || "keyword" == $.style ? ($.marked = "property", x(ze, Ye)) : "number" == e || "string" == e ? x(ze, Ye) : "[" == e ? x(E, ie, Y("]"), ze, Ye) : "*" == t ? ($.marked = "keyword", x(Ye)) : o && "(" == e ? b(_e, Ye) : ";" == e || "," == e ? x(Ye) : "}" == e ? x() : "@" == t ? x(E, Ye) : void 0
        }

        function ze(e, t) {
            if ("?" == t) return x(ze);
            if (":" == e) return x(Oe, xe);
            if ("=" == t) return x(I);
            var n = $.state.lexical.prev;
            return b(n && "interface" == n.info ? _e : Se)
        }

        function Ze(e, t) {
            return "*" == t ? ($.marked = "keyword", x(Ae, Y(";"))) : "default" == t ? ($.marked = "keyword", x(E, Y(";"))) : "{" == e ? x(te(Ee, "}"), Ae, Y(";")) : b(z)
        }

        function Ee(e, t) {
            return "as" == t ? ($.marked = "keyword", x(Y("variable"))) : "variable" == e ? b(I, Ee) : void 0
        }

        function Ie(e) {
            return "string" == e ? x() : "(" == e ? b(E) : "." == e ? b(A) : b(Ue, Ve, Ae)
        }

        function Ue(e, t) {
            return "{" == e ? ne(Ue, "}") : ("variable" == e && w(t), "*" == t && ($.marked = "keyword"), x(je))
        }

        function Ve(e) {
            if ("," == e) return x(Ue, Ve)
        }

        function je(e, t) {
            if ("as" == t) return $.marked = "keyword", x(Ue)
        }

        function Ae(e, t) {
            if ("from" == t) return $.marked = "keyword", x(E)
        }

        function Ce(e) {
            return "]" == e ? x() : b(te(I, "]"))
        }

        function Ge() {
            return b(W("form"), Qe, Y("{"), W("}"), te(Le, "}"), q, q)
        }

        function Le() {
            return b(Qe, xe)
        }
        return R.lex = !0, q.lex = !0, {
            startState: function(t) {
                var n = {
                    tokenize: d,
                    lastType: "sof",
                    cc: [],
                    lexical: new g(-t, 0, "block", !1),
                    localVars: e.localVars,
                    context: e.localVars && new v(null, null, !1),
                    indented: 0
                };
                return e.globalVars && "object" == typeof e.globalVars && (n.globalVars = e.globalVars), n
            },
            token: function(e, r) {
                if (e.sol() && (r.lexical.hasOwnProperty("align") || (r.lexical.align = !1), r.indented = e.indentation(), f(e, r)), r.tokenize != p && e.eatSpace()) return null;
                var i = r.tokenize(e, r);
                return "comment" == t ? i : (r.lastType = "operator" != t || "++" != n && "--" != n ? t : "incdec", function(e, t, n, r, i) {
                    var o = e.cc;
                    for ($.state = e, $.stream = i, $.marked = null, $.cc = o, $.style = t, e.lexical.hasOwnProperty("align") || (e.lexical.align = !0);;)
                        if ((o.length ? o.pop() : a ? E : z)(n, r)) {
                            for (; o.length && o[o.length - 1].lex;) o.pop()();
                            return $.marked ? $.marked : "variable" == n && Q(e, r) ? "variableName.local" : t
                        }
                }(r, i, t, n, e))
            },
            indent: function(t, n, i) {
                if (t.tokenize == p || t.tokenize == h) return null;
                if (t.tokenize != d) return 0;
                var a, o = n && n.charAt(0),
                    s = t.lexical;
                if (!/^\s*else\b/.test(n))
                    for (var O = t.cc.length - 1; O >= 0; --O) {
                        var c = t.cc[O];
                        if (c == q) s = s.prev;
                        else if (c != we) break
                    }
                for (;
                    ("stat" == s.type || "form" == s.type) && ("}" == o || (a = t.cc[t.cc.length - 1]) && (a == A || a == C) && !/^[,\.=+\-*:?[\(]/.test(n));) s = s.prev;
                r && ")" == s.type && "stat" == s.prev.type && (s = s.prev);
                var u = s.type,
                    f = o == u;
                return "vardef" == u ? s.indented + ("operator" == t.lastType || "," == t.lastType ? s.info.length + 1 : 0) : "form" == u && "{" == o ? s.indented : "form" == u ? s.indented + i.unit : "stat" == u ? s.indented + (function(e, t) {
                    return "operator" == e.lastType || "," == e.lastType || l.test(t.charAt(0)) || /[,.]/.test(t.charAt(0))
                }(t, n) ? r || i.unit : 0) : "switch" != s.info || f || 0 == e.doubleIndentSwitch ? s.align ? s.column + (f ? 0 : 1) : s.indented + (f ? 0 : i.unit) : s.indented + (/^(?:case|default)\b/.test(n) ? i.unit : 2 * i.unit)
            },
            languageData: {
                indentOnInput: /^\s*(?:case .*?:|default:|\{|\})$/,
                commentTokens: a ? void 0 : {
                    line: "//",
                    block: {
                        open: "/*",
                        close: "*/"
                    }
                },
                closeBrackets: {
                    brackets: ["(", "[", "{", "'", '"', "`"]
                },
                wordChars: "$"
            }
        }
    }
    const ek = Kw({}),
        tk = Kw({
            json: !0
        }),
        nk = Kw({
            jsonld: !0
        }),
        rk = Kw({
            typescript: !0
        });
    var ik = Object.freeze({
            __proto__: null,
            javascript: ek,
            json: tk,
            jsonld: nk,
            typescript: rk
        }),
        ak = ["and", "as", "block", "endblock", "by", "cycle", "debug", "else", "elif", "extends", "filter", "endfilter", "firstof", "for", "endfor", "if", "endif", "ifchanged", "endifchanged", "ifequal", "endifequal", "ifnotequal", "endifnotequal", "in", "include", "load", "not", "now", "or", "parsed", "regroup", "reversed", "spaceless", "endspaceless", "ssi", "templatetag", "openblock", "closeblock", "openvariable", "closevariable", "openbrace", "closebrace", "opencomment", "closecomment", "widthratio", "url", "with", "endwith", "get_current_language", "trans", "endtrans", "noop", "blocktrans", "endblocktrans", "get_available_languages", "get_current_language_bidi", "plural"],
        ok = /^[+\-*&%=<>!?|~^]/,
        sk = /^[:\[\(\{]/,
        Ok = ["true", "false"],
        lk = /^(\d[+\-\*\/])?\d+(\.\d+)?/;

    function ck(e, t) {
        var n = e.peek();
        if (t.incomment) return e.skipTo("#}") ? (e.eatWhile(/\#|}/), t.incomment = !1) : e.skipToEnd(), "comment";
        if (t.intag) {
            if (t.operator) {
                if (t.operator = !1, e.match(Ok)) return "atom";
                if (e.match(lk)) return "number"
            }
            if (t.sign) {
                if (t.sign = !1, e.match(Ok)) return "atom";
                if (e.match(lk)) return "number"
            }
            if (t.instring) return n == t.instring && (t.instring = !1), e.next(), "string";
            if ("'" == n || '"' == n) return t.instring = n, e.next(), "string";
            if (e.match(t.intag + "}") || e.eat("-") && e.match(t.intag + "}")) return t.intag = !1, "tag";
            if (e.match(ok)) return t.operator = !0, "operator";
            if (e.match(sk)) t.sign = !0;
            else if (e.eat(" ") || e.sol()) {
                if (e.match(ak)) return "keyword";
                if (e.match(Ok)) return "atom";
                if (e.match(lk)) return "number";
                e.sol() && e.next()
            } else e.next();
            return "variable"
        }
        if (e.eat("{")) {
            if (e.eat("#")) return t.incomment = !0, e.skipTo("#}") ? (e.eatWhile(/\#|}/), t.incomment = !1) : e.skipToEnd(), "comment";
            if (n = e.eat(/\{|%/)) return t.intag = n, "{" == n && (t.intag = "}"), e.eat("-"), "tag"
        }
        e.next()
    }
    ak = new RegExp("((" + ak.join(")|(") + "))\\b"), Ok = new RegExp("((" + Ok.join(")|(") + "))\\b");
    const uk = {
        startState: function() {
            return {
                tokenize: ck
            }
        },
        token: function(e, t) {
            return t.tokenize(e, t)
        },
        languageData: {
            commentTokens: {
                block: {
                    open: "{#",
                    close: "#}"
                }
            }
        }
    };
    var dk = Object.freeze({
        __proto__: null,
        jinja2: uk
    });

    function pk(e, t) {
        return void 0 === t && (t = "\\b"), new RegExp("^((" + e.join(")|(") + "))" + t)
    }
    var hk = pk(["[<>]:", "[<>=]=", "<<=?", ">>>?=?", "=>", "->", "\\/\\/", "[\\\\%*+\\-<>!=\\/^|&\\u00F7\\u22BB]=?", "\\?", "\\$", "~", ":", "\\u00D7", "\\u2208", "\\u2209", "\\u220B", "\\u220C", "\\u2218", "\\u221A", "\\u221B", "\\u2229", "\\u222A", "\\u2260", "\\u2264", "\\u2265", "\\u2286", "\\u2288", "\\u228A", "\\u22C5", "\\b(in|isa)\\b(?!.?\\()"], ""),
        fk = /^[;,()[\]{}]/,
        mk = /^[_A-Za-z\u00A1-\u2217\u2219-\uFFFF][\w\u00A1-\u2217\u2219-\uFFFF]*!*/,
        gk = pk(["\\\\[0-7]{1,3}", "\\\\x[A-Fa-f0-9]{1,2}", "\\\\[abefnrtv0%?'\"\\\\]", "([^\\u0027\\u005C\\uD800-\\uDFFF]|[\\uD800-\\uDFFF][\\uDC00-\\uDFFF])"], "'"),
        Qk = ["if", "else", "elseif", "while", "for", "begin", "let", "end", "do", "try", "catch", "finally", "return", "break", "continue", "global", "local", "const", "export", "import", "importall", "using", "function", "where", "macro", "module", "baremodule", "struct", "type", "mutable", "immutable", "quote", "typealias", "abstract", "primitive", "bitstype"],
        $k = ["true", "false", "nothing", "NaN", "Inf"],
        bk = pk(["begin", "function", "type", "struct", "immutable", "let", "macro", "for", "while", "quote", "if", "else", "elseif", "try", "finally", "catch", "do"]),
        xk = pk(["end", "else", "elseif", "catch", "finally"]),
        Pk = pk(Qk),
        wk = pk($k),
        kk = /^@[_A-Za-z][\w]*/,
        yk = /^:[_A-Za-z\u00A1-\uFFFF][\w\u00A1-\uFFFF]*!*/,
        vk = /^(`|([_A-Za-z\u00A1-\uFFFF]*"("")?))/;

    function Sk(e) {
        return e.nestedArrays > 0
    }

    function _k(e, t) {
        return void 0 === t && (t = 0), e.scopes.length <= t ? null : e.scopes[e.scopes.length - (t + 1)]
    }

    function Xk(e, t) {
        if (e.match("#=", !1)) return t.tokenize = Rk, t.tokenize(e, t);
        var n = t.leavingExpr;
        if (e.sol() && (n = !1), t.leavingExpr = !1, n && e.match(/^'+/)) return "operator";
        if (e.match(/\.{4,}/)) return "error";
        if (e.match(/\.{1,3}/)) return "operator";
        if (e.eatSpace()) return null;
        var r, i = e.peek();
        if ("#" === i) return e.skipToEnd(), "comment";
        if ("[" === i && (t.scopes.push("["), t.nestedArrays++), "(" === i && (t.scopes.push("("), t.nestedGenerators++), Sk(t) && "]" === i) {
            for (; t.scopes.length && "[" !== _k(t);) t.scopes.pop();
            t.scopes.pop(), t.nestedArrays--, t.leavingExpr = !0
        }
        if (function(e) {
                return e.nestedGenerators > 0
            }(t) && ")" === i) {
            for (; t.scopes.length && "(" !== _k(t);) t.scopes.pop();
            t.scopes.pop(), t.nestedGenerators--, t.leavingExpr = !0
        }
        if (Sk(t)) {
            if ("end" == t.lastToken && e.match(":")) return "operator";
            if (e.match("end")) return "number"
        }
        if ((r = e.match(bk, !1)) && t.scopes.push(r[0]), e.match(xk, !1) && t.scopes.pop(), e.match(/^::(?![:\$])/)) return t.tokenize = Tk, t.tokenize(e, t);
        if (!n && e.match(yk) || e.match(/:([<>]:|<<=?|>>>?=?|->|\/\/|\.{2,3}|[\.\\%*+\-<>!\/^|&]=?|[~\?\$])/)) return "builtin";
        if (e.match(hk)) return "operator";
        if (e.match(/^\.?\d/, !1)) {
            var a = RegExp(/^im\b/),
                o = !1;
            if (e.match(/^0x\.[0-9a-f_]+p[\+\-]?[_\d]+/i) && (o = !0), e.match(/^0x[0-9a-f_]+/i) && (o = !0), e.match(/^0b[01_]+/i) && (o = !0), e.match(/^0o[0-7_]+/i) && (o = !0), e.match(/^(?:(?:\d[_\d]*)?\.(?!\.)(?:\d[_\d]*)?|\d[_\d]*\.(?!\.)(?:\d[_\d]*))?([Eef][\+\-]?[_\d]+)?/i) && (o = !0), e.match(/^\d[_\d]*(e[\+\-]?\d+)?/i) && (o = !0), o) return e.match(a), t.leavingExpr = !0, "number"
        }
        if (e.match("'")) return t.tokenize = Wk, t.tokenize(e, t);
        if (e.match(vk)) return t.tokenize = function(e) {
            '"""' === e.substr(-3) ? e = '"""' : '"' === e.substr(-1) && (e = '"');

            function t(t, n) {
                if (t.eat("\\")) t.next();
                else {
                    if (t.match(e)) return n.tokenize = Xk, n.leavingExpr = !0, "string";
                    t.eat(/[`"]/)
                }
                return t.eatWhile(/[^\\`"]/), "string"
            }
            return t
        }(e.current()), t.tokenize(e, t);
        if (e.match(kk)) return "meta";
        if (e.match(fk)) return null;
        if (e.match(Pk)) return "keyword";
        if (e.match(wk)) return "builtin";
        var s = t.isDefinition || "function" == t.lastToken || "macro" == t.lastToken || "type" == t.lastToken || "struct" == t.lastToken || "immutable" == t.lastToken;
        return e.match(mk) ? s ? "." === e.peek() ? (t.isDefinition = !0, "variable") : (t.isDefinition = !1, "def") : (t.leavingExpr = !0, "variable") : (e.next(), "error")
    }

    function Tk(e, t) {
        return e.match(/.*?(?=[,;{}()=\s]|$)/), e.match("{") ? t.nestedParameters++ : e.match("}") && t.nestedParameters > 0 && t.nestedParameters--, t.nestedParameters > 0 ? e.match(/.*?(?={|})/) || e.next() : 0 == t.nestedParameters && (t.tokenize = Xk), "builtin"
    }

    function Rk(e, t) {
        return e.match("#=") && t.nestedComments++, e.match(/.*?(?=(#=|=#))/) || e.skipToEnd(), e.match("=#") && (t.nestedComments--, 0 == t.nestedComments && (t.tokenize = Xk)), "comment"
    }

    function Wk(e, t) {
        var n, r = !1;
        if (e.match(gk)) r = !0;
        else if (n = e.match(/\\u([a-f0-9]{1,4})(?=')/i)) {
            ((i = parseInt(n[1], 16)) <= 55295 || i >= 57344) && (r = !0, e.next())
        } else if (n = e.match(/\\U([A-Fa-f0-9]{5,8})(?=')/)) {
            var i;
            (i = parseInt(n[1], 16)) <= 1114111 && (r = !0, e.next())
        }
        return r ? (t.leavingExpr = !0, t.tokenize = Xk, "string") : (e.match(/^[^']+(?=')/) || e.skipToEnd(), e.match("'") && (t.tokenize = Xk), "error")
    }
    const qk = {
        startState: function() {
            return {
                tokenize: Xk,
                scopes: [],
                lastToken: null,
                leavingExpr: !1,
                isDefinition: !1,
                nestedArrays: 0,
                nestedComments: 0,
                nestedGenerators: 0,
                nestedParameters: 0,
                firstParenPos: -1
            }
        },
        token: function(e, t) {
            var n = t.tokenize(e, t),
                r = e.current();
            return r && n && (t.lastToken = r), n
        },
        indent: function(e, t, n) {
            var r = 0;
            return ("]" === t || ")" === t || /^end\b/.test(t) || /^else/.test(t) || /^catch\b/.test(t) || /^elseif\b/.test(t) || /^finally/.test(t)) && (r = -1), (e.scopes.length + r) * n.unit
        },
        languageData: {
            indentOnInput: /^\s*(end|else|catch|finally)\b$/,
            commentTokens: {
                line: "#",
                block: {
                    open: "#=",
                    close: "=#"
                }
            },
            closeBrackets: {
                brackets: ["(", "[", "{", '"']
            },
            autocomplete: Qk.concat($k)
        }
    };
    var Yk = Object.freeze({
            __proto__: null,
            julia: qk
        }),
        zk = function(e, t) {
            var n = t.next || "start";
            if (n) {
                t.next = t.next;
                var r = Vk[n];
                if (r.splice) {
                    for (var i = 0; i < r.length; ++i) {
                        var a = r[i];
                        if (a.regex && e.match(a.regex)) return t.next = a.next || t.next, a.token
                    }
                    return e.next(), "error"
                }
                if (e.match(a = Vk[n])) return a.regex && e.match(a.regex) ? (t.next = a.next, a.token) : (e.next(), "error")
            }
            return e.next(), "error"
        },
        Zk = "(?![\\d\\s])[$\\w\\xAA-\\uFFDC](?:(?!\\s)[$\\w\\xAA-\\uFFDC]|-[A-Za-z])*",
        Ek = RegExp("(?:[({[=:]|[-~]>|\\b(?:e(?:lse|xport)|d(?:o|efault)|t(?:ry|hen)|finally|import(?:\\s*all)?|const|var|let|new|catch(?:\\s*" + Zk + ")?))\\s*$"),
        Ik = "(?![$\\w]|-[A-Za-z]|\\s*:(?![:=]))",
        Uk = {
            token: "string",
            regex: ".+"
        },
        Vk = {
            start: [{
                token: "docComment",
                regex: "/\\*",
                next: "comment"
            }, {
                token: "comment",
                regex: "#.*"
            }, {
                token: "keyword",
                regex: "(?:t(?:h(?:is|row|en)|ry|ypeof!?)|c(?:on(?:tinue|st)|a(?:se|tch)|lass)|i(?:n(?:stanceof)?|mp(?:ort(?:\\s+all)?|lements)|[fs])|d(?:e(?:fault|lete|bugger)|o)|f(?:or(?:\\s+own)?|inally|unction)|s(?:uper|witch)|e(?:lse|x(?:tends|port)|val)|a(?:nd|rguments)|n(?:ew|ot)|un(?:less|til)|w(?:hile|ith)|o[fr]|return|break|let|var|loop)" + Ik
            }, {
                token: "atom",
                regex: "(?:true|false|yes|no|on|off|null|void|undefined)" + Ik
            }, {
                token: "invalid",
                regex: "(?:p(?:ackage|r(?:ivate|otected)|ublic)|i(?:mplements|nterface)|enum|static|yield)" + Ik
            }, {
                token: "className.standard",
                regex: "(?:R(?:e(?:gExp|ferenceError)|angeError)|S(?:tring|yntaxError)|E(?:rror|valError)|Array|Boolean|Date|Function|Number|Object|TypeError|URIError)" + Ik
            }, {
                token: "variableName.function.standard",
                regex: "(?:is(?:NaN|Finite)|parse(?:Int|Float)|Math|JSON|(?:en|de)codeURI(?:Component)?)" + Ik
            }, {
                token: "variableName.standard",
                regex: "(?:t(?:hat|il|o)|f(?:rom|allthrough)|it|by|e)" + Ik
            }, {
                token: "variableName",
                regex: Zk + "\\s*:(?![:=])"
            }, {
                token: "variableName",
                regex: Zk
            }, {
                token: "operatorKeyword",
                regex: "(?:\\.{3}|\\s+\\?)"
            }, {
                token: "keyword",
                regex: "(?:@+|::|\\.\\.)",
                next: "key"
            }, {
                token: "operatorKeyword",
                regex: "\\.\\s*",
                next: "key"
            }, {
                token: "string",
                regex: "\\\\\\S[^\\s,;)}\\]]*"
            }, {
                token: "docString",
                regex: "'''",
                next: "qdoc"
            }, {
                token: "docString",
                regex: '"""',
                next: "qqdoc"
            }, {
                token: "string",
                regex: "'",
                next: "qstring"
            }, {
                token: "string",
                regex: '"',
                next: "qqstring"
            }, {
                token: "string",
                regex: "`",
                next: "js"
            }, {
                token: "string",
                regex: "<\\[",
                next: "words"
            }, {
                token: "regexp",
                regex: "//",
                next: "heregex"
            }, {
                token: "regexp",
                regex: "\\/(?:[^[\\/\\n\\\\]*(?:(?:\\\\.|\\[[^\\]\\n\\\\]*(?:\\\\.[^\\]\\n\\\\]*)*\\])[^[\\/\\n\\\\]*)*)\\/[gimy$]{0,4}",
                next: "key"
            }, {
                token: "number",
                regex: "(?:0x[\\da-fA-F][\\da-fA-F_]*|(?:[2-9]|[12]\\d|3[0-6])r[\\da-zA-Z][\\da-zA-Z_]*|(?:\\d[\\d_]*(?:\\.\\d[\\d_]*)?|\\.\\d[\\d_]*)(?:e[+-]?\\d[\\d_]*)?[\\w$]*)"
            }, {
                token: "paren",
                regex: "[({[]"
            }, {
                token: "paren",
                regex: "[)}\\]]",
                next: "key"
            }, {
                token: "operatorKeyword",
                regex: "\\S+"
            }, {
                token: "content",
                regex: "\\s+"
            }],
            heregex: [{
                token: "regexp",
                regex: ".*?//[gimy$?]{0,4}",
                next: "start"
            }, {
                token: "regexp",
                regex: "\\s*#{"
            }, {
                token: "comment",
                regex: "\\s+(?:#.*)?"
            }, {
                token: "regexp",
                regex: "\\S+"
            }],
            key: [{
                token: "operatorKeyword",
                regex: "[.?@!]+"
            }, {
                token: "variableName",
                regex: Zk,
                next: "start"
            }, {
                token: "content",
                regex: "",
                next: "start"
            }],
            comment: [{
                token: "docComment",
                regex: ".*?\\*/",
                next: "start"
            }, {
                token: "docComment",
                regex: ".+"
            }],
            qdoc: [{
                token: "string",
                regex: ".*?'''",
                next: "key"
            }, Uk],
            qqdoc: [{
                token: "string",
                regex: '.*?"""',
                next: "key"
            }, Uk],
            qstring: [{
                token: "string",
                regex: "[^\\\\']*(?:\\\\.[^\\\\']*)*'",
                next: "key"
            }, Uk],
            qqstring: [{
                token: "string",
                regex: '[^\\\\"]*(?:\\\\.[^\\\\"]*)*"',
                next: "key"
            }, Uk],
            js: [{
                token: "string",
                regex: "[^\\\\`]*(?:\\\\.[^\\\\`]*)*`",
                next: "key"
            }, Uk],
            words: [{
                token: "string",
                regex: ".*?\\]>",
                next: "key"
            }, Uk]
        };
    for (var jk in Vk) {
        var Ak = Vk[jk];
        if (Ak.splice)
            for (var Ck = 0, Gk = Ak.length; Ck < Gk; ++Ck) {
                var Lk = Ak[Ck];
                "string" == typeof Lk.regex && (Vk[jk][Ck].regex = new RegExp("^" + Lk.regex))
            } else "string" == typeof Lk.regex && (Vk[jk].regex = new RegExp("^" + Ak.regex))
    }
    const Nk = {
        startState: function() {
            return {
                next: "start",
                lastToken: {
                    style: null,
                    indent: 0,
                    content: ""
                }
            }
        },
        token: function(e, t) {
            for (; e.pos == e.start;) var n = zk(e, t);
            return t.lastToken = {
                style: n,
                indent: e.indentation(),
                content: e.current()
            }, n.replace(/\./g, " ")
        },
        indent: function(e) {
            var t = e.lastToken.indent;
            return e.lastToken.content.match(Ek) && (t += 2), t
        }
    };
    var Dk = Object.freeze({
        __proto__: null,
        liveScript: Nk
    });

    function Mk(e) {
        return new RegExp("^(?:" + e.join("|") + ")$", "i")
    }
    var Bk = Mk(["_G", "_VERSION", "assert", "collectgarbage", "dofile", "error", "getfenv", "getmetatable", "ipairs", "load", "loadfile", "loadstring", "module", "next", "pairs", "pcall", "print", "rawequal", "rawget", "rawset", "require", "select", "setfenv", "setmetatable", "tonumber", "tostring", "type", "unpack", "xpcall", "coroutine.create", "coroutine.resume", "coroutine.running", "coroutine.status", "coroutine.wrap", "coroutine.yield", "debug.debug", "debug.getfenv", "debug.gethook", "debug.getinfo", "debug.getlocal", "debug.getmetatable", "debug.getregistry", "debug.getupvalue", "debug.setfenv", "debug.sethook", "debug.setlocal", "debug.setmetatable", "debug.setupvalue", "debug.traceback", "close", "flush", "lines", "read", "seek", "setvbuf", "write", "io.close", "io.flush", "io.input", "io.lines", "io.open", "io.output", "io.popen", "io.read", "io.stderr", "io.stdin", "io.stdout", "io.tmpfile", "io.type", "io.write", "math.abs", "math.acos", "math.asin", "math.atan", "math.atan2", "math.ceil", "math.cos", "math.cosh", "math.deg", "math.exp", "math.floor", "math.fmod", "math.frexp", "math.huge", "math.ldexp", "math.log", "math.log10", "math.max", "math.min", "math.modf", "math.pi", "math.pow", "math.rad", "math.random", "math.randomseed", "math.sin", "math.sinh", "math.sqrt", "math.tan", "math.tanh", "os.clock", "os.date", "os.difftime", "os.execute", "os.exit", "os.getenv", "os.remove", "os.rename", "os.setlocale", "os.time", "os.tmpname", "package.cpath", "package.loaded", "package.loaders", "package.loadlib", "package.path", "package.preload", "package.seeall", "string.byte", "string.char", "string.dump", "string.find", "string.format", "string.gmatch", "string.gsub", "string.len", "string.lower", "string.match", "string.rep", "string.reverse", "string.sub", "string.upper", "table.concat", "table.insert", "table.maxn", "table.remove", "table.sort"]),
        Fk = Mk(["and", "break", "elseif", "false", "nil", "not", "or", "return", "true", "function", "end", "if", "then", "else", "do", "while", "repeat", "until", "for", "in", "local"]),
        Hk = Mk(["function", "if", "repeat", "do", "\\(", "{"]),
        Jk = Mk(["end", "until", "\\)", "}"]),
        Kk = function(e) {
            return new RegExp("^(?:" + e.join("|") + ")", "i")
        }(["end", "until", "\\)", "}", "else", "elseif"]);

    function ey(e) {
        for (var t = 0; e.eat("=");) ++t;
        return e.eat("["), t
    }

    function ty(e, t) {
        var n = e.next();
        return "-" == n && e.eat("-") ? e.eat("[") && e.eat("[") ? (t.cur = ny(ey(e), "comment"))(e, t) : (e.skipToEnd(), "comment") : '"' == n || "'" == n ? (t.cur = function(e) {
            return function(t, n) {
                for (var r, i = !1; null != (r = t.next()) && (r != e || i);) i = !i && "\\" == r;
                return i || (n.cur = ty), "string"
            }
        }(n))(e, t) : "[" == n && /[\[=]/.test(e.peek()) ? (t.cur = ny(ey(e), "string"))(e, t) : /\d/.test(n) ? (e.eatWhile(/[\w.%]/), "number") : /[\w_]/.test(n) ? (e.eatWhile(/[\w\\\-_.]/), "variable") : null
    }

    function ny(e, t) {
        return function(n, r) {
            for (var i, a = null; null != (i = n.next());)
                if (null == a) "]" == i && (a = 0);
                else if ("=" == i) ++a;
            else {
                if ("]" == i && a == e) {
                    r.cur = ty;
                    break
                }
                a = null
            }
            return t
        }
    }
    const ry = {
        startState: function(e) {
            return {
                basecol: e || 0,
                indentDepth: 0,
                cur: ty
            }
        },
        token: function(e, t) {
            if (e.eatSpace()) return null;
            var n = t.cur(e, t),
                r = e.current();
            return "variable" == n && (Fk.test(r) ? n = "keyword" : Bk.test(r) && (n = "builtin")), "comment" != n && "string" != n && (Hk.test(r) ? ++t.indentDepth : Jk.test(r) && --t.indentDepth), n
        },
        indent: function(e, t, n) {
            var r = Kk.test(t);
            return e.basecol + n.unit * (e.indentDepth - (r ? 1 : 0))
        },
        languageData: {
            commentTokens: {
                line: "--",
                block: {
                    open: "--[[",
                    close: "]]--"
                }
            }
        }
    };
    var iy = Object.freeze({
        __proto__: null,
        lua: ry
    });

    function ay(e) {
        for (var t = {}, n = e.split(" "), r = 0; r < n.length; ++r) t[n[r]] = !0;
        return t
    }
    var oy = ay("$! $$ $& $? $+ $abook $abs $active $activecid $activewid $address $addtok $agent $agentname $agentstat $agentver $alias $and $anick $ansi2mirc $aop $appactive $appstate $asc $asctime $asin $atan $avoice $away $awaymsg $awaytime $banmask $base $bfind $binoff $biton $bnick $bvar $bytes $calc $cb $cd $ceil $chan $chanmodes $chantypes $chat $chr $cid $clevel $click $cmdbox $cmdline $cnick $color $com $comcall $comchan $comerr $compact $compress $comval $cos $count $cr $crc $creq $crlf $ctime $ctimer $ctrlenter $date $day $daylight $dbuh $dbuw $dccignore $dccport $dde $ddename $debug $decode $decompress $deltok $devent $dialog $did $didreg $didtok $didwm $disk $dlevel $dll $dllcall $dname $dns $duration $ebeeps $editbox $emailaddr $encode $error $eval $event $exist $feof $ferr $fgetc $file $filename $filtered $finddir $finddirn $findfile $findfilen $findtok $fline $floor $fopen $fread $fserve $fulladdress $fulldate $fullname $fullscreen $get $getdir $getdot $gettok $gmt $group $halted $hash $height $hfind $hget $highlight $hnick $hotline $hotlinepos $ial $ialchan $ibl $idle $iel $ifmatch $ignore $iif $iil $inelipse $ini $inmidi $inpaste $inpoly $input $inrect $inroundrect $insong $instok $int $inwave $ip $isalias $isbit $isdde $isdir $isfile $isid $islower $istok $isupper $keychar $keyrpt $keyval $knick $lactive $lactivecid $lactivewid $left $len $level $lf $line $lines $link $lock $lock $locked $log $logstamp $logstampfmt $longfn $longip $lower $ltimer $maddress $mask $matchkey $matchtok $md5 $me $menu $menubar $menucontext $menutype $mid $middir $mircdir $mircexe $mircini $mklogfn $mnick $mode $modefirst $modelast $modespl $mouse $msfile $network $newnick $nick $nofile $nopath $noqt $not $notags $notify $null $numeric $numok $oline $onpoly $opnick $or $ord $os $passivedcc $pic $play $pnick $port $portable $portfree $pos $prefix $prop $protect $puttok $qt $query $rand $r $rawmsg $read $readomo $readn $regex $regml $regsub $regsubex $remove $remtok $replace $replacex $reptok $result $rgb $right $round $scid $scon $script $scriptdir $scriptline $sdir $send $server $serverip $sfile $sha1 $shortfn $show $signal $sin $site $sline $snick $snicks $snotify $sock $sockbr $sockerr $sockname $sorttok $sound $sqrt $ssl $sreq $sslready $status $strip $str $stripped $syle $submenu $switchbar $tan $target $ticks $time $timer $timestamp $timestampfmt $timezone $tip $titlebar $toolbar $treebar $trust $ulevel $ulist $upper $uptime $url $usermode $v1 $v2 $var $vcmd $vcmdstat $vcmdver $version $vnick $vol $wid $width $wildsite $wildtok $window $wrap $xor"),
        sy = ay("abook ajinvite alias aline ame amsg anick aop auser autojoin avoice away background ban bcopy beep bread break breplace bset btrunc bunset bwrite channel clear clearall cline clipboard close cnick color comclose comopen comreg continue copy creq ctcpreply ctcps dcc dccserver dde ddeserver debug dec describe dialog did didtok disable disconnect dlevel dline dll dns dqwindow drawcopy drawdot drawfill drawline drawpic drawrect drawreplace drawrot drawsave drawscroll drawtext ebeeps echo editbox emailaddr enable events exit fclose filter findtext finger firewall flash flist flood flush flushini font fopen fseek fsend fserve fullname fwrite ghide gload gmove gopts goto gplay gpoint gqreq groups gshow gsize gstop gtalk gunload hadd halt haltdef hdec hdel help hfree hinc hload hmake hop hsave ial ialclear ialmark identd if ignore iline inc invite iuser join kick linesep links list load loadbuf localinfo log mdi me menubar mkdir mnick mode msg nick noop notice notify omsg onotice part partall pdcc perform play playctrl pop protect pvoice qme qmsg query queryn quit raw reload remini remote remove rename renwin reseterror resetidle return rlevel rline rmdir run ruser save savebuf saveini say scid scon server set showmirc signam sline sockaccept sockclose socklist socklisten sockmark sockopen sockpause sockread sockrename sockudp sockwrite sound speak splay sreq strip switchbar timer timestamp titlebar tnick tokenize toolbar topic tray treebar ulist unload unset unsetall updatenl url uwho var vcadd vcmd vcrem vol while whois window winhelp write writeint if isalnum isalpha isaop isavoice isban ischan ishop isignore isin isincs isletter islower isnotify isnum ison isop isprotect isreg isupper isvoice iswm iswmcs elseif else goto menu nicklist status title icon size option text edit button check radio box scroll list combo link tab item"),
        Oy = ay("if elseif else and not or eq ne in ni for foreach while switch"),
        ly = /[+\-*&%=<>!?^\/\|]/;

    function cy(e, t, n) {
        return t.tokenize = n, n(e, t)
    }

    function uy(e, t) {
        var n = t.beforeParams;
        t.beforeParams = !1;
        var r = e.next();
        if (/[\[\]{}\(\),\.]/.test(r)) return "(" == r && n ? t.inParams = !0 : ")" == r && (t.inParams = !1), null;
        if (/\d/.test(r)) return e.eatWhile(/[\w\.]/), "number";
        if ("\\" == r) return e.eat("\\"), e.eat(/./), "number";
        if ("/" == r && e.eat("*")) return cy(e, t, dy);
        if (";" == r && e.match(/ *\( *\(/)) return cy(e, t, py);
        if (";" != r || t.inParams) {
            if ('"' == r) return e.eat(/"/), "keyword";
            if ("$" == r) return e.eatWhile(/[$_a-z0-9A-Z\.:]/), oy && oy.propertyIsEnumerable(e.current().toLowerCase()) ? "keyword" : (t.beforeParams = !0, "builtin");
            if ("%" == r) return e.eatWhile(/[^,\s()]/), t.beforeParams = !0, "string";
            if (ly.test(r)) return e.eatWhile(ly), "operator";
            e.eatWhile(/[\w\$_{}]/);
            var i = e.current().toLowerCase();
            return sy && sy.propertyIsEnumerable(i) ? "keyword" : Oy && Oy.propertyIsEnumerable(i) ? (t.beforeParams = !0, "keyword") : null
        }
        return e.skipToEnd(), "comment"
    }

    function dy(e, t) {
        for (var n, r = !1; n = e.next();) {
            if ("/" == n && r) {
                t.tokenize = uy;
                break
            }
            r = "*" == n
        }
        return "comment"
    }

    function py(e, t) {
        for (var n, r = 0; n = e.next();) {
            if (";" == n && 2 == r) {
                t.tokenize = uy;
                break
            }
            ")" == n ? r++ : " " != n && (r = 0)
        }
        return "meta"
    }
    const hy = {
        startState: function() {
            return {
                tokenize: uy,
                beforeParams: !1,
                inParams: !1
            }
        },
        token: function(e, t) {
            return e.eatSpace() ? null : t.tokenize(e, t)
        }
    };
    var fy = Object.freeze({
            __proto__: null,
            mirc: hy
        }),
        my = "[a-zA-Z\\$][a-zA-Z0-9\\$]*",
        gy = "(?:\\.\\d+|\\d+\\.\\d*|\\d+)",
        Qy = "(?:`(?:`?" + gy + ")?)",
        $y = new RegExp("(?:(?:\\d+)(?:\\^\\^(?:\\.\\w+|\\w+\\.\\w*|\\w+)" + Qy + "?(?:\\*\\^[+-]?\\d+)?))"),
        by = new RegExp("(?:" + gy + Qy + "?(?:\\*\\^[+-]?\\d+)?)"),
        xy = new RegExp("(?:`?)(?:" + my + ")(?:`(?:" + my + "))*(?:`?)");

    function Py(e, t) {
        var n;
        return '"' === (n = e.next()) ? (t.tokenize = wy, t.tokenize(e, t)) : "(" === n && e.eat("*") ? (t.commentLevel++, t.tokenize = ky, t.tokenize(e, t)) : (e.backUp(1), e.match($y, !0, !1) || e.match(by, !0, !1) ? "number" : e.match(/(?:In|Out)\[[0-9]*\]/, !0, !1) ? "atom" : e.match(/([a-zA-Z\$][a-zA-Z0-9\$]*(?:`[a-zA-Z0-9\$]+)*::usage)/, !0, !1) ? "meta" : e.match(/([a-zA-Z\$][a-zA-Z0-9\$]*(?:`[a-zA-Z0-9\$]+)*::[a-zA-Z\$][a-zA-Z0-9\$]*):?/, !0, !1) ? "string.special" : e.match(/([a-zA-Z\$][a-zA-Z0-9\$]*\s*:)(?:(?:[a-zA-Z\$][a-zA-Z0-9\$]*)|(?:[^:=>~@\^\&\*\)\[\]'\?,\|])).*/, !0, !1) || e.match(/[a-zA-Z\$][a-zA-Z0-9\$]*_+[a-zA-Z\$][a-zA-Z0-9\$]*/, !0, !1) || e.match(/[a-zA-Z\$][a-zA-Z0-9\$]*_+/, !0, !1) || e.match(/_+[a-zA-Z\$][a-zA-Z0-9\$]*/, !0, !1) ? "variableName.special" : e.match(/\\\[[a-zA-Z\$][a-zA-Z0-9\$]*\]/, !0, !1) ? "character" : e.match(/(?:\[|\]|{|}|\(|\))/, !0, !1) ? "bracket" : e.match(/(?:#[a-zA-Z\$][a-zA-Z0-9\$]*|#+[0-9]?)/, !0, !1) ? "variableName.constant" : e.match(xy, !0, !1) ? "keyword" : e.match(/(?:\\|\+|\-|\*|\/|,|;|\.|:|@|~|=|>|<|&|\||_|`|'|\^|\?|!|%)/, !0, !1) ? "operator" : (e.next(), "error"))
    }

    function wy(e, t) {
        for (var n, r = !1, i = !1; null != (n = e.next());) {
            if ('"' === n && !i) {
                r = !0;
                break
            }
            i = !i && "\\" === n
        }
        return r && !i && (t.tokenize = Py), "string"
    }

    function ky(e, t) {
        for (var n, r; t.commentLevel > 0 && null != (r = e.next());) "(" === n && "*" === r && t.commentLevel++, "*" === n && ")" === r && t.commentLevel--, n = r;
        return t.commentLevel <= 0 && (t.tokenize = Py), "comment"
    }
    const yy = {
        startState: function() {
            return {
                tokenize: Py,
                commentLevel: 0
            }
        },
        token: function(e, t) {
            return e.eatSpace() ? null : t.tokenize(e, t)
        },
        languageData: {
            commentTokens: {
                block: {
                    open: "(*",
                    close: "*)"
                }
            }
        }
    };
    var vy = Object.freeze({
        __proto__: null,
        mathematica: yy
    });

    function Sy(e) {
        for (var t = {}, n = e.split(" "), r = 0; r < n.length; ++r) t[n[r]] = !0;
        return t
    }
    var _y = Sy("algorithm and annotation assert block break class connect connector constant constrainedby der discrete each else elseif elsewhen encapsulated end enumeration equation expandable extends external false final flow for function if import impure in initial inner input loop model not operator or outer output package parameter partial protected public pure record redeclare replaceable return stream then true type when while within"),
        Xy = Sy("abs acos actualStream asin atan atan2 cardinality ceil cos cosh delay div edge exp floor getInstanceName homotopy inStream integer log log10 mod pre reinit rem semiLinear sign sin sinh spatialDistribution sqrt tan tanh"),
        Ty = Sy("Real Boolean Integer String"),
        Ry = [].concat(Object.keys(_y), Object.keys(Xy), Object.keys(Ty)),
        Wy = /[;=\(:\),{}.*<>+\-\/^\[\]]/,
        qy = /(:=|<=|>=|==|<>|\.\+|\.\-|\.\*|\.\/|\.\^)/,
        Yy = /[0-9]/,
        zy = /[_a-zA-Z]/;

    function Zy(e, t) {
        return e.skipToEnd(), t.tokenize = null, "comment"
    }

    function Ey(e, t) {
        for (var n, r = !1; n = e.next();) {
            if (r && "/" == n) {
                t.tokenize = null;
                break
            }
            r = "*" == n
        }
        return "comment"
    }

    function Iy(e, t) {
        for (var n, r = !1; null != (n = e.next());) {
            if ('"' == n && !r) {
                t.tokenize = null, t.sol = !1;
                break
            }
            r = !r && "\\" == n
        }
        return "string"
    }

    function Uy(e, t) {
        for (e.eatWhile(Yy); e.eat(Yy) || e.eat(zy););
        var n = e.current();
        return !t.sol || "package" != n && "model" != n && "when" != n && "connector" != n ? t.sol && "end" == n && t.level > 0 && t.level-- : t.level++, t.tokenize = null, t.sol = !1, _y.propertyIsEnumerable(n) ? "keyword" : Xy.propertyIsEnumerable(n) ? "builtin" : Ty.propertyIsEnumerable(n) ? "atom" : "variable"
    }

    function Vy(e, t) {
        for (; e.eat(/[^']/););
        return t.tokenize = null, t.sol = !1, e.eat("'") ? "variable" : "error"
    }

    function jy(e, t) {
        return e.eatWhile(Yy), e.eat(".") && e.eatWhile(Yy), (e.eat("e") || e.eat("E")) && (e.eat("-") || e.eat("+"), e.eatWhile(Yy)), t.tokenize = null, t.sol = !1, "number"
    }
    const Ay = {
        startState: function() {
            return {
                tokenize: null,
                level: 0,
                sol: !0
            }
        },
        token: function(e, t) {
            if (null != t.tokenize) return t.tokenize(e, t);
            if (e.sol() && (t.sol = !0), e.eatSpace()) return t.tokenize = null, null;
            var n = e.next();
            if ("/" == n && e.eat("/")) t.tokenize = Zy;
            else if ("/" == n && e.eat("*")) t.tokenize = Ey;
            else {
                if (qy.test(n + e.peek())) return e.next(), t.tokenize = null, "operator";
                if (Wy.test(n)) return t.tokenize = null, "operator";
                if (zy.test(n)) t.tokenize = Uy;
                else if ("'" == n && e.peek() && "'" != e.peek()) t.tokenize = Vy;
                else if ('"' == n) t.tokenize = Iy;
                else {
                    if (!Yy.test(n)) return t.tokenize = null, "error";
                    t.tokenize = jy
                }
            }
            return t.tokenize(e, t)
        },
        indent: function(e, t, n) {
            if (null != e.tokenize) return null;
            var r = e.level;
            return /(algorithm)/.test(t) && r--, /(equation)/.test(t) && r--, /(initial algorithm)/.test(t) && r--, /(initial equation)/.test(t) && r--, /(end)/.test(t) && r--, r > 0 ? n.unit * r : 0
        },
        languageData: {
            commentTokens: {
                line: "//",
                block: {
                    open: "/*",
                    close: "*/"
                }
            },
            autocomplete: Ry
        }
    };
    var Cy = Object.freeze({
        __proto__: null,
        modelica: Ay
    });

    function Gy(e) {
        return new RegExp("^((" + e.join(")|(") + "))\\b", "i")
    }
    var Ly = new RegExp("^[\\+\\-\\*/&#!_?\\\\<>=\\'\\[\\]]"),
        Ny = new RegExp("^(('=)|(<=)|(>=)|('>)|('<)|([[)|(]])|(^$))"),
        Dy = new RegExp("^[\\.,:]"),
        My = new RegExp("[()]"),
        By = new RegExp("^[%A-Za-z][A-Za-z0-9]*"),
        Fy = Gy(["\\$ascii", "\\$char", "\\$data", "\\$ecode", "\\$estack", "\\$etrap", "\\$extract", "\\$find", "\\$fnumber", "\\$get", "\\$horolog", "\\$io", "\\$increment", "\\$job", "\\$justify", "\\$length", "\\$name", "\\$next", "\\$order", "\\$piece", "\\$qlength", "\\$qsubscript", "\\$query", "\\$quit", "\\$random", "\\$reverse", "\\$select", "\\$stack", "\\$test", "\\$text", "\\$translate", "\\$view", "\\$x", "\\$y", "\\$a", "\\$c", "\\$d", "\\$e", "\\$ec", "\\$es", "\\$et", "\\$f", "\\$fn", "\\$g", "\\$h", "\\$i", "\\$j", "\\$l", "\\$n", "\\$na", "\\$o", "\\$p", "\\$q", "\\$ql", "\\$qs", "\\$r", "\\$re", "\\$s", "\\$st", "\\$t", "\\$tr", "\\$v", "\\$z"]),
        Hy = Gy(["break", "close", "do", "else", "for", "goto", "halt", "hang", "if", "job", "kill", "lock", "merge", "new", "open", "quit", "read", "set", "tcommit", "trollback", "tstart", "use", "view", "write", "xecute", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "q", "r", "s", "tc", "tro", "ts", "u", "v", "w", "x"]);
    const Jy = {
        startState: function() {
            return {
                label: !1,
                commandMode: 0
            }
        },
        token: function(e, t) {
            var n = function(e, t) {
                e.sol() && (t.label = !0, t.commandMode = 0);
                var n = e.peek();
                return " " == n || "\t" == n ? (t.label = !1, 0 == t.commandMode ? t.commandMode = 1 : (t.commandMode < 0 || 2 == t.commandMode) && (t.commandMode = 0)) : "." != n && t.commandMode > 0 && (t.commandMode = ":" == n ? -1 : 2), "(" !== n && "\t" !== n || (t.label = !1), ";" === n ? (e.skipToEnd(), "comment") : e.match(/^[-+]?\d+(\.\d+)?([eE][-+]?\d+)?/) ? "number" : '"' == n ? e.skipTo('"') ? (e.next(), "string") : (e.skipToEnd(), "error") : e.match(Ny) || e.match(Ly) ? "operator" : e.match(Dy) ? null : My.test(n) ? (e.next(), "bracket") : t.commandMode > 0 && e.match(Hy) ? "controlKeyword" : e.match(Fy) ? "builtin" : e.match(By) ? "variable" : "$" === n || "^" === n ? (e.next(), "builtin") : "@" === n ? (e.next(), "string.special") : /[\w%]/.test(n) ? (e.eatWhile(/[\w%]/), "variable") : (e.next(), "error")
            }(e, t);
            return t.label ? "tag" : n
        }
    };
    var Ky = Object.freeze({
            __proto__: null,
            mumps: Jy
        }),
        ev = ["From", "Sender", "Reply-To", "To", "Cc", "Bcc", "Message-ID", "In-Reply-To", "References", "Resent-From", "Resent-Sender", "Resent-To", "Resent-Cc", "Resent-Bcc", "Resent-Message-ID", "Return-Path", "Received"],
        tv = ["Date", "Subject", "Comments", "Keywords", "Resent-Date"],
        nv = /^[ \t]/,
        rv = /^From /,
        iv = new RegExp("^(" + ev.join("|") + "): "),
        av = new RegExp("^(" + tv.join("|") + "): "),
        ov = /^[^:]+:/,
        sv = /^[^ ]+@[^ ]+/,
        Ov = /^.*?(?=[^ ]+?@[^ ]+)/,
        lv = /^<.*?>/,
        cv = /^.*?(?=<.*>)/;
    const uv = {
        startState: function() {
            return {
                inSeparator: !1,
                inHeader: !1,
                emailPermitted: !1,
                header: null,
                inHeaders: !1
            }
        },
        token: function(e, t) {
            if (e.sol()) {
                if (t.inSeparator = !1, t.inHeader && e.match(nv)) return null;
                if (t.inHeader = !1, t.header = null, e.match(rv)) return t.inHeaders = !0, t.inSeparator = !0, "atom";
                var n, r = !1;
                return (n = e.match(av)) || (r = !0) && (n = e.match(iv)) ? (t.inHeaders = !0, t.inHeader = !0, t.emailPermitted = r, t.header = n[1], "atom") : t.inHeaders && (n = e.match(ov)) ? (t.inHeader = !0, t.emailPermitted = !0, t.header = n[1], "atom") : (t.inHeaders = !1, e.skipToEnd(), null)
            }
            if (t.inSeparator) return e.match(sv) ? "link" : (e.match(Ov) || e.skipToEnd(), "atom");
            if (t.inHeader) {
                var i = function(e) {
                    return "Subject" === e ? "header" : "string"
                }(t.header);
                if (t.emailPermitted) {
                    if (e.match(lv)) return i + " link";
                    if (e.match(cv)) return i
                }
                return e.skipToEnd(), i
            }
            return e.skipToEnd(), null
        },
        blankLine: function(e) {
            e.inHeaders = e.inSeparator = e.inHeader = !1
        },
        languageData: {
            autocomplete: ev.concat(tv)
        }
    };
    var dv = Object.freeze({
        __proto__: null,
        mbox: uv
    });

    function pv(e) {
        for (var t = {}, n = e.split(" "), r = 0; r < n.length; ++r) t[n[r]] = !0;
        return t
    }
    var hv, fv = pv("break return rewrite set accept_mutex accept_mutex_delay access_log add_after_body add_before_body add_header addition_types aio alias allow ancient_browser ancient_browser_value auth_basic auth_basic_user_file auth_http auth_http_header auth_http_timeout autoindex autoindex_exact_size autoindex_localtime charset charset_types client_body_buffer_size client_body_in_file_only client_body_in_single_buffer client_body_temp_path client_body_timeout client_header_buffer_size client_header_timeout client_max_body_size connection_pool_size create_full_put_path daemon dav_access dav_methods debug_connection debug_points default_type degradation degrade deny devpoll_changes devpoll_events directio directio_alignment empty_gif env epoll_events error_log eventport_events expires fastcgi_bind fastcgi_buffer_size fastcgi_buffers fastcgi_busy_buffers_size fastcgi_cache fastcgi_cache_key fastcgi_cache_methods fastcgi_cache_min_uses fastcgi_cache_path fastcgi_cache_use_stale fastcgi_cache_valid fastcgi_catch_stderr fastcgi_connect_timeout fastcgi_hide_header fastcgi_ignore_client_abort fastcgi_ignore_headers fastcgi_index fastcgi_intercept_errors fastcgi_max_temp_file_size fastcgi_next_upstream fastcgi_param fastcgi_pass_header fastcgi_pass_request_body fastcgi_pass_request_headers fastcgi_read_timeout fastcgi_send_lowat fastcgi_send_timeout fastcgi_split_path_info fastcgi_store fastcgi_store_access fastcgi_temp_file_write_size fastcgi_temp_path fastcgi_upstream_fail_timeout fastcgi_upstream_max_fails flv geoip_city geoip_country google_perftools_profiles gzip gzip_buffers gzip_comp_level gzip_disable gzip_hash gzip_http_version gzip_min_length gzip_no_buffer gzip_proxied gzip_static gzip_types gzip_vary gzip_window if_modified_since ignore_invalid_headers image_filter image_filter_buffer image_filter_jpeg_quality image_filter_transparency imap_auth imap_capabilities imap_client_buffer index ip_hash keepalive_requests keepalive_timeout kqueue_changes kqueue_events large_client_header_buffers limit_conn limit_conn_log_level limit_rate limit_rate_after limit_req limit_req_log_level limit_req_zone limit_zone lingering_time lingering_timeout lock_file log_format log_not_found log_subrequest map_hash_bucket_size map_hash_max_size master_process memcached_bind memcached_buffer_size memcached_connect_timeout memcached_next_upstream memcached_read_timeout memcached_send_timeout memcached_upstream_fail_timeout memcached_upstream_max_fails merge_slashes min_delete_depth modern_browser modern_browser_value msie_padding msie_refresh multi_accept open_file_cache open_file_cache_errors open_file_cache_events open_file_cache_min_uses open_file_cache_valid open_log_file_cache output_buffers override_charset perl perl_modules perl_require perl_set pid pop3_auth pop3_capabilities port_in_redirect postpone_gzipping postpone_output protocol proxy proxy_bind proxy_buffer proxy_buffer_size proxy_buffering proxy_buffers proxy_busy_buffers_size proxy_cache proxy_cache_key proxy_cache_methods proxy_cache_min_uses proxy_cache_path proxy_cache_use_stale proxy_cache_valid proxy_connect_timeout proxy_headers_hash_bucket_size proxy_headers_hash_max_size proxy_hide_header proxy_ignore_client_abort proxy_ignore_headers proxy_intercept_errors proxy_max_temp_file_size proxy_method proxy_next_upstream proxy_pass_error_message proxy_pass_header proxy_pass_request_body proxy_pass_request_headers proxy_read_timeout proxy_redirect proxy_send_lowat proxy_send_timeout proxy_set_body proxy_set_header proxy_ssl_session_reuse proxy_store proxy_store_access proxy_temp_file_write_size proxy_temp_path proxy_timeout proxy_upstream_fail_timeout proxy_upstream_max_fails random_index read_ahead real_ip_header recursive_error_pages request_pool_size reset_timedout_connection resolver resolver_timeout rewrite_log rtsig_overflow_events rtsig_overflow_test rtsig_overflow_threshold rtsig_signo satisfy secure_link_secret send_lowat send_timeout sendfile sendfile_max_chunk server_name_in_redirect server_names_hash_bucket_size server_names_hash_max_size server_tokens set_real_ip_from smtp_auth smtp_capabilities smtp_client_buffer smtp_greeting_delay so_keepalive source_charset ssi ssi_ignore_recycled_buffers ssi_min_file_chunk ssi_silent_errors ssi_types ssi_value_length ssl ssl_certificate ssl_certificate_key ssl_ciphers ssl_client_certificate ssl_crl ssl_dhparam ssl_engine ssl_prefer_server_ciphers ssl_protocols ssl_session_cache ssl_session_timeout ssl_verify_client ssl_verify_depth starttls stub_status sub_filter sub_filter_once sub_filter_types tcp_nodelay tcp_nopush thread_stack_size timeout timer_resolution types_hash_bucket_size types_hash_max_size underscores_in_headers uninitialized_variable_warn use user userid userid_domain userid_expires userid_mark userid_name userid_p3p userid_path userid_service valid_referers variables_hash_bucket_size variables_hash_max_size worker_connections worker_cpu_affinity worker_priority worker_processes worker_rlimit_core worker_rlimit_nofile worker_rlimit_sigpending worker_threads working_directory xclient xml_entities xslt_stylesheet xslt_typesdrew@li229-23"),
        mv = pv("http mail events server types location upstream charset_map limit_except if geo map"),
        gv = pv("include root server server_name listen internal proxy_pass memcached_pass fastcgi_pass try_files");

    function Qv(e, t) {
        return hv = t, e
    }

    function $v(e, t) {
        e.eatWhile(/[\w\$_]/);
        var n = e.current();
        if (fv.propertyIsEnumerable(n)) return "keyword";
        if (mv.propertyIsEnumerable(n)) return "controlKeyword";
        if (gv.propertyIsEnumerable(n)) return "controlKeyword";
        var r = e.next();
        return "@" == r ? (e.eatWhile(/[\w\\\-]/), Qv("meta", e.current())) : "/" == r && e.eat("*") ? (t.tokenize = bv, bv(e, t)) : "<" == r && e.eat("!") ? (t.tokenize = xv, xv(e, t)) : "=" != r ? "~" != r && "|" != r || !e.eat("=") ? '"' == r || "'" == r ? (t.tokenize = function(e) {
            return function(t, n) {
                for (var r, i = !1; null != (r = t.next()) && (r != e || i);) i = !i && "\\" == r;
                return i || (n.tokenize = $v), Qv("string", "string")
            }
        }(r), t.tokenize(e, t)) : "#" == r ? (e.skipToEnd(), Qv("comment", "comment")) : "!" == r ? (e.match(/^\s*\w*/), Qv("keyword", "important")) : /\d/.test(r) ? (e.eatWhile(/[\w.%]/), Qv("number", "unit")) : /[,.+>*\/]/.test(r) ? Qv(null, "select-op") : /[;{}:\[\]]/.test(r) ? Qv(null, r) : (e.eatWhile(/[\w\\\-]/), Qv("variable", "variable")) : Qv(null, "compare") : void Qv(null, "compare")
    }

    function bv(e, t) {
        for (var n, r = !1; null != (n = e.next());) {
            if (r && "/" == n) {
                t.tokenize = $v;
                break
            }
            r = "*" == n
        }
        return Qv("comment", "comment")
    }

    function xv(e, t) {
        for (var n, r = 0; null != (n = e.next());) {
            if (r >= 2 && ">" == n) {
                t.tokenize = $v;
                break
            }
            r = "-" == n ? r + 1 : 0
        }
        return Qv("comment", "comment")
    }
    const Pv = {
        startState: function() {
            return {
                tokenize: $v,
                baseIndent: 0,
                stack: []
            }
        },
        token: function(e, t) {
            if (e.eatSpace()) return null;
            hv = null;
            var n = t.tokenize(e, t),
                r = t.stack[t.stack.length - 1];
            return "hash" == hv && "rule" == r ? n = "atom" : "variable" == n && ("rule" == r ? n = "number" : r && "@media{" != r || (n = "tag")), "rule" == r && /^[\{\};]$/.test(hv) && t.stack.pop(), "{" == hv ? "@media" == r ? t.stack[t.stack.length - 1] = "@media{" : t.stack.push("{") : "}" == hv ? t.stack.pop() : "@media" == hv ? t.stack.push("@media") : "{" == r && "comment" != hv && t.stack.push("rule"), n
        },
        indent: function(e, t, n) {
            var r = e.stack.length;
            return /^\}/.test(t) && (r -= "rule" == e.stack[e.stack.length - 1] ? 2 : 1), e.baseIndent + r * n.unit
        },
        languageData: {
            indentOnInput: /^\s*\}$/
        }
    };
    var wv = Object.freeze({
        __proto__: null,
        nginx: Pv
    });
    const kv = SQ({
        start: [{
            regex: /(?:[+-]?)(?:0x[\d,a-f]+)|(?:0o[0-7]+)|(?:0b[0,1]+)|(?:\d+.?\d*)/,
            token: "number"
        }, {
            regex: /"(?:[^\\"]|\\.)*"?/,
            token: "string"
        }, {
            regex: /'(?:[^\\']|\\.)*'?/,
            token: "string"
        }, {
            regex: /`(?:[^\\`]|\\.)*`?/,
            token: "string"
        }, {
            regex: /^\s*(?:\!(include|addincludedir|addplugindir|appendfile|cd|delfile|echo|error|execute|packhdr|pragma|finalize|getdllversion|gettlbversion|system|tempfile|warning|verbose|define|undef|insertmacro|macro|macroend|makensis|searchparse|searchreplace))\b/,
            token: "keyword"
        }, {
            regex: /^\s*(?:\!(if(?:n?def)?|ifmacron?def|macro))\b/,
            token: "keyword",
            indent: !0
        }, {
            regex: /^\s*(?:\!(else|endif|macroend))\b/,
            token: "keyword",
            dedent: !0
        }, {
            regex: /^\s*(?:Abort|AddBrandingImage|AddSize|AllowRootDirInstall|AllowSkipFiles|AutoCloseWindow|BGFont|BGGradient|BrandingText|BringToFront|Call|CallInstDLL|Caption|ChangeUI|CheckBitmap|ClearErrors|CompletedText|ComponentText|CopyFiles|CRCCheck|CreateDirectory|CreateFont|CreateShortCut|Delete|DeleteINISec|DeleteINIStr|DeleteRegKey|DeleteRegValue|DetailPrint|DetailsButtonText|DirText|DirVar|DirVerify|EnableWindow|EnumRegKey|EnumRegValue|Exch|Exec|ExecShell|ExecShellWait|ExecWait|ExpandEnvStrings|File|FileBufSize|FileClose|FileErrorText|FileOpen|FileRead|FileReadByte|FileReadUTF16LE|FileReadWord|FileWriteUTF16LE|FileSeek|FileWrite|FileWriteByte|FileWriteWord|FindClose|FindFirst|FindNext|FindWindow|FlushINI|GetCurInstType|GetCurrentAddress|GetDlgItem|GetDLLVersion|GetDLLVersionLocal|GetErrorLevel|GetFileTime|GetFileTimeLocal|GetFullPathName|GetFunctionAddress|GetInstDirError|GetKnownFolderPath|GetLabelAddress|GetTempFileName|Goto|HideWindow|Icon|IfAbort|IfErrors|IfFileExists|IfRebootFlag|IfRtlLanguage|IfShellVarContextAll|IfSilent|InitPluginsDir|InstallButtonText|InstallColors|InstallDir|InstallDirRegKey|InstProgressFlags|InstType|InstTypeGetText|InstTypeSetText|Int64Cmp|Int64CmpU|Int64Fmt|IntCmp|IntCmpU|IntFmt|IntOp|IntPtrCmp|IntPtrCmpU|IntPtrOp|IsWindow|LangString|LicenseBkColor|LicenseData|LicenseForceSelection|LicenseLangString|LicenseText|LoadAndSetImage|LoadLanguageFile|LockWindow|LogSet|LogText|ManifestDPIAware|ManifestLongPathAware|ManifestMaxVersionTested|ManifestSupportedOS|MessageBox|MiscButtonText|Name|Nop|OutFile|Page|PageCallbacks|PEAddResource|PEDllCharacteristics|PERemoveResource|PESubsysVer|Pop|Push|Quit|ReadEnvStr|ReadINIStr|ReadRegDWORD|ReadRegStr|Reboot|RegDLL|Rename|RequestExecutionLevel|ReserveFile|Return|RMDir|SearchPath|SectionGetFlags|SectionGetInstTypes|SectionGetSize|SectionGetText|SectionIn|SectionSetFlags|SectionSetInstTypes|SectionSetSize|SectionSetText|SendMessage|SetAutoClose|SetBrandingImage|SetCompress|SetCompressor|SetCompressorDictSize|SetCtlColors|SetCurInstType|SetDatablockOptimize|SetDateSave|SetDetailsPrint|SetDetailsView|SetErrorLevel|SetErrors|SetFileAttributes|SetFont|SetOutPath|SetOverwrite|SetRebootFlag|SetRegView|SetShellVarContext|SetSilent|ShowInstDetails|ShowUninstDetails|ShowWindow|SilentInstall|SilentUnInstall|Sleep|SpaceTexts|StrCmp|StrCmpS|StrCpy|StrLen|SubCaption|Unicode|UninstallButtonText|UninstallCaption|UninstallIcon|UninstallSubCaption|UninstallText|UninstPage|UnRegDLL|Var|VIAddVersionKey|VIFileVersion|VIProductVersion|WindowIcon|WriteINIStr|WriteRegBin|WriteRegDWORD|WriteRegExpandStr|WriteRegMultiStr|WriteRegNone|WriteRegStr|WriteUninstaller|XPStyle)\b/,
            token: "keyword"
        }, {
            regex: /^\s*(?:Function|PageEx|Section(?:Group)?)\b/,
            token: "keyword",
            indent: !0
        }, {
            regex: /^\s*(?:(Function|PageEx|Section(?:Group)?)End)\b/,
            token: "keyword",
            dedent: !0
        }, {
            regex: /\b(?:ARCHIVE|FILE_ATTRIBUTE_ARCHIVE|FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_NORMAL|FILE_ATTRIBUTE_OFFLINE|FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_TEMPORARY|HIDDEN|HKCC|HKCR(32|64)?|HKCU(32|64)?|HKDD|HKEY_CLASSES_ROOT|HKEY_CURRENT_CONFIG|HKEY_CURRENT_USER|HKEY_DYN_DATA|HKEY_LOCAL_MACHINE|HKEY_PERFORMANCE_DATA|HKEY_USERS|HKLM(32|64)?|HKPD|HKU|IDABORT|IDCANCEL|IDD_DIR|IDD_INST|IDD_INSTFILES|IDD_LICENSE|IDD_SELCOM|IDD_UNINST|IDD_VERIFY|IDIGNORE|IDNO|IDOK|IDRETRY|IDYES|MB_ABORTRETRYIGNORE|MB_DEFBUTTON1|MB_DEFBUTTON2|MB_DEFBUTTON3|MB_DEFBUTTON4|MB_ICONEXCLAMATION|MB_ICONINFORMATION|MB_ICONQUESTION|MB_ICONSTOP|MB_OK|MB_OKCANCEL|MB_RETRYCANCEL|MB_RIGHT|MB_RTLREADING|MB_SETFOREGROUND|MB_TOPMOST|MB_USERICON|MB_YESNO|MB_YESNOCANCEL|NORMAL|OFFLINE|READONLY|SHCTX|SHELL_CONTEXT|SW_HIDE|SW_SHOWDEFAULT|SW_SHOWMAXIMIZED|SW_SHOWMINIMIZED|SW_SHOWNORMAL|SYSTEM|TEMPORARY)\b/,
            token: "atom"
        }, {
            regex: /\b(?:admin|all|auto|both|bottom|bzip2|components|current|custom|directory|false|force|hide|highest|ifdiff|ifnewer|instfiles|lastused|leave|left|license|listonly|lzma|nevershow|none|normal|notset|off|on|right|show|silent|silentlog|textonly|top|true|try|un\.components|un\.custom|un\.directory|un\.instfiles|un\.license|uninstConfirm|user|Win10|Win7|Win8|WinVista|zlib)\b/,
            token: "builtin"
        }, {
            regex: /\$\{(?:And(?:If(?:Not)?|Unless)|Break|Case(?:Else)?|Continue|Default|Do(?:Until|While)?|Else(?:If(?:Not)?|Unless)?|End(?:If|Select|Switch)|Exit(?:Do|For|While)|For(?:Each)?|If(?:Cmd|Not(?:Then)?|Then)?|Loop(?:Until|While)?|Or(?:If(?:Not)?|Unless)|Select|Switch|Unless|While)\}/,
            token: "controlKeyword",
            indent: !0
        }, {
            regex: /\$\{(?:BannerTrimPath|DirState|DriveSpace|Get(BaseName|Drives|ExeName|ExePath|FileAttributes|FileExt|FileName|FileVersion|Options|OptionsS|Parameters|Parent|Root|Size|Time)|Locate|RefreshShellIcons)\}/,
            token: "modifier",
            dedent: !0
        }, {
            regex: /\$\{(?:Memento(?:Section(?:Done|End|Restore|Save)?|UnselectedSection))\}/,
            token: "controlKeyword",
            dedent: !0
        }, {
            regex: /\$\{(?:Config(?:Read|ReadS|Write|WriteS)|File(?:Join|ReadFromEnd|Recode)|Line(?:Find|Read|Sum)|Text(?:Compare|CompareS)|TrimNewLines)\}/,
            token: "keyword",
            dedent: !0
        }, {
            regex: /\$\{(?:(?:At(?:Least|Most)|Is)(?:ServicePack|Win(?:7|8|10|95|98|200(?:0|3|8(?:R2)?)|ME|NT4|Vista|XP))|Is(?:NT|Server))\}/,
            token: "variable",
            dedent: !0
        }, {
            regex: /\$\{(?:StrFilterS?|Version(?:Compare|Convert)|Word(?:AddS?|Find(?:(?:2|3)X)?S?|InsertS?|ReplaceS?))\}/,
            token: "keyword",
            dedent: !0
        }, {
            regex: /\$\{(?:RunningX64)\}/,
            token: "variable",
            dedent: !0
        }, {
            regex: /\$\{(?:Disable|Enable)X64FSRedirection\}/,
            token: "keyword",
            dedent: !0
        }, {
            regex: /(#|;).*/,
            token: "comment"
        }, {
            regex: /\/\*/,
            token: "comment",
            next: "comment"
        }, {
            regex: /[-+\/*=<>!]+/,
            token: "operator"
        }, {
            regex: /\$\w+/,
            token: "variable"
        }, {
            regex: /\${[\w\.:-]+}/,
            token: "variableName.constant"
        }, {
            regex: /\$\([\w\.:-]+\)/,
            token: "atom"
        }],
        comment: [{
            regex: /.*?\*\//,
            token: "comment",
            next: "start"
        }, {
            regex: /.*/,
            token: "comment"
        }],
        languageData: {
            indentOnInput: /^\s*((Function|PageEx|Section|Section(Group)?)End|(\!(endif|macroend))|\$\{(End(If|Unless|While)|Loop(Until)|Next)\})$/,
            commentTokens: {
                line: "#",
                block: {
                    open: "/*",
                    close: "*/"
                }
            }
        }
    });
    var yv = Object.freeze({
            __proto__: null,
            nsis: kv
        }),
        vv = 0,
        Sv = 1,
        _v = 2,
        Xv = 3,
        Tv = 4,
        Rv = 5,
        Wv = 6,
        qv = 7,
        Yv = 8,
        zv = 9,
        Zv = 10,
        Ev = 11,
        Iv = 12;

    function Uv(e, t) {
        var n, r = e.location;
        n = r == vv && "<" == t ? Sv : r == vv && "_" == t ? _v : r == Xv && "<" == t ? Tv : r == Rv && "<" == t ? Wv : r == Rv && "_" == t ? qv : r == Rv && '"' == t ? Yv : r == Sv && ">" == t || r == _v && " " == t ? Xv : r == Tv && ">" == t ? Rv : r == Wv && ">" == t || r == qv && " " == t || r == Yv && '"' == t || r == zv && " " == t || r == Zv && ">" == t ? Ev : r == Yv && "@" == t ? zv : r == Yv && "^" == t ? Zv : " " != t || r != vv && r != Xv && r != Rv && r != Ev ? r == Ev && "." == t ? vv : Iv : r, e.location = n
    }
    const Vv = {
        startState: function() {
            return {
                location: vv,
                uris: [],
                anchors: [],
                bnodes: [],
                langs: [],
                types: []
            }
        },
        token: function(e, t) {
            var n = e.next();
            if ("<" == n) {
                Uv(t, n);
                var r = "";
                return e.eatWhile((function(e) {
                    return "#" != e && ">" != e && (r += e, !0)
                })), t.uris.push(r), e.match("#", !1) ? "variable" : (e.next(), Uv(t, ">"), "variable")
            }
            if ("#" == n) {
                var i = "";
                return e.eatWhile((function(e) {
                    return ">" != e && " " != e && (i += e, !0)
                })), t.anchors.push(i), "url"
            }
            if (">" == n) return Uv(t, ">"), "variable";
            if ("_" == n) {
                Uv(t, n);
                var a = "";
                return e.eatWhile((function(e) {
                    return " " != e && (a += e, !0)
                })), t.bnodes.push(a), e.next(), Uv(t, " "), "builtin"
            }
            if ('"' == n) return Uv(t, n), e.eatWhile((function(e) {
                return '"' != e
            })), e.next(), "@" != e.peek() && "^" != e.peek() && Uv(t, '"'), "string";
            if ("@" == n) {
                Uv(t, "@");
                var o = "";
                return e.eatWhile((function(e) {
                    return " " != e && (o += e, !0)
                })), t.langs.push(o), e.next(), Uv(t, " "), "string.special"
            }
            if ("^" == n) {
                e.next(), Uv(t, "^");
                var s = "";
                return e.eatWhile((function(e) {
                    return ">" != e && (s += e, !0)
                })), t.types.push(s), e.next(), Uv(t, ">"), "variable"
            }
            " " == n && Uv(t, n), "." == n && Uv(t, n)
        }
    };
    var jv = Object.freeze({
        __proto__: null,
        ntriples: Vv
    });

    function Av(e) {
        return new RegExp("^((" + e.join(")|(") + "))\\b")
    }
    var Cv = new RegExp("^[\\+\\-\\*/&|\\^~<>!@'\\\\]"),
        Gv = new RegExp("^[\\(\\[\\{\\},:=;\\.]"),
        Lv = new RegExp("^((==)|(~=)|(<=)|(>=)|(<<)|(>>)|(\\.[\\+\\-\\*/\\^\\\\]))"),
        Nv = new RegExp("^((!=)|(\\+=)|(\\-=)|(\\*=)|(/=)|(&=)|(\\|=)|(\\^=))"),
        Dv = new RegExp("^((>>=)|(<<=))"),
        Mv = new RegExp("^[\\]\\)]"),
        Bv = new RegExp("^[_A-Za-z¡-][_A-Za-z0-9¡-]*"),
        Fv = Av(["error", "eval", "function", "abs", "acos", "atan", "asin", "cos", "cosh", "exp", "log", "prod", "sum", "log10", "max", "min", "sign", "sin", "sinh", "sqrt", "tan", "reshape", "break", "zeros", "default", "margin", "round", "ones", "rand", "syn", "ceil", "floor", "size", "clear", "zeros", "eye", "mean", "std", "cov", "det", "eig", "inv", "norm", "rank", "trace", "expm", "logm", "sqrtm", "linspace", "plot", "title", "xlabel", "ylabel", "legend", "text", "grid", "meshgrid", "mesh", "num2str", "fft", "ifft", "arrayfun", "cellfun", "input", "fliplr", "flipud", "ismember"]),
        Hv = Av(["return", "case", "switch", "else", "elseif", "end", "endif", "endfunction", "if", "otherwise", "do", "for", "while", "try", "catch", "classdef", "properties", "events", "methods", "global", "persistent", "endfor", "endwhile", "printf", "sprintf", "disp", "until", "continue", "pkg"]);

    function Jv(e, t) {
        return e.sol() || "'" !== e.peek() ? (t.tokenize = eS, eS(e, t)) : (e.next(), t.tokenize = eS, "operator")
    }

    function Kv(e, t) {
        return e.match(/^.*%}/) ? (t.tokenize = eS, "comment") : (e.skipToEnd(), "comment")
    }

    function eS(e, t) {
        if (e.eatSpace()) return null;
        if (e.match("%{")) return t.tokenize = Kv, e.skipToEnd(), "comment";
        if (e.match(/^[%#]/)) return e.skipToEnd(), "comment";
        if (e.match(/^[0-9\.+-]/, !1)) {
            if (e.match(/^[+-]?0x[0-9a-fA-F]+[ij]?/)) return e.tokenize = eS, "number";
            if (e.match(/^[+-]?\d*\.\d+([EeDd][+-]?\d+)?[ij]?/)) return "number";
            if (e.match(/^[+-]?\d+([EeDd][+-]?\d+)?[ij]?/)) return "number"
        }
        if (e.match(Av(["nan", "NaN", "inf", "Inf"]))) return "number";
        var n = e.match(/^"(?:[^"]|"")*("|$)/) || e.match(/^'(?:[^']|'')*('|$)/);
        return n ? n[1] ? "string" : "error" : e.match(Hv) ? "keyword" : e.match(Fv) ? "builtin" : e.match(Bv) ? "variable" : e.match(Cv) || e.match(Lv) ? "operator" : e.match(Gv) || e.match(Nv) || e.match(Dv) ? null : e.match(Mv) ? (t.tokenize = Jv, null) : (e.next(), "error")
    }
    const tS = {
        startState: function() {
            return {
                tokenize: eS
            }
        },
        token: function(e, t) {
            var n = t.tokenize(e, t);
            return "number" !== n && "variable" !== n || (t.tokenize = Jv), n
        },
        languageData: {
            commentTokens: {
                line: "%"
            }
        }
    };
    var nS = Object.freeze({
        __proto__: null,
        octave: tS
    });

    function rS(e) {
        return new RegExp("^((" + e.join(")|(") + "))\\b")
    }
    var iS = /[\^@!\|<>#~\.\*\-\+\\/,=]/,
        aS = /(<-)|(:=)|(=<)|(>=)|(<=)|(<:)|(>:)|(=:)|(\\=)|(\\=:)|(!!)|(==)|(::)/,
        oS = /(:::)|(\.\.\.)|(=<:)|(>=:)/,
        sS = ["in", "then", "else", "of", "elseof", "elsecase", "elseif", "catch", "finally", "with", "require", "prepare", "import", "export", "define", "do"],
        OS = ["end"],
        lS = rS(["true", "false", "nil", "unit"]),
        cS = rS(["andthen", "at", "attr", "declare", "feat", "from", "lex", "mod", "div", "mode", "orelse", "parser", "prod", "prop", "scanner", "self", "syn", "token"]),
        uS = rS(["local", "proc", "fun", "case", "class", "if", "cond", "or", "dis", "choice", "not", "thread", "try", "raise", "lock", "for", "suchthat", "meth", "functor"]),
        dS = rS(sS),
        pS = rS(OS);

    function hS(e, t) {
        if (e.eatSpace()) return null;
        if (e.match(/[{}]/)) return "bracket";
        if (e.match("[]")) return "keyword";
        if (e.match(oS) || e.match(aS)) return "operator";
        if (e.match(lS)) return "atom";
        var n = e.match(uS);
        if (n) return t.doInCurrentLine ? t.doInCurrentLine = !1 : t.currentIndent++, "proc" == n[0] || "fun" == n[0] ? t.tokenize = gS : "class" == n[0] ? t.tokenize = fS : "meth" == n[0] && (t.tokenize = mS), "keyword";
        if (e.match(dS) || e.match(cS)) return "keyword";
        if (e.match(pS)) return t.currentIndent--, "keyword";
        var r = e.next();
        if ('"' == r || "'" == r) return t.tokenize = function(e) {
            return function(t, n) {
                for (var r, i = !1, a = !1; null != (r = t.next());) {
                    if (r == e && !i) {
                        a = !0;
                        break
                    }
                    i = !i && "\\" == r
                }
                return !a && i || (n.tokenize = hS), "string"
            }
        }(r), t.tokenize(e, t);
        if (/[~\d]/.test(r)) {
            if ("~" == r) {
                if (!/^[0-9]/.test(e.peek())) return null;
                if ("0" == e.next() && e.match(/^[xX][0-9a-fA-F]+/) || e.match(/^[0-9]*(\.[0-9]+)?([eE][~+]?[0-9]+)?/)) return "number"
            }
            return "0" == r && e.match(/^[xX][0-9a-fA-F]+/) || e.match(/^[0-9]*(\.[0-9]+)?([eE][~+]?[0-9]+)?/) ? "number" : null
        }
        return "%" == r ? (e.skipToEnd(), "comment") : "/" == r && e.eat("*") ? (t.tokenize = QS, QS(e, t)) : iS.test(r) ? "operator" : (e.eatWhile(/\w/), "variable")
    }

    function fS(e, t) {
        return e.eatSpace() ? null : (e.match(/([A-Z][A-Za-z0-9_]*)|(`.+`)/), t.tokenize = hS, "type")
    }

    function mS(e, t) {
        return e.eatSpace() ? null : (e.match(/([a-zA-Z][A-Za-z0-9_]*)|(`.+`)/), t.tokenize = hS, "def")
    }

    function gS(e, t) {
        return e.eatSpace() ? null : !t.hasPassedFirstStage && e.eat("{") ? (t.hasPassedFirstStage = !0, "bracket") : t.hasPassedFirstStage ? (e.match(/([A-Z][A-Za-z0-9_]*)|(`.+`)|\$/), t.hasPassedFirstStage = !1, t.tokenize = hS, "def") : (t.tokenize = hS, null)
    }

    function QS(e, t) {
        for (var n, r = !1; n = e.next();) {
            if ("/" == n && r) {
                t.tokenize = hS;
                break
            }
            r = "*" == n
        }
        return "comment"
    }
    const $S = {
        startState: function() {
            return {
                tokenize: hS,
                currentIndent: 0,
                doInCurrentLine: !1,
                hasPassedFirstStage: !1
            }
        },
        token: function(e, t) {
            return e.sol() && (t.doInCurrentLine = 0), t.tokenize(e, t)
        },
        indent: function(e, t, n) {
            var r = t.replace(/^\s+|\s+$/g, "");
            return r.match(pS) || r.match(dS) || r.match(/(\[])/) ? n.unit * (e.currentIndent - 1) : e.currentIndent < 0 ? 0 : e.currentIndent * n.unit
        },
        languageData: {
            indentOnInut: (bS = sS.concat(OS), new RegExp("[\\[\\]]|(" + bS.join("|") + ")$")),
            commentTokens: {
                line: "%",
                block: {
                    open: "/*",
                    close: "*/"
                }
            }
        }
    };
    var bS, xS = Object.freeze({
        __proto__: null,
        oz: $S
    });
    var PS = function(e) {
            for (var t = {}, n = e.split(" "), r = 0; r < n.length; ++r) t[n[r]] = !0;
            return t
        }("absolute and array asm begin case const constructor destructor div do downto else end file for function goto if implementation in inherited inline interface label mod nil not object of operator or packed procedure program record reintroduce repeat self set shl shr string then to type unit until uses var while with xor as class dispinterface except exports finalization finally initialization inline is library on out packed property raise resourcestring threadvar try absolute abstract alias assembler bitpacked break cdecl continue cppdecl cvar default deprecated dynamic enumerator experimental export external far far16 forward generic helper implements index interrupt iocheck local message name near nodefault noreturn nostackframe oldfpccall otherwise overload override pascal platform private protected public published read register reintroduce result safecall saveregisters softfloat specialize static stdcall stored strict unaligned unimplemented varargs virtual write"),
        wS = {
            null: !0
        },
        kS = /[+\-*&%=<>!?|\/]/;

    function yS(e, t) {
        var n = e.next();
        if ("#" == n && t.startOfLine) return e.skipToEnd(), "meta";
        if ('"' == n || "'" == n) return t.tokenize = function(e) {
            return function(t, n) {
                for (var r, i = !1, a = !1; null != (r = t.next());) {
                    if (r == e && !i) {
                        a = !0;
                        break
                    }
                    i = !i && "\\" == r
                }
                return !a && i || (n.tokenize = null), "string"
            }
        }(n), t.tokenize(e, t);
        if ("(" == n && e.eat("*")) return t.tokenize = vS, vS(e, t);
        if ("{" == n) return t.tokenize = SS, SS(e, t);
        if (/[\[\]\(\),;\:\.]/.test(n)) return null;
        if (/\d/.test(n)) return e.eatWhile(/[\w\.]/), "number";
        if ("/" == n && e.eat("/")) return e.skipToEnd(), "comment";
        if (kS.test(n)) return e.eatWhile(kS), "operator";
        e.eatWhile(/[\w\$_]/);
        var r = e.current();
        return PS.propertyIsEnumerable(r) ? "keyword" : wS.propertyIsEnumerable(r) ? "atom" : "variable"
    }

    function vS(e, t) {
        for (var n, r = !1; n = e.next();) {
            if (")" == n && r) {
                t.tokenize = null;
                break
            }
            r = "*" == n
        }
        return "comment"
    }

    function SS(e, t) {
        for (var n; n = e.next();)
            if ("}" == n) {
                t.tokenize = null;
                break
            }
        return "comment"
    }
    const _S = {
        startState: function() {
            return {
                tokenize: null
            }
        },
        token: function(e, t) {
            if (e.eatSpace()) return null;
            var n = (t.tokenize || yS)(e, t);
            return n
        },
        languageData: {
            indentOnInput: /^\s*[{}]$/,
            commentTokens: {
                block: {
                    open: "(*",
                    close: "*)"
                }
            }
        }
    };
    var XS = Object.freeze({
        __proto__: null,
        pascal: _S
    });

    function TS(e, t) {
        return e.string.charAt(e.pos + (t || 0))
    }

    function RS(e, t) {
        if (t) {
            var n = e.pos - t;
            return e.string.substr(n >= 0 ? n : 0, t)
        }
        return e.string.substr(0, e.pos - 1)
    }

    function WS(e, t) {
        var n = e.string.length,
            r = n - e.pos + 1;
        return e.string.substr(e.pos, t && t < n ? t : r)
    }

    function qS(e, t) {
        var n, r = e.pos + t;
        r <= 0 ? e.pos = 0 : r >= (n = e.string.length - 1) ? e.pos = n : e.pos = r
    }
    var YS = {
            "->": 4,
            "++": 4,
            "--": 4,
            "**": 4,
            "=~": 4,
            "!~": 4,
            "*": 4,
            "/": 4,
            "%": 4,
            x: 4,
            "+": 4,
            "-": 4,
            ".": 4,
            "<<": 4,
            ">>": 4,
            "<": 4,
            ">": 4,
            "<=": 4,
            ">=": 4,
            lt: 4,
            gt: 4,
            le: 4,
            ge: 4,
            "==": 4,
            "!=": 4,
            "<=>": 4,
            eq: 4,
            ne: 4,
            cmp: 4,
            "~~": 4,
            "&": 4,
            "|": 4,
            "^": 4,
            "&&": 4,
            "||": 4,
            "//": 4,
            "..": 4,
            "...": 4,
            "?": 4,
            ":": 4,
            "=": 4,
            "+=": 4,
            "-=": 4,
            "*=": 4,
            ",": 4,
            "=>": 4,
            "::": 4,
            not: 4,
            and: 4,
            or: 4,
            xor: 4,
            BEGIN: [5, 1],
            END: [5, 1],
            PRINT: [5, 1],
            PRINTF: [5, 1],
            GETC: [5, 1],
            READ: [5, 1],
            READLINE: [5, 1],
            DESTROY: [5, 1],
            TIE: [5, 1],
            TIEHANDLE: [5, 1],
            UNTIE: [5, 1],
            STDIN: 5,
            STDIN_TOP: 5,
            STDOUT: 5,
            STDOUT_TOP: 5,
            STDERR: 5,
            STDERR_TOP: 5,
            $ARG: 5,
            $_: 5,
            "@ARG": 5,
            "@_": 5,
            $LIST_SEPARATOR: 5,
            '$"': 5,
            $PROCESS_ID: 5,
            $PID: 5,
            $$: 5,
            $REAL_GROUP_ID: 5,
            $GID: 5,
            "$(": 5,
            $EFFECTIVE_GROUP_ID: 5,
            $EGID: 5,
            "$)": 5,
            $PROGRAM_NAME: 5,
            $0: 5,
            $SUBSCRIPT_SEPARATOR: 5,
            $SUBSEP: 5,
            "$;": 5,
            $REAL_USER_ID: 5,
            $UID: 5,
            "$<": 5,
            $EFFECTIVE_USER_ID: 5,
            $EUID: 5,
            "$>": 5,
            $a: 5,
            $b: 5,
            $COMPILING: 5,
            "$^C": 5,
            $DEBUGGING: 5,
            "$^D": 5,
            "${^ENCODING}": 5,
            $ENV: 5,
            "%ENV": 5,
            $SYSTEM_FD_MAX: 5,
            "$^F": 5,
            "@F": 5,
            "${^GLOBAL_PHASE}": 5,
            "$^H": 5,
            "%^H": 5,
            "@INC": 5,
            "%INC": 5,
            $INPLACE_EDIT: 5,
            "$^I": 5,
            "$^M": 5,
            $OSNAME: 5,
            "$^O": 5,
            "${^OPEN}": 5,
            $PERLDB: 5,
            "$^P": 5,
            $SIG: 5,
            "%SIG": 5,
            $BASETIME: 5,
            "$^T": 5,
            "${^TAINT}": 5,
            "${^UNICODE}": 5,
            "${^UTF8CACHE}": 5,
            "${^UTF8LOCALE}": 5,
            $PERL_VERSION: 5,
            "$^V": 5,
            "${^WIN32_SLOPPY_STAT}": 5,
            $EXECUTABLE_NAME: 5,
            "$^X": 5,
            $1: 5,
            $MATCH: 5,
            "$&": 5,
            "${^MATCH}": 5,
            $PREMATCH: 5,
            "$`": 5,
            "${^PREMATCH}": 5,
            $POSTMATCH: 5,
            "$'": 5,
            "${^POSTMATCH}": 5,
            $LAST_PAREN_MATCH: 5,
            "$+": 5,
            $LAST_SUBMATCH_RESULT: 5,
            "$^N": 5,
            "@LAST_MATCH_END": 5,
            "@+": 5,
            "%LAST_PAREN_MATCH": 5,
            "%+": 5,
            "@LAST_MATCH_START": 5,
            "@-": 5,
            "%LAST_MATCH_START": 5,
            "%-": 5,
            $LAST_REGEXP_CODE_RESULT: 5,
            "$^R": 5,
            "${^RE_DEBUG_FLAGS}": 5,
            "${^RE_TRIE_MAXBUF}": 5,
            $ARGV: 5,
            "@ARGV": 5,
            ARGV: 5,
            ARGVOUT: 5,
            $OUTPUT_FIELD_SEPARATOR: 5,
            $OFS: 5,
            "$,": 5,
            $INPUT_LINE_NUMBER: 5,
            $NR: 5,
            "$.": 5,
            $INPUT_RECORD_SEPARATOR: 5,
            $RS: 5,
            "$/": 5,
            $OUTPUT_RECORD_SEPARATOR: 5,
            $ORS: 5,
            "$\\": 5,
            $OUTPUT_AUTOFLUSH: 5,
            "$|": 5,
            $ACCUMULATOR: 5,
            "$^A": 5,
            $FORMAT_FORMFEED: 5,
            "$^L": 5,
            $FORMAT_PAGE_NUMBER: 5,
            "$%": 5,
            $FORMAT_LINES_LEFT: 5,
            "$-": 5,
            $FORMAT_LINE_BREAK_CHARACTERS: 5,
            "$:": 5,
            $FORMAT_LINES_PER_PAGE: 5,
            "$=": 5,
            $FORMAT_TOP_NAME: 5,
            "$^": 5,
            $FORMAT_NAME: 5,
            "$~": 5,
            "${^CHILD_ERROR_NATIVE}": 5,
            $EXTENDED_OS_ERROR: 5,
            "$^E": 5,
            $EXCEPTIONS_BEING_CAUGHT: 5,
            "$^S": 5,
            $WARNING: 5,
            "$^W": 5,
            "${^WARNING_BITS}": 5,
            $OS_ERROR: 5,
            $ERRNO: 5,
            "$!": 5,
            "%OS_ERROR": 5,
            "%ERRNO": 5,
            "%!": 5,
            $CHILD_ERROR: 5,
            "$?": 5,
            $EVAL_ERROR: 5,
            "$@": 5,
            $OFMT: 5,
            "$#": 5,
            "$*": 5,
            $ARRAY_BASE: 5,
            "$[": 5,
            $OLD_PERL_VERSION: 5,
            "$]": 5,
            if: [1, 1],
            elsif: [1, 1],
            else: [1, 1],
            while: [1, 1],
            unless: [1, 1],
            for: [1, 1],
            foreach: [1, 1],
            abs: 1,
            accept: 1,
            alarm: 1,
            atan2: 1,
            bind: 1,
            binmode: 1,
            bless: 1,
            bootstrap: 1,
            break: 1,
            caller: 1,
            chdir: 1,
            chmod: 1,
            chomp: 1,
            chop: 1,
            chown: 1,
            chr: 1,
            chroot: 1,
            close: 1,
            closedir: 1,
            connect: 1,
            continue: [1, 1],
            cos: 1,
            crypt: 1,
            dbmclose: 1,
            dbmopen: 1,
            default: 1,
            defined: 1,
            delete: 1,
            die: 1,
            do: 1,
            dump: 1,
            each: 1,
            endgrent: 1,
            endhostent: 1,
            endnetent: 1,
            endprotoent: 1,
            endpwent: 1,
            endservent: 1,
            eof: 1,
            eval: 1,
            exec: 1,
            exists: 1,
            exit: 1,
            exp: 1,
            fcntl: 1,
            fileno: 1,
            flock: 1,
            fork: 1,
            format: 1,
            formline: 1,
            getc: 1,
            getgrent: 1,
            getgrgid: 1,
            getgrnam: 1,
            gethostbyaddr: 1,
            gethostbyname: 1,
            gethostent: 1,
            getlogin: 1,
            getnetbyaddr: 1,
            getnetbyname: 1,
            getnetent: 1,
            getpeername: 1,
            getpgrp: 1,
            getppid: 1,
            getpriority: 1,
            getprotobyname: 1,
            getprotobynumber: 1,
            getprotoent: 1,
            getpwent: 1,
            getpwnam: 1,
            getpwuid: 1,
            getservbyname: 1,
            getservbyport: 1,
            getservent: 1,
            getsockname: 1,
            getsockopt: 1,
            given: 1,
            glob: 1,
            gmtime: 1,
            goto: 1,
            grep: 1,
            hex: 1,
            import: 1,
            index: 1,
            int: 1,
            ioctl: 1,
            join: 1,
            keys: 1,
            kill: 1,
            last: 1,
            lc: 1,
            lcfirst: 1,
            length: 1,
            link: 1,
            listen: 1,
            local: 2,
            localtime: 1,
            lock: 1,
            log: 1,
            lstat: 1,
            m: null,
            map: 1,
            mkdir: 1,
            msgctl: 1,
            msgget: 1,
            msgrcv: 1,
            msgsnd: 1,
            my: 2,
            new: 1,
            next: 1,
            no: 1,
            oct: 1,
            open: 1,
            opendir: 1,
            ord: 1,
            our: 2,
            pack: 1,
            package: 1,
            pipe: 1,
            pop: 1,
            pos: 1,
            print: 1,
            printf: 1,
            prototype: 1,
            push: 1,
            q: null,
            qq: null,
            qr: null,
            quotemeta: null,
            qw: null,
            qx: null,
            rand: 1,
            read: 1,
            readdir: 1,
            readline: 1,
            readlink: 1,
            readpipe: 1,
            recv: 1,
            redo: 1,
            ref: 1,
            rename: 1,
            require: 1,
            reset: 1,
            return: 1,
            reverse: 1,
            rewinddir: 1,
            rindex: 1,
            rmdir: 1,
            s: null,
            say: 1,
            scalar: 1,
            seek: 1,
            seekdir: 1,
            select: 1,
            semctl: 1,
            semget: 1,
            semop: 1,
            send: 1,
            setgrent: 1,
            sethostent: 1,
            setnetent: 1,
            setpgrp: 1,
            setpriority: 1,
            setprotoent: 1,
            setpwent: 1,
            setservent: 1,
            setsockopt: 1,
            shift: 1,
            shmctl: 1,
            shmget: 1,
            shmread: 1,
            shmwrite: 1,
            shutdown: 1,
            sin: 1,
            sleep: 1,
            socket: 1,
            socketpair: 1,
            sort: 1,
            splice: 1,
            split: 1,
            sprintf: 1,
            sqrt: 1,
            srand: 1,
            stat: 1,
            state: 1,
            study: 1,
            sub: 1,
            substr: 1,
            symlink: 1,
            syscall: 1,
            sysopen: 1,
            sysread: 1,
            sysseek: 1,
            system: 1,
            syswrite: 1,
            tell: 1,
            telldir: 1,
            tie: 1,
            tied: 1,
            time: 1,
            times: 1,
            tr: null,
            truncate: 1,
            uc: 1,
            ucfirst: 1,
            umask: 1,
            undef: 1,
            unlink: 1,
            unpack: 1,
            unshift: 1,
            untie: 1,
            use: 1,
            utime: 1,
            values: 1,
            vec: 1,
            wait: 1,
            waitpid: 1,
            wantarray: 1,
            warn: 1,
            when: 1,
            write: 1,
            y: null
        },
        zS = "string.special",
        ZS = /[goseximacplud]/;

    function ES(e, t, n, r, i) {
        return t.chain = null, t.style = null, t.tail = null, t.tokenize = function(e, t) {
            for (var a, o = !1, s = 0; a = e.next();) {
                if (a === n[s] && !o) return void 0 !== n[++s] ? (t.chain = n[s], t.style = r, t.tail = i) : i && e.eatWhile(i), t.tokenize = US, r;
                o = !o && "\\" == a
            }
            return r
        }, t.tokenize(e, t)
    }

    function IS(e, t, n) {
        return t.tokenize = function(e, t) {
            return e.string == n && (t.tokenize = US), e.skipToEnd(), "string"
        }, t.tokenize(e, t)
    }

    function US(e, t) {
        if (e.eatSpace()) return null;
        if (t.chain) return ES(e, t, t.chain, t.style, t.tail);
        if (e.match(/^\-?[\d\.]/, !1) && e.match(/^(\-?(\d*\.\d+(e[+-]?\d+)?|\d+\.\d*)|0x[\da-fA-F]+|0b[01]+|\d+(e[+-]?\d+)?)/)) return "number";
        if (e.match(/^<<(?=[_a-zA-Z])/)) return e.eatWhile(/\w/), IS(e, t, e.current().substr(2));
        if (e.sol() && e.match(/^\=item(?!\w)/)) return IS(e, t, "=cut");
        var n = e.next();
        if ('"' == n || "'" == n) {
            if (RS(e, 3) == "<<" + n) {
                var r = e.pos;
                e.eatWhile(/\w/);
                var i = e.current().substr(1);
                if (i && e.eat(n)) return IS(e, t, i);
                e.pos = r
            }
            return ES(e, t, [n], "string")
        }
        if ("q" == n && (!(a = TS(e, -2)) || !/\w/.test(a)))
            if ("x" == (a = TS(e, 0))) {
                if ("(" == (a = TS(e, 1))) return qS(e, 2), ES(e, t, [")"], zS, ZS);
                if ("[" == a) return qS(e, 2), ES(e, t, ["]"], zS, ZS);
                if ("{" == a) return qS(e, 2), ES(e, t, ["}"], zS, ZS);
                if ("<" == a) return qS(e, 2), ES(e, t, [">"], zS, ZS);
                if (/[\^'"!~\/]/.test(a)) return qS(e, 1), ES(e, t, [e.eat(a)], zS, ZS)
            } else if ("q" == a) {
            if ("(" == (a = TS(e, 1))) return qS(e, 2), ES(e, t, [")"], "string");
            if ("[" == a) return qS(e, 2), ES(e, t, ["]"], "string");
            if ("{" == a) return qS(e, 2), ES(e, t, ["}"], "string");
            if ("<" == a) return qS(e, 2), ES(e, t, [">"], "string");
            if (/[\^'"!~\/]/.test(a)) return qS(e, 1), ES(e, t, [e.eat(a)], "string")
        } else if ("w" == a) {
            if ("(" == (a = TS(e, 1))) return qS(e, 2), ES(e, t, [")"], "bracket");
            if ("[" == a) return qS(e, 2), ES(e, t, ["]"], "bracket");
            if ("{" == a) return qS(e, 2), ES(e, t, ["}"], "bracket");
            if ("<" == a) return qS(e, 2), ES(e, t, [">"], "bracket");
            if (/[\^'"!~\/]/.test(a)) return qS(e, 1), ES(e, t, [e.eat(a)], "bracket")
        } else if ("r" == a) {
            if ("(" == (a = TS(e, 1))) return qS(e, 2), ES(e, t, [")"], zS, ZS);
            if ("[" == a) return qS(e, 2), ES(e, t, ["]"], zS, ZS);
            if ("{" == a) return qS(e, 2), ES(e, t, ["}"], zS, ZS);
            if ("<" == a) return qS(e, 2), ES(e, t, [">"], zS, ZS);
            if (/[\^'"!~\/]/.test(a)) return qS(e, 1), ES(e, t, [e.eat(a)], zS, ZS)
        } else if (/[\^'"!~\/(\[{<]/.test(a)) {
            if ("(" == a) return qS(e, 1), ES(e, t, [")"], "string");
            if ("[" == a) return qS(e, 1), ES(e, t, ["]"], "string");
            if ("{" == a) return qS(e, 1), ES(e, t, ["}"], "string");
            if ("<" == a) return qS(e, 1), ES(e, t, [">"], "string");
            if (/[\^'"!~\/]/.test(a)) return ES(e, t, [e.eat(a)], "string")
        }
        if ("m" == n && ((!(a = TS(e, -2)) || !/\w/.test(a)) && (a = e.eat(/[(\[{<\^'"!~\/]/)))) {
            if (/[\^'"!~\/]/.test(a)) return ES(e, t, [a], zS, ZS);
            if ("(" == a) return ES(e, t, [")"], zS, ZS);
            if ("[" == a) return ES(e, t, ["]"], zS, ZS);
            if ("{" == a) return ES(e, t, ["}"], zS, ZS);
            if ("<" == a) return ES(e, t, [">"], zS, ZS)
        }
        if ("s" == n && (!(a = /[\/>\]})\w]/.test(TS(e, -2))) && (a = e.eat(/[(\[{<\^'"!~\/]/)))) return ES(e, t, "[" == a ? ["]", "]"] : "{" == a ? ["}", "}"] : "<" == a ? [">", ">"] : "(" == a ? [")", ")"] : [a, a], zS, ZS);
        if ("y" == n && (!(a = /[\/>\]})\w]/.test(TS(e, -2))) && (a = e.eat(/[(\[{<\^'"!~\/]/)))) return ES(e, t, "[" == a ? ["]", "]"] : "{" == a ? ["}", "}"] : "<" == a ? [">", ">"] : "(" == a ? [")", ")"] : [a, a], zS, ZS);
        if ("t" == n && (!(a = /[\/>\]})\w]/.test(TS(e, -2))) && (a = e.eat("r")) && (a = e.eat(/[(\[{<\^'"!~\/]/)))) return ES(e, t, "[" == a ? ["]", "]"] : "{" == a ? ["}", "}"] : "<" == a ? [">", ">"] : "(" == a ? [")", ")"] : [a, a], zS, ZS);
        if ("`" == n) return ES(e, t, [n], "builtin");
        if ("/" == n) return /~\s*$/.test(RS(e)) ? ES(e, t, [n], zS, ZS) : "operator";
        if ("$" == n) {
            r = e.pos;
            if (e.eatWhile(/\d/) || e.eat("{") && e.eatWhile(/\d/) && e.eat("}")) return "builtin";
            e.pos = r
        }
        if (/[$@%]/.test(n)) {
            r = e.pos;
            if (e.eat("^") && e.eat(/[A-Z]/) || !/[@$%&]/.test(TS(e, -2)) && e.eat(/[=|\\\-#?@;:&`~\^!\[\]*'"$+.,\/<>()]/)) {
                var a = e.current();
                if (YS[a]) return "builtin"
            }
            e.pos = r
        }
        if (/[$@%&]/.test(n) && (e.eatWhile(/[\w$]/) || e.eat("{") && e.eatWhile(/[\w$]/) && e.eat("}"))) {
            a = e.current();
            return YS[a] ? "builtin" : "variable"
        }
        if ("#" == n && "$" != TS(e, -2)) return e.skipToEnd(), "comment";
        if (/[:+\-\^*$&%@=<>!?|\/~\.]/.test(n)) {
            r = e.pos;
            if (e.eatWhile(/[:+\-\^*$&%@=<>!?|\/~\.]/), YS[e.current()]) return "operator";
            e.pos = r
        }
        if ("_" == n && 1 == e.pos) {
            if ("_END__" == WS(e, 6)) return ES(e, t, ["\0"], "comment");
            if ("_DATA__" == WS(e, 7)) return ES(e, t, ["\0"], "builtin");
            if ("_C__" == WS(e, 7)) return ES(e, t, ["\0"], "string")
        }
        if (/\w/.test(n)) {
            r = e.pos;
            if ("{" == TS(e, -2) && ("}" == TS(e, 0) || e.eatWhile(/\w/) && "}" == TS(e, 0))) return "string";
            e.pos = r
        }
        if (/[A-Z]/.test(n)) {
            var o = TS(e, -2);
            r = e.pos;
            if (e.eatWhile(/[A-Z_]/), !/[\da-z]/.test(TS(e, 0))) return (a = YS[e.current()]) ? (a[1] && (a = a[0]), ":" != o ? 1 == a ? "keyword" : 2 == a ? "def" : 3 == a ? "atom" : 4 == a ? "operator" : 5 == a ? "builtin" : "meta" : "meta") : "meta";
            e.pos = r
        }
        if (/[a-zA-Z_]/.test(n)) {
            o = TS(e, -2);
            return e.eatWhile(/\w/), (a = YS[e.current()]) ? (a[1] && (a = a[0]), ":" != o ? 1 == a ? "keyword" : 2 == a ? "def" : 3 == a ? "atom" : 4 == a ? "operator" : 5 == a ? "builtin" : "meta" : "meta") : "meta"
        }
        return null
    }
    const VS = {
        startState: function() {
            return {
                tokenize: US,
                chain: null,
                style: null,
                tail: null
            }
        },
        token: function(e, t) {
            return (t.tokenize || US)(e, t)
        },
        languageData: {
            commentTokens: {
                line: "#"
            },
            wordChars: "$"
        }
    };
    var jS = Object.freeze({
        __proto__: null,
        perl: VS
    });

    function AS(e) {
        for (var t = {}, n = e.split(" "), r = 0; r < n.length; ++r) t[n[r]] = !0;
        return t
    }
    var CS = "ABS ACOS ARITY ASIN ATAN AVG BAGSIZE BINSTORAGE BLOOM BUILDBLOOM CBRT CEIL CONCAT COR COS COSH COUNT COUNT_STAR COV CONSTANTSIZE CUBEDIMENSIONS DIFF DISTINCT DOUBLEABS DOUBLEAVG DOUBLEBASE DOUBLEMAX DOUBLEMIN DOUBLEROUND DOUBLESUM EXP FLOOR FLOATABS FLOATAVG FLOATMAX FLOATMIN FLOATROUND FLOATSUM GENERICINVOKER INDEXOF INTABS INTAVG INTMAX INTMIN INTSUM INVOKEFORDOUBLE INVOKEFORFLOAT INVOKEFORINT INVOKEFORLONG INVOKEFORSTRING INVOKER ISEMPTY JSONLOADER JSONMETADATA JSONSTORAGE LAST_INDEX_OF LCFIRST LOG LOG10 LOWER LONGABS LONGAVG LONGMAX LONGMIN LONGSUM MAX MIN MAPSIZE MONITOREDUDF NONDETERMINISTIC OUTPUTSCHEMA  PIGSTORAGE PIGSTREAMING RANDOM REGEX_EXTRACT REGEX_EXTRACT_ALL REPLACE ROUND SIN SINH SIZE SQRT STRSPLIT SUBSTRING SUM STRINGCONCAT STRINGMAX STRINGMIN STRINGSIZE TAN TANH TOBAG TOKENIZE TOMAP TOP TOTUPLE TRIM TEXTLOADER TUPLESIZE UCFIRST UPPER UTF8STORAGECONVERTER ",
        GS = "VOID IMPORT RETURNS DEFINE LOAD FILTER FOREACH ORDER CUBE DISTINCT COGROUP JOIN CROSS UNION SPLIT INTO IF OTHERWISE ALL AS BY USING INNER OUTER ONSCHEMA PARALLEL PARTITION GROUP AND OR NOT GENERATE FLATTEN ASC DESC IS STREAM THROUGH STORE MAPREDUCE SHIP CACHE INPUT OUTPUT STDERROR STDIN STDOUT LIMIT SAMPLE LEFT RIGHT FULL EQ GT LT GTE LTE NEQ MATCHES TRUE FALSE DUMP",
        LS = "BOOLEAN INT LONG FLOAT DOUBLE CHARARRAY BYTEARRAY BAG TUPLE MAP ",
        NS = AS(CS),
        DS = AS(GS),
        MS = AS(LS),
        BS = /[*+\-%<>=&?:\/!|]/;

    function FS(e, t, n) {
        return t.tokenize = n, n(e, t)
    }

    function HS(e, t) {
        for (var n, r = !1; n = e.next();) {
            if ("/" == n && r) {
                t.tokenize = JS;
                break
            }
            r = "*" == n
        }
        return "comment"
    }

    function JS(e, t) {
        var n = e.next();
        return '"' == n || "'" == n ? FS(e, t, function(e) {
            return function(t, n) {
                for (var r, i = !1, a = !1; null != (r = t.next());) {
                    if (r == e && !i) {
                        a = !0;
                        break
                    }
                    i = !i && "\\" == r
                }
                return !a && i || (n.tokenize = JS), "error"
            }
        }(n)) : /[\[\]{}\(\),;\.]/.test(n) ? null : /\d/.test(n) ? (e.eatWhile(/[\w\.]/), "number") : "/" == n ? e.eat("*") ? FS(e, t, HS) : (e.eatWhile(BS), "operator") : "-" == n ? e.eat("-") ? (e.skipToEnd(), "comment") : (e.eatWhile(BS), "operator") : BS.test(n) ? (e.eatWhile(BS), "operator") : (e.eatWhile(/[\w\$_]/), DS && DS.propertyIsEnumerable(e.current().toUpperCase()) && !e.eat(")") && !e.eat(".") ? "keyword" : NS && NS.propertyIsEnumerable(e.current().toUpperCase()) ? "builtin" : MS && MS.propertyIsEnumerable(e.current().toUpperCase()) ? "type" : "variable")
    }
    const KS = {
        startState: function() {
            return {
                tokenize: JS,
                startOfLine: !0
            }
        },
        token: function(e, t) {
            return e.eatSpace() ? null : t.tokenize(e, t)
        },
        languageData: {
            autocomplete: (CS + LS + GS).split(" ")
        }
    };
    var e_ = Object.freeze({
        __proto__: null,
        pig: KS
    });

    function t_(e, t) {
        for (var n = void 0 !== (t = t || {}).prefix ? t.prefix : "^", r = void 0 !== t.suffix ? t.suffix : "\\b", i = 0; i < e.length; i++) e[i] instanceof RegExp ? e[i] = e[i].source : e[i] = e[i].replace(/[-\/\\^$*+?.()|[\]{}]/g, "\\$&");
        return new RegExp(n + "(" + e.join("|") + ")" + r, "i")
    }
    var n_ = "(?=[^A-Za-z\\d\\-_]|$)",
        r_ = /[\w\-:]/,
        i_ = t_([/begin|break|catch|continue|data|default|do|dynamicparam/, /else|elseif|end|exit|filter|finally|for|foreach|from|function|if|in/, /param|process|return|switch|throw|trap|try|until|where|while/], {
            suffix: n_
        }),
        a_ = t_(["f", /b?not/, /[ic]?split/, "join", /is(not)?/, "as", /[ic]?(eq|ne|[gl][te])/, /[ic]?(not)?(like|match|contains)/, /[ic]?replace/, /b?(and|or|xor)/], {
            prefix: "-"
        }),
        o_ = t_([a_, /[+\-*\/%]=|\+\+|--|\.\.|[+\-*&^%:=!|\/]|<(?!#)|(?!#)>/], {
            suffix: ""
        }),
        s_ = t_([/Add-(Computer|Content|History|Member|PSSnapin|Type)/, /Checkpoint-Computer/, /Clear-(Content|EventLog|History|Host|Item(Property)?|Variable)/, /Compare-Object/, /Complete-Transaction/, /Connect-PSSession/, /ConvertFrom-(Csv|Json|SecureString|StringData)/, /Convert-Path/, /ConvertTo-(Csv|Html|Json|SecureString|Xml)/, /Copy-Item(Property)?/, /Debug-Process/, /Disable-(ComputerRestore|PSBreakpoint|PSRemoting|PSSessionConfiguration)/, /Disconnect-PSSession/, /Enable-(ComputerRestore|PSBreakpoint|PSRemoting|PSSessionConfiguration)/, /(Enter|Exit)-PSSession/, /Export-(Alias|Clixml|Console|Counter|Csv|FormatData|ModuleMember|PSSession)/, /ForEach-Object/, /Format-(Custom|List|Table|Wide)/, new RegExp("Get-(Acl|Alias|AuthenticodeSignature|ChildItem|Command|ComputerRestorePoint|Content|ControlPanelItem|Counter|Credential|Culture|Date|Event|EventLog|EventSubscriber|ExecutionPolicy|FormatData|Help|History|Host|HotFix|Item|ItemProperty|Job|Location|Member|Module|PfxCertificate|Process|PSBreakpoint|PSCallStack|PSDrive|PSProvider|PSSession|PSSessionConfiguration|PSSnapin|Random|Service|TraceSource|Transaction|TypeData|UICulture|Unique|Variable|Verb|WinEvent|WmiObject)"), /Group-Object/, /Import-(Alias|Clixml|Counter|Csv|LocalizedData|Module|PSSession)/, /ImportSystemModules/, /Invoke-(Command|Expression|History|Item|RestMethod|WebRequest|WmiMethod)/, /Join-Path/, /Limit-EventLog/, /Measure-(Command|Object)/, /Move-Item(Property)?/, new RegExp("New-(Alias|Event|EventLog|Item(Property)?|Module|ModuleManifest|Object|PSDrive|PSSession|PSSessionConfigurationFile|PSSessionOption|PSTransportOption|Service|TimeSpan|Variable|WebServiceProxy|WinEvent)"), /Out-(Default|File|GridView|Host|Null|Printer|String)/, /Pause/, /(Pop|Push)-Location/, /Read-Host/, /Receive-(Job|PSSession)/, /Register-(EngineEvent|ObjectEvent|PSSessionConfiguration|WmiEvent)/, /Remove-(Computer|Event|EventLog|Item(Property)?|Job|Module|PSBreakpoint|PSDrive|PSSession|PSSnapin|TypeData|Variable|WmiObject)/, /Rename-(Computer|Item(Property)?)/, /Reset-ComputerMachinePassword/, /Resolve-Path/, /Restart-(Computer|Service)/, /Restore-Computer/, /Resume-(Job|Service)/, /Save-Help/, /Select-(Object|String|Xml)/, /Send-MailMessage/, new RegExp("Set-(Acl|Alias|AuthenticodeSignature|Content|Date|ExecutionPolicy|Item(Property)?|Location|PSBreakpoint|PSDebug|PSSessionConfiguration|Service|StrictMode|TraceSource|Variable|WmiInstance)"), /Show-(Command|ControlPanelItem|EventLog)/, /Sort-Object/, /Split-Path/, /Start-(Job|Process|Service|Sleep|Transaction|Transcript)/, /Stop-(Computer|Job|Process|Service|Transcript)/, /Suspend-(Job|Service)/, /TabExpansion2/, /Tee-Object/, /Test-(ComputerSecureChannel|Connection|ModuleManifest|Path|PSSessionConfigurationFile)/, /Trace-Command/, /Unblock-File/, /Undo-Transaction/, /Unregister-(Event|PSSessionConfiguration)/, /Update-(FormatData|Help|List|TypeData)/, /Use-Transaction/, /Wait-(Event|Job|Process)/, /Where-Object/, /Write-(Debug|Error|EventLog|Host|Output|Progress|Verbose|Warning)/, /cd|help|mkdir|more|oss|prompt/, /ac|asnp|cat|cd|chdir|clc|clear|clhy|cli|clp|cls|clv|cnsn|compare|copy|cp|cpi|cpp|cvpa|dbp|del|diff|dir|dnsn|ebp/, /echo|epal|epcsv|epsn|erase|etsn|exsn|fc|fl|foreach|ft|fw|gal|gbp|gc|gci|gcm|gcs|gdr|ghy|gi|gjb|gl|gm|gmo|gp|gps/, /group|gsn|gsnp|gsv|gu|gv|gwmi|h|history|icm|iex|ihy|ii|ipal|ipcsv|ipmo|ipsn|irm|ise|iwmi|iwr|kill|lp|ls|man|md/, /measure|mi|mount|move|mp|mv|nal|ndr|ni|nmo|npssc|nsn|nv|ogv|oh|popd|ps|pushd|pwd|r|rbp|rcjb|rcsn|rd|rdr|ren|ri/, /rjb|rm|rmdir|rmo|rni|rnp|rp|rsn|rsnp|rujb|rv|rvpa|rwmi|sajb|sal|saps|sasv|sbp|sc|select|set|shcm|si|sl|sleep|sls/, /sort|sp|spjb|spps|spsv|start|sujb|sv|swmi|tee|trcm|type|where|wjb|write/], {
            prefix: "",
            suffix: ""
        }),
        O_ = t_([/[$?^_]|Args|ConfirmPreference|ConsoleFileName|DebugPreference|Error|ErrorActionPreference|ErrorView|ExecutionContext/, /FormatEnumerationLimit|Home|Host|Input|MaximumAliasCount|MaximumDriveCount|MaximumErrorCount|MaximumFunctionCount/, /MaximumHistoryCount|MaximumVariableCount|MyInvocation|NestedPromptLevel|OutputEncoding|Pid|Profile|ProgressPreference/, /PSBoundParameters|PSCommandPath|PSCulture|PSDefaultParameterValues|PSEmailServer|PSHome|PSScriptRoot|PSSessionApplicationName/, /PSSessionConfigurationName|PSSessionOption|PSUICulture|PSVersionTable|Pwd|ShellId|StackTrace|VerbosePreference/, /WarningPreference|WhatIfPreference/, /Event|EventArgs|EventSubscriber|Sender/, /Matches|Ofs|ForEach|LastExitCode|PSCmdlet|PSItem|PSSenderInfo|This/, /true|false|null/], {
            prefix: "\\$",
            suffix: ""
        }),
        l_ = {
            keyword: i_,
            number: /^((0x[\da-f]+)|((\d+\.\d+|\d\.|\.\d+|\d+)(e[\+\-]?\d+)?))[ld]?([kmgtp]b)?/i,
            operator: o_,
            builtin: t_([/[A-Z]:|%|\?/i, s_, O_], {
                suffix: n_
            }),
            punctuation: /[\[\]{},;`\\\.]|@[({]/,
            variable: /^[A-Za-z\_][A-Za-z\-\_\d]*\b/
        };

    function c_(e, t) {
        var n = t.returnStack[t.returnStack.length - 1];
        if (n && n.shouldReturnFrom(t)) return t.tokenize = n.tokenize, t.returnStack.pop(), t.tokenize(e, t);
        if (e.eatSpace()) return null;
        if (e.eat("(")) return t.bracketNesting += 1, "punctuation";
        if (e.eat(")")) return t.bracketNesting -= 1, "punctuation";
        for (var r in l_)
            if (e.match(l_[r])) return r;
        var i = e.next();
        if ("'" === i) return function(e, t) {
            var n;
            for (; null != (n = e.peek());)
                if (e.next(), "'" === n && !e.eat("'")) return t.tokenize = c_, "string";
            return "error"
        }(e, t);
        if ("$" === i) return g_(e, t);
        if ('"' === i) return u_(e, t);
        if ("<" === i && e.eat("#")) return t.tokenize = m_, m_(e, t);
        if ("#" === i) return e.skipToEnd(), "comment";
        if ("@" === i) {
            var a = e.eat(/["']/);
            if (a && e.eol()) return t.tokenize = $_, t.startQuote = a[0], $_(e, t);
            if (e.eol()) return "error";
            if (e.peek().match(/[({]/)) return "punctuation";
            if (e.peek().match(r_)) return g_(e, t)
        }
        return "error"
    }

    function u_(e, t) {
        for (var n; null != (n = e.peek());) {
            if ("$" === n) return t.tokenize = d_, "string";
            if (e.next(), "`" !== n) {
                if ('"' === n && !e.eat('"')) return t.tokenize = c_, "string"
            } else e.next()
        }
        return "error"
    }

    function d_(e, t) {
        return f_(e, t, u_)
    }

    function p_(e, t) {
        return t.tokenize = $_, t.startQuote = '"', $_(e, t)
    }

    function h_(e, t) {
        return f_(e, t, p_)
    }

    function f_(e, t, n) {
        if (e.match("$(")) {
            var r = t.bracketNesting;
            return t.returnStack.push({
                shouldReturnFrom: function(e) {
                    return e.bracketNesting === r
                },
                tokenize: n
            }), t.tokenize = c_, t.bracketNesting += 1, "punctuation"
        }
        return e.next(), t.returnStack.push({
            shouldReturnFrom: function() {
                return !0
            },
            tokenize: n
        }), t.tokenize = g_, t.tokenize(e, t)
    }

    function m_(e, t) {
        for (var n, r = !1; null != (n = e.next());) {
            if (r && ">" == n) {
                t.tokenize = c_;
                break
            }
            r = "#" === n
        }
        return "comment"
    }

    function g_(e, t) {
        var n = e.peek();
        return e.eat("{") ? (t.tokenize = Q_, Q_(e, t)) : null != n && n.match(r_) ? (e.eatWhile(r_), t.tokenize = c_, "variable") : (t.tokenize = c_, "error")
    }

    function Q_(e, t) {
        for (var n; null != (n = e.next());)
            if ("}" === n) {
                t.tokenize = c_;
                break
            }
        return "variable"
    }

    function $_(e, t) {
        var n = t.startQuote;
        if (e.sol() && e.match(new RegExp(n + "@"))) t.tokenize = c_;
        else if ('"' === n)
            for (; !e.eol();) {
                var r = e.peek();
                if ("$" === r) return t.tokenize = h_, "string";
                e.next(), "`" === r && e.next()
            } else e.skipToEnd();
        return "string"
    }
    const b_ = {
        startState: function() {
            return {
                returnStack: [],
                bracketNesting: 0,
                tokenize: c_
            }
        },
        token: function(e, t) {
            return t.tokenize(e, t)
        },
        languageData: {
            commentTokens: {
                line: "#",
                block: {
                    open: "<#",
                    close: "#>"
                }
            }
        }
    };
    var x_ = Object.freeze({
        __proto__: null,
        powerShell: b_
    });
    var P_ = Object.freeze({
        __proto__: null,
        properties: {
            token: function(e, t) {
                var n = e.sol() || t.afterSection,
                    r = e.eol();
                if (t.afterSection = !1, n && (t.nextMultiline ? (t.inMultiline = !0, t.nextMultiline = !1) : t.position = "def"), r && !t.nextMultiline && (t.inMultiline = !1, t.position = "def"), n)
                    for (; e.eatSpace(););
                var i = e.next();
                return !n || "#" !== i && "!" !== i && ";" !== i ? n && "[" === i ? (t.afterSection = !0, e.skipTo("]"), e.eat("]"), "header") : "=" === i || ":" === i ? (t.position = "quote", null) : ("\\" === i && "quote" === t.position && e.eol() && (t.nextMultiline = !0), t.position) : (t.position = "comment", e.skipToEnd(), "comment")
            },
            startState: function() {
                return {
                    position: "def",
                    nextMultiline: !1,
                    inMultiline: !1,
                    afterSection: !1
                }
            }
        }
    });
    var w_ = ["package", "message", "import", "syntax", "required", "optional", "repeated", "reserved", "default", "extensions", "packed", "bool", "bytes", "double", "enum", "float", "string", "int32", "int64", "uint32", "uint64", "sint32", "sint64", "fixed32", "fixed64", "sfixed32", "sfixed64", "option", "service", "rpc", "returns"],
        k_ = function(e) {
            return new RegExp("^((" + e.join(")|(") + "))\\b", "i")
        }(w_),
        y_ = new RegExp("^[_A-Za-z¡-][_A-Za-z0-9¡-]*");
    const v_ = {
        token: function(e) {
            if (e.eatSpace()) return null;
            if (e.match("//")) return e.skipToEnd(), "comment";
            if (e.match(/^[0-9\.+-]/, !1)) {
                if (e.match(/^[+-]?0x[0-9a-fA-F]+/)) return "number";
                if (e.match(/^[+-]?\d*\.\d+([EeDd][+-]?\d+)?/)) return "number";
                if (e.match(/^[+-]?\d+([EeDd][+-]?\d+)?/)) return "number"
            }
            return e.match(/^"([^"]|(""))*"/) || e.match(/^'([^']|(''))*'/) ? "string" : e.match(k_) ? "keyword" : e.match(y_) ? "variable" : (e.next(), null)
        },
        languageData: {
            autocomplete: w_
        }
    };
    var S_ = Object.freeze({
            __proto__: null,
            protobuf: v_
        }),
        __ = {},
        X_ = /({)?([a-z][a-z0-9_]*)?((::[a-z][a-z0-9_]*)*::)?[a-zA-Z0-9_]+(})?/;

    function T_(e, t) {
        for (var n = t.split(" "), r = 0; r < n.length; r++) __[n[r]] = e
    }

    function R_(e, t) {
        for (var n, r, i = !1; !e.eol() && (n = e.next()) != t.pending;) {
            if ("$" === n && "\\" != r && '"' == t.pending) {
                i = !0;
                break
            }
            r = n
        }
        return i && e.backUp(1), n == t.pending ? t.continueString = !1 : t.continueString = !0, "string"
    }
    T_("keyword", "class define site node include import inherits"), T_("keyword", "case if else in and elsif default or"), T_("atom", "false true running present absent file directory undef"), T_("builtin", "action augeas burst chain computer cron destination dport exec file filebucket group host icmp iniface interface jump k5login limit log_level log_prefix macauthorization mailalias maillist mcx mount nagios_command nagios_contact nagios_contactgroup nagios_host nagios_hostdependency nagios_hostescalation nagios_hostextinfo nagios_hostgroup nagios_service nagios_servicedependency nagios_serviceescalation nagios_serviceextinfo nagios_servicegroup nagios_timeperiod name notify outiface package proto reject resources router schedule scheduled_task selboolean selmodule service source sport ssh_authorized_key sshkey stage state table tidy todest toports tosource user vlan yumrepo zfs zone zpool");
    const W_ = {
        startState: function() {
            var e = {
                inDefinition: !1,
                inInclude: !1,
                continueString: !1,
                pending: !1
            };
            return e
        },
        token: function(e, t) {
            return e.eatSpace() ? null : function(e, t) {
                var n = e.match(/[\w]+/, !1),
                    r = e.match(/(\s+)?\w+\s+=>.*/, !1),
                    i = e.match(/(\s+)?[\w:_]+(\s+)?{/, !1),
                    a = e.match(/(\s+)?[@]{1,2}[\w:_]+(\s+)?{/, !1),
                    o = e.next();
                if ("$" === o) return e.match(X_) ? t.continueString ? "variableName.special" : "variable" : "error";
                if (t.continueString) return e.backUp(1), R_(e, t);
                if (t.inDefinition) {
                    if (e.match(/(\s+)?[\w:_]+(\s+)?/)) return "def";
                    e.match(/\s+{/), t.inDefinition = !1
                }
                return t.inInclude ? (e.match(/(\s+)?\S+(\s+)?/), t.inInclude = !1, "def") : e.match(/(\s+)?\w+\(/) ? (e.backUp(1), "def") : r ? (e.match(/(\s+)?\w+/), "tag") : n && __.hasOwnProperty(n) ? (e.backUp(1), e.match(/[\w]+/), e.match(/\s+\S+\s+{/, !1) && (t.inDefinition = !0), "include" == n && (t.inInclude = !0), __[n]) : /(^|\s+)[A-Z][\w:_]+/.test(n) ? (e.backUp(1), e.match(/(^|\s+)[A-Z][\w:_]+/), "def") : i ? (e.match(/(\s+)?[\w:_]+/), "def") : a ? (e.match(/(\s+)?[@]{1,2}/), "atom") : "#" == o ? (e.skipToEnd(), "comment") : "'" == o || '"' == o ? (t.pending = o, R_(e, t)) : "{" == o || "}" == o ? "bracket" : "/" == o ? (e.match(/^[^\/]*\//), "string.special") : o.match(/[0-9]/) ? (e.eatWhile(/[0-9]+/), "number") : "=" == o ? (">" == e.peek() && e.next(), "operator") : (e.eatWhile(/[\w-]/), null)
            }(e, t)
        }
    };
    var q_, Y_ = Object.freeze({
            __proto__: null,
            puppet: W_
        }),
        z_ = new RegExp("^(" + ["abs", "acos", "aj", "aj0", "all", "and", "any", "asc", "asin", "asof", "atan", "attr", "avg", "avgs", "bin", "by", "ceiling", "cols", "cor", "cos", "count", "cov", "cross", "csv", "cut", "delete", "deltas", "desc", "dev", "differ", "distinct", "div", "do", "each", "ej", "enlist", "eval", "except", "exec", "exit", "exp", "fby", "fills", "first", "fkeys", "flip", "floor", "from", "get", "getenv", "group", "gtime", "hclose", "hcount", "hdel", "hopen", "hsym", "iasc", "idesc", "if", "ij", "in", "insert", "inter", "inv", "key", "keys", "last", "like", "list", "lj", "load", "log", "lower", "lsq", "ltime", "ltrim", "mavg", "max", "maxs", "mcount", "md5", "mdev", "med", "meta", "min", "mins", "mmax", "mmin", "mmu", "mod", "msum", "neg", "next", "not", "null", "or", "over", "parse", "peach", "pj", "plist", "prd", "prds", "prev", "prior", "rand", "rank", "ratios", "raze", "read0", "read1", "reciprocal", "reverse", "rload", "rotate", "rsave", "rtrim", "save", "scan", "select", "set", "setenv", "show", "signum", "sin", "sqrt", "ss", "ssr", "string", "sublist", "sum", "sums", "sv", "system", "tables", "tan", "til", "trim", "txf", "type", "uj", "ungroup", "union", "update", "upper", "upsert", "value", "var", "view", "views", "vs", "wavg", "where", "where", "while", "within", "wj", "wj1", "wsum", "xasc", "xbar", "xcol", "xcols", "xdesc", "xexp", "xgroup", "xkey", "xlog", "xprev", "xrank"].join("|") + ")$"),
        Z_ = /[|/&^!+:\\\-*%$=~#;@><,?_\'\"\[\(\]\)\s{}]/;

    function E_(e, t) {
        var n = e.sol(),
            r = e.next();
        if (q_ = null, n) {
            if ("/" == r) return (t.tokenize = I_)(e, t);
            if ("\\" == r) return e.eol() || /\s/.test(e.peek()) ? (e.skipToEnd(), /^\\\s*$/.test(e.current()) ? (t.tokenize = V_)(e) : t.tokenize = E_, "comment") : (t.tokenize = E_, "builtin")
        }
        if (/\s/.test(r)) return "/" == e.peek() ? (e.skipToEnd(), "comment") : "null";
        if ('"' == r) return (t.tokenize = j_)(e, t);
        if ("`" == r) return e.eatWhile(/[A-Za-z\d_:\/.]/), "macroName";
        if ("." == r && /\d/.test(e.peek()) || /\d/.test(r)) {
            var i = null;
            return e.backUp(1), e.match(/^\d{4}\.\d{2}(m|\.\d{2}([DT](\d{2}(:\d{2}(:\d{2}(\.\d{1,9})?)?)?)?)?)/) || e.match(/^\d+D(\d{2}(:\d{2}(:\d{2}(\.\d{1,9})?)?)?)/) || e.match(/^\d{2}:\d{2}(:\d{2}(\.\d{1,9})?)?/) || e.match(/^\d+[ptuv]{1}/) ? i = "temporal" : (e.match(/^0[NwW]{1}/) || e.match(/^0x[\da-fA-F]*/) || e.match(/^[01]+[b]{1}/) || e.match(/^\d+[chijn]{1}/) || e.match(/-?\d*(\.\d*)?(e[+\-]?\d+)?(e|f)?/)) && (i = "number"), !i || (r = e.peek()) && !Z_.test(r) ? (e.next(), "error") : i
        }
        return /[A-Za-z]|\./.test(r) ? (e.eatWhile(/[A-Za-z._\d]/), z_.test(e.current()) ? "keyword" : "variable") : /[|/&^!+:\\\-*%$=~#;@><\.,?_\']/.test(r) || /[{}\(\[\]\)]/.test(r) ? null : "error"
    }

    function I_(e, t) {
        return e.skipToEnd(), /\/\s*$/.test(e.current()) ? (t.tokenize = U_)(e, t) : t.tokenize = E_, "comment"
    }

    function U_(e, t) {
        var n = e.sol() && "\\" == e.peek();
        return e.skipToEnd(), n && /^\\\s*$/.test(e.current()) && (t.tokenize = E_), "comment"
    }

    function V_(e) {
        return e.skipToEnd(), "comment"
    }

    function j_(e, t) {
        for (var n, r = !1, i = !1; n = e.next();) {
            if ('"' == n && !r) {
                i = !0;
                break
            }
            r = !r && "\\" == n
        }
        return i && (t.tokenize = E_), "string"
    }

    function A_(e, t, n) {
        e.context = {
            prev: e.context,
            indent: e.indent,
            col: n,
            type: t
        }
    }

    function C_(e) {
        e.indent = e.context.indent, e.context = e.context.prev
    }
    const G_ = {
        startState: function() {
            return {
                tokenize: E_,
                context: null,
                indent: 0,
                col: 0
            }
        },
        token: function(e, t) {
            e.sol() && (t.context && null == t.context.align && (t.context.align = !1), t.indent = e.indentation());
            var n = t.tokenize(e, t);
            if ("comment" != n && t.context && null == t.context.align && "pattern" != t.context.type && (t.context.align = !0), "(" == q_) A_(t, ")", e.column());
            else if ("[" == q_) A_(t, "]", e.column());
            else if ("{" == q_) A_(t, "}", e.column());
            else if (/[\]\}\)]/.test(q_)) {
                for (; t.context && "pattern" == t.context.type;) C_(t);
                t.context && q_ == t.context.type && C_(t)
            } else "." == q_ && t.context && "pattern" == t.context.type ? C_(t) : /atom|string|variable/.test(n) && t.context && (/[\}\]]/.test(t.context.type) ? A_(t, "pattern", e.column()) : "pattern" != t.context.type || t.context.align || (t.context.align = !0, t.context.col = e.column()));
            return n
        },
        indent: function(e, t, n) {
            var r = t && t.charAt(0),
                i = e.context;
            if (/[\]\}]/.test(r))
                for (; i && "pattern" == i.type;) i = i.prev;
            var a = i && r == i.type;
            return i ? "pattern" == i.type ? i.col : i.align ? i.col + (a ? 0 : 1) : i.indent + (a ? 0 : n.unit) : 0
        }
    };
    var L_ = Object.freeze({
        __proto__: null,
        q: G_
    });

    function N_(e) {
        for (var t = {}, n = 0; n < e.length; ++n) t[e[n]] = !0;
        return t
    }
    var D_, M_ = ["NULL", "NA", "Inf", "NaN", "NA_integer_", "NA_real_", "NA_complex_", "NA_character_", "TRUE", "FALSE"],
        B_ = ["list", "quote", "bquote", "eval", "return", "call", "parse", "deparse"],
        F_ = ["if", "else", "repeat", "while", "function", "for", "in", "next", "break"],
        H_ = N_(M_),
        J_ = N_(B_),
        K_ = N_(F_),
        eX = N_(["if", "else", "repeat", "while", "function", "for"]),
        tX = /[+\-*\/^<>=!&|~$:]/;

    function nX(e, t) {
        D_ = null;
        var n = e.next();
        if ("#" == n) return e.skipToEnd(), "comment";
        if ("0" == n && e.eat("x")) return e.eatWhile(/[\da-f]/i), "number";
        if ("." == n && e.eat(/\d/)) return e.match(/\d*(?:e[+\-]?\d+)?/), "number";
        if (/\d/.test(n)) return e.match(/\d*(?:\.\d+)?(?:e[+\-]\d+)?L?/), "number";
        if ("'" == n || '"' == n) return t.tokenize = function(e) {
            return function(t, n) {
                if (t.eat("\\")) {
                    var r = t.next();
                    return "x" == r ? t.match(/^[a-f0-9]{2}/i) : ("u" == r || "U" == r) && t.eat("{") && t.skipTo("}") ? t.next() : "u" == r ? t.match(/^[a-f0-9]{4}/i) : "U" == r ? t.match(/^[a-f0-9]{8}/i) : /[0-7]/.test(r) && t.match(/^[0-7]{1,2}/), "string.special"
                }
                for (var i; null != (i = t.next());) {
                    if (i == e) {
                        n.tokenize = nX;
                        break
                    }
                    if ("\\" == i) {
                        t.backUp(1);
                        break
                    }
                }
                return "string"
            }
        }(n), "string";
        if ("`" == n) return e.match(/[^`]+`/), "string.special";
        if ("." == n && e.match(/.[.\d]+/)) return "keyword";
        if (/[\w\.]/.test(n) && "_" != n) {
            e.eatWhile(/[\w\.]/);
            var r = e.current();
            return H_.propertyIsEnumerable(r) ? "atom" : K_.propertyIsEnumerable(r) ? (eX.propertyIsEnumerable(r) && !e.match(/\s*if(\s+|$)/, !1) && (D_ = "block"), "keyword") : J_.propertyIsEnumerable(r) ? "builtin" : "variable"
        }
        return "%" == n ? (e.skipTo("%") && e.next(), "variableName.special") : "<" == n && e.eat("-") || "<" == n && e.match("<-") || "-" == n && e.match(/>>?/) || "=" == n && t.ctx.argList ? "operator" : tX.test(n) ? ("$" == n || e.eatWhile(tX), "operator") : /[\(\){}\[\];]/.test(n) ? (D_ = n, ";" == n ? "punctuation" : null) : null
    }

    function rX(e, t, n) {
        e.ctx = {
            type: t,
            indent: e.indent,
            flags: 0,
            column: n.column(),
            prev: e.ctx
        }
    }

    function iX(e, t) {
        var n = e.ctx;
        e.ctx = {
            type: n.type,
            indent: n.indent,
            flags: n.flags | t,
            column: n.column,
            prev: n.prev
        }
    }

    function aX(e) {
        e.indent = e.ctx.indent, e.ctx = e.ctx.prev
    }
    const oX = {
        startState: function(e) {
            return {
                tokenize: nX,
                ctx: {
                    type: "top",
                    indent: -e,
                    flags: 2
                },
                indent: 0,
                afterIdent: !1
            }
        },
        token: function(e, t) {
            if (e.sol() && (0 == (3 & t.ctx.flags) && (t.ctx.flags |= 2), 4 & t.ctx.flags && aX(t), t.indent = e.indentation()), e.eatSpace()) return null;
            var n = t.tokenize(e, t);
            return "comment" != n && 0 == (2 & t.ctx.flags) && iX(t, 1), ";" != D_ && "{" != D_ && "}" != D_ || "block" != t.ctx.type || aX(t), "{" == D_ ? rX(t, "}", e) : "(" == D_ ? (rX(t, ")", e), t.afterIdent && (t.ctx.argList = !0)) : "[" == D_ ? rX(t, "]", e) : "block" == D_ ? rX(t, "block", e) : D_ == t.ctx.type ? aX(t) : "block" == t.ctx.type && "comment" != n && iX(t, 4), t.afterIdent = "variable" == n || "keyword" == n, n
        },
        indent: function(e, t, n) {
            if (e.tokenize != nX) return 0;
            var r = t && t.charAt(0),
                i = e.ctx,
                a = r == i.type;
            return 4 & i.flags && (i = i.prev), "block" == i.type ? i.indent + ("{" == r ? 0 : n.unit) : 1 & i.flags ? i.column + (a ? 0 : 1) : i.indent + (a ? 0 : n.unit)
        },
        languageData: {
            wordChars: ".",
            commentTokens: {
                line: "#"
            },
            autocomplete: M_.concat(B_, F_)
        }
    };
    var sX = Object.freeze({
            __proto__: null,
            r: oX
        }),
        OX = /^-+$/,
        lX = /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)  ?\d{1,2} \d{2}:\d{2}(:\d{2})? [A-Z]{3,4} \d{4} - /,
        cX = /^[\w+.-]+@[\w.-]+/;
    const uX = {
        token: function(e) {
            if (e.sol()) {
                if (e.match(OX)) return "tag";
                if (e.match(lX)) return "tag"
            }
            return e.match(cX) ? "string" : (e.next(), null)
        }
    };
    var dX = /^(i386|i586|i686|x86_64|ppc64le|ppc64|ppc|ia64|s390x|s390|sparc64|sparcv9|sparc|noarch|alphaev6|alpha|hppa|mipsel)/,
        pX = /^[a-zA-Z0-9()]+:/,
        hX = /^%(debug_package|package|description|prep|build|install|files|clean|changelog|preinstall|preun|postinstall|postun|pretrans|posttrans|pre|post|triggerin|triggerun|verifyscript|check|triggerpostun|triggerprein|trigger)/,
        fX = /^%(ifnarch|ifarch|if)/,
        mX = /^%(else|endif)/,
        gX = /^(\!|\?|\<\=|\<|\>\=|\>|\=\=|\&\&|\|\|)/;
    const QX = {
        startState: function() {
            return {
                controlFlow: !1,
                macroParameters: !1,
                section: !1
            }
        },
        token: function(e, t) {
            if ("#" == e.peek()) return e.skipToEnd(), "comment";
            if (e.sol()) {
                if (e.match(pX)) return "header";
                if (e.match(hX)) return "atom"
            }
            if (e.match(/^\$\w+/)) return "def";
            if (e.match(/^\$\{\w+\}/)) return "def";
            if (e.match(mX)) return "keyword";
            if (e.match(fX)) return t.controlFlow = !0, "keyword";
            if (t.controlFlow) {
                if (e.match(gX)) return "operator";
                if (e.match(/^(\d+)/)) return "number";
                e.eol() && (t.controlFlow = !1)
            }
            if (e.match(dX)) return e.eol() && (t.controlFlow = !1), "number";
            if (e.match(/^%[\w]+/)) return e.match("(") && (t.macroParameters = !0), "keyword";
            if (t.macroParameters) {
                if (e.match(/^\d+/)) return "number";
                if (e.match(")")) return t.macroParameters = !1, "keyword"
            }
            return e.match(/^%\{\??[\w \-\:\!]+\}/) ? (e.eol() && (t.controlFlow = !1), "def") : (e.next(), null)
        }
    };
    var $X = Object.freeze({
        __proto__: null,
        rpmChanges: uX,
        rpmSpec: QX
    });

    function bX(e) {
        for (var t = {}, n = 0, r = e.length; n < r; ++n) t[e[n]] = !0;
        return t
    }
    var xX, PX = ["alias", "and", "BEGIN", "begin", "break", "case", "class", "def", "defined?", "do", "else", "elsif", "END", "end", "ensure", "false", "for", "if", "in", "module", "next", "not", "or", "redo", "rescue", "retry", "return", "self", "super", "then", "true", "undef", "unless", "until", "when", "while", "yield", "nil", "raise", "throw", "catch", "fail", "loop", "callcc", "caller", "lambda", "proc", "public", "protected", "private", "require", "load", "require_relative", "extend", "autoload", "__END__", "__FILE__", "__LINE__", "__dir__"],
        wX = bX(PX),
        kX = bX(["def", "class", "case", "for", "while", "until", "module", "then", "catch", "loop", "proc", "begin"]),
        yX = bX(["end", "until"]),
        vX = {
            "[": "]",
            "{": "}",
            "(": ")"
        },
        SX = {
            "]": "[",
            "}": "{",
            ")": "("
        };

    function _X(e, t, n) {
        return n.tokenize.push(e), e(t, n)
    }

    function XX(e, t) {
        if (e.sol() && e.match("=begin") && e.eol()) return t.tokenize.push(qX), "comment";
        if (e.eatSpace()) return null;
        var n, r, i, a = e.next();
        if ("`" == a || "'" == a || '"' == a) return _X(WX(a, "string", '"' == a || "`" == a), e, t);
        if ("/" == a) return function(e) {
            var t, n = e.pos,
                r = 0,
                i = !1,
                a = !1;
            for (; null != (t = e.next());)
                if (a) a = !1;
                else {
                    if ("[{(".indexOf(t) > -1) r++;
                    else if ("]})".indexOf(t) > -1) {
                        if (--r < 0) break
                    } else if ("/" == t && 0 == r) {
                        i = !0;
                        break
                    }
                    a = "\\" == t
                }
            return e.backUp(e.pos - n), i
        }(e) ? _X(WX(a, "string.special", !0), e, t) : "operator";
        if ("%" == a) {
            var o = "string",
                s = !0;
            e.eat("s") ? o = "atom" : e.eat(/[WQ]/) ? o = "string" : e.eat(/[r]/) ? o = "string.special" : e.eat(/[wxq]/) && (o = "string", s = !1);
            var O = e.eat(/[^\w\s=]/);
            return O ? (vX.propertyIsEnumerable(O) && (O = vX[O]), _X(WX(O, o, s, !0), e, t)) : "operator"
        }
        if ("#" == a) return e.skipToEnd(), "comment";
        if ("<" == a && (n = e.match(/^<([-~])[\`\"\']?([a-zA-Z_?]\w*)[\`\"\']?(?:;|$)/))) return _X((r = n[2], i = n[1], function(e, t) {
            return i && e.eatSpace(), e.match(r) ? t.tokenize.pop() : e.skipToEnd(), "string"
        }), e, t);
        if ("0" == a) return e.eat("x") ? e.eatWhile(/[\da-fA-F]/) : e.eat("b") ? e.eatWhile(/[01]/) : e.eatWhile(/[0-7]/), "number";
        if (/\d/.test(a)) return e.match(/^[\d_]*(?:\.[\d_]+)?(?:[eE][+\-]?[\d_]+)?/), "number";
        if ("?" == a) {
            for (; e.match(/^\\[CM]-/););
            return e.eat("\\") ? e.eatWhile(/\w/) : e.next(), "string"
        }
        if (":" == a) return e.eat("'") ? _X(WX("'", "atom", !1), e, t) : e.eat('"') ? _X(WX('"', "atom", !0), e, t) : e.eat(/[\<\>]/) ? (e.eat(/[\<\>]/), "atom") : e.eat(/[\+\-\*\/\&\|\:\!]/) ? "atom" : e.eat(/[a-zA-Z$@_\xa1-\uffff]/) ? (e.eatWhile(/[\w$\xa1-\uffff]/), e.eat(/[\?\!\=]/), "atom") : "operator";
        if ("@" == a && e.match(/^@?[a-zA-Z_\xa1-\uffff]/)) return e.eat("@"), e.eatWhile(/[\w\xa1-\uffff]/), "propertyName";
        if ("$" == a) return e.eat(/[a-zA-Z_]/) ? e.eatWhile(/[\w]/) : e.eat(/\d/) ? e.eat(/\d/) : e.next(), "variableName.special";
        if (/[a-zA-Z_\xa1-\uffff]/.test(a)) return e.eatWhile(/[\w\xa1-\uffff]/), e.eat(/[\?\!]/), e.eat(":") ? "atom" : "variable";
        if ("|" != a || !t.varList && "{" != t.lastTok && "do" != t.lastTok) {
            if (/[\(\)\[\]{}\\;]/.test(a)) return xX = a, null;
            if ("-" == a && e.eat(">")) return "operator";
            if (/[=+\-\/*:\.^%<>~|]/.test(a)) {
                var l = e.eatWhile(/[=+\-\/*:\.^%<>~|]/);
                return "." != a || l || (xX = "."), "operator"
            }
            return null
        }
        return xX = "|", null
    }

    function TX(e) {
        return e || (e = 1),
            function(t, n) {
                if ("}" == t.peek()) {
                    if (1 == e) return n.tokenize.pop(), n.tokenize[n.tokenize.length - 1](t, n);
                    n.tokenize[n.tokenize.length - 1] = TX(e - 1)
                } else "{" == t.peek() && (n.tokenize[n.tokenize.length - 1] = TX(e + 1));
                return XX(t, n)
            }
    }

    function RX() {
        var e = !1;
        return function(t, n) {
            return e ? (n.tokenize.pop(), n.tokenize[n.tokenize.length - 1](t, n)) : (e = !0, XX(t, n))
        }
    }

    function WX(e, t, n, r) {
        return function(i, a) {
            var o, s = !1;
            for ("read-quoted-paused" === a.context.type && (a.context = a.context.prev, i.eat("}")); null != (o = i.next());) {
                if (o == e && (r || !s)) {
                    a.tokenize.pop();
                    break
                }
                if (n && "#" == o && !s) {
                    if (i.eat("{")) {
                        "}" == e && (a.context = {
                            prev: a.context,
                            type: "read-quoted-paused"
                        }), a.tokenize.push(TX());
                        break
                    }
                    if (/[@\$]/.test(i.peek())) {
                        a.tokenize.push(RX());
                        break
                    }
                }
                s = !s && "\\" == o
            }
            return t
        }
    }

    function qX(e, t) {
        return e.sol() && e.match("=end") && e.eol() && t.tokenize.pop(), e.skipToEnd(), "comment"
    }
    const YX = {
        startState: function(e) {
            return {
                tokenize: [XX],
                indented: 0,
                context: {
                    type: "top",
                    indented: -e
                },
                continuedLine: !1,
                lastTok: null,
                varList: !1
            }
        },
        token: function(e, t) {
            xX = null, e.sol() && (t.indented = e.indentation());
            var n, r = t.tokenize[t.tokenize.length - 1](e, t),
                i = xX;
            if ("variable" == r) {
                var a = e.current();
                "keyword" == (r = "." == t.lastTok ? "property" : wX.propertyIsEnumerable(e.current()) ? "keyword" : /^[A-Z]/.test(a) ? "tag" : "def" == t.lastTok || "class" == t.lastTok || t.varList ? "def" : "variable") && (i = a, kX.propertyIsEnumerable(a) ? n = "indent" : yX.propertyIsEnumerable(a) ? n = "dedent" : "if" != a && "unless" != a || e.column() != e.indentation() ? "do" == a && t.context.indented < t.indented && (n = "indent") : n = "indent")
            }
            return (xX || r && "comment" != r) && (t.lastTok = i), "|" == xX && (t.varList = !t.varList), "indent" == n || /[\(\[\{]/.test(xX) ? t.context = {
                prev: t.context,
                type: xX || r,
                indented: t.indented
            } : ("dedent" == n || /[\)\]\}]/.test(xX)) && t.context.prev && (t.context = t.context.prev), e.eol() && (t.continuedLine = "\\" == xX || "operator" == r), r
        },
        indent: function(e, t, n) {
            if (e.tokenize[e.tokenize.length - 1] != XX) return null;
            var r = t && t.charAt(0),
                i = e.context,
                a = i.type == SX[r] || "keyword" == i.type && /^(?:end|until|else|elsif|when|rescue)\b/.test(t);
            return i.indented + (a ? 0 : n.unit) + (e.continuedLine ? n.unit : 0)
        },
        languageData: {
            indentOnInput: /^\s*(?:end|rescue|elsif|else|\})$/,
            commentTokens: {
                line: "#"
            },
            autocomplete: PX
        }
    };
    var zX = Object.freeze({
            __proto__: null,
            ruby: YX
        }),
        ZX = {},
        EX = {
            eq: "operator",
            lt: "operator",
            le: "operator",
            gt: "operator",
            ge: "operator",
            in: "operator",
            ne: "operator",
            or: "operator"
        },
        IX = /(<=|>=|!=|<>)/,
        UX = /[=\(:\),{}.*<>+\-\/^\[\]]/;

    function VX(e, t, n) {
        if (n)
            for (var r = t.split(" "), i = 0; i < r.length; i++) ZX[r[i]] = {
                style: e,
                state: n
            }
    }
    VX("def", "stack pgm view source debug nesting nolist", ["inDataStep"]), VX("def", "if while until for do do; end end; then else cancel", ["inDataStep"]), VX("def", "label format _n_ _error_", ["inDataStep"]), VX("def", "ALTER BUFNO BUFSIZE CNTLLEV COMPRESS DLDMGACTION ENCRYPT ENCRYPTKEY EXTENDOBSCOUNTER GENMAX GENNUM INDEX LABEL OBSBUF OUTREP PW PWREQ READ REPEMPTY REPLACE REUSE ROLE SORTEDBY SPILL TOBSNO TYPE WRITE FILECLOSE FIRSTOBS IN OBS POINTOBS WHERE WHEREUP IDXNAME IDXWHERE DROP KEEP RENAME", ["inDataStep"]), VX("def", "filevar finfo finv fipname fipnamel fipstate first firstobs floor", ["inDataStep"]), VX("def", "varfmt varinfmt varlabel varlen varname varnum varray varrayx vartype verify vformat vformatd vformatdx vformatn vformatnx vformatw vformatwx vformatx vinarray vinarrayx vinformat vinformatd vinformatdx vinformatn vinformatnx vinformatw vinformatwx vinformatx vlabel vlabelx vlength vlengthx vname vnamex vnferr vtype vtypex weekday", ["inDataStep"]), VX("def", "zipfips zipname zipnamel zipstate", ["inDataStep"]), VX("def", "put putc putn", ["inDataStep"]), VX("builtin", "data run", ["inDataStep"]), VX("def", "data", ["inProc"]), VX("def", "%if %end %end; %else %else; %do %do; %then", ["inMacro"]), VX("builtin", "proc run; quit; libname filename %macro %mend option options", ["ALL"]), VX("def", "footnote title libname ods", ["ALL"]), VX("def", "%let %put %global %sysfunc %eval ", ["ALL"]), VX("variable", "&sysbuffr &syscc &syscharwidth &syscmd &sysdate &sysdate9 &sysday &sysdevic &sysdmg &sysdsn &sysencoding &sysenv &syserr &syserrortext &sysfilrc &syshostname &sysindex &sysinfo &sysjobid &syslast &syslckrc &syslibrc &syslogapplname &sysmacroname &sysmenv &sysmsg &sysncpu &sysodspath &sysparm &syspbuff &sysprocessid &sysprocessname &sysprocname &sysrc &sysscp &sysscpl &sysscpl &syssite &sysstartid &sysstartname &systcpiphostname &systime &sysuserid &sysver &sysvlong &sysvlong4 &syswarningtext", ["ALL"]), VX("def", "source2 nosource2 page pageno pagesize", ["ALL"]), VX("def", "_all_ _character_ _cmd_ _freq_ _i_ _infile_ _last_ _msg_ _null_ _numeric_ _temporary_ _type_ abort abs addr adjrsq airy alpha alter altlog altprint and arcos array arsin as atan attrc attrib attrn authserver autoexec awscontrol awsdef awsmenu awsmenumerge awstitle backward band base betainv between blocksize blshift bnot bor brshift bufno bufsize bxor by byerr byline byte calculated call cards cards4 catcache cbufno cdf ceil center cexist change chisq cinv class cleanup close cnonct cntllev coalesce codegen col collate collin column comamid comaux1 comaux2 comdef compbl compound compress config continue convert cos cosh cpuid create cross crosstab css curobs cv daccdb daccdbsl daccsl daccsyd dacctab dairy datalines datalines4 datejul datepart datetime day dbcslang dbcstype dclose ddfm ddm delete delimiter depdb depdbsl depsl depsyd deptab dequote descending descript design= device dflang dhms dif digamma dim dinfo display distinct dkricond dkrocond dlm dnum do dopen doptname doptnum dread drop dropnote dsname dsnferr echo else emaildlg emailid emailpw emailserver emailsys encrypt end endsas engine eof eov erf erfc error errorcheck errors exist exp fappend fclose fcol fdelete feedback fetch fetchobs fexist fget file fileclose fileexist filefmt filename fileref  fmterr fmtsearch fnonct fnote font fontalias  fopen foptname foptnum force formatted formchar formdelim formdlim forward fpoint fpos fput fread frewind frlen from fsep fuzz fwrite gaminv gamma getoption getvarc getvarn go goto group gwindow hbar hbound helpenv helploc hms honorappearance hosthelp hostprint hour hpct html hvar ibessel ibr id if index indexc indexw initcmd initstmt inner input inputc inputn inr insert int intck intnx into intrr invaliddata irr is jbessel join juldate keep kentb kurtosis label lag last lbound leave left length levels lgamma lib  library libref line linesize link list log log10 log2 logpdf logpmf logsdf lostcard lowcase lrecl ls macro macrogen maps mautosource max maxdec maxr mdy mean measures median memtype merge merror min minute missing missover mlogic mod mode model modify month mopen mort mprint mrecall msglevel msymtabmax mvarsize myy n nest netpv new news nmiss no nobatch nobs nocaps nocardimage nocenter nocharcode nocmdmac nocol nocum nodate nodbcs nodetails nodmr nodms nodmsbatch nodup nodupkey noduplicates noechoauto noequals noerrorabend noexitwindows nofullstimer noicon noimplmac noint nolist noloadlist nomiss nomlogic nomprint nomrecall nomsgcase nomstored nomultenvappl nonotes nonumber noobs noovp nopad nopercent noprint noprintinit normal norow norsasuser nosetinit  nosplash nosymbolgen note notes notitle notitles notsorted noverbose noxsync noxwait npv null number numkeys nummousekeys nway obs  on open     order ordinal otherwise out outer outp= output over ovp p(1 5 10 25 50 75 90 95 99) pad pad2  paired parm parmcards path pathdll pathname pdf peek peekc pfkey pmf point poisson poke position printer probbeta probbnml probchi probf probgam probhypr probit probnegb probnorm probsig probt procleave prt ps  pw pwreq qtr quote r ranbin rancau random ranexp rangam range ranks rannor ranpoi rantbl rantri ranuni rcorr read recfm register regr remote remove rename repeat repeated replace resolve retain return reuse reverse rewind right round rsquare rtf rtrace rtraceloc s s2 samploc sasautos sascontrol sasfrscr sasmsg sasmstore sasscript sasuser saving scan sdf second select selection separated seq serror set setcomm setot sign simple sin sinh siteinfo skewness skip sle sls sortedby sortpgm sortseq sortsize soundex  spedis splashlocation split spool sqrt start std stderr stdin stfips stimer stname stnamel stop stopover sub subgroup subpopn substr sum sumwgt symbol symbolgen symget symput sysget sysin sysleave sysmsg sysparm sysprint sysprintfont sysprod sysrc system t table tables tan tanh tapeclose tbufsize terminal test then timepart tinv  tnonct to today tol tooldef totper transformout translate trantab tranwrd trigamma trim trimn trunc truncover type unformatted uniform union until upcase update user usericon uss validate value var  weight when where while wincharset window work workinit workterm write wsum xsync xwait yearcutoff yes yyq  min max", ["inDataStep", "inProc"]), VX("operator", "and not ", ["inDataStep", "inProc"]);
    const jX = {
        startState: function() {
            return {
                inDataStep: !1,
                inProc: !1,
                inMacro: !1,
                nextword: !1,
                continueString: null,
                continueComment: !1
            }
        },
        token: function(e, t) {
            return e.eatSpace() ? null : function(e, t) {
                var n = e.next();
                if ("/" === n && e.eat("*")) return t.continueComment = !0, "comment";
                if (!0 === t.continueComment) return "*" === n && "/" === e.peek() ? (e.next(), t.continueComment = !1) : e.skipTo("*") ? (e.skipTo("*"), e.next(), e.eat("/") && (t.continueComment = !1)) : e.skipToEnd(), "comment";
                if ("*" == n && e.column() == e.indentation()) return e.skipToEnd(), "comment";
                var r, i = n + e.peek();
                if (!('"' !== n && "'" !== n || t.continueString)) return t.continueString = n, "string";
                if (t.continueString) return t.continueString == n ? t.continueString = null : e.skipTo(t.continueString) ? (e.next(), t.continueString = null) : e.skipToEnd(), "string";
                if (null !== t.continueString && e.eol()) return e.skipTo(t.continueString) || e.skipToEnd(), "string";
                if (/[\d\.]/.test(n)) return "." === n ? e.match(/^[0-9]+([eE][\-+]?[0-9]+)?/) : "0" === n ? e.match(/^[xX][0-9a-fA-F]+/) || e.match(/^0[0-7]+/) : e.match(/^[0-9]*\.?[0-9]*([eE][\-+]?[0-9]+)?/), "number";
                if (IX.test(n + e.peek())) return e.next(), "operator";
                if (EX.hasOwnProperty(i)) {
                    if (e.next(), " " === e.peek()) return EX[i.toLowerCase()]
                } else if (UX.test(n)) return "operator";
                if (null != e.match(/[%&;\w]+/, !1)) {
                    if (r = n + e.match(/[%&;\w]+/, !0), /&/.test(r)) return "variable"
                } else r = n;
                if (t.nextword) return e.match(/[\w]+/), "." === e.peek() && e.skipTo(" "), t.nextword = !1, "variableName.special";
                if (r = r.toLowerCase(), t.inDataStep) {
                    if ("run;" === r || e.match(/run\s;/)) return t.inDataStep = !1, "builtin";
                    if (r && "." === e.next()) return /\w/.test(e.peek()) ? "variableName.special" : "variable";
                    if (r && ZX.hasOwnProperty(r) && (-1 !== ZX[r].state.indexOf("inDataStep") || -1 !== ZX[r].state.indexOf("ALL"))) {
                        e.start < e.pos && e.backUp(e.pos - e.start);
                        for (var a = 0; a < r.length; ++a) e.next();
                        return ZX[r].style
                    }
                }
                if (t.inProc) {
                    if ("run;" === r || "quit;" === r) return t.inProc = !1, "builtin";
                    if (r && ZX.hasOwnProperty(r) && (-1 !== ZX[r].state.indexOf("inProc") || -1 !== ZX[r].state.indexOf("ALL"))) return e.match(/[\w]+/), ZX[r].style
                }
                return t.inMacro ? "%mend" === r ? (";" === e.peek() && e.next(), t.inMacro = !1, "builtin") : r && ZX.hasOwnProperty(r) && (-1 !== ZX[r].state.indexOf("inMacro") || -1 !== ZX[r].state.indexOf("ALL")) ? (e.match(/[\w]+/), ZX[r].style) : "atom" : r && ZX.hasOwnProperty(r) ? (e.backUp(1), e.match(/[\w]+/), "data" === r && !1 === /=/.test(e.peek()) ? (t.inDataStep = !0, t.nextword = !0, "builtin") : "proc" === r ? (t.inProc = !0, t.nextword = !0, "builtin") : "%macro" === r ? (t.inMacro = !0, t.nextword = !0, "builtin") : /title[1-9]/.test(r) ? "def" : "footnote" === r ? (e.eat(/[1-9]/), "def") : !0 === t.inDataStep && -1 !== ZX[r].state.indexOf("inDataStep") || !0 === t.inProc && -1 !== ZX[r].state.indexOf("inProc") || !0 === t.inMacro && -1 !== ZX[r].state.indexOf("inMacro") || -1 !== ZX[r].state.indexOf("ALL") ? ZX[r].style : null) : null
            }(e, t)
        },
        languageData: {
            commentTokens: {
                block: {
                    open: "/*",
                    close: "*/"
                }
            }
        }
    };
    var AX = Object.freeze({
            __proto__: null,
            sas: jX
        }),
        CX = "comment",
        GX = "string",
        LX = "atom",
        NX = "number",
        DX = "bracket";

    function MX(e) {
        for (var t = {}, n = e.split(" "), r = 0; r < n.length; ++r) t[n[r]] = !0;
        return t
    }
    var BX = MX("λ case-lambda call/cc class cond-expand define-class define-values exit-handler field import inherit init-field interface let*-values let-values let/ec mixin opt-lambda override protect provide public rename require require-for-syntax syntax syntax-case syntax-error unit/sig unless when with-syntax and begin call-with-current-continuation call-with-input-file call-with-output-file case cond define define-syntax define-macro defmacro delay do dynamic-wind else for-each if lambda let let* let-syntax letrec letrec-syntax map or syntax-rules abs acos angle append apply asin assoc assq assv atan boolean? caar cadr call-with-input-file call-with-output-file call-with-values car cdddar cddddr cdr ceiling char->integer char-alphabetic? char-ci<=? char-ci<? char-ci=? char-ci>=? char-ci>? char-downcase char-lower-case? char-numeric? char-ready? char-upcase char-upper-case? char-whitespace? char<=? char<? char=? char>=? char>? char? close-input-port close-output-port complex? cons cos current-input-port current-output-port denominator display eof-object? eq? equal? eqv? eval even? exact->inexact exact? exp expt #f floor force gcd imag-part inexact->exact inexact? input-port? integer->char integer? interaction-environment lcm length list list->string list->vector list-ref list-tail list? load log magnitude make-polar make-rectangular make-string make-vector max member memq memv min modulo negative? newline not null-environment null? number->string number? numerator odd? open-input-file open-output-file output-port? pair? peek-char port? positive? procedure? quasiquote quote quotient rational? rationalize read read-char real-part real? remainder reverse round scheme-report-environment set! set-car! set-cdr! sin sqrt string string->list string->number string->symbol string-append string-ci<=? string-ci<? string-ci=? string-ci>=? string-ci>? string-copy string-fill! string-length string-ref string-set! string<=? string<? string=? string>=? string>? string? substring symbol->string symbol? #t tan transcript-off transcript-on truncate values vector vector->list vector-fill! vector-length vector-ref vector-set! with-input-from-file with-output-to-file write write-char zero?"),
        FX = MX("define let letrec let* lambda define-macro defmacro let-syntax letrec-syntax let-values let*-values define-syntax syntax-rules define-values when unless");

    function HX(e, t, n) {
        this.indent = e, this.type = t, this.prev = n
    }

    function JX(e, t, n) {
        e.indentStack = new HX(t, n, e.indentStack)
    }
    var KX = new RegExp(/^(?:[-+]i|[-+][01]+#*(?:\/[01]+#*)?i|[-+]?[01]+#*(?:\/[01]+#*)?@[-+]?[01]+#*(?:\/[01]+#*)?|[-+]?[01]+#*(?:\/[01]+#*)?[-+](?:[01]+#*(?:\/[01]+#*)?)?i|[-+]?[01]+#*(?:\/[01]+#*)?)(?=[()\s;"]|$)/i),
        eT = new RegExp(/^(?:[-+]i|[-+][0-7]+#*(?:\/[0-7]+#*)?i|[-+]?[0-7]+#*(?:\/[0-7]+#*)?@[-+]?[0-7]+#*(?:\/[0-7]+#*)?|[-+]?[0-7]+#*(?:\/[0-7]+#*)?[-+](?:[0-7]+#*(?:\/[0-7]+#*)?)?i|[-+]?[0-7]+#*(?:\/[0-7]+#*)?)(?=[()\s;"]|$)/i),
        tT = new RegExp(/^(?:[-+]i|[-+][\da-f]+#*(?:\/[\da-f]+#*)?i|[-+]?[\da-f]+#*(?:\/[\da-f]+#*)?@[-+]?[\da-f]+#*(?:\/[\da-f]+#*)?|[-+]?[\da-f]+#*(?:\/[\da-f]+#*)?[-+](?:[\da-f]+#*(?:\/[\da-f]+#*)?)?i|[-+]?[\da-f]+#*(?:\/[\da-f]+#*)?)(?=[()\s;"]|$)/i),
        nT = new RegExp(/^(?:[-+]i|[-+](?:(?:(?:\d+#+\.?#*|\d+\.\d*#*|\.\d+#*|\d+)(?:[esfdl][-+]?\d+)?)|\d+#*\/\d+#*)i|[-+]?(?:(?:(?:\d+#+\.?#*|\d+\.\d*#*|\.\d+#*|\d+)(?:[esfdl][-+]?\d+)?)|\d+#*\/\d+#*)@[-+]?(?:(?:(?:\d+#+\.?#*|\d+\.\d*#*|\.\d+#*|\d+)(?:[esfdl][-+]?\d+)?)|\d+#*\/\d+#*)|[-+]?(?:(?:(?:\d+#+\.?#*|\d+\.\d*#*|\.\d+#*|\d+)(?:[esfdl][-+]?\d+)?)|\d+#*\/\d+#*)[-+](?:(?:(?:\d+#+\.?#*|\d+\.\d*#*|\.\d+#*|\d+)(?:[esfdl][-+]?\d+)?)|\d+#*\/\d+#*)?i|(?:(?:(?:\d+#+\.?#*|\d+\.\d*#*|\.\d+#*|\d+)(?:[esfdl][-+]?\d+)?)|\d+#*\/\d+#*))(?=[()\s;"]|$)/i);

    function rT(e) {
        return e.match(KX)
    }

    function iT(e) {
        return e.match(eT)
    }

    function aT(e, t) {
        return !0 === t && e.backUp(1), e.match(nT)
    }

    function oT(e) {
        return e.match(tT)
    }
    const sT = {
        startState: function() {
            return {
                indentStack: null,
                indentation: 0,
                mode: !1,
                sExprComment: !1,
                sExprQuote: !1
            }
        },
        token: function(e, t) {
            if (null == t.indentStack && e.sol() && (t.indentation = e.indentation()), e.eatSpace()) return null;
            var n = null;
            switch (t.mode) {
                case "string":
                    for (var r = !1; null != (i = e.next());) {
                        if ('"' == i && !r) {
                            t.mode = !1;
                            break
                        }
                        r = !r && "\\" == i
                    }
                    n = GX;
                    break;
                case "comment":
                    for (var i, a = !1; null != (i = e.next());) {
                        if ("#" == i && a) {
                            t.mode = !1;
                            break
                        }
                        a = "|" == i
                    }
                    n = CX;
                    break;
                case "s-expr-comment":
                    if (t.mode = !1, "(" != e.peek() && "[" != e.peek()) {
                        e.eatWhile(/[^\s\(\)\[\]]/), n = CX;
                        break
                    }
                    t.sExprComment = 0;
                default:
                    var o = e.next();
                    if ('"' == o) t.mode = "string", n = GX;
                    else if ("'" == o) "(" == e.peek() || "[" == e.peek() ? ("number" != typeof t.sExprQuote && (t.sExprQuote = 0), n = LX) : (e.eatWhile(/[\w_\-!$%&*+\.\/:<=>?@\^~]/), n = LX);
                    else if ("#" == o)
                        if (e.eat("|")) t.mode = "comment", n = CX;
                        else if (e.eat(/[tf]/i)) n = LX;
                    else if (e.eat(";")) t.mode = "s-expr-comment", n = CX;
                    else {
                        var s = null,
                            O = !1,
                            l = !0;
                        e.eat(/[ei]/i) ? O = !0 : e.backUp(1), e.match(/^#b/i) ? s = rT : e.match(/^#o/i) ? s = iT : e.match(/^#x/i) ? s = oT : e.match(/^#d/i) ? s = aT : e.match(/^[-+0-9.]/, !1) ? (l = !1, s = aT) : O || e.eat("#"), null != s && (l && !O && e.match(/^#[ei]/i), s(e) && (n = NX))
                    } else if (/^[-+0-9.]/.test(o) && aT(e, !0)) n = NX;
                    else if (";" == o) e.skipToEnd(), n = CX;
                    else if ("(" == o || "[" == o) {
                        for (var c, u = "", d = e.column(); null != (c = e.eat(/[^\s\(\[\;\)\]]/));) u += c;
                        u.length > 0 && FX.propertyIsEnumerable(u) ? JX(t, d + 2, o) : (e.eatSpace(), e.eol() || ";" == e.peek() ? JX(t, d + 1, o) : JX(t, d + e.current().length, o)), e.backUp(e.current().length - 1), "number" == typeof t.sExprComment && t.sExprComment++, "number" == typeof t.sExprQuote && t.sExprQuote++, n = DX
                    } else ")" == o || "]" == o ? (n = DX, null != t.indentStack && t.indentStack.type == (")" == o ? "(" : "[") && (! function(e) {
                        e.indentStack = e.indentStack.prev
                    }(t), "number" == typeof t.sExprComment && 0 == --t.sExprComment && (n = CX, t.sExprComment = !1), "number" == typeof t.sExprQuote && 0 == --t.sExprQuote && (n = LX, t.sExprQuote = !1))) : (e.eatWhile(/[\w_\-!$%&*+\.\/:<=>?@\^~]/), n = BX && BX.propertyIsEnumerable(e.current()) ? "builtin" : "variable")
            }
            return "number" == typeof t.sExprComment ? CX : "number" == typeof t.sExprQuote ? LX : n
        },
        indent: function(e) {
            return null == e.indentStack ? e.indentation : e.indentStack.indent
        },
        languageData: {
            closeBrackets: {
                brackets: ["(", "[", "{", '"']
            },
            commentTokens: {
                line: ";;"
            }
        }
    };
    var OT = Object.freeze({
            __proto__: null,
            scheme: sT
        }),
        lT = {};

    function cT(e, t) {
        for (var n = 0; n < t.length; n++) lT[t[n]] = e
    }
    var uT = ["true", "false"],
        dT = ["if", "then", "do", "else", "elif", "while", "until", "for", "in", "esac", "fi", "fin", "fil", "done", "exit", "set", "unset", "export", "function"],
        pT = ["ab", "awk", "bash", "beep", "cat", "cc", "cd", "chown", "chmod", "chroot", "clear", "cp", "curl", "cut", "diff", "echo", "find", "gawk", "gcc", "get", "git", "grep", "hg", "kill", "killall", "ln", "ls", "make", "mkdir", "openssl", "mv", "nc", "nl", "node", "npm", "ping", "ps", "restart", "rm", "rmdir", "sed", "service", "sh", "shopt", "shred", "source", "sort", "sleep", "ssh", "start", "stop", "su", "sudo", "svn", "tee", "telnet", "top", "touch", "vi", "vim", "wall", "wc", "wget", "who", "write", "yes", "zsh"];

    function hT(e, t) {
        if (e.eatSpace()) return null;
        var n, r = e.sol(),
            i = e.next();
        if ("\\" === i) return e.next(), null;
        if ("'" === i || '"' === i || "`" === i) return t.tokens.unshift(fT(i, "`" === i ? "quote" : "string")), QT(e, t);
        if ("#" === i) return r && e.eat("!") ? (e.skipToEnd(), "meta") : (e.skipToEnd(), "comment");
        if ("$" === i) return t.tokens.unshift(gT), QT(e, t);
        if ("+" === i || "=" === i) return "operator";
        if ("-" === i) return e.eat("-"), e.eatWhile(/\w/), "attribute";
        if ("<" == i) {
            if (e.match("<<")) return "operator";
            var a = e.match(/^<-?\s*['"]?([^'"]*)['"]?/);
            if (a) return t.tokens.unshift((n = a[1], function(e, t) {
                return e.sol() && e.string == n && t.tokens.shift(), e.skipToEnd(), "string.special"
            })), "string.special"
        }
        if (/\d/.test(i) && (e.eatWhile(/\d/), e.eol() || !/\w/.test(e.peek()))) return "number";
        e.eatWhile(/[\w-]/);
        var o = e.current();
        return "=" === e.peek() && /\w+/.test(o) ? "def" : lT.hasOwnProperty(o) ? lT[o] : null
    }

    function fT(e, t) {
        var n = "(" == e ? ")" : "{" == e ? "}" : e;
        return function(r, i) {
            for (var a, o = !1; null != (a = r.next());) {
                if (a === n && !o) {
                    i.tokens.shift();
                    break
                }
                if ("$" === a && !o && "'" !== e && r.peek() != n) {
                    o = !0, r.backUp(1), i.tokens.unshift(gT);
                    break
                }
                if (!o && e !== n && a === e) return i.tokens.unshift(fT(e, t)), QT(r, i);
                if (!o && /['"]/.test(a) && !/['"]/.test(e)) {
                    i.tokens.unshift(mT(a, "string")), r.backUp(1);
                    break
                }
                o = !o && "\\" === a
            }
            return t
        }
    }

    function mT(e, t) {
        return function(n, r) {
            return r.tokens[0] = fT(e, t), n.next(), QT(n, r)
        }
    }
    cT("atom", uT), cT("keyword", dT), cT("builtin", pT);
    var gT = function(e, t) {
        t.tokens.length > 1 && e.eat("$");
        var n = e.next();
        return /['"({]/.test(n) ? (t.tokens[0] = fT(n, "(" == n ? "quote" : "{" == n ? "def" : "string"), QT(e, t)) : (/\d/.test(n) || e.eatWhile(/\w/), t.tokens.shift(), "def")
    };

    function QT(e, t) {
        return (t.tokens[0] || hT)(e, t)
    }
    const $T = {
        startState: function() {
            return {
                tokens: []
            }
        },
        token: function(e, t) {
            return QT(e, t)
        },
        languageData: {
            autocomplete: uT.concat(dT, pT),
            closeBrackets: {
                brackets: ["(", "[", "{", "'", '"', "`"]
            },
            commentTokens: {
                line: "#"
            }
        }
    };
    var bT = Object.freeze({
        __proto__: null,
        shell: $T
    });

    function xT(e) {
        for (var t = {}, n = e.split(" "), r = 0; r < n.length; ++r) t[n[r]] = !0;
        return t
    }
    var PT = xT("if elsif else stop require"),
        wT = xT("true false not");

    function kT(e, t) {
        var n = e.next();
        if ("/" == n && e.eat("*")) return t.tokenize = vT, vT(e, t);
        if ("#" === n) return e.skipToEnd(), "comment";
        if ('"' == n) return t.tokenize = function(e) {
            return function(t, n) {
                for (var r, i = !1; null != (r = t.next()) && (r != e || i);) i = !i && "\\" == r;
                return i || (n.tokenize = kT), "string"
            }
        }(n), t.tokenize(e, t);
        if ("(" == n) return t._indent.push("("), t._indent.push("{"), null;
        if ("{" === n) return t._indent.push("{"), null;
        if (")" == n && (t._indent.pop(), t._indent.pop()), "}" === n) return t._indent.pop(), null;
        if ("," == n) return null;
        if (";" == n) return null;
        if (/[{}\(\),;]/.test(n)) return null;
        if (/\d/.test(n)) return e.eatWhile(/[\d]/), e.eat(/[KkMmGg]/), "number";
        if (":" == n) return e.eatWhile(/[a-zA-Z_]/), e.eatWhile(/[a-zA-Z0-9_]/), "operator";
        e.eatWhile(/\w/);
        var r = e.current();
        return "text" == r && e.eat(":") ? (t.tokenize = yT, "string") : PT.propertyIsEnumerable(r) ? "keyword" : wT.propertyIsEnumerable(r) ? "atom" : null
    }

    function yT(e, t) {
        return t._multiLineString = !0, e.sol() ? ("." == e.next() && e.eol() && (t._multiLineString = !1, t.tokenize = kT), "string") : (e.eatSpace(), "#" == e.peek() ? (e.skipToEnd(), "comment") : (e.skipToEnd(), "string"))
    }

    function vT(e, t) {
        for (var n, r = !1; null != (n = e.next());) {
            if (r && "/" == n) {
                t.tokenize = kT;
                break
            }
            r = "*" == n
        }
        return "comment"
    }
    const ST = {
        startState: function(e) {
            return {
                tokenize: kT,
                baseIndent: e || 0,
                _indent: []
            }
        },
        token: function(e, t) {
            return e.eatSpace() ? null : (t.tokenize || kT)(e, t)
        },
        indent: function(e, t, n) {
            var r = e._indent.length;
            return t && "}" == t[0] && r--, r < 0 && (r = 0), r * n.unit
        },
        languageData: {
            indentOnInput: /^\s*\}$/
        }
    };
    var _T = Object.freeze({
            __proto__: null,
            sieve: ST
        }),
        XT = /[+\-\/\\*~<>=@%|&?!.,:;^]/,
        TT = /true|false|nil|self|super|thisContext/,
        RT = function(e, t) {
            this.next = e, this.parent = t
        },
        WT = function(e, t, n) {
            this.name = e, this.context = t, this.eos = n
        },
        qT = function() {
            this.context = new RT(YT, null), this.expectVariable = !0, this.indentation = 0, this.userIndentationDelta = 0
        };
    qT.prototype.userIndent = function(e, t) {
        this.userIndentationDelta = e > 0 ? e / t - this.indentation : 0
    };
    var YT = function(e, t, n) {
            var r = new WT(null, t, !1),
                i = e.next();
            return '"' === i ? r = zT(e, new RT(zT, t)) : "'" === i ? r = ZT(e, new RT(ZT, t)) : "#" === i ? "'" === e.peek() ? (e.next(), r = ET(e, new RT(ET, t))) : e.eatWhile(/[^\s.{}\[\]()]/) ? r.name = "string.special" : r.name = "meta" : "$" === i ? ("<" === e.next() && (e.eatWhile(/[^\s>]/), e.next()), r.name = "string.special") : "|" === i && n.expectVariable ? r.context = new RT(IT, t) : /[\[\]{}()]/.test(i) ? (r.name = "bracket", r.eos = /[\[{(]/.test(i), "[" === i ? n.indentation++ : "]" === i && (n.indentation = Math.max(0, n.indentation - 1))) : XT.test(i) ? (e.eatWhile(XT), r.name = "operator", r.eos = ";" !== i) : /\d/.test(i) ? (e.eatWhile(/[\w\d]/), r.name = "number") : /[\w_]/.test(i) ? (e.eatWhile(/[\w\d_]/), r.name = n.expectVariable ? TT.test(e.current()) ? "keyword" : "variable" : null) : r.eos = n.expectVariable, r
        },
        zT = function(e, t) {
            return e.eatWhile(/[^"]/), new WT("comment", e.eat('"') ? t.parent : t, !0)
        },
        ZT = function(e, t) {
            return e.eatWhile(/[^']/), new WT("string", e.eat("'") ? t.parent : t, !1)
        },
        ET = function(e, t) {
            return e.eatWhile(/[^']/), new WT("string.special", e.eat("'") ? t.parent : t, !1)
        },
        IT = function(e, t) {
            var n = new WT(null, t, !1);
            return "|" === e.next() ? (n.context = t.parent, n.eos = !0) : (e.eatWhile(/[^|]/), n.name = "variable"), n
        };
    const UT = {
        startState: function() {
            return new qT
        },
        token: function(e, t) {
            if (t.userIndent(e.indentation(), e.indentUnit), e.eatSpace()) return null;
            var n = t.context.next(e, t.context, t);
            return t.context = n.context, t.expectVariable = n.eos, n.name
        },
        blankLine: function(e, t) {
            e.userIndent(0, t)
        },
        indent: function(e, t, n) {
            var r = e.context.next === YT && t && "]" === t.charAt(0) ? -1 : e.userIndentationDelta;
            return (e.indentation + r) * n.unit
        },
        languageData: {
            indentOnInput: /^\s*\]$/
        }
    };
    var VT = Object.freeze({
            __proto__: null,
            smalltalk: UT
        }),
        jT = /[^\s\|\!\+\-\*\?\~\^\&\:\(\)\[\]\{\}\"\\]/,
        AT = /[\|\!\+\-\*\?\~\^\&]/,
        CT = /^(OR|AND|NOT|TO)$/i;

    function GT(e) {
        return function(t, n) {
            for (var r = e;
                (e = t.peek()) && null != e.match(jT);) r += t.next();
            return n.tokenize = LT, CT.test(r) ? "operator" : function(e) {
                return parseFloat(e).toString() === e
            }(r) ? "number" : ":" == t.peek() ? "propertyName" : "string"
        }
    }

    function LT(e, t) {
        var n = e.next();
        return '"' == n ? t.tokenize = function(e) {
            return function(t, n) {
                for (var r, i = !1; null != (r = t.next()) && (r != e || i);) i = !i && "\\" == r;
                return i || (n.tokenize = LT), "string"
            }
        }(n) : AT.test(n) ? t.tokenize = function(e) {
            return function(t, n) {
                return "|" == e ? t.eat(/\|/) : "&" == e && t.eat(/\&/), n.tokenize = LT, "operator"
            }
        }(n) : jT.test(n) && (t.tokenize = GT(n)), t.tokenize != LT ? t.tokenize(e, t) : null
    }
    const NT = {
        startState: function() {
            return {
                tokenize: LT
            }
        },
        token: function(e, t) {
            return e.eatSpace() ? null : t.tokenize(e, t)
        }
    };
    var DT, MT = Object.freeze({
        __proto__: null,
        solr: NT
    });

    function BT(e) {
        return new RegExp("^(?:" + e.join("|") + ")$", "i")
    }
    var FT = BT(["str", "lang", "langmatches", "datatype", "bound", "sameterm", "isiri", "isuri", "iri", "uri", "bnode", "count", "sum", "min", "max", "avg", "sample", "group_concat", "rand", "abs", "ceil", "floor", "round", "concat", "substr", "strlen", "replace", "ucase", "lcase", "encode_for_uri", "contains", "strstarts", "strends", "strbefore", "strafter", "year", "month", "day", "hours", "minutes", "seconds", "timezone", "tz", "now", "uuid", "struuid", "md5", "sha1", "sha256", "sha384", "sha512", "coalesce", "if", "strlang", "strdt", "isnumeric", "regex", "exists", "isblank", "isliteral", "a", "bind"]),
        HT = BT(["base", "prefix", "select", "distinct", "reduced", "construct", "describe", "ask", "from", "named", "where", "order", "limit", "offset", "filter", "optional", "graph", "by", "asc", "desc", "as", "having", "undef", "values", "group", "minus", "in", "not", "service", "silent", "using", "insert", "delete", "union", "true", "false", "with", "data", "copy", "to", "move", "add", "create", "drop", "clear", "load"]),
        JT = /[*+\-<>=&|\^\/!\?]/;

    function KT(e, t) {
        var n = e.next();
        if (DT = null, "$" == n || "?" == n) return "?" == n && e.match(/\s/, !1) ? "operator" : (e.match(/^[A-Za-z0-9_\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][A-Za-z0-9_\u00B7\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u037D\u037F-\u1FFF\u200C-\u200D\u203F-\u2040\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]*/), "variableName.local");
        if ("<" != n || e.match(/^[\s\u00a0=]/, !1)) {
            if ('"' == n || "'" == n) return t.tokenize = function(e) {
                return function(t, n) {
                    for (var r, i = !1; null != (r = t.next());) {
                        if (r == e && !i) {
                            n.tokenize = KT;
                            break
                        }
                        i = !i && "\\" == r
                    }
                    return "string"
                }
            }(n), t.tokenize(e, t);
            if (/[{}\(\),\.;\[\]]/.test(n)) return DT = n, "bracket";
            if ("#" == n) return e.skipToEnd(), "comment";
            if ("^" === n) return "^" === (n = e.peek()) ? e.eat("^") : e.eatWhile(JT), "operator";
            if (JT.test(n)) return e.eatWhile(JT), "operator";
            if (":" == n) return eR(e), "atom";
            if ("@" == n) return e.eatWhile(/[a-z\d\-]/i), "meta";
            if (e.eatWhile(/[_\w\d]/), e.eat(":")) return eR(e), "atom";
            var r = e.current();
            return FT.test(r) ? "builtin" : HT.test(r) ? "keyword" : "variable"
        }
        return e.match(/^[^\s\u00a0>]*>?/), "atom"
    }

    function eR(e) {
        for (; e.match(/([:\w\d._-]|\\[-\\_~.!$&'()*+,;=/?#@%]|%[a-fA-F0-9][a-fA-F0-9])/););
    }

    function tR(e, t, n) {
        e.context = {
            prev: e.context,
            indent: e.indent,
            col: n,
            type: t
        }
    }

    function nR(e) {
        e.indent = e.context.indent, e.context = e.context.prev
    }
    const rR = {
        startState: function() {
            return {
                tokenize: KT,
                context: null,
                indent: 0,
                col: 0
            }
        },
        token: function(e, t) {
            if (e.sol() && (t.context && null == t.context.align && (t.context.align = !1), t.indent = e.indentation()), e.eatSpace()) return null;
            var n = t.tokenize(e, t);
            if ("comment" != n && t.context && null == t.context.align && "pattern" != t.context.type && (t.context.align = !0), "(" == DT) tR(t, ")", e.column());
            else if ("[" == DT) tR(t, "]", e.column());
            else if ("{" == DT) tR(t, "}", e.column());
            else if (/[\]\}\)]/.test(DT)) {
                for (; t.context && "pattern" == t.context.type;) nR(t);
                t.context && DT == t.context.type && (nR(t), "}" == DT && t.context && "pattern" == t.context.type && nR(t))
            } else "." == DT && t.context && "pattern" == t.context.type ? nR(t) : /atom|string|variable/.test(n) && t.context && (/[\}\]]/.test(t.context.type) ? tR(t, "pattern", e.column()) : "pattern" != t.context.type || t.context.align || (t.context.align = !0, t.context.col = e.column()));
            return n
        },
        indent: function(e, t, n) {
            var r = t && t.charAt(0),
                i = e.context;
            if (/[\]\}]/.test(r))
                for (; i && "pattern" == i.type;) i = i.prev;
            var a = i && r == i.type;
            return i ? "pattern" == i.type ? i.col : i.align ? i.col + (a ? 0 : 1) : i.indent + (a ? 0 : n.unit) : 0
        },
        languageData: {
            commentTokens: {
                line: "#"
            }
        }
    };
    var iR = Object.freeze({
        __proto__: null,
        sparql: rR
    });
    var aR = Object.freeze({
            __proto__: null,
            spreadsheet: {
                startState: function() {
                    return {
                        stringType: null,
                        stack: []
                    }
                },
                token: function(e, t) {
                    if (e) {
                        switch (0 === t.stack.length && ('"' != e.peek() && "'" != e.peek() || (t.stringType = e.peek(), e.next(), t.stack.unshift("string"))), t.stack[0]) {
                            case "string":
                                for (;
                                    "string" === t.stack[0] && !e.eol();) e.peek() === t.stringType ? (e.next(), t.stack.shift()) : "\\" === e.peek() ? (e.next(), e.next()) : e.match(/^.[^\\\"\']*/);
                                return "string";
                            case "characterClass":
                                for (;
                                    "characterClass" === t.stack[0] && !e.eol();) e.match(/^[^\]\\]+/) || e.match(/^\\./) || t.stack.shift();
                                return "operator"
                        }
                        var n = e.peek();
                        switch (n) {
                            case "[":
                                return e.next(), t.stack.unshift("characterClass"), "bracket";
                            case ":":
                                return e.next(), "operator";
                            case "\\":
                                return e.match(/\\[a-z]+/) ? "string.special" : (e.next(), "atom");
                            case ".":
                            case ",":
                            case ";":
                            case "*":
                            case "-":
                            case "+":
                            case "^":
                            case "<":
                            case "/":
                            case "=":
                                return e.next(), "atom";
                            case "$":
                                return e.next(), "builtin"
                        }
                        return e.match(/\d+/) ? e.match(/^\w+/) ? "error" : "number" : e.match(/^[a-zA-Z_]\w*/) ? e.match(/(?=[\(.])/, !1) ? "keyword" : "variable" : -1 != ["[", "]", "(", ")", "{", "}"].indexOf(n) ? (e.next(), "bracket") : (e.eatSpace() || e.next(), null)
                    }
                }
            }
        }),
        oR = ["a", "abbr", "address", "area", "article", "aside", "audio", "b", "base", "bdi", "bdo", "bgsound", "blockquote", "body", "br", "button", "canvas", "caption", "cite", "code", "col", "colgroup", "data", "datalist", "dd", "del", "details", "dfn", "div", "dl", "dt", "em", "embed", "fieldset", "figcaption", "figure", "footer", "form", "h1", "h2", "h3", "h4", "h5", "h6", "head", "header", "hgroup", "hr", "html", "i", "iframe", "img", "input", "ins", "kbd", "keygen", "label", "legend", "li", "link", "main", "map", "mark", "marquee", "menu", "menuitem", "meta", "meter", "nav", "nobr", "noframes", "noscript", "object", "ol", "optgroup", "option", "output", "p", "param", "pre", "progress", "q", "rp", "rt", "ruby", "s", "samp", "script", "section", "select", "small", "source", "span", "strong", "style", "sub", "summary", "sup", "table", "tbody", "td", "textarea", "tfoot", "th", "thead", "time", "tr", "track", "u", "ul", "var", "video"],
        sR = ["domain", "regexp", "url-prefix", "url"],
        OR = ["all", "aural", "braille", "handheld", "print", "projection", "screen", "tty", "tv", "embossed"],
        lR = ["width", "min-width", "max-width", "height", "min-height", "max-height", "device-width", "min-device-width", "max-device-width", "device-height", "min-device-height", "max-device-height", "aspect-ratio", "min-aspect-ratio", "max-aspect-ratio", "device-aspect-ratio", "min-device-aspect-ratio", "max-device-aspect-ratio", "color", "min-color", "max-color", "color-index", "min-color-index", "max-color-index", "monochrome", "min-monochrome", "max-monochrome", "resolution", "min-resolution", "max-resolution", "scan", "grid"],
        cR = ["align-content", "align-items", "align-self", "alignment-adjust", "alignment-baseline", "anchor-point", "animation", "animation-delay", "animation-direction", "animation-duration", "animation-fill-mode", "animation-iteration-count", "animation-name", "animation-play-state", "animation-timing-function", "appearance", "azimuth", "backface-visibility", "background", "background-attachment", "background-clip", "background-color", "background-image", "background-origin", "background-position", "background-repeat", "background-size", "baseline-shift", "binding", "bleed", "bookmark-label", "bookmark-level", "bookmark-state", "bookmark-target", "border", "border-bottom", "border-bottom-color", "border-bottom-left-radius", "border-bottom-right-radius", "border-bottom-style", "border-bottom-width", "border-collapse", "border-color", "border-image", "border-image-outset", "border-image-repeat", "border-image-slice", "border-image-source", "border-image-width", "border-left", "border-left-color", "border-left-style", "border-left-width", "border-radius", "border-right", "border-right-color", "border-right-style", "border-right-width", "border-spacing", "border-style", "border-top", "border-top-color", "border-top-left-radius", "border-top-right-radius", "border-top-style", "border-top-width", "border-width", "bottom", "box-decoration-break", "box-shadow", "box-sizing", "break-after", "break-before", "break-inside", "caption-side", "clear", "clip", "color", "color-profile", "column-count", "column-fill", "column-gap", "column-rule", "column-rule-color", "column-rule-style", "column-rule-width", "column-span", "column-width", "columns", "content", "counter-increment", "counter-reset", "crop", "cue", "cue-after", "cue-before", "cursor", "direction", "display", "dominant-baseline", "drop-initial-after-adjust", "drop-initial-after-align", "drop-initial-before-adjust", "drop-initial-before-align", "drop-initial-size", "drop-initial-value", "elevation", "empty-cells", "fit", "fit-position", "flex", "flex-basis", "flex-direction", "flex-flow", "flex-grow", "flex-shrink", "flex-wrap", "float", "float-offset", "flow-from", "flow-into", "font", "font-feature-settings", "font-family", "font-kerning", "font-language-override", "font-size", "font-size-adjust", "font-stretch", "font-style", "font-synthesis", "font-variant", "font-variant-alternates", "font-variant-caps", "font-variant-east-asian", "font-variant-ligatures", "font-variant-numeric", "font-variant-position", "font-weight", "grid", "grid-area", "grid-auto-columns", "grid-auto-flow", "grid-auto-position", "grid-auto-rows", "grid-column", "grid-column-end", "grid-column-start", "grid-row", "grid-row-end", "grid-row-start", "grid-template", "grid-template-areas", "grid-template-columns", "grid-template-rows", "hanging-punctuation", "height", "hyphens", "icon", "image-orientation", "image-rendering", "image-resolution", "inline-box-align", "justify-content", "left", "letter-spacing", "line-break", "line-height", "line-stacking", "line-stacking-ruby", "line-stacking-shift", "line-stacking-strategy", "list-style", "list-style-image", "list-style-position", "list-style-type", "margin", "margin-bottom", "margin-left", "margin-right", "margin-top", "marker-offset", "marks", "marquee-direction", "marquee-loop", "marquee-play-count", "marquee-speed", "marquee-style", "max-height", "max-width", "min-height", "min-width", "move-to", "nav-down", "nav-index", "nav-left", "nav-right", "nav-up", "object-fit", "object-position", "opacity", "order", "orphans", "outline", "outline-color", "outline-offset", "outline-style", "outline-width", "overflow", "overflow-style", "overflow-wrap", "overflow-x", "overflow-y", "padding", "padding-bottom", "padding-left", "padding-right", "padding-top", "page", "page-break-after", "page-break-before", "page-break-inside", "page-policy", "pause", "pause-after", "pause-before", "perspective", "perspective-origin", "pitch", "pitch-range", "play-during", "position", "presentation-level", "punctuation-trim", "quotes", "region-break-after", "region-break-before", "region-break-inside", "region-fragment", "rendering-intent", "resize", "rest", "rest-after", "rest-before", "richness", "right", "rotation", "rotation-point", "ruby-align", "ruby-overhang", "ruby-position", "ruby-span", "shape-image-threshold", "shape-inside", "shape-margin", "shape-outside", "size", "speak", "speak-as", "speak-header", "speak-numeral", "speak-punctuation", "speech-rate", "stress", "string-set", "tab-size", "table-layout", "target", "target-name", "target-new", "target-position", "text-align", "text-align-last", "text-decoration", "text-decoration-color", "text-decoration-line", "text-decoration-skip", "text-decoration-style", "text-emphasis", "text-emphasis-color", "text-emphasis-position", "text-emphasis-style", "text-height", "text-indent", "text-justify", "text-outline", "text-overflow", "text-shadow", "text-size-adjust", "text-space-collapse", "text-transform", "text-underline-position", "text-wrap", "top", "transform", "transform-origin", "transform-style", "transition", "transition-delay", "transition-duration", "transition-property", "transition-timing-function", "unicode-bidi", "vertical-align", "visibility", "voice-balance", "voice-duration", "voice-family", "voice-pitch", "voice-range", "voice-rate", "voice-stress", "voice-volume", "volume", "white-space", "widows", "width", "will-change", "word-break", "word-spacing", "word-wrap", "z-index", "clip-path", "clip-rule", "mask", "enable-background", "filter", "flood-color", "flood-opacity", "lighting-color", "stop-color", "stop-opacity", "pointer-events", "color-interpolation", "color-interpolation-filters", "color-rendering", "fill", "fill-opacity", "fill-rule", "image-rendering", "marker", "marker-end", "marker-mid", "marker-start", "shape-rendering", "stroke", "stroke-dasharray", "stroke-dashoffset", "stroke-linecap", "stroke-linejoin", "stroke-miterlimit", "stroke-opacity", "stroke-width", "text-rendering", "baseline-shift", "dominant-baseline", "glyph-orientation-horizontal", "glyph-orientation-vertical", "text-anchor", "writing-mode", "font-smoothing", "osx-font-smoothing"],
        uR = ["scrollbar-arrow-color", "scrollbar-base-color", "scrollbar-dark-shadow-color", "scrollbar-face-color", "scrollbar-highlight-color", "scrollbar-shadow-color", "scrollbar-3d-light-color", "scrollbar-track-color", "shape-inside", "searchfield-cancel-button", "searchfield-decoration", "searchfield-results-button", "searchfield-results-decoration", "zoom"],
        dR = ["font-family", "src", "unicode-range", "font-variant", "font-feature-settings", "font-stretch", "font-weight", "font-style"],
        pR = ["aliceblue", "antiquewhite", "aqua", "aquamarine", "azure", "beige", "bisque", "black", "blanchedalmond", "blue", "blueviolet", "brown", "burlywood", "cadetblue", "chartreuse", "chocolate", "coral", "cornflowerblue", "cornsilk", "crimson", "cyan", "darkblue", "darkcyan", "darkgoldenrod", "darkgray", "darkgreen", "darkkhaki", "darkmagenta", "darkolivegreen", "darkorange", "darkorchid", "darkred", "darksalmon", "darkseagreen", "darkslateblue", "darkslategray", "darkturquoise", "darkviolet", "deeppink", "deepskyblue", "dimgray", "dodgerblue", "firebrick", "floralwhite", "forestgreen", "fuchsia", "gainsboro", "ghostwhite", "gold", "goldenrod", "gray", "grey", "green", "greenyellow", "honeydew", "hotpink", "indianred", "indigo", "ivory", "khaki", "lavender", "lavenderblush", "lawngreen", "lemonchiffon", "lightblue", "lightcoral", "lightcyan", "lightgoldenrodyellow", "lightgray", "lightgreen", "lightpink", "lightsalmon", "lightseagreen", "lightskyblue", "lightslategray", "lightsteelblue", "lightyellow", "lime", "limegreen", "linen", "magenta", "maroon", "mediumaquamarine", "mediumblue", "mediumorchid", "mediumpurple", "mediumseagreen", "mediumslateblue", "mediumspringgreen", "mediumturquoise", "mediumvioletred", "midnightblue", "mintcream", "mistyrose", "moccasin", "navajowhite", "navy", "oldlace", "olive", "olivedrab", "orange", "orangered", "orchid", "palegoldenrod", "palegreen", "paleturquoise", "palevioletred", "papayawhip", "peachpuff", "peru", "pink", "plum", "powderblue", "purple", "rebeccapurple", "red", "rosybrown", "royalblue", "saddlebrown", "salmon", "sandybrown", "seagreen", "seashell", "sienna", "silver", "skyblue", "slateblue", "slategray", "snow", "springgreen", "steelblue", "tan", "teal", "thistle", "tomato", "turquoise", "violet", "wheat", "white", "whitesmoke", "yellow", "yellowgreen"],
        hR = ["above", "absolute", "activeborder", "additive", "activecaption", "afar", "after-white-space", "ahead", "alias", "all", "all-scroll", "alphabetic", "alternate", "always", "amharic", "amharic-abegede", "antialiased", "appworkspace", "arabic-indic", "armenian", "asterisks", "attr", "auto", "avoid", "avoid-column", "avoid-page", "avoid-region", "background", "backwards", "baseline", "below", "bidi-override", "binary", "bengali", "blink", "block", "block-axis", "bold", "bolder", "border", "border-box", "both", "bottom", "break", "break-all", "break-word", "bullets", "button", "button-bevel", "buttonface", "buttonhighlight", "buttonshadow", "buttontext", "calc", "cambodian", "capitalize", "caps-lock-indicator", "caption", "captiontext", "caret", "cell", "center", "checkbox", "circle", "cjk-decimal", "cjk-earthly-branch", "cjk-heavenly-stem", "cjk-ideographic", "clear", "clip", "close-quote", "col-resize", "collapse", "column", "compact", "condensed", "contain", "content", "contents", "content-box", "context-menu", "continuous", "copy", "counter", "counters", "cover", "crop", "cross", "crosshair", "currentcolor", "cursive", "cyclic", "dashed", "decimal", "decimal-leading-zero", "default", "default-button", "destination-atop", "destination-in", "destination-out", "destination-over", "devanagari", "disc", "discard", "disclosure-closed", "disclosure-open", "document", "dot-dash", "dot-dot-dash", "dotted", "double", "down", "e-resize", "ease", "ease-in", "ease-in-out", "ease-out", "element", "ellipse", "ellipsis", "embed", "end", "ethiopic", "ethiopic-abegede", "ethiopic-abegede-am-et", "ethiopic-abegede-gez", "ethiopic-abegede-ti-er", "ethiopic-abegede-ti-et", "ethiopic-halehame-aa-er", "ethiopic-halehame-aa-et", "ethiopic-halehame-am-et", "ethiopic-halehame-gez", "ethiopic-halehame-om-et", "ethiopic-halehame-sid-et", "ethiopic-halehame-so-et", "ethiopic-halehame-ti-er", "ethiopic-halehame-ti-et", "ethiopic-halehame-tig", "ethiopic-numeric", "ew-resize", "expanded", "extends", "extra-condensed", "extra-expanded", "fantasy", "fast", "fill", "fixed", "flat", "flex", "footnotes", "forwards", "from", "geometricPrecision", "georgian", "graytext", "groove", "gujarati", "gurmukhi", "hand", "hangul", "hangul-consonant", "hebrew", "help", "hidden", "hide", "higher", "highlight", "highlighttext", "hiragana", "hiragana-iroha", "horizontal", "hsl", "hsla", "icon", "ignore", "inactiveborder", "inactivecaption", "inactivecaptiontext", "infinite", "infobackground", "infotext", "inherit", "initial", "inline", "inline-axis", "inline-block", "inline-flex", "inline-table", "inset", "inside", "intrinsic", "invert", "italic", "japanese-formal", "japanese-informal", "justify", "kannada", "katakana", "katakana-iroha", "keep-all", "khmer", "korean-hangul-formal", "korean-hanja-formal", "korean-hanja-informal", "landscape", "lao", "large", "larger", "left", "level", "lighter", "line-through", "linear", "linear-gradient", "lines", "list-item", "listbox", "listitem", "local", "logical", "loud", "lower", "lower-alpha", "lower-armenian", "lower-greek", "lower-hexadecimal", "lower-latin", "lower-norwegian", "lower-roman", "lowercase", "ltr", "malayalam", "match", "matrix", "matrix3d", "media-controls-background", "media-current-time-display", "media-fullscreen-button", "media-mute-button", "media-play-button", "media-return-to-realtime-button", "media-rewind-button", "media-seek-back-button", "media-seek-forward-button", "media-slider", "media-sliderthumb", "media-time-remaining-display", "media-volume-slider", "media-volume-slider-container", "media-volume-sliderthumb", "medium", "menu", "menulist", "menulist-button", "menulist-text", "menulist-textfield", "menutext", "message-box", "middle", "min-intrinsic", "mix", "mongolian", "monospace", "move", "multiple", "myanmar", "n-resize", "narrower", "ne-resize", "nesw-resize", "no-close-quote", "no-drop", "no-open-quote", "no-repeat", "none", "normal", "not-allowed", "nowrap", "ns-resize", "numbers", "numeric", "nw-resize", "nwse-resize", "oblique", "octal", "open-quote", "optimizeLegibility", "optimizeSpeed", "oriya", "oromo", "outset", "outside", "outside-shape", "overlay", "overline", "padding", "padding-box", "painted", "page", "paused", "persian", "perspective", "plus-darker", "plus-lighter", "pointer", "polygon", "portrait", "pre", "pre-line", "pre-wrap", "preserve-3d", "progress", "push-button", "radial-gradient", "radio", "read-only", "read-write", "read-write-plaintext-only", "rectangle", "region", "relative", "repeat", "repeating-linear-gradient", "repeating-radial-gradient", "repeat-x", "repeat-y", "reset", "reverse", "rgb", "rgba", "ridge", "right", "rotate", "rotate3d", "rotateX", "rotateY", "rotateZ", "round", "row-resize", "rtl", "run-in", "running", "s-resize", "sans-serif", "scale", "scale3d", "scaleX", "scaleY", "scaleZ", "scroll", "scrollbar", "scroll-position", "se-resize", "searchfield", "searchfield-cancel-button", "searchfield-decoration", "searchfield-results-button", "searchfield-results-decoration", "semi-condensed", "semi-expanded", "separate", "serif", "show", "sidama", "simp-chinese-formal", "simp-chinese-informal", "single", "skew", "skewX", "skewY", "skip-white-space", "slide", "slider-horizontal", "slider-vertical", "sliderthumb-horizontal", "sliderthumb-vertical", "slow", "small", "small-caps", "small-caption", "smaller", "solid", "somali", "source-atop", "source-in", "source-out", "source-over", "space", "spell-out", "square", "square-button", "start", "static", "status-bar", "stretch", "stroke", "sub", "subpixel-antialiased", "super", "sw-resize", "symbolic", "symbols", "table", "table-caption", "table-cell", "table-column", "table-column-group", "table-footer-group", "table-header-group", "table-row", "table-row-group", "tamil", "telugu", "text", "text-bottom", "text-top", "textarea", "textfield", "thai", "thick", "thin", "threeddarkshadow", "threedface", "threedhighlight", "threedlightshadow", "threedshadow", "tibetan", "tigre", "tigrinya-er", "tigrinya-er-abegede", "tigrinya-et", "tigrinya-et-abegede", "to", "top", "trad-chinese-formal", "trad-chinese-informal", "translate", "translate3d", "translateX", "translateY", "translateZ", "transparent", "ultra-condensed", "ultra-expanded", "underline", "up", "upper-alpha", "upper-armenian", "upper-greek", "upper-hexadecimal", "upper-latin", "upper-norwegian", "upper-roman", "uppercase", "urdu", "url", "var", "vertical", "vertical-text", "visible", "visibleFill", "visiblePainted", "visibleStroke", "visual", "w-resize", "wait", "wave", "wider", "window", "windowframe", "windowtext", "words", "x-large", "x-small", "xor", "xx-large", "xx-small", "bicubic", "optimizespeed", "grayscale", "row", "row-reverse", "wrap", "wrap-reverse", "column-reverse", "flex-start", "flex-end", "space-between", "space-around", "unset"],
        fR = ["in", "and", "or", "not", "is not", "is a", "is", "isnt", "defined", "if unless"],
        mR = ["for", "if", "else", "unless", "from", "to"],
        gR = ["null", "true", "false", "href", "title", "type", "not-allowed", "readonly", "disabled"],
        QR = oR.concat(sR, OR, lR, cR, uR, pR, hR, dR, fR, mR, gR, ["@font-face", "@keyframes", "@media", "@viewport", "@page", "@host", "@supports", "@block", "@css"]);

    function $R(e) {
        return e = e.sort((function(e, t) {
            return t > e
        })), new RegExp("^((" + e.join(")|(") + "))\\b")
    }

    function bR(e) {
        for (var t = {}, n = 0; n < e.length; ++n) t[e[n]] = !0;
        return t
    }
    var xR, PR, wR, kR, yR = bR(oR),
        vR = /^(a|b|i|s|col|em)$/i,
        SR = bR(cR),
        _R = bR(uR),
        XR = bR(hR),
        TR = bR(pR),
        RR = bR(sR),
        WR = $R(sR),
        qR = bR(lR),
        YR = bR(OR),
        zR = bR(dR),
        ZR = /^\s*([.]{2,3}|&&|\|\||\*\*|[?!=:]?=|[-+*\/%<>]=?|\?:|\~)/,
        ER = $R(fR),
        IR = bR(mR),
        UR = new RegExp(/^\-(moz|ms|o|webkit)-/i),
        VR = bR(gR),
        jR = "",
        AR = {};

    function CR(e, t) {
        if (jR = e.string.match(/(^[\w-]+\s*=\s*$)|(^\s*[\w-]+\s*=\s*[\w-])|(^\s*(\.|#|@|\$|\&|\[|\d|\+|::?|\{|\>|~|\/)?\s*[\w-]*([a-z0-9-]|\*|\/\*)(\(|,)?)/), t.context.line.firstWord = jR ? jR[0].replace(/^\s*/, "") : "", t.context.line.indent = e.indentation(), xR = e.peek(), e.match("//")) return e.skipToEnd(), ["comment", "comment"];
        if (e.match("/*")) return t.tokenize = GR, GR(e, t);
        if ('"' == xR || "'" == xR) return e.next(), t.tokenize = LR(xR), t.tokenize(e, t);
        if ("@" == xR) return e.next(), e.eatWhile(/[\w\\-]/), ["def", e.current()];
        if ("#" == xR) {
            if (e.next(), e.match(/^[0-9a-f]{3}([0-9a-f]([0-9a-f]{2}){0,2})?\b(?!-)/i)) return ["atom", "atom"];
            if (e.match(/^[a-z][\w-]*/i)) return ["builtin", "hash"]
        }
        return e.match(UR) ? ["meta", "vendor-prefixes"] : e.match(/^-?[0-9]?\.?[0-9]/) ? (e.eatWhile(/[a-z%]/i), ["number", "unit"]) : "!" == xR ? (e.next(), [e.match(/^(important|optional)/i) ? "keyword" : "operator", "important"]) : "." == xR && e.match(/^\.[a-z][\w-]*/i) ? ["qualifier", "qualifier"] : e.match(WR) ? ("(" == e.peek() && (t.tokenize = NR), ["property", "word"]) : e.match(/^[a-z][\w-]*\(/i) ? (e.backUp(1), ["keyword", "mixin"]) : e.match(/^(\+|-)[a-z][\w-]*\(/i) ? (e.backUp(1), ["keyword", "block-mixin"]) : e.string.match(/^\s*&/) && e.match(/^[-_]+[a-z][\w-]*/) ? ["qualifier", "qualifier"] : e.match(/^(\/|&)(-|_|:|\.|#|[a-z])/) ? (e.backUp(1), ["variableName.special", "reference"]) : e.match(/^&{1}\s*$/) ? ["variableName.special", "reference"] : e.match(ER) ? ["operator", "operator"] : e.match(/^\$?[-_]*[a-z0-9]+[\w-]*/i) ? e.match(/^(\.|\[)[\w-\'\"\]]+/i, !1) && !HR(e.current()) ? (e.match("."), ["variable", "variable-name"]) : ["variable", "word"] : e.match(ZR) ? ["operator", e.current()] : /[:;,{}\[\]\(\)]/.test(xR) ? (e.next(), [null, xR]) : (e.next(), [null, null])
    }

    function GR(e, t) {
        for (var n, r = !1; null != (n = e.next());) {
            if (r && "/" == n) {
                t.tokenize = null;
                break
            }
            r = "*" == n
        }
        return ["comment", "comment"]
    }

    function LR(e) {
        return function(t, n) {
            for (var r, i = !1; null != (r = t.next());) {
                if (r == e && !i) {
                    ")" == e && t.backUp(1);
                    break
                }
                i = !i && "\\" == r
            }
            return (r == e || !i && ")" != e) && (n.tokenize = null), ["string", "string"]
        }
    }

    function NR(e, t) {
        return e.next(), e.match(/\s*[\"\')]/, !1) ? t.tokenize = null : t.tokenize = LR(")"), [null, "("]
    }

    function DR(e, t, n, r) {
        this.type = e, this.indent = t, this.prev = n, this.line = r || {
            firstWord: "",
            indent: 0
        }
    }

    function MR(e, t, n, r) {
        return r = r >= 0 ? r : t.indentUnit, e.context = new DR(n, t.indentation() + r, e.context), n
    }

    function BR(e, t, n) {
        var r = e.context.indent - t.indentUnit;
        return n = n || !1, e.context = e.context.prev, n && (e.context.indent = r), e.context.type
    }

    function FR(e, t, n, r) {
        for (var i = r || 1; i > 0; i--) n.context = n.context.prev;
        return function(e, t, n) {
            return AR[n.context.type](e, t, n)
        }(e, t, n)
    }

    function HR(e) {
        return e.toLowerCase() in yR
    }

    function JR(e) {
        return (e = e.toLowerCase()) in SR || e in zR
    }

    function KR(e) {
        return e.toLowerCase() in IR
    }

    function eW(e) {
        return e.toLowerCase().match(UR)
    }

    function tW(e) {
        var t = e.toLowerCase(),
            n = "variable";
        return HR(e) ? n = "tag" : KR(e) ? n = "block-keyword" : JR(e) ? n = "property" : t in XR || t in VR ? n = "atom" : "return" == t || t in TR ? n = "keyword" : e.match(/^[A-Z]/) && (n = "string"), n
    }

    function nW(e, t) {
        return oW(t) && ("{" == e || "]" == e || "hash" == e || "qualifier" == e) || "block-mixin" == e
    }

    function rW(e, t) {
        return "{" == e && t.match(/^\s*\$?[\w-]+/i, !1)
    }

    function iW(e, t) {
        return ":" == e && t.match(/^[a-z-]+/, !1)
    }

    function aW(e) {
        return e.sol() || e.string.match(new RegExp("^\\s*" + e.current().replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&")))
    }

    function oW(e) {
        return e.eol() || e.match(/^\s*$/, !1)
    }

    function sW(e) {
        var t = /^\s*[-_]*[a-z0-9]+[\w-]*/i,
            n = "string" == typeof e ? e.match(t) : e.string.match(t);
        return n ? n[0].replace(/^\s*/, "") : ""
    }
    AR.block = function(e, t, n) {
        if ("comment" == e && aW(t) || "," == e && oW(t) || "mixin" == e) return MR(n, t, "block", 0);
        if (rW(e, t)) return MR(n, t, "interpolation");
        if (oW(t) && "]" == e && !/^\s*(\.|#|:|\[|\*|&)/.test(t.string) && !HR(sW(t))) return MR(n, t, "block", 0);
        if (nW(e, t)) return MR(n, t, "block");
        if ("}" == e && oW(t)) return MR(n, t, "block", 0);
        if ("variable-name" == e) return t.string.match(/^\s?\$[\w-\.\[\]\'\"]+$/) || KR(sW(t)) ? MR(n, t, "variableName") : MR(n, t, "variableName", 0);
        if ("=" == e) return oW(t) || KR(sW(t)) ? MR(n, t, "block") : MR(n, t, "block", 0);
        if ("*" == e && (oW(t) || t.match(/\s*(,|\.|#|\[|:|{)/, !1))) return kR = "tag", MR(n, t, "block");
        if (iW(e, t)) return MR(n, t, "pseudo");
        if (/@(font-face|media|supports|(-moz-)?document)/.test(e)) return MR(n, t, oW(t) ? "block" : "atBlock");
        if (/@(-(moz|ms|o|webkit)-)?keyframes$/.test(e)) return MR(n, t, "keyframes");
        if (/@extends?/.test(e)) return MR(n, t, "extend", 0);
        if (e && "@" == e.charAt(0)) return t.indentation() > 0 && JR(t.current().slice(1)) ? (kR = "variable", "block") : /(@import|@require|@charset)/.test(e) ? MR(n, t, "block", 0) : MR(n, t, "block");
        if ("reference" == e && oW(t)) return MR(n, t, "block");
        if ("(" == e) return MR(n, t, "parens");
        if ("vendor-prefixes" == e) return MR(n, t, "vendorPrefixes");
        if ("word" == e) {
            var r = t.current();
            if ("property" == (kR = tW(r))) return aW(t) ? MR(n, t, "block", 0) : (kR = "atom", "block");
            if ("tag" == kR) {
                if (/embed|menu|pre|progress|sub|table/.test(r) && JR(sW(t))) return kR = "atom", "block";
                if (t.string.match(new RegExp("\\[\\s*" + r + "|" + r + "\\s*\\]"))) return kR = "atom", "block";
                if (vR.test(r) && (aW(t) && t.string.match(/=/) || !aW(t) && !t.string.match(/^(\s*\.|#|\&|\[|\/|>|\*)/) && !HR(sW(t)))) return kR = "variable", KR(sW(t)) ? "block" : MR(n, t, "block", 0);
                if (oW(t)) return MR(n, t, "block")
            }
            if ("block-keyword" == kR) return kR = "keyword", t.current(/(if|unless)/) && !aW(t) ? "block" : MR(n, t, "block");
            if ("return" == r) return MR(n, t, "block", 0);
            if ("variable" == kR && t.string.match(/^\s?\$[\w-\.\[\]\'\"]+$/)) return MR(n, t, "block")
        }
        return n.context.type
    }, AR.parens = function(e, t, n) {
        if ("(" == e) return MR(n, t, "parens");
        if (")" == e) return "parens" == n.context.prev.type ? BR(n, t) : t.string.match(/^[a-z][\w-]*\(/i) && oW(t) || KR(sW(t)) || /(\.|#|:|\[|\*|&|>|~|\+|\/)/.test(sW(t)) || !t.string.match(/^-?[a-z][\w-\.\[\]\'\"]*\s*=/) && HR(sW(t)) ? MR(n, t, "block") : t.string.match(/^[\$-]?[a-z][\w-\.\[\]\'\"]*\s*=/) || t.string.match(/^\s*(\(|\)|[0-9])/) || t.string.match(/^\s+[a-z][\w-]*\(/i) || t.string.match(/^\s+[\$-]?[a-z]/i) ? MR(n, t, "block", 0) : oW(t) ? MR(n, t, "block") : MR(n, t, "block", 0);
        if (e && "@" == e.charAt(0) && JR(t.current().slice(1)) && (kR = "variable"), "word" == e) {
            var r = t.current();
            "tag" == (kR = tW(r)) && vR.test(r) && (kR = "variable"), "property" != kR && "to" != r || (kR = "atom")
        }
        return "variable-name" == e ? MR(n, t, "variableName") : iW(e, t) ? MR(n, t, "pseudo") : n.context.type
    }, AR.vendorPrefixes = function(e, t, n) {
        return "word" == e ? (kR = "property", MR(n, t, "block", 0)) : BR(n, t)
    }, AR.pseudo = function(e, t, n) {
        return JR(sW(t.string)) ? FR(e, t, n) : (t.match(/^[a-z-]+/), kR = "variableName.special", oW(t) ? MR(n, t, "block") : BR(n, t))
    }, AR.atBlock = function(e, t, n) {
        if ("(" == e) return MR(n, t, "atBlock_parens");
        if (nW(e, t)) return MR(n, t, "block");
        if (rW(e, t)) return MR(n, t, "interpolation");
        if ("word" == e) {
            var r = t.current().toLowerCase();
            if ("tag" == (kR = /^(only|not|and|or)$/.test(r) ? "keyword" : RR.hasOwnProperty(r) ? "tag" : YR.hasOwnProperty(r) ? "attribute" : qR.hasOwnProperty(r) ? "property" : _R.hasOwnProperty(r) ? "string.special" : tW(t.current())) && oW(t)) return MR(n, t, "block")
        }
        return "operator" == e && /^(not|and|or)$/.test(t.current()) && (kR = "keyword"), n.context.type
    }, AR.atBlock_parens = function(e, t, n) {
        if ("{" == e || "}" == e) return n.context.type;
        if (")" == e) return oW(t) ? MR(n, t, "block") : MR(n, t, "atBlock");
        if ("word" == e) {
            var r = t.current().toLowerCase();
            return kR = tW(r), /^(max|min)/.test(r) && (kR = "property"), "tag" == kR && (kR = vR.test(r) ? "variable" : "atom"), n.context.type
        }
        return AR.atBlock(e, t, n)
    }, AR.keyframes = function(e, t, n) {
        return "0" == t.indentation() && ("}" == e && aW(t) || "]" == e || "hash" == e || "qualifier" == e || HR(t.current())) ? FR(e, t, n) : "{" == e ? MR(n, t, "keyframes") : "}" == e ? aW(t) ? BR(n, t, !0) : MR(n, t, "keyframes") : "unit" == e && /^[0-9]+\%$/.test(t.current()) ? MR(n, t, "keyframes") : "word" == e && "block-keyword" == (kR = tW(t.current())) ? (kR = "keyword", MR(n, t, "keyframes")) : /@(font-face|media|supports|(-moz-)?document)/.test(e) ? MR(n, t, oW(t) ? "block" : "atBlock") : "mixin" == e ? MR(n, t, "block", 0) : n.context.type
    }, AR.interpolation = function(e, t, n) {
        return "{" == e && BR(n, t) && MR(n, t, "block"), "}" == e ? t.string.match(/^\s*(\.|#|:|\[|\*|&|>|~|\+|\/)/i) || t.string.match(/^\s*[a-z]/i) && HR(sW(t)) ? MR(n, t, "block") : !t.string.match(/^(\{|\s*\&)/) || t.match(/\s*[\w-]/, !1) ? MR(n, t, "block", 0) : MR(n, t, "block") : "variable-name" == e ? MR(n, t, "variableName", 0) : ("word" == e && "tag" == (kR = tW(t.current())) && (kR = "atom"), n.context.type)
    }, AR.extend = function(e, t, n) {
        return "[" == e || "=" == e ? "extend" : "]" == e ? BR(n, t) : "word" == e ? (kR = tW(t.current()), "extend") : BR(n, t)
    }, AR.variableName = function(e, t, n) {
        return "string" == e || "[" == e || "]" == e || t.current().match(/^(\.|\$)/) ? (t.current().match(/^\.[\w-]+/i) && (kR = "variable"), "variableName") : FR(e, t, n)
    };
    const OW = {
        startState: function() {
            return {
                tokenize: null,
                state: "block",
                context: new DR("block", 0, null)
            }
        },
        token: function(e, t) {
            return !t.tokenize && e.eatSpace() ? null : ((PR = (t.tokenize || CR)(e, t)) && "object" == typeof PR && (wR = PR[1], PR = PR[0]), kR = PR, t.state = AR[t.state](wR, e, t), kR)
        },
        indent: function(e, t, n) {
            var r = e.context,
                i = t && t.charAt(0),
                a = r.indent,
                o = sW(t),
                s = n.lineIndent(n.state.doc.lineAt(n.pos).number),
                O = e.context.prev ? e.context.prev.line.firstWord : "",
                l = e.context.prev ? e.context.prev.line.indent : s;
            return r.prev && ("}" == i && ("block" == r.type || "atBlock" == r.type || "keyframes" == r.type) || ")" == i && ("parens" == r.type || "atBlock_parens" == r.type) || "{" == i && "at" == r.type) ? a = r.indent - n.unit : /(\})/.test(i) || (/@|\$|\d/.test(i) || /^\{/.test(t) || /^\s*\/(\/|\*)/.test(t) || /^\s*\/\*/.test(O) || /^\s*[\w-\.\[\]\'\"]+\s*(\?|:|\+)?=/i.test(t) || /^(\+|-)?[a-z][\w-]*\(/i.test(t) || /^return/.test(t) || KR(o) ? a = s : /(\.|#|:|\[|\*|&|>|~|\+|\/)/.test(i) || HR(o) ? a = /\,\s*$/.test(O) ? l : e.sol() || !/(\.|#|:|\[|\*|&|>|~|\+|\/)/.test(O) && !HR(O) ? s : s <= l ? l : l + n.unit : /,\s*$/.test(t) || !eW(o) && !JR(o) || (a = KR(O) ? s <= l ? l : l + n.unit : /^\{/.test(O) ? s <= l ? s : l + n.unit : eW(O) || JR(O) ? s >= l ? l : s : /^(\.|#|:|\[|\*|&|@|\+|\-|>|~|\/)/.test(O) || /=\s*$/.test(O) || HR(O) || /^\$[\w-\.\[\]\'\"]/.test(O) ? l + n.unit : s)), a
        },
        languageData: {
            indentOnInput: /^\s*\}$/,
            commentTokens: {
                line: "//",
                block: {
                    open: "/*",
                    close: "*/"
                }
            },
            autocomplete: QR
        }
    };
    var lW = Object.freeze({
        __proto__: null,
        stylus: OW
    });

    function cW(e) {
        for (var t = {}, n = 0; n < e.length; n++) t[e[n]] = !0;
        return t
    }
    var uW = cW(["_", "var", "let", "class", "enum", "extension", "import", "protocol", "struct", "func", "typealias", "associatedtype", "open", "public", "internal", "fileprivate", "private", "deinit", "init", "new", "override", "self", "subscript", "super", "convenience", "dynamic", "final", "indirect", "lazy", "required", "static", "unowned", "unowned(safe)", "unowned(unsafe)", "weak", "as", "is", "break", "case", "continue", "default", "else", "fallthrough", "for", "guard", "if", "in", "repeat", "switch", "where", "while", "defer", "return", "inout", "mutating", "nonmutating", "catch", "do", "rethrows", "throw", "throws", "try", "didSet", "get", "set", "willSet", "assignment", "associativity", "infix", "left", "none", "operator", "postfix", "precedence", "precedencegroup", "prefix", "right", "Any", "AnyObject", "Type", "dynamicType", "Self", "Protocol", "__COLUMN__", "__FILE__", "__FUNCTION__", "__LINE__"]),
        dW = cW(["var", "let", "class", "enum", "extension", "import", "protocol", "struct", "func", "typealias", "associatedtype", "for"]),
        pW = cW(["true", "false", "nil", "self", "super", "_"]),
        hW = cW(["Array", "Bool", "Character", "Dictionary", "Double", "Float", "Int", "Int8", "Int16", "Int32", "Int64", "Never", "Optional", "Set", "String", "UInt8", "UInt16", "UInt32", "UInt64", "Void"]),
        fW = /^\-?0b[01][01_]*/,
        mW = /^\-?0o[0-7][0-7_]*/,
        gW = /^\-?0x[\dA-Fa-f][\dA-Fa-f_]*(?:(?:\.[\dA-Fa-f][\dA-Fa-f_]*)?[Pp]\-?\d[\d_]*)?/,
        QW = /^\-?\d[\d_]*(?:\.\d[\d_]*)?(?:[Ee]\-?\d[\d_]*)?/,
        $W = /^\$\d+|(`?)[_A-Za-z][_A-Za-z$0-9]*\1/,
        bW = /^\.(?:\$\d+|(`?)[_A-Za-z][_A-Za-z$0-9]*\1)/,
        xW = /^\#[A-Za-z]+/,
        PW = /^@(?:\$\d+|(`?)[_A-Za-z][_A-Za-z$0-9]*\1)/;

    function wW(e, t, n) {
        if (e.sol() && (t.indented = e.indentation()), e.eatSpace()) return null;
        var r, i = e.peek();
        if ("/" == i) {
            if (e.match("//")) return e.skipToEnd(), "comment";
            if (e.match("/*")) return t.tokenize.push(vW), vW(e, t)
        }
        if (e.match(xW)) return "builtin";
        if (e.match(PW)) return "attribute";
        if (e.match(fW)) return "number";
        if (e.match(mW)) return "number";
        if (e.match(gW)) return "number";
        if (e.match(QW)) return "number";
        if (e.match(bW)) return "property";
        if ("+-/*%=|&<>~^?!".indexOf(i) > -1) return e.next(), "operator";
        if (":;,.(){}[]".indexOf(i) > -1) return e.next(), e.match(".."), "punctuation";
        if (r = e.match(/("""|"|')/)) {
            var a = yW.bind(null, r[0]);
            return t.tokenize.push(a), a(e, t)
        }
        if (e.match($W)) {
            var o = e.current();
            return hW.hasOwnProperty(o) ? "type" : pW.hasOwnProperty(o) ? "atom" : uW.hasOwnProperty(o) ? (dW.hasOwnProperty(o) && (t.prev = "define"), "keyword") : "define" == n ? "def" : "variable"
        }
        return e.next(), null
    }

    function kW() {
        var e = 0;
        return function(t, n, r) {
            var i = wW(t, n, r);
            if ("punctuation" == i)
                if ("(" == t.current()) ++e;
                else if (")" == t.current()) {
                if (0 == e) return t.backUp(1), n.tokenize.pop(), n.tokenize[n.tokenize.length - 1](t, n);
                --e
            }
            return i
        }
    }

    function yW(e, t, n) {
        for (var r, i = 1 == e.length, a = !1; r = t.peek();)
            if (a) {
                if (t.next(), "(" == r) return n.tokenize.push(kW()), "string";
                a = !1
            } else {
                if (t.match(e)) return n.tokenize.pop(), "string";
                t.next(), a = "\\" == r
            }
        return i && n.tokenize.pop(), "string"
    }

    function vW(e, t) {
        for (var n; e.match(/^[^/*]+/, !0), n = e.next();) "/" === n && e.eat("*") ? t.tokenize.push(vW) : "*" === n && e.eat("/") && t.tokenize.pop();
        return "comment"
    }

    function SW(e, t, n) {
        this.prev = e, this.align = t, this.indented = n
    }

    function _W(e, t) {
        var n = t.match(/^\s*($|\/[\/\*])/, !1) ? null : t.column() + 1;
        e.context = new SW(e.context, n, e.indented)
    }

    function XW(e) {
        e.context && (e.indented = e.context.indented, e.context = e.context.prev)
    }
    const TW = {
        startState: function() {
            return {
                prev: null,
                context: null,
                indented: 0,
                tokenize: []
            }
        },
        token: function(e, t) {
            var n = t.prev;
            t.prev = null;
            var r = (t.tokenize[t.tokenize.length - 1] || wW)(e, t, n);
            if (r && "comment" != r ? t.prev || (t.prev = r) : t.prev = n, "punctuation" == r) {
                var i = /[\(\[\{]|([\]\)\}])/.exec(e.current());
                i && (i[1] ? XW : _W)(t, e)
            }
            return r
        },
        indent: function(e, t, n) {
            var r = e.context;
            if (!r) return 0;
            var i = /^[\]\}\)]/.test(t);
            return null != r.align ? r.align - (i ? 1 : 0) : r.indented + (i ? 0 : n.unit)
        },
        languageData: {
            indentOnInput: /^\s*[\)\}\]]$/,
            commentTokens: {
                line: "//",
                block: {
                    open: "/*",
                    close: "*/"
                }
            },
            closeBrackets: {
                brackets: ["(", "[", "{", "'", '"', "`"]
            }
        }
    };
    var RW = Object.freeze({
        __proto__: null,
        swift: TW
    });

    function WW(e) {
        function t(e, t) {
            e.cmdState.push(t)
        }

        function n(e) {
            return e.cmdState.length > 0 ? e.cmdState[e.cmdState.length - 1] : null
        }

        function r(e, t, n) {
            return function() {
                this.name = e, this.bracketNo = 0, this.style = t, this.styles = n, this.argument = null, this.styleIdentifier = function() {
                    return this.styles[this.bracketNo - 1] || null
                }, this.openBracket = function() {
                    return this.bracketNo++, "bracket"
                }, this.closeBracket = function() {}
            }
        }
        var i = {};

        function a(e, t) {
            e.f = t
        }

        function o(e, r) {
            var o;
            if (e.match(/^\\[a-zA-Z@]+/)) {
                var l = e.current().slice(1);
                return t(r, o = new(o = i.hasOwnProperty(l) ? i[l] : i.DEFAULT)), a(r, O), o.style
            }
            if (e.match(/^\\[$&%#{}_]/)) return "tag";
            if (e.match(/^\\[,;!\/\\]/)) return "tag";
            if (e.match("\\[")) return a(r, (function(e, t) {
                return s(e, t, "\\]")
            })), "keyword";
            if (e.match("\\(")) return a(r, (function(e, t) {
                return s(e, t, "\\)")
            })), "keyword";
            if (e.match("$$")) return a(r, (function(e, t) {
                return s(e, t, "$$")
            })), "keyword";
            if (e.match("$")) return a(r, (function(e, t) {
                return s(e, t, "$")
            })), "keyword";
            var c = e.next();
            return "%" == c ? (e.skipToEnd(), "comment") : "}" == c || "]" == c ? (o = n(r)) ? (o.closeBracket(c), a(r, O), "bracket") : "error" : "{" == c || "[" == c ? (t(r, o = new(o = i.DEFAULT)), "bracket") : /\d/.test(c) ? (e.eatWhile(/[\w.%]/), "atom") : (e.eatWhile(/[\w\-_]/), "begin" == (o = function(e) {
                for (var t = e.cmdState, n = t.length - 1; n >= 0; n--) {
                    var r = t[n];
                    if ("DEFAULT" != r.name) return r
                }
                return {
                    styleIdentifier: function() {
                        return null
                    }
                }
            }(r)).name && (o.argument = e.current()), o.styleIdentifier())
        }

        function s(e, t, n) {
            if (e.eatSpace()) return null;
            if (n && e.match(n)) return a(t, o), "keyword";
            if (e.match(/^\\[a-zA-Z@]+/)) return "tag";
            if (e.match(/^[a-zA-Z]+/)) return "variableName.special";
            if (e.match(/^\\[$&%#{}_]/)) return "tag";
            if (e.match(/^\\[,;!\/]/)) return "tag";
            if (e.match(/^[\^_&]/)) return "tag";
            if (e.match(/^[+\-<>|=,\/@!*:;'"`~#?]/)) return null;
            if (e.match(/^(\d+\.\d*|\d*\.\d+|\d+)/)) return "number";
            var r = e.next();
            return "{" == r || "}" == r || "[" == r || "]" == r || "(" == r || ")" == r ? "bracket" : "%" == r ? (e.skipToEnd(), "comment") : "error"
        }

        function O(e, t) {
            var r = e.peek();
            return "{" == r || "[" == r ? (n(t).openBracket(r), e.eat(r), a(t, o), "bracket") : /[ \t\r]/.test(r) ? (e.eat(r), null) : (a(t, o), function(e) {
                var t = e.cmdState.pop();
                t && t.closeBracket()
            }(t), o(e, t))
        }
        return i.importmodule = r("importmodule", "tag", ["string", "builtin"]), i.documentclass = r("documentclass", "tag", ["", "atom"]), i.usepackage = r("usepackage", "tag", ["atom"]), i.begin = r("begin", "tag", ["atom"]), i.end = r("end", "tag", ["atom"]), i.label = r("label", "tag", ["atom"]), i.ref = r("ref", "tag", ["atom"]), i.eqref = r("eqref", "tag", ["atom"]), i.cite = r("cite", "tag", ["atom"]), i.bibitem = r("bibitem", "tag", ["atom"]), i.Bibitem = r("Bibitem", "tag", ["atom"]), i.RBibitem = r("RBibitem", "tag", ["atom"]), i.DEFAULT = function() {
            this.name = "DEFAULT", this.style = "tag", this.styleIdentifier = this.openBracket = this.closeBracket = function() {}
        }, {
            startState: function() {
                return {
                    cmdState: [],
                    f: e ? function(e, t) {
                        return s(e, t)
                    } : o
                }
            },
            copyState: function(e) {
                return {
                    cmdState: e.cmdState.slice(),
                    f: e.f
                }
            },
            token: function(e, t) {
                return t.f(e, t)
            },
            blankLine: function(e) {
                e.f = o, e.cmdState.length = 0
            },
            languageData: {
                commentTokens: {
                    line: "%"
                }
            }
        }
    }
    const qW = WW(!1),
        YW = WW(!0);
    var zW = Object.freeze({
        __proto__: null,
        stex: qW,
        stexMath: YW
    });

    function ZW(e) {
        var t = e.statementIndentUnit,
            n = e.dontAlignCalls,
            r = e.noIndentKeywords || [],
            i = e.multiLineStrings,
            a = e.hooks || {};

        function o(e) {
            for (var t = {}, n = e.split(" "), r = 0; r < n.length; ++r) t[n[r]] = !0;
            return t
        }
        var s, O, l = o("accept_on alias always always_comb always_ff always_latch and assert assign assume automatic before begin bind bins binsof bit break buf bufif0 bufif1 byte case casex casez cell chandle checker class clocking cmos config const constraint context continue cover covergroup coverpoint cross deassign default defparam design disable dist do edge else end endcase endchecker endclass endclocking endconfig endfunction endgenerate endgroup endinterface endmodule endpackage endprimitive endprogram endproperty endspecify endsequence endtable endtask enum event eventually expect export extends extern final first_match for force foreach forever fork forkjoin function generate genvar global highz0 highz1 if iff ifnone ignore_bins illegal_bins implements implies import incdir include initial inout input inside instance int integer interconnect interface intersect join join_any join_none large let liblist library local localparam logic longint macromodule matches medium modport module nand negedge nettype new nexttime nmos nor noshowcancelled not notif0 notif1 null or output package packed parameter pmos posedge primitive priority program property protected pull0 pull1 pulldown pullup pulsestyle_ondetect pulsestyle_onevent pure rand randc randcase randsequence rcmos real realtime ref reg reject_on release repeat restrict return rnmos rpmos rtran rtranif0 rtranif1 s_always s_eventually s_nexttime s_until s_until_with scalared sequence shortint shortreal showcancelled signed small soft solve specify specparam static string strong strong0 strong1 struct super supply0 supply1 sync_accept_on sync_reject_on table tagged task this throughout time timeprecision timeunit tran tranif0 tranif1 tri tri0 tri1 triand trior trireg type typedef union unique unique0 unsigned until until_with untyped use uwire var vectored virtual void wait wait_order wand weak weak0 weak1 while wildcard wire with within wor xnor xor"),
            c = /[\+\-\*\/!~&|^%=?:]/,
            u = /[\[\]{}()]/,
            d = /\d[0-9_]*/,
            p = /\d*\s*'s?d\s*\d[0-9_]*/i,
            h = /\d*\s*'s?b\s*[xz01][xz01_]*/i,
            f = /\d*\s*'s?o\s*[xz0-7][xz0-7_]*/i,
            m = /\d*\s*'s?h\s*[0-9a-fxz?][0-9a-fxz?_]*/i,
            g = /(\d[\d_]*(\.\d[\d_]*)?E-?[\d_]+)|(\d[\d_]*\.\d[\d_]*)/i,
            Q = /^((\w+)|[)}\]])/,
            $ = /[)}\]]/,
            b = o("case checker class clocking config function generate interface module package primitive program property specify sequence table task"),
            x = {};
        for (var P in b) x[P] = "end" + P;
        for (var w in x.begin = "end", x.casex = "endcase", x.casez = "endcase", x.do = "while", x.fork = "join;join_any;join_none", x.covergroup = "endgroup", r) {
            P = r[w];
            x[P] && (x[P] = void 0)
        }
        var k = o("always always_comb always_ff always_latch assert assign assume else export for foreach forever if import initial repeat while");

        function y(e, t) {
            var n, r = e.peek();
            if (a[r] && 0 != (n = a[r](e, t))) return n;
            if (a.tokenBase && 0 != (n = a.tokenBase(e, t))) return n;
            if (/[,;:\.]/.test(r)) return s = e.next(), null;
            if (u.test(r)) return s = e.next(), "bracket";
            if ("`" == r) return e.next(), e.eatWhile(/[\w\$_]/) ? "def" : null;
            if ("$" == r) return e.next(), e.eatWhile(/[\w\$_]/) ? "meta" : null;
            if ("#" == r) return e.next(), e.eatWhile(/[\d_.]/), "def";
            if ('"' == r) return e.next(), t.tokenize = function(e) {
                return function(t, n) {
                    for (var r, a = !1, o = !1; null != (r = t.next());) {
                        if (r == e && !a) {
                            o = !0;
                            break
                        }
                        a = !a && "\\" == r
                    }
                    return (o || !a && !i) && (n.tokenize = y), "string"
                }
            }(r), t.tokenize(e, t);
            if ("/" == r) {
                if (e.next(), e.eat("*")) return t.tokenize = v, v(e, t);
                if (e.eat("/")) return e.skipToEnd(), "comment";
                e.backUp(1)
            }
            if (e.match(g) || e.match(p) || e.match(h) || e.match(f) || e.match(m) || e.match(d) || e.match(g)) return "number";
            if (e.eatWhile(c)) return "meta";
            if (e.eatWhile(/[\w\$_]/)) {
                var o = e.current();
                return l[o] ? (x[o] && (s = "newblock"), k[o] && (s = "newstatement"), O = o, "keyword") : "variable"
            }
            return e.next(), null
        }

        function v(e, t) {
            for (var n, r = !1; n = e.next();) {
                if ("/" == n && r) {
                    t.tokenize = y;
                    break
                }
                r = "*" == n
            }
            return "comment"
        }

        function S(e, t, n, r, i) {
            this.indented = e, this.column = t, this.type = n, this.align = r, this.prev = i
        }

        function _(e, t, n) {
            var r = new S(e.indented, t, n, null, e.context);
            return e.context = r
        }

        function X(e) {
            var t = e.context.type;
            return ")" != t && "]" != t && "}" != t || (e.indented = e.context.indented), e.context = e.context.prev
        }

        function T(e, t) {
            if (e == t) return !0;
            var n = t.split(";");
            for (var r in n)
                if (e == n[r]) return !0;
            return !1
        }
        return {
            startState: function(e) {
                var t = {
                    tokenize: null,
                    context: new S(-e, 0, "top", !1),
                    indented: 0,
                    startOfLine: !0
                };
                return a.startState && a.startState(t), t
            },
            token: function(e, t) {
                var n, r = t.context;
                if ((e.sol() && (null == r.align && (r.align = !1), t.indented = e.indentation(), t.startOfLine = !0), a.token) && void 0 !== (n = a.token(e, t))) return n;
                if (e.eatSpace()) return null;
                if (s = null, O = null, "comment" == (n = (t.tokenize || y)(e, t)) || "meta" == n || "variable" == n) return n;
                if (null == r.align && (r.align = !0), s == r.type) X(t);
                else if (";" == s && "statement" == r.type || r.type && T(O, r.type))
                    for (r = X(t); r && "statement" == r.type;) r = X(t);
                else if ("{" == s) _(t, e.column(), "}");
                else if ("[" == s) _(t, e.column(), "]");
                else if ("(" == s) _(t, e.column(), ")");
                else if (r && "endcase" == r.type && ":" == s) _(t, e.column(), "statement");
                else if ("newstatement" == s) _(t, e.column(), "statement");
                else if ("newblock" == s)
                    if ("function" != O || !r || "statement" != r.type && "endgroup" != r.type)
                        if ("task" == O && r && "statement" == r.type);
                        else {
                            var i = x[O];
                            _(t, e.column(), i)
                        }
                else;
                return t.startOfLine = !1, n
            },
            indent: function(e, r, i) {
                if (e.tokenize != y && null != e.tokenize) return null;
                if (a.indent) {
                    var o = a.indent(e);
                    if (o >= 0) return o
                }
                var s = e.context,
                    O = r && r.charAt(0);
                "statement" == s.type && "}" == O && (s = s.prev);
                var l = !1,
                    c = r.match(Q);
                return c && (l = T(c[0], s.type)), "statement" == s.type ? s.indented + ("{" == O ? 0 : t || i.unit) : $.test(s.type) && s.align && !n ? s.column + (l ? 0 : 1) : ")" != s.type || l ? s.indented + (l ? 0 : i.unit) : s.indented + (t || i.unit)
            },
            languageData: {
                indentOnInput: function() {
                    var e = [];
                    for (var t in x)
                        if (x[t]) {
                            var n = x[t].split(";");
                            for (var r in n) e.push(n[r])
                        }
                    return new RegExp("[{}()\\[\\]]|(" + e.join("|") + ")$")
                }(),
                commentTokens: {
                    line: "//",
                    block: {
                        open: "/*",
                        close: "*/"
                    }
                }
            }
        }
    }
    const EW = ZW({});
    var IW = {
            "|": "link",
            ">": "property",
            $: "variable",
            $$: "variable",
            "?$": "qualifier",
            "?*": "qualifier",
            "-": "contentSeparator",
            "/": "property",
            "/-": "property",
            "@": "variableName.special",
            "@-": "variableName.special",
            "@++": "variableName.special",
            "@+=": "variableName.special",
            "@+=-": "variableName.special",
            "@--": "variableName.special",
            "@-=": "variableName.special",
            "%+": "tag",
            "%-": "tag",
            "%": "tag",
            ">>": "tag",
            "<<": "tag",
            "<>": "tag",
            "#": "tag",
            "^": "attribute",
            "^^": "attribute",
            "^!": "attribute",
            "*": "variable",
            "**": "variable",
            "\\": "keyword",
            '"': "comment"
        },
        UW = {
            "/": "beh-hier",
            ">": "beh-hier",
            "-": "phys-hier",
            "|": "pipe",
            "?": "when",
            "@": "stage",
            "\\": "keyword"
        },
        VW = /^([~!@#\$%\^&\*-\+=\?\/\\\|'"<>]+)([\d\w_]*)/,
        jW = /^[! ] */,
        AW = /^\/[\/\*]/;
    const CW = ZW({
        hooks: {
            electricInput: !1,
            token: function(e, t) {
                var n, r = void 0;
                if (e.sol() && !t.tlvInBlockComment) {
                    "\\" == e.peek() && (r = "def", e.skipToEnd(), e.string.match(/\\SV/) ? t.tlvCodeActive = !1 : e.string.match(/\\TLV/) && (t.tlvCodeActive = !0)), t.tlvCodeActive && 0 == e.pos && 0 == t.indented && (n = e.match(jW, !1)) && (t.indented = n[0].length);
                    var i = t.indented,
                        a = i / 3;
                    if (a <= t.tlvIndentationStyle.length) {
                        var o = e.string.length == i,
                            s = 3 * a;
                        if (s < e.string.length) {
                            var O = e.string.slice(s),
                                l = O[0];
                            UW[l] && (n = O.match(VW)) && IW[n[1]] && (i += 3, "\\" == l && s > 0 || (t.tlvIndentationStyle[a] = UW[l], a++))
                        }
                        if (!o)
                            for (; t.tlvIndentationStyle.length > a;) t.tlvIndentationStyle.pop()
                    }
                    t.tlvNextIndent = i
                }
                if (t.tlvCodeActive)
                    if (void 0 !== r);
                    else if (t.tlvInBlockComment) e.match(/^.*?\*\//) ? t.tlvInBlockComment = !1 : e.skipToEnd(), r = "comment";
                else if ((n = e.match(AW)) && !t.tlvInBlockComment) "//" == n[0] ? e.skipToEnd() : t.tlvInBlockComment = !0, r = "comment";
                else if (n = e.match(VW)) {
                    var c = n[1],
                        u = n[2];
                    IW.hasOwnProperty(c) && (u.length > 0 || e.eol()) ? r = IW[c] : e.backUp(e.current().length - 1)
                } else e.match(/^\t+/) ? r = "invalid" : e.match(/^[\[\]{}\(\);\:]+/) ? r = "meta" : (n = e.match(/^[mM]4([\+_])?[\w\d_]*/)) ? r = "+" == n[1] ? "keyword.special" : "keyword" : e.match(/^ +/) ? e.eol() && (r = "error") : e.match(/^[\w\d_]+/) ? r = "number" : e.next();
                else e.match(/^[mM]4([\w\d_]*)/) && (r = "keyword");
                return r
            },
            indent: function(e) {
                return 1 == e.tlvCodeActive ? e.tlvNextIndent : -1
            },
            startState: function(e) {
                e.tlvIndentationStyle = [], e.tlvCodeActive = !0, e.tlvNextIndent = -1, e.tlvInBlockComment = !1
            }
        }
    });
    var GW = Object.freeze({
        __proto__: null,
        verilog: EW,
        tlv: CW
    });

    function LW(e) {
        for (var t = {}, n = e.split(" "), r = 0; r < n.length; ++r) t[n[r]] = !0;
        return t
    }
    var NW = LW("Tcl safe after append array auto_execok auto_import auto_load auto_mkindex auto_mkindex_old auto_qualify auto_reset bgerror binary break catch cd close concat continue dde eof encoding error eval exec exit expr fblocked fconfigure fcopy file fileevent filename filename flush for foreach format gets glob global history http if incr info interp join lappend lindex linsert list llength load lrange lreplace lsearch lset lsort memory msgcat namespace open package parray pid pkg::create pkg_mkIndex proc puts pwd re_syntax read regex regexp registry regsub rename resource return scan seek set socket source split string subst switch tcl_endOfWord tcl_findLibrary tcl_startOfNextWord tcl_wordBreakAfter tcl_startOfPreviousWord tcl_wordBreakBefore tcltest tclvars tell time trace unknown unset update uplevel upvar variable vwait"),
        DW = LW("if elseif else and not or eq ne in ni for foreach while switch"),
        MW = /[+\-*&%=<>!?^\/\|]/;

    function BW(e, t, n) {
        return t.tokenize = n, n(e, t)
    }

    function FW(e, t) {
        var n = t.beforeParams;
        t.beforeParams = !1;
        var r = e.next();
        if ('"' != r && "'" != r || !t.inParams) {
            if (/[\[\]{}\(\),;\.]/.test(r)) return "(" == r && n ? t.inParams = !0 : ")" == r && (t.inParams = !1), null;
            if (/\d/.test(r)) return e.eatWhile(/[\w\.]/), "number";
            if ("#" == r) return e.eat("*") ? BW(e, t, HW) : "#" == r && e.match(/ *\[ *\[/) ? BW(e, t, JW) : (e.skipToEnd(), "comment");
            if ('"' == r) return e.skipTo(/"/), "comment";
            if ("$" == r) return e.eatWhile(/[$_a-z0-9A-Z\.{:]/), e.eatWhile(/}/), t.beforeParams = !0, "builtin";
            if (MW.test(r)) return e.eatWhile(MW), "comment";
            e.eatWhile(/[\w\$_{}\xa1-\uffff]/);
            var i = e.current().toLowerCase();
            return NW && NW.propertyIsEnumerable(i) ? "keyword" : DW && DW.propertyIsEnumerable(i) ? (t.beforeParams = !0, "keyword") : null
        }
        return BW(e, t, function(e) {
            return function(t, n) {
                for (var r, i = !1, a = !1; null != (r = t.next());) {
                    if (r == e && !i) {
                        a = !0;
                        break
                    }
                    i = !i && "\\" == r
                }
                return a && (n.tokenize = FW), "string"
            }
        }(r))
    }

    function HW(e, t) {
        for (var n, r = !1; n = e.next();) {
            if ("#" == n && r) {
                t.tokenize = FW;
                break
            }
            r = "*" == n
        }
        return "comment"
    }

    function JW(e, t) {
        for (var n, r = 0; n = e.next();) {
            if ("#" == n && 2 == r) {
                t.tokenize = FW;
                break
            }
            "]" == n ? r++ : " " != n && (r = 0)
        }
        return "meta"
    }
    const KW = {
        startState: function() {
            return {
                tokenize: FW,
                beforeParams: !1,
                inParams: !1
            }
        },
        token: function(e, t) {
            return e.eatSpace() ? null : t.tokenize(e, t)
        },
        languageData: {
            commentTokens: {
                line: "#"
            }
        }
    };
    var eq = Object.freeze({
            __proto__: null,
            tcl: KW
        }),
        tq = {
            addition: "inserted",
            attributes: "propertyName",
            bold: "strong",
            cite: "keyword",
            code: "monospace",
            definitionList: "list",
            deletion: "deleted",
            div: "punctuation",
            em: "emphasis",
            footnote: "variable",
            footCite: "qualifier",
            header: "heading",
            html: "comment",
            image: "atom",
            italic: "emphasis",
            link: "link",
            linkDefinition: "link",
            list1: "list",
            list2: "list.special",
            list3: "list",
            notextile: "string.special",
            pre: "operator",
            p: "content",
            quote: "bracket",
            span: "quote",
            specialChar: "character",
            strong: "strong",
            sub: "content.special",
            sup: "content.special",
            table: "variableName.special",
            tableHeading: "operator"
        };

    function nq(e, t, n) {
        if ("_" === n) return e.eat("_") ? rq(e, t, "italic", /__/, 2) : rq(e, t, "em", /_/, 1);
        if ("*" === n) return e.eat("*") ? rq(e, t, "bold", /\*\*/, 2) : rq(e, t, "strong", /\*/, 1);
        if ("[" === n) return e.match(/\d+\]/) && (t.footCite = !0), iq(t);
        if ("(" === n && e.match(/^(r|tm|c)\)/)) return tq.specialChar;
        if ("<" === n && e.match(/(\w+)[^>]+>[^<]+<\/\1>/)) return tq.html;
        if ("?" === n && e.eat("?")) return rq(e, t, "cite", /\?\?/, 2);
        if ("=" === n && e.eat("=")) return rq(e, t, "notextile", /==/, 2);
        if ("-" === n && !e.eat("-")) return rq(e, t, "deletion", /-/, 1);
        if ("+" === n) return rq(e, t, "addition", /\+/, 1);
        if ("~" === n) return rq(e, t, "sub", /~/, 1);
        if ("^" === n) return rq(e, t, "sup", /\^/, 1);
        if ("%" === n) return rq(e, t, "span", /%/, 1);
        if ("@" === n) return rq(e, t, "code", /@/, 1);
        if ("!" === n) {
            var r = rq(e, t, "image", /(?:\([^\)]+\))?!/, 1);
            return e.match(/^:\S+/), r
        }
        return iq(t)
    }

    function rq(e, t, n, r, i) {
        var a = e.pos > i ? e.string.charAt(e.pos - i - 1) : null,
            o = e.peek();
        if (t[n]) {
            if ((!o || /\W/.test(o)) && a && /\S/.test(a)) {
                var s = iq(t);
                return t[n] = !1, s
            }
        } else(!a || /\W/.test(a)) && o && /\S/.test(o) && e.match(new RegExp("^.*\\S" + r.source + "(?:\\W|$)"), !1) && (t[n] = !0, t.mode = Oq.attributes);
        return iq(t)
    }

    function iq(e) {
        var t = aq(e);
        if (t) return t;
        var n = [];
        return e.layoutType && n.push(tq[e.layoutType]), n = n.concat(function(e) {
            for (var t = [], n = 1; n < arguments.length; ++n) e[arguments[n]] && t.push(tq[arguments[n]]);
            return t
        }(e, "addition", "bold", "cite", "code", "deletion", "em", "footCite", "image", "italic", "link", "span", "strong", "sub", "sup", "table", "tableHeading")), "header" === e.layoutType && n.push(tq.header + "-" + e.header), n.length ? n.join(" ") : null
    }

    function aq(e) {
        var t = e.layoutType;
        switch (t) {
            case "notextile":
            case "code":
            case "pre":
                return tq[t];
            default:
                return e.notextile ? tq.notextile + (t ? " " + tq[t] : "") : null
        }
    }
    var oq = {
        cache: {},
        single: {
            bc: "bc",
            bq: "bq",
            definitionList: /- .*?:=+/,
            definitionListEnd: /.*=:\s*$/,
            div: "div",
            drawTable: /\|.*\|/,
            foot: /fn\d+/,
            header: /h[1-6]/,
            html: /\s*<(?:\/)?(\w+)(?:[^>]+)?>(?:[^<]+<\/\1>)?/,
            link: /[^"]+":\S/,
            linkDefinition: /\[[^\s\]]+\]\S+/,
            list: /(?:#+|\*+)/,
            notextile: "notextile",
            para: "p",
            pre: "pre",
            table: "table",
            tableCellAttributes: /[\/\\]\d+/,
            tableHeading: /\|_\./,
            tableText: /[^"_\*\[\(\?\+~\^%@|-]+/,
            text: /[^!"_=\*\[\(<\?\+~\^%@-]+/
        },
        attributes: {
            align: /(?:<>|<|>|=)/,
            selector: /\([^\(][^\)]+\)/,
            lang: /\[[^\[\]]+\]/,
            pad: /(?:\(+|\)+){1,2}/,
            css: /\{[^\}]+\}/
        },
        createRe: function(e) {
            switch (e) {
                case "drawTable":
                    return oq.makeRe("^", oq.single.drawTable, "$");
                case "html":
                    return oq.makeRe("^", oq.single.html, "(?:", oq.single.html, ")*", "$");
                case "linkDefinition":
                    return oq.makeRe("^", oq.single.linkDefinition, "$");
                case "listLayout":
                    return oq.makeRe("^", oq.single.list, sq("allAttributes"), "*\\s+");
                case "tableCellAttributes":
                    return oq.makeRe("^", oq.choiceRe(oq.single.tableCellAttributes, sq("allAttributes")), "+\\.");
                case "type":
                    return oq.makeRe("^", sq("allTypes"));
                case "typeLayout":
                    return oq.makeRe("^", sq("allTypes"), sq("allAttributes"), "*\\.\\.?", "(\\s+|$)");
                case "attributes":
                    return oq.makeRe("^", sq("allAttributes"), "+");
                case "allTypes":
                    return oq.choiceRe(oq.single.div, oq.single.foot, oq.single.header, oq.single.bc, oq.single.bq, oq.single.notextile, oq.single.pre, oq.single.table, oq.single.para);
                case "allAttributes":
                    return oq.choiceRe(oq.attributes.selector, oq.attributes.css, oq.attributes.lang, oq.attributes.align, oq.attributes.pad);
                default:
                    return oq.makeRe("^", oq.single[e])
            }
        },
        makeRe: function() {
            for (var e = "", t = 0; t < arguments.length; ++t) {
                var n = arguments[t];
                e += "string" == typeof n ? n : n.source
            }
            return new RegExp(e)
        },
        choiceRe: function() {
            for (var e = [arguments[0]], t = 1; t < arguments.length; ++t) e[2 * t - 1] = "|", e[2 * t] = arguments[t];
            return e.unshift("(?:"), e.push(")"), oq.makeRe.apply(null, e)
        }
    };

    function sq(e) {
        return oq.cache[e] || (oq.cache[e] = oq.createRe(e))
    }
    var Oq = {
        newLayout: function(e, t) {
            return e.match(sq("typeLayout"), !1) ? (t.spanningLayout = !1, (t.mode = Oq.blockType)(e, t)) : (aq(t) || (e.match(sq("listLayout"), !1) ? n = Oq.list : e.match(sq("drawTable"), !1) ? n = Oq.table : e.match(sq("linkDefinition"), !1) ? n = Oq.linkDefinition : e.match(sq("definitionList")) ? n = Oq.definitionList : e.match(sq("html"), !1) && (n = Oq.html)), (t.mode = n || Oq.text)(e, t));
            var n
        },
        blockType: function(e, t) {
            var n, r;
            return t.layoutType = null, (n = e.match(sq("type"))) ? ((n = (r = n[0]).match(sq("header"))) ? (t.layoutType = "header", t.header = parseInt(n[0][1])) : r.match(sq("bq")) ? t.layoutType = "quote" : r.match(sq("bc")) ? t.layoutType = "code" : r.match(sq("foot")) ? t.layoutType = "footnote" : r.match(sq("notextile")) ? t.layoutType = "notextile" : r.match(sq("pre")) ? t.layoutType = "pre" : r.match(sq("div")) ? t.layoutType = "div" : r.match(sq("table")) && (t.layoutType = "table"), t.mode = Oq.attributes, iq(t)) : (t.mode = Oq.text)(e, t)
        },
        text: function(e, t) {
            if (e.match(sq("text"))) return iq(t);
            var n = e.next();
            return '"' === n ? (t.mode = Oq.link)(e, t) : nq(e, t, n)
        },
        attributes: function(e, t) {
            return t.mode = Oq.layoutLength, e.match(sq("attributes")) ? tq.attributes : iq(t)
        },
        layoutLength: function(e, t) {
            return e.eat(".") && e.eat(".") && (t.spanningLayout = !0), t.mode = Oq.text, iq(t)
        },
        list: function(e, t) {
            var n = e.match(sq("list"));
            t.listDepth = n[0].length;
            var r = (t.listDepth - 1) % 3;
            return t.layoutType = r ? 1 === r ? "list2" : "list3" : "list1", t.mode = Oq.attributes, iq(t)
        },
        link: function(e, t) {
            return t.mode = Oq.text, e.match(sq("link")) ? (e.match(/\S+/), tq.link) : iq(t)
        },
        linkDefinition: function(e) {
            return e.skipToEnd(), tq.linkDefinition
        },
        definitionList: function(e, t) {
            return e.match(sq("definitionList")), t.layoutType = "definitionList", e.match(/\s*$/) ? t.spanningLayout = !0 : t.mode = Oq.attributes, iq(t)
        },
        html: function(e) {
            return e.skipToEnd(), tq.html
        },
        table: function(e, t) {
            return t.layoutType = "table", (t.mode = Oq.tableCell)(e, t)
        },
        tableCell: function(e, t) {
            return e.match(sq("tableHeading")) ? t.tableHeading = !0 : e.eat("|"), t.mode = Oq.tableCellAttributes, iq(t)
        },
        tableCellAttributes: function(e, t) {
            return t.mode = Oq.tableText, e.match(sq("tableCellAttributes")) ? tq.attributes : iq(t)
        },
        tableText: function(e, t) {
            return e.match(sq("tableText")) ? iq(t) : "|" === e.peek() ? (t.mode = Oq.tableCell, iq(t)) : nq(e, t, e.next())
        }
    };
    const lq = {
        startState: function() {
            return {
                mode: Oq.newLayout
            }
        },
        token: function(e, t) {
            return e.sol() && function(e, t) {
                t.mode = Oq.newLayout, t.tableHeading = !1, "definitionList" === t.layoutType && t.spanningLayout && e.match(sq("definitionListEnd"), !1) && (t.spanningLayout = !1)
            }(e, t), t.mode(e, t)
        },
        blankLine: function(e) {
            var t = e.spanningLayout,
                n = e.layoutType;
            for (var r in e) e.hasOwnProperty(r) && delete e[r];
            e.mode = Oq.newLayout, t && (e.layoutType = n, e.spanningLayout = !0)
        }
    };
    var cq = Object.freeze({
            __proto__: null,
            textile: lq
        }),
        uq = {},
        dq = {
            allTags: !0,
            closeAll: !0,
            list: !0,
            newJournal: !0,
            newTiddler: !0,
            permaview: !0,
            saveChanges: !0,
            search: !0,
            slider: !0,
            tabs: !0,
            tag: !0,
            tagging: !0,
            tags: !0,
            tiddler: !0,
            timeline: !0,
            today: !0,
            version: !0,
            option: !0,
            with: !0,
            filter: !0
        },
        pq = /[\w_\-]/i,
        hq = /^\-\-\-\-+$/,
        fq = /^\/\*\*\*$/,
        mq = /^\*\*\*\/$/,
        gq = /^<<<$/,
        Qq = /^\/\/\{\{\{$/,
        $q = /^\/\/\}\}\}$/,
        bq = /^<!--\{\{\{-->$/,
        xq = /^<!--\}\}\}-->$/,
        Pq = /^\{\{\{$/,
        wq = /^\}\}\}$/,
        kq = /.*?\}\}\}/;

    function yq(e, t, n) {
        return t.tokenize = n, n(e, t)
    }

    function vq(e, t) {
        var n = e.sol(),
            r = e.peek();
        if (t.block = !1, n && /[<\/\*{}\-]/.test(r)) {
            if (e.match(Pq)) return t.block = !0, yq(e, t, Xq);
            if (e.match(gq)) return "quote";
            if (e.match(fq) || e.match(mq)) return "comment";
            if (e.match(Qq) || e.match($q) || e.match(bq) || e.match(xq)) return "comment";
            if (e.match(hq)) return "contentSeparator"
        }
        if (e.next(), n && /[\/\*!#;:>|]/.test(r)) {
            if ("!" == r) return e.skipToEnd(), "header";
            if ("*" == r) return e.eatWhile("*"), "comment";
            if ("#" == r) return e.eatWhile("#"), "comment";
            if (";" == r) return e.eatWhile(";"), "comment";
            if (":" == r) return e.eatWhile(":"), "comment";
            if (">" == r) return e.eatWhile(">"), "quote";
            if ("|" == r) return "header"
        }
        if ("{" == r && e.match("{{")) return yq(e, t, Xq);
        if (/[hf]/i.test(r) && /[ti]/i.test(e.peek()) && e.match(/\b(ttps?|tp|ile):\/\/[\-A-Z0-9+&@#\/%?=~_|$!:,.;]*[A-Z0-9+&@#\/%=~_|$]/i)) return "link";
        if ('"' == r) return "string";
        if ("~" == r) return "brace";
        if (/[\[\]]/.test(r) && e.match(r)) return "brace";
        if ("@" == r) return e.eatWhile(pq), "link";
        if (/\d/.test(r)) return e.eatWhile(/\d/), "number";
        if ("/" == r) {
            if (e.eat("%")) return yq(e, t, Sq);
            if (e.eat("/")) return yq(e, t, Tq)
        }
        if ("_" == r && e.eat("_")) return yq(e, t, Rq);
        if ("-" == r && e.eat("-")) {
            if (" " != e.peek()) return yq(e, t, Wq);
            if (" " == e.peek()) return "brace"
        }
        return "'" == r && e.eat("'") ? yq(e, t, _q) : "<" == r && e.eat("<") ? yq(e, t, qq) : (e.eatWhile(/[\w\$_]/), uq.propertyIsEnumerable(e.current()) ? "keyword" : null)
    }

    function Sq(e, t) {
        for (var n, r = !1; n = e.next();) {
            if ("/" == n && r) {
                t.tokenize = vq;
                break
            }
            r = "%" == n
        }
        return "comment"
    }

    function _q(e, t) {
        for (var n, r = !1; n = e.next();) {
            if ("'" == n && r) {
                t.tokenize = vq;
                break
            }
            r = "'" == n
        }
        return "strong"
    }

    function Xq(e, t) {
        var n = t.block;
        return n && e.current() ? "comment" : !n && e.match(kq) || n && e.sol() && e.match(wq) ? (t.tokenize = vq, "comment") : (e.next(), "comment")
    }

    function Tq(e, t) {
        for (var n, r = !1; n = e.next();) {
            if ("/" == n && r) {
                t.tokenize = vq;
                break
            }
            r = "/" == n
        }
        return "emphasis"
    }

    function Rq(e, t) {
        for (var n, r = !1; n = e.next();) {
            if ("_" == n && r) {
                t.tokenize = vq;
                break
            }
            r = "_" == n
        }
        return "link"
    }

    function Wq(e, t) {
        for (var n, r = !1; n = e.next();) {
            if ("-" == n && r) {
                t.tokenize = vq;
                break
            }
            r = "-" == n
        }
        return "deleted"
    }

    function qq(e, t) {
        if ("<<" == e.current()) return "meta";
        var n = e.next();
        return n ? ">" == n && ">" == e.peek() ? (e.next(), t.tokenize = vq, "meta") : (e.eatWhile(/[\w\$_]/), dq.propertyIsEnumerable(e.current()) ? "keyword" : null) : (t.tokenize = vq, null)
    }
    const Yq = {
        startState: function() {
            return {
                tokenize: vq
            }
        },
        token: function(e, t) {
            return e.eatSpace() ? null : t.tokenize(e, t)
        }
    };
    var zq, Zq, Eq, Iq, Uq = Object.freeze({
        __proto__: null,
        tiddlyWiki: Yq
    });

    function Vq(e, t, n) {
        return function(r, i) {
            for (; !r.eol();) {
                if (r.match(t)) {
                    i.tokenize = Aq;
                    break
                }
                r.next()
            }
            return n && (i.tokenize = n), e
        }
    }

    function jq(e) {
        return function(t, n) {
            for (; !t.eol();) t.next();
            return n.tokenize = Aq, e
        }
    }

    function Aq(e, t) {
        function n(n) {
            return t.tokenize = n, n(e, t)
        }
        var r = e.sol(),
            i = e.next();
        switch (i) {
            case "{":
                return e.eat("/"), e.eatSpace(), e.eatWhile(/[^\s\u00a0=\"\'\/?(}]/), t.tokenize = Cq, "tag";
            case "_":
                if (e.eat("_")) return n(Vq("strong", "__", Aq));
                break;
            case "'":
                if (e.eat("'")) return n(Vq("em", "''", Aq));
                break;
            case "(":
                if (e.eat("(")) return n(Vq("link", "))", Aq));
                break;
            case "[":
                return n(Vq("url", "]", Aq));
            case "|":
                if (e.eat("|")) return n(Vq("comment", "||"));
                break;
            case "-":
                if (e.eat("=")) return n(Vq("header string", "=-", Aq));
                if (e.eat("-")) return n(Vq("error tw-deleted", "--", Aq));
                break;
            case "=":
                if (e.match("==")) return n(Vq("tw-underline", "===", Aq));
                break;
            case ":":
                if (e.eat(":")) return n(Vq("comment", "::"));
                break;
            case "^":
                return n(Vq("tw-box", "^"));
            case "~":
                if (e.match("np~")) return n(Vq("meta", "~/np~"))
        }
        if (r) switch (i) {
            case "!":
                return e.match("!!!!!") || e.match("!!!!") || e.match("!!!") || e.match("!!"), n(jq("header string"));
            case "*":
            case "#":
            case "+":
                return n(jq("tw-listitem bracket"))
        }
        return null
    }

    function Cq(e, t) {
        var n = e.next(),
            r = e.peek();
        return "}" == n ? (t.tokenize = Aq, "tag") : "(" == n || ")" == n ? "bracket" : "=" == n ? (Zq = "equals", ">" == r && (e.next(), r = e.peek()), /[\'\"]/.test(r) || (t.tokenize = function(e, t) {
            for (; !e.eol();) {
                var n = e.next(),
                    r = e.peek();
                if (" " == n || "," == n || /[ )}]/.test(r)) {
                    t.tokenize = Cq;
                    break
                }
            }
            return "string"
        }), "operator") : /[\'\"]/.test(n) ? (t.tokenize = function(e) {
            return function(t, n) {
                for (; !t.eol();)
                    if (t.next() == e) {
                        n.tokenize = Cq;
                        break
                    }
                return "string"
            }
        }(n), t.tokenize(e, t)) : (e.eatWhile(/[^\s\u00a0=\"\'\/?]/), "keyword")
    }

    function Gq() {
        for (var e = arguments.length - 1; e >= 0; e--) Eq.cc.push(arguments[e])
    }

    function Lq() {
        return Gq.apply(null, arguments), !0
    }

    function Nq(e, t) {
        var n = Eq.context && Eq.context.noIndent;
        Eq.context = {
            prev: Eq.context,
            pluginName: e,
            indent: Eq.indented,
            startOfLine: t,
            noIndent: n
        }
    }

    function Dq() {
        Eq.context && (Eq.context = Eq.context.prev)
    }

    function Mq(e) {
        if ("openPlugin" == e) return Eq.pluginName = zq, Lq(Bq, function(e) {
            return function(t) {
                return "selfclosePlugin" == t || "endPlugin" == t ? Lq() : "endPlugin" == t ? (Nq(Eq.pluginName, e), Lq()) : Lq()
            }
        }(Eq.startOfLine));
        if ("closePlugin" == e) {
            var t = !1;
            return Eq.context ? (t = Eq.context.pluginName != zq, Dq()) : t = !0, t && (Iq = "error"), Lq(function(e) {
                return function(t) {
                    return e && (Iq = "error"), "endPlugin" == t ? Lq() : Gq()
                }
            }(t))
        }
        return "string" == e ? (Eq.context && "!cdata" == Eq.context.name || Nq("!cdata"), Eq.tokenize == Aq && Dq(), Lq()) : Lq()
    }

    function Bq(e) {
        return "keyword" == e ? (Iq = "attribute", Lq(Bq)) : "equals" == e ? Lq(Fq, Bq) : Gq()
    }

    function Fq(e) {
        return "keyword" == e ? (Iq = "string", Lq()) : "string" == e ? Lq(Hq) : Gq()
    }

    function Hq(e) {
        return "string" == e ? Lq(Hq) : Gq()
    }
    const Jq = {
        startState: function() {
            return {
                tokenize: Aq,
                cc: [],
                indented: 0,
                startOfLine: !0,
                pluginName: null,
                context: null
            }
        },
        token: function(e, t) {
            if (e.sol() && (t.startOfLine = !0, t.indented = e.indentation()), e.eatSpace()) return null;
            Iq = Zq = zq = null;
            var n = t.tokenize(e, t);
            if ((n || Zq) && "comment" != n)
                for (Eq = t;;) {
                    if ((t.cc.pop() || Mq)(Zq || n)) break
                }
            return t.startOfLine = !1, Iq || n
        },
        indent: function(e, t, n) {
            var r = e.context;
            if (r && r.noIndent) return 0;
            for (r && /^{\//.test(t) && (r = r.prev); r && !r.startOfLine;) r = r.prev;
            return r ? r.indent + n.unit : 0
        }
    };
    var Kq = Object.freeze({
        __proto__: null,
        tiki: Jq
    });
    var eY = Object.freeze({
            __proto__: null,
            toml: {
                startState: function() {
                    return {
                        inString: !1,
                        stringType: "",
                        lhs: !0,
                        inArray: 0
                    }
                },
                token: function(e, t) {
                    if (t.inString || '"' != e.peek() && "'" != e.peek() || (t.stringType = e.peek(), e.next(), t.inString = !0), e.sol() && 0 === t.inArray && (t.lhs = !0), t.inString) {
                        for (; t.inString && !e.eol();) e.peek() === t.stringType ? (e.next(), t.inString = !1) : "\\" === e.peek() ? (e.next(), e.next()) : e.match(/^.[^\\\"\']*/);
                        return t.lhs ? "property" : "string"
                    }
                    return t.inArray && "]" === e.peek() ? (e.next(), t.inArray--, "bracket") : t.lhs && "[" === e.peek() && e.skipTo("]") ? (e.next(), "]" === e.peek() && e.next(), "atom") : "#" === e.peek() ? (e.skipToEnd(), "comment") : e.eatSpace() ? null : t.lhs && e.eatWhile((function(e) {
                        return "=" != e && " " != e
                    })) ? "property" : t.lhs && "=" === e.peek() ? (e.next(), t.lhs = !1, null) : !t.lhs && e.match(/^\d\d\d\d[\d\-\:\.T]*Z/) ? "atom" : t.lhs || !e.match("true") && !e.match("false") ? t.lhs || "[" !== e.peek() ? !t.lhs && e.match(/^\-?\d+(?:\.\d+)?/) ? "number" : (e.eatSpace() || e.next(), null) : (t.inArray++, e.next(), "bracket") : "atom"
                }
            }
        }),
        tY = {};

    function nY(e) {
        if (e.eatSpace()) return null;
        var t = e.sol(),
            n = e.next();
        if ("\\" === n) return e.match("fB") || e.match("fR") || e.match("fI") || e.match("u") || e.match("d") || e.match("%") || e.match("&") ? "string" : e.match("m[") ? (e.skipTo("]"), e.next(), "string") : e.match("s+") || e.match("s-") ? (e.eatWhile(/[\d-]/), "string") : e.match("(") || e.match("*(") ? (e.eatWhile(/[\w-]/), "string") : "string";
        if (t && ("." === n || "'" === n) && e.eat("\\") && e.eat('"')) return e.skipToEnd(), "comment";
        if (t && "." === n) {
            if (e.match("B ") || e.match("I ") || e.match("R ")) return "attribute";
            if (e.match("TH ") || e.match("SH ") || e.match("SS ") || e.match("HP ")) return e.skipToEnd(), "quote";
            if (e.match(/[A-Z]/) && e.match(/[A-Z]/) || e.match(/[a-z]/) && e.match(/[a-z]/)) return "attribute"
        }
        e.eatWhile(/[\w-]/);
        var r = e.current();
        return tY.hasOwnProperty(r) ? tY[r] : null
    }

    function rY(e, t) {
        return (t.tokens[0] || nY)(e, t)
    }
    const iY = {
        startState: function() {
            return {
                tokens: []
            }
        },
        token: function(e, t) {
            return rY(e, t)
        }
    };
    var aY = Object.freeze({
        __proto__: null,
        troff: iY
    });

    function oY(e) {
        for (var t = {}, n = e.split(" "), r = 0; r < n.length; ++r) t[n[r]] = !0;
        return t
    }
    const sY = {
        name: "ttcn",
        keywords: oY("activate address alive all alt altstep and and4b any break case component const continue control deactivate display do else encode enumerated except exception execute extends extension external for from function goto group if import in infinity inout interleave label language length log match message mixed mod modifies module modulepar mtc noblock not not4b nowait of on optional or or4b out override param pattern port procedure record recursive rem repeat return runs select self sender set signature system template testcase to type union value valueof var variant while with xor xor4b"),
        builtin: oY("bit2hex bit2int bit2oct bit2str char2int char2oct encvalue decomp decvalue float2int float2str hex2bit hex2int hex2oct hex2str int2bit int2char int2float int2hex int2oct int2str int2unichar isbound ischosen ispresent isvalue lengthof log2str oct2bit oct2char oct2hex oct2int oct2str regexp replace rnd sizeof str2bit str2float str2hex str2int str2oct substr unichar2int unichar2char enum2int"),
        types: oY("anytype bitstring boolean char charstring default float hexstring integer objid octetstring universal verdicttype timer"),
        timerOps: oY("read running start stop timeout"),
        portOps: oY("call catch check clear getcall getreply halt raise receive reply send trigger"),
        configOps: oY("create connect disconnect done kill killed map unmap"),
        verdictOps: oY("getverdict setverdict"),
        sutOps: oY("action"),
        functionOps: oY("apply derefers refers"),
        verdictConsts: oY("error fail inconc none pass"),
        booleanConsts: oY("true false"),
        otherConsts: oY("null NULL omit"),
        visibilityModifiers: oY("private public friend"),
        templateMatch: oY("complement ifpresent subset superset permutation"),
        multiLineStrings: !0
    };
    var OY = [];

    function lY(e) {
        if (e)
            for (var t in e) e.hasOwnProperty(t) && OY.push(t)
    }
    lY(sY.keywords), lY(sY.builtin), lY(sY.timerOps), lY(sY.portOps);
    var cY, uY = sY.keywords || {},
        dY = sY.builtin || {},
        pY = sY.timerOps || {},
        hY = sY.portOps || {},
        fY = sY.configOps || {},
        mY = sY.verdictOps || {},
        gY = sY.sutOps || {},
        QY = sY.functionOps || {},
        $Y = sY.verdictConsts || {},
        bY = sY.booleanConsts || {},
        xY = sY.otherConsts || {},
        PY = sY.types || {},
        wY = sY.visibilityModifiers || {},
        kY = sY.templateMatch || {},
        yY = sY.multiLineStrings,
        vY = /[+\-*&@=<>!\/]/;

    function SY(e, t) {
        var n = e.next();
        if ('"' == n || "'" == n) return t.tokenize = function(e) {
            return function(t, n) {
                for (var r, i = !1, a = !1; null != (r = t.next());) {
                    if (r == e && !i) {
                        var o = t.peek();
                        o && ("b" != (o = o.toLowerCase()) && "h" != o && "o" != o || t.next()), a = !0;
                        break
                    }
                    i = !i && "\\" == r
                }
                return (a || !i && !yY) && (n.tokenize = null), "string"
            }
        }(n), t.tokenize(e, t);
        if (/[\[\]{}\(\),;\\:\?\.]/.test(n)) return cY = n, "punctuation";
        if ("#" == n) return e.skipToEnd(), "atom";
        if ("%" == n) return e.eatWhile(/\b/), "atom";
        if (/\d/.test(n)) return e.eatWhile(/[\w\.]/), "number";
        if ("/" == n) {
            if (e.eat("*")) return t.tokenize = _Y, _Y(e, t);
            if (e.eat("/")) return e.skipToEnd(), "comment"
        }
        if (vY.test(n)) return "@" == n && (e.match("try") || e.match("catch") || e.match("lazy")) ? "keyword" : (e.eatWhile(vY), "operator");
        e.eatWhile(/[\w\$_\xa1-\uffff]/);
        var r = e.current();
        return uY.propertyIsEnumerable(r) ? "keyword" : dY.propertyIsEnumerable(r) ? "builtin" : pY.propertyIsEnumerable(r) || fY.propertyIsEnumerable(r) || mY.propertyIsEnumerable(r) || hY.propertyIsEnumerable(r) || gY.propertyIsEnumerable(r) || QY.propertyIsEnumerable(r) ? "def" : $Y.propertyIsEnumerable(r) || bY.propertyIsEnumerable(r) || xY.propertyIsEnumerable(r) ? "string" : PY.propertyIsEnumerable(r) ? "typeName.standard" : wY.propertyIsEnumerable(r) ? "modifier" : kY.propertyIsEnumerable(r) ? "atom" : "variable"
    }

    function _Y(e, t) {
        for (var n, r = !1; n = e.next();) {
            if ("/" == n && r) {
                t.tokenize = null;
                break
            }
            r = "*" == n
        }
        return "comment"
    }

    function XY(e, t, n, r, i) {
        this.indented = e, this.column = t, this.type = n, this.align = r, this.prev = i
    }

    function TY(e, t, n) {
        var r = e.indented;
        return e.context && "statement" == e.context.type && (r = e.context.indented), e.context = new XY(r, t, n, null, e.context)
    }

    function RY(e) {
        var t = e.context.type;
        return ")" != t && "]" != t && "}" != t || (e.indented = e.context.indented), e.context = e.context.prev
    }
    const WY = {
        startState: function() {
            return {
                tokenize: null,
                context: new XY(0, 0, "top", !1),
                indented: 0,
                startOfLine: !0
            }
        },
        token: function(e, t) {
            var n = t.context;
            if (e.sol() && (null == n.align && (n.align = !1), t.indented = e.indentation(), t.startOfLine = !0), e.eatSpace()) return null;
            cY = null;
            var r = (t.tokenize || SY)(e, t);
            if ("comment" == r) return r;
            if (null == n.align && (n.align = !0), ";" != cY && ":" != cY && "," != cY || "statement" != n.type)
                if ("{" == cY) TY(t, e.column(), "}");
                else if ("[" == cY) TY(t, e.column(), "]");
            else if ("(" == cY) TY(t, e.column(), ")");
            else if ("}" == cY) {
                for (;
                    "statement" == n.type;) n = RY(t);
                for ("}" == n.type && (n = RY(t));
                    "statement" == n.type;) n = RY(t)
            } else cY == n.type ? RY(t) : (("}" == n.type || "top" == n.type) && ";" != cY || "statement" == n.type && "newstatement" == cY) && TY(t, e.column(), "statement");
            else RY(t);
            return t.startOfLine = !1, r
        },
        languageData: {
            indentOnInput: /^\s*[{}]$/,
            commentTokens: {
                line: "//",
                block: {
                    open: "/*",
                    close: "*/"
                }
            },
            autocomplete: OY
        }
    };
    var qY = Object.freeze({
        __proto__: null,
        ttcn: WY
    });

    function YY(e) {
        for (var t = {}, n = e.split(" "), r = 0; r < n.length; ++r) t[n[r]] = !0;
        return t
    }
    const zY = {
        name: "ttcn-cfg",
        keywords: YY("Yes No LogFile FileMask ConsoleMask AppendFile TimeStampFormat LogEventTypes SourceInfoFormat LogEntityName LogSourceInfo DiskFullAction LogFileNumber LogFileSize MatchingHints Detailed Compact SubCategories Stack Single None Seconds DateTime Time Stop Error Retry Delete TCPPort KillTimer NumHCs UnixSocketsEnabled LocalAddress"),
        fileNCtrlMaskOptions: YY("TTCN_EXECUTOR TTCN_ERROR TTCN_WARNING TTCN_PORTEVENT TTCN_TIMEROP TTCN_VERDICTOP TTCN_DEFAULTOP TTCN_TESTCASE TTCN_ACTION TTCN_USER TTCN_FUNCTION TTCN_STATISTICS TTCN_PARALLEL TTCN_MATCHING TTCN_DEBUG EXECUTOR ERROR WARNING PORTEVENT TIMEROP VERDICTOP DEFAULTOP TESTCASE ACTION USER FUNCTION STATISTICS PARALLEL MATCHING DEBUG LOG_ALL LOG_NOTHING ACTION_UNQUALIFIED DEBUG_ENCDEC DEBUG_TESTPORT DEBUG_UNQUALIFIED DEFAULTOP_ACTIVATE DEFAULTOP_DEACTIVATE DEFAULTOP_EXIT DEFAULTOP_UNQUALIFIED ERROR_UNQUALIFIED EXECUTOR_COMPONENT EXECUTOR_CONFIGDATA EXECUTOR_EXTCOMMAND EXECUTOR_LOGOPTIONS EXECUTOR_RUNTIME EXECUTOR_UNQUALIFIED FUNCTION_RND FUNCTION_UNQUALIFIED MATCHING_DONE MATCHING_MCSUCCESS MATCHING_MCUNSUCC MATCHING_MMSUCCESS MATCHING_MMUNSUCC MATCHING_PCSUCCESS MATCHING_PCUNSUCC MATCHING_PMSUCCESS MATCHING_PMUNSUCC MATCHING_PROBLEM MATCHING_TIMEOUT MATCHING_UNQUALIFIED PARALLEL_PORTCONN PARALLEL_PORTMAP PARALLEL_PTC PARALLEL_UNQUALIFIED PORTEVENT_DUALRECV PORTEVENT_DUALSEND PORTEVENT_MCRECV PORTEVENT_MCSEND PORTEVENT_MMRECV PORTEVENT_MMSEND PORTEVENT_MQUEUE PORTEVENT_PCIN PORTEVENT_PCOUT PORTEVENT_PMIN PORTEVENT_PMOUT PORTEVENT_PQUEUE PORTEVENT_STATE PORTEVENT_UNQUALIFIED STATISTICS_UNQUALIFIED STATISTICS_VERDICT TESTCASE_FINISH TESTCASE_START TESTCASE_UNQUALIFIED TIMEROP_GUARD TIMEROP_READ TIMEROP_START TIMEROP_STOP TIMEROP_TIMEOUT TIMEROP_UNQUALIFIED USER_UNQUALIFIED VERDICTOP_FINAL VERDICTOP_GETVERDICT VERDICTOP_SETVERDICT VERDICTOP_UNQUALIFIED WARNING_UNQUALIFIED"),
        externalCommands: YY("BeginControlPart EndControlPart BeginTestCase EndTestCase"),
        multiLineStrings: !0
    };
    var ZY, EY = zY.keywords,
        IY = zY.fileNCtrlMaskOptions,
        UY = zY.externalCommands,
        VY = zY.multiLineStrings,
        jY = /[\|]/;

    function AY(e, t) {
        var n = e.next();
        if ('"' == n || "'" == n) return t.tokenize = function(e) {
            return function(t, n) {
                for (var r, i = !1, a = !1; null != (r = t.next());) {
                    if (r == e && !i) {
                        var o = t.peek();
                        o && ("b" != (o = o.toLowerCase()) && "h" != o && "o" != o || t.next()), a = !0;
                        break
                    }
                    i = !i && "\\" == r
                }
                return (a || !i && !VY) && (n.tokenize = null), "string"
            }
        }(n), t.tokenize(e, t);
        if (/[:=]/.test(n)) return ZY = n, "punctuation";
        if ("#" == n) return e.skipToEnd(), "comment";
        if (/\d/.test(n)) return e.eatWhile(/[\w\.]/), "number";
        if (jY.test(n)) return e.eatWhile(jY), "operator";
        if ("[" == n) return e.eatWhile(/[\w_\]]/), "number";
        e.eatWhile(/[\w\$_]/);
        var r = e.current();
        return EY.propertyIsEnumerable(r) ? "keyword" : IY.propertyIsEnumerable(r) ? "atom" : UY.propertyIsEnumerable(r) ? "deleted" : "variable"
    }

    function CY(e, t, n, r, i) {
        this.indented = e, this.column = t, this.type = n, this.align = r, this.prev = i
    }

    function GY(e, t, n) {
        var r = e.indented;
        return e.context && "statement" == e.context.type && (r = e.context.indented), e.context = new CY(r, t, n, null, e.context)
    }

    function LY(e) {
        var t = e.context.type;
        return ")" != t && "]" != t && "}" != t || (e.indented = e.context.indented), e.context = e.context.prev
    }
    const NY = {
        startState: function() {
            return {
                tokenize: null,
                context: new CY(0, 0, "top", !1),
                indented: 0,
                startOfLine: !0
            }
        },
        token: function(e, t) {
            var n = t.context;
            if (e.sol() && (null == n.align && (n.align = !1), t.indented = e.indentation(), t.startOfLine = !0), e.eatSpace()) return null;
            ZY = null;
            var r = (t.tokenize || AY)(e, t);
            if ("comment" == r) return r;
            if (null == n.align && (n.align = !0), ";" != ZY && ":" != ZY && "," != ZY || "statement" != n.type)
                if ("{" == ZY) GY(t, e.column(), "}");
                else if ("[" == ZY) GY(t, e.column(), "]");
            else if ("(" == ZY) GY(t, e.column(), ")");
            else if ("}" == ZY) {
                for (;
                    "statement" == n.type;) n = LY(t);
                for ("}" == n.type && (n = LY(t));
                    "statement" == n.type;) n = LY(t)
            } else ZY == n.type ? LY(t) : (("}" == n.type || "top" == n.type) && ";" != ZY || "statement" == n.type && "newstatement" == ZY) && GY(t, e.column(), "statement");
            else LY(t);
            return t.startOfLine = !1, r
        },
        languageData: {
            indentOnInput: /^\s*[{}]$/,
            commentTokens: {
                line: "#"
            }
        }
    };
    var DY, MY = Object.freeze({
        __proto__: null,
        ttcnCfg: NY
    });

    function BY(e) {
        return new RegExp("^(?:" + e.join("|") + ")$", "i")
    }
    BY([]);
    var FY = BY(["@prefix", "@base", "a"]),
        HY = /[*+\-<>=&|]/;

    function JY(e, t) {
        var n = e.next();
        if (DY = null, "<" != n || e.match(/^[\s\u00a0=]/, !1)) {
            if ('"' == n || "'" == n) return t.tokenize = function(e) {
                return function(t, n) {
                    for (var r, i = !1; null != (r = t.next());) {
                        if (r == e && !i) {
                            n.tokenize = JY;
                            break
                        }
                        i = !i && "\\" == r
                    }
                    return "string"
                }
            }(n), t.tokenize(e, t);
            if (/[{}\(\),\.;\[\]]/.test(n)) return DY = n, null;
            if ("#" == n) return e.skipToEnd(), "comment";
            if (HY.test(n)) return e.eatWhile(HY), null;
            if (":" == n) return "operator";
            if (e.eatWhile(/[_\w\d]/), ":" == e.peek()) return "variableName.special";
            var r = e.current();
            return FY.test(r) ? "meta" : n >= "A" && n <= "Z" ? "comment" : "keyword"
        }
        return e.match(/^[^\s\u00a0>]*>?/), "atom"
    }

    function KY(e, t, n) {
        e.context = {
            prev: e.context,
            indent: e.indent,
            col: n,
            type: t
        }
    }

    function ez(e) {
        e.indent = e.context.indent, e.context = e.context.prev
    }
    const tz = {
        startState: function() {
            return {
                tokenize: JY,
                context: null,
                indent: 0,
                col: 0
            }
        },
        token: function(e, t) {
            if (e.sol() && (t.context && null == t.context.align && (t.context.align = !1), t.indent = e.indentation()), e.eatSpace()) return null;
            var n = t.tokenize(e, t);
            if ("comment" != n && t.context && null == t.context.align && "pattern" != t.context.type && (t.context.align = !0), "(" == DY) KY(t, ")", e.column());
            else if ("[" == DY) KY(t, "]", e.column());
            else if ("{" == DY) KY(t, "}", e.column());
            else if (/[\]\}\)]/.test(DY)) {
                for (; t.context && "pattern" == t.context.type;) ez(t);
                t.context && DY == t.context.type && ez(t)
            } else "." == DY && t.context && "pattern" == t.context.type ? ez(t) : /atom|string|variable/.test(n) && t.context && (/[\}\]]/.test(t.context.type) ? KY(t, "pattern", e.column()) : "pattern" != t.context.type || t.context.align || (t.context.align = !0, t.context.col = e.column()));
            return n
        },
        indent: function(e, t, n) {
            var r = t && t.charAt(0),
                i = e.context;
            if (/[\]\}]/.test(r))
                for (; i && "pattern" == i.type;) i = i.prev;
            var a = i && r == i.type;
            return i ? "pattern" == i.type ? i.col : i.align ? i.col + (a ? 0 : 1) : i.indent + (a ? 0 : n.unit) : 0
        },
        languageData: {
            commentTokens: {
                line: "#"
            }
        }
    };
    var nz = Object.freeze({
        __proto__: null,
        turtle: tz
    });

    function rz(e) {
        return new RegExp("^((" + e.join(")|(") + "))\\b")
    }
    var iz = ["Clamp", "Constructor", "EnforceRange", "Exposed", "ImplicitThis", "Global", "PrimaryGlobal", "LegacyArrayClass", "LegacyUnenumerableNamedProperties", "LenientThis", "NamedConstructor", "NewObject", "NoInterfaceObject", "OverrideBuiltins", "PutForwards", "Replaceable", "SameObject", "TreatNonObjectAsNull", "TreatNullAs", "EmptyString", "Unforgeable", "Unscopeable"],
        az = rz(iz),
        oz = ["unsigned", "short", "long", "unrestricted", "float", "double", "boolean", "byte", "octet", "Promise", "ArrayBuffer", "DataView", "Int8Array", "Int16Array", "Int32Array", "Uint8Array", "Uint16Array", "Uint32Array", "Uint8ClampedArray", "Float32Array", "Float64Array", "ByteString", "DOMString", "USVString", "sequence", "object", "RegExp", "Error", "DOMException", "FrozenArray", "any", "void"],
        sz = rz(oz),
        Oz = ["attribute", "callback", "const", "deleter", "dictionary", "enum", "getter", "implements", "inherit", "interface", "iterable", "legacycaller", "maplike", "partial", "required", "serializer", "setlike", "setter", "static", "stringifier", "typedef", "optional", "readonly", "or"],
        lz = rz(Oz),
        cz = ["true", "false", "Infinity", "NaN", "null"],
        uz = rz(cz),
        dz = rz(["callback", "dictionary", "enum", "interface"]),
        pz = rz(["typedef"]),
        hz = /^[:<=>?]/,
        fz = /^-?([1-9][0-9]*|0[Xx][0-9A-Fa-f]+|0[0-7]*)/,
        mz = /^-?(([0-9]+\.[0-9]*|[0-9]*\.[0-9]+)([Ee][+-]?[0-9]+)?|[0-9]+[Ee][+-]?[0-9]+)/,
        gz = /^_?[A-Za-z][0-9A-Z_a-z-]*/,
        Qz = /^_?[A-Za-z][0-9A-Z_a-z-]*(?=\s*;)/,
        $z = /^"[^"]*"/,
        bz = /^\/\*.*?\*\//,
        xz = /^\/\*.*/,
        Pz = /^.*?\*\//;
    const wz = {
        startState: function() {
            return {
                inComment: !1,
                lastToken: "",
                startDef: !1,
                endDef: !1
            }
        },
        token: function(e, t) {
            var n = function(e, t) {
                if (e.eatSpace()) return null;
                if (t.inComment) return e.match(Pz) ? (t.inComment = !1, "comment") : (e.skipToEnd(), "comment");
                if (e.match("//")) return e.skipToEnd(), "comment";
                if (e.match(bz)) return "comment";
                if (e.match(xz)) return t.inComment = !0, "comment";
                if (e.match(/^-?[0-9\.]/, !1) && (e.match(fz) || e.match(mz))) return "number";
                if (e.match($z)) return "string";
                if (t.startDef && e.match(gz)) return "def";
                if (t.endDef && e.match(Qz)) return t.endDef = !1, "def";
                if (e.match(lz)) return "keyword";
                if (e.match(sz)) {
                    var n = t.lastToken,
                        r = (e.match(/^\s*(.+?)\b/, !1) || [])[1];
                    return ":" === n || "implements" === n || "implements" === r || "=" === r ? "builtin" : "type"
                }
                return e.match(az) ? "builtin" : e.match(uz) ? "atom" : e.match(gz) ? "variable" : e.match(hz) ? "operator" : (e.next(), null)
            }(e, t);
            if (n) {
                var r = e.current();
                t.lastToken = r, "keyword" === n ? (t.startDef = dz.test(r), t.endDef = t.endDef || pz.test(r)) : t.startDef = !1
            }
            return n
        },
        languageData: {
            autocomplete: iz.concat(oz).concat(Oz).concat(cz)
        }
    };
    var kz = Object.freeze({
            __proto__: null,
            webIDL: wz
        }),
        yz = "error";

    function vz(e) {
        return new RegExp("^((" + e.join(")|(") + "))\\b", "i")
    }
    var Sz = new RegExp("^[\\+\\-\\*/%&\\\\|\\^~<>!]"),
        _z = new RegExp("^[\\(\\)\\[\\]\\{\\}@,:`=;\\.]"),
        Xz = new RegExp("^((==)|(<>)|(<=)|(>=)|(<>)|(<<)|(>>)|(//)|(\\*\\*))"),
        Tz = new RegExp("^((\\+=)|(\\-=)|(\\*=)|(%=)|(/=)|(&=)|(\\|=)|(\\^=))"),
        Rz = new RegExp("^((//=)|(>>=)|(<<=)|(\\*\\*=))"),
        Wz = new RegExp("^[_A-Za-z][_A-Za-z0-9]*"),
        qz = ["class", "module", "sub", "enum", "select", "while", "if", "function", "get", "set", "property", "try", "structure", "synclock", "using", "with"],
        Yz = ["else", "elseif", "case", "catch", "finally"],
        zz = ["next", "loop"],
        Zz = ["and", "andalso", "or", "orelse", "xor", "in", "not", "is", "isnot", "like"],
        Ez = vz(Zz),
        Iz = ["#const", "#else", "#elseif", "#end", "#if", "#region", "addhandler", "addressof", "alias", "as", "byref", "byval", "cbool", "cbyte", "cchar", "cdate", "cdbl", "cdec", "cint", "clng", "cobj", "compare", "const", "continue", "csbyte", "cshort", "csng", "cstr", "cuint", "culng", "cushort", "declare", "default", "delegate", "dim", "directcast", "each", "erase", "error", "event", "exit", "explicit", "false", "for", "friend", "gettype", "goto", "handles", "implements", "imports", "infer", "inherits", "interface", "isfalse", "istrue", "lib", "me", "mod", "mustinherit", "mustoverride", "my", "mybase", "myclass", "namespace", "narrowing", "new", "nothing", "notinheritable", "notoverridable", "of", "off", "on", "operator", "option", "optional", "out", "overloads", "overridable", "overrides", "paramarray", "partial", "private", "protected", "public", "raiseevent", "readonly", "redim", "removehandler", "resume", "return", "shadows", "shared", "static", "step", "stop", "strict", "then", "throw", "to", "true", "trycast", "typeof", "until", "until", "when", "widening", "withevents", "writeonly"],
        Uz = ["object", "boolean", "char", "string", "byte", "sbyte", "short", "ushort", "int16", "uint16", "integer", "uinteger", "int32", "uint32", "long", "ulong", "int64", "uint64", "decimal", "single", "double", "float", "date", "datetime", "intptr", "uintptr"],
        Vz = vz(Iz),
        jz = vz(Uz),
        Az = vz(qz),
        Cz = vz(Yz),
        Gz = vz(zz),
        Lz = vz(["end"]),
        Nz = vz(["do"]);

    function Dz(e, t) {
        t.currentIndent++
    }

    function Mz(e, t) {
        t.currentIndent--
    }

    function Bz(e, t) {
        if (e.eatSpace()) return null;
        if ("'" === e.peek()) return e.skipToEnd(), "comment";
        if (e.match(/^((&H)|(&O))?[0-9\.a-f]/i, !1)) {
            var n = !1;
            if ((e.match(/^\d*\.\d+F?/i) || e.match(/^\d+\.\d*F?/) || e.match(/^\.\d+F?/)) && (n = !0), n) return e.eat(/J/i), "number";
            var r = !1;
            if (e.match(/^&H[0-9a-f]+/i) || e.match(/^&O[0-7]+/i) ? r = !0 : e.match(/^[1-9]\d*F?/) ? (e.eat(/J/i), r = !0) : e.match(/^0(?![\dx])/i) && (r = !0), r) return e.eat(/L/i), "number"
        }
        return e.match('"') ? (t.tokenize = function(e) {
            var t = 1 == e.length,
                n = "string";
            return function(r, i) {
                for (; !r.eol();) {
                    if (r.eatWhile(/[^'"]/), r.match(e)) return i.tokenize = Bz, n;
                    r.eat(/['"]/)
                }
                return t && (i.tokenize = Bz), n
            }
        }(e.current()), t.tokenize(e, t)) : e.match(Rz) || e.match(Tz) ? null : e.match(Xz) || e.match(Sz) || e.match(Ez) ? "operator" : e.match(_z) ? null : e.match(Nz) ? (Dz(0, t), t.doInCurrentLine = !0, "keyword") : e.match(Az) ? (t.doInCurrentLine ? t.doInCurrentLine = !1 : Dz(0, t), "keyword") : e.match(Cz) ? "keyword" : e.match(Lz) ? (Mz(0, t), Mz(0, t), "keyword") : e.match(Gz) ? (Mz(0, t), "keyword") : e.match(jz) || e.match(Vz) ? "keyword" : e.match(Wz) ? "variable" : (e.next(), yz)
    }
    const Fz = {
        startState: function() {
            return {
                tokenize: Bz,
                lastToken: null,
                currentIndent: 0,
                nextLineIndent: 0,
                doInCurrentLine: !1
            }
        },
        token: function(e, t) {
            e.sol() && (t.currentIndent += t.nextLineIndent, t.nextLineIndent = 0, t.doInCurrentLine = 0);
            var n = function(e, t) {
                var n = t.tokenize(e, t),
                    r = e.current();
                if ("." === r) return "variable" === (n = t.tokenize(e, t)) ? "variable" : yz;
                var i = "[({".indexOf(r);
                return -1 !== i && Dz(0, t), -1 !== (i = "])}".indexOf(r)) && Mz(0, t) ? yz : n
            }(e, t);
            return t.lastToken = {
                style: n,
                content: e.current()
            }, n
        },
        indent: function(e, t, n) {
            var r = t.replace(/^\s+|\s+$/g, "");
            return r.match(Gz) || r.match(Lz) || r.match(Cz) ? n.unit * (e.currentIndent - 1) : e.currentIndent < 0 ? 0 : e.currentIndent * n.unit
        },
        languageData: {
            closeBrackets: {
                brackets: ["(", "[", "{", '"']
            },
            commentTokens: {
                line: "'"
            },
            autocomplete: qz.concat(Yz).concat(zz).concat(Zz).concat(Iz).concat(Uz)
        }
    };
    var Hz = Object.freeze({
        __proto__: null,
        vb: Fz
    });

    function Jz(e) {
        var t = "error";

        function n(e) {
            return new RegExp("^((" + e.join(")|(") + "))\\b", "i")
        }
        var r = new RegExp("^[\\+\\-\\*/&\\\\\\^<>=]"),
            i = new RegExp("^((<>)|(<=)|(>=))"),
            a = new RegExp("^[\\.,]"),
            o = new RegExp("^[\\(\\)]"),
            s = new RegExp("^[A-Za-z][_A-Za-z0-9]*"),
            O = n(["and", "or", "not", "xor", "is", "mod", "eqv", "imp"]),
            l = ["WScript", "err", "debug", "RegExp"],
            c = ["clear", "execute", "raise", "replace", "test", "write", "writeline", "close", "open", "state", "eof", "update", "addnew", "end", "createobject", "quit"].concat(["description", "firstindex", "global", "helpcontext", "helpfile", "ignorecase", "length", "number", "pattern", "source", "value", "count"]);
        l = l.concat(["vbBlack", "vbRed", "vbGreen", "vbYellow", "vbBlue", "vbMagenta", "vbCyan", "vbWhite", "vbBinaryCompare", "vbTextCompare", "vbSunday", "vbMonday", "vbTuesday", "vbWednesday", "vbThursday", "vbFriday", "vbSaturday", "vbUseSystemDayOfWeek", "vbFirstJan1", "vbFirstFourDays", "vbFirstFullWeek", "vbGeneralDate", "vbLongDate", "vbShortDate", "vbLongTime", "vbShortTime", "vbObjectError", "vbOKOnly", "vbOKCancel", "vbAbortRetryIgnore", "vbYesNoCancel", "vbYesNo", "vbRetryCancel", "vbCritical", "vbQuestion", "vbExclamation", "vbInformation", "vbDefaultButton1", "vbDefaultButton2", "vbDefaultButton3", "vbDefaultButton4", "vbApplicationModal", "vbSystemModal", "vbOK", "vbCancel", "vbAbort", "vbRetry", "vbIgnore", "vbYes", "vbNo", "vbCr", "VbCrLf", "vbFormFeed", "vbLf", "vbNewLine", "vbNullChar", "vbNullString", "vbTab", "vbVerticalTab", "vbUseDefault", "vbTrue", "vbFalse", "vbEmpty", "vbNull", "vbInteger", "vbLong", "vbSingle", "vbDouble", "vbCurrency", "vbDate", "vbString", "vbObject", "vbError", "vbBoolean", "vbVariant", "vbDataObject", "vbDecimal", "vbByte", "vbArray"]), e.isASP && (l = l.concat(["server", "response", "request", "session", "application"]), c = c.concat(["addheader", "appendtolog", "binarywrite", "end", "flush", "redirect", "binaryread", "remove", "removeall", "lock", "unlock", "abandon", "getlasterror", "htmlencode", "mappath", "transfer", "urlencode"], ["buffer", "cachecontrol", "charset", "contenttype", "expires", "expiresabsolute", "isclientconnected", "pics", "status", "clientcertificate", "cookies", "form", "querystring", "servervariables", "totalbytes", "contents", "staticobjects", "codepage", "lcid", "sessionid", "timeout", "scripttimeout"]));
        var u = n(["dim", "redim", "then", "until", "randomize", "byval", "byref", "new", "property", "exit", "in", "const", "private", "public", "get", "set", "let", "stop", "on error resume next", "on error goto 0", "option explicit", "call", "me"]),
            d = n(["true", "false", "nothing", "empty", "null"]),
            p = n(["abs", "array", "asc", "atn", "cbool", "cbyte", "ccur", "cdate", "cdbl", "chr", "cint", "clng", "cos", "csng", "cstr", "date", "dateadd", "datediff", "datepart", "dateserial", "datevalue", "day", "escape", "eval", "execute", "exp", "filter", "formatcurrency", "formatdatetime", "formatnumber", "formatpercent", "getlocale", "getobject", "getref", "hex", "hour", "inputbox", "instr", "instrrev", "int", "fix", "isarray", "isdate", "isempty", "isnull", "isnumeric", "isobject", "join", "lbound", "lcase", "left", "len", "loadpicture", "log", "ltrim", "rtrim", "trim", "maths", "mid", "minute", "month", "monthname", "msgbox", "now", "oct", "replace", "rgb", "right", "rnd", "round", "scriptengine", "scriptenginebuildversion", "scriptenginemajorversion", "scriptengineminorversion", "second", "setlocale", "sgn", "sin", "space", "split", "sqr", "strcomp", "string", "strreverse", "tan", "time", "timer", "timeserial", "timevalue", "typename", "ubound", "ucase", "unescape", "vartype", "weekday", "weekdayname", "year"]),
            h = n(l),
            f = n(c),
            m = n(["class", "sub", "select", "while", "if", "function", "property", "with", "for"]),
            g = n(["else", "elseif", "case"]),
            Q = n(["next", "loop", "wend"]),
            $ = n(["end"]),
            b = n(["do"]),
            x = n(["on error resume next", "exit"]),
            P = n(["rem"]);

        function w(e, t) {
            t.currentIndent++
        }

        function k(e, t) {
            t.currentIndent--
        }

        function y(e, n) {
            if (e.eatSpace()) return null;
            if ("'" === e.peek()) return e.skipToEnd(), "comment";
            if (e.match(P)) return e.skipToEnd(), "comment";
            if (e.match(/^((&H)|(&O))?[0-9\.]/i, !1) && !e.match(/^((&H)|(&O))?[0-9\.]+[a-z_]/i, !1)) {
                var l = !1;
                if ((e.match(/^\d*\.\d+/i) || e.match(/^\d+\.\d*/) || e.match(/^\.\d+/)) && (l = !0), l) return e.eat(/J/i), "number";
                var c = !1;
                if (e.match(/^&H[0-9a-f]+/i) || e.match(/^&O[0-7]+/i) ? c = !0 : e.match(/^[1-9]\d*F?/) ? (e.eat(/J/i), c = !0) : e.match(/^0(?![\dx])/i) && (c = !0), c) return e.eat(/L/i), "number"
            }
            return e.match('"') ? (n.tokenize = function(e) {
                var t = 1 == e.length,
                    n = "string";
                return function(r, i) {
                    for (; !r.eol();) {
                        if (r.eatWhile(/[^'"]/), r.match(e)) return i.tokenize = y, n;
                        r.eat(/['"]/)
                    }
                    return t && (i.tokenize = y), n
                }
            }(e.current()), n.tokenize(e, n)) : e.match(i) || e.match(r) || e.match(O) ? "operator" : e.match(a) ? null : e.match(o) ? "bracket" : e.match(x) ? (n.doInCurrentLine = !0, "keyword") : e.match(b) ? (w(0, n), n.doInCurrentLine = !0, "keyword") : e.match(m) ? (n.doInCurrentLine ? n.doInCurrentLine = !1 : w(0, n), "keyword") : e.match(g) ? "keyword" : e.match($) ? (k(0, n), k(0, n), "keyword") : e.match(Q) ? (n.doInCurrentLine ? n.doInCurrentLine = !1 : k(0, n), "keyword") : e.match(u) ? "keyword" : e.match(d) ? "atom" : e.match(f) ? "variableName.special" : e.match(p) || e.match(h) ? "builtin" : e.match(s) ? "variable" : (e.next(), t)
        }
        return {
            startState: function() {
                return {
                    tokenize: y,
                    lastToken: null,
                    currentIndent: 0,
                    nextLineIndent: 0,
                    doInCurrentLine: !1,
                    ignoreKeyword: !1
                }
            },
            token: function(e, n) {
                e.sol() && (n.currentIndent += n.nextLineIndent, n.nextLineIndent = 0, n.doInCurrentLine = 0);
                var r = function(e, n) {
                    var r = n.tokenize(e, n),
                        i = e.current();
                    return "." === i ? (r = n.tokenize(e, n), i = e.current(), !r || "variable" !== r.substr(0, 8) && "builtin" !== r && "keyword" !== r ? t : ("builtin" !== r && "keyword" !== r || (r = "variable"), c.indexOf(i.substr(1)) > -1 && (r = "keyword"), r)) : r
                }(e, n);
                return n.lastToken = {
                    style: r,
                    content: e.current()
                }, null === r && (r = null), r
            },
            indent: function(e, t, n) {
                var r = t.replace(/^\s+|\s+$/g, "");
                return r.match(Q) || r.match($) || r.match(g) ? n.unit * (e.currentIndent - 1) : e.currentIndent < 0 ? 0 : e.currentIndent * n.unit
            }
        }
    }
    const Kz = Jz({}),
        eZ = Jz({
            isASP: !0
        });
    var tZ = Object.freeze({
        __proto__: null,
        vbScript: Kz,
        vbScriptASP: eZ
    });

    function nZ(e) {
        for (var t = {}, n = e.split(" "), r = 0; r < n.length; ++r) t[n[r]] = !0;
        return t
    }
    var rZ = nZ("#end #else #break #stop #[[ #]] #{end} #{else} #{break} #{stop}"),
        iZ = nZ("#if #elseif #foreach #set #include #parse #macro #define #evaluate #{if} #{elseif} #{foreach} #{set} #{include} #{parse} #{macro} #{define} #{evaluate}"),
        aZ = nZ("$foreach.count $foreach.hasNext $foreach.first $foreach.last $foreach.topmost $foreach.parent.count $foreach.parent.hasNext $foreach.parent.first $foreach.parent.last $foreach.parent $velocityCount $!bodyContent $bodyContent"),
        oZ = /[+\-*&%=<>!?:\/|]/;

    function sZ(e, t, n) {
        return t.tokenize = n, n(e, t)
    }

    function OZ(e, t) {
        var n = t.beforeParams;
        t.beforeParams = !1;
        var r = e.next();
        if ("'" == r && !t.inString && t.inParams) return t.lastTokenWasBuiltin = !1, sZ(e, t, lZ(r));
        if ('"' != r) {
            if (/[\[\]{}\(\),;\.]/.test(r)) return "(" == r && n ? t.inParams = !0 : ")" == r && (t.inParams = !1, t.lastTokenWasBuiltin = !0), null;
            if (/\d/.test(r)) return t.lastTokenWasBuiltin = !1, e.eatWhile(/[\w\.]/), "number";
            if ("#" == r && e.eat("*")) return t.lastTokenWasBuiltin = !1, sZ(e, t, cZ);
            if ("#" == r && e.match(/ *\[ *\[/)) return t.lastTokenWasBuiltin = !1, sZ(e, t, uZ);
            if ("#" == r && e.eat("#")) return t.lastTokenWasBuiltin = !1, e.skipToEnd(), "comment";
            if ("$" == r) return e.eatWhile(/[\w\d\$_\.{}-]/), aZ && aZ.propertyIsEnumerable(e.current()) ? "keyword" : (t.lastTokenWasBuiltin = !0, t.beforeParams = !0, "builtin");
            if (oZ.test(r)) return t.lastTokenWasBuiltin = !1, e.eatWhile(oZ), "operator";
            e.eatWhile(/[\w\$_{}@]/);
            var i = e.current();
            return rZ && rZ.propertyIsEnumerable(i) ? "keyword" : iZ && iZ.propertyIsEnumerable(i) || e.current().match(/^#@?[a-z0-9_]+ *$/i) && "(" == e.peek() && (!iZ || !iZ.propertyIsEnumerable(i.toLowerCase())) ? (t.beforeParams = !0, t.lastTokenWasBuiltin = !1, "keyword") : t.inString ? (t.lastTokenWasBuiltin = !1, "string") : e.pos > i.length && "." == e.string.charAt(e.pos - i.length - 1) && t.lastTokenWasBuiltin ? "builtin" : (t.lastTokenWasBuiltin = !1, null)
        }
        return t.lastTokenWasBuiltin = !1, t.inString ? (t.inString = !1, "string") : t.inParams ? sZ(e, t, lZ(r)) : void 0
    }

    function lZ(e) {
        return function(t, n) {
            for (var r, i = !1, a = !1; null != (r = t.next());) {
                if (r == e && !i) {
                    a = !0;
                    break
                }
                if ('"' == e && "$" == t.peek() && !i) {
                    n.inString = !0, a = !0;
                    break
                }
                i = !i && "\\" == r
            }
            return a && (n.tokenize = OZ), "string"
        }
    }

    function cZ(e, t) {
        for (var n, r = !1; n = e.next();) {
            if ("#" == n && r) {
                t.tokenize = OZ;
                break
            }
            r = "*" == n
        }
        return "comment"
    }

    function uZ(e, t) {
        for (var n, r = 0; n = e.next();) {
            if ("#" == n && 2 == r) {
                t.tokenize = OZ;
                break
            }
            "]" == n ? r++ : " " != n && (r = 0)
        }
        return "meta"
    }
    const dZ = {
        startState: function() {
            return {
                tokenize: OZ,
                beforeParams: !1,
                inParams: !1,
                inString: !1,
                lastTokenWasBuiltin: !1
            }
        },
        token: function(e, t) {
            return e.eatSpace() ? null : t.tokenize(e, t)
        },
        languageData: {
            commentTokens: {
                line: "##",
                block: {
                    open: "#*",
                    close: "*#"
                }
            }
        }
    };
    var pZ = Object.freeze({
        __proto__: null,
        velocity: dZ
    });

    function hZ(e) {
        for (var t = {}, n = e.split(","), r = 0; r < n.length; ++r) {
            var i = n[r].toUpperCase(),
                a = n[r].charAt(0).toUpperCase() + n[r].slice(1);
            t[n[r]] = !0, t[i] = !0, t[a] = !0
        }
        return t
    }

    function fZ(e) {
        return e.eatWhile(/[\w\$_]/), "meta"
    }
    var mZ, gZ = hZ("null"),
        QZ = {
            "`": fZ,
            $: fZ
        },
        $Z = hZ("abs,access,after,alias,all,and,architecture,array,assert,attribute,begin,block,body,buffer,bus,case,component,configuration,constant,disconnect,downto,else,elsif,end,end block,end case,end component,end for,end generate,end if,end loop,end process,end record,end units,entity,exit,file,for,function,generate,generic,generic map,group,guarded,if,impure,in,inertial,inout,is,label,library,linkage,literal,loop,map,mod,nand,new,next,nor,null,of,on,open,or,others,out,package,package body,port,port map,postponed,procedure,process,pure,range,record,register,reject,rem,report,return,rol,ror,select,severity,signal,sla,sll,sra,srl,subtype,then,to,transport,type,unaffected,units,until,use,variable,wait,when,while,with,xnor,xor"),
        bZ = hZ("architecture,entity,begin,case,port,else,elsif,end,for,function,if"),
        xZ = /[&|~><!\)\(*#%@+\/=?\:;}{,\.\^\-\[\]]/;

    function PZ(e, t) {
        var n = e.next();
        if (QZ[n]) {
            var r = QZ[n](e, t);
            if (!1 !== r) return r
        }
        if ('"' == n) return t.tokenize = function(e) {
            return function(t, n) {
                for (var r, i = !1, a = !1; null != (r = t.next());) {
                    if (r == e && !i) {
                        a = !0;
                        break
                    }
                    i = !i && "--" == r
                }
                return !a && i || (n.tokenize = PZ), "string.special"
            }
        }(n), t.tokenize(e, t);
        if ("'" == n) return t.tokenize = function(e) {
            return function(t, n) {
                for (var r, i = !1, a = !1; null != (r = t.next());) {
                    if (r == e && !i) {
                        a = !0;
                        break
                    }
                    i = !i && "--" == r
                }
                return !a && i || (n.tokenize = PZ), "string"
            }
        }(n), t.tokenize(e, t);
        if (/[\[\]{}\(\),;\:\.]/.test(n)) return mZ = n, null;
        if (/[\d']/.test(n)) return e.eatWhile(/[\w\.']/), "number";
        if ("-" == n && e.eat("-")) return e.skipToEnd(), "comment";
        if (xZ.test(n)) return e.eatWhile(xZ), "operator";
        e.eatWhile(/[\w\$_]/);
        var i = e.current();
        return $Z.propertyIsEnumerable(i.toLowerCase()) ? (bZ.propertyIsEnumerable(i) && (mZ = "newstatement"), "keyword") : gZ.propertyIsEnumerable(i) ? "atom" : "variable"
    }

    function wZ(e, t, n, r, i) {
        this.indented = e, this.column = t, this.type = n, this.align = r, this.prev = i
    }

    function kZ(e, t, n) {
        return e.context = new wZ(e.indented, t, n, null, e.context)
    }

    function yZ(e) {
        var t = e.context.type;
        return ")" != t && "]" != t && "}" != t || (e.indented = e.context.indented), e.context = e.context.prev
    }
    const vZ = {
        startState: function(e) {
            return {
                tokenize: null,
                context: new wZ(-e, 0, "top", !1),
                indented: 0,
                startOfLine: !0
            }
        },
        token: function(e, t) {
            var n = t.context;
            if (e.sol() && (null == n.align && (n.align = !1), t.indented = e.indentation(), t.startOfLine = !0), e.eatSpace()) return null;
            mZ = null;
            var r = (t.tokenize || PZ)(e, t);
            if ("comment" == r || "meta" == r) return r;
            if (null == n.align && (n.align = !0), ";" != mZ && ":" != mZ || "statement" != n.type)
                if ("{" == mZ) kZ(t, e.column(), "}");
                else if ("[" == mZ) kZ(t, e.column(), "]");
            else if ("(" == mZ) kZ(t, e.column(), ")");
            else if ("}" == mZ) {
                for (;
                    "statement" == n.type;) n = yZ(t);
                for ("}" == n.type && (n = yZ(t));
                    "statement" == n.type;) n = yZ(t)
            } else mZ == n.type ? yZ(t) : ("}" == n.type || "top" == n.type || "statement" == n.type && "newstatement" == mZ) && kZ(t, e.column(), "statement");
            else yZ(t);
            return t.startOfLine = !1, r
        },
        indent: function(e, t, n) {
            if (e.tokenize != PZ && null != e.tokenize) return 0;
            var r = t && t.charAt(0),
                i = e.context,
                a = r == i.type;
            return "statement" == i.type ? i.indented + ("{" == r ? 0 : n.unit) : i.align ? i.column + (a ? 0 : 1) : i.indented + (a ? 0 : n.unit)
        },
        languageData: {
            indentOnInput: /^\s*[{}]$/,
            commentTokens: {
                line: "--"
            }
        }
    };
    var SZ = Object.freeze({
            __proto__: null,
            vhdl: vZ
        }),
        _Z = function() {
            function e(e) {
                return {
                    type: e,
                    style: "keyword"
                }
            }
            for (var t = e("operator"), n = {
                    type: "atom",
                    style: "atom"
                }, r = {
                    type: "axis_specifier",
                    style: "qualifier"
                }, i = {
                    ",": {
                        type: "punctuation",
                        style: null
                    }
                }, a = ["after", "all", "allowing", "ancestor", "ancestor-or-self", "any", "array", "as", "ascending", "at", "attribute", "base-uri", "before", "boundary-space", "by", "case", "cast", "castable", "catch", "child", "collation", "comment", "construction", "contains", "content", "context", "copy", "copy-namespaces", "count", "decimal-format", "declare", "default", "delete", "descendant", "descendant-or-self", "descending", "diacritics", "different", "distance", "document", "document-node", "element", "else", "empty", "empty-sequence", "encoding", "end", "entire", "every", "exactly", "except", "external", "first", "following", "following-sibling", "for", "from", "ftand", "ftnot", "ft-option", "ftor", "function", "fuzzy", "greatest", "group", "if", "import", "in", "inherit", "insensitive", "insert", "instance", "intersect", "into", "invoke", "is", "item", "language", "last", "lax", "least", "let", "levels", "lowercase", "map", "modify", "module", "most", "namespace", "next", "no", "node", "nodes", "no-inherit", "no-preserve", "not", "occurs", "of", "only", "option", "order", "ordered", "ordering", "paragraph", "paragraphs", "parent", "phrase", "preceding", "preceding-sibling", "preserve", "previous", "processing-instruction", "relationship", "rename", "replace", "return", "revalidation", "same", "satisfies", "schema", "schema-attribute", "schema-element", "score", "self", "sensitive", "sentence", "sentences", "sequence", "skip", "sliding", "some", "stable", "start", "stemming", "stop", "strict", "strip", "switch", "text", "then", "thesaurus", "times", "to", "transform", "treat", "try", "tumbling", "type", "typeswitch", "union", "unordered", "update", "updating", "uppercase", "using", "validate", "value", "variable", "version", "weight", "when", "where", "wildcards", "window", "with", "without", "word", "words", "xquery"], o = 0, s = a.length; o < s; o++) i[a[o]] = e(a[o]);
            var O = ["xs:anyAtomicType", "xs:anySimpleType", "xs:anyType", "xs:anyURI", "xs:base64Binary", "xs:boolean", "xs:byte", "xs:date", "xs:dateTime", "xs:dateTimeStamp", "xs:dayTimeDuration", "xs:decimal", "xs:double", "xs:duration", "xs:ENTITIES", "xs:ENTITY", "xs:float", "xs:gDay", "xs:gMonth", "xs:gMonthDay", "xs:gYear", "xs:gYearMonth", "xs:hexBinary", "xs:ID", "xs:IDREF", "xs:IDREFS", "xs:int", "xs:integer", "xs:item", "xs:java", "xs:language", "xs:long", "xs:Name", "xs:NCName", "xs:negativeInteger", "xs:NMTOKEN", "xs:NMTOKENS", "xs:nonNegativeInteger", "xs:nonPositiveInteger", "xs:normalizedString", "xs:NOTATION", "xs:numeric", "xs:positiveInteger", "xs:precisionDecimal", "xs:QName", "xs:short", "xs:string", "xs:time", "xs:token", "xs:unsignedByte", "xs:unsignedInt", "xs:unsignedLong", "xs:unsignedShort", "xs:untyped", "xs:untypedAtomic", "xs:yearMonthDuration"];
            for (o = 0, s = O.length; o < s; o++) i[O[o]] = n;
            var l = ["eq", "ne", "lt", "le", "gt", "ge", ":=", "=", ">", ">=", "<", "<=", ".", "|", "?", "and", "or", "div", "idiv", "mod", "*", "/", "+", "-"];
            for (o = 0, s = l.length; o < s; o++) i[l[o]] = t;
            var c = ["self::", "attribute::", "child::", "descendant::", "descendant-or-self::", "parent::", "ancestor::", "ancestor-or-self::", "following::", "preceding::", "following-sibling::", "preceding-sibling::"];
            for (o = 0, s = c.length; o < s; o++) i[c[o]] = r;
            return i
        }();

    function XZ(e, t, n) {
        return t.tokenize = n, n(e, t)
    }

    function TZ(e, t) {
        var n = e.next(),
            r = !1,
            i = function(e) {
                return '"' === e.current() ? e.match(/^[^\"]+\"\:/, !1) : "'" === e.current() && e.match(/^[^\"]+\'\:/, !1)
            }(e);
        if ("<" == n) {
            if (e.match("!--", !0)) return XZ(e, t, zZ);
            if (e.match("![CDATA", !1)) return t.tokenize = ZZ, "tag";
            if (e.match("?", !1)) return XZ(e, t, EZ);
            var a = e.eat("/");
            e.eatSpace();
            for (var o, s = ""; o = e.eat(/[^\s\u00a0=<>\"\'\/?]/);) s += o;
            return XZ(e, t, function(e, t) {
                return function(n, r) {
                    return n.eatSpace(), t && n.eat(">") ? (AZ(r), r.tokenize = TZ, "tag") : (n.eat("/") || jZ(r, {
                        type: "tag",
                        name: e,
                        tokenize: TZ
                    }), n.eat(">") ? (r.tokenize = TZ, "tag") : (r.tokenize = YZ, "tag"))
                }
            }(s, a))
        }
        if ("{" == n) return jZ(t, {
            type: "codeblock"
        }), null;
        if ("}" == n) return AZ(t), null;
        if (IZ(t)) return ">" == n ? "tag" : "/" == n && e.eat(">") ? (AZ(t), "tag") : "variable";
        if (/\d/.test(n)) return e.match(/^\d*(?:\.\d*)?(?:E[+\-]?\d+)?/), "atom";
        if ("(" === n && e.eat(":")) return jZ(t, {
            type: "comment"
        }), XZ(e, t, RZ);
        if (i || '"' !== n && "'" !== n) {
            if ("$" === n) return XZ(e, t, qZ);
            if (":" === n && e.eat("=")) return "keyword";
            if ("(" === n) return jZ(t, {
                type: "paren"
            }), null;
            if (")" === n) return AZ(t), null;
            if ("[" === n) return jZ(t, {
                type: "bracket"
            }), null;
            if ("]" === n) return AZ(t), null;
            var O = _Z.propertyIsEnumerable(n) && _Z[n];
            if (i && '"' === n)
                for (;
                    '"' !== e.next(););
            if (i && "'" === n)
                for (;
                    "'" !== e.next(););
            O || e.eatWhile(/[\w\$_-]/);
            var l = e.eat(":");
            !e.eat(":") && l && e.eatWhile(/[\w\$_-]/), e.match(/^[ \t]*\(/, !1) && (r = !0);
            var c = e.current();
            return O = _Z.propertyIsEnumerable(c) && _Z[c], r && !O && (O = {
                    type: "function_call",
                    style: "def"
                }),
                function(e) {
                    return VZ(e, "xmlconstructor")
                }(t) ? (AZ(t), "variable") : ("element" != c && "attribute" != c && "axis_specifier" != O.type || jZ(t, {
                    type: "xmlconstructor"
                }), O ? O.style : "variable")
        }
        return XZ(e, t, WZ(n))
    }

    function RZ(e, t) {
        for (var n, r = !1, i = !1, a = 0; n = e.next();) {
            if (")" == n && r) {
                if (!(a > 0)) {
                    AZ(t);
                    break
                }
                a--
            } else ":" == n && i && a++;
            r = ":" == n, i = "(" == n
        }
        return "comment"
    }

    function WZ(e, t) {
        return function(n, r) {
            var i;
            if (function(e) {
                    return VZ(e, "string")
                }(r) && n.current() == e) return AZ(r), t && (r.tokenize = t), "string";
            if (jZ(r, {
                    type: "string",
                    name: e,
                    tokenize: WZ(e, t)
                }), n.match("{", !1) && UZ(r)) return r.tokenize = TZ, "string";
            for (; i = n.next();) {
                if (i == e) {
                    AZ(r), t && (r.tokenize = t);
                    break
                }
                if (n.match("{", !1) && UZ(r)) return r.tokenize = TZ, "string"
            }
            return "string"
        }
    }

    function qZ(e, t) {
        var n = /[\w\$_-]/;
        if (e.eat('"')) {
            for (;
                '"' !== e.next(););
            e.eat(":")
        } else e.eatWhile(n), e.match(":=", !1) || e.eat(":");
        return e.eatWhile(n), t.tokenize = TZ, "variable"
    }

    function YZ(e, t) {
        var n = e.next();
        return "/" == n && e.eat(">") ? (UZ(t) && AZ(t), IZ(t) && AZ(t), "tag") : ">" == n ? (UZ(t) && AZ(t), "tag") : "=" == n ? null : '"' == n || "'" == n ? XZ(e, t, WZ(n, YZ)) : (UZ(t) || jZ(t, {
            type: "attribute",
            tokenize: YZ
        }), e.eat(/[a-zA-Z_:]/), e.eatWhile(/[-a-zA-Z0-9_:.]/), e.eatSpace(), (e.match(">", !1) || e.match("/", !1)) && (AZ(t), t.tokenize = TZ), "attribute")
    }

    function zZ(e, t) {
        for (var n; n = e.next();)
            if ("-" == n && e.match("->", !0)) return t.tokenize = TZ, "comment"
    }

    function ZZ(e, t) {
        for (var n; n = e.next();)
            if ("]" == n && e.match("]", !0)) return t.tokenize = TZ, "comment"
    }

    function EZ(e, t) {
        for (var n; n = e.next();)
            if ("?" == n && e.match(">", !0)) return t.tokenize = TZ, "processingInstruction"
    }

    function IZ(e) {
        return VZ(e, "tag")
    }

    function UZ(e) {
        return VZ(e, "attribute")
    }

    function VZ(e, t) {
        return e.stack.length && e.stack[e.stack.length - 1].type == t
    }

    function jZ(e, t) {
        e.stack.push(t)
    }

    function AZ(e) {
        e.stack.pop();
        var t = e.stack.length && e.stack[e.stack.length - 1].tokenize;
        e.tokenize = t || TZ
    }
    const CZ = {
        startState: function() {
            return {
                tokenize: TZ,
                cc: [],
                stack: []
            }
        },
        token: function(e, t) {
            return e.eatSpace() ? null : t.tokenize(e, t)
        },
        languageData: {
            commentTokens: {
                block: {
                    open: "(:",
                    close: ":)"
                }
            }
        }
    };
    var GZ = Object.freeze({
        __proto__: null,
        xQuery: CZ
    });
    var LZ = function(e) {
            for (var t = {}, n = e.split(" "), r = 0; r < n.length; ++r) t[n[r]] = !0;
            return t
        }("Assert BackQuote D Defun Deriv For ForEach FromFile FromString Function Integrate InverseTaylor Limit LocalSymbols Macro MacroRule MacroRulePattern NIntegrate Rule RulePattern Subst TD TExplicitSum TSum Taylor Taylor1 Taylor2 Taylor3 ToFile ToStdout ToString TraceRule Until While"),
        NZ = "(?:[a-zA-Z\\$'][a-zA-Z0-9\\$']*)",
        DZ = new RegExp("(?:(?:\\.\\d+|\\d+\\.\\d*|\\d+)(?:[eE][+-]?\\d+)?)"),
        MZ = new RegExp(NZ),
        BZ = new RegExp(NZ + "?_" + NZ),
        FZ = new RegExp(NZ + "\\s*\\(");

    function HZ(e, t) {
        var n;
        if ('"' === (n = e.next())) return t.tokenize = JZ, t.tokenize(e, t);
        if ("/" === n) {
            if (e.eat("*")) return t.tokenize = KZ, t.tokenize(e, t);
            if (e.eat("/")) return e.skipToEnd(), "comment"
        }
        e.backUp(1);
        var r = e.match(/^(\w+)\s*\(/, !1);
        null !== r && LZ.hasOwnProperty(r[1]) && t.scopes.push("bodied");
        var i = eE(t);
        if ("bodied" === i && "[" === n && t.scopes.pop(), "[" !== n && "{" !== n && "(" !== n || t.scopes.push(n), ("[" === (i = eE(t)) && "]" === n || "{" === i && "}" === n || "(" === i && ")" === n) && t.scopes.pop(), ";" === n)
            for (;
                "bodied" === i;) t.scopes.pop(), i = eE(t);
        return e.match(/\d+ *#/, !0, !1) ? "qualifier" : e.match(DZ, !0, !1) ? "number" : e.match(BZ, !0, !1) ? "variableName.special" : e.match(/(?:\[|\]|{|}|\(|\))/, !0, !1) ? "bracket" : e.match(FZ, !0, !1) ? (e.backUp(1), "variableName.function") : e.match(MZ, !0, !1) ? "variable" : e.match(/(?:\\|\+|\-|\*|\/|,|;|\.|:|@|~|=|>|<|&|\||_|`|'|\^|\?|!|%|#)/, !0, !1) ? "operator" : "error"
    }

    function JZ(e, t) {
        for (var n, r = !1, i = !1; null != (n = e.next());) {
            if ('"' === n && !i) {
                r = !0;
                break
            }
            i = !i && "\\" === n
        }
        return r && !i && (t.tokenize = HZ), "string"
    }

    function KZ(e, t) {
        for (var n, r; null != (r = e.next());) {
            if ("*" === n && "/" === r) {
                t.tokenize = HZ;
                break
            }
            n = r
        }
        return "comment"
    }

    function eE(e) {
        var t = null;
        return e.scopes.length > 0 && (t = e.scopes[e.scopes.length - 1]), t
    }
    const tE = {
        startState: function() {
            return {
                tokenize: HZ,
                scopes: []
            }
        },
        token: function(e, t) {
            return e.eatSpace() ? null : t.tokenize(e, t)
        },
        indent: function(e, t, n) {
            if (e.tokenize !== HZ && null !== e.tokenize) return null;
            var r = 0;
            return "]" !== t && "];" !== t && "}" !== t && "};" !== t && ");" !== t || (r = -1), (e.scopes.length + r) * n.unit
        },
        languageData: {
            electricInput: /[{}\[\]()\;]/,
            commentTokens: {
                line: "//",
                block: {
                    open: "/*",
                    close: "*/"
                }
            }
        }
    };
    var nE = Object.freeze({
            __proto__: null,
            yacas: tE
        }),
        rE = new RegExp("\\b((" + ["true", "false", "on", "off", "yes", "no"].join(")|(") + "))$", "i");
    const iE = {
        token: function(e, t) {
            var n = e.peek(),
                r = t.escaped;
            if (t.escaped = !1, "#" == n && (0 == e.pos || /\s/.test(e.string.charAt(e.pos - 1)))) return e.skipToEnd(), "comment";
            if (e.match(/^('([^']|\\.)*'?|"([^"]|\\.)*"?)/)) return "string";
            if (t.literal && e.indentation() > t.keyCol) return e.skipToEnd(), "string";
            if (t.literal && (t.literal = !1), e.sol()) {
                if (t.keyCol = 0, t.pair = !1, t.pairStart = !1, e.match("---")) return "def";
                if (e.match("...")) return "def";
                if (e.match(/^\s*-\s+/)) return "meta"
            }
            if (e.match(/^(\{|\}|\[|\])/)) return "{" == n ? t.inlinePairs++ : "}" == n ? t.inlinePairs-- : "[" == n ? t.inlineList++ : t.inlineList--, "meta";
            if (t.inlineList > 0 && !r && "," == n) return e.next(), "meta";
            if (t.inlinePairs > 0 && !r && "," == n) return t.keyCol = 0, t.pair = !1, t.pairStart = !1, e.next(), "meta";
            if (t.pairStart) {
                if (e.match(/^\s*(\||\>)\s*/)) return t.literal = !0, "meta";
                if (e.match(/^\s*(\&|\*)[a-z0-9\._-]+\b/i)) return "variable";
                if (0 == t.inlinePairs && e.match(/^\s*-?[0-9\.\,]+\s?$/)) return "number";
                if (t.inlinePairs > 0 && e.match(/^\s*-?[0-9\.\,]+\s?(?=(,|}))/)) return "number";
                if (e.match(rE)) return "keyword"
            }
            return !t.pair && e.match(/^\s*(?:[,\[\]{}&*!|>'"%@`][^\s'":]|[^,\[\]{}#&*!|>'"%@`])[^#]*?(?=\s*:($|\s))/) ? (t.pair = !0, t.keyCol = e.indentation(), "atom") : t.pair && e.match(/^:\s*/) ? (t.pairStart = !0, "meta") : (t.pairStart = !1, t.escaped = "\\" == n, e.next(), null)
        },
        startState: function() {
            return {
                pair: !1,
                pairStart: !1,
                keyCol: 0,
                inlinePairs: 0,
                inlineList: 0,
                literal: !1,
                escaped: !1
            }
        },
        languageData: {
            commentTokens: {
                line: "#"
            }
        }
    };
    var aE = Object.freeze({
        __proto__: null,
        yaml: iE
    });

    function oE(e) {
        var t, n;
        e ? (t = /^(exx?|(ld|cp)([di]r?)?|[lp]ea|pop|push|ad[cd]|cpl|daa|dec|inc|neg|sbc|sub|and|bit|[cs]cf|x?or|res|set|r[lr]c?a?|r[lr]d|s[lr]a|srl|djnz|nop|[de]i|halt|im|in([di]mr?|ir?|irx|2r?)|ot(dmr?|[id]rx|imr?)|out(0?|[di]r?|[di]2r?)|tst(io)?|slp)(\.([sl]?i)?[sl])?\b/i, n = /^(((call|j[pr]|rst|ret[in]?)(\.([sl]?i)?[sl])?)|(rs|st)mix)\b/i) : (t = /^(exx?|(ld|cp|in)([di]r?)?|pop|push|ad[cd]|cpl|daa|dec|inc|neg|sbc|sub|and|bit|[cs]cf|x?or|res|set|r[lr]c?a?|r[lr]d|s[lr]a|srl|djnz|nop|rst|[de]i|halt|im|ot[di]r|out[di]?)\b/i, n = /^(call|j[pr]|ret[in]?|b_?(call|jump))\b/i);
        var r = /^(af?|bc?|c|de?|e|hl?|l|i[xy]?|r|sp)\b/i,
            i = /^(n?[zc]|p[oe]?|m)\b/i,
            a = /^([hl][xy]|i[xy][hl]|slia|sll)\b/i,
            o = /^([\da-f]+h|[0-7]+o|[01]+b|\d+d?)\b/i;
        return {
            startState: function() {
                return {
                    context: 0
                }
            },
            token: function(s, O) {
                if (s.column() || (O.context = 0), s.eatSpace()) return null;
                var l;
                if (s.eatWhile(/\w/)) {
                    if (e && s.eat(".") && s.eatWhile(/\w/), l = s.current(), !s.indentation()) return s.match(o) ? "number" : null;
                    if ((1 == O.context || 4 == O.context) && r.test(l)) return O.context = 4, "variable";
                    if (2 == O.context && i.test(l)) return O.context = 4, "variableName.special";
                    if (t.test(l)) return O.context = 1, "keyword";
                    if (n.test(l)) return O.context = 2, "keyword";
                    if (4 == O.context && o.test(l)) return "number";
                    if (a.test(l)) return "error"
                } else {
                    if (s.eat(";")) return s.skipToEnd(), "comment";
                    if (s.eat('"')) {
                        for (;
                            (l = s.next()) && '"' != l;) "\\" == l && s.next();
                        return "string"
                    }
                    if (s.eat("'")) {
                        if (s.match(/\\?.'/)) return "number"
                    } else if (s.eat(".") || s.sol() && s.eat("#")) {
                        if (O.context = 5, s.eatWhile(/\w/)) return "def"
                    } else if (s.eat("$")) {
                        if (s.eatWhile(/[\da-f]/i)) return "number"
                    } else if (s.eat("%")) {
                        if (s.eatWhile(/[01]/)) return "number"
                    } else s.next()
                }
                return null
            }
        }
    }
    const sE = oE(!1),
        OE = oE(!0);
    var lE = Object.freeze({
        __proto__: null,
        z80: sE,
        ez80: OE
    });

    function cE(e) {
        return {
            startState: mE,
            copyState: gE,
            token: (t = e, function(e, n) {
                if (e.match(fE(t.brackets), !0, !0)) return "bracket";
                if (!n.inComment) {
                    if (e.match(/\/\*[^\*\/]*/, !0, !0)) return n.inComment = !0, "comment";
                    if (e.match(fE(t.singlecomment), !0, !0)) return e.skipToEnd(), "comment"
                }
                if (n.inComment) return e.match(/[^\*\/]*\*\//, !0, !0) ? n.inComment = !1 : e.skipToEnd(), "comment";
                if (!n.inString && e.match(/\"(\\\"|[^\"])*/, !0, !0)) return n.inString = !0, "string";
                if (n.inString) return e.match(/[^\"]*\"/, !0, !0) ? n.inString = !1 : e.skipToEnd(), "string";
                if (t.keywords && e.match(hE(t.keywords), !0, !0)) return "keyword";
                if (e.match(hE(t.options), !0, !0)) return "keyword";
                if (e.match(hE(t.arcsWords), !0, !0)) return "keyword";
                if (e.match(fE(t.arcsOthers), !0, !0)) return "keyword";
                if (t.operators && e.match(fE(t.operators), !0, !0)) return "operator";
                if (t.constants && e.match(fE(t.constants), !0, !0)) return "variable";
                if (!t.inAttributeList && t.attributes && e.match("[", !0, !0)) return t.inAttributeList = !0, "bracket";
                if (t.inAttributeList) {
                    if (null !== t.attributes && e.match(hE(t.attributes), !0, !0)) return "attribute";
                    if (e.match("]", !0, !0)) return t.inAttributeList = !1, "bracket"
                }
                return e.next(), null
            }),
            languageData: {
                commentTokens: {
                    line: "#",
                    block: {
                        open: "/*",
                        close: "*/"
                    }
                }
            }
        };
        var t
    }
    const uE = cE({
            keywords: ["msc"],
            options: ["hscale", "width", "arcgradient", "wordwraparcs"],
            constants: ["true", "false", "on", "off"],
            attributes: ["label", "idurl", "id", "url", "linecolor", "linecolour", "textcolor", "textcolour", "textbgcolor", "textbgcolour", "arclinecolor", "arclinecolour", "arctextcolor", "arctextcolour", "arctextbgcolor", "arctextbgcolour", "arcskip"],
            brackets: ["\\{", "\\}"],
            arcsWords: ["note", "abox", "rbox", "box"],
            arcsOthers: ["\\|\\|\\|", "\\.\\.\\.", "---", "--", "<->", "==", "<<=>>", "<=>", "\\.\\.", "<<>>", "::", "<:>", "->", "=>>", "=>", ">>", ":>", "<-", "<<=", "<=", "<<", "<:", "x-", "-x"],
            singlecomment: ["//", "#"],
            operators: ["="]
        }),
        dE = cE({
            keywords: null,
            options: ["hscale", "width", "arcgradient", "wordwraparcs", "wordwrapentities", "watermark"],
            constants: ["true", "false", "on", "off", "auto"],
            attributes: null,
            brackets: ["\\{", "\\}"],
            arcsWords: ["note", "abox", "rbox", "box", "alt", "else", "opt", "break", "par", "seq", "strict", "neg", "critical", "ignore", "consider", "assert", "loop", "ref", "exc"],
            arcsOthers: ["\\|\\|\\|", "\\.\\.\\.", "---", "--", "<->", "==", "<<=>>", "<=>", "\\.\\.", "<<>>", "::", "<:>", "->", "=>>", "=>", ">>", ":>", "<-", "<<=", "<=", "<<", "<:", "x-", "-x"],
            singlecomment: ["//", "#"],
            operators: ["="]
        }),
        pE = cE({
            keywords: ["msc", "xu"],
            options: ["hscale", "width", "arcgradient", "wordwraparcs", "wordwrapentities", "watermark"],
            constants: ["true", "false", "on", "off", "auto"],
            attributes: ["label", "idurl", "id", "url", "linecolor", "linecolour", "textcolor", "textcolour", "textbgcolor", "textbgcolour", "arclinecolor", "arclinecolour", "arctextcolor", "arctextcolour", "arctextbgcolor", "arctextbgcolour", "arcskip", "title", "deactivate", "activate", "activation"],
            brackets: ["\\{", "\\}"],
            arcsWords: ["note", "abox", "rbox", "box", "alt", "else", "opt", "break", "par", "seq", "strict", "neg", "critical", "ignore", "consider", "assert", "loop", "ref", "exc"],
            arcsOthers: ["\\|\\|\\|", "\\.\\.\\.", "---", "--", "<->", "==", "<<=>>", "<=>", "\\.\\.", "<<>>", "::", "<:>", "->", "=>>", "=>", ">>", ":>", "<-", "<<=", "<=", "<<", "<:", "x-", "-x"],
            singlecomment: ["//", "#"],
            operators: ["="]
        });

    function hE(e) {
        return new RegExp("^\\b(" + e.join("|") + ")\\b", "i")
    }

    function fE(e) {
        return new RegExp("^(?:" + e.join("|") + ")", "i")
    }

    function mE() {
        return {
            inComment: !1,
            inString: !1,
            inAttributeList: !1,
            inScript: !1
        }
    }

    function gE(e) {
        return {
            inComment: e.inComment,
            inString: e.inString,
            inAttributeList: e.inAttributeList,
            inScript: e.inScript
        }
    }
    var QE = Object.freeze({
        __proto__: null,
        mscgen: uE,
        msgenny: dE,
        xu: pE
    });
    const $E = SQ({
        start: [{
            regex: /[+\-]?(?:nan(?::0x[0-9a-fA-F]+)?|infinity|inf|0x[0-9a-fA-F]+\.?[0-9a-fA-F]*p[+\/-]?\d+|\d+(?:\.\d*)?[eE][+\-]?\d*|\d+\.\d*|0x[0-9a-fA-F]+|\d+)/,
            token: "number"
        }, {
            regex: /mut|nop|block|if|then|else|loop|br_if|br_table|br|call(_indirect)?|drop|end|return(_call(_indirect)?)?|local\.(get|set|tee)|global\.(get|set)|i(32|64)\.(store(8|16)|(load(8|16)_[su]))|i64\.(load32_[su]|store32)|[fi](32|64)\.(const|load|store)|f(32|64)\.(abs|add|ceil|copysign|div|eq|floor|[gl][et]|max|min|mul|nearest|neg?|sqrt|sub|trunc)|i(32|64)\.(a[dn]d|c[lt]z|(div|rem)_[su]|eqz?|[gl][te]_[su]|mul|ne|popcnt|rot[lr]|sh(l|r_[su])|sub|x?or)|i64\.extend_[su]_i32|i32\.wrap_i64|i(32|64)\.trunc_f(32|64)_[su]|f(32|64)\.convert_i(32|64)_[su]|f64\.promote_f32|f32\.demote_f64|f32\.reinterpret_i32|i32\.reinterpret_f32|f64\.reinterpret_i64|i64\.reinterpret_f64|select|unreachable|current_memory|memory(\.((atomic\.(notify|wait(32|64)))|grow|size))?|type|\bfunc\b|param|result|local|global|module|start|elem|data|align|offset|import|export|i64\.atomic\.(load32_u|store32|rmw32\.(a[dn]d|sub|x?or|(cmp)?xchg)_u)|i(32|64)\.atomic\.(load((8|16)_u)?|store(8|16)?|rmw(\.(a[dn]d|sub|x?or|(cmp)?xchg)|(8|16)\.(a[dn]d|sub|x?or|(cmp)?xchg)_u))|v128\.(load|store|const|not|andnot|and|or|xor|bitselect)|i(8x16|16x8|32x4|64x2)\.(shl|shr_[su])|i(8x16|16x8)\.(extract_lane_[su]|((add|sub)_saturate_[su])|avgr_u)|(i(8x16|16x8|32x4|64x2)|f(32x4|64x2))\.(splat|replace_lane|neg|add|sub)|i(8x16|16x8|32x4)\.(eq|ne|([lg][te]_[su])|abs|any_true|all_true|bitmask|((min|max)_[su]))|f(32x4|64x2)\.(eq|ne|[lg][te]|abs|sqrt|mul|div|min|max)|[fi](32x4|64x2)\.extract_lane|v8x16\.(shuffle|swizzle)|i16x8\.(load8x8_[su]|narrow_i32x4_[su]|widen_(low|high)_i8x16_[su]|mul)|i32x4\.(load16x4_[su]|widen_(low|high)_i16x8_[su]|mul|trunc_sat_f32x4_[su])|i64x2\.(load32x2_[su]|mul)|(v(8x16|16x8|32x4|64x2)\.load_splat)|i8x16\.narrow_i16x8_[su]|f32x4\.convert_i32x4_[su]|ref\.(func|(is_)?null)|\bextern\b|table(\.(size|get|set|size|grow|fill|init|copy))?/,
            token: "keyword"
        }, {
            regex: /\b(funcref|externref|[fi](32|64))\b/,
            token: "atom"
        }, {
            regex: /\$([a-zA-Z0-9_`\+\-\*\/\\\^~=<>!\?@#$%&|:\.]+)/,
            token: "variable"
        }, {
            regex: /"(?:[^"\\\x00-\x1f\x7f]|\\[nt\\'"]|\\[0-9a-fA-F][0-9a-fA-F])*"/,
            token: "string"
        }, {
            regex: /\(;.*?/,
            token: "comment",
            next: "comment"
        }, {
            regex: /;;.*$/,
            token: "comment"
        }, {
            regex: /\(/,
            indent: !0
        }, {
            regex: /\)/,
            dedent: !0
        }],
        comment: [{
            regex: /.*?;\)/,
            token: "comment",
            next: "start"
        }, {
            regex: /.*/,
            token: "comment"
        }],
        meta: {
            dontIndentStates: ["comment"]
        }
    });
    var bE = Object.freeze({
        __proto__: null,
        wast: $E
    })
}();