(function(p) { "object" == typeof exports && "object" == typeof module ? p(require("../../lib/codemirror")) : "function" == typeof define && define.amd ? define(["../../lib/codemirror"], p) : p(CodeMirror) })(function(p) {
	p.defineMode("javascript", function(oa, t) {
		function q(a, c, e) { E = a; I = e; return c } function w(a, c) {
			var e = a.next(); if ('"' == e || "'" == e) return c.tokenize = pa(e), c.tokenize(a, c); if ("." == e && a.match(/^\d+(?:[eE][+\-]?\d+)?/)) return q("number", "number"); if ("." == e && a.match("..")) return q("spread", "meta"); if (/[\[\]{}\(\),;\:\.]/.test(e)) return q(e);
			if ("\x3d" == e && a.eat("\x3e")) return q("\x3d\x3e", "operator"); if ("0" == e && a.eat(/x/i)) return a.eatWhile(/[\da-f]/i), q("number", "number"); if (/\d/.test(e)) return a.match(/^\d*(?:\.\d*)?(?:[eE][+\-]?\d+)?/), q("number", "number"); if ("/" == e) {
				if (a.eat("*")) return c.tokenize = J, J(a, c); if (a.eat("/")) return a.skipToEnd(), q("comment", "comment"); if ("operator" == c.lastType || "keyword c" == c.lastType || "sof" == c.lastType || /^[\[{}\(,;:]$/.test(c.lastType)) {
					a: for (var e = !1, d, b = !1; null != (d = a.next());) {
						if (!e) {
							if ("/" == d && !b) break a;
							"[" == d ? b = !0 : b && "]" == d && (b = !1)
						} e = !e && "\\" == d
					} a.match(/^\b(([gimyu])(?![gimyu]*\2))+\b/); return q("regexp", "string-2")
				} a.eatWhile(K); return q("operator", "operator", a.current())
			} if ("`" == e) return c.tokenize = Q, Q(a, c); if ("#" == e) return a.skipToEnd(), q("error", "error"); if (K.test(e)) return a.eatWhile(K), q("operator", "operator", a.current()); if (R.test(e)) return a.eatWhile(R), e = a.current(), (d = ba.propertyIsEnumerable(e) && ba[e]) && "." != c.lastType ? q(d.type, d.style, e) : q("variable", "variable", e)
		} function pa(a) {
			return function(c,
				e) { var d = !1, b; if (L && "@" == c.peek() && c.match(qa)) return e.tokenize = w, q("jsonld-keyword", "meta"); for (; null != (b = c.next()) && (b != a || d);)d = !d && "\\" == b; d || (e.tokenize = w); return q("string", "string") }
		} function J(a, c) { for (var e = !1, d; d = a.next();) { if ("/" == d && e) { c.tokenize = w; break } e = "*" == d } return q("comment", "comment") } function Q(a, c) { for (var e = !1, d; null != (d = a.next());) { if (!e && ("`" == d || "$" == d && a.eat("{"))) { c.tokenize = w; break } e = !e && "\\" == d } return q("quasi", "string-2", a.current()) } function S(a, c) {
			c.fatArrowAt && (c.fatArrowAt =
				null); var e = a.string.indexOf("\x3d\x3e", a.start); if (!(0 > e)) { for (var d = 0, b = !1, e = e - 1; 0 <= e; --e) { var f = a.string.charAt(e), g = "([{}])".indexOf(f); if (0 <= g && 3 > g) { if (!d) { ++e; break } if (0 == --d) break } else if (3 <= g && 6 > g) ++d; else if (R.test(f)) b = !0; else { if (/["'\/]/.test(f)) return; if (b && !d) { ++e; break } } } b && !d && (c.fatArrowAt = e) }
		} function ca(a, c, b, d, f, h) { this.indented = a; this.column = c; this.type = b; this.prev = f; this.info = h; null != d && (this.align = d) } function g() { for (var a = arguments.length - 1; 0 <= a; a--)f.cc.push(arguments[a]) }
		function b() { g.apply(null, arguments); return !0 } function x(a) { function c(c) { for (; c; c = c.next)if (c.name == a) return !0; return !1 } var b = f.state; b.context ? (f.marked = "def", c(b.localVars) || (b.localVars = { name: a, next: b.localVars })) : !c(b.globalVars) && t.globalVars && (b.globalVars = { name: a, next: b.globalVars }) } function y() { f.state.context = { prev: f.state.context, vars: f.state.localVars }; f.state.localVars = ra } function z() { f.state.localVars = f.state.context.vars; f.state.context = f.state.context.prev } function l(a, c) {
			var b = function() {
				var b =
					f.state, e = b.indented; if ("stat" == b.lexical.type) e = b.lexical.indented; else for (var h = b.lexical; h && ")" == h.type && h.align; h = h.prev)e = h.indented; b.lexical = new ca(e, f.stream.column(), a, null, b.lexical, c)
			}; b.lex = !0; return b
		} function k() { var a = f.state; a.lexical.prev && (")" == a.lexical.type && (a.indented = a.lexical.indented), a.lexical = a.lexical.prev) } function m(a) { function c(e) { return e == a ? b() : ";" == a ? g() : b(c) } return c } function r(a, c) {
			return "var" == a ? b(l("vardef", c.length), T, m(";"), k) : "keyword a" == a ? b(l("form"), n,
				r, k) : "keyword b" == a ? b(l("form"), r, k) : "{" == a ? b(l("}"), U, k) : ";" == a ? b() : "if" == a ? ("else" == f.state.lexical.info && f.state.cc[f.state.cc.length - 1] == k && f.state.cc.pop()(), b(l("form"), n, r, k, da)) : "function" == a ? b(v) : "for" == a ? b(l("form"), ea, r, k) : "variable" == a ? b(l("stat"), sa) : "switch" == a ? b(l("form"), n, l("}", "switch"), m("{"), U, k, k) : "case" == a ? b(n, m(":")) : "default" == a ? b(m(":")) : "catch" == a ? b(l("form"), y, m("("), V, m(")"), r, k, z) : "module" == a ? b(l("form"), y, ta, z, k) : "class" == a ? b(l("form"), ua, k) : "export" == a ? b(l("form"), va,
					k) : "import" == a ? b(l("form"), wa, k) : g(l("stat"), n, m(";"), k)
		} function n(a) { return fa(a, !1) } function u(a) { return fa(a, !0) } function fa(a, c) {
			if (f.state.fatArrowAt == f.stream.start) { var e = c ? ga : ha; if ("(" == a) return b(y, l(")"), F(A, ")"), k, m("\x3d\x3e"), e, z); if ("variable" == a) return g(y, A, m("\x3d\x3e"), e, z) } e = c ? W : M; return xa.hasOwnProperty(a) ? b(e) : "function" == a ? b(v, e) : "keyword c" == a ? b(c ? ia : X) : "(" == a ? b(l(")"), X, N, m(")"), k, e) : "operator" == a || "spread" == a ? b(c ? u : n) : "[" == a ? b(l("]"), ya, k, e) : "{" == a ? G(za, "}", null, e) : "quasi" ==
				a ? g(O, e) : b()
		} function X(a) { return a.match(/[;\}\)\],]/) ? g() : g(n) } function ia(a) { return a.match(/[;\}\)\],]/) ? g() : g(u) } function M(a, c) { return "," == a ? b(n) : W(a, c, !1) } function W(a, c, e) { var d = 0 == e ? M : W, f = 0 == e ? n : u; if ("\x3d\x3e" == a) return b(y, e ? ga : ha, z); if ("operator" == a) return /\+\+|--/.test(c) ? b(d) : "?" == c ? b(n, m(":"), f) : b(f); if ("quasi" == a) return g(O, d); if (";" != a) { if ("(" == a) return G(u, ")", "call", d); if ("." == a) return b(Aa, d); if ("[" == a) return b(l("]"), X, m("]"), k, d) } } function O(a, c) {
			return "quasi" != a ? g() : "${" != c.slice(c.length -
				2) ? b(O) : b(n, Ba)
		} function Ba(a) { if ("}" == a) return f.marked = "string-2", f.state.tokenize = Q, b(O) } function ha(a) { S(f.stream, f.state); return g("{" == a ? r : n) } function ga(a) { S(f.stream, f.state); return g("{" == a ? r : u) } function sa(a) { return ":" == a ? b(k, r) : g(M, m(";"), k) } function Aa(a) { if ("variable" == a) return f.marked = "property", b() } function za(a, c) {
			if ("variable" == a || "keyword" == f.style) return f.marked = "property", "get" == c || "set" == c ? b(Ca) : b(H); if ("number" == a || "string" == a) return f.marked = L ? "property" : f.style + " property",
				b(H); if ("jsonld-keyword" == a) return b(H); if ("[" == a) return b(n, m("]"), H)
		} function Ca(a) { if ("variable" != a) return g(H); f.marked = "property"; return b(v) } function H(a) { if (":" == a) return b(u); if ("(" == a) return g(v) } function F(a, c) { function e(d) { return "," == d ? (d = f.state.lexical, "call" == d.info && (d.pos = (d.pos || 0) + 1), b(a, e)) : d == c ? b() : b(m(c)) } return function(d) { return d == c ? b() : g(a, e) } } function G(a, c, e) { for (var d = 3; d < arguments.length; d++)f.cc.push(arguments[d]); return b(l(c, e), F(a, c), k) } function U(a) {
			return "}" == a ?
				b() : g(r, U)
		} function ja(a) { if (ka && ":" == a) return b(Da) } function Da(a) { if ("variable" == a) return f.marked = "variable-3", b() } function T() { return g(A, ja, Y, Ea) } function A(a, c) { if ("variable" == a) return x(c), b(); if ("[" == a) return G(A, "]"); if ("{" == a) return G(Fa, "}") } function Fa(a, c) { if ("variable" == a && !f.stream.match(/^\s*:/, !1)) return x(c), b(Y); "variable" == a && (f.marked = "property"); return b(m(":"), A, Y) } function Y(a, c) { if ("\x3d" == c) return b(u) } function Ea(a) { if ("," == a) return b(T) } function da(a, c) {
			if ("keyword b" ==
				a && "else" == c) return b(l("form", "else"), r, k)
		} function ea(a) { if ("(" == a) return b(l(")"), Ga, m(")"), k) } function Ga(a) { return "var" == a ? b(T, m(";"), P) : ";" == a ? b(P) : "variable" == a ? b(Ha) : g(n, m(";"), P) } function Ha(a, c) { return "in" == c || "of" == c ? (f.marked = "keyword", b(n)) : b(M, P) } function P(a, c) { return ";" == a ? b(la) : "in" == c || "of" == c ? (f.marked = "keyword", b(n)) : g(n, m(";"), la) } function la(a) { ")" != a && b(n) } function v(a, c) {
			if ("*" == c) return f.marked = "keyword", b(v); if ("variable" == a) return x(c), b(v); if ("(" == a) return b(y, l(")"),
				F(V, ")"), k, r, z)
		} function V(a) { return "spread" == a ? b(V) : g(A, ja) } function ua(a, c) { if ("variable" == a) return x(c), b(ma) } function ma(a, c) { if ("extends" == c) return b(n, ma); if ("{" == a) return b(l("}"), B, k) } function B(a, c) { if ("variable" == a || "keyword" == f.style) { if ("static" == c) return f.marked = "keyword", b(B); f.marked = "property"; return "get" == c || "set" == c ? b(Ia, v, B) : b(v, B) } if ("*" == c) return f.marked = "keyword", b(B); if (";" == a) return b(B); if ("}" == a) return b() } function Ia(a) {
			if ("variable" != a) return g(); f.marked = "property";
			return b()
		} function ta(a, c) { if ("string" == a) return b(r); if ("variable" == a) return x(c), b(Z) } function va(a, c) { return "*" == c ? (f.marked = "keyword", b(Z, m(";"))) : "default" == c ? (f.marked = "keyword", b(n, m(";"))) : g(r) } function wa(a) { return "string" == a ? b() : g(aa, Z) } function aa(a, c) { if ("{" == a) return G(aa, "}"); "variable" == a && x(c); "*" == c && (f.marked = "keyword"); return b(Ja) } function Ja(a, c) { if ("as" == c) return f.marked = "keyword", b(aa) } function Z(a, c) { if ("from" == c) return f.marked = "keyword", b(n) } function ya(a) {
			return "]" == a ?
				b() : g(u, Ka)
		} function Ka(a) { return "for" == a ? g(N, m("]")) : "," == a ? b(F(ia, "]")) : g(F(u, "]")) } function N(a) { if ("for" == a) return b(ea, N); if ("if" == a) return b(n, N) } var C = oa.indentUnit, na = t.statementIndent, L = t.jsonld, D = t.json || L, ka = t.typescript, R = t.wordCharacters || /[\w$\xa1-\uffff]/, ba = function() {
			function a(a) { return { type: a, style: "keyword" } } var c = a("keyword a"), b = a("keyword b"), d = a("keyword c"), f = a("operator"), h = { type: "atom", style: "atom" }, c = {
				"if": a("if"), "while": c, "with": c, "else": b, "do": b, "try": b, "finally": b,
				"return": d, "break": d, "continue": d, "new": d, "delete": d, "throw": d, "debugger": d, "var": a("var"), "const": a("var"), let: a("var"), "function": a("function"), "catch": a("catch"), "for": a("for"), "switch": a("switch"), "case": a("case"), "default": a("default"), "in": f, "typeof": f, "instanceof": f, "true": h, "false": h, "null": h, undefined: h, NaN: h, Infinity: h, "this": a("this"), module: a("module"), "class": a("class"), "super": a("atom"), yield: d, "export": a("export"), "import": a("import"), "extends": d
			}; if (ka) {
				var b = { type: "variable", style: "variable-3" },
				b = { "interface": a("interface"), "extends": a("extends"), constructor: a("constructor"), "public": a("public"), "private": a("private"), "protected": a("protected"), "static": a("static"), string: b, number: b, bool: b, any: b }, g; for (g in b) c[g] = b[g]
			} return c
		}(), K = /[+\-*&%=<>!?|~^]/, qa = /^@(context|id|value|language|type|container|list|set|reverse|index|base|vocab|graph)"/, E, I, xa = { atom: !0, number: !0, variable: !0, string: !0, regexp: !0, "this": !0, "jsonld-keyword": !0 }, f = { state: null, column: null, marked: null, cc: null }, ra = {
			name: "this",
			next: { name: "arguments" }
		}; k.lex = !0; return {
			startState: function(a) { a = { tokenize: w, lastType: "sof", cc: [], lexical: new ca((a || 0) - C, 0, "block", !1), localVars: t.localVars, context: t.localVars && { vars: t.localVars }, indented: 0 }; t.globalVars && "object" == typeof t.globalVars && (a.globalVars = t.globalVars); return a }, token: function(a, b) {
				a.sol() && (b.lexical.hasOwnProperty("align") || (b.lexical.align = !1), b.indented = a.indentation(), S(a, b)); if (b.tokenize != J && a.eatSpace()) return null; var e = b.tokenize(a, b); if ("comment" == E) return e;
				b.lastType = "operator" != E || "++" != I && "--" != I ? E : "incdec"; a: { var d = E, g = I, h = b.cc; f.state = b; f.stream = a; f.marked = null; f.cc = h; f.style = e; b.lexical.hasOwnProperty("align") || (b.lexical.align = !0); for (; ;)if ((h.length ? h.pop() : D ? n : r)(d, g)) { for (; h.length && h[h.length - 1].lex;)h.pop()(); if (f.marked) { e = f.marked; break a } if (d = "variable" == d) b: { for (d = b.localVars; d; d = d.next)if (d.name == g) { d = !0; break b } for (h = b.context; h; h = h.prev)for (d = h.vars; d; d = d.next)if (d.name == g) { d = !0; break b } d = void 0 } if (d) { e = "variable-2"; break a } break a } } return e
			},
			indent: function(a, b) {
				if (a.tokenize == J) return p.Pass; if (a.tokenize != w) return 0; var e = b && b.charAt(0), d = a.lexical; if (!/^\s*else\b/.test(b)) for (var f = a.cc.length - 1; 0 <= f; --f) { var g = a.cc[f]; if (g == k) d = d.prev; else if (g != da) break } "stat" == d.type && "}" == e && (d = d.prev); na && ")" == d.type && "stat" == d.prev.type && (d = d.prev); f = d.type; g = e == f; return "vardef" == f ? d.indented + ("operator" == a.lastType || "," == a.lastType ? d.info + 1 : 0) : "form" == f && "{" == e ? d.indented : "form" == f ? d.indented + C : "stat" == f ? (e = d.indented, d = "operator" == a.lastType ||
					"," == a.lastType || K.test(b.charAt(0)) || /[,.]/.test(b.charAt(0)), e + (d ? na || C : 0)) : "switch" != d.info || g || 0 == t.doubleIndentSwitch ? d.align ? d.column + (g ? 0 : 1) : d.indented + (g ? 0 : C) : d.indented + (/^(?:case|default)\b/.test(b) ? C : 2 * C)
			}, electricInput: /^\s*(?:case .*?:|default:|\{|\})$/, blockCommentStart: D ? null : "/*", blockCommentEnd: D ? null : "*/", lineComment: D ? null : "//", fold: "brace", closeBrackets: "()[]{}''\"\"``", helperType: D ? "json" : "javascript", jsonldMode: L, jsonMode: D
		}
	}); p.registerHelper("wordChars", "javascript", /[\w$]/);
	p.defineMIME("text/javascript", "javascript"); p.defineMIME("text/ecmascript", "javascript"); p.defineMIME("application/javascript", "javascript"); p.defineMIME("application/x-javascript", "javascript"); p.defineMIME("application/ecmascript", "javascript"); p.defineMIME("application/json", { name: "javascript", json: !0 }); p.defineMIME("application/x-json", { name: "javascript", json: !0 }); p.defineMIME("application/ld+json", { name: "javascript", jsonld: !0 }); p.defineMIME("text/typescript", { name: "javascript", typescript: !0 });
	p.defineMIME("application/typescript", { name: "javascript", typescript: !0 })
});