!function (e, t) { "object" == typeof exports && "undefined" != typeof module ? module.exports = t() : "function" == typeof define && define.amd ? define(t) : (e = e || self).CodeMirror = t() }(this, function () { "use strict"; var e = navigator.userAgent , t = navigator.platform , d = /gecko\/\d/i.test(e) , n = /MSIE \d/.test(e) , r = /Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(e) , i = /Edge\/(\d+)/.exec(e) , w = n || r || i , v = w && (n ? document.documentMode || 6 : +(i || r)[1]) , f = !i && /WebKit\//.test(e) , r = f && /Qt\/\d+\.\d+/.test(e) , o = !i && /Chrome\//.test(e) , p = /Opera\//.test(e) , c = /Apple Computer/.test(navigator.vendor) , l = /Mac OS X 1\d\D([8-9]|\d\d)\D/.test(e) , u = /PhantomJS/.test(e) , s = !i && /AppleWebKit/.test(e) && /Mobile\/\w+/.test(e) , a = /Android/.test(e) , h = s || a || /webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(e) , g = s || /Mac/.test(t) , m = /\bCrOS\b/.test(e) , y = /win/i.test(t) , e = p && e.match(/Version\/(\d*\.\d*)/); (e = e && Number(e[1])) && 15 <= e && (f = !(p = !1)); var b = g && (r || p && (null == e || e < 12.11)) , x = d || w && 9 <= v; function C(e) { return new RegExp("(^|\\s)" + e + "(?:$|\\s)\\s*") } var S, L = function (e, t) { var n = e.className , r = C(t).exec(n); r && (t = n.slice(r.index + r[0].length), e.className = n.slice(0, r.index) + (t ? r[1] + t : "")) }; function k(e) { for (var t = e.childNodes.length; 0 < t; --t) e.removeChild(e.firstChild); return e } function T(e, t) { return k(e).appendChild(t) } function M(e, t, n, r) { var i = document.createElement(e); if (n && (i.className = n), r && (i.style.cssText = r), "string" == typeof t) i.appendChild(document.createTextNode(t)); else if (t) for (var o = 0; o < t.length; ++o) i.appendChild(t[o]); return i } function N(e, t, n, r) { r = M(e, t, n, r); return r.setAttribute("role", "presentation"), r } function A(e, t) { if (3 == t.nodeType && (t = t.parentNode), e.contains) return e.contains(t); do { if (11 == t.nodeType && (t = t.host), t == e) return !0 } while (t = t.parentNode) } function O() { var t; try { t = document.activeElement } catch (e) { t = document.body || null } for (; t && t.shadowRoot && t.shadowRoot.activeElement;) t = t.shadowRoot.activeElement; return t } function D(e, t) { var n = e.className; C(t).test(n) || (e.className += (n ? " " : "") + t) } function W(e, t) { for (var n = e.split(" "), r = 0; r < n.length; r++) n[r] && !C(n[r]).test(t) && (t += " " + n[r]); return t } S = document.createRange ? function (e, t, n, r) { var i = document.createRange(); return i.setEnd(r || e, n), i.setStart(e, t), i } : function (e, t, n) { var r = document.body.createTextRange(); try { r.moveToElementText(e.parentNode) } catch (e) { return r } return r.collapse(!0), r.moveEnd("character", n), r.moveStart("character", t), r } ; var H = function (e) { e.select() }; function F(e) { var t = Array.prototype.slice.call(arguments, 1); return function () { return e.apply(null, t) } } function E(e, t, n) { for (var r in t = t || {}, e) !e.hasOwnProperty(r) || !1 === n && t.hasOwnProperty(r) || (t[r] = e[r]); return t } function P(e, t, n, r, i) { null == t && -1 == (t = e.search(/[^\s\u00a0]/)) && (t = e.length); for (var o = r || 0, l = i || 0; ;) { var s = e.indexOf("\t", o); if (s < 0 || t <= s) return l + (t - o); l += s - o, l += n - l % n, o = s + 1 } } s ? H = function (e) { e.selectionStart = 0, e.selectionEnd = e.value.length } : w && (H = function (e) { try { e.select() } catch (e) { } } ); var I = function () { this.id = null, this.f = null, this.time = 0, this.handler = F(this.onTimeout, this) }; function R(e, t) { for (var n = 0; n < e.length; ++n) if (e[n] == t) return n; return -1 } I.prototype.onTimeout = function (e) { e.id = 0, e.time <= +new Date ? e.f() : setTimeout(e.handler, e.time - +new Date) } , I.prototype.set = function (e, t) { this.f = t; t = +new Date + e; (!this.id || t < this.time) && (clearTimeout(this.id), this.id = setTimeout(this.handler, e), this.time = t) } ; var z = 50 , B = { toString: function () { return "CodeMirror.Pass" } } , G = { scroll: !1 } , U = { origin: "*mouse" } , V = { origin: "+move" }; function K(e, t, n) { for (var r = 0, i = 0; ;) { var o = e.indexOf("\t", r); -1 == o && (o = e.length); var l = o - r; if (o == e.length || t <= i + l) return r + Math.min(l, t - i); if (i += o - r, r = o + 1, t <= (i += n - i % n)) return r } } var j = [""]; function X(e) { for (; j.length <= e;) j.push(Y(j) + " "); return j[e] } function Y(e) { return e[e.length - 1] } function _(e, t) { for (var n = [], r = 0; r < e.length; r++) n[r] = t(e[r], r); return n } function $() { } function q(e, t) { e = Object.create ? Object.create(e) : ($.prototype = e, new $); return t && E(t, e), e } var Z = /[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/; function Q(e) { return /\w/.test(e) || "€" < e && (e.toUpperCase() != e.toLowerCase() || Z.test(e)) } function J(e, t) { return t ? !!(-1 < t.source.indexOf("\\w") && Q(e)) || t.test(e) : Q(e) } function ee(e) { for (var t in e) if (e.hasOwnProperty(t) && e[t]) return; return 1 } var te = /[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/; function ne(e) { return 768 <= e.charCodeAt(0) && te.test(e) } function re(e, t, n) { for (; (n < 0 ? 0 < t : t < e.length) && ne(e.charAt(t));) t += n; return t } function ie(e, t, n) { for (var r = n < t ? -1 : 1; ;) { if (t == n) return t; var i = (t + n) / 2 , i = r < 0 ? Math.ceil(i) : Math.floor(i); if (i == t) return e(i) ? t : n; e(i) ? n = i : t = i + r } } var oe = null; function le(e, t, n) { var r; oe = null; for (var i = 0; i < e.length; ++i) { var o = e[i]; if (o.from < t && o.to > t) return i; o.to == t && (o.from != o.to && "before" == n ? r = i : oe = i), o.from == t && (o.from != o.to && "before" != n ? r = i : oe = i) } return null != r ? r : oe } var se, ae, ue, ce, he, de, fe, pe = (se = "bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN", ae = "nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111", ue = /[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/, ce = /[stwN]/, he = /[LRr]/, de = /[Lb1n]/, fe = /[1n]/, function (e, t) { var n = "ltr" == t ? "L" : "R"; if (0 == e.length || "ltr" == t && !ue.test(e)) return !1; for (var r, i = e.length, o = [], l = 0; l < i; ++l) o.push((r = e.charCodeAt(l)) <= 247 ? se.charAt(r) : 1424 <= r && r <= 1524 ? "R" : 1536 <= r && r <= 1785 ? ae.charAt(r - 1536) : 1774 <= r && r <= 2220 ? "r" : 8192 <= r && r <= 8203 ? "w" : 8204 == r ? "b" : "L"); for (var s = 0, a = n; s < i; ++s) { var u = o[s]; "m" == u ? o[s] = a : a = u } for (var c = 0, h = n; c < i; ++c) { var d = o[c]; "1" == d && "r" == h ? o[c] = "n" : he.test(d) && "r" == (h = d) && (o[c] = "R") } for (var f = 1, p = o[0]; f < i - 1; ++f) { var g = o[f]; "+" == g && "1" == p && "1" == o[f + 1] ? o[f] = "1" : "," != g || p != o[f + 1] || "1" != p && "n" != p || (o[f] = p), p = g } for (var m = 0; m < i; ++m) { var v = o[m]; if ("," == v) o[m] = "N"; else if ("%" == v) { for (var y = void 0, y = m + 1; y < i && "%" == o[y]; ++y) ; for (var b = m && "!" == o[m - 1] || y < i && "1" == o[y] ? "1" : "N", w = m; w < y; ++w) o[w] = b; m = y - 1 } } for (var x = 0, C = n; x < i; ++x) { var S = o[x]; "L" == C && "1" == S ? o[x] = "L" : he.test(S) && (C = S) } for (var L = 0; L < i; ++L) if (ce.test(o[L])) { for (var k = void 0, k = L + 1; k < i && ce.test(o[k]); ++k) ; for (var T = "L" == (L ? o[L - 1] : n), M = T == ("L" == (k < i ? o[k] : n)) ? T ? "L" : "R" : n, N = L; N < k; ++N) o[N] = M; L = k - 1 } for (var A, O = [], D = 0; D < i;) if (de.test(o[D])) { var W = D; for (++D; D < i && de.test(o[D]); ++D) ; O.push(new ge(0, W, D)) } else { var H = D , F = O.length , E = "rtl" == t ? 1 : 0; for (++D; D < i && "L" != o[D]; ++D) ; for (var P = H; P < D;) if (fe.test(o[P])) { H < P && (O.splice(F, 0, new ge(1, H, P)), F += E); var I = P; for (++P; P < D && fe.test(o[P]); ++P) ; O.splice(F, 0, new ge(2, I, P)), F += E, H = P } else ++P; H < D && O.splice(F, 0, new ge(1, H, D)) } return "ltr" == t && (1 == O[0].level && (A = e.match(/^\s+/)) && (O[0].from = A[0].length, O.unshift(new ge(0, 0, A[0].length))), 1 == Y(O).level && (A = e.match(/\s+$/)) && (Y(O).to -= A[0].length, O.push(new ge(0, i - A[0].length, i)))), "rtl" == t ? O.reverse() : O } ); function ge(e, t, n) { this.level = e, this.from = t, this.to = n } function me(e, t) { var n = e.order; return null == n && (n = e.order = pe(e.text, t)), n } var ve = [] , ye = function (e, t, n) { e.addEventListener ? e.addEventListener(t, n, !1) : e.attachEvent ? e.attachEvent("on" + t, n) : (e = e._handlers || (e._handlers = {}))[t] = (e[t] || ve).concat(n) }; function be(e, t) { return e._handlers && e._handlers[t] || ve } function we(e, t, n) { var r; e.removeEventListener ? e.removeEventListener(t, n, !1) : e.detachEvent ? e.detachEvent("on" + t, n) : !(e = (r = e._handlers) && r[t]) || -1 < (n = R(e, n)) && (r[t] = e.slice(0, n).concat(e.slice(n + 1))) } function xe(e, t) { var n = be(e, t); if (n.length) for (var r = Array.prototype.slice.call(arguments, 2), i = 0; i < n.length; ++i) n[i].apply(null, r) } function Ce(e, t, n) { return "string" == typeof t && (t = { type: t, preventDefault: function () { this.defaultPrevented = !0 } }), xe(e, n || t.type, e, t), Ne(t) || t.codemirrorIgnore } function Se(e) { var t = e._handlers && e._handlers.cursorActivity; if (t) for (var n = e.curOp.cursorActivityHandlers || (e.curOp.cursorActivityHandlers = []), r = 0; r < t.length; ++r) -1 == R(n, t[r]) && n.push(t[r]) } function Le(e, t) { return 0 < be(e, t).length } function ke(e) { e.prototype.on = function (e, t) { ye(this, e, t) } , e.prototype.off = function (e, t) { we(this, e, t) } } function Te(e) { e.preventDefault ? e.preventDefault() : e.returnValue = !1 } function Me(e) { e.stopPropagation ? e.stopPropagation() : e.cancelBubble = !0 } function Ne(e) { return null != e.defaultPrevented ? e.defaultPrevented : 0 == e.returnValue } function Ae(e) { Te(e), Me(e) } function Oe(e) { return e.target || e.srcElement } function De(e) { var t = e.which; return null == t && (1 & e.button ? t = 1 : 2 & e.button ? t = 3 : 4 & e.button && (t = 2)), g && e.ctrlKey && 1 == t && (t = 3), t } var We, He, Fe = function () { if (w && v < 9) return !1; var e = M("div"); return "draggable" in e || "dragDrop" in e }(); var Ee = 3 != "\n\nb".split(/\n/).length ? function (e) { for (var t = 0, n = [], r = e.length; t <= r;) { var i = e.indexOf("\n", t); -1 == i && (i = e.length); var o = e.slice(t, "\r" == e.charAt(i - 1) ? i - 1 : i) , l = o.indexOf("\r"); -1 != l ? (n.push(o.slice(0, l)), t += l + 1) : (n.push(o), t = i + 1) } return n } : function (e) { return e.split(/\r\n?|\n/) } , Pe = window.getSelection ? function (e) { try { return e.selectionStart != e.selectionEnd } catch (e) { return !1 } } : function (e) { var t; try { t = e.ownerDocument.selection.createRange() } catch (e) { } return !(!t || t.parentElement() != e) && 0 != t.compareEndPoints("StartToEnd", t) } , Ie = "oncopy" in (r = M("div")) || (r.setAttribute("oncopy", "return;"), "function" == typeof r.oncopy) , Re = null; var ze = {} , Be = {}; function Ge(e) { if ("string" == typeof e && Be.hasOwnProperty(e)) e = Be[e]; else if (e && "string" == typeof e.name && Be.hasOwnProperty(e.name)) { var t = Be[e.name]; "string" == typeof t && (t = { name: t }), (e = q(t, e)).name = t.name } else { if ("string" == typeof e && /^[\w\-]+\/[\w\-]+\+xml$/.test(e)) return Ge("application/xml"); if ("string" == typeof e && /^[\w\-]+\/[\w\-]+\+json$/.test(e)) return Ge("application/json") } return "string" == typeof e ? { name: e } : e || { name: "null" } } function Ue(e, t) { t = Ge(t); var n = ze[t.name]; if (!n) return Ue(e, "text/plain"); var r = n(e, t); if (Ve.hasOwnProperty(t.name)) { var i, o = Ve[t.name]; for (i in o) o.hasOwnProperty(i) && (r.hasOwnProperty(i) && (r["_" + i] = r[i]), r[i] = o[i]) } if (r.name = t.name, t.helperType && (r.helperType = t.helperType), t.modeProps) for (var l in t.modeProps) r[l] = t.modeProps[l]; return r } var Ve = {}; function Ke(e, t) { E(t, Ve.hasOwnProperty(e) ? Ve[e] : Ve[e] = {}) } function je(e, t) { if (!0 === t) return t; if (e.copyState) return e.copyState(t); var n, r = {}; for (n in t) { var i = t[n]; i instanceof Array && (i = i.concat([])), r[n] = i } return r } function Xe(e, t) { for (var n; e.innerMode && (n = e.innerMode(t)) && n.mode != e;) t = n.state, e = n.mode; return n || { mode: e, state: t } } function Ye(e, t, n) { return !e.startState || e.startState(t, n) } var _e = function (e, t, n) { this.pos = this.start = 0, this.string = e, this.tabSize = t || 8, this.lastColumnPos = this.lastColumnValue = 0, this.lineStart = 0, this.lineOracle = n }; function $e(e, t) { if ((t -= e.first) < 0 || t >= e.size) throw new Error("There is no line " + (t + e.first) + " in the document."); for (var n = e; !n.lines;) for (var r = 0; ; ++r) { var i = n.children[r] , o = i.chunkSize(); if (t < o) { n = i; break } t -= o } return n.lines[t] } function qe(e, t, n) { var r = [] , i = t.line; return e.iter(t.line, n.line + 1, function (e) { e = e.text; i == n.line && (e = e.slice(0, n.ch)), i == t.line && (e = e.slice(t.ch)), r.push(e), ++i }), r } function Ze(e, t, n) { var r = []; return e.iter(t, n, function (e) { r.push(e.text) }), r } function Qe(e, t) { var n = t - e.height; if (n) for (var r = e; r; r = r.parent) r.height += n } function Je(e) { if (null == e.parent) return null; for (var t = e.parent, n = R(t.lines, e), r = t.parent; r; r = (t = r).parent) for (var i = 0; r.children[i] != t; ++i) n += r.children[i].chunkSize(); return n + t.first } function et(e, t) { var n = e.first; e: do { for (var r = 0; r < e.children.length; ++r) { var i = e.children[r] , o = i.height; if (t < o) { e = i; continue e } t -= o, n += i.chunkSize() } return n } while (!e.lines); for (var l = 0; l < e.lines.length; ++l) { var s = e.lines[l].height; if (t < s) break; t -= s } return n + l } function tt(e, t) { return t >= e.first && t < e.first + e.size } function nt(e, t) { return String(e.lineNumberFormatter(t + e.firstLineNumber)) } function rt(e, t, n) { if (void 0 === n && (n = null), !(this instanceof rt)) return new rt(e, t, n); this.line = e, this.ch = t, this.sticky = n } function it(e, t) { return e.line - t.line || e.ch - t.ch } function ot(e, t) { return e.sticky == t.sticky && 0 == it(e, t) } function lt(e) { return rt(e.line, e.ch) } function st(e, t) { return it(e, t) < 0 ? t : e } function at(e, t) { return it(e, t) < 0 ? e : t } function ut(e, t) { return Math.max(e.first, Math.min(t, e.first + e.size - 1)) } function ct(e, t) { if (t.line < e.first) return rt(e.first, 0); var n = e.first + e.size - 1; return t.line > n ? rt(n, $e(e, n).text.length) : (e = $e(e, (n = t).line).text.length, null == (t = n.ch) || e < t ? rt(n.line, e) : t < 0 ? rt(n.line, 0) : n) } function ht(e, t) { for (var n = [], r = 0; r < t.length; r++) n[r] = ct(e, t[r]); return n } _e.prototype.eol = function () { return this.pos >= this.string.length } , _e.prototype.sol = function () { return this.pos == this.lineStart } , _e.prototype.peek = function () { return this.string.charAt(this.pos) || void 0 } , _e.prototype.next = function () { if (this.pos < this.string.length) return this.string.charAt(this.pos++) } , _e.prototype.eat = function (e) { var t = this.string.charAt(this.pos) , e = "string" == typeof e ? t == e : t && (e.test ? e.test(t) : e(t)); if (e) return ++this.pos, t } , _e.prototype.eatWhile = function (e) { for (var t = this.pos; this.eat(e);) ; return this.pos > t } , _e.prototype.eatSpace = function () { for (var e = this.pos; /[\s\u00a0]/.test(this.string.charAt(this.pos));) ++this.pos; return this.pos > e } , _e.prototype.skipToEnd = function () { this.pos = this.string.length } , _e.prototype.skipTo = function (e) { e = this.string.indexOf(e, this.pos); if (-1 < e) return this.pos = e, !0 } , _e.prototype.backUp = function (e) { this.pos -= e } , _e.prototype.column = function () { return this.lastColumnPos < this.start && (this.lastColumnValue = P(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue), this.lastColumnPos = this.start), this.lastColumnValue - (this.lineStart ? P(this.string, this.lineStart, this.tabSize) : 0) } , _e.prototype.indentation = function () { return P(this.string, null, this.tabSize) - (this.lineStart ? P(this.string, this.lineStart, this.tabSize) : 0) } , _e.prototype.match = function (e, t, n) { if ("string" != typeof e) { var r = this.string.slice(this.pos).match(e); return r && 0 < r.index ? null : (r && !1 !== t && (this.pos += r[0].length), r) } r = function (e) { return n ? e.toLowerCase() : e } ; if (r(this.string.substr(this.pos, e.length)) == r(e)) return !1 !== t && (this.pos += e.length), !0 } , _e.prototype.current = function () { return this.string.slice(this.start, this.pos) } , _e.prototype.hideFirstChars = function (e, t) { this.lineStart += e; try { return t() } finally { this.lineStart -= e } } , _e.prototype.lookAhead = function (e) { var t = this.lineOracle; return t && t.lookAhead(e) } , _e.prototype.baseToken = function () { var e = this.lineOracle; return e && e.baseToken(this.pos) } ; var dt = function (e, t) { this.state = e, this.lookAhead = t } , ft = function (e, t, n, r) { this.state = t, this.doc = e, this.line = n, this.maxLookAhead = r || 0, this.baseTokens = null, this.baseTokenPos = 1 }; function pt(t, n, r, e) { var a = [t.state.modeGen] , i = {}; St(t, n.text, t.doc.mode, r, function (e, t) { return a.push(e, t) }, i, e); for (var u = r.state, o = 0; o < t.state.overlays.length; ++o) !function (e) { r.baseTokens = a; var o = t.state.overlays[e] , l = 1 , s = 0; r.state = !0, St(t, n.text, o.mode, r, function (e, t) { for (var n = l; s < e;) { var r = a[l]; e < r && a.splice(l, 1, e, a[l + 1], r), l += 2, s = Math.min(e, r) } if (t) if (o.opaque) a.splice(n, l - n, e, "overlay " + t), l = n + 2; else for (; n < l; n += 2) { var i = a[n + 1]; a[n + 1] = (i ? i + " " : "") + "overlay " + t } }, i), r.state = u, r.baseTokens = null, r.baseTokenPos = 1 }(o); return { styles: a, classes: i.bgClass || i.textClass ? i : null } } function gt(e, t, n) { var r, i, o; return t.styles && t.styles[0] == e.state.modeGen || (r = mt(e, Je(t)), i = t.text.length > e.options.maxHighlightLength && je(e.doc.mode, r.state), o = pt(e, t, r), i && (r.state = i), t.stateAfter = r.save(!i), t.styles = o.styles, o.classes ? t.styleClasses = o.classes : t.styleClasses && (t.styleClasses = null), n === e.doc.highlightFrontier && (e.doc.modeFrontier = Math.max(e.doc.modeFrontier, ++e.doc.highlightFrontier))), t.styles } function mt(n, r, e) { var t = n.doc , i = n.display; if (!t.mode.startState) return new ft(t, !0, r); var o = function (e, t, n) { for (var r, i, o = e.doc, l = n ? -1 : t - (e.doc.mode.innerMode ? 1e3 : 100), s = t; l < s; --s) { if (s <= o.first) return o.first; var a = $e(o, s - 1) , u = a.stateAfter; if (u && (!n || s + (u instanceof dt ? u.lookAhead : 0) <= o.modeFrontier)) return s; a = P(a.text, null, e.options.tabSize); (null == i || a < r) && (i = s - 1, r = a) } return i }(n, r, e) , l = o > t.first && $e(t, o - 1).stateAfter , s = l ? ft.fromSaved(t, l, o) : new ft(t, Ye(t.mode), o); return t.iter(o, r, function (e) { vt(n, e.text, s); var t = s.line; e.stateAfter = t == r - 1 || t % 5 == 0 || t >= i.viewFrom && t < i.viewTo ? s.save() : null, s.nextLine() }), e && (t.modeFrontier = s.line), s } function vt(e, t, n, r) { var i = e.doc.mode , o = new _e(t, e.options.tabSize, n); for (o.start = o.pos = r || 0, "" == t && yt(i, n.state); !o.eol();) bt(i, o, n.state), o.start = o.pos } function yt(e, t) { if (e.blankLine) return e.blankLine(t); if (e.innerMode) { t = Xe(e, t); return t.mode.blankLine ? t.mode.blankLine(t.state) : void 0 } } function bt(e, t, n, r) { for (var i = 0; i < 10; i++) { r && (r[0] = Xe(e, n).mode); var o = e.token(t, n); if (t.pos > t.start) return o } throw new Error("Mode " + e.name + " failed to advance stream.") } ft.prototype.lookAhead = function (e) { var t = this.doc.getLine(this.line + e); return null != t && e > this.maxLookAhead && (this.maxLookAhead = e), t } , ft.prototype.baseToken = function (e) { if (!this.baseTokens) return null; for (; this.baseTokens[this.baseTokenPos] <= e;) this.baseTokenPos += 2; var t = this.baseTokens[this.baseTokenPos + 1]; return { type: t && t.replace(/( |^)overlay .*/, ""), size: this.baseTokens[this.baseTokenPos] - e } } , ft.prototype.nextLine = function () { this.line++, 0 < this.maxLookAhead && this.maxLookAhead-- } , ft.fromSaved = function (e, t, n) { return t instanceof dt ? new ft(e, je(e.mode, t.state), n, t.lookAhead) : new ft(e, je(e.mode, t), n) } , ft.prototype.save = function (e) { e = !1 !== e ? je(this.doc.mode, this.state) : this.state; return 0 < this.maxLookAhead ? new dt(e, this.maxLookAhead) : e } ; var wt = function (e, t, n) { this.start = e.start, this.end = e.pos, this.string = e.current(), this.type = t || null, this.state = n }; function xt(e, t, n, r) { var i, o, l = e.doc, s = l.mode, a = $e(l, (t = ct(l, t)).line), u = mt(e, t.line, n), c = new _e(a.text, e.options.tabSize, u); for (r && (o = []); (r || c.pos < t.ch) && !c.eol();) c.start = c.pos, i = bt(s, c, u.state), r && o.push(new wt(c, i, je(l.mode, u.state))); return r ? o : new wt(c, i, u.state) } function Ct(e, t) { if (e) for (; ;) { var n = e.match(/(?:^|\s+)line-(background-)?(\S+)/); if (!n) break; e = e.slice(0, n.index) + e.slice(n.index + n[0].length); var r = n[1] ? "bgClass" : "textClass"; null == t[r] ? t[r] = n[2] : new RegExp("(?:^|\\s)" + n[2] + "(?:$|\\s)").test(t[r]) || (t[r] += " " + n[2]) } return e } function St(e, t, n, r, i, o, l) { var s = n.flattenSpans; null == s && (s = e.options.flattenSpans); var a = 0 , u = null , c = new _e(t, e.options.tabSize, r) , h = e.options.addModeClass && [null]; for ("" == t && Ct(yt(n, r.state), o); !c.eol();) { var d, f = c.pos > e.options.maxHighlightLength ? (s = !1, l && vt(e, t, r, c.pos), c.pos = t.length, null) : Ct(bt(n, c, r.state, h), o); if (!h || (d = h[0].name) && (f = "m-" + (f ? d + " " + f : d)), !s || u != f) { for (; a < c.start;) i(a = Math.min(c.start, a + 5e3), u); u = f } c.start = c.pos } for (; a < c.pos;) { var p = Math.min(c.pos, a + 5e3); i(p, u), a = p } } var Lt = !1 , kt = !1; function Tt(e, t, n) { this.marker = e, this.from = t, this.to = n } function Mt(e, t) { if (e) for (var n = 0; n < e.length; ++n) { var r = e[n]; if (r.marker == t) return r } } function Nt(e, t) { if (t.full) return null; var n = tt(e, t.from.line) && $e(e, t.from.line).markedSpans , r = tt(e, t.to.line) && $e(e, t.to.line).markedSpans; if (!n && !r) return null; var i = t.from.ch , o = t.to.ch , e = 0 == it(t.from, t.to) , l = function (e, t, n) { var r; if (e) for (var i = 0; i < e.length; ++i) { var o, l = e[i], s = l.marker; !(null == l.from || (s.inclusiveLeft ? l.from <= t : l.from < t)) && (l.from != t || "bookmark" != s.type || n && l.marker.insertLeft) || (o = null == l.to || (s.inclusiveRight ? l.to >= t : l.to > t), (r = r || []).push(new Tt(s, l.from, o ? null : l.to))) } return r }(n, i, e) , s = function (e, t, n) { var r; if (e) for (var i = 0; i < e.length; ++i) { var o, l = e[i], s = l.marker; !(null == l.to || (s.inclusiveRight ? l.to >= t : l.to > t)) && (l.from != t || "bookmark" != s.type || n && !l.marker.insertLeft) || (o = null == l.from || (s.inclusiveLeft ? l.from <= t : l.from < t), (r = r || []).push(new Tt(s, o ? null : l.from - t, null == l.to ? null : l.to - t))) } return r }(r, o, e) , a = 1 == t.text.length , u = Y(t.text).length + (a ? i : 0); if (l) for (var c = 0; c < l.length; ++c) { var h, d = l[c]; null == d.to && ((h = Mt(s, d.marker)) ? a && (d.to = null == h.to ? null : h.to + u) : d.to = i) } if (s) for (var f = 0; f < s.length; ++f) { var p = s[f]; null != p.to && (p.to += u), null == p.from ? Mt(l, p.marker) || (p.from = u, a && (l = l || []).push(p)) : (p.from += u, a && (l = l || []).push(p)) } l = l && At(l), s && s != l && (s = At(s)); var g = [l]; if (!a) { var m, v = t.text.length - 2; if (0 < v && l) for (var y = 0; y < l.length; ++y) null == l[y].to && (m = m || []).push(new Tt(l[y].marker, null, null)); for (var b = 0; b < v; ++b) g.push(m); g.push(s) } return g } function At(e) { for (var t = 0; t < e.length; ++t) { var n = e[t]; null != n.from && n.from == n.to && !1 !== n.marker.clearWhenEmpty && e.splice(t--, 1) } return e.length ? e : null } function Ot(e) { var t = e.markedSpans; if (t) { for (var n = 0; n < t.length; ++n) t[n].marker.detachLine(e); e.markedSpans = null } } function Dt(e, t) { if (t) { for (var n = 0; n < t.length; ++n) t[n].marker.attachLine(e); e.markedSpans = t } } function Wt(e) { return e.inclusiveLeft ? -1 : 0 } function Ht(e) { return e.inclusiveRight ? 1 : 0 } function Ft(e, t) { var n = e.lines.length - t.lines.length; if (0 != n) return n; var r = e.find() , i = t.find() , n = it(r.from, i.from) || Wt(e) - Wt(t); if (n) return -n; i = it(r.to, i.to) || Ht(e) - Ht(t); return i || t.id - e.id } function Et(e, t) { var n, r = kt && e.markedSpans; if (r) for (var i, o = 0; o < r.length; ++o) (i = r[o]).marker.collapsed && null == (t ? i.from : i.to) && (!n || Ft(n, i.marker) < 0) && (n = i.marker); return n } function Pt(e) { return Et(e, !0) } function It(e) { return Et(e, !1) } function Rt(e, t, n, r, i) { var t = $e(e, t) , o = kt && t.markedSpans; if (o) for (var l = 0; l < o.length; ++l) { var s = o[l]; if (s.marker.collapsed) { var a = s.marker.find(0) , u = it(a.from, n) || Wt(s.marker) - Wt(i) , c = it(a.to, r) || Ht(s.marker) - Ht(i); if (!(0 <= u && c <= 0 || u <= 0 && 0 <= c) && (u <= 0 && (s.marker.inclusiveRight && i.inclusiveLeft ? 0 <= it(a.to, n) : 0 < it(a.to, n)) || 0 <= u && (s.marker.inclusiveRight && i.inclusiveLeft ? it(a.from, r) <= 0 : it(a.from, r) < 0))) return 1 } } } function zt(e) { for (var t; t = Pt(e);) e = t.find(-1, !0).line; return e } function Bt(e, t) { var n = $e(e, t) , e = zt(n); return n == e ? t : Je(e) } function Gt(e, t) { if (t > e.lastLine()) return t; var n, r = $e(e, t); if (!Ut(e, r)) return t; for (; n = It(r);) r = n.find(1, !0).line; return Je(r) + 1 } function Ut(e, t) { var n = kt && t.markedSpans; if (n) for (var r, i = 0; i < n.length; ++i) if ((r = n[i]).marker.collapsed) { if (null == r.from) return !0; if (!r.marker.widgetNode && 0 == r.from && r.marker.inclusiveLeft && function e(t, n, r) { if (null == r.to) { var i = r.marker.find(1, !0); return e(t, i.line, Mt(i.line.markedSpans, r.marker)) } if (r.marker.inclusiveRight && r.to == n.text.length) return !0; for (var o = void 0, l = 0; l < n.markedSpans.length; ++l) if ((o = n.markedSpans[l]).marker.collapsed && !o.marker.widgetNode && o.from == r.to && (null == o.to || o.to != r.from) && (o.marker.inclusiveLeft || r.marker.inclusiveRight) && e(t, n, o)) return !0 }(e, t, r)) return !0 } } function Vt(e) { for (var t = 0, n = (e = zt(e)).parent, r = 0; r < n.lines.length; ++r) { var i = n.lines[r]; if (i == e) break; t += i.height } for (var o = n.parent; o; o = (n = o).parent) for (var l = 0; l < o.children.length; ++l) { var s = o.children[l]; if (s == n) break; t += s.height } return t } function Kt(e) { if (0 == e.height) return 0; for (var t, n = e.text.length, r = e; t = Pt(r);) { var i = t.find(0, !0) , r = i.from.line; n += i.from.ch - i.to.ch } for (r = e; t = It(r);) { var o = t.find(0, !0); n -= r.text.length - o.from.ch, n += (r = o.to.line).text.length - o.to.ch } return n } function jt(e) { var n = e.display , e = e.doc; n.maxLine = $e(e, e.first), n.maxLineLength = Kt(n.maxLine), n.maxLineChanged = !0, e.iter(function (e) { var t = Kt(e); t > n.maxLineLength && (n.maxLineLength = t, n.maxLine = e) }) } var Xt = function (e, t, n) { this.text = e, Dt(this, t), this.height = n ? n(this) : 1 }; Xt.prototype.lineNo = function () { return Je(this) } , ke(Xt); var Yt = {} , _t = {}; function $t(e, t) { if (!e || /^\s*$/.test(e)) return null; t = t.addModeClass ? _t : Yt; return t[e] || (t[e] = e.replace(/\S+/g, "cm-$&")) } function qt(e, t) { var n = N("span", null, null, f ? "padding-right: .1px" : null) , r = { pre: N("pre", [n], "CodeMirror-line"), content: n, col: 0, pos: 0, cm: e, trailingSpace: !1, splitSpaces: e.getOption("lineWrapping") }; t.measure = {}; for (var i = 0; i <= (t.rest ? t.rest.length : 0); i++) { var o = i ? t.rest[i - 1] : t.line , l = void 0; r.pos = 0, r.addToken = Qt, function (e) { if (null != He) return He; var t = T(e, document.createTextNode("AخA")) , n = S(t, 0, 1).getBoundingClientRect() , t = S(t, 1, 2).getBoundingClientRect(); return k(e), n && n.left != n.right && (He = t.right - n.right < 3) }(e.display.measure) && (l = me(o, e.doc.direction)) && (r.addToken = function (h, d) { return function (e, t, n, r, i, o, l) { n = n ? n + " cm-force-border" : "cm-force-border"; for (var s = e.pos, a = s + t.length; ;) { for (var u = void 0, c = 0; c < d.length && !((u = d[c]).to > s && u.from <= s); c++) ; if (u.to >= a) return h(e, t, n, r, i, o, l); h(e, t.slice(0, u.to - s), n, r, null, o, l), r = null, t = t.slice(u.to - s), s = u.to } } }(r.addToken, l)), r.map = [], function (e, t, n) { var r = e.markedSpans , i = e.text , o = 0; if (!r) { for (var l = 1; l < n.length; l += 2) t.addToken(t, i.slice(o, o = n[l]), $t(n[l + 1], t.cm.options)); return } for (var s, a, u, c, h, d, f, p = i.length, g = 0, m = 1, v = "", y = 0; ;) { if (y == g) { u = c = h = a = "", d = f = null, y = 1 / 0; for (var b = [], w = void 0, x = 0; x < r.length; ++x) { var C = r[x] , S = C.marker; if ("bookmark" == S.type && C.from == g && S.widgetNode) b.push(S); else if (C.from <= g && (null == C.to || C.to > g || S.collapsed && C.to == g && C.from == g)) { if (null != C.to && C.to != g && y > C.to && (y = C.to, c = ""), S.className && (u += " " + S.className), S.css && (a = (a ? a + ";" : "") + S.css), S.startStyle && C.from == g && (h += " " + S.startStyle), S.endStyle && C.to == y && (w = w || []).push(S.endStyle, C.to), S.title && ((f = f || {}).title = S.title), S.attributes) for (var L in S.attributes) (f = f || {})[L] = S.attributes[L]; S.collapsed && (!d || Ft(d.marker, S) < 0) && (d = C) } else C.from > g && y > C.from && (y = C.from) } if (w) for (var k = 0; k < w.length; k += 2) w[k + 1] == y && (c += " " + w[k]); if (!d || d.from == g) for (var T = 0; T < b.length; ++T) Jt(t, 0, b[T]); if (d && (d.from || 0) == g) { if (Jt(t, (null == d.to ? p + 1 : d.to) - g, d.marker, null == d.from), null == d.to) return; d.to == g && (d = !1) } } if (p <= g) break; for (var M = Math.min(p, y); ;) { if (v) { var N, A = g + v.length; if (d || (N = M < A ? v.slice(0, M - g) : v, t.addToken(t, N, s ? s + u : u, h, g + N.length == y ? c : "", a, f)), M <= A) { v = v.slice(M - g), g = M; break } g = A, h = "" } v = i.slice(o, o = n[m++]), s = $t(n[m++], t.cm.options) } } }(o, r, gt(e, o, t != e.display.externalMeasured && Je(o))), o.styleClasses && (o.styleClasses.bgClass && (r.bgClass = W(o.styleClasses.bgClass, r.bgClass || "")), o.styleClasses.textClass && (r.textClass = W(o.styleClasses.textClass, r.textClass || ""))), 0 == r.map.length && r.map.push(0, 0, r.content.appendChild(function (e) { null == We && (t = M("span", "​"), T(e, M("span", [t, document.createTextNode("x")])), 0 != e.firstChild.offsetHeight && (We = t.offsetWidth <= 1 && 2 < t.offsetHeight && !(w && v < 8))); var t = We ? M("span", "​") : M("span", " ", null, "display: inline-block; width: 1px; margin-right: -1px"); return t.setAttribute("cm-text", ""), t }(e.display.measure))), 0 == i ? (t.measure.map = r.map, t.measure.cache = {}) : ((t.measure.maps || (t.measure.maps = [])).push(r.map), (t.measure.caches || (t.measure.caches = [])).push({})) } return f && (n = r.content.lastChild, (/\bcm-tab\b/.test(n.className) || n.querySelector && n.querySelector(".cm-tab")) && (r.content.className = "cm-tab-wrap-hack")), xe(e, "renderLine", e, t.line, r.pre), r.pre.className && (r.textClass = W(r.pre.className, r.textClass || "")), r } function Zt(e) { var t = M("span", "•", "cm-invalidchar"); return t.title = "\\u" + e.charCodeAt(0).toString(16), t.setAttribute("aria-label", t.title), t } function Qt(e, t, n, r, i, o, l) { if (t) { var s, a = e.splitSpaces ? function (e, t) { if (1 < e.length && !/ /.test(e)) return e; for (var n = t, r = "", i = 0; i < e.length; i++) { var o = e.charAt(i); " " != o || !n || i != e.length - 1 && 32 != e.charCodeAt(i + 1) || (o = " "), r += o, n = " " == o } return r }(t, e.trailingSpace) : t, u = e.cm.state.specialChars, c = !1; if (u.test(t)) { s = document.createDocumentFragment(); for (var h = 0; ;) { u.lastIndex = h; var d = u.exec(t) , f = d ? d.index - h : t.length - h; if (f && (p = document.createTextNode(a.slice(h, h + f)), w && v < 9 ? s.appendChild(M("span", [p])) : s.appendChild(p), e.map.push(e.pos, e.pos + f, p), e.col += f, e.pos += f), !d) break; h += 1 + f; var p = void 0; "\t" == d[0] ? (f = (f = e.cm.options.tabSize) - e.col % f, (p = s.appendChild(M("span", X(f), "cm-tab"))).setAttribute("role", "presentation"), p.setAttribute("cm-text", "\t"), e.col += f) : ("\r" == d[0] || "\n" == d[0] ? (p = s.appendChild(M("span", "\r" == d[0] ? "␍" : "␤", "cm-invalidchar"))).setAttribute("cm-text", d[0]) : ((p = e.cm.options.specialCharPlaceholder(d[0])).setAttribute("cm-text", d[0]), w && v < 9 ? s.appendChild(M("span", [p])) : s.appendChild(p)), e.col += 1), e.map.push(e.pos, e.pos + 1, p), e.pos++ } } else e.col += t.length, s = document.createTextNode(a), e.map.push(e.pos, e.pos + t.length, s), w && v < 9 && (c = !0), e.pos += t.length; if (e.trailingSpace = 32 == a.charCodeAt(t.length - 1), n || r || i || c || o || l) { n = n || ""; r && (n += r), i && (n += i); var g = M("span", [s], n, o); if (l) for (var m in l) l.hasOwnProperty(m) && "style" != m && "class" != m && g.setAttribute(m, l[m]); return e.content.appendChild(g) } e.content.appendChild(s) } } function Jt(e, t, n, r) { var i = !r && n.widgetNode; i && e.map.push(e.pos, e.pos + t, i), !r && e.cm.display.input.needsContentAttribute && (i = i || e.content.appendChild(document.createElement("span"))).setAttribute("cm-marker", n.id), i && (e.cm.display.input.setUneditable(i), e.content.appendChild(i)), e.pos += t, e.trailingSpace = !1 } function en(e, t, n) { this.line = t, this.rest = function (e) { for (var t, n; t = It(e);) e = t.find(1, !0).line, (n = n || []).push(e); return n }(t), this.size = this.rest ? Je(Y(this.rest)) - n + 1 : 1, this.node = this.text = null, this.hidden = Ut(e, t) } function tn(e, t, n) { for (var r = [], i = t; i < n; i = l) { var o = new en(e.doc, $e(e.doc, i), i) , l = i + o.size; r.push(o) } return r } var nn = null; function rn(e, t) { var n = e.ownsGroup; if (n) try { !function (e) { var t = e.delayedCallbacks , n = 0; do { for (; n < t.length; n++) t[n].call(null); for (var r = 0; r < e.ops.length; r++) { var i = e.ops[r]; if (i.cursorActivityHandlers) for (; i.cursorActivityCalled < i.cursorActivityHandlers.length;) i.cursorActivityHandlers[i.cursorActivityCalled++].call(null, i.cm) } } while (n < t.length) }(n) } finally { nn = null, t(n) } } var on = null; function ln(e, t) { var n = be(e, t); if (n.length) { var r, i = Array.prototype.slice.call(arguments, 2); nn ? r = nn.delayedCallbacks : on ? r = on : (r = on = [], setTimeout(sn, 0)); for (var o = 0; o < n.length; ++o) !function (e) { r.push(function () { return n[e].apply(null, i) }) }(o) } } function sn() { var e = on; on = null; for (var t = 0; t < e.length; ++t) e[t]() } function an(e, t, n, r) { for (var i = 0; i < t.changes.length; i++) { var o = t.changes[i]; "text" == o ? function (e, t) { var n = t.text.className , r = cn(e, t); t.text == t.node && (t.node = r.pre); t.text.parentNode.replaceChild(r.pre, t.text), t.text = r.pre, r.bgClass != t.bgClass || r.textClass != t.textClass ? (t.bgClass = r.bgClass, t.textClass = r.textClass, hn(e, t)) : n && (t.text.className = n) }(e, t) : "gutter" == o ? dn(e, t, n, r) : "class" == o ? hn(e, t) : "widget" == o && function (e, t, n) { t.alignable && (t.alignable = null); for (var r = C("CodeMirror-linewidget"), i = t.node.firstChild, o = void 0; i; i = o) o = i.nextSibling, r.test(i.className) && t.node.removeChild(i); fn(e, t, n) }(e, t, r) } t.changes = null } function un(e) { return e.node == e.text && (e.node = M("div", null, null, "position: relative"), e.text.parentNode && e.text.parentNode.replaceChild(e.node, e.text), e.node.appendChild(e.text), w && v < 8 && (e.node.style.zIndex = 2)), e.node } function cn(e, t) { var n = e.display.externalMeasured; return n && n.line == t.line ? (e.display.externalMeasured = null, t.measure = n.measure, n.built) : qt(e, t) } function hn(e, t) { var n, r; n = e, (r = (i = t).bgClass ? i.bgClass + " " + (i.line.bgClass || "") : i.line.bgClass) && (r += " CodeMirror-linebackground"), i.background ? r ? i.background.className = r : (i.background.parentNode.removeChild(i.background), i.background = null) : r && (e = un(i), i.background = e.insertBefore(M("div", null, r), e.firstChild), n.display.input.setUneditable(i.background)), t.line.wrapClass ? un(t).className = t.line.wrapClass : t.node != t.text && (t.node.className = ""); var i = t.textClass ? t.textClass + " " + (t.line.textClass || "") : t.line.textClass; t.text.className = i || "" } function dn(e, t, n, r) { t.gutter && (t.node.removeChild(t.gutter), t.gutter = null), t.gutterBackground && (t.node.removeChild(t.gutterBackground), t.gutterBackground = null), t.line.gutterClass && (o = un(t), t.gutterBackground = M("div", null, "CodeMirror-gutter-background " + t.line.gutterClass, "left: " + (e.options.fixedGutter ? r.fixedPos : -r.gutterTotalWidth) + "px; width: " + r.gutterTotalWidth + "px"), e.display.input.setUneditable(t.gutterBackground), o.insertBefore(t.gutterBackground, t.text)); var i = t.line.gutterMarkers; if (e.options.lineNumbers || i) { var o = un(t) , l = t.gutter = M("div", null, "CodeMirror-gutter-wrapper", "left: " + (e.options.fixedGutter ? r.fixedPos : -r.gutterTotalWidth) + "px"); if (e.display.input.setUneditable(l), o.insertBefore(l, t.text), t.line.gutterClass && (l.className += " " + t.line.gutterClass), !e.options.lineNumbers || i && i["CodeMirror-linenumbers"] || (t.lineNumber = l.appendChild(M("div", nt(e.options, n), "CodeMirror-linenumber CodeMirror-gutter-elt", "left: " + r.gutterLeft["CodeMirror-linenumbers"] + "px; width: " + e.display.lineNumInnerWidth + "px"))), i) for (var s = 0; s < e.display.gutterSpecs.length; ++s) { var a = e.display.gutterSpecs[s].className , u = i.hasOwnProperty(a) && i[a]; u && l.appendChild(M("div", [u], "CodeMirror-gutter-elt", "left: " + r.gutterLeft[a] + "px; width: " + r.gutterWidth[a] + "px")) } } } function fn(e, t, n) { if (pn(e, t.line, t, n, !0), t.rest) for (var r = 0; r < t.rest.length; r++) pn(e, t.rest[r], t, n, !1) } function pn(e, t, n, r, i) { if (t.widgets) for (var o = un(n), l = 0, s = t.widgets; l < s.length; ++l) { var a = s[l] , u = M("div", [a.node], "CodeMirror-linewidget" + (a.className ? " " + a.className : "")); a.handleMouseEvents || u.setAttribute("cm-ignore-events", "true"), function (e, t, n, r) { e.noHScroll && ((n.alignable || (n.alignable = [])).push(t), n = r.wrapperWidth, t.style.left = r.fixedPos + "px", e.coverGutter || (n -= r.gutterTotalWidth, t.style.paddingLeft = r.gutterTotalWidth + "px"), t.style.width = n + "px"); e.coverGutter && (t.style.zIndex = 5, t.style.position = "relative", e.noHScroll || (t.style.marginLeft = -r.gutterTotalWidth + "px")) }(a, u, n, r), e.display.input.setUneditable(u), i && a.above ? o.insertBefore(u, n.gutter || n.text) : o.appendChild(u), ln(a, "redraw") } } function gn(e) { if (null != e.height) return e.height; var t, n = e.doc.cm; return n ? (A(document.body, e.node) || (t = "position: relative;", e.coverGutter && (t += "margin-left: -" + n.display.gutters.offsetWidth + "px;"), e.noHScroll && (t += "width: " + n.display.wrapper.clientWidth + "px;"), T(n.display.measure, M("div", [e.node], null, t))), e.height = e.node.parentNode.offsetHeight) : 0 } function mn(e, t) { for (var n = Oe(t); n != e.wrapper; n = n.parentNode) if (!n || 1 == n.nodeType && "true" == n.getAttribute("cm-ignore-events") || n.parentNode == e.sizer && n != e.mover) return 1 } function vn(e) { return e.lineSpace.offsetTop } function yn(e) { return e.mover.offsetHeight - e.lineSpace.offsetHeight } function bn(e) { if (e.cachedPaddingH) return e.cachedPaddingH; var t = T(e.measure, M("pre", "x", "CodeMirror-line-like")) , t = window.getComputedStyle ? window.getComputedStyle(t) : t.currentStyle , t = { left: parseInt(t.paddingLeft), right: parseInt(t.paddingRight) }; return isNaN(t.left) || isNaN(t.right) || (e.cachedPaddingH = t), t } function wn(e) { return z - e.display.nativeBarWidth } function xn(e) { return e.display.scroller.clientWidth - wn(e) - e.display.barWidth } function Cn(e) { return e.display.scroller.clientHeight - wn(e) - e.display.barHeight } function Sn(e, t, n) { if (e.line == t) return { map: e.measure.map, cache: e.measure.cache }; for (var r = 0; r < e.rest.length; r++) if (e.rest[r] == t) return { map: e.measure.maps[r], cache: e.measure.caches[r] }; for (var i = 0; i < e.rest.length; i++) if (Je(e.rest[i]) > n) return { map: e.measure.maps[i], cache: e.measure.caches[i], before: !0 } } function Ln(e, t, n, r) { return Mn(e, Tn(e, t), n, r) } function kn(e, t) { if (t >= e.display.viewFrom && t < e.display.viewTo) return e.display.view[er(e, t)]; e = e.display.externalMeasured; return e && t >= e.lineN && t < e.lineN + e.size ? e : void 0 } function Tn(e, t) { var n, r, i = Je(t), o = kn(e, i); o && !o.text ? o = null : o && o.changes && (an(e, o, i, $n(e)), e.curOp.forceUpdate = !0), o || (n = e, e = Je(r = zt(r = t)), (r = n.display.externalMeasured = new en(n.doc, r, e)).lineN = e, e = r.built = qt(n, r), r.text = e.pre, T(n.display.lineMeasure, e.pre), o = r); i = Sn(o, t, i); return { line: t, view: o, rect: null, map: i.map, cache: i.cache, before: i.before, hasHeights: !1 } } function Mn(e, t, n, r, i) { t.before && (n = -1); var o, l = n + (r || ""); return t.cache.hasOwnProperty(l) ? o = t.cache[l] : (t.rect || (t.rect = t.view.text.getBoundingClientRect()), t.hasHeights || (function (e, t, n) { var r = e.options.lineWrapping , e = r && xn(e); if (!t.measure.heights || r && t.measure.width != e) { var i = t.measure.heights = []; if (r) { t.measure.width = e; for (var o = t.text.firstChild.getClientRects(), l = 0; l < o.length - 1; l++) { var s = o[l] , a = o[l + 1]; 2 < Math.abs(s.bottom - a.bottom) && i.push((s.bottom + a.top) / 2 - n.top) } } i.push(n.bottom - n.top) } }(e, t.view, t.rect), t.hasHeights = !0), (o = function (e, t, n, r) { var i, o = On(t.map, n, r), l = o.node, s = o.start, a = o.end, u = o.collapse; if (3 == l.nodeType) { for (var c = 0; c < 4; c++) { for (; s && ne(t.line.text.charAt(o.coverStart + s));) --s; for (; o.coverStart + a < o.coverEnd && ne(t.line.text.charAt(o.coverStart + a));) ++a; if ((i = w && v < 9 && 0 == s && a == o.coverEnd - o.coverStart ? l.parentNode.getBoundingClientRect() : function (e, t) { var n = An; if ("left" == t) for (var r = 0; r < e.length && (n = e[r]).left == n.right; r++) ; else for (var i = e.length - 1; 0 <= i && (n = e[i]).left == n.right; i--) ; return n }(S(l, s, a).getClientRects(), r)).left || i.right || 0 == s) break; a = s, --s, u = "right" } w && v < 11 && (i = function (e, t) { if (!window.screen || null == screen.logicalXDPI || screen.logicalXDPI == screen.deviceXDPI || !function (e) { if (null != Re) return Re; var e = (t = T(e, M("span", "x"))).getBoundingClientRect() , t = S(t, 0, 1).getBoundingClientRect(); return Re = 1 < Math.abs(e.left - t.left) }(e)) return t; var n = screen.logicalXDPI / screen.deviceXDPI , e = screen.logicalYDPI / screen.deviceYDPI; return { left: t.left * n, right: t.right * n, top: t.top * e, bottom: t.bottom * e } }(e.display.measure, i)) } else 0 < s && (u = r = "right"), i = e.options.lineWrapping && 1 < (g = l.getClientRects()).length ? g["right" == r ? g.length - 1 : 0] : l.getBoundingClientRect(); !(w && v < 9) || s || i && (i.left || i.right) || (m = l.parentNode.getClientRects()[0], i = m ? { left: m.left, right: m.left + _n(e.display), top: m.top, bottom: m.bottom } : An); for (var h = i.top - t.rect.top, n = i.bottom - t.rect.top, d = (h + n) / 2, f = t.view.measure.heights, p = 0; p < f.length - 1 && !(d < f[p]); p++) ; var g = p ? f[p - 1] : 0 , m = f[p] , m = { left: ("right" == u ? i.right : i.left) - t.rect.left, right: ("left" == u ? i.left : i.right) - t.rect.left, top: g, bottom: m }; i.left || i.right || (m.bogus = !0); e.options.singleCursorHeightPerLine || (m.rtop = h, m.rbottom = n); return m }(e, t, n, r)).bogus || (t.cache[l] = o)), { left: o.left, right: o.right, top: i ? o.rtop : o.top, bottom: i ? o.rbottom : o.bottom } } var Nn, An = { left: 0, right: 0, top: 0, bottom: 0 }; function On(e, t, n) { for (var r, i, o, l, s, a, u = 0; u < e.length; u += 3) if (s = e[u], a = e[u + 1], t < s ? (i = 0, o = 1, l = "left") : t < a ? o = (i = t - s) + 1 : (u == e.length - 3 || t == a && e[u + 3] > t) && (i = (o = a - s) - 1, a <= t && (l = "right")), null != i) { if (r = e[u + 2], s == a && n == (r.insertLeft ? "left" : "right") && (l = n), "left" == n && 0 == i) for (; u && e[u - 2] == e[u - 3] && e[u - 1].insertLeft;) r = e[2 + (u -= 3)], l = "left"; if ("right" == n && i == a - s) for (; u < e.length - 3 && e[u + 3] == e[u + 4] && !e[u + 5].insertLeft;) r = e[(u += 3) + 2], l = "right"; break } return { node: r, start: i, end: o, collapse: l, coverStart: s, coverEnd: a } } function Dn(e) { if (e.measure && (e.measure.cache = {}, e.measure.heights = null, e.rest)) for (var t = 0; t < e.rest.length; t++) e.measure.caches[t] = {} } function Wn(e) { e.display.externalMeasure = null, k(e.display.lineMeasure); for (var t = 0; t < e.display.view.length; t++) Dn(e.display.view[t]) } function Hn(e) { Wn(e), e.display.cachedCharWidth = e.display.cachedTextHeight = e.display.cachedPaddingH = null, e.options.lineWrapping || (e.display.maxLineChanged = !0), e.display.lineNumChars = null } function Fn() { return o && a ? -(document.body.getBoundingClientRect().left - parseInt(getComputedStyle(document.body).marginLeft)) : window.pageXOffset || (document.documentElement || document.body).scrollLeft } function En() { return o && a ? -(document.body.getBoundingClientRect().top - parseInt(getComputedStyle(document.body).marginTop)) : window.pageYOffset || (document.documentElement || document.body).scrollTop } function Pn(e) { var t = 0; if (e.widgets) for (var n = 0; n < e.widgets.length; ++n) e.widgets[n].above && (t += gn(e.widgets[n])); return t } function In(e, t, n, r, i) { if (i || (i = Pn(t), n.top += i, n.bottom += i), "line" == r) return n; r = r || "local"; t = Vt(t); return "local" == r ? t += vn(e.display) : t -= e.display.viewOffset, "page" != r && "window" != r || (t += (e = e.display.lineSpace.getBoundingClientRect()).top + ("window" == r ? 0 : En()), r = e.left + ("window" == r ? 0 : Fn()), n.left += r, n.right += r), n.top += t, n.bottom += t, n } function Rn(e, t, n) { if ("div" == n) return t; var r = t.left , t = t.top; "page" == n ? (r -= Fn(), t -= En()) : "local" != n && n || (r += (n = e.display.sizer.getBoundingClientRect()).left, t += n.top); e = e.display.lineSpace.getBoundingClientRect(); return { left: r - e.left, top: t - e.top } } function zn(e, t, n, r, i) { return In(e, r = r || $e(e.doc, t.line), Ln(e, r, t.ch, i), n) } function Bn(n, e, r, i, o, l) { function s(e, t) { e = Mn(n, o, e, t ? "right" : "left", l); return t ? e.left = e.right : e.right = e.left, In(n, i, e, r) } i = i || $e(n.doc, e.line), o = o || Tn(n, i); var a = me(i, n.doc.direction) , t = e.ch , u = e.sticky; if (t >= i.text.length ? (t = i.text.length, u = "before") : t <= 0 && (t = 0, u = "after"), !a) return s("before" == u ? t - 1 : t, "before" == u); function c(e, t, n) { return s(n ? e - 1 : e, 1 == a[t].level != n) } var h = le(a, t, u) , e = oe , h = c(t, h, "before" == u); return null != e && (h.other = c(t, e, "before" != u)), h } function Gn(e, t) { var n = 0; t = ct(e.doc, t), e.options.lineWrapping || (n = _n(e.display) * t.ch); t = $e(e.doc, t.line), e = Vt(t) + vn(e.display); return { left: n, right: n, top: e, bottom: e + t.height } } function Un(e, t, n, r, i) { n = rt(e, t, n); return n.xRel = i, r && (n.outside = r), n } function Vn(e, t, n) { var r = e.doc; if ((n += e.display.viewOffset) < 0) return Un(r.first, 0, null, -1, -1); var i = et(r, n) , o = r.first + r.size - 1; if (o < i) return Un(r.first + r.size - 1, $e(r, o).text.length, null, 1, 1); t < 0 && (t = 0); for (var l = $e(r, i); ;) { var s = function (n, e, t, r, i) { i -= Vt(e); var o = Tn(n, e) , l = Pn(e) , s = 0 , a = e.text.length , u = !0 , c = me(e, n.doc.direction); c && (f = (n.options.lineWrapping ? function (e, t, n, r, i, o, l) { var l = Kn(e, t, r, l) , s = l.begin , a = l.end; /\s/.test(t.text.charAt(a - 1)) && a--; for (var u = null, c = null, h = 0; h < i.length; h++) { var d, f = i[h]; f.from >= a || f.to <= s || (d = 1 != f.level, d = Mn(e, r, d ? Math.min(a, f.to) - 1 : Math.max(s, f.from)).right, d = d < o ? o - d + 1e9 : d - o, (!u || d < c) && (u = f, c = d)) } u = u || i[i.length - 1]; u.from < s && (u = { from: s, to: u.to, level: u.level }); u.to > a && (u = { from: u.from, to: a, level: u.level }); return u } : function (n, r, i, o, l, s, a) { var e = ie(function (e) { var t = l[e] , e = 1 != t.level; return Xn(Bn(n, rt(i, e ? t.to : t.from, e ? "before" : "after"), "line", r, o), s, a, !0) }, 0, l.length - 1) , t = l[e]; { var u; 0 < e && (u = 1 != t.level, Xn(u = Bn(n, rt(i, u ? t.from : t.to, u ? "after" : "before"), "line", r, o), s, a, !0) && u.top > a && (t = l[e - 1])) } return t } )(n, e, t, o, c, r, i), u = 1 != f.level, s = u ? f.from : f.to - 1, a = u ? f.to : f.from - 1); var h = null , d = null , c = ie(function (e) { var t = Mn(n, o, e); return t.top += l, t.bottom += l, Xn(t, r, i, !1) && (t.top <= i && t.left <= r && (h = e, d = t), 1) }, s, a) , f = !1; { var p, g; d ? (p = r - d.left < d.right - r, c = h + ((g = p == u) ? 0 : 1), g = g ? "after" : "before", p = p ? d.left : d.right) : (u || c != a && c != s || c++, g = 0 == c || c != e.text.length && Mn(n, o, c - (u ? 1 : 0)).bottom + l <= i == u ? "after" : "before", u = Bn(n, rt(t, c, g), "line", e, o), p = u.left, f = i < u.top ? -1 : i >= u.bottom ? 1 : 0) } return c = re(e.text, c, 1), Un(t, c, g, f, r - p) }(e, l, i, t, n) , a = function (e, t) { var n, r = kt && e.markedSpans; if (r) for (var i = 0; i < r.length; ++i) { var o = r[i]; o.marker.collapsed && (null == o.from || o.from < t) && (null == o.to || o.to > t) && (!n || Ft(n, o.marker) < 0) && (n = o.marker) } return n }(l, s.ch + (0 < s.xRel || 0 < s.outside ? 1 : 0)); if (!a) return s; a = a.find(1); if (a.line == i) return a; l = $e(r, i = a.line) } } function Kn(t, e, n, r) { r -= Pn(e); var i = e.text.length , e = ie(function (e) { return Mn(t, n, e - 1).bottom <= r }, i, 0); return { begin: e, end: i = ie(function (e) { return Mn(t, n, e).top > r }, e, i) } } function jn(e, t, n, r) { return Kn(e, t, n = n || Tn(e, t), In(e, t, Mn(e, n, r), "line").top) } function Xn(e, t, n, r) { return !(e.bottom <= n) && (e.top > n || (r ? e.left : e.right) > t) } function Yn(e) { if (null != e.cachedTextHeight) return e.cachedTextHeight; if (null == Nn) { Nn = M("pre", null, "CodeMirror-line-like"); for (var t = 0; t < 49; ++t) Nn.appendChild(document.createTextNode("x")), Nn.appendChild(M("br")); Nn.appendChild(document.createTextNode("x")) } T(e.measure, Nn); var n = Nn.offsetHeight / 50; return 3 < n && (e.cachedTextHeight = n), k(e.measure), n || 1 } function _n(e) { if (null != e.cachedCharWidth) return e.cachedCharWidth; var t = M("span", "xxxxxxxxxx") , n = M("pre", [t], "CodeMirror-line-like"); T(e.measure, n); t = t.getBoundingClientRect(), t = (t.right - t.left) / 10; return 2 < t && (e.cachedCharWidth = t), t || 10 } function $n(e) { for (var t = e.display, n = {}, r = {}, i = t.gutters.clientLeft, o = t.gutters.firstChild, l = 0; o; o = o.nextSibling, ++l) { var s = e.display.gutterSpecs[l].className; n[s] = o.offsetLeft + o.clientLeft + i, r[s] = o.clientWidth } return { fixedPos: qn(t), gutterTotalWidth: t.gutters.offsetWidth, gutterLeft: n, gutterWidth: r, wrapperWidth: t.wrapper.clientWidth } } function qn(e) { return e.scroller.getBoundingClientRect().left - e.sizer.getBoundingClientRect().left } function Zn(r) { var i = Yn(r.display) , o = r.options.lineWrapping , l = o && Math.max(5, r.display.scroller.clientWidth / _n(r.display) - 3); return function (e) { if (Ut(r.doc, e)) return 0; var t = 0; if (e.widgets) for (var n = 0; n < e.widgets.length; n++) e.widgets[n].height && (t += e.widgets[n].height); return o ? t + (Math.ceil(e.text.length / l) || 1) * i : t + i } } function Qn(e) { var t = e.doc , n = Zn(e); t.iter(function (e) { var t = n(e); t != e.height && Qe(e, t) }) } function Jn(e, t, n, r) { var i = e.display; if (!n && "true" == Oe(t).getAttribute("cm-not-content")) return null; var o, l, s = i.lineSpace.getBoundingClientRect(); try { o = t.clientX - s.left, l = t.clientY - s.top } catch (e) { return null } var a, i = Vn(e, o, l); return r && 0 < i.xRel && (a = $e(e.doc, i.line).text).length == i.ch && (a = P(a, a.length, e.options.tabSize) - a.length, i = rt(i.line, Math.max(0, Math.round((o - bn(e.display).left) / _n(e.display)) - a))), i } function er(e, t) { if (t >= e.display.viewTo) return null; if ((t -= e.display.viewFrom) < 0) return null; for (var n = e.display.view, r = 0; r < n.length; r++) if ((t -= n[r].size) < 0) return r } function tr(e, t, n, r) { null == t && (t = e.doc.first), null == n && (n = e.doc.first + e.doc.size), r = r || 0; var i, o, l = e.display; r && n < l.viewTo && (null == l.updateLineNumbers || l.updateLineNumbers > t) && (l.updateLineNumbers = t), e.curOp.viewChanged = !0, t >= l.viewTo ? kt && Bt(e.doc, t) < l.viewTo && rr(e) : n <= l.viewFrom ? kt && Gt(e.doc, n + r) > l.viewFrom ? rr(e) : (l.viewFrom += r, l.viewTo += r) : t <= l.viewFrom && n >= l.viewTo ? rr(e) : t <= l.viewFrom ? (i = ir(e, n, n + r, 1)) ? (l.view = l.view.slice(i.index), l.viewFrom = i.lineN, l.viewTo += r) : rr(e) : n >= l.viewTo ? (o = ir(e, t, t, -1)) ? (l.view = l.view.slice(0, o.index), l.viewTo = o.lineN) : rr(e) : (i = ir(e, t, t, -1), o = ir(e, n, n + r, 1), i && o ? (l.view = l.view.slice(0, i.index).concat(tn(e, i.lineN, o.lineN)).concat(l.view.slice(o.index)), l.viewTo += r) : rr(e)); e = l.externalMeasured; e && (n < e.lineN ? e.lineN += r : t < e.lineN + e.size && (l.externalMeasured = null)) } function nr(e, t, n) { e.curOp.viewChanged = !0; var r = e.display , i = e.display.externalMeasured; i && t >= i.lineN && t < i.lineN + i.size && (r.externalMeasured = null), t < r.viewFrom || t >= r.viewTo || (null == (t = r.view[er(e, t)]).node || -1 == R(t = t.changes || (t.changes = []), n) && t.push(n)) } function rr(e) { e.display.viewFrom = e.display.viewTo = e.doc.first, e.display.view = [], e.display.viewOffset = 0 } function ir(e, t, n, r) { var i, o = er(e, t), l = e.display.view; if (!kt || n == e.doc.first + e.doc.size) return { index: o, lineN: n }; for (var s = e.display.viewFrom, a = 0; a < o; a++) s += l[a].size; if (s != t) { if (0 < r) { if (o == l.length - 1) return null; i = s + l[o].size - t, o++ } else i = s - t; t += i, n += i } for (; Bt(e.doc, n) != n;) { if (o == (r < 0 ? 0 : l.length - 1)) return null; n += r * l[o - (r < 0 ? 1 : 0)].size, o += r } return { index: o, lineN: n } } function or(e) { for (var t = e.display.view, n = 0, r = 0; r < t.length; r++) { var i = t[r]; i.hidden || i.node && !i.changes || ++n } return n } function lr(e) { e.display.input.showSelection(e.display.input.prepareSelection()) } function sr(e, t) { void 0 === t && (t = !0); for (var n, r, i = e.doc, o = {}, l = o.cursors = document.createDocumentFragment(), s = o.selection = document.createDocumentFragment(), a = 0; a < i.sel.ranges.length; a++) !t && a == i.sel.primIndex || ((n = i.sel.ranges[a]).from().line >= e.display.viewTo || n.to().line < e.display.viewFrom || (((r = n.empty()) || e.options.showCursorWhenSelecting) && ar(e, n.head, l), r || function (i, e, t) { var n = i.display , o = i.doc , l = document.createDocumentFragment() , r = bn(i.display) , S = r.left , L = Math.max(n.sizerWidth, xn(i) - n.sizer.offsetLeft) - r.right , k = "ltr" == o.direction; function T(e, t, n, r) { t < 0 && (t = 0), t = Math.round(t), r = Math.round(r), l.appendChild(M("div", null, "CodeMirror-selected", "position: absolute; left: " + e + "px;\n top: " + t + "px; width: " + (null == n ? L - e : n) + "px;\n height: " + (r - t) + "px")) } function s(n, g, m) { var v, y, r = $e(o, n), b = r.text.length; function w(e, t) { return zn(i, rt(n, e), "div", r, t) } function x(e, t, n) { e = jn(i, r, null, e), t = "ltr" == t == ("after" == n) ? "left" : "right"; return w("after" == n ? e.begin : e.end - (/\s/.test(r.text.charAt(e.end - 1)) ? 2 : 1), t)[t] } var C = me(r, o.direction); return function (e, t, n, r) { if (!e) return r(t, n, "ltr", 0); for (var i = !1, o = 0; o < e.length; ++o) { var l = e[o]; (l.from < n && l.to > t || t == n && l.to == t) && (r(Math.max(l.from, t), Math.min(l.to, n), 1 == l.level ? "rtl" : "ltr", o), i = !0) } i || r(t, n, "ltr") }(C, g || 0, null == m ? b : m, function (e, t, n, r) { var i, o, l, s, a = "ltr" == n, u = w(e, a ? "left" : "right"), c = w(t - 1, a ? "right" : "left"), h = null == g && 0 == e, d = null == m && t == b, f = 0 == r, p = !C || r == C.length - 1; c.top - u.top <= 3 ? (i = (k ? d : h) && p, r = (k ? h : d) && f ? S : (a ? u : c).left, i = i ? L : (a ? c : u).right, T(r, u.top, i - r, u.bottom)) : (n = a ? (o = k && h && f ? S : u.left, l = k ? L : x(e, n, "before"), s = k ? S : x(t, n, "after"), k && d && p ? L : c.right) : (o = k ? x(e, n, "before") : S, l = !k && h && f ? L : u.right, s = !k && d && p ? S : c.left, k ? x(t, n, "after") : L), T(o, u.top, l - o, u.bottom), u.bottom < c.top && T(S, u.bottom, null, c.top), T(s, c.top, n - s, c.bottom)), (!v || ur(u, v) < 0) && (v = u), ur(c, v) < 0 && (v = c), (!y || ur(u, y) < 0) && (y = u), ur(c, y) < 0 && (y = c) }), { start: v, end: y } } var a = e.from() , n = e.to(); a.line == n.line ? s(a.line, a.ch, n.ch) : (r = $e(o, a.line), e = $e(o, n.line), e = zt(r) == zt(e), r = s(a.line, a.ch, e ? r.text.length + 1 : null).end, n = s(n.line, e ? 0 : null, n.ch).start, e && (r.top < n.top - 2 ? (T(r.right, r.top, null, r.bottom), T(S, n.top, n.left, n.bottom)) : T(r.right, r.top, n.left - r.right, r.bottom)), r.bottom < n.top && T(S, r.bottom, null, n.top)); t.appendChild(l) }(e, n, s))); return o } function ar(e, t, n) { var r = Bn(e, t, "div", null, null, !e.options.singleCursorHeightPerLine) , t = n.appendChild(M("div", " ", "CodeMirror-cursor")); t.style.left = r.left + "px", t.style.top = r.top + "px", t.style.height = Math.max(0, r.bottom - r.top) * e.options.cursorHeight + "px", r.other && ((n = n.appendChild(M("div", " ", "CodeMirror-cursor CodeMirror-secondarycursor"))).style.display = "", n.style.left = r.other.left + "px", n.style.top = r.other.top + "px", n.style.height = .85 * (r.other.bottom - r.other.top) + "px") } function ur(e, t) { return e.top - t.top || e.left - t.left } function cr(e) { var t, n; e.state.focused && (t = e.display, clearInterval(t.blinker), n = !0, t.cursorDiv.style.visibility = "", 0 < e.options.cursorBlinkRate ? t.blinker = setInterval(function () { e.hasFocus() || pr(e), t.cursorDiv.style.visibility = (n = !n) ? "" : "hidden" }, e.options.cursorBlinkRate) : e.options.cursorBlinkRate < 0 && (t.cursorDiv.style.visibility = "hidden")) } function hr(e) { e.hasFocus() || (e.display.input.focus(), e.state.focused || fr(e)) } function dr(e) { e.state.delayingBlurEvent = !0, setTimeout(function () { e.state.delayingBlurEvent && (e.state.delayingBlurEvent = !1, e.state.focused && pr(e)) }, 100) } function fr(e, t) { e.state.delayingBlurEvent && !e.state.draggingText && (e.state.delayingBlurEvent = !1), "nocursor" != e.options.readOnly && (e.state.focused || (xe(e, "focus", e, t), e.state.focused = !0, D(e.display.wrapper, "CodeMirror-focused"), e.curOp || e.display.selForContextMenu == e.doc.sel || (e.display.input.reset(), f && setTimeout(function () { return e.display.input.reset(!0) }, 20)), e.display.input.receivedFocus()), cr(e)) } function pr(e, t) { e.state.delayingBlurEvent || (e.state.focused && (xe(e, "blur", e, t), e.state.focused = !1, L(e.display.wrapper, "CodeMirror-focused")), clearInterval(e.display.blinker), setTimeout(function () { e.state.focused || (e.display.shift = !1) }, 150)) } function gr(e) { for (var t = e.display, n = t.lineDiv.offsetTop, r = 0; r < t.view.length; r++) { var i, o = t.view[r], l = e.options.lineWrapping, s = void 0, a = 0; if (!o.hidden) { w && v < 8 ? (s = (i = o.node.offsetTop + o.node.offsetHeight) - n, n = i) : (s = (u = o.node.getBoundingClientRect()).bottom - u.top, !l && o.text.firstChild && (a = o.text.firstChild.getBoundingClientRect().right - u.left - 1)); var u = o.line.height - s; if ((.005 < u || u < -.005) && (Qe(o.line, s), mr(o.line), o.rest)) for (var c = 0; c < o.rest.length; c++) mr(o.rest[c]); a > e.display.sizerWidth && ((a = Math.ceil(a / _n(e.display))) > e.display.maxLineLength && (e.display.maxLineLength = a, e.display.maxLine = o.line, e.display.maxLineChanged = !0)) } } } function mr(e) { if (e.widgets) for (var t = 0; t < e.widgets.length; ++t) { var n = e.widgets[t] , r = n.node.parentNode; r && (n.height = r.offsetHeight) } } function vr(e, t, n) { var r = n && null != n.top ? Math.max(0, n.top) : e.scroller.scrollTop , r = Math.floor(r - vn(e)) , i = n && null != n.bottom ? n.bottom : r + e.wrapper.clientHeight , o = et(t, r) , r = et(t, i); return n && n.ensure && (i = n.ensure.from.line, n = n.ensure.to.line, i < o ? r = et(t, Vt($e(t, o = i)) + e.wrapper.clientHeight) : Math.min(n, t.lastLine()) >= r && (o = et(t, Vt($e(t, n)) - e.wrapper.clientHeight), r = n)), { from: o, to: Math.max(r, o + 1) } } function yr(e, t) { var n = e.display , r = Yn(e.display); t.top < 0 && (t.top = 0); var i = (e.curOp && null != e.curOp.scrollTop ? e.curOp : n.scroller).scrollTop , o = Cn(e) , l = {}; t.bottom - t.top > o && (t.bottom = t.top + o); var s = e.doc.height + yn(n) , a = t.top < r , r = t.bottom > s - r; t.top < i ? l.scrollTop = a ? 0 : t.top : t.bottom > i + o && ((u = Math.min(t.top, (r ? s : t.bottom) - o)) != i && (l.scrollTop = u)); var i = e.options.fixedGutter ? 0 : n.gutters.offsetWidth , u = e.curOp && null != e.curOp.scrollLeft ? e.curOp.scrollLeft : n.scroller.scrollLeft - i , e = xn(e) - n.gutters.offsetWidth , n = t.right - t.left > e; return n && (t.right = t.left + e), t.left < 10 ? l.scrollLeft = 0 : t.left < u ? l.scrollLeft = Math.max(0, t.left + i - (n ? 0 : 10)) : t.right > e + u - 3 && (l.scrollLeft = t.right + (n ? 0 : 10) - e), l } function br(e, t) { null != t && (Cr(e), e.curOp.scrollTop = (null == e.curOp.scrollTop ? e.doc : e.curOp).scrollTop + t) } function wr(e) { Cr(e); var t = e.getCursor(); e.curOp.scrollToPos = { from: t, to: t, margin: e.options.cursorScrollMargin } } function xr(e, t, n) { null == t && null == n || Cr(e), null != t && (e.curOp.scrollLeft = t), null != n && (e.curOp.scrollTop = n) } function Cr(e) { var t = e.curOp.scrollToPos; t && (e.curOp.scrollToPos = null, Sr(e, Gn(e, t.from), Gn(e, t.to), t.margin)) } function Sr(e, t, n, r) { r = yr(e, { left: Math.min(t.left, n.left), top: Math.min(t.top, n.top) - r, right: Math.max(t.right, n.right), bottom: Math.max(t.bottom, n.bottom) + r }); xr(e, r.scrollLeft, r.scrollTop) } function Lr(e, t) { Math.abs(e.doc.scrollTop - t) < 2 || (d || Kr(e, { top: t }), kr(e, t, !0), d && Kr(e), zr(e, 100)) } function kr(e, t, n) { t = Math.max(0, Math.min(e.display.scroller.scrollHeight - e.display.scroller.clientHeight, t)), e.display.scroller.scrollTop == t && !n || (e.doc.scrollTop = t, e.display.scrollbars.setScrollTop(t), e.display.scroller.scrollTop != t && (e.display.scroller.scrollTop = t)) } function Tr(e, t, n, r) { t = Math.max(0, Math.min(t, e.display.scroller.scrollWidth - e.display.scroller.clientWidth)), (n ? t == e.doc.scrollLeft : Math.abs(e.doc.scrollLeft - t) < 2) && !r || (e.doc.scrollLeft = t, Yr(e), e.display.scroller.scrollLeft != t && (e.display.scroller.scrollLeft = t), e.display.scrollbars.setScrollLeft(t)) } function Mr(e) { var t = e.display , n = t.gutters.offsetWidth , r = Math.round(e.doc.height + yn(e.display)); return { clientHeight: t.scroller.clientHeight, viewHeight: t.wrapper.clientHeight, scrollWidth: t.scroller.scrollWidth, clientWidth: t.scroller.clientWidth, viewWidth: t.wrapper.clientWidth, barLeft: e.options.fixedGutter ? n : 0, docHeight: r, scrollHeight: r + wn(e) + t.barHeight, nativeBarWidth: t.nativeBarWidth, gutterWidth: n } } e = function (e, t, n) { this.cm = n; var r = this.vert = M("div", [M("div", null, null, "min-width: 1px")], "CodeMirror-vscrollbar") , i = this.horiz = M("div", [M("div", null, null, "height: 100%; min-height: 1px")], "CodeMirror-hscrollbar"); r.tabIndex = i.tabIndex = -1, e(r), e(i), ye(r, "scroll", function () { r.clientHeight && t(r.scrollTop, "vertical") }), ye(i, "scroll", function () { i.clientWidth && t(i.scrollLeft, "horizontal") }), this.checkedZeroWidth = !1, w && v < 8 && (this.horiz.style.minHeight = this.vert.style.minWidth = "18px") } ; e.prototype.update = function (e) { var t, n = e.scrollWidth > e.clientWidth + 1, r = e.scrollHeight > e.clientHeight + 1, i = e.nativeBarWidth; return r ? (this.vert.style.display = "block", this.vert.style.bottom = n ? i + "px" : "0", t = e.viewHeight - (n ? i : 0), this.vert.firstChild.style.height = Math.max(0, e.scrollHeight - e.clientHeight + t) + "px") : (this.vert.style.display = "", this.vert.firstChild.style.height = "0"), n ? (this.horiz.style.display = "block", this.horiz.style.right = r ? i + "px" : "0", this.horiz.style.left = e.barLeft + "px", t = e.viewWidth - e.barLeft - (r ? i : 0), this.horiz.firstChild.style.width = Math.max(0, e.scrollWidth - e.clientWidth + t) + "px") : (this.horiz.style.display = "", this.horiz.firstChild.style.width = "0"), !this.checkedZeroWidth && 0 < e.clientHeight && (0 == i && this.zeroWidthHack(), this.checkedZeroWidth = !0), { right: r ? i : 0, bottom: n ? i : 0 } } , e.prototype.setScrollLeft = function (e) { this.horiz.scrollLeft != e && (this.horiz.scrollLeft = e), this.disableHoriz && this.enableZeroWidthBar(this.horiz, this.disableHoriz, "horiz") } , e.prototype.setScrollTop = function (e) { this.vert.scrollTop != e && (this.vert.scrollTop = e), this.disableVert && this.enableZeroWidthBar(this.vert, this.disableVert, "vert") } , e.prototype.zeroWidthHack = function () { var e = g && !l ? "12px" : "18px"; this.horiz.style.height = this.vert.style.width = e, this.horiz.style.pointerEvents = this.vert.style.pointerEvents = "none", this.disableHoriz = new I, this.disableVert = new I } , e.prototype.enableZeroWidthBar = function (n, r, i) { n.style.pointerEvents = "auto", r.set(1e3, function e() { var t = n.getBoundingClientRect(); ("vert" == i ? document.elementFromPoint(t.right - 1, (t.top + t.bottom) / 2) : document.elementFromPoint((t.right + t.left) / 2, t.bottom - 1)) != n ? n.style.pointerEvents = "none" : r.set(1e3, e) }) } , e.prototype.clear = function () { var e = this.horiz.parentNode; e.removeChild(this.horiz), e.removeChild(this.vert) } ; r = function () { } ; function Nr(e, t) { t = t || Mr(e); var n = e.display.barWidth , r = e.display.barHeight; Ar(e, t); for (var i = 0; i < 4 && n != e.display.barWidth || r != e.display.barHeight; i++) n != e.display.barWidth && e.options.lineWrapping && gr(e), Ar(e, Mr(e)), n = e.display.barWidth, r = e.display.barHeight } function Ar(e, t) { var n = e.display , r = n.scrollbars.update(t); n.sizer.style.paddingRight = (n.barWidth = r.right) + "px", n.sizer.style.paddingBottom = (n.barHeight = r.bottom) + "px", n.heightForcer.style.borderBottom = r.bottom + "px solid transparent", r.right && r.bottom ? (n.scrollbarFiller.style.display = "block", n.scrollbarFiller.style.height = r.bottom + "px", n.scrollbarFiller.style.width = r.right + "px") : n.scrollbarFiller.style.display = "", r.bottom && e.options.coverGutterNextToScrollbar && e.options.fixedGutter ? (n.gutterFiller.style.display = "block", n.gutterFiller.style.height = r.bottom + "px", n.gutterFiller.style.width = t.gutterWidth + "px") : n.gutterFiller.style.display = "" } r.prototype.update = function () { return { bottom: 0, right: 0 } } , r.prototype.setScrollLeft = function () { } , r.prototype.setScrollTop = function () { } , r.prototype.clear = function () { } ; var Or = { native: e, null: r }; function Dr(n) { n.display.scrollbars && (n.display.scrollbars.clear(), n.display.scrollbars.addClass && L(n.display.wrapper, n.display.scrollbars.addClass)), n.display.scrollbars = new Or[n.options.scrollbarStyle](function (e) { n.display.wrapper.insertBefore(e, n.display.scrollbarFiller), ye(e, "mousedown", function () { n.state.focused && setTimeout(function () { return n.display.input.focus() }, 0) }), e.setAttribute("cm-not-content", "true") } , function (e, t) { ("horizontal" == t ? Tr : Lr)(n, e) } , n), n.display.scrollbars.addClass && D(n.display.wrapper, n.display.scrollbars.addClass) } var Wr = 0; function Hr(e) { e.curOp = { cm: e, viewChanged: !1, startHeight: e.doc.height, forceUpdate: !1, updateInput: 0, typing: !1, changeObjs: null, cursorActivityHandlers: null, cursorActivityCalled: 0, selectionChanged: !1, updateMaxLine: !1, scrollLeft: null, scrollTop: null, scrollToPos: null, focus: !1, id: ++Wr }, e = e.curOp, nn ? nn.ops.push(e) : e.ownsGroup = nn = { ops: [e], delayedCallbacks: [] } } function Fr(e) { e = e.curOp; e && rn(e, function (e) { for (var t = 0; t < e.ops.length; t++) e.ops[t].cm.curOp = null; !function (e) { for (var t = e.ops, n = 0; n < t.length; n++) !function (e) { var t = e.cm , n = t.display; (function (e) { var t = e.display; !t.scrollbarsClipped && t.scroller.offsetWidth && (t.nativeBarWidth = t.scroller.offsetWidth - t.scroller.clientWidth, t.heightForcer.style.height = wn(e) + "px", t.sizer.style.marginBottom = -t.nativeBarWidth + "px", t.sizer.style.borderRightWidth = wn(e) + "px", t.scrollbarsClipped = !0) } )(t), e.updateMaxLine && jt(t); e.mustUpdate = e.viewChanged || e.forceUpdate || null != e.scrollTop || e.scrollToPos && (e.scrollToPos.from.line < n.viewFrom || e.scrollToPos.to.line >= n.viewTo) || n.maxLineChanged && t.options.lineWrapping, e.update = e.mustUpdate && new Gr(t, e.mustUpdate && { top: e.scrollTop, ensure: e.scrollToPos }, e.forceUpdate) }(t[n]); for (var r = 0; r < t.length; r++) !function (e) { e.updatedDisplay = e.mustUpdate && Ur(e.cm, e.update) }(t[r]); for (var i = 0; i < t.length; i++) !function (e) { var t = e.cm , n = t.display; e.updatedDisplay && gr(t); e.barMeasure = Mr(t), n.maxLineChanged && !t.options.lineWrapping && (e.adjustWidthTo = Ln(t, n.maxLine, n.maxLine.text.length).left + 3, t.display.sizerWidth = e.adjustWidthTo, e.barMeasure.scrollWidth = Math.max(n.scroller.clientWidth, n.sizer.offsetLeft + e.adjustWidthTo + wn(t) + t.display.barWidth), e.maxScrollLeft = Math.max(0, n.sizer.offsetLeft + e.adjustWidthTo - xn(t))); (e.updatedDisplay || e.selectionChanged) && (e.preparedSelection = n.input.prepareSelection()) }(t[i]); for (var o = 0; o < t.length; o++) !function (e) { var t = e.cm; null != e.adjustWidthTo && (t.display.sizer.style.minWidth = e.adjustWidthTo + "px", e.maxScrollLeft < t.doc.scrollLeft && Tr(t, Math.min(t.display.scroller.scrollLeft, e.maxScrollLeft), !0), t.display.maxLineChanged = !1); var n = e.focus && e.focus == O(); e.preparedSelection && t.display.input.showSelection(e.preparedSelection, n); !e.updatedDisplay && e.startHeight == t.doc.height || Nr(t, e.barMeasure); e.updatedDisplay && Xr(t, e.barMeasure); e.selectionChanged && cr(t); t.state.focused && e.updateInput && t.display.input.reset(e.typing); n && hr(e.cm) }(t[o]); for (var l = 0; l < t.length; l++) !function (e) { var t = e.cm , n = t.display , r = t.doc; e.updatedDisplay && Vr(t, e.update); null == n.wheelStartX || null == e.scrollTop && null == e.scrollLeft && !e.scrollToPos || (n.wheelStartX = n.wheelStartY = null); null != e.scrollTop && kr(t, e.scrollTop, e.forceScroll); null != e.scrollLeft && Tr(t, e.scrollLeft, !0, !0); { var i; e.scrollToPos && (i = function (e, t, n, r) { null == r && (r = 0), e.options.lineWrapping || t != n || (n = "before" == (t = t.ch ? rt(t.line, "before" == t.sticky ? t.ch - 1 : t.ch, "after") : t).sticky ? rt(t.line, t.ch + 1, "before") : t); for (var i = 0; i < 5; i++) { var o, l = !1, s = Bn(e, t), a = n && n != t ? Bn(e, n) : s, u = yr(e, o = { left: Math.min(s.left, a.left), top: Math.min(s.top, a.top) - r, right: Math.max(s.left, a.left), bottom: Math.max(s.bottom, a.bottom) + r }), s = e.doc.scrollTop, a = e.doc.scrollLeft; if (null != u.scrollTop && (Lr(e, u.scrollTop), 1 < Math.abs(e.doc.scrollTop - s) && (l = !0)), null != u.scrollLeft && (Tr(e, u.scrollLeft), 1 < Math.abs(e.doc.scrollLeft - a) && (l = !0)), !l) break } return o }(t, ct(r, e.scrollToPos.from), ct(r, e.scrollToPos.to), e.scrollToPos.margin), function (e, t) { var n, r, i; Ce(e, "scrollCursorIntoView") || (r = (n = e.display).sizer.getBoundingClientRect(), i = null, t.top + r.top < 0 ? i = !0 : t.bottom + r.top > (window.innerHeight || document.documentElement.clientHeight) && (i = !1), null == i || u || (t = M("div", "​", null, "position: absolute;\n top: " + (t.top - n.viewOffset - vn(e.display)) + "px;\n height: " + (t.bottom - t.top + wn(e) + n.barHeight) + "px;\n left: " + t.left + "px; width: " + Math.max(2, t.right - t.left) + "px;"), e.display.lineSpace.appendChild(t), t.scrollIntoView(i), e.display.lineSpace.removeChild(t))) }(t, i)) } var o = e.maybeHiddenMarkers , l = e.maybeUnhiddenMarkers; if (o) for (var s = 0; s < o.length; ++s) o[s].lines.length || xe(o[s], "hide"); if (l) for (var a = 0; a < l.length; ++a) l[a].lines.length && xe(l[a], "unhide"); n.wrapper.offsetHeight && (r.scrollTop = t.display.scroller.scrollTop); e.changeObjs && xe(t, "changes", t, e.changeObjs); e.update && e.update.finish() }(t[l]) }(e) }) } function Er(e, t) { if (e.curOp) return t(); Hr(e); try { return t() } finally { Fr(e) } } function Pr(e, t) { return function () { if (e.curOp) return t.apply(e, arguments); Hr(e); try { return t.apply(e, arguments) } finally { Fr(e) } } } function Ir(e) { return function () { if (this.curOp) return e.apply(this, arguments); Hr(this); try { return e.apply(this, arguments) } finally { Fr(this) } } } function Rr(t) { return function () { var e = this.cm; if (!e || e.curOp) return t.apply(this, arguments); Hr(e); try { return t.apply(this, arguments) } finally { Fr(e) } } } function zr(e, t) { e.doc.highlightFrontier < e.display.viewTo && e.state.highlight.set(t, F(Br, e)) } function Br(l) { var s, a, u, c = l.doc; c.highlightFrontier >= l.display.viewTo || (s = +new Date + l.options.workTime, a = mt(l, c.highlightFrontier), u = [], c.iter(a.line, Math.min(c.first + c.size, l.display.viewTo + 500), function (e) { if (a.line >= l.display.viewFrom) { var t = e.styles , n = e.text.length > l.options.maxHighlightLength ? je(c.mode, a.state) : null , r = pt(l, e, a, !0); n && (a.state = n), e.styles = r.styles; n = e.styleClasses, r = r.classes; r ? e.styleClasses = r : n && (e.styleClasses = null); for (var i = !t || t.length != e.styles.length || n != r && (!n || !r || n.bgClass != r.bgClass || n.textClass != r.textClass), o = 0; !i && o < t.length; ++o) i = t[o] != e.styles[o]; i && u.push(a.line), e.stateAfter = a.save(), a.nextLine() } else e.text.length <= l.options.maxHighlightLength && vt(l, e.text, a), e.stateAfter = a.line % 5 == 0 ? a.save() : null, a.nextLine(); if (+new Date > s) return zr(l, l.options.workDelay), !0 }), c.highlightFrontier = a.line, c.modeFrontier = Math.max(c.modeFrontier, a.line), u.length && Er(l, function () { for (var e = 0; e < u.length; e++) nr(l, u[e], "text") })) } var Gr = function (e, t, n) { var r = e.display; this.viewport = t, this.visible = vr(r, e.doc, t), this.editorIsHidden = !r.wrapper.offsetWidth, this.wrapperHeight = r.wrapper.clientHeight, this.wrapperWidth = r.wrapper.clientWidth, this.oldDisplayWidth = xn(e), this.force = n, this.dims = $n(e), this.events = [] }; function Ur(e, t) { var n = e.display , r = e.doc; if (t.editorIsHidden) return rr(e), !1; if (!t.force && t.visible.from >= n.viewFrom && t.visible.to <= n.viewTo && (null == n.updateLineNumbers || n.updateLineNumbers >= n.viewTo) && n.renderedView == n.view && 0 == or(e)) return !1; _r(e) && (rr(e), t.dims = $n(e)); var i = r.first + r.size , o = Math.max(t.visible.from - e.options.viewportMargin, r.first) , l = Math.min(i, t.visible.to + e.options.viewportMargin); n.viewFrom < o && o - n.viewFrom < 20 && (o = Math.max(r.first, n.viewFrom)), n.viewTo > l && n.viewTo - l < 20 && (l = Math.min(i, n.viewTo)), kt && (o = Bt(e.doc, o), l = Gt(e.doc, l)); var s = o != n.viewFrom || l != n.viewTo || n.lastWrapHeight != t.wrapperHeight || n.lastWrapWidth != t.wrapperWidth; r = o, i = l, 0 == (l = (o = e).display).view.length || r >= l.viewTo || i <= l.viewFrom ? (l.view = tn(o, r, i), l.viewFrom = r) : (l.viewFrom > r ? l.view = tn(o, r, l.viewFrom).concat(l.view) : l.viewFrom < r && (l.view = l.view.slice(er(o, r))), l.viewFrom = r, l.viewTo < i ? l.view = l.view.concat(tn(o, l.viewTo, i)) : l.viewTo > i && (l.view = l.view.slice(0, er(o, i)))), l.viewTo = i, n.viewOffset = Vt($e(e.doc, n.viewFrom)), e.display.mover.style.top = n.viewOffset + "px"; o = or(e); if (!s && 0 == o && !t.force && n.renderedView == n.view && (null == n.updateLineNumbers || n.updateLineNumbers >= n.viewTo)) return !1; l = function (e) { if (e.hasFocus()) return null; var t = O(); if (!t || !A(e.display.lineDiv, t)) return null; var n = { activeElt: t }; return !window.getSelection || (t = window.getSelection()).anchorNode && t.extend && A(e.display.lineDiv, t.anchorNode) && (n.anchorNode = t.anchorNode, n.anchorOffset = t.anchorOffset, n.focusNode = t.focusNode, n.focusOffset = t.focusOffset), n }(e); return 4 < o && (n.lineDiv.style.display = "none"), function (n, e, t) { var r = n.display , i = n.options.lineNumbers , o = r.lineDiv , l = o.firstChild; function s(e) { var t = e.nextSibling; return f && g && n.display.currentWheelTarget == e ? e.style.display = "none" : e.parentNode.removeChild(e), t } for (var a = r.view, u = r.viewFrom, c = 0; c < a.length; c++) { var h = a[c]; if (!h.hidden) if (h.node && h.node.parentNode == o) { for (; l != h.node;) l = s(l); var d = i && null != e && e <= u && h.lineNumber; h.changes && (-1 < R(h.changes, "gutter") && (d = !1), an(n, h, u, t)), d && (k(h.lineNumber), h.lineNumber.appendChild(document.createTextNode(nt(n.options, u)))), l = h.node.nextSibling } else { d = function (e, t, n, r) { var i = cn(e, t); return t.text = t.node = i.pre, i.bgClass && (t.bgClass = i.bgClass), i.textClass && (t.textClass = i.textClass), hn(e, t), dn(e, t, n, r), fn(e, t, r), t.node }(n, h, u, t); o.insertBefore(d, l) } u += h.size } for (; l;) l = s(l) }(e, n.updateLineNumbers, t.dims), 4 < o && (n.lineDiv.style.display = ""), n.renderedView = n.view, (i = l) && i.activeElt && i.activeElt != O() && (i.activeElt.focus(), !/^(INPUT|TEXTAREA)$/.test(i.activeElt.nodeName) && i.anchorNode && A(document.body, i.anchorNode) && A(document.body, i.focusNode) && (o = window.getSelection(), (l = document.createRange()).setEnd(i.anchorNode, i.anchorOffset), l.collapse(!1), o.removeAllRanges(), o.addRange(l), o.extend(i.focusNode, i.focusOffset))), k(n.cursorDiv), k(n.selectionDiv), n.gutters.style.height = n.sizer.style.minHeight = 0, s && (n.lastWrapHeight = t.wrapperHeight, n.lastWrapWidth = t.wrapperWidth, zr(e, 400)), !(n.updateLineNumbers = null) } function Vr(e, t) { for (var n = t.viewport, r = !0; ; r = !1) { if (r && e.options.lineWrapping && t.oldDisplayWidth != xn(e)) r && (t.visible = vr(e.display, e.doc, n)); else if (n && null != n.top && (n = { top: Math.min(e.doc.height + yn(e.display) - Cn(e), n.top) }), t.visible = vr(e.display, e.doc, n), t.visible.from >= e.display.viewFrom && t.visible.to <= e.display.viewTo) break; if (!Ur(e, t)) break; gr(e); var i = Mr(e); lr(e), Nr(e, i), Xr(e, i), t.force = !1 } t.signal(e, "update", e), e.display.viewFrom == e.display.reportedViewFrom && e.display.viewTo == e.display.reportedViewTo || (t.signal(e, "viewportChange", e, e.display.viewFrom, e.display.viewTo), e.display.reportedViewFrom = e.display.viewFrom, e.display.reportedViewTo = e.display.viewTo) } function Kr(e, t) { var n = new Gr(e, t); Ur(e, n) && (gr(e), Vr(e, n), t = Mr(e), lr(e), Nr(e, t), Xr(e, t), n.finish()) } function jr(e) { var t = e.gutters.offsetWidth; e.sizer.style.marginLeft = t + "px" } function Xr(e, t) { e.display.sizer.style.minHeight = t.docHeight + "px", e.display.heightForcer.style.top = t.docHeight + "px", e.display.gutters.style.height = t.docHeight + e.display.barHeight + wn(e) + "px" } function Yr(e) { var t = e.display , n = t.view; if (t.alignWidgets || t.gutters.firstChild && e.options.fixedGutter) { for (var r = qn(t) - t.scroller.scrollLeft + e.doc.scrollLeft, i = t.gutters.offsetWidth, o = r + "px", l = 0; l < n.length; l++) if (!n[l].hidden) { e.options.fixedGutter && (n[l].gutter && (n[l].gutter.style.left = o), n[l].gutterBackground && (n[l].gutterBackground.style.left = o)); var s = n[l].alignable; if (s) for (var a = 0; a < s.length; a++) s[a].style.left = o } e.options.fixedGutter && (t.gutters.style.left = r + i + "px") } } function _r(e) { if (e.options.lineNumbers) { var t = e.doc , n = nt(e.options, t.first + t.size - 1) , r = e.display; if (n.length != r.lineNumChars) { var i = r.measure.appendChild(M("div", [M("div", n)], "CodeMirror-linenumber CodeMirror-gutter-elt")) , t = i.firstChild.offsetWidth , i = i.offsetWidth - t; return r.lineGutter.style.width = "", r.lineNumInnerWidth = Math.max(t, r.lineGutter.offsetWidth - i) + 1, r.lineNumWidth = r.lineNumInnerWidth + i, r.lineNumChars = r.lineNumInnerWidth ? n.length : -1, r.lineGutter.style.width = r.lineNumWidth + "px", jr(e.display), 1 } } } function $r(e, t) { for (var n = [], r = !1, i = 0; i < e.length; i++) { var o = e[i] , l = null; if ("string" != typeof o && (l = o.style, o = o.className), "CodeMirror-linenumbers" == o) { if (!t) continue; r = !0 } n.push({ className: o, style: l }) } return t && !r && n.push({ className: "CodeMirror-linenumbers", style: null }), n } function qr(e) { var t = e.gutters , n = e.gutterSpecs; k(t), e.lineGutter = null; for (var r = 0; r < n.length; ++r) { var i = n[r] , o = i.className , l = i.style , i = t.appendChild(M("div", null, "CodeMirror-gutter " + o)); l && (i.style.cssText = l), "CodeMirror-linenumbers" == o && ((e.lineGutter = i).style.width = (e.lineNumWidth || 1) + "px") } t.style.display = n.length ? "" : "none", jr(e) } function Zr(e) { qr(e.display), tr(e), Yr(e) } function Qr(e, t, n, r) { var i = this; this.input = n, i.scrollbarFiller = M("div", null, "CodeMirror-scrollbar-filler"), i.scrollbarFiller.setAttribute("cm-not-content", "true"), i.gutterFiller = M("div", null, "CodeMirror-gutter-filler"), i.gutterFiller.setAttribute("cm-not-content", "true"), i.lineDiv = N("div", null, "CodeMirror-code"), i.selectionDiv = M("div", null, null, "position: relative; z-index: 1"), i.cursorDiv = M("div", null, "CodeMirror-cursors"), i.measure = M("div", null, "CodeMirror-measure"), i.lineMeasure = M("div", null, "CodeMirror-measure"), i.lineSpace = N("div", [i.measure, i.lineMeasure, i.selectionDiv, i.cursorDiv, i.lineDiv], null, "position: relative; outline: none"); var o = N("div", [i.lineSpace], "CodeMirror-lines"); i.mover = M("div", [o], null, "position: relative"), i.sizer = M("div", [i.mover], "CodeMirror-sizer"), i.sizerWidth = null, i.heightForcer = M("div", null, null, "position: absolute; height: " + z + "px; width: 1px;"), i.gutters = M("div", null, "CodeMirror-gutters"), i.lineGutter = null, i.scroller = M("div", [i.sizer, i.heightForcer, i.gutters], "CodeMirror-scroll"), i.scroller.setAttribute("tabIndex", "-1"), i.wrapper = M("div", [i.scrollbarFiller, i.gutterFiller, i.scroller], "CodeMirror"), w && v < 8 && (i.gutters.style.zIndex = -1, i.scroller.style.paddingRight = 0), f || d && h || (i.scroller.draggable = !0), e && (e.appendChild ? e.appendChild(i.wrapper) : e(i.wrapper)), i.viewFrom = i.viewTo = t.first, i.reportedViewFrom = i.reportedViewTo = t.first, i.view = [], i.renderedView = null, i.externalMeasured = null, i.viewOffset = 0, i.lastWrapHeight = i.lastWrapWidth = 0, i.updateLineNumbers = null, i.nativeBarWidth = i.barHeight = i.barWidth = 0, i.scrollbarsClipped = !1, i.lineNumWidth = i.lineNumInnerWidth = i.lineNumChars = null, i.alignWidgets = !1, i.cachedCharWidth = i.cachedTextHeight = i.cachedPaddingH = null, i.maxLine = null, i.maxLineLength = 0, i.maxLineChanged = !1, i.wheelDX = i.wheelDY = i.wheelStartX = i.wheelStartY = null, i.shift = !1, i.selForContextMenu = null, i.activeTouch = null, i.gutterSpecs = $r(r.gutters, r.lineNumbers), qr(i), n.init(i) } Gr.prototype.signal = function (e, t) { Le(e, t) && this.events.push(arguments) } , Gr.prototype.finish = function () { for (var e = 0; e < this.events.length; e++) xe.apply(null, this.events[e]) } ; var Jr = 0 , ei = null; function ti(e) { var t = e.wheelDeltaX , n = e.wheelDeltaY; return null == t && e.detail && e.axis == e.HORIZONTAL_AXIS && (t = e.detail), null == n && e.detail && e.axis == e.VERTICAL_AXIS ? n = e.detail : null == n && (n = e.wheelDelta), { x: t, y: n } } function ni(e) { e = ti(e); return e.x *= ei, e.y *= ei, e } function ri(e, t) { var n = ti(t) , r = n.x , i = n.y , o = e.display , l = o.scroller , s = l.scrollWidth > l.clientWidth , a = l.scrollHeight > l.clientHeight; if (r && s || i && a) { if (i && g && f) e: for (var u = t.target, c = o.view; u != l; u = u.parentNode) for (var h = 0; h < c.length; h++) if (c[h].node == u) { e.display.currentWheelTarget = u; break e } if (r && !d && !p && null != ei) return i && a && Lr(e, Math.max(0, l.scrollTop + i * ei)), Tr(e, Math.max(0, l.scrollLeft + r * ei)), (!i || i && a) && Te(t), void (o.wheelStartX = null); i && null != ei && (n = i * ei, a = (s = e.doc.scrollTop) + o.wrapper.clientHeight, n < 0 ? s = Math.max(0, s + n - 50) : a = Math.min(e.doc.height, a + n + 50), Kr(e, { top: s, bottom: a })), Jr < 20 && (null == o.wheelStartX ? (o.wheelStartX = l.scrollLeft, o.wheelStartY = l.scrollTop, o.wheelDX = r, o.wheelDY = i, setTimeout(function () { var e, t; null != o.wheelStartX && (t = l.scrollLeft - o.wheelStartX, t = (e = l.scrollTop - o.wheelStartY) && o.wheelDY && e / o.wheelDY || t && o.wheelDX && t / o.wheelDX, o.wheelStartX = o.wheelStartY = null, t && (ei = (ei * Jr + t) / (Jr + 1), ++Jr)) }, 200)) : (o.wheelDX += r, o.wheelDY += i)) } } w ? ei = -.53 : d ? ei = 15 : o ? ei = -.7 : c && (ei = -1 / 3); var ii = function (e, t) { this.ranges = e, this.primIndex = t }; ii.prototype.primary = function () { return this.ranges[this.primIndex] } , ii.prototype.equals = function (e) { if (e == this) return !0; if (e.primIndex != this.primIndex || e.ranges.length != this.ranges.length) return !1; for (var t = 0; t < this.ranges.length; t++) { var n = this.ranges[t] , r = e.ranges[t]; if (!ot(n.anchor, r.anchor) || !ot(n.head, r.head)) return !1 } return !0 } , ii.prototype.deepCopy = function () { for (var e = [], t = 0; t < this.ranges.length; t++) e[t] = new oi(lt(this.ranges[t].anchor), lt(this.ranges[t].head)); return new ii(e, this.primIndex) } , ii.prototype.somethingSelected = function () { for (var e = 0; e < this.ranges.length; e++) if (!this.ranges[e].empty()) return !0; return !1 } , ii.prototype.contains = function (e, t) { t = t || e; for (var n = 0; n < this.ranges.length; n++) { var r = this.ranges[n]; if (0 <= it(t, r.from()) && it(e, r.to()) <= 0) return n } return -1 } ; var oi = function (e, t) { this.anchor = e, this.head = t }; function li(e, t, n) { var r = e && e.options.selectionsMayTouch , e = t[n]; t.sort(function (e, t) { return it(e.from(), t.from()) }), n = R(t, e); for (var i = 1; i < t.length; i++) { var o, l = t[i], s = t[i - 1], a = it(s.to(), l.from()); (r && !l.empty() ? 0 < a : 0 <= a) && (o = at(s.from(), l.from()), a = st(s.to(), l.to()), s = s.empty() ? l.from() == l.head : s.from() == s.head, i <= n && --n, t.splice(--i, 2, new oi(s ? a : o, s ? o : a))) } return new ii(t, n) } function si(e, t) { return new ii([new oi(e, t || e)], 0) } function ai(e) { return e.text ? rt(e.from.line + e.text.length - 1, Y(e.text).length + (1 == e.text.length ? e.from.ch : 0)) : e.to } function ui(e, t) { if (it(e, t.from) < 0) return e; if (it(e, t.to) <= 0) return ai(t); var n = e.line + t.text.length - (t.to.line - t.from.line) - 1 , r = e.ch; return e.line == t.to.line && (r += ai(t).ch - t.to.ch), rt(n, r) } function ci(e, t) { for (var n = [], r = 0; r < e.sel.ranges.length; r++) { var i = e.sel.ranges[r]; n.push(new oi(ui(i.anchor, t), ui(i.head, t))) } return li(e.cm, n, e.sel.primIndex) } function hi(e, t, n) { return e.line == t.line ? rt(n.line, e.ch - t.ch + n.ch) : rt(n.line + (e.line - t.line), e.ch) } function di(e) { e.doc.mode = Ue(e.options, e.doc.modeOption), fi(e) } function fi(e) { e.doc.iter(function (e) { e.stateAfter && (e.stateAfter = null), e.styles && (e.styles = null) }), e.doc.modeFrontier = e.doc.highlightFrontier = e.doc.first, zr(e, 100), e.state.modeGen++, e.curOp && tr(e) } function pi(e, t) { return 0 == t.from.ch && 0 == t.to.ch && "" == Y(t.text) && (!e.cm || e.cm.options.wholeLineUpdateBefore) } function gi(e, o, t, l) { function i(e) { return t ? t[e] : null } function n(e, t, n) { var r, i; r = t, i = n, t = l, (n = e).text = r, n.stateAfter && (n.stateAfter = null), n.styles && (n.styles = null), null != n.order && (n.order = null), Ot(n), Dt(n, i), (t = t ? t(n) : 1) != n.height && Qe(n, t), ln(e, "change", e, o) } function r(e, t) { for (var n = [], r = e; r < t; ++r) n.push(new Xt(c[r], i(r), l)); return n } var s, a = o.from, u = o.to, c = o.text, h = $e(e, a.line), d = $e(e, u.line), f = Y(c), p = i(c.length - 1), g = u.line - a.line; o.full ? (e.insert(0, r(0, c.length)), e.remove(c.length, e.size - c.length)) : pi(e, o) ? (s = r(0, c.length - 1), n(d, d.text, p), g && e.remove(a.line, g), s.length && e.insert(a.line, s)) : h == d ? 1 == c.length ? n(h, h.text.slice(0, a.ch) + f + h.text.slice(u.ch), p) : ((s = r(1, c.length - 1)).push(new Xt(f + h.text.slice(u.ch), p, l)), n(h, h.text.slice(0, a.ch) + c[0], i(0)), e.insert(a.line + 1, s)) : 1 == c.length ? (n(h, h.text.slice(0, a.ch) + c[0] + d.text.slice(u.ch), i(0)), e.remove(a.line + 1, g)) : (n(h, h.text.slice(0, a.ch) + c[0], i(0)), n(d, f + d.text.slice(u.ch), p), p = r(1, c.length - 1), 1 < g && e.remove(a.line + 1, g - 1), e.insert(a.line + 1, p)), ln(e, "change", e, o) } function mi(e, s, a) { !function e(t, n, r) { if (t.linked) for (var i = 0; i < t.linked.length; ++i) { var o, l = t.linked[i]; l.doc != n && (o = r && l.sharedHist, a && !o || (s(l.doc, o), e(l.doc, t, o))) } }(e, null, !0) } function vi(e, t) { if (t.cm) throw new Error("This document is already in use."); Qn((e.doc = t).cm = e), di(e), yi(e), e.options.lineWrapping || jt(e), e.options.mode = t.modeOption, tr(e) } function yi(e) { ("rtl" == e.doc.direction ? D : L)(e.display.lineDiv, "CodeMirror-rtl") } function bi(e) { this.done = [], this.undone = [], this.undoDepth = 1 / 0, this.lastModTime = this.lastSelTime = 0, this.lastOp = this.lastSelOp = null, this.lastOrigin = this.lastSelOrigin = null, this.generation = this.maxGeneration = e || 1 } function wi(e, t) { var n = { from: lt(t.from), to: ai(t), text: qe(e, t.from, t.to) }; return ki(e, n, t.from.line, t.to.line + 1), mi(e, function (e) { return ki(e, n, t.from.line, t.to.line + 1), 0 }, !0), n } function xi(e) { for (; e.length;) { if (!Y(e).ranges) break; e.pop() } } function Ci(e, t, n, r) { var i = e.history; i.undone.length = 0; var o, l, s = +new Date; if ((i.lastOp == r || i.lastOrigin == t.origin && t.origin && ("+" == t.origin.charAt(0) && i.lastModTime > s - (e.cm ? e.cm.options.historyEventDelay : 500) || "*" == t.origin.charAt(0))) && (o = (a = i).lastOp == r ? (xi(a.done), Y(a.done)) : a.done.length && !Y(a.done).ranges ? Y(a.done) : 1 < a.done.length && !a.done[a.done.length - 2].ranges ? (a.done.pop(), Y(a.done)) : void 0)) l = Y(o.changes), 0 == it(t.from, t.to) && 0 == it(t.from, l.to) ? l.to = ai(t) : o.changes.push(wi(e, t)); else { var a = Y(i.done); for (a && a.ranges || Li(e.sel, i.done), o = { changes: [wi(e, t)], generation: i.generation }, i.done.push(o); i.done.length > i.undoDepth;) i.done.shift(), i.done[0].ranges || i.done.shift() } i.done.push(n), i.generation = ++i.maxGeneration, i.lastModTime = i.lastSelTime = s, i.lastOp = i.lastSelOp = r, i.lastOrigin = i.lastSelOrigin = t.origin, l || xe(e, "historyAdded") } function Si(e, t, n, r) { var i, o, l, s = e.history, a = r && r.origin; n == s.lastSelOp || a && s.lastSelOrigin == a && (s.lastModTime == s.lastSelTime && s.lastOrigin == a || (i = e, o = a, l = Y(s.done), e = t, "*" == (o = o.charAt(0)) || "+" == o && l.ranges.length == e.ranges.length && l.somethingSelected() == e.somethingSelected() && new Date - i.history.lastSelTime <= (i.cm ? i.cm.options.historyEventDelay : 500))) ? s.done[s.done.length - 1] = t : Li(t, s.done), s.lastSelTime = +new Date, s.lastSelOrigin = a, s.lastSelOp = n, r && !1 !== r.clearRedo && xi(s.undone) } function Li(e, t) { var n = Y(t); n && n.ranges && n.equals(e) || t.push(e) } function ki(t, n, e, r) { var i = n["spans_" + t.id] , o = 0; t.iter(Math.max(t.first, e), Math.min(t.first + t.size, r), function (e) { e.markedSpans && ((i = i || (n["spans_" + t.id] = {}))[o] = e.markedSpans), ++o }) } function Ti(e, t) { var n = t["spans_" + e.id]; if (!n) return null; for (var r = [], i = 0; i < t.text.length; ++i) r.push(function (e) { if (!e) return null; for (var t, n = 0; n < e.length; ++n) e[n].marker.explicitlyCleared ? t = t || e.slice(0, n) : t && t.push(e[n]); return t ? t.length ? t : null : e }(n[i])); return r } function Mi(e, t) { var n = Ti(e, t) , r = Nt(e, t); if (!n) return r; if (!r) return n; for (var i = 0; i < n.length; ++i) { var o = n[i] , l = r[i]; if (o && l) e: for (var s = 0; s < l.length; ++s) { for (var a = l[s], u = 0; u < o.length; ++u) if (o[u].marker == a.marker) continue e; o.push(a) } else l && (n[i] = l) } return n } function Ni(e, t, n) { for (var r = [], i = 0; i < e.length; ++i) { var o = e[i]; if (o.ranges) r.push(n ? ii.prototype.deepCopy.call(o) : o); else { var l = o.changes , s = []; r.push({ changes: s }); for (var a = 0; a < l.length; ++a) { var u, c = l[a]; if (s.push({ from: c.from, to: c.to, text: c.text }), t) for (var h in c) (u = h.match(/^spans_(\d+)$/)) && -1 < R(t, Number(u[1])) && (Y(s)[h] = c[h], delete c[h]) } } } return r } function Ai(e, t, n, r) { if (r) { r = e.anchor; return n && ((e = it(t, r) < 0) != it(n, r) < 0 ? (r = t, t = n) : e != it(t, n) < 0 && (t = n)), new oi(r, t) } return new oi(n || t, t) } function Oi(e, t, n, r, i) { null == i && (i = e.cm && (e.cm.display.shift || e.extend)), Ei(e, new ii([Ai(e.sel.primary(), t, n, i)], 0), r) } function Di(e, t, n) { for (var r = [], i = e.cm && (e.cm.display.shift || e.extend), o = 0; o < e.sel.ranges.length; o++) r[o] = Ai(e.sel.ranges[o], t[o], null, i); Ei(e, li(e.cm, r, e.sel.primIndex), n) } function Wi(e, t, n, r) { var i = e.sel.ranges.slice(0); i[t] = n, Ei(e, li(e.cm, i, e.sel.primIndex), r) } function Hi(e, t, n, r) { Ei(e, si(t, n), r) } function Fi(e, t, n) { var r = e.history.done , i = Y(r); i && i.ranges ? Pi(e, r[r.length - 1] = t, n) : Ei(e, t, n) } function Ei(e, t, n) { Pi(e, t, n), Si(e, e.sel, e.cm ? e.cm.curOp.id : NaN, n) } function Pi(e, t, n) { var r, i; (Le(e, "beforeSelectionChange") || e.cm && Le(e.cm, "beforeSelectionChange")) && (r = e, i = n, i = { ranges: (o = t).ranges, update: function (e) { this.ranges = []; for (var t = 0; t < e.length; t++) this.ranges[t] = new oi(ct(r, e[t].anchor), ct(r, e[t].head)) }, origin: i && i.origin }, xe(r, "beforeSelectionChange", r, i), r.cm && xe(r.cm, "beforeSelectionChange", r.cm, i), t = i.ranges != o.ranges ? li(r.cm, i.ranges, i.ranges.length - 1) : o); var o = n && n.bias || (it(t.primary().head, e.sel.primary().head) < 0 ? -1 : 1); Ii(e, zi(e, t, o, !0)), n && !1 === n.scroll || !e.cm || wr(e.cm) } function Ii(e, t) { t.equals(e.sel) || (e.sel = t, e.cm && (e.cm.curOp.updateInput = 1, e.cm.curOp.selectionChanged = !0, Se(e.cm)), ln(e, "cursorActivity", e)) } function Ri(e) { Ii(e, zi(e, e.sel, null, !1)) } function zi(e, t, n, r) { for (var i, o = 0; o < t.ranges.length; o++) { var l = t.ranges[o] , s = t.ranges.length == e.sel.ranges.length && e.sel.ranges[o] , a = Gi(e, l.anchor, s && s.anchor, n, r) , s = Gi(e, l.head, s && s.head, n, r); !i && a == l.anchor && s == l.head || ((i = i || t.ranges.slice(0, o))[o] = new oi(a, s)) } return i ? li(e.cm, i, t.primIndex) : t } function Bi(e, t, n, r, i) { var o = $e(e, t.line); if (o.markedSpans) for (var l = 0; l < o.markedSpans.length; ++l) { var s = o.markedSpans[l] , a = s.marker , u = "selectLeft" in a ? !a.selectLeft : a.inclusiveLeft , c = "selectRight" in a ? !a.selectRight : a.inclusiveRight; if ((null == s.from || (u ? s.from <= t.ch : s.from < t.ch)) && (null == s.to || (c ? s.to >= t.ch : s.to > t.ch))) { if (i && (xe(a, "beforeCursorEnter"), a.explicitlyCleared)) { if (o.markedSpans) { --l; continue } break } if (a.atomic) { if (n) { var h = a.find(r < 0 ? 1 : -1) , s = void 0; if ((r < 0 ? c : u) && (h = Ui(e, h, -r, h && h.line == t.line ? o : null)), h && h.line == t.line && (s = it(h, n)) && (r < 0 ? s < 0 : 0 < s)) return Bi(e, h, t, r, i) } a = a.find(r < 0 ? -1 : 1); return (r < 0 ? u : c) && (a = Ui(e, a, r, a.line == t.line ? o : null)), a ? Bi(e, a, t, r, i) : null } } } return t } function Gi(e, t, n, r, i) { r = r || 1, r = Bi(e, t, n, r, i) || !i && Bi(e, t, n, r, !0) || Bi(e, t, n, -r, i) || !i && Bi(e, t, n, -r, !0); return r || (e.cantEdit = !0, rt(e.first, 0)) } function Ui(e, t, n, r) { return n < 0 && 0 == t.ch ? t.line > e.first ? ct(e, rt(t.line - 1)) : null : 0 < n && t.ch == (r || $e(e, t.line)).text.length ? t.line < e.first + e.size - 1 ? rt(t.line + 1, 0) : null : new rt(t.line, t.ch + n) } function Vi(e) { e.setSelection(rt(e.firstLine(), 0), rt(e.lastLine()), G) } function Ki(i, e, t) { var o = { canceled: !1, from: e.from, to: e.to, text: e.text, origin: e.origin, cancel: function () { return o.canceled = !0 } }; return t && (o.update = function (e, t, n, r) { e && (o.from = ct(i, e)), t && (o.to = ct(i, t)), n && (o.text = n), void 0 !== r && (o.origin = r) } ), xe(i, "beforeChange", i, o), i.cm && xe(i.cm, "beforeChange", i.cm, o), o.canceled ? (i.cm && (i.cm.curOp.updateInput = 2), null) : { from: o.from, to: o.to, text: o.text, origin: o.origin } } function ji(e, t, n) { if (e.cm) { if (!e.cm.curOp) return Pr(e.cm, ji)(e, t, n); if (e.cm.state.suppressEdits) return } if (!(Le(e, "beforeChange") || e.cm && Le(e.cm, "beforeChange")) || (t = Ki(e, t, !0))) { var r = Lt && !n && function (e, t, n) { var r = null; if (e.iter(t.line, n.line + 1, function (e) { if (e.markedSpans) for (var t = 0; t < e.markedSpans.length; ++t) { var n = e.markedSpans[t].marker; !n.readOnly || r && -1 != R(r, n) || (r = r || []).push(n) } }), !r) return null; for (var i = [{ from: t, to: n }], o = 0; o < r.length; ++o) for (var l = r[o], s = l.find(0), a = 0; a < i.length; ++a) { var u, c, h, d = i[a]; it(d.to, s.from) < 0 || 0 < it(d.from, s.to) || (u = [a, 1], c = it(d.from, s.from), h = it(d.to, s.to), (c < 0 || !l.inclusiveLeft && !c) && u.push({ from: d.from, to: s.from }), (0 < h || !l.inclusiveRight && !h) && u.push({ from: s.to, to: d.to }), i.splice.apply(i, u), a += u.length - 3) } return i }(e, t.from, t.to); if (r) for (var i = r.length - 1; 0 <= i; --i) Xi(e, { from: r[i].from, to: r[i].to, text: i ? [""] : t.text, origin: t.origin }); else Xi(e, t) } } function Xi(e, n) { var t, r; 1 == n.text.length && "" == n.text[0] && 0 == it(n.from, n.to) || (t = ci(e, n), Ci(e, n, t, e.cm ? e.cm.curOp.id : NaN), $i(e, n, t, Nt(e, n)), r = [], mi(e, function (e, t) { t || -1 != R(r, e.history) || (Ji(e.history, n), r.push(e.history)), $i(e, n, null, Nt(e, n)) })) } function Yi(i, o, e) { var t = i.cm && i.cm.state.suppressEdits; if (!t || e) { for (var l, n = i.history, r = i.sel, s = "undo" == o ? n.done : n.undone, a = "undo" == o ? n.undone : n.done, u = 0; u < s.length && (l = s[u], e ? !l.ranges || l.equals(i.sel) : l.ranges); u++) ; if (u != s.length) { for (n.lastOrigin = n.lastSelOrigin = null; ;) { if (!(l = s.pop()).ranges) { if (t) return void s.push(l); break } if (Li(l, a), e && !l.equals(i.sel)) return void Ei(i, l, { clearRedo: !1 }); r = l } var c = []; Li(r, a), a.push({ changes: c, generation: n.generation }), n.generation = l.generation || ++n.maxGeneration; for (var h = Le(i, "beforeChange") || i.cm && Le(i.cm, "beforeChange"), d = l.changes.length - 1; 0 <= d; --d) { var f = function (e) { var n = l.changes[e]; if (n.origin = o, h && !Ki(i, n, !1)) return s.length = 0, {}; c.push(wi(i, n)); var t = e ? ci(i, n) : Y(s); $i(i, n, t, Mi(i, n)), !e && i.cm && i.cm.scrollIntoView({ from: n.from, to: ai(n) }); var r = []; mi(i, function (e, t) { t || -1 != R(r, e.history) || (Ji(e.history, n), r.push(e.history)), $i(e, n, null, Mi(e, n)) }) }(d); if (f) return f.v } } } } function _i(e, t) { if (0 != t && (e.first += t, e.sel = new ii(_(e.sel.ranges, function (e) { return new oi(rt(e.anchor.line + t, e.anchor.ch), rt(e.head.line + t, e.head.ch)) }), e.sel.primIndex), e.cm)) { tr(e.cm, e.first, e.first - t, t); for (var n = e.cm.display, r = n.viewFrom; r < n.viewTo; r++) nr(e.cm, r, "gutter") } } function $i(e, t, n, r) { if (e.cm && !e.cm.curOp) return Pr(e.cm, $i)(e, t, n, r); var i; t.to.line < e.first ? _i(e, t.text.length - 1 - (t.to.line - t.from.line)) : t.from.line > e.lastLine() || (t.from.line < e.first && (_i(e, i = t.text.length - 1 - (e.first - t.from.line)), t = { from: rt(e.first, 0), to: rt(t.to.line + i, t.to.ch), text: [Y(t.text)], origin: t.origin }), i = e.lastLine(), t.to.line > i && (t = { from: t.from, to: rt(i, $e(e, i).text.length), text: [t.text[0]], origin: t.origin }), t.removed = qe(e, t.from, t.to), n = n || ci(e, t), e.cm ? function (e, t, n) { var r = e.doc , i = e.display , o = t.from , l = t.to , s = !1 , a = o.line; e.options.lineWrapping || (a = Je(zt($e(r, o.line))), r.iter(a, l.line + 1, function (e) { if (e == i.maxLine) return s = !0 })); -1 < r.sel.contains(t.from, t.to) && Se(e); gi(r, t, n, Zn(e)), e.options.lineWrapping || (r.iter(a, o.line + t.text.length, function (e) { var t = Kt(e); t > i.maxLineLength && (i.maxLine = e, i.maxLineLength = t, i.maxLineChanged = !0, s = !1) }), s && (e.curOp.updateMaxLine = !0)); (function (e, t) { if (e.modeFrontier = Math.min(e.modeFrontier, t), !(e.highlightFrontier < t - 10)) { for (var n = e.first, r = t - 1; n < r; r--) { var i = $e(e, r).stateAfter; if (i && (!(i instanceof dt) || r + i.lookAhead < t)) { n = r + 1; break } } e.highlightFrontier = Math.min(e.highlightFrontier, n) } } )(r, o.line), zr(e, 400); a = t.text.length - (l.line - o.line) - 1; t.full ? tr(e) : o.line != l.line || 1 != t.text.length || pi(e.doc, t) ? tr(e, o.line, l.line + 1, a) : nr(e, o.line, "text"); r = Le(e, "changes"), a = Le(e, "change"); (a || r) && (t = { from: o, to: l, text: t.text, removed: t.removed, origin: t.origin }, a && ln(e, "change", e, t), r && (e.curOp.changeObjs || (e.curOp.changeObjs = [])).push(t)); e.display.selForContextMenu = null }(e.cm, t, r) : gi(e, t, r), Pi(e, n, G), e.cantEdit && Gi(e, rt(e.firstLine(), 0)) && (e.cantEdit = !1)) } function qi(e, t, n, r, i) { var o; it(r = r || n, n) < 0 && (n = (o = [r, n])[0], r = o[1]), "string" == typeof t && (t = e.splitLines(t)), ji(e, { from: n, to: r, text: t, origin: i }) } function Zi(e, t, n, r) { n < e.line ? e.line += r : t < e.line && (e.line = t, e.ch = 0) } function Qi(e, t, n, r) { for (var i = 0; i < e.length; ++i) { var o = e[i] , l = !0; if (o.ranges) { o.copied || ((o = e[i] = o.deepCopy()).copied = !0); for (var s = 0; s < o.ranges.length; s++) Zi(o.ranges[s].anchor, t, n, r), Zi(o.ranges[s].head, t, n, r) } else { for (var a = 0; a < o.changes.length; ++a) { var u = o.changes[a]; if (n < u.from.line) u.from = rt(u.from.line + r, u.from.ch), u.to = rt(u.to.line + r, u.to.ch); else if (t <= u.to.line) { l = !1; break } } l || (e.splice(0, i + 1), i = 0) } } } function Ji(e, t) { var n = t.from.line , r = t.to.line , t = t.text.length - (r - n) - 1; Qi(e.done, n, r, t), Qi(e.undone, n, r, t) } function eo(e, t, n, r) { var i = t , o = t; return "number" == typeof t ? o = $e(e, ut(e, t)) : i = Je(t), null == i ? null : (r(o, i) && e.cm && nr(e.cm, i, n), o) } function to(e) { this.lines = e, this.parent = null; for (var t = 0, n = 0; n < e.length; ++n) e[n].parent = this, t += e[n].height; this.height = t } function no(e) { this.children = e; for (var t = 0, n = 0, r = 0; r < e.length; ++r) { var i = e[r]; t += i.chunkSize(), n += i.height, i.parent = this } this.size = t, this.height = n, this.parent = null } oi.prototype.from = function () { return at(this.anchor, this.head) } , oi.prototype.to = function () { return st(this.anchor, this.head) } , oi.prototype.empty = function () { return this.head.line == this.anchor.line && this.head.ch == this.anchor.ch } , to.prototype = { chunkSize: function () { return this.lines.length }, removeInner: function (e, t) { for (var n, r = e, i = e + t; r < i; ++r) { var o = this.lines[r]; this.height -= o.height, (n = o).parent = null, Ot(n), ln(o, "delete") } this.lines.splice(e, t) }, collapse: function (e) { e.push.apply(e, this.lines) }, insertInner: function (e, t, n) { this.height += n, this.lines = this.lines.slice(0, e).concat(t).concat(this.lines.slice(e)); for (var r = 0; r < t.length; ++r) t[r].parent = this }, iterN: function (e, t, n) { for (var r = e + t; e < r; ++e) if (n(this.lines[e])) return !0 } }, no.prototype = { chunkSize: function () { return this.size }, removeInner: function (e, t) { this.size -= t; for (var n, r = 0; r < this.children.length; ++r) { var i = this.children[r] , o = i.chunkSize(); if (e < o) { var l = Math.min(t, o - e) , s = i.height; if (i.removeInner(e, l), this.height -= s - i.height, o == l && (this.children.splice(r--, 1), i.parent = null), 0 == (t -= l)) break; e = 0 } else e -= o } this.size - t < 25 && (1 < this.children.length || !(this.children[0] instanceof to)) && (n = [], this.collapse(n), this.children = [new to(n)], this.children[0].parent = this) }, collapse: function (e) { for (var t = 0; t < this.children.length; ++t) this.children[t].collapse(e) }, insertInner: function (e, t, n) { this.size += t.length, this.height += n; for (var r = 0; r < this.children.length; ++r) { var i = this.children[r] , o = i.chunkSize(); if (e <= o) { if (i.insertInner(e, t, n), i.lines && 50 < i.lines.length) { for (var l = i.lines.length % 25 + 25, s = l; s < i.lines.length;) { var a = new to(i.lines.slice(s, s += 25)); i.height -= a.height, this.children.splice(++r, 0, a), a.parent = this } i.lines = i.lines.slice(0, l), this.maybeSpill() } break } e -= o } }, maybeSpill: function () { if (!(this.children.length <= 10)) { var e = this; do { var t, n = new no(e.children.splice(e.children.length - 5, 5)) } while (e.parent ? (e.size -= n.size, e.height -= n.height, t = R(e.parent.children, e), e.parent.children.splice(t + 1, 0, n)) : (((t = new no(e.children)).parent = e).children = [t, n], e = t), n.parent = e.parent, 10 < e.children.length); e.parent.maybeSpill() } }, iterN: function (e, t, n) { for (var r = 0; r < this.children.length; ++r) { var i = this.children[r] , o = i.chunkSize(); if (e < o) { var l = Math.min(t, o - e); if (i.iterN(e, l, n)) return !0; if (0 == (t -= l)) break; e = 0 } else e -= o } } }; function ro(e, t, n) { if (n) for (var r in n) n.hasOwnProperty(r) && (this[r] = n[r]); this.doc = e, this.node = t } function io(e, t, n) { Vt(t) < (e.curOp && e.curOp.scrollTop || e.doc.scrollTop) && br(e, n) } ro.prototype.clear = function () { var e = this.doc.cm , t = this.line.widgets , n = this.line , r = Je(n); if (null != r && t) { for (var i = 0; i < t.length; ++i) t[i] == this && t.splice(i--, 1); t.length || (n.widgets = null); var o = gn(this); Qe(n, Math.max(0, n.height - o)), e && (Er(e, function () { io(e, n, -o), nr(e, r, "widget") }), ln(e, "lineWidgetCleared", e, this, r)) } } , ro.prototype.changed = function () { var e = this , t = this.height , n = this.doc.cm , r = this.line; this.height = null; var i = gn(this) - t; i && (Ut(this.doc, r) || Qe(r, r.height + i), n && Er(n, function () { n.curOp.forceUpdate = !0, io(n, r, i), ln(n, "lineWidgetChanged", n, e, Je(r)) })) } , ke(ro); var oo = 0 , lo = function (e, t) { this.lines = [], this.type = t, this.doc = e, this.id = ++oo }; function so(t, n, r, e, i) { if (e && e.shared) return function (e, n, r, i, o) { (i = E(i)).shared = !1; var l = [so(e, n, r, i, o)] , s = l[0] , a = i.widgetNode; return mi(e, function (e) { a && (i.widgetNode = a.cloneNode(!0)), l.push(so(e, ct(e, n), ct(e, r), i, o)); for (var t = 0; t < e.linked.length; ++t) if (e.linked[t].isParent) return; s = Y(l) }), new ao(l, s) }(t, n, r, e, i); if (t.cm && !t.cm.curOp) return Pr(t.cm, so)(t, n, r, e, i); var o = new lo(t, i) , i = it(n, r); if (e && E(e, o, !1), 0 < i || 0 == i && !1 !== o.clearWhenEmpty) return o; if (o.replacedWith && (o.collapsed = !0, o.widgetNode = N("span", [o.replacedWith], "CodeMirror-widget"), e.handleMouseEvents || o.widgetNode.setAttribute("cm-ignore-events", "true"), e.insertLeft && (o.widgetNode.insertLeft = !0)), o.collapsed) { if (Rt(t, n.line, n, r, o) || n.line != r.line && Rt(t, r.line, n, r, o)) throw new Error("Inserting collapsed marker partially overlapping an existing one"); kt = !0 } o.addToHistory && Ci(t, { from: n, to: r, origin: "markText" }, t.sel, NaN); var l, s = n.line, a = t.cm; if (t.iter(s, r.line + 1, function (e) { var t; a && o.collapsed && !a.options.lineWrapping && zt(e) == a.display.maxLine && (l = !0), o.collapsed && s != n.line && Qe(e, 0), t = e, e = new Tt(o, s == n.line ? n.ch : null, s == r.line ? r.ch : null), t.markedSpans = t.markedSpans ? t.markedSpans.concat([e]) : [e], e.marker.attachLine(t), ++s }), o.collapsed && t.iter(n.line, r.line + 1, function (e) { Ut(t, e) && Qe(e, 0) }), o.clearOnEnter && ye(o, "beforeCursorEnter", function () { return o.clear() }), o.readOnly && (Lt = !0, (t.history.done.length || t.history.undone.length) && t.clearHistory()), o.collapsed && (o.id = ++oo, o.atomic = !0), a) { if (l && (a.curOp.updateMaxLine = !0), o.collapsed) tr(a, n.line, r.line + 1); else if (o.className || o.startStyle || o.endStyle || o.css || o.attributes || o.title) for (var u = n.line; u <= r.line; u++) nr(a, u, "text"); o.atomic && Ri(a.doc), ln(a, "markerAdded", a, o) } return o } lo.prototype.clear = function () { if (!this.explicitlyCleared) { var e, t = this.doc.cm, n = t && !t.curOp; n && Hr(t), !Le(this, "clear") || (e = this.find()) && ln(this, "clear", e.from, e.to); for (var r = null, i = null, o = 0; o < this.lines.length; ++o) { var l = this.lines[o] , s = Mt(l.markedSpans, this); t && !this.collapsed ? nr(t, Je(l), "text") : t && (null != s.to && (i = Je(l)), null != s.from && (r = Je(l))), l.markedSpans = function (e, t) { for (var n, r = 0; r < e.length; ++r) e[r] != t && (n = n || []).push(e[r]); return n }(l.markedSpans, s), null == s.from && this.collapsed && !Ut(this.doc, l) && t && Qe(l, Yn(t.display)) } if (t && this.collapsed && !t.options.lineWrapping) for (var a = 0; a < this.lines.length; ++a) { var u = zt(this.lines[a]) , c = Kt(u); c > t.display.maxLineLength && (t.display.maxLine = u, t.display.maxLineLength = c, t.display.maxLineChanged = !0) } null != r && t && this.collapsed && tr(t, r, i + 1), this.lines.length = 0, this.explicitlyCleared = !0, this.atomic && this.doc.cantEdit && (this.doc.cantEdit = !1, t && Ri(t.doc)), t && ln(t, "markerCleared", t, this, r, i), n && Fr(t), this.parent && this.parent.clear() } } , lo.prototype.find = function (e, t) { var n, r; null == e && "bookmark" == this.type && (e = 1); for (var i = 0; i < this.lines.length; ++i) { var o = this.lines[i] , l = Mt(o.markedSpans, this); if (null != l.from && (n = rt(t ? o : Je(o), l.from), -1 == e)) return n; if (null != l.to && (r = rt(t ? o : Je(o), l.to), 1 == e)) return r } return n && { from: n, to: r } } , lo.prototype.changed = function () { var n = this , r = this.find(-1, !0) , i = this , o = this.doc.cm; r && o && Er(o, function () { var e = r.line , t = Je(r.line) , t = kn(o, t); t && (Dn(t), o.curOp.selectionChanged = o.curOp.forceUpdate = !0), o.curOp.updateMaxLine = !0, Ut(i.doc, e) || null == i.height || (t = i.height, i.height = null, (t = gn(i) - t) && Qe(e, e.height + t)), ln(o, "markerChanged", o, n) }) } , lo.prototype.attachLine = function (e) { var t; !this.lines.length && this.doc.cm && ((t = this.doc.cm.curOp).maybeHiddenMarkers && -1 != R(t.maybeHiddenMarkers, this) || (t.maybeUnhiddenMarkers || (t.maybeUnhiddenMarkers = [])).push(this)), this.lines.push(e) } , lo.prototype.detachLine = function (e) { this.lines.splice(R(this.lines, e), 1), !this.lines.length && this.doc.cm && ((e = this.doc.cm.curOp).maybeHiddenMarkers || (e.maybeHiddenMarkers = [])).push(this) } , ke(lo); var ao = function (e, t) { this.markers = e, this.primary = t; for (var n = 0; n < e.length; ++n) e[n].parent = this }; function uo(e) { return e.findMarks(rt(e.first, 0), e.clipPos(rt(e.lastLine())), function (e) { return e.parent }) } ao.prototype.clear = function () { if (!this.explicitlyCleared) { this.explicitlyCleared = !0; for (var e = 0; e < this.markers.length; ++e) this.markers[e].clear(); ln(this, "clear") } } , ao.prototype.find = function (e, t) { return this.primary.find(e, t) } , ke(ao); var co = 0 , ho = function (e, t, n, r, i) { if (!(this instanceof ho)) return new ho(e, t, n, r, i); null == n && (n = 0), no.call(this, [new to([new Xt("", null)])]), this.first = n, this.scrollTop = this.scrollLeft = 0, this.cantEdit = !1, this.cleanGeneration = 1; n = rt(this.modeFrontier = this.highlightFrontier = n, 0); this.sel = si(n), this.history = new bi(null), this.id = ++co, this.modeOption = t, this.lineSep = r, this.direction = "rtl" == i ? "rtl" : "ltr", this.extend = !1, "string" == typeof e && (e = this.splitLines(e)), gi(this, { from: n, to: n, text: e }), Ei(this, si(n), G) }; ho.prototype = q(no.prototype, { constructor: ho, iter: function (e, t, n) { n ? this.iterN(e - this.first, t - e, n) : this.iterN(this.first, this.first + this.size, e) }, insert: function (e, t) { for (var n = 0, r = 0; r < t.length; ++r) n += t[r].height; this.insertInner(e - this.first, t, n) }, remove: function (e, t) { this.removeInner(e - this.first, t) }, getValue: function (e) { var t = Ze(this, this.first, this.first + this.size); return !1 === e ? t : t.join(e || this.lineSeparator()) }, setValue: Rr(function (e) { var t = rt(this.first, 0) , n = this.first + this.size - 1; ji(this, { from: t, to: rt(n, $e(this, n).text.length), text: this.splitLines(e), origin: "setValue", full: !0 }, !0), this.cm && xr(this.cm, 0, 0), Ei(this, si(t), G) }), replaceRange: function (e, t, n, r) { qi(this, e, t = ct(this, t), n = n ? ct(this, n) : t, r) }, getRange: function (e, t, n) { t = qe(this, ct(this, e), ct(this, t)); return !1 === n ? t : t.join(n || this.lineSeparator()) }, getLine: function (e) { e = this.getLineHandle(e); return e && e.text }, getLineHandle: function (e) { if (tt(this, e)) return $e(this, e) }, getLineNumber: Je, getLineHandleVisualStart: function (e) { return "number" == typeof e && (e = $e(this, e)), zt(e) }, lineCount: function () { return this.size }, firstLine: function () { return this.first }, lastLine: function () { return this.first + this.size - 1 }, clipPos: function (e) { return ct(this, e) }, getCursor: function (e) { var t = this.sel.primary() , t = null == e || "head" == e ? t.head : "anchor" == e ? t.anchor : "end" == e || "to" == e || !1 === e ? t.to() : t.from(); return t }, listSelections: function () { return this.sel.ranges }, somethingSelected: function () { return this.sel.somethingSelected() }, setCursor: Rr(function (e, t, n) { Hi(this, ct(this, "number" == typeof e ? rt(e, t || 0) : e), null, n) }), setSelection: Rr(function (e, t, n) { Hi(this, ct(this, e), ct(this, t || e), n) }), extendSelection: Rr(function (e, t, n) { Oi(this, ct(this, e), t && ct(this, t), n) }), extendSelections: Rr(function (e, t) { Di(this, ht(this, e), t) }), extendSelectionsBy: Rr(function (e, t) { Di(this, ht(this, _(this.sel.ranges, e)), t) }), setSelections: Rr(function (e, t, n) { if (e.length) { for (var r = [], i = 0; i < e.length; i++) r[i] = new oi(ct(this, e[i].anchor), ct(this, e[i].head)); null == t && (t = Math.min(e.length - 1, this.sel.primIndex)), Ei(this, li(this.cm, r, t), n) } }), addSelection: Rr(function (e, t, n) { var r = this.sel.ranges.slice(0); r.push(new oi(ct(this, e), ct(this, t || e))), Ei(this, li(this.cm, r, r.length - 1), n) }), getSelection: function (e) { for (var t = this.sel.ranges, n = 0; n < t.length; n++) var r = qe(this, t[n].from(), t[n].to()) , i = i ? i.concat(r) : r; return !1 === e ? i : i.join(e || this.lineSeparator()) }, getSelections: function (e) { for (var t = [], n = this.sel.ranges, r = 0; r < n.length; r++) { var i = qe(this, n[r].from(), n[r].to()); !1 !== e && (i = i.join(e || this.lineSeparator())), t[r] = i } return t }, replaceSelection: function (e, t, n) { for (var r = [], i = 0; i < this.sel.ranges.length; i++) r[i] = e; this.replaceSelections(r, t, n || "+input") }, replaceSelections: Rr(function (e, t, n) { for (var r = [], i = this.sel, o = 0; o < i.ranges.length; o++) { var l = i.ranges[o]; r[o] = { from: l.from(), to: l.to(), text: this.splitLines(e[o]), origin: n } } for (var t = t && "end" != t && function (e, t, n) { for (var r = [], i = u = rt(e.first, 0), o = 0; o < t.length; o++) { var l = t[o] , s = hi(l.from, u, i) , a = hi(ai(l), u, i) , u = l.to , i = a; "around" == n ? (l = it((l = e.sel.ranges[o]).head, l.anchor) < 0, r[o] = new oi(l ? a : s, l ? s : a)) : r[o] = new oi(s, s) } return new ii(r, e.sel.primIndex) }(this, r, t), s = r.length - 1; 0 <= s; s--) ji(this, r[s]); t ? Fi(this, t) : this.cm && wr(this.cm) }), undo: Rr(function () { Yi(this, "undo") }), redo: Rr(function () { Yi(this, "redo") }), undoSelection: Rr(function () { Yi(this, "undo", !0) }), redoSelection: Rr(function () { Yi(this, "redo", !0) }), setExtending: function (e) { this.extend = e }, getExtending: function () { return this.extend }, historySize: function () { for (var e = this.history, t = 0, n = 0, r = 0; r < e.done.length; r++) e.done[r].ranges || ++t; for (var i = 0; i < e.undone.length; i++) e.undone[i].ranges || ++n; return { undo: t, redo: n } }, clearHistory: function () { var t = this; this.history = new bi(this.history.maxGeneration), mi(this, function (e) { return e.history = t.history }, !0) }, markClean: function () { this.cleanGeneration = this.changeGeneration(!0) }, changeGeneration: function (e) { return e && (this.history.lastOp = this.history.lastSelOp = this.history.lastOrigin = null), this.history.generation }, isClean: function (e) { return this.history.generation == (e || this.cleanGeneration) }, getHistory: function () { return { done: Ni(this.history.done), undone: Ni(this.history.undone) } }, setHistory: function (e) { var t = this.history = new bi(this.history.maxGeneration); t.done = Ni(e.done.slice(0), null, !0), t.undone = Ni(e.undone.slice(0), null, !0) }, setGutterMarker: Rr(function (e, n, r) { return eo(this, e, "gutter", function (e) { var t = e.gutterMarkers || (e.gutterMarkers = {}); return !(t[n] = r) && ee(t) && (e.gutterMarkers = null), 1 }) }), clearGutter: Rr(function (t) { var n = this; this.iter(function (e) { e.gutterMarkers && e.gutterMarkers[t] && eo(n, e, "gutter", function () { return e.gutterMarkers[t] = null, ee(e.gutterMarkers) && (e.gutterMarkers = null), 1 }) }) }), lineInfo: function (e) { var t; if ("number" == typeof e) { if (!tt(this, e)) return null; if (!(e = $e(this, t = e))) return null } else if (null == (t = Je(e))) return null; return { line: t, handle: e, text: e.text, gutterMarkers: e.gutterMarkers, textClass: e.textClass, bgClass: e.bgClass, wrapClass: e.wrapClass, widgets: e.widgets } }, addLineClass: Rr(function (e, n, r) { return eo(this, e, "gutter" == n ? "gutter" : "class", function (e) { var t = "text" == n ? "textClass" : "background" == n ? "bgClass" : "gutter" == n ? "gutterClass" : "wrapClass"; if (e[t]) { if (C(r).test(e[t])) return; e[t] += " " + r } else e[t] = r; return 1 }) }), removeLineClass: Rr(function (e, o, l) { return eo(this, e, "gutter" == o ? "gutter" : "class", function (e) { var t = "text" == o ? "textClass" : "background" == o ? "bgClass" : "gutter" == o ? "gutterClass" : "wrapClass" , n = e[t]; if (n) { if (null == l) e[t] = null; else { var r = n.match(C(l)); if (!r) return; var i = r.index + r[0].length; e[t] = n.slice(0, r.index) + (r.index && i != n.length ? " " : "") + n.slice(i) || null } return 1 } }) }), addLineWidget: Rr(function (e, t, n) { return e = e, i = new ro(r = this, t, n), (o = r.cm) && i.noHScroll && (o.display.alignWidgets = !0), eo(r, e, "widget", function (e) { var t = e.widgets || (e.widgets = []); return null == i.insertAt ? t.push(i) : t.splice(Math.min(t.length, Math.max(0, i.insertAt)), 0, i), i.line = e, o && !Ut(r, e) && (t = Vt(e) < r.scrollTop, Qe(e, e.height + gn(i)), t && br(o, i.height), o.curOp.forceUpdate = !0), 1 }), o && ln(o, "lineWidgetAdded", o, i, "number" == typeof e ? e : Je(e)), i; var r, i, o }), removeLineWidget: function (e) { e.clear() }, markText: function (e, t, n) { return so(this, ct(this, e), ct(this, t), n, n && n.type || "range") }, setBookmark: function (e, t) { t = { replacedWith: t && (null == t.nodeType ? t.widget : t), insertLeft: t && t.insertLeft, clearWhenEmpty: !1, shared: t && t.shared, handleMouseEvents: t && t.handleMouseEvents }; return so(this, e = ct(this, e), e, t, "bookmark") }, findMarksAt: function (e) { var t = [] , n = $e(this, (e = ct(this, e)).line).markedSpans; if (n) for (var r = 0; r < n.length; ++r) { var i = n[r]; (null == i.from || i.from <= e.ch) && (null == i.to || i.to >= e.ch) && t.push(i.marker.parent || i.marker) } return t }, findMarks: function (i, o, l) { i = ct(this, i), o = ct(this, o); var s = [] , a = i.line; return this.iter(i.line, o.line + 1, function (e) { var t = e.markedSpans; if (t) for (var n = 0; n < t.length; n++) { var r = t[n]; null != r.to && a == i.line && i.ch >= r.to || null == r.from && a != i.line || null != r.from && a == o.line && r.from >= o.ch || l && !l(r.marker) || s.push(r.marker.parent || r.marker) } ++a }), s }, getAllMarks: function () { var r = []; return this.iter(function (e) { var t = e.markedSpans; if (t) for (var n = 0; n < t.length; ++n) null != t[n].from && r.push(t[n].marker) }), r }, posFromIndex: function (t) { var n, r = this.first, i = this.lineSeparator().length; return this.iter(function (e) { e = e.text.length + i; if (t < e) return n = t, !0; t -= e, ++r }), ct(this, rt(r, n)) }, indexFromPos: function (e) { var t = (e = ct(this, e)).ch; if (e.line < this.first || e.ch < 0) return 0; var n = this.lineSeparator().length; return this.iter(this.first, e.line, function (e) { t += e.text.length + n }), t }, copy: function (e) { var t = new ho(Ze(this, this.first, this.first + this.size), this.modeOption, this.first, this.lineSep, this.direction); return t.scrollTop = this.scrollTop, t.scrollLeft = this.scrollLeft, t.sel = this.sel, t.extend = !1, e && (t.history.undoDepth = this.history.undoDepth, t.setHistory(this.getHistory())), t }, linkedDoc: function (e) { e = e || {}; var t = this.first , n = this.first + this.size; null != e.from && e.from > t && (t = e.from), null != e.to && e.to < n && (n = e.to); t = new ho(Ze(this, t, n), e.mode || this.modeOption, t, this.lineSep, this.direction); return e.sharedHist && (t.history = this.history), (this.linked || (this.linked = [])).push({ doc: t, sharedHist: e.sharedHist }), t.linked = [{ doc: this, isParent: !0, sharedHist: e.sharedHist }], function (e, t) { for (var n = 0; n < t.length; n++) { var r = t[n] , i = r.find() , o = e.clipPos(i.from) , i = e.clipPos(i.to); it(o, i) && (i = so(e, o, i, r.primary, r.primary.type), r.markers.push(i), i.parent = r) } }(t, uo(this)), t }, unlinkDoc: function (e) { if (e instanceof ul && (e = e.doc), this.linked) for (var t = 0; t < this.linked.length; ++t) if (this.linked[t].doc == e) { this.linked.splice(t, 1), e.unlinkDoc(this), function (o) { for (var e = 0; e < o.length; e++) !function (e) { var t = o[e] , n = [t.primary.doc]; mi(t.primary.doc, function (e) { return n.push(e) }); for (var r = 0; r < t.markers.length; r++) { var i = t.markers[r]; -1 == R(n, i.doc) && (i.parent = null, t.markers.splice(r--, 1)) } }(e) }(uo(this)); break } var n; e.history == this.history && (n = [e.id], mi(e, function (e) { return n.push(e.id) }, !0), e.history = new bi(null), e.history.done = Ni(this.history.done, n), e.history.undone = Ni(this.history.undone, n)) }, iterLinkedDocs: function (e) { mi(this, e) }, getMode: function () { return this.mode }, getEditor: function () { return this.cm }, splitLines: function (e) { return this.lineSep ? e.split(this.lineSep) : Ee(e) }, lineSeparator: function () { return this.lineSep || "\n" }, setDirection: Rr(function (e) { var t; "rtl" != e && (e = "ltr"), e != this.direction && (this.direction = e, this.iter(function (e) { return e.order = null }), this.cm && Er(t = this.cm, function () { yi(t), tr(t) })) }) }), ho.prototype.eachLine = ho.prototype.iter; var fo = 0; function po(e) { var r = this; if (go(r), !Ce(r, e) && !mn(r.display, e)) { Te(e), w && (fo = +new Date); var t = Jn(r, e, !0) , n = e.dataTransfer.files; if (t && !r.isReadOnly()) if (n && n.length && window.FileReader && window.File) for (var i = n.length, o = Array(i), l = 0, s = function () { ++l == i && Pr(r, function () { var e = { from: t = ct(r.doc, t), to: t, text: r.doc.splitLines(o.filter(function (e) { return null != e }).join(r.doc.lineSeparator())), origin: "paste" }; ji(r.doc, e), Fi(r.doc, si(ct(r.doc, t), ct(r.doc, ai(e)))) })() }, a = 0; a < n.length; a++) !function (e, t) { var n; r.options.allowDropFileTypes && -1 == R(r.options.allowDropFileTypes, e.type) ? s() : ((n = new FileReader).onerror = s, n.onload = function () { var e = n.result; /[\x00-\x08\x0e-\x1f]{2}/.test(e) || (o[t] = e), s() } , n.readAsText(e)) }(n[a], a); else { if (r.state.draggingText && -1 < r.doc.sel.contains(t)) return r.state.draggingText(e), void setTimeout(function () { return r.display.input.focus() }, 20); try { var u, c = e.dataTransfer.getData("Text"); if (c) { if (r.state.draggingText && !r.state.draggingText.copy && (u = r.listSelections()), Pi(r.doc, si(t, t)), u) for (var h = 0; h < u.length; ++h) qi(r.doc, "", u[h].anchor, u[h].head, "drag"); r.replaceSelection(c, "around", "paste"), r.display.input.focus() } } catch (e) { } } } } function go(e) { e.display.dragCursor && (e.display.lineSpace.removeChild(e.display.dragCursor), e.display.dragCursor = null) } function mo(t) { if (document.getElementsByClassName) { for (var e = document.getElementsByClassName("CodeMirror"), n = [], r = 0; r < e.length; r++) { var i = e[r].CodeMirror; i && n.push(i) } n.length && n[0].operation(function () { for (var e = 0; e < n.length; e++) t(n[e]) }) } } var vo = !1; function yo() { var e; vo || (ye(window, "resize", function () { null == e && (e = setTimeout(function () { e = null, mo(bo) }, 100)) }), ye(window, "blur", function () { return mo(pr) }), vo = !0) } function bo(e) { var t = e.display; t.cachedCharWidth = t.cachedTextHeight = t.cachedPaddingH = null, t.scrollbarsClipped = !1, e.setSize() } for (var wo = { 3: "Pause", 8: "Backspace", 9: "Tab", 13: "Enter", 16: "Shift", 17: "Ctrl", 18: "Alt", 19: "Pause", 20: "CapsLock", 27: "Esc", 32: "Space", 33: "PageUp", 34: "PageDown", 35: "End", 36: "Home", 37: "Left", 38: "Up", 39: "Right", 40: "Down", 44: "PrintScrn", 45: "Insert", 46: "Delete", 59: ";", 61: "=", 91: "Mod", 92: "Mod", 93: "Mod", 106: "*", 107: "=", 109: "-", 110: ".", 111: "/", 145: "ScrollLock", 173: "-", 186: ";", 187: "=", 188: ",", 189: "-", 190: ".", 191: "/", 192: "`", 219: "[", 220: "\\", 221: "]", 222: "'", 224: "Mod", 63232: "Up", 63233: "Down", 63234: "Left", 63235: "Right", 63272: "Delete", 63273: "Home", 63275: "End", 63276: "PageUp", 63277: "PageDown", 63302: "Insert" }, xo = 0; xo < 10; xo++) wo[xo + 48] = wo[xo + 96] = String(xo); for (var Co = 65; Co <= 90; Co++) wo[Co] = String.fromCharCode(Co); for (var So = 1; So <= 12; So++) wo[So + 111] = wo[So + 63235] = "F" + So; var Lo = {}; function ko(e) { var t, n, r, i, o = e.split(/-(?!$)/); e = o[o.length - 1]; for (var l = 0; l < o.length - 1; l++) { var s = o[l]; if (/^(cmd|meta|m)$/i.test(s)) i = !0; else if (/^a(lt)?$/i.test(s)) t = !0; else if (/^(c|ctrl|control)$/i.test(s)) n = !0; else { if (!/^s(hift)?$/i.test(s)) throw new Error("Unrecognized modifier name: " + s); r = !0 } } return t && (e = "Alt-" + e), n && (e = "Ctrl-" + e), i && (e = "Cmd-" + e), r && (e = "Shift-" + e), e } function To(e) { var t, n, r = {}; for (t in e) if (e.hasOwnProperty(t)) { var i = e[t]; if (!/^(name|fallthrough|(de|at)tach)$/.test(t)) if ("..." != i) { for (var o = _(t.split(" "), ko), l = 0; l < o.length; l++) { var s = void 0 , a = void 0 , s = l == o.length - 1 ? (a = o.join(" "), i) : (a = o.slice(0, l + 1).join(" "), "...") , u = r[a]; if (u) { if (u != s) throw new Error("Inconsistent bindings for " + a) } else r[a] = s } delete e[t] } else delete e[t] } for (n in r) e[n] = r[n]; return e } function Mo(e, t, n, r) { var i = (t = Do(t)).call ? t.call(e, r) : t[e]; if (!1 === i) return "nothing"; if ("..." === i) return "multi"; if (null != i && n(i)) return "handled"; if (t.fallthrough) { if ("[object Array]" != Object.prototype.toString.call(t.fallthrough)) return Mo(e, t.fallthrough, n, r); for (var o = 0; o < t.fallthrough.length; o++) { var l = Mo(e, t.fallthrough[o], n, r); if (l) return l } } } function No(e) { e = "string" == typeof e ? e : wo[e.keyCode]; return "Ctrl" == e || "Alt" == e || "Shift" == e || "Mod" == e } function Ao(e, t, n) { var r = e; return t.altKey && "Alt" != r && (e = "Alt-" + e), (b ? t.metaKey : t.ctrlKey) && "Ctrl" != r && (e = "Ctrl-" + e), (b ? t.ctrlKey : t.metaKey) && "Mod" != r && (e = "Cmd-" + e), !n && t.shiftKey && "Shift" != r && (e = "Shift-" + e), e } function Oo(e, t) { if (p && 34 == e.keyCode && e.char) return !1; var n = wo[e.keyCode]; return null != n && !e.altGraphKey && (3 == e.keyCode && e.code && (n = e.code), Ao(n, e, t)) } function Do(e) { return "string" == typeof e ? Lo[e] : e } function Wo(t, e) { for (var n = t.doc.sel.ranges, r = [], i = 0; i < n.length; i++) { for (var o = e(n[i]); r.length && it(o.from, Y(r).to) <= 0;) { var l = r.pop(); if (it(l.from, o.from) < 0) { o.from = l.from; break } } r.push(o) } Er(t, function () { for (var e = r.length - 1; 0 <= e; e--) qi(t.doc, "", r[e].from, r[e].to, "+delete"); wr(t) }) } function Ho(e, t, n) { n = re(e.text, t + n, n); return n < 0 || n > e.text.length ? null : n } function Fo(e, t, n) { e = Ho(e, t.ch, n); return null == e ? null : new rt(t.line, e, n < 0 ? "after" : "before") } function Eo(e, t, n, r, i) { if (e) { "rtl" == t.doc.direction && (i = -i); var o = me(n, t.doc.direction); if (o) { var l, s, a, e = i < 0 ? Y(o) : o[0], o = i < 0 == (1 == e.level) ? "after" : "before"; return 0 < e.level || "rtl" == t.doc.direction ? (l = Tn(t, n), s = i < 0 ? n.text.length - 1 : 0, a = Mn(t, l, s).top, s = ie(function (e) { return Mn(t, l, e).top == a }, i < 0 == (1 == e.level) ? e.from : e.to - 1, s), "before" == o && (s = Ho(n, s, 1))) : s = i < 0 ? e.to : e.from, new rt(r, s, o) } } return new rt(r, i < 0 ? n.text.length : 0, i < 0 ? "before" : "after") } function Po(t, n, s, e) { var a = me(n, t.doc.direction); if (!a) return Fo(n, s, e); s.ch >= n.text.length ? (s.ch = n.text.length, s.sticky = "before") : s.ch <= 0 && (s.ch = 0, s.sticky = "after"); var r = le(a, s.ch, s.sticky) , i = a[r]; if ("ltr" == t.doc.direction && i.level % 2 == 0 && (0 < e ? i.to > s.ch : i.from < s.ch)) return Fo(n, s, e); function u(e, t) { return Ho(n, e instanceof rt ? e.ch : e, t) } function o(e) { return t.options.lineWrapping ? (l = l || Tn(t, n), jn(t, n, l, e)) : { begin: 0, end: n.text.length } } var l, c = o("before" == s.sticky ? u(s, -1) : s.ch); if ("rtl" == t.doc.direction || 1 == i.level) { var h = 1 == i.level == e < 0 , d = u(s, h ? 1 : -1); if (null != d && (h ? d <= i.to && d <= c.end : d >= i.from && d >= c.begin)) { var f = h ? "before" : "after"; return new rt(s.line, d, f) } } f = function (e, t, n) { for (var r = function (e, t) { return t ? new rt(s.line, u(e, 1), "before") : new rt(s.line, e, "after") }; 0 <= e && e < a.length; e += t) { var i = a[e] , o = 0 < t == (1 != i.level) , l = o ? n.begin : u(n.end, -1); if (i.from <= l && l < i.to) return r(l, o); if (l = o ? i.from : u(i.to, -1), n.begin <= l && l < n.end) return r(l, o) } } , r = f(r + e, e, c); if (r) return r; c = 0 < e ? c.end : u(c.begin, -1); return null == c || 0 < e && c == n.text.length || !(r = f(0 < e ? 0 : a.length - 1, e, o(c))) ? null : r } Lo.basic = { Left: "goCharLeft", Right: "goCharRight", Up: "goLineUp", Down: "goLineDown", End: "goLineEnd", Home: "goLineStartSmart", PageUp: "goPageUp", PageDown: "goPageDown", Delete: "delCharAfter", Backspace: "delCharBefore", "Shift-Backspace": "delCharBefore", Tab: "defaultTab", "Shift-Tab": "indentAuto", Enter: "newlineAndIndent", Insert: "toggleOverwrite", Esc: "singleSelection" }, Lo.pcDefault = { "Ctrl-A": "selectAll", "Ctrl-D": "deleteLine", "Ctrl-Z": "undo", "Shift-Ctrl-Z": "redo", "Ctrl-Y": "redo", "Ctrl-Home": "goDocStart", "Ctrl-End": "goDocEnd", "Ctrl-Up": "goLineUp", "Ctrl-Down": "goLineDown", "Ctrl-Left": "goGroupLeft", "Ctrl-Right": "goGroupRight", "Alt-Left": "goLineStart", "Alt-Right": "goLineEnd", "Ctrl-Backspace": "delGroupBefore", "Ctrl-Delete": "delGroupAfter", "Ctrl-S": "save", "Ctrl-F": "find", "Ctrl-G": "findNext", "Shift-Ctrl-G": "findPrev", "Shift-Ctrl-F": "replace", "Shift-Ctrl-R": "replaceAll", "Ctrl-[": "indentLess", "Ctrl-]": "indentMore", "Ctrl-U": "undoSelection", "Shift-Ctrl-U": "redoSelection", "Alt-U": "redoSelection", fallthrough: "basic" }, Lo.emacsy = { "Ctrl-F": "goCharRight", "Ctrl-B": "goCharLeft", "Ctrl-P": "goLineUp", "Ctrl-N": "goLineDown", "Alt-F": "goWordRight", "Alt-B": "goWordLeft", "Ctrl-A": "goLineStart", "Ctrl-E": "goLineEnd", "Ctrl-V": "goPageDown", "Shift-Ctrl-V": "goPageUp", "Ctrl-D": "delCharAfter", "Ctrl-H": "delCharBefore", "Alt-D": "delWordAfter", "Alt-Backspace": "delWordBefore", "Ctrl-K": "killLine", "Ctrl-T": "transposeChars", "Ctrl-O": "openLine" }, Lo.macDefault = { "Cmd-A": "selectAll", "Cmd-D": "deleteLine", "Cmd-Z": "undo", "Shift-Cmd-Z": "redo", "Cmd-Y": "redo", "Cmd-Home": "goDocStart", "Cmd-Up": "goDocStart", "Cmd-End": "goDocEnd", "Cmd-Down": "goDocEnd", "Alt-Left": "goGroupLeft", "Alt-Right": "goGroupRight", "Cmd-Left": "goLineLeft", "Cmd-Right": "goLineRight", "Alt-Backspace": "delGroupBefore", "Ctrl-Alt-Backspace": "delGroupAfter", "Alt-Delete": "delGroupAfter", "Cmd-S": "save", "Cmd-F": "find", "Cmd-G": "findNext", "Shift-Cmd-G": "findPrev", "Cmd-Alt-F": "replace", "Shift-Cmd-Alt-F": "replaceAll", "Cmd-[": "indentLess", "Cmd-]": "indentMore", "Cmd-Backspace": "delWrappedLineLeft", "Cmd-Delete": "delWrappedLineRight", "Cmd-U": "undoSelection", "Shift-Cmd-U": "redoSelection", "Ctrl-Up": "goDocStart", "Ctrl-Down": "goDocEnd", fallthrough: ["basic", "emacsy"] }, Lo.default = g ? Lo.macDefault : Lo.pcDefault; var Io = { selectAll: Vi, singleSelection: function (e) { return e.setSelection(e.getCursor("anchor"), e.getCursor("head"), G) }, killLine: function (n) { return Wo(n, function (e) { if (e.empty()) { var t = $e(n.doc, e.head.line).text.length; return e.head.ch == t && e.head.line < n.lastLine() ? { from: e.head, to: rt(e.head.line + 1, 0) } : { from: e.head, to: rt(e.head.line, t) } } return { from: e.from(), to: e.to() } }) }, deleteLine: function (t) { return Wo(t, function (e) { return { from: rt(e.from().line, 0), to: ct(t.doc, rt(e.to().line + 1, 0)) } }) }, delLineLeft: function (e) { return Wo(e, function (e) { return { from: rt(e.from().line, 0), to: e.from() } }) }, delWrappedLineLeft: function (n) { return Wo(n, function (e) { var t = n.charCoords(e.head, "div").top + 5; return { from: n.coordsChar({ left: 0, top: t }, "div"), to: e.from() } }) }, delWrappedLineRight: function (n) { return Wo(n, function (e) { var t = n.charCoords(e.head, "div").top + 5 , t = n.coordsChar({ left: n.display.lineDiv.offsetWidth + 100, top: t }, "div"); return { from: e.from(), to: t } }) }, undo: function (e) { return e.undo() }, redo: function (e) { return e.redo() }, undoSelection: function (e) { return e.undoSelection() }, redoSelection: function (e) { return e.redoSelection() }, goDocStart: function (e) { return e.extendSelection(rt(e.firstLine(), 0)) }, goDocEnd: function (e) { return e.extendSelection(rt(e.lastLine())) }, goLineStart: function (t) { return t.extendSelectionsBy(function (e) { return Ro(t, e.head.line) }, { origin: "+move", bias: 1 }) }, goLineStartSmart: function (t) { return t.extendSelectionsBy(function (e) { return zo(t, e.head) }, { origin: "+move", bias: 1 }) }, goLineEnd: function (t) { return t.extendSelectionsBy(function (e) { return function (e, t) { var n = $e(e.doc, t) , r = function (e) { for (var t; t = It(e);) e = t.find(1, !0).line; return e }(n); r != n && (t = Je(r)); return Eo(!0, e, n, t, -1) }(t, e.head.line) }, { origin: "+move", bias: -1 }) }, goLineRight: function (t) { return t.extendSelectionsBy(function (e) { e = t.cursorCoords(e.head, "div").top + 5; return t.coordsChar({ left: t.display.lineDiv.offsetWidth + 100, top: e }, "div") }, V) }, goLineLeft: function (t) { return t.extendSelectionsBy(function (e) { e = t.cursorCoords(e.head, "div").top + 5; return t.coordsChar({ left: 0, top: e }, "div") }, V) }, goLineLeftSmart: function (n) { return n.extendSelectionsBy(function (e) { var t = n.cursorCoords(e.head, "div").top + 5 , t = n.coordsChar({ left: 0, top: t }, "div"); return t.ch < n.getLine(t.line).search(/\S/) ? zo(n, e.head) : t }, V) }, goLineUp: function (e) { return e.moveV(-1, "line") }, goLineDown: function (e) { return e.moveV(1, "line") }, goPageUp: function (e) { return e.moveV(-1, "page") }, goPageDown: function (e) { return e.moveV(1, "page") }, goCharLeft: function (e) { return e.moveH(-1, "char") }, goCharRight: function (e) { return e.moveH(1, "char") }, goColumnLeft: function (e) { return e.moveH(-1, "column") }, goColumnRight: function (e) { return e.moveH(1, "column") }, goWordLeft: function (e) { return e.moveH(-1, "word") }, goGroupRight: function (e) { return e.moveH(1, "group") }, goGroupLeft: function (e) { return e.moveH(-1, "group") }, goWordRight: function (e) { return e.moveH(1, "word") }, delCharBefore: function (e) { return e.deleteH(-1, "codepoint") }, delCharAfter: function (e) { return e.deleteH(1, "char") }, delWordBefore: function (e) { return e.deleteH(-1, "word") }, delWordAfter: function (e) { return e.deleteH(1, "word") }, delGroupBefore: function (e) { return e.deleteH(-1, "group") }, delGroupAfter: function (e) { return e.deleteH(1, "group") }, indentAuto: function (e) { return e.indentSelection("smart") }, indentMore: function (e) { return e.indentSelection("add") }, indentLess: function (e) { return e.indentSelection("subtract") }, insertTab: function (e) { return e.replaceSelection("\t") }, insertSoftTab: function (e) { for (var t = [], n = e.listSelections(), r = e.options.tabSize, i = 0; i < n.length; i++) { var o = n[i].from() , o = P(e.getLine(o.line), o.ch, r); t.push(X(r - o % r)) } e.replaceSelections(t) }, defaultTab: function (e) { e.somethingSelected() ? e.indentSelection("add") : e.execCommand("insertTab") }, transposeChars: function (l) { return Er(l, function () { for (var e, t, n, r = l.listSelections(), i = [], o = 0; o < r.length; o++) r[o].empty() && (e = r[o].head, (t = $e(l.doc, e.line).text) && (e.ch == t.length && (e = new rt(e.line, e.ch - 1)), 0 < e.ch ? (e = new rt(e.line, e.ch + 1), l.replaceRange(t.charAt(e.ch - 1) + t.charAt(e.ch - 2), rt(e.line, e.ch - 2), e, "+transpose")) : e.line > l.doc.first && ((n = $e(l.doc, e.line - 1).text) && (e = new rt(e.line, 1), l.replaceRange(t.charAt(0) + l.doc.lineSeparator() + n.charAt(n.length - 1), rt(e.line - 1, n.length - 1), e, "+transpose")))), i.push(new oi(e, e))); l.setSelections(i) }) }, newlineAndIndent: function (r) { return Er(r, function () { for (var e = r.listSelections(), t = e.length - 1; 0 <= t; t--) r.replaceRange(r.doc.lineSeparator(), e[t].anchor, e[t].head, "+input"); e = r.listSelections(); for (var n = 0; n < e.length; n++) r.indentLine(e[n].from().line, null, !0); wr(r) }) }, openLine: function (e) { return e.replaceSelection("\n", "start") }, toggleOverwrite: function (e) { return e.toggleOverwrite() } }; function Ro(e, t) { var n = $e(e.doc, t) , r = zt(n); return r != n && (t = Je(r)), Eo(!0, e, r, t, 1) } function zo(e, t) { var n = Ro(e, t.line) , r = $e(e.doc, n.line) , e = me(r, e.doc.direction); if (e && 0 != e[0].level) return n; r = Math.max(n.ch, r.text.search(/\S/)), t = t.line == n.line && t.ch <= r && t.ch; return rt(n.line, t ? 0 : r, n.sticky) } function Bo(e, t, n) { if ("string" == typeof t && !(t = Io[t])) return !1; e.display.input.ensurePolled(); var r = e.display.shift , i = !1; try { e.isReadOnly() && (e.state.suppressEdits = !0), n && (e.display.shift = !1), i = t(e) != B } finally { e.display.shift = r, e.state.suppressEdits = !1 } return i } var Go = new I; function Uo(e, t, n, r) { var i = e.state.keySeq; if (i) { if (No(t)) return "handled"; if (/\'$/.test(t) ? e.state.keySeq = null : Go.set(50, function () { e.state.keySeq == i && (e.state.keySeq = null, e.display.input.reset()) }), Vo(e, i + " " + t, n, r)) return !0 } return Vo(e, t, n, r) } function Vo(e, t, n, r) { r = function (e, t, n) { for (var r = 0; r < e.state.keyMaps.length; r++) { var i = Mo(t, e.state.keyMaps[r], n, e); if (i) return i } return e.options.extraKeys && Mo(t, e.options.extraKeys, n, e) || Mo(t, e.options.keyMap, n, e) }(e, t, r); return "multi" == r && (e.state.keySeq = t), "handled" == r && ln(e, "keyHandled", e, t, n), "handled" != r && "multi" != r || (Te(n), cr(e)), !!r } function Ko(t, e) { var n = Oo(e, !0); return !!n && (e.shiftKey && !t.state.keySeq ? Uo(t, "Shift-" + n, e, function (e) { return Bo(t, e, !0) }) || Uo(t, n, e, function (e) { if ("string" == typeof e ? /^go[A-Z]/.test(e) : e.motion) return Bo(t, e) }) : Uo(t, n, e, function (e) { return Bo(t, e) })) } var jo = null; function Xo(e) { var t, n, r, i = this; function o(e) { 18 != e.keyCode && e.altKey || (L(r, "CodeMirror-crosshair"), we(document, "keyup", o), we(document, "mouseover", o)) } e.target && e.target != i.display.input.getField() || (i.curOp.focus = O(), Ce(i, e) || (w && v < 11 && 27 == e.keyCode && (e.returnValue = !1), t = e.keyCode, i.display.shift = 16 == t || e.shiftKey, n = Ko(i, e), p && (jo = n ? t : null, !n && 88 == t && !Ie && (g ? e.metaKey : e.ctrlKey) && i.replaceSelection("", null, "cut")), d && !g && !n && 46 == t && e.shiftKey && !e.ctrlKey && document.execCommand && document.execCommand("cut"), 18 != t || /\bCodeMirror-crosshair\b/.test(i.display.lineDiv.className) || (D(r = i.display.lineDiv, "CodeMirror-crosshair"), ye(document, "keyup", o), ye(document, "mouseover", o)))) } function Yo(e) { 16 == e.keyCode && (this.doc.sel.shift = !1), Ce(this, e) } function _o(e) { var t = this; if (!(e.target && e.target != t.display.input.getField() || mn(t.display, e) || Ce(t, e) || e.ctrlKey && !e.altKey || g && e.metaKey)) { var n, r = e.keyCode, i = e.charCode; if (p && r == jo) return jo = null, void Te(e); p && (!e.which || e.which < 10) && Ko(t, e) || "\b" != (i = String.fromCharCode(null == i ? r : i)) && (Uo(n = t, "'" + i + "'", e, function (e) { return Bo(n, e, !0) }) || t.display.input.onKeyPress(e)) } } var $o, qo, Zo = function (e, t, n) { this.time = e, this.pos = t, this.button = n }; function Qo(e) { var t, n, r, i, o, l = this, s = l.display; Ce(l, e) || s.activeTouch && s.input.supportsTouch() || (s.input.ensurePolled(), s.shift = e.shiftKey, mn(s, e) ? f || (s.scroller.draggable = !1, setTimeout(function () { return s.scroller.draggable = !0 }, 100)) : tl(l, e) || (t = Jn(l, e), n = De(e), i = t ? (r = t, i = n, o = +new Date, qo && qo.compare(o, r, i) ? ($o = qo = null, "triple") : $o && $o.compare(o, r, i) ? (qo = new Zo(o, r, i), $o = null, "double") : ($o = new Zo(o, r, i), qo = null, "single")) : "single", window.focus(), 1 == n && l.state.selectingText && l.state.selectingText(e), t && function (n, e, r, t, i) { var o = "Click"; "double" == t ? o = "Double" + o : "triple" == t && (o = "Triple" + o); return Uo(n, Ao(o = (1 == e ? "Left" : 2 == e ? "Middle" : "Right") + o, i), i, function (e) { if ("string" == typeof e && (e = Io[e]), !e) return !1; var t = !1; try { n.isReadOnly() && (n.state.suppressEdits = !0), t = e(n, r) != B } finally { n.state.suppressEdits = !1 } return t }) }(l, n, t, i, e) || (1 == n ? t ? function (e, t, n, r) { w ? setTimeout(F(hr, e), 0) : e.curOp.focus = O(); var i, o = function (e, t, n) { var r = e.getOption("configureMouse") , i = r ? r(e, t, n) : {}; null == i.unit && (r = m ? n.shiftKey && n.metaKey : n.altKey, i.unit = r ? "rectangle" : "single" == t ? "char" : "double" == t ? "word" : "line"); null != i.extend && !e.doc.extend || (i.extend = e.doc.extend || n.shiftKey); null == i.addNew && (i.addNew = g ? n.metaKey : n.ctrlKey); null == i.moveOnDrag && (i.moveOnDrag = !(g ? n.altKey : n.ctrlKey)); return i }(e, n, r), l = e.doc.sel; (e.options.dragDrop && Fe && !e.isReadOnly() && "single" == n && -1 < (i = l.contains(t)) && (it((i = l.ranges[i]).from(), t) < 0 || 0 < t.xRel) && (0 < it(i.to(), t) || t.xRel < 0) ? function (t, n, r, i) { var o = t.display , l = !1 , s = Pr(t, function (e) { f && (o.scroller.draggable = !1), t.state.draggingText = !1, t.state.delayingBlurEvent && (t.hasFocus() ? t.state.delayingBlurEvent = !1 : dr(t)), we(o.wrapper.ownerDocument, "mouseup", s), we(o.wrapper.ownerDocument, "mousemove", a), we(o.scroller, "dragstart", u), we(o.scroller, "drop", s), l || (Te(e), i.addNew || Oi(t.doc, r, null, null, i.extend), f && !c || w && 9 == v ? setTimeout(function () { o.wrapper.ownerDocument.body.focus({ preventScroll: !0 }), o.input.focus() }, 20) : o.input.focus()) }) , a = function (e) { l = l || 10 <= Math.abs(n.clientX - e.clientX) + Math.abs(n.clientY - e.clientY) } , u = function () { return l = !0 }; f && (o.scroller.draggable = !0); (t.state.draggingText = s).copy = !i.moveOnDrag, ye(o.wrapper.ownerDocument, "mouseup", s), ye(o.wrapper.ownerDocument, "mousemove", a), ye(o.scroller, "dragstart", u), ye(o.scroller, "drop", s), t.state.delayingBlurEvent = !0, setTimeout(function () { return o.input.focus() }, 20), o.scroller.dragDrop && o.scroller.dragDrop() } : function (d, e, f, p) { w && dr(d); var l = d.display , g = d.doc; Te(e); var m, v, y = g.sel, t = y.ranges; p.addNew && !p.extend ? (v = g.sel.contains(f), m = -1 < v ? t[v] : new oi(f, f)) : (m = g.sel.primary(), v = g.sel.primIndex); "rectangle" == p.unit ? (p.addNew || (m = new oi(f, f)), f = Jn(d, e, !0, !0), v = -1) : (e = Jo(d, f, p.unit), m = p.extend ? Ai(m, e.anchor, e.head, p.extend) : e); p.addNew ? -1 == v ? (v = t.length, Ei(g, li(d, t.concat([m]), v), { scroll: !1, origin: "*mouse" })) : 1 < t.length && t[v].empty() && "char" == p.unit && !p.extend ? (Ei(g, li(d, t.slice(0, v).concat(t.slice(v + 1)), 0), { scroll: !1, origin: "*mouse" }), y = g.sel) : Wi(g, v, m, U) : (Ei(g, new ii([m], v = 0), U), y = g.sel); var b = f; function s(e) { if (0 != it(b, e)) if (b = e, "rectangle" == p.unit) { for (var t = [], n = d.options.tabSize, r = P($e(g, f.line).text, f.ch, n), i = P($e(g, e.line).text, e.ch, n), o = Math.min(r, i), l = Math.max(r, i), s = Math.min(f.line, e.line), a = Math.min(d.lastLine(), Math.max(f.line, e.line)); s <= a; s++) { var u = $e(g, s).text , c = K(u, o, n); o == l ? t.push(new oi(rt(s, c), rt(s, c))) : u.length > c && t.push(new oi(rt(s, c), rt(s, K(u, l, n)))) } t.length || t.push(new oi(f, f)), Ei(g, li(d, y.ranges.slice(0, v).concat(t), v), { origin: "*mouse", scroll: !1 }), d.scrollIntoView(e) } else { var h, r = m, i = Jo(d, e, p.unit), e = r.anchor, e = 0 < it(i.anchor, e) ? (h = i.head, at(r.from(), i.anchor)) : (h = i.anchor, st(r.to(), i.head)), i = y.ranges.slice(0); i[v] = function (e, t) { var n = t.anchor , r = t.head , i = $e(e.doc, n.line); if (0 == it(n, r) && n.sticky == r.sticky) return t; var o = me(i); if (!o) return t; var l = le(o, n.ch, n.sticky) , s = o[l]; if (s.from != n.ch && s.to != n.ch) return t; i = l + (s.from == n.ch == (1 != s.level) ? 0 : 1); if (0 == i || i == o.length) return t; a = r.line != n.line ? 0 < (r.line - n.line) * ("ltr" == e.doc.direction ? 1 : -1) : (e = le(o, r.ch, r.sticky), a = e - l || (r.ch - n.ch) * (1 == s.level ? -1 : 1), e == i - 1 || e == i ? a < 0 : 0 < a); var i = o[i + (a ? -1 : 0)] , a = a == (1 == i.level) , i = a ? i.from : i.to , a = a ? "after" : "before"; return n.ch == i && n.sticky == a ? t : new oi(new rt(n.line, i, a), r) }(d, new oi(ct(g, e), h)), Ei(g, li(d, i, v), U) } } var a = l.wrapper.getBoundingClientRect() , u = 0; function n(e) { d.state.selectingText = !1, u = 1 / 0, e && (Te(e), l.input.focus()), we(l.wrapper.ownerDocument, "mousemove", r), we(l.wrapper.ownerDocument, "mouseup", i), g.history.lastSelOrigin = null } var r = Pr(d, function (e) { (0 !== e.buttons && De(e) ? function e(t) { var n, r, i = ++u, o = Jn(d, t, !0, "rectangle" == p.unit); o && (0 != it(o, b) ? (d.curOp.focus = O(), s(o), n = vr(l, g), (o.line >= n.to || o.line < n.from) && setTimeout(Pr(d, function () { u == i && e(t) }), 150)) : (r = t.clientY < a.top ? -20 : t.clientY > a.bottom ? 20 : 0) && setTimeout(Pr(d, function () { u == i && (l.scroller.scrollTop += r, e(t)) }), 50)) } : n)(e) }) , i = Pr(d, n); d.state.selectingText = i, ye(l.wrapper.ownerDocument, "mousemove", r), ye(l.wrapper.ownerDocument, "mouseup", i) } )(e, r, t, o) }(l, t, i, e) : Oe(e) == s.scroller && Te(e) : 2 == n ? (t && Oi(l.doc, t), setTimeout(function () { return s.input.focus() }, 20)) : 3 == n && (x ? l.display.input.onContextMenu(e) : dr(l))))) } function Jo(e, t, n) { if ("char" == n) return new oi(t, t); if ("word" == n) return e.findWordAt(t); if ("line" == n) return new oi(rt(t.line, 0), ct(e.doc, rt(t.line + 1, 0))); t = n(e, t); return new oi(t.from, t.to) } function el(e, t, n, r) { var i, o; if (t.touches) i = t.touches[0].clientX, o = t.touches[0].clientY; else try { i = t.clientX, o = t.clientY } catch (e) { return !1 } if (i >= Math.floor(e.display.gutters.getBoundingClientRect().right)) return !1; r && Te(t); var l = e.display , r = l.lineDiv.getBoundingClientRect(); if (o > r.bottom || !Le(e, n)) return Ne(t); o -= r.top - l.viewOffset; for (var s = 0; s < e.display.gutterSpecs.length; ++s) { var a = l.gutters.childNodes[s]; if (a && a.getBoundingClientRect().right >= i) return xe(e, n, e, et(e.doc, o), e.display.gutterSpecs[s].className, t), Ne(t) } } function tl(e, t) { return el(e, t, "gutterClick", !0) } function nl(e, t) { var n, r; mn(e.display, t) || (r = t, Le(n = e, "gutterContextMenu") && el(n, r, "gutterContextMenu", !1)) || Ce(e, t, "contextmenu") || x || e.display.input.onContextMenu(t) } function rl(e) { e.display.wrapper.className = e.display.wrapper.className.replace(/\s*cm-s-\S+/g, "") + e.options.theme.replace(/(^|\s)\s*/g, " cm-s-"), Hn(e) } Zo.prototype.compare = function (e, t, n) { return this.time + 400 > e && 0 == it(t, this.pos) && n == this.button } ; var il = { toString: function () { return "CodeMirror.Init" } } , ol = {} , ll = {}; function sl(e, t, n) { !t != !(n && n != il) && (n = e.display.dragFunctions, (t = t ? ye : we)(e.display.scroller, "dragstart", n.start), t(e.display.scroller, "dragenter", n.enter), t(e.display.scroller, "dragover", n.over), t(e.display.scroller, "dragleave", n.leave), t(e.display.scroller, "drop", n.drop)) } function al(e) { e.options.lineWrapping ? (D(e.display.wrapper, "CodeMirror-wrap"), e.display.sizer.style.minWidth = "", e.display.sizerWidth = null) : (L(e.display.wrapper, "CodeMirror-wrap"), jt(e)), Qn(e), tr(e), Hn(e), setTimeout(function () { return Nr(e) }, 100) } function ul(e, t) { var n = this; if (!(this instanceof ul)) return new ul(e, t); this.options = t = t ? E(t) : {}, E(ol, t, !1); var r = t.value; "string" == typeof r ? r = new ho(r, t.mode, null, t.lineSeparator, t.direction) : t.mode && (r.modeOption = t.mode), this.doc = r; var i, o = new ul.inputStyles[t.inputStyle](this), o = this.display = new Qr(e, r, o, t); for (i in rl(o.wrapper.CodeMirror = this), t.lineWrapping && (this.display.wrapper.className += " CodeMirror-wrap"), Dr(this), this.state = { keyMaps: [], overlays: [], modeGen: 0, overwrite: !1, delayingBlurEvent: !1, focused: !1, suppressEdits: !1, pasteIncoming: -1, cutIncoming: -1, selectingText: !1, draggingText: !1, highlight: new I, keySeq: null, specialChars: null }, t.autofocus && !h && o.input.focus(), w && v < 11 && setTimeout(function () { return n.display.input.reset(!0) }, 20), function (r) { var i = r.display; ye(i.scroller, "mousedown", Pr(r, Qo)), ye(i.scroller, "dblclick", w && v < 11 ? Pr(r, function (e) { var t; Ce(r, e) || (!(t = Jn(r, e)) || tl(r, e) || mn(r.display, e) || (Te(e), t = r.findWordAt(t), Oi(r.doc, t.anchor, t.head))) }) : function (e) { return Ce(r, e) || Te(e) } ); ye(i.scroller, "contextmenu", function (e) { return nl(r, e) }), ye(i.input.getField(), "contextmenu", function (e) { i.scroller.contains(e.target) || nl(r, e) }); var n, o = { end: 0 }; function l() { i.activeTouch && (n = setTimeout(function () { return i.activeTouch = null }, 1e3), (o = i.activeTouch).end = +new Date) } function s(e, t) { if (null == t.left) return 1; var n = t.left - e.left , e = t.top - e.top; return 400 < n * n + e * e } ye(i.scroller, "touchstart", function (e) { var t; Ce(r, e) || function (e) { if (1 == e.touches.length) { e = e.touches[0]; return e.radiusX <= 1 && e.radiusY <= 1 } }(e) || tl(r, e) || (i.input.ensurePolled(), clearTimeout(n), t = +new Date, i.activeTouch = { start: t, moved: !1, prev: t - o.end <= 300 ? o : null }, 1 == e.touches.length && (i.activeTouch.left = e.touches[0].pageX, i.activeTouch.top = e.touches[0].pageY)) }), ye(i.scroller, "touchmove", function () { i.activeTouch && (i.activeTouch.moved = !0) }), ye(i.scroller, "touchend", function (e) { var t, n = i.activeTouch; n && !mn(i, e) && null != n.left && !n.moved && new Date - n.start < 300 && (t = r.coordsChar(i.activeTouch, "page"), t = !n.prev || s(n, n.prev) ? new oi(t, t) : !n.prev.prev || s(n, n.prev.prev) ? r.findWordAt(t) : new oi(rt(t.line, 0), ct(r.doc, rt(t.line + 1, 0))), r.setSelection(t.anchor, t.head), r.focus(), Te(e)), l() }), ye(i.scroller, "touchcancel", l), ye(i.scroller, "scroll", function () { i.scroller.clientHeight && (Lr(r, i.scroller.scrollTop), Tr(r, i.scroller.scrollLeft, !0), xe(r, "scroll", r)) }), ye(i.scroller, "mousewheel", function (e) { return ri(r, e) }), ye(i.scroller, "DOMMouseScroll", function (e) { return ri(r, e) }), ye(i.wrapper, "scroll", function () { return i.wrapper.scrollTop = i.wrapper.scrollLeft = 0 }), i.dragFunctions = { enter: function (e) { Ce(r, e) || Ae(e) }, over: function (e) { var t, n; Ce(r, e) || ((n = Jn(t = r, n = e)) && (ar(t, n, n = document.createDocumentFragment()), t.display.dragCursor || (t.display.dragCursor = M("div", null, "CodeMirror-cursors CodeMirror-dragcursors"), t.display.lineSpace.insertBefore(t.display.dragCursor, t.display.cursorDiv)), T(t.display.dragCursor, n)), Ae(e)) }, start: function (e) { return t = r, n = e, void (w && (!t.state.draggingText || +new Date - fo < 100) ? Ae(n) : Ce(t, n) || mn(t.display, n) || (n.dataTransfer.setData("Text", t.getSelection()), n.dataTransfer.effectAllowed = "copyMove", n.dataTransfer.setDragImage && !c && ((e = M("img", null, null, "position: fixed; left: 0; top: 0;")).src = "data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==", p && (e.width = e.height = 1, t.display.wrapper.appendChild(e), e._top = e.offsetTop), n.dataTransfer.setDragImage(e, 0, 0), p && e.parentNode.removeChild(e)))); var t, n }, drop: Pr(r, po), leave: function (e) { Ce(r, e) || go(r) } }; var e = i.input.getField(); ye(e, "keyup", function (e) { return Yo.call(r, e) }), ye(e, "keydown", Pr(r, Xo)), ye(e, "keypress", Pr(r, _o)), ye(e, "focus", function (e) { return fr(r, e) }), ye(e, "blur", function (e) { return pr(r, e) }) }(this), yo(), Hr(this), this.curOp.forceUpdate = !0, vi(this, r), t.autofocus && !h || this.hasFocus() ? setTimeout(function () { n.hasFocus() && !n.state.focused && fr(n) }, 20) : pr(this), ll) ll.hasOwnProperty(i) && ll[i](this, t[i], il); _r(this), t.finishInit && t.finishInit(this); for (var l = 0; l < cl.length; ++l) cl[l](this); Fr(this), f && t.lineWrapping && "optimizelegibility" == getComputedStyle(o.lineDiv).textRendering && (o.lineDiv.style.textRendering = "auto") } ul.defaults = ol, ul.optionHandlers = ll; var cl = []; function hl(e, t, n, r) { var i, o = e.doc; null == n && (n = "add"), "smart" == n && (o.mode.indent ? i = mt(e, t).state : n = "prev"); var l = e.options.tabSize , s = $e(o, t) , a = P(s.text, null, l); s.stateAfter && (s.stateAfter = null); var u, c = s.text.match(/^\s*/)[0]; if (r || /\S/.test(s.text)) { if ("smart" == n && ((u = o.mode.indent(i, s.text.slice(c.length), s.text)) == B || 150 < u)) { if (!r) return; n = "prev" } } else u = 0, n = "not"; "prev" == n ? u = t > o.first ? P($e(o, t - 1).text, null, l) : 0 : "add" == n ? u = a + e.options.indentUnit : "subtract" == n ? u = a - e.options.indentUnit : "number" == typeof n && (u = a + n), u = Math.max(0, u); var h = "" , d = 0; if (e.options.indentWithTabs) for (var f = Math.floor(u / l); f; --f) d += l, h += "\t"; if (d < u && (h += X(u - d)), h != c) return qi(o, h, rt(t, 0), rt(t, c.length), "+input"), !(s.stateAfter = null); for (var p = 0; p < o.sel.ranges.length; p++) { var g = o.sel.ranges[p]; if (g.head.line == t && g.head.ch < c.length) { g = rt(t, c.length); Wi(o, p, new oi(g, g)); break } } } ul.defineInitHook = function (e) { return cl.push(e) } ; var dl = null; function fl(e) { dl = e } function pl(e, t, n, r, i) { var o = e.doc; e.display.shift = !1, r = r || o.sel; var l = +new Date - 200 , s = "paste" == i || e.state.pasteIncoming > l , a = Ee(t) , u = null; if (s && 1 < r.ranges.length) if (dl && dl.text.join("\n") == t) { if (r.ranges.length % dl.text.length == 0) { u = []; for (var c = 0; c < dl.text.length; c++) u.push(o.splitLines(dl.text[c])) } } else a.length == r.ranges.length && e.options.pasteLinesPerSelection && (u = _(a, function (e) { return [e] })); for (var h = e.curOp.updateInput, d = r.ranges.length - 1; 0 <= d; d--) { var f = r.ranges[d] , p = f.from() , g = f.to(); f.empty() && (n && 0 < n ? p = rt(p.line, p.ch - n) : e.state.overwrite && !s ? g = rt(g.line, Math.min($e(o, g.line).text.length, g.ch + Y(a).length)) : s && dl && dl.lineWise && dl.text.join("\n") == a.join("\n") && (p = g = rt(p.line, 0))); g = { from: p, to: g, text: u ? u[d % u.length] : a, origin: i || (s ? "paste" : e.state.cutIncoming > l ? "cut" : "+input") }; ji(e.doc, g), ln(e, "inputRead", e, g) } t && !s && ml(e, t), wr(e), e.curOp.updateInput < 2 && (e.curOp.updateInput = h), e.curOp.typing = !0, e.state.pasteIncoming = e.state.cutIncoming = -1 } function gl(e, t) { var n = e.clipboardData && e.clipboardData.getData("Text"); return n && (e.preventDefault(), t.isReadOnly() || t.options.disableInput || Er(t, function () { return pl(t, n, 0, null, "paste") }), 1) } function ml(e, t) { if (e.options.electricChars && e.options.smartIndent) for (var n = e.doc.sel, r = n.ranges.length - 1; 0 <= r; r--) { var i = n.ranges[r]; if (!(100 < i.head.ch || r && n.ranges[r - 1].head.line == i.head.line)) { var o = e.getModeAt(i.head) , l = !1; if (o.electricChars) { for (var s = 0; s < o.electricChars.length; s++) if (-1 < t.indexOf(o.electricChars.charAt(s))) { l = hl(e, i.head.line, "smart"); break } } else o.electricInput && o.electricInput.test($e(e.doc, i.head.line).text.slice(0, i.head.ch)) && (l = hl(e, i.head.line, "smart")); l && ln(e, "electricInput", e, i.head.line) } } } function vl(e) { for (var t = [], n = [], r = 0; r < e.doc.sel.ranges.length; r++) { var i = e.doc.sel.ranges[r].head.line , i = { anchor: rt(i, 0), head: rt(i + 1, 0) }; n.push(i), t.push(e.getRange(i.anchor, i.head)) } return { text: t, ranges: n } } function yl(e, t, n, r) { e.setAttribute("autocorrect", n ? "" : "off"), e.setAttribute("autocapitalize", r ? "" : "off"), e.setAttribute("spellcheck", !!t) } function bl() { var e = M("textarea", null, null, "position: absolute; bottom: -1em; padding: 0; width: 1px; height: 1em; outline: none") , t = M("div", [e], null, "overflow: hidden; position: relative; width: 3px; height: 0px;"); return f ? e.style.width = "1000px" : e.setAttribute("wrap", "off"), s && (e.style.border = "1px solid black"), yl(e), t } function wl(r, i, o, l, s) { var e = i , t = o , a = $e(r, i.line) , u = s && "rtl" == r.direction ? -o : o; function n(e) { var t, n; if (null == (t = "codepoint" == l ? (t = a.text.charCodeAt(i.ch + (0 < l ? 0 : -1)), isNaN(t) ? null : new rt(i.line, Math.max(0, Math.min(a.text.length, i.ch + o * (55296 <= t && t < 56320 ? 2 : 1))), -o)) : s ? Po(r.cm, a, i, o) : Fo(a, i, o))) { if (e || (n = i.line + u) < r.first || n >= r.first + r.size || (i = new rt(n, i.ch, i.sticky), !(a = $e(r, n)))) return; i = Eo(s, r.cm, a, i.line, u) } else i = t; return 1 } if ("char" == l || "codepoint" == l) n(); else if ("column" == l) n(!0); else if ("word" == l || "group" == l) for (var c = null, h = "group" == l, d = r.cm && r.cm.getHelper(i, "wordChars"), f = !0; !(o < 0) || n(!f); f = !1) { var p = a.text.charAt(i.ch) || "\n" , p = J(p, d) ? "w" : h && "\n" == p ? "n" : !h || /\s/.test(p) ? null : "p"; if (!h || f || p || (p = "s"), c && c != p) { o < 0 && (o = 1, n(), i.sticky = "after"); break } if (p && (c = p), 0 < o && !n(!f)) break } t = Gi(r, i, e, t, !0); return ot(e, t) && (t.hitSide = !0), t } function xl(e, t, n, r) { var i, o, l, s = e.doc, a = t.left; for ("page" == r ? (i = Math.min(e.display.wrapper.clientHeight, window.innerHeight || document.documentElement.clientHeight), i = Math.max(i - .5 * Yn(e.display), 3), o = (0 < n ? t.bottom : t.top) + n * i) : "line" == r && (o = 0 < n ? t.bottom + 3 : t.top - 3); (l = Vn(e, a, o)).outside;) { if (n < 0 ? o <= 0 : o >= s.height) { l.hitSide = !0; break } o += 5 * n } return l } e = function (e) { this.cm = e, this.lastAnchorNode = this.lastAnchorOffset = this.lastFocusNode = this.lastFocusOffset = null, this.polling = new I, this.composing = null, this.gracePeriod = !1, this.readDOMTimeout = null } ; function Cl(e, t) { var n = kn(e, t.line); if (!n || n.hidden) return null; var r = $e(e.doc, t.line) , n = Sn(n, r, t.line) , r = me(r, e.doc.direction) , e = "left"; r && (e = le(r, t.ch) % 2 ? "right" : "left"); e = On(n.map, t.ch, e); return e.offset = "right" == e.collapse ? e.end : e.start, e } function Sl(e, t) { return t && (e.bad = !0), e } function Ll(e, t, n) { var r; if (t == e.display.lineDiv) { if (!(r = e.display.lineDiv.childNodes[n])) return Sl(e.clipPos(rt(e.display.viewTo - 1)), !0); t = null, n = 0 } else for (r = t; ; r = r.parentNode) { if (!r || r == e.display.lineDiv) return null; if (r.parentNode && r.parentNode == e.display.lineDiv) break } for (var i = 0; i < e.display.view.length; i++) { var o = e.display.view[i]; if (o.node == r) return function (u, e, t) { var n = u.text.firstChild , r = !1; if (!e || !A(n, e)) return Sl(rt(Je(u.line), 0), !0); if (e == n && (r = !0, e = n.childNodes[t], t = 0, !e)) { var i = u.rest ? Y(u.rest) : u.line; return Sl(rt(Je(i), i.text.length), r) } var i = 3 == e.nodeType ? e : null , o = e; i || 1 != e.childNodes.length || 3 != e.firstChild.nodeType || (i = e.firstChild, t = t && i.nodeValue.length); for (; o.parentNode != n;) o = o.parentNode; var c = u.measure , h = c.maps; function l(e, t, n) { for (var r = -1; r < (h ? h.length : 0); r++) for (var i = r < 0 ? c.map : h[r], o = 0; o < i.length; o += 3) { var l = i[o + 2]; if (l == e || l == t) { var s = Je(r < 0 ? u.line : u.rest[r]) , a = i[o] + n; return (n < 0 || l != e) && (a = i[o + (n ? 1 : 0)]), rt(s, a) } } } var s = l(i, o, t); if (s) return Sl(s, r); for (var a = o.nextSibling, d = i ? i.nodeValue.length - t : 0; a; a = a.nextSibling) { if (s = l(a, a.firstChild, 0)) return Sl(rt(s.line, s.ch - d), r); d += a.textContent.length } for (var f = o.previousSibling, p = t; f; f = f.previousSibling) { if (s = l(f, f.firstChild, -1)) return Sl(rt(s.line, s.ch + p), r); p += f.textContent.length } }(o, t, n) } } e.prototype.init = function (e) { var t = this , o = this , l = o.cm , s = o.div = e.lineDiv; function a(e) { for (var t = e.target; t; t = t.parentNode) { if (t == s) return 1; if (/\bCodeMirror-(?:line)?widget\b/.test(t.className)) break } } function n(e) { if (a(e) && !Ce(l, e)) { if (l.somethingSelected()) fl({ lineWise: !1, text: l.getSelections() }), "cut" == e.type && l.replaceSelection("", null, "cut"); else { if (!l.options.lineWiseCopyCut) return; var t = vl(l); fl({ lineWise: !0, text: t.text }), "cut" == e.type && l.operation(function () { l.setSelections(t.ranges, 0, G), l.replaceSelection("", null, "cut") }) } if (e.clipboardData) { e.clipboardData.clearData(); var n = dl.text.join("\n"); if (e.clipboardData.setData("Text", n), e.clipboardData.getData("Text") == n) return void e.preventDefault() } var r = bl() , e = r.firstChild; l.display.lineSpace.insertBefore(r, l.display.lineSpace.firstChild), e.value = dl.text.join("\n"); var i = document.activeElement; H(e), setTimeout(function () { l.display.lineSpace.removeChild(r), i.focus(), i == s && o.showPrimarySelection() }, 50) } } yl(s, l.options.spellcheck, l.options.autocorrect, l.options.autocapitalize), ye(s, "paste", function (e) { !a(e) || Ce(l, e) || gl(e, l) || v <= 11 && setTimeout(Pr(l, function () { return t.updateFromDOM() }), 20) }), ye(s, "compositionstart", function (e) { t.composing = { data: e.data, done: !1 } }), ye(s, "compositionupdate", function (e) { t.composing || (t.composing = { data: e.data, done: !1 }) }), ye(s, "compositionend", function (e) { t.composing && (e.data != t.composing.data && t.readFromDOMSoon(), t.composing.done = !0) }), ye(s, "touchstart", function () { return o.forceCompositionEnd() }), ye(s, "input", function () { t.composing || t.readFromDOMSoon() }), ye(s, "copy", n), ye(s, "cut", n) } , e.prototype.screenReaderLabelChanged = function (e) { e ? this.div.setAttribute("aria-label", e) : this.div.removeAttribute("aria-label") } , e.prototype.prepareSelection = function () { var e = sr(this.cm, !1); return e.focus = document.activeElement == this.div, e } , e.prototype.showSelection = function (e, t) { e && this.cm.display.view.length && ((e.focus || t) && this.showPrimarySelection(), this.showMultipleSelections(e)) } , e.prototype.getSelection = function () { return this.cm.display.wrapper.ownerDocument.getSelection() } , e.prototype.showPrimarySelection = function () { var e = this.getSelection() , t = this.cm , n = t.doc.sel.primary() , r = n.from() , i = n.to(); if (t.display.viewTo == t.display.viewFrom || r.line >= t.display.viewTo || i.line < t.display.viewFrom) e.removeAllRanges(); else { var o = Ll(t, e.anchorNode, e.anchorOffset) , n = Ll(t, e.focusNode, e.focusOffset); if (!o || o.bad || !n || n.bad || 0 != it(at(o, n), r) || 0 != it(st(o, n), i)) { var n = t.display.view , l = r.line >= t.display.viewFrom && Cl(t, r) || { node: n[0].measure.map[2], offset: 0 } , s = i.line < t.display.viewTo && Cl(t, i); if (s || (s = { node: (u = (u = n[n.length - 1].measure).maps ? u.maps[u.maps.length - 1] : u.map)[u.length - 1], offset: u[u.length - 2] - u[u.length - 3] }), l && s) { var a, u = e.rangeCount && e.getRangeAt(0); try { a = S(l.node, l.offset, s.offset, s.node) } catch (e) { } a && (!d && t.state.focused ? (e.collapse(l.node, l.offset), a.collapsed || (e.removeAllRanges(), e.addRange(a))) : (e.removeAllRanges(), e.addRange(a)), u && null == e.anchorNode ? e.addRange(u) : d && this.startGracePeriod()), this.rememberSelection() } else e.removeAllRanges() } } } , e.prototype.startGracePeriod = function () { var e = this; clearTimeout(this.gracePeriod), this.gracePeriod = setTimeout(function () { e.gracePeriod = !1, e.selectionChanged() && e.cm.operation(function () { return e.cm.curOp.selectionChanged = !0 }) }, 20) } , e.prototype.showMultipleSelections = function (e) { T(this.cm.display.cursorDiv, e.cursors), T(this.cm.display.selectionDiv, e.selection) } , e.prototype.rememberSelection = function () { var e = this.getSelection(); this.lastAnchorNode = e.anchorNode, this.lastAnchorOffset = e.anchorOffset, this.lastFocusNode = e.focusNode, this.lastFocusOffset = e.focusOffset } , e.prototype.selectionInEditor = function () { var e = this.getSelection(); if (!e.rangeCount) return !1; e = e.getRangeAt(0).commonAncestorContainer; return A(this.div, e) } , e.prototype.focus = function () { "nocursor" != this.cm.options.readOnly && (this.selectionInEditor() && document.activeElement == this.div || this.showSelection(this.prepareSelection(), !0), this.div.focus()) } , e.prototype.blur = function () { this.div.blur() } , e.prototype.getField = function () { return this.div } , e.prototype.supportsTouch = function () { return !0 } , e.prototype.receivedFocus = function () { var t = this; this.selectionInEditor() ? this.pollSelection() : Er(this.cm, function () { return t.cm.curOp.selectionChanged = !0 }), this.polling.set(this.cm.options.pollInterval, function e() { t.cm.state.focused && (t.pollSelection(), t.polling.set(t.cm.options.pollInterval, e)) }) } , e.prototype.selectionChanged = function () { var e = this.getSelection(); return e.anchorNode != this.lastAnchorNode || e.anchorOffset != this.lastAnchorOffset || e.focusNode != this.lastFocusNode || e.focusOffset != this.lastFocusOffset } , e.prototype.pollSelection = function () { if (null == this.readDOMTimeout && !this.gracePeriod && this.selectionChanged()) { var e, t, n = this.getSelection(), r = this.cm; if (a && o && this.cm.display.gutterSpecs.length && function (e) { for (var t = e; t; t = t.parentNode) if (/CodeMirror-gutter-wrapper/.test(t.className)) return !0; return !1 }(n.anchorNode)) return this.cm.triggerOnKeyDown({ type: "keydown", keyCode: 8, preventDefault: Math.abs }), this.blur(), void this.focus(); this.composing || (this.rememberSelection(), e = Ll(r, n.anchorNode, n.anchorOffset), t = Ll(r, n.focusNode, n.focusOffset), e && t && Er(r, function () { Ei(r.doc, si(e, t), G), (e.bad || t.bad) && (r.curOp.selectionChanged = !0) })) } } , e.prototype.pollContent = function () { null != this.readDOMTimeout && (clearTimeout(this.readDOMTimeout), this.readDOMTimeout = null); var e, t = this.cm, n = t.display, r = t.doc.sel.primary(), i = r.from(), r = r.to(); if (0 == i.ch && i.line > t.firstLine() && (i = rt(i.line - 1, $e(t.doc, i.line - 1).length)), r.ch == $e(t.doc, r.line).text.length && r.line < t.lastLine() && (r = rt(r.line + 1, 0)), i.line < n.viewFrom || r.line > n.viewTo - 1) return !1; m = i.line == n.viewFrom || 0 == (m = er(t, i.line)) ? (e = Je(n.view[0].line), n.view[0].node) : (e = Je(n.view[m].line), n.view[m - 1].node.nextSibling); var o, r = er(t, r.line), r = r == n.view.length - 1 ? (o = n.viewTo - 1, n.lineDiv.lastChild) : (o = Je(n.view[r + 1].line) - 1, n.view[r + 1].node.previousSibling); if (!m) return !1; for (var l = t.doc.splitLines(function (l, e, t, s, a) { var n = "" , u = !1 , c = l.doc.lineSeparator() , h = !1; function d() { u && (n += c, h && (n += c), u = h = !1) } function f(e) { e && (d(), n += e) } for (; !function e(t) { if (1 == t.nodeType) { var n = t.getAttribute("cm-text"); if (n) f(n); else if (n = t.getAttribute("cm-marker")) (n = l.findMarks(rt(s, 0), rt(a + 1, 0), (o = +n, function (e) { return e.id == o } ))).length && (r = n[0].find(0)) && f(qe(l.doc, r.from, r.to).join(c)); else if ("false" != t.getAttribute("contenteditable")) { var r = /^(pre|div|p|li|table|br)$/i.test(t.nodeName); if (/^br$/i.test(t.nodeName) || 0 != t.textContent.length) { r && d(); for (var i = 0; i < t.childNodes.length; i++) e(t.childNodes[i]); /^(pre|p)$/i.test(t.nodeName) && (h = !0), r && (u = !0) } } } else 3 == t.nodeType && f(t.nodeValue.replace(/\u200b/g, "").replace(/\u00a0/g, " ")); var o }(e), e != t;) e = e.nextSibling, h = !1; return n }(t, m, r, e, o)), s = qe(t.doc, rt(e, 0), rt(o, $e(t.doc, o).text.length)); 1 < l.length && 1 < s.length;) if (Y(l) == Y(s)) l.pop(), s.pop(), o--; else { if (l[0] != s[0]) break; l.shift(), s.shift(), e++ } for (var a = 0, u = 0, c = l[0], h = s[0], d = Math.min(c.length, h.length); a < d && c.charCodeAt(a) == h.charCodeAt(a);) ++a; for (var f = Y(l), p = Y(s), g = Math.min(f.length - (1 == l.length ? a : 0), p.length - (1 == s.length ? a : 0)); u < g && f.charCodeAt(f.length - u - 1) == p.charCodeAt(p.length - u - 1);) ++u; if (1 == l.length && 1 == s.length && e == i.line) for (; a && a > i.ch && f.charCodeAt(f.length - u - 1) == p.charCodeAt(p.length - u - 1);) a--, u++; l[l.length - 1] = f.slice(0, f.length - u).replace(/^\u200b+/, ""), l[0] = l[0].slice(a).replace(/\u200b+$/, ""); var m = rt(e, a) , r = rt(o, s.length ? Y(s).length - u : 0); return 1 < l.length || l[0] || it(m, r) ? (qi(t.doc, l, m, r, "+input"), !0) : void 0 } , e.prototype.ensurePolled = function () { this.forceCompositionEnd() } , e.prototype.reset = function () { this.forceCompositionEnd() } , e.prototype.forceCompositionEnd = function () { this.composing && (clearTimeout(this.readDOMTimeout), this.composing = null, this.updateFromDOM(), this.div.blur(), this.div.focus()) } , e.prototype.readFromDOMSoon = function () { var e = this; null == this.readDOMTimeout && (this.readDOMTimeout = setTimeout(function () { if (e.readDOMTimeout = null, e.composing) { if (!e.composing.done) return; e.composing = null } e.updateFromDOM() }, 80)) } , e.prototype.updateFromDOM = function () { var e = this; !this.cm.isReadOnly() && this.pollContent() || Er(this.cm, function () { return tr(e.cm) }) } , e.prototype.setUneditable = function (e) { e.contentEditable = "false" } , e.prototype.onKeyPress = function (e) { 0 == e.charCode || this.composing || (e.preventDefault(), this.cm.isReadOnly() || Pr(this.cm, pl)(this.cm, String.fromCharCode(null == e.charCode ? e.keyCode : e.charCode), 0)) } , e.prototype.readOnlyChanged = function (e) { this.div.contentEditable = String("nocursor" != e) } , e.prototype.onContextMenu = function () { } , e.prototype.resetPosition = function () { } , e.prototype.needsContentAttribute = !0; var kl, Tl, Ml, Nl, Al, r = function (e) { this.cm = e, this.prevInput = "", this.pollingFast = !1, this.polling = new I, this.hasSelection = !1, this.composing = null }; function Ol(e, t, r, n) { kl.defaults[e] = t, r && (Tl[e] = n ? function (e, t, n) { n != il && r(e, t, n) } : r) } r.prototype.init = function (n) { var e = this , r = this , i = this.cm; this.createField(n); var o = this.textarea; function t(e) { if (!Ce(i, e)) { if (i.somethingSelected()) fl({ lineWise: !1, text: i.getSelections() }); else { if (!i.options.lineWiseCopyCut) return; var t = vl(i); fl({ lineWise: !0, text: t.text }), "cut" == e.type ? i.setSelections(t.ranges, null, G) : (r.prevInput = "", o.value = t.text.join("\n"), H(o)) } "cut" == e.type && (i.state.cutIncoming = +new Date) } } n.wrapper.insertBefore(this.wrapper, n.wrapper.firstChild), s && (o.style.width = "0px"), ye(o, "input", function () { w && 9 <= v && e.hasSelection && (e.hasSelection = null), r.poll() }), ye(o, "paste", function (e) { Ce(i, e) || gl(e, i) || (i.state.pasteIncoming = +new Date, r.fastPoll()) }), ye(o, "cut", t), ye(o, "copy", t), ye(n.scroller, "paste", function (e) { if (!mn(n, e) && !Ce(i, e)) { if (!o.dispatchEvent) return i.state.pasteIncoming = +new Date, void r.focus(); var t = new Event("paste"); t.clipboardData = e.clipboardData, o.dispatchEvent(t) } }), ye(n.lineSpace, "selectstart", function (e) { mn(n, e) || Te(e) }), ye(o, "compositionstart", function () { var e = i.getCursor("from"); r.composing && r.composing.range.clear(), r.composing = { start: e, range: i.markText(e, i.getCursor("to"), { className: "CodeMirror-composing" }) } }), ye(o, "compositionend", function () { r.composing && (r.poll(), r.composing.range.clear(), r.composing = null) }) } , r.prototype.createField = function (e) { this.wrapper = bl(), this.textarea = this.wrapper.firstChild } , r.prototype.screenReaderLabelChanged = function (e) { e ? this.textarea.setAttribute("aria-label", e) : this.textarea.removeAttribute("aria-label") } , r.prototype.prepareSelection = function () { var e, t = this.cm, n = t.display, r = t.doc, i = sr(t); return t.options.moveInputWithCursor && (e = Bn(t, r.sel.primary().head, "div"), t = n.wrapper.getBoundingClientRect(), r = n.lineDiv.getBoundingClientRect(), i.teTop = Math.max(0, Math.min(n.wrapper.clientHeight - 10, e.top + r.top - t.top)), i.teLeft = Math.max(0, Math.min(n.wrapper.clientWidth - 10, e.left + r.left - t.left))), i } , r.prototype.showSelection = function (e) { var t = this.cm.display; T(t.cursorDiv, e.cursors), T(t.selectionDiv, e.selection), null != e.teTop && (this.wrapper.style.top = e.teTop + "px", this.wrapper.style.left = e.teLeft + "px") } , r.prototype.reset = function (e) { var t, n; this.contextMenuPending || this.composing || ((t = this.cm).somethingSelected() ? (this.prevInput = "", n = t.getSelection(), this.textarea.value = n, t.state.focused && H(this.textarea), w && 9 <= v && (this.hasSelection = n)) : e || (this.prevInput = this.textarea.value = "", w && 9 <= v && (this.hasSelection = null))) } , r.prototype.getField = function () { return this.textarea } , r.prototype.supportsTouch = function () { return !1 } , r.prototype.focus = function () { if ("nocursor" != this.cm.options.readOnly && (!h || O() != this.textarea)) try { this.textarea.focus() } catch (e) { } } , r.prototype.blur = function () { this.textarea.blur() } , r.prototype.resetPosition = function () { this.wrapper.style.top = this.wrapper.style.left = 0 } , r.prototype.receivedFocus = function () { this.slowPoll() } , r.prototype.slowPoll = function () { var e = this; this.pollingFast || this.polling.set(this.cm.options.pollInterval, function () { e.poll(), e.cm.state.focused && e.slowPoll() }) } , r.prototype.fastPoll = function () { var t = !1 , n = this; n.pollingFast = !0, n.polling.set(20, function e() { n.poll() || t ? (n.pollingFast = !1, n.slowPoll()) : (t = !0, n.polling.set(60, e)) }) } , r.prototype.poll = function () { var e = this , t = this.cm , n = this.textarea , r = this.prevInput; if (this.contextMenuPending || !t.state.focused || Pe(n) && !r && !this.composing || t.isReadOnly() || t.options.disableInput || t.state.keySeq) return !1; var i = n.value; if (i == r && !t.somethingSelected()) return !1; if (w && 9 <= v && this.hasSelection === i || g && /[\uf700-\uf7ff]/.test(i)) return t.display.input.reset(), !1; if (t.doc.sel == t.display.selForContextMenu) { var o = i.charCodeAt(0); if (8203 != o || r || (r = "​"), 8666 == o) return this.reset(), this.cm.execCommand("undo") } for (var l = 0, s = Math.min(r.length, i.length); l < s && r.charCodeAt(l) == i.charCodeAt(l);) ++l; return Er(t, function () { pl(t, i.slice(l), r.length - l, null, e.composing ? "*compose" : null), 1e3 < i.length || -1 < i.indexOf("\n") ? n.value = e.prevInput = "" : e.prevInput = i, e.composing && (e.composing.range.clear(), e.composing.range = t.markText(e.composing.start, t.getCursor("to"), { className: "CodeMirror-composing" })) }), !0 } , r.prototype.ensurePolled = function () { this.pollingFast && this.poll() && (this.pollingFast = !1) } , r.prototype.onKeyPress = function () { w && 9 <= v && (this.hasSelection = null), this.fastPoll() } , r.prototype.onContextMenu = function (e) { var n = this , r = n.cm , i = r.display , o = n.textarea; n.contextMenuPending && n.contextMenuPending(); var l, s, t, a, u = Jn(r, e), c = i.scroller.scrollTop; function h() { var e, t; null != o.selectionStart && (t = "​" + ((e = r.somethingSelected()) ? o.value : ""), o.value = "⇚", o.value = t, n.prevInput = e ? "" : "​", o.selectionStart = 1, o.selectionEnd = t.length, i.selForContextMenu = r.doc.sel) } function d() { var e, t; n.contextMenuPending == d && (n.contextMenuPending = !1, n.wrapper.style.cssText = s, o.style.cssText = l, w && v < 9 && i.scrollbars.setScrollTop(i.scroller.scrollTop = c), null != o.selectionStart && ((!w || w && v < 9) && h(), e = 0, t = function () { i.selForContextMenu == r.doc.sel && 0 == o.selectionStart && 0 < o.selectionEnd && "​" == n.prevInput ? Pr(r, Vi)(r) : e++ < 10 ? i.detectingSelectAll = setTimeout(t, 500) : (i.selForContextMenu = null, i.input.reset()) } , i.detectingSelectAll = setTimeout(t, 200))) } u && !p && (r.options.resetSelectionOnContextMenu && -1 == r.doc.sel.contains(u) && Pr(r, Ei)(r.doc, si(u), G), l = o.style.cssText, s = n.wrapper.style.cssText, u = n.wrapper.offsetParent.getBoundingClientRect(), n.wrapper.style.cssText = "position: static", o.style.cssText = "position: absolute; width: 30px; height: 30px;\n top: " + (e.clientY - u.top - 5) + "px; left: " + (e.clientX - u.left - 5) + "px;\n z-index: 1000; background: " + (w ? "rgba(255, 255, 255, .05)" : "transparent") + ";\n outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);", f && (t = window.scrollY), i.input.focus(), f && window.scrollTo(null, t), i.input.reset(), r.somethingSelected() || (o.value = n.prevInput = " "), n.contextMenuPending = d, i.selForContextMenu = r.doc.sel, clearTimeout(i.detectingSelectAll), w && 9 <= v && h(), x ? (Ae(e), a = function () { we(window, "mouseup", a), setTimeout(d, 20) } , ye(window, "mouseup", a)) : setTimeout(d, 50)) } , r.prototype.readOnlyChanged = function (e) { e || this.reset(), this.textarea.disabled = "nocursor" == e, this.textarea.readOnly = !!e } , r.prototype.setUneditable = function () { } , r.prototype.needsContentAttribute = !1, Tl = (kl = ul).optionHandlers, kl.defineOption = Ol, kl.Init = il, Ol("value", "", function (e, t) { return e.setValue(t) }, !0), Ol("mode", null, function (e, t) { e.doc.modeOption = t, di(e) }, !0), Ol("indentUnit", 2, di, !0), Ol("indentWithTabs", !1), Ol("smartIndent", !0), Ol("tabSize", 4, function (e) { fi(e), Hn(e), tr(e) }, !0), Ol("lineSeparator", null, function (e, r) { if (e.doc.lineSep = r) { var i = [] , o = e.doc.first; e.doc.iter(function (e) { for (var t = 0; ;) { var n = e.text.indexOf(r, t); if (-1 == n) break; t = n + r.length, i.push(rt(o, n)) } o++ }); for (var t = i.length - 1; 0 <= t; t--) qi(e.doc, r, i[t], rt(i[t].line, i[t].ch + r.length)) } }), Ol("specialChars", /[\u0000-\u001f\u007f-\u009f\u00ad\u061c\u200b-\u200c\u200e\u200f\u2028\u2029\ufeff\ufff9-\ufffc]/g, function (e, t, n) { e.state.specialChars = new RegExp(t.source + (t.test("\t") ? "" : "|\t"), "g"), n != il && e.refresh() }), Ol("specialCharPlaceholder", Zt, function (e) { return e.refresh() }, !0), Ol("electricChars", !0), Ol("inputStyle", h ? "contenteditable" : "textarea", function () { throw new Error("inputStyle can not (yet) be changed in a running editor") }, !0), Ol("spellcheck", !1, function (e, t) { return e.getInputField().spellcheck = t }, !0), Ol("autocorrect", !1, function (e, t) { return e.getInputField().autocorrect = t }, !0), Ol("autocapitalize", !1, function (e, t) { return e.getInputField().autocapitalize = t }, !0), Ol("rtlMoveVisually", !y), Ol("wholeLineUpdateBefore", !0), Ol("theme", "default", function (e) { rl(e), Zr(e) }, !0), Ol("keyMap", "default", function (e, t, n) { t = Do(t), n = n != il && Do(n); n && n.detach && n.detach(e, t), t.attach && t.attach(e, n || null) }), Ol("extraKeys", null), Ol("configureMouse", null), Ol("lineWrapping", !1, al, !0), Ol("gutters", [], function (e, t) { e.display.gutterSpecs = $r(t, e.options.lineNumbers), Zr(e) }, !0), Ol("fixedGutter", !0, function (e, t) { e.display.gutters.style.left = t ? qn(e.display) + "px" : "0", e.refresh() }, !0), Ol("coverGutterNextToScrollbar", !1, function (e) { return Nr(e) }, !0), Ol("scrollbarStyle", "native", function (e) { Dr(e), Nr(e), e.display.scrollbars.setScrollTop(e.doc.scrollTop), e.display.scrollbars.setScrollLeft(e.doc.scrollLeft) }, !0), Ol("lineNumbers", !1, function (e, t) { e.display.gutterSpecs = $r(e.options.gutters, t), Zr(e) }, !0), Ol("firstLineNumber", 1, Zr, !0), Ol("lineNumberFormatter", function (e) { return e }, Zr, !0), Ol("showCursorWhenSelecting", !1, lr, !0), Ol("resetSelectionOnContextMenu", !0), Ol("lineWiseCopyCut", !0), Ol("pasteLinesPerSelection", !0), Ol("selectionsMayTouch", !1), Ol("readOnly", !1, function (e, t) { "nocursor" == t && (pr(e), e.display.input.blur()), e.display.input.readOnlyChanged(t) }), Ol("screenReaderLabel", null, function (e, t) { t = "" === t ? null : t, e.display.input.screenReaderLabelChanged(t) }), Ol("disableInput", !1, function (e, t) { t || e.display.input.reset() }, !0), Ol("dragDrop", !0, sl), Ol("allowDropFileTypes", null), Ol("cursorBlinkRate", 530), Ol("cursorScrollMargin", 0), Ol("cursorHeight", 1, lr, !0), Ol("singleCursorHeightPerLine", !0, lr, !0), Ol("workTime", 100), Ol("workDelay", 100), Ol("flattenSpans", !0, fi, !0), Ol("addModeClass", !1, fi, !0), Ol("pollInterval", 100), Ol("undoDepth", 200, function (e, t) { return e.doc.history.undoDepth = t }), Ol("historyEventDelay", 1250), Ol("viewportMargin", 10, function (e) { return e.refresh() }, !0), Ol("maxHighlightLength", 1e4, fi, !0), Ol("moveInputWithCursor", !0, function (e, t) { t || e.display.input.resetPosition() }), Ol("tabindex", null, function (e, t) { return e.display.input.getField().tabIndex = t || "" }), Ol("autofocus", null), Ol("direction", "ltr", function (e, t) { return e.doc.setDirection(t) }, !0), Ol("phrases", null), Nl = (Ml = ul).optionHandlers, Al = Ml.helpers = {}, Ml.prototype = { constructor: Ml, focus: function () { window.focus(), this.display.input.focus() }, setOption: function (e, t) { var n = this.options , r = n[e]; n[e] == t && "mode" != e || (n[e] = t, Nl.hasOwnProperty(e) && Pr(this, Nl[e])(this, t, r), xe(this, "optionChange", this, e)) }, getOption: function (e) { return this.options[e] }, getDoc: function () { return this.doc }, addKeyMap: function (e, t) { this.state.keyMaps[t ? "push" : "unshift"](Do(e)) }, removeKeyMap: function (e) { for (var t = this.state.keyMaps, n = 0; n < t.length; ++n) if (t[n] == e || t[n].name == e) return t.splice(n, 1), !0 }, addOverlay: Ir(function (e, t) { var n = e.token ? e : Ml.getMode(this.options, e); if (n.startState) throw new Error("Overlays may not be stateful."); !function (e, t, n) { for (var r = 0, i = n(t); r < e.length && n(e[r]) <= i;) r++; e.splice(r, 0, t) }(this.state.overlays, { mode: n, modeSpec: e, opaque: t && t.opaque, priority: t && t.priority || 0 }, function (e) { return e.priority }), this.state.modeGen++, tr(this) }), removeOverlay: Ir(function (e) { for (var t = this.state.overlays, n = 0; n < t.length; ++n) { var r = t[n].modeSpec; if (r == e || "string" == typeof e && r.name == e) return t.splice(n, 1), this.state.modeGen++, void tr(this) } }), indentLine: Ir(function (e, t, n) { "string" != typeof t && "number" != typeof t && (t = null == t ? this.options.smartIndent ? "smart" : "prev" : t ? "add" : "subtract"), tt(this.doc, e) && hl(this, e, t, n) }), indentSelection: Ir(function (e) { for (var t = this.doc.sel.ranges, n = -1, r = 0; r < t.length; r++) { var i = t[r]; if (i.empty()) i.head.line > n && (hl(this, i.head.line, e, !0), n = i.head.line, r == this.doc.sel.primIndex && wr(this)); else { for (var o = i.from(), l = i.to(), i = Math.max(n, o.line), n = Math.min(this.lastLine(), l.line - (l.ch ? 0 : 1)) + 1, s = i; s < n; ++s) hl(this, s, e); i = this.doc.sel.ranges; 0 == o.ch && t.length == i.length && 0 < i[r].from().ch && Wi(this.doc, r, new oi(o, i[r].to()), G) } } }), getTokenAt: function (e, t) { return xt(this, e, t) }, getLineTokens: function (e, t) { return xt(this, rt(e), t, !0) }, getTokenTypeAt: function (e) { e = ct(this.doc, e); var t, n = gt(this, $e(this.doc, e.line)), r = 0, i = (n.length - 1) / 2, o = e.ch; if (0 == o) t = n[2]; else for (; ;) { var l = r + i >> 1; if ((l ? n[2 * l - 1] : 0) >= o) i = l; else { if (!(n[2 * l + 1] < o)) { t = n[2 * l + 2]; break } r = 1 + l } } e = t ? t.indexOf("overlay ") : -1; return e < 0 ? t : 0 == e ? null : t.slice(0, e - 1) }, getModeAt: function (e) { var t = this.doc.mode; return t.innerMode ? Ml.innerMode(t, this.getTokenAt(e).state).mode : t }, getHelper: function (e, t) { return this.getHelpers(e, t)[0] }, getHelpers: function (e, t) { var n = []; if (!Al.hasOwnProperty(t)) return n; var r = Al[t] , i = this.getModeAt(e); if ("string" == typeof i[t]) r[i[t]] && n.push(r[i[t]]); else if (i[t]) for (var o = 0; o < i[t].length; o++) { var l = r[i[t][o]]; l && n.push(l) } else i.helperType && r[i.helperType] ? n.push(r[i.helperType]) : r[i.name] && n.push(r[i.name]); for (var s = 0; s < r._global.length; s++) { var a = r._global[s]; a.pred(i, this) && -1 == R(n, a.val) && n.push(a.val) } return n }, getStateAfter: function (e, t) { var n = this.doc; return mt(this, (e = ut(n, null == e ? n.first + n.size - 1 : e)) + 1, t).state }, cursorCoords: function (e, t) { var n = this.doc.sel.primary() , n = null == e ? n.head : "object" == typeof e ? ct(this.doc, e) : e ? n.from() : n.to(); return Bn(this, n, t || "page") }, charCoords: function (e, t) { return zn(this, ct(this.doc, e), t || "page") }, coordsChar: function (e, t) { return Vn(this, (e = Rn(this, e, t || "page")).left, e.top) }, lineAtHeight: function (e, t) { return e = Rn(this, { top: e, left: 0 }, t || "page").top, et(this.doc, e + this.display.viewOffset) }, heightAtLine: function (e, t, n) { var r, i = !1, e = "number" == typeof e ? (r = this.doc.first + this.doc.size - 1, e < this.doc.first ? e = this.doc.first : r < e && (e = r, i = !0), $e(this.doc, e)) : e; return In(this, e, { top: 0, left: 0 }, t || "page", n || i).top + (i ? this.doc.height - Vt(e) : 0) }, defaultTextHeight: function () { return Yn(this.display) }, defaultCharWidth: function () { return _n(this.display) }, getViewport: function () { return { from: this.display.viewFrom, to: this.display.viewTo } }, addWidget: function (e, t, n, r, i) { var o, l, s = this.display, a = (e = Bn(this, ct(this.doc, e))).bottom, u = e.left; t.style.position = "absolute", t.setAttribute("cm-ignore-events", "true"), this.display.input.setUneditable(t), s.sizer.appendChild(t), "over" == r ? a = e.top : "above" != r && "near" != r || (o = Math.max(s.wrapper.clientHeight, this.doc.height), l = Math.max(s.sizer.clientWidth, s.lineSpace.clientWidth), ("above" == r || e.bottom + t.offsetHeight > o) && e.top > t.offsetHeight ? a = e.top - t.offsetHeight : e.bottom + t.offsetHeight <= o && (a = e.bottom), u + t.offsetWidth > l && (u = l - t.offsetWidth)), t.style.top = a + "px", t.style.left = t.style.right = "", "right" == i ? (u = s.sizer.clientWidth - t.offsetWidth, t.style.right = "0px") : ("left" == i ? u = 0 : "middle" == i && (u = (s.sizer.clientWidth - t.offsetWidth) / 2), t.style.left = u + "px"), n && (n = this, t = { left: u, top: a, right: u + t.offsetWidth, bottom: a + t.offsetHeight }, null != (t = yr(n, t)).scrollTop && Lr(n, t.scrollTop), null != t.scrollLeft && Tr(n, t.scrollLeft)) }, triggerOnKeyDown: Ir(Xo), triggerOnKeyPress: Ir(_o), triggerOnKeyUp: Yo, triggerOnMouseDown: Ir(Qo), execCommand: function (e) { if (Io.hasOwnProperty(e)) return Io[e].call(null, this) }, triggerElectric: Ir(function (e) { ml(this, e) }), findPosH: function (e, t, n, r) { var i = 1; t < 0 && (i = -1, t = -t); for (var o = ct(this.doc, e), l = 0; l < t && !(o = wl(this.doc, o, i, n, r)).hitSide; ++l) ; return o }, moveH: Ir(function (t, n) { var r = this; this.extendSelectionsBy(function (e) { return r.display.shift || r.doc.extend || e.empty() ? wl(r.doc, e.head, t, n, r.options.rtlMoveVisually) : t < 0 ? e.from() : e.to() }, V) }), deleteH: Ir(function (n, r) { var e = this.doc.sel , i = this.doc; e.somethingSelected() ? i.replaceSelection("", null, "+delete") : Wo(this, function (e) { var t = wl(i, e.head, n, r, !1); return n < 0 ? { from: t, to: e.head } : { from: e.head, to: t } }) }), findPosV: function (e, t, n, r) { var i = 1 , o = r; t < 0 && (i = -1, t = -t); for (var l = ct(this.doc, e), s = 0; s < t; ++s) { var a = Bn(this, l, "div"); if (null == o ? o = a.left : a.left = o, (l = xl(this, a, i, n)).hitSide) break } return l }, moveV: Ir(function (r, i) { var o = this , l = this.doc , s = [] , a = !this.display.shift && !l.extend && l.sel.somethingSelected(); if (l.extendSelectionsBy(function (e) { if (a) return r < 0 ? e.from() : e.to(); var t = Bn(o, e.head, "div"); null != e.goalColumn && (t.left = e.goalColumn), s.push(t.left); var n = xl(o, t, r, i); return "page" == i && e == l.sel.primary() && br(o, zn(o, n, "div").top - t.top), n }, V), s.length) for (var e = 0; e < l.sel.ranges.length; e++) l.sel.ranges[e].goalColumn = s[e] }), findWordAt: function (e) { var t = $e(this.doc, e.line).text , n = e.ch , r = e.ch; if (t) { var i = this.getHelper(e, "wordChars"); "before" != e.sticky && r != t.length || !n ? ++r : --n; for (var o = t.charAt(n), l = J(o, i) ? function (e) { return J(e, i) } : /\s/.test(o) ? function (e) { return /\s/.test(e) } : function (e) { return !/\s/.test(e) && !J(e) } ; 0 < n && l(t.charAt(n - 1));) --n; for (; r < t.length && l(t.charAt(r));) ++r } return new oi(rt(e.line, n), rt(e.line, r)) }, toggleOverwrite: function (e) { null != e && e == this.state.overwrite || (((this.state.overwrite = !this.state.overwrite) ? D : L)(this.display.cursorDiv, "CodeMirror-overwrite"), xe(this, "overwriteToggle", this, this.state.overwrite)) }, hasFocus: function () { return this.display.input.getField() == O() }, isReadOnly: function () { return !(!this.options.readOnly && !this.doc.cantEdit) }, scrollTo: Ir(function (e, t) { xr(this, e, t) }), getScrollInfo: function () { var e = this.display.scroller; return { left: e.scrollLeft, top: e.scrollTop, height: e.scrollHeight - wn(this) - this.display.barHeight, width: e.scrollWidth - wn(this) - this.display.barWidth, clientHeight: Cn(this), clientWidth: xn(this) } }, scrollIntoView: Ir(function (e, t) { var n; null == e ? (e = { from: this.doc.sel.primary().head, to: null }, null == t && (t = this.options.cursorScrollMargin)) : "number" == typeof e ? e = { from: rt(e, 0), to: null } : null == e.from && (e = { from: e, to: null }), e.to || (e.to = e.from), e.margin = t || 0, null != e.from.line ? (n = e, Cr(t = this), t.curOp.scrollToPos = n) : Sr(this, e.from, e.to, e.margin) }), setSize: Ir(function (e, t) { function n(e) { return "number" == typeof e || /^\d+$/.test(String(e)) ? e + "px" : e } var r = this; null != e && (this.display.wrapper.style.width = n(e)), null != t && (this.display.wrapper.style.height = n(t)), this.options.lineWrapping && Wn(this); var i = this.display.viewFrom; this.doc.iter(i, this.display.viewTo, function (e) { if (e.widgets) for (var t = 0; t < e.widgets.length; t++) if (e.widgets[t].noHScroll) { nr(r, i, "widget"); break } ++i }), this.curOp.forceUpdate = !0, xe(this, "refresh", this) }), operation: function (e) { return Er(this, e) }, startOperation: function () { return Hr(this) }, endOperation: function () { return Fr(this) }, refresh: Ir(function () { var e = this.display.cachedTextHeight; tr(this), this.curOp.forceUpdate = !0, Hn(this), xr(this, this.doc.scrollLeft, this.doc.scrollTop), jr(this.display), (null == e || .5 < Math.abs(e - Yn(this.display)) || this.options.lineWrapping) && Qn(this), xe(this, "refresh", this) }), swapDoc: Ir(function (e) { var t = this.doc; return t.cm = null, this.state.selectingText && this.state.selectingText(), vi(this, e), Hn(this), this.display.input.reset(), xr(this, e.scrollLeft, e.scrollTop), this.curOp.forceScroll = !0, ln(this, "swapDoc", this, t), t }), phrase: function (e) { var t = this.options.phrases; return t && Object.prototype.hasOwnProperty.call(t, e) ? t[e] : e }, getInputField: function () { return this.display.input.getField() }, getWrapperElement: function () { return this.display.wrapper }, getScrollerElement: function () { return this.display.scroller }, getGutterElement: function () { return this.display.gutters } }, ke(Ml), Ml.registerHelper = function (e, t, n) { Al.hasOwnProperty(e) || (Al[e] = Ml[e] = { _global: [] }), Al[e][t] = n } , Ml.registerGlobalHelper = function (e, t, n, r) { Ml.registerHelper(e, t, r), Al[e]._global.push({ pred: n, val: r }) } ; var Dl, Wl, Hl = "iter insert remove copy getEditor constructor".split(" "); for (Dl in ho.prototype) ho.prototype.hasOwnProperty(Dl) && R(Hl, Dl) < 0 && (ul.prototype[Dl] = function (e) { return function () { return e.apply(this.doc, arguments) } }(ho.prototype[Dl])); return ke(ho), ul.inputStyles = { textarea: r, contenteditable: e }, ul.defineMode = function (e) { ul.defaults.mode || "null" == e || (ul.defaults.mode = e), function (e, t) { 2 < arguments.length && (t.dependencies = Array.prototype.slice.call(arguments, 2)), ze[e] = t } .apply(this, arguments) } , ul.defineMIME = function (e, t) { Be[e] = t } , ul.defineMode("null", function () { return { token: function (e) { return e.skipToEnd() } } }), ul.defineMIME("text/plain", "null"), ul.defineExtension = function (e, t) { ul.prototype[e] = t } , ul.defineDocExtension = function (e, t) { ho.prototype[e] = t } , ul.fromTextArea = function (t, n) { var e; function r() { t.value = s.getValue() } if (n = n ? E(n) : {}, n.value = t.value, !n.tabindex && t.tabIndex && (n.tabindex = t.tabIndex), !n.placeholder && t.placeholder && (n.placeholder = t.placeholder), null == n.autofocus && (e = O(), n.autofocus = e == t || null != t.getAttribute("autofocus") && e == document.body), t.form && (ye(t.form, "submit", r), !n.leaveSubmitMethodAlone)) { var i = t.form , o = i.submit; try { var l = i.submit = function () { r(), i.submit = o, i.submit(), i.submit = l } } catch (e) { } } n.finishInit = function (e) { e.save = r, e.getTextArea = function () { return t } , e.toTextArea = function () { e.toTextArea = isNaN, r(), t.parentNode.removeChild(e.getWrapperElement()), t.style.display = "", t.form && (we(t.form, "submit", r), n.leaveSubmitMethodAlone || "function" != typeof t.form.submit || (t.form.submit = o)) } } , t.style.display = "none"; var s = ul(function (e) { return t.parentNode.insertBefore(e, t.nextSibling) }, n); return s } , (Wl = ul).off = we, Wl.on = ye, Wl.wheelEventPixels = ni, Wl.Doc = ho, Wl.splitLines = Ee, Wl.countColumn = P, Wl.findColumn = K, Wl.isWordChar = Q, Wl.Pass = B, Wl.signal = xe, Wl.Line = Xt, Wl.changeEnd = ai, Wl.scrollbarModel = Or, Wl.Pos = rt, Wl.cmpPos = it, Wl.modes = ze, Wl.mimeModes = Be, Wl.resolveMode = Ge, Wl.getMode = Ue, Wl.modeExtensions = Ve, Wl.extendMode = Ke, Wl.copyState = je, Wl.startState = Ye, Wl.innerMode = Xe, Wl.commands = Io, Wl.keyMap = Lo, Wl.keyName = Oo, Wl.isModifierKey = No, Wl.lookupKey = Mo, Wl.normalizeKeyMap = To, Wl.StringStream = _e, Wl.SharedTextMarker = ao, Wl.TextMarker = lo, Wl.LineWidget = ro, Wl.e_preventDefault = Te, Wl.e_stopPropagation = Me, Wl.e_stop = Ae, Wl.addClass = D, Wl.contains = A, Wl.rmClass = L, Wl.keyNames = wo, ul.version = "5.58.3", ul });