@pyscript/core 0.6.41 → 0.6.43

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/dist/{codemirror-Uuz49kj7.js → codemirror-Cxby0EOW.js} +2 -2
  2. package/dist/codemirror-Cxby0EOW.js.map +1 -0
  3. package/dist/codemirror_lang-python-C4eeLuBs.js +2 -0
  4. package/dist/codemirror_lang-python-C4eeLuBs.js.map +1 -0
  5. package/dist/core-BOiVf2le.js +4 -0
  6. package/dist/core-BOiVf2le.js.map +1 -0
  7. package/dist/core.js +1 -1
  8. package/dist/{deprecations-manager-x4bcYhce.js → deprecations-manager-EACidTEX.js} +2 -2
  9. package/dist/{deprecations-manager-x4bcYhce.js.map → deprecations-manager-EACidTEX.js.map} +1 -1
  10. package/dist/{donkey-JgymkaaI.js → donkey-DUQ90LXE.js} +2 -2
  11. package/dist/{donkey-JgymkaaI.js.map → donkey-DUQ90LXE.js.map} +1 -1
  12. package/dist/{error-D8LihTN3.js → error-CRrNHPBO.js} +2 -2
  13. package/dist/{error-D8LihTN3.js.map → error-CRrNHPBO.js.map} +1 -1
  14. package/dist/{mpy-DBxBADHB.js → mpy-D6sqxUjS.js} +2 -2
  15. package/dist/{mpy-DBxBADHB.js.map → mpy-D6sqxUjS.js.map} +1 -1
  16. package/dist/{py-B4QygEXf.js → py-Y7d7JPNg.js} +2 -2
  17. package/dist/{py-B4QygEXf.js.map → py-Y7d7JPNg.js.map} +1 -1
  18. package/dist/{py-editor-B6Ri8y5a.js → py-editor-CihiZ2Uv.js} +2 -2
  19. package/dist/{py-editor-B6Ri8y5a.js.map → py-editor-CihiZ2Uv.js.map} +1 -1
  20. package/dist/{py-game-BQhMSXwI.js → py-game-jtHq5tlq.js} +2 -2
  21. package/dist/{py-game-BQhMSXwI.js.map → py-game-jtHq5tlq.js.map} +1 -1
  22. package/dist/{py-terminal-A7hgyNxG.js → py-terminal-DJ9qQ_Ks.js} +2 -2
  23. package/dist/{py-terminal-A7hgyNxG.js.map → py-terminal-DJ9qQ_Ks.js.map} +1 -1
  24. package/dist/{xterm-7LwxAMsn.js → xterm-CVv2fC4I.js} +2 -2
  25. package/dist/xterm-CVv2fC4I.js.map +1 -0
  26. package/package.json +3 -3
  27. package/src/3rd-party/xterm.js +2 -2
  28. package/dist/codemirror-Uuz49kj7.js.map +0 -1
  29. package/dist/codemirror_lang-python-CdfPcWbg.js +0 -2
  30. package/dist/codemirror_lang-python-CdfPcWbg.js.map +0 -1
  31. package/dist/core-nlV-Dq0-.js +0 -4
  32. package/dist/core-nlV-Dq0-.js.map +0 -1
  33. package/dist/xterm-7LwxAMsn.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"codemirror-Uuz49kj7.js","sources":["../node_modules/crelt/index.js","../node_modules/@codemirror/search/dist/index.js","../node_modules/@codemirror/lint/dist/index.js","../node_modules/codemirror/dist/index.js"],"sourcesContent":["export default function crelt() {\n var elt = arguments[0]\n if (typeof elt == \"string\") elt = document.createElement(elt)\n var i = 1, next = arguments[1]\n if (next && typeof next == \"object\" && next.nodeType == null && !Array.isArray(next)) {\n for (var name in next) if (Object.prototype.hasOwnProperty.call(next, name)) {\n var value = next[name]\n if (typeof value == \"string\") elt.setAttribute(name, value)\n else if (value != null) elt[name] = value\n }\n i++\n }\n for (; i < arguments.length; i++) add(elt, arguments[i])\n return elt\n}\n\nfunction add(elt, child) {\n if (typeof child == \"string\") {\n elt.appendChild(document.createTextNode(child))\n } else if (child == null) {\n } else if (child.nodeType != null) {\n elt.appendChild(child)\n } else if (Array.isArray(child)) {\n for (var i = 0; i < child.length; i++) add(elt, child[i])\n } else {\n throw new RangeError(\"Unsupported child node: \" + child)\n }\n}\n","import { showPanel, EditorView, getPanel, Decoration, ViewPlugin, runScopeHandlers } from '@codemirror/view';\nimport { codePointAt, fromCodePoint, codePointSize, StateEffect, StateField, EditorSelection, Facet, combineConfig, CharCategory, RangeSetBuilder, Prec, EditorState, findClusterBreak } from '@codemirror/state';\nimport elt from 'crelt';\n\nconst basicNormalize = typeof String.prototype.normalize == \"function\"\n ? x => x.normalize(\"NFKD\") : x => x;\n/**\nA search cursor provides an iterator over text matches in a\ndocument.\n*/\nclass SearchCursor {\n /**\n Create a text cursor. The query is the search string, `from` to\n `to` provides the region to search.\n \n When `normalize` is given, it will be called, on both the query\n string and the content it is matched against, before comparing.\n You can, for example, create a case-insensitive search by\n passing `s => s.toLowerCase()`.\n \n Text is always normalized with\n [`.normalize(\"NFKD\")`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize)\n (when supported).\n */\n constructor(text, query, from = 0, to = text.length, normalize, test) {\n this.test = test;\n /**\n The current match (only holds a meaningful value after\n [`next`](https://codemirror.net/6/docs/ref/#search.SearchCursor.next) has been called and when\n `done` is false).\n */\n this.value = { from: 0, to: 0 };\n /**\n Whether the end of the iterated region has been reached.\n */\n this.done = false;\n this.matches = [];\n this.buffer = \"\";\n this.bufferPos = 0;\n this.iter = text.iterRange(from, to);\n this.bufferStart = from;\n this.normalize = normalize ? x => normalize(basicNormalize(x)) : basicNormalize;\n this.query = this.normalize(query);\n }\n peek() {\n if (this.bufferPos == this.buffer.length) {\n this.bufferStart += this.buffer.length;\n this.iter.next();\n if (this.iter.done)\n return -1;\n this.bufferPos = 0;\n this.buffer = this.iter.value;\n }\n return codePointAt(this.buffer, this.bufferPos);\n }\n /**\n Look for the next match. Updates the iterator's\n [`value`](https://codemirror.net/6/docs/ref/#search.SearchCursor.value) and\n [`done`](https://codemirror.net/6/docs/ref/#search.SearchCursor.done) properties. Should be called\n at least once before using the cursor.\n */\n next() {\n while (this.matches.length)\n this.matches.pop();\n return this.nextOverlapping();\n }\n /**\n The `next` method will ignore matches that partially overlap a\n previous match. This method behaves like `next`, but includes\n such matches.\n */\n nextOverlapping() {\n for (;;) {\n let next = this.peek();\n if (next < 0) {\n this.done = true;\n return this;\n }\n let str = fromCodePoint(next), start = this.bufferStart + this.bufferPos;\n this.bufferPos += codePointSize(next);\n let norm = this.normalize(str);\n if (norm.length)\n for (let i = 0, pos = start;; i++) {\n let code = norm.charCodeAt(i);\n let match = this.match(code, pos, this.bufferPos + this.bufferStart);\n if (i == norm.length - 1) {\n if (match) {\n this.value = match;\n return this;\n }\n break;\n }\n if (pos == start && i < str.length && str.charCodeAt(i) == code)\n pos++;\n }\n }\n }\n match(code, pos, end) {\n let match = null;\n for (let i = 0; i < this.matches.length; i += 2) {\n let index = this.matches[i], keep = false;\n if (this.query.charCodeAt(index) == code) {\n if (index == this.query.length - 1) {\n match = { from: this.matches[i + 1], to: end };\n }\n else {\n this.matches[i]++;\n keep = true;\n }\n }\n if (!keep) {\n this.matches.splice(i, 2);\n i -= 2;\n }\n }\n if (this.query.charCodeAt(0) == code) {\n if (this.query.length == 1)\n match = { from: pos, to: end };\n else\n this.matches.push(1, pos);\n }\n if (match && this.test && !this.test(match.from, match.to, this.buffer, this.bufferStart))\n match = null;\n return match;\n }\n}\nif (typeof Symbol != \"undefined\")\n SearchCursor.prototype[Symbol.iterator] = function () { return this; };\n\nconst empty = { from: -1, to: -1, match: /*@__PURE__*//.*/.exec(\"\") };\nconst baseFlags = \"gm\" + (/x/.unicode == null ? \"\" : \"u\");\n/**\nThis class is similar to [`SearchCursor`](https://codemirror.net/6/docs/ref/#search.SearchCursor)\nbut searches for a regular expression pattern instead of a plain\nstring.\n*/\nclass RegExpCursor {\n /**\n Create a cursor that will search the given range in the given\n document. `query` should be the raw pattern (as you'd pass it to\n `new RegExp`).\n */\n constructor(text, query, options, from = 0, to = text.length) {\n this.text = text;\n this.to = to;\n this.curLine = \"\";\n /**\n Set to `true` when the cursor has reached the end of the search\n range.\n */\n this.done = false;\n /**\n Will contain an object with the extent of the match and the\n match object when [`next`](https://codemirror.net/6/docs/ref/#search.RegExpCursor.next)\n sucessfully finds a match.\n */\n this.value = empty;\n if (/\\\\[sWDnr]|\\n|\\r|\\[\\^/.test(query))\n return new MultilineRegExpCursor(text, query, options, from, to);\n this.re = new RegExp(query, baseFlags + ((options === null || options === void 0 ? void 0 : options.ignoreCase) ? \"i\" : \"\"));\n this.test = options === null || options === void 0 ? void 0 : options.test;\n this.iter = text.iter();\n let startLine = text.lineAt(from);\n this.curLineStart = startLine.from;\n this.matchPos = toCharEnd(text, from);\n this.getLine(this.curLineStart);\n }\n getLine(skip) {\n this.iter.next(skip);\n if (this.iter.lineBreak) {\n this.curLine = \"\";\n }\n else {\n this.curLine = this.iter.value;\n if (this.curLineStart + this.curLine.length > this.to)\n this.curLine = this.curLine.slice(0, this.to - this.curLineStart);\n this.iter.next();\n }\n }\n nextLine() {\n this.curLineStart = this.curLineStart + this.curLine.length + 1;\n if (this.curLineStart > this.to)\n this.curLine = \"\";\n else\n this.getLine(0);\n }\n /**\n Move to the next match, if there is one.\n */\n next() {\n for (let off = this.matchPos - this.curLineStart;;) {\n this.re.lastIndex = off;\n let match = this.matchPos <= this.to && this.re.exec(this.curLine);\n if (match) {\n let from = this.curLineStart + match.index, to = from + match[0].length;\n this.matchPos = toCharEnd(this.text, to + (from == to ? 1 : 0));\n if (from == this.curLineStart + this.curLine.length)\n this.nextLine();\n if ((from < to || from > this.value.to) && (!this.test || this.test(from, to, match))) {\n this.value = { from, to, match };\n return this;\n }\n off = this.matchPos - this.curLineStart;\n }\n else if (this.curLineStart + this.curLine.length < this.to) {\n this.nextLine();\n off = 0;\n }\n else {\n this.done = true;\n return this;\n }\n }\n }\n}\nconst flattened = /*@__PURE__*/new WeakMap();\n// Reusable (partially) flattened document strings\nclass FlattenedDoc {\n constructor(from, text) {\n this.from = from;\n this.text = text;\n }\n get to() { return this.from + this.text.length; }\n static get(doc, from, to) {\n let cached = flattened.get(doc);\n if (!cached || cached.from >= to || cached.to <= from) {\n let flat = new FlattenedDoc(from, doc.sliceString(from, to));\n flattened.set(doc, flat);\n return flat;\n }\n if (cached.from == from && cached.to == to)\n return cached;\n let { text, from: cachedFrom } = cached;\n if (cachedFrom > from) {\n text = doc.sliceString(from, cachedFrom) + text;\n cachedFrom = from;\n }\n if (cached.to < to)\n text += doc.sliceString(cached.to, to);\n flattened.set(doc, new FlattenedDoc(cachedFrom, text));\n return new FlattenedDoc(from, text.slice(from - cachedFrom, to - cachedFrom));\n }\n}\nclass MultilineRegExpCursor {\n constructor(text, query, options, from, to) {\n this.text = text;\n this.to = to;\n this.done = false;\n this.value = empty;\n this.matchPos = toCharEnd(text, from);\n this.re = new RegExp(query, baseFlags + ((options === null || options === void 0 ? void 0 : options.ignoreCase) ? \"i\" : \"\"));\n this.test = options === null || options === void 0 ? void 0 : options.test;\n this.flat = FlattenedDoc.get(text, from, this.chunkEnd(from + 5000 /* Chunk.Base */));\n }\n chunkEnd(pos) {\n return pos >= this.to ? this.to : this.text.lineAt(pos).to;\n }\n next() {\n for (;;) {\n let off = this.re.lastIndex = this.matchPos - this.flat.from;\n let match = this.re.exec(this.flat.text);\n // Skip empty matches directly after the last match\n if (match && !match[0] && match.index == off) {\n this.re.lastIndex = off + 1;\n match = this.re.exec(this.flat.text);\n }\n if (match) {\n let from = this.flat.from + match.index, to = from + match[0].length;\n // If a match goes almost to the end of a noncomplete chunk, try\n // again, since it'll likely be able to match more\n if ((this.flat.to >= this.to || match.index + match[0].length <= this.flat.text.length - 10) &&\n (!this.test || this.test(from, to, match))) {\n this.value = { from, to, match };\n this.matchPos = toCharEnd(this.text, to + (from == to ? 1 : 0));\n return this;\n }\n }\n if (this.flat.to == this.to) {\n this.done = true;\n return this;\n }\n // Grow the flattened doc\n this.flat = FlattenedDoc.get(this.text, this.flat.from, this.chunkEnd(this.flat.from + this.flat.text.length * 2));\n }\n }\n}\nif (typeof Symbol != \"undefined\") {\n RegExpCursor.prototype[Symbol.iterator] = MultilineRegExpCursor.prototype[Symbol.iterator] =\n function () { return this; };\n}\nfunction validRegExp(source) {\n try {\n new RegExp(source, baseFlags);\n return true;\n }\n catch (_a) {\n return false;\n }\n}\nfunction toCharEnd(text, pos) {\n if (pos >= text.length)\n return pos;\n let line = text.lineAt(pos), next;\n while (pos < line.to && (next = line.text.charCodeAt(pos - line.from)) >= 0xDC00 && next < 0xE000)\n pos++;\n return pos;\n}\n\nfunction createLineDialog(view) {\n let line = String(view.state.doc.lineAt(view.state.selection.main.head).number);\n let input = elt(\"input\", { class: \"cm-textfield\", name: \"line\", value: line });\n let dom = elt(\"form\", {\n class: \"cm-gotoLine\",\n onkeydown: (event) => {\n if (event.keyCode == 27) { // Escape\n event.preventDefault();\n view.dispatch({ effects: dialogEffect.of(false) });\n view.focus();\n }\n else if (event.keyCode == 13) { // Enter\n event.preventDefault();\n go();\n }\n },\n onsubmit: (event) => {\n event.preventDefault();\n go();\n }\n }, elt(\"label\", view.state.phrase(\"Go to line\"), \": \", input), \" \", elt(\"button\", { class: \"cm-button\", type: \"submit\" }, view.state.phrase(\"go\")), elt(\"button\", {\n name: \"close\",\n onclick: () => {\n view.dispatch({ effects: dialogEffect.of(false) });\n view.focus();\n },\n \"aria-label\": view.state.phrase(\"close\"),\n type: \"button\"\n }, [\"×\"]));\n function go() {\n let match = /^([+-])?(\\d+)?(:\\d+)?(%)?$/.exec(input.value);\n if (!match)\n return;\n let { state } = view, startLine = state.doc.lineAt(state.selection.main.head);\n let [, sign, ln, cl, percent] = match;\n let col = cl ? +cl.slice(1) : 0;\n let line = ln ? +ln : startLine.number;\n if (ln && percent) {\n let pc = line / 100;\n if (sign)\n pc = pc * (sign == \"-\" ? -1 : 1) + (startLine.number / state.doc.lines);\n line = Math.round(state.doc.lines * pc);\n }\n else if (ln && sign) {\n line = line * (sign == \"-\" ? -1 : 1) + startLine.number;\n }\n let docLine = state.doc.line(Math.max(1, Math.min(state.doc.lines, line)));\n let selection = EditorSelection.cursor(docLine.from + Math.max(0, Math.min(col, docLine.length)));\n view.dispatch({\n effects: [dialogEffect.of(false), EditorView.scrollIntoView(selection.from, { y: 'center' })],\n selection,\n });\n view.focus();\n }\n return { dom };\n}\nconst dialogEffect = /*@__PURE__*/StateEffect.define();\nconst dialogField = /*@__PURE__*/StateField.define({\n create() { return true; },\n update(value, tr) {\n for (let e of tr.effects)\n if (e.is(dialogEffect))\n value = e.value;\n return value;\n },\n provide: f => showPanel.from(f, val => val ? createLineDialog : null)\n});\n/**\nCommand that shows a dialog asking the user for a line number, and\nwhen a valid position is provided, moves the cursor to that line.\n\nSupports line numbers, relative line offsets prefixed with `+` or\n`-`, document percentages suffixed with `%`, and an optional\ncolumn position by adding `:` and a second number after the line\nnumber.\n*/\nconst gotoLine = view => {\n let panel = getPanel(view, createLineDialog);\n if (!panel) {\n let effects = [dialogEffect.of(true)];\n if (view.state.field(dialogField, false) == null)\n effects.push(StateEffect.appendConfig.of([dialogField, baseTheme$1]));\n view.dispatch({ effects });\n panel = getPanel(view, createLineDialog);\n }\n if (panel)\n panel.dom.querySelector(\"input\").select();\n return true;\n};\nconst baseTheme$1 = /*@__PURE__*/EditorView.baseTheme({\n \".cm-panel.cm-gotoLine\": {\n padding: \"2px 6px 4px\",\n position: \"relative\",\n \"& label\": { fontSize: \"80%\" },\n \"& [name=close]\": {\n position: \"absolute\",\n top: \"0\", bottom: \"0\",\n right: \"4px\",\n backgroundColor: \"inherit\",\n border: \"none\",\n font: \"inherit\",\n padding: \"0\"\n }\n }\n});\n\nconst defaultHighlightOptions = {\n highlightWordAroundCursor: false,\n minSelectionLength: 1,\n maxMatches: 100,\n wholeWords: false\n};\nconst highlightConfig = /*@__PURE__*/Facet.define({\n combine(options) {\n return combineConfig(options, defaultHighlightOptions, {\n highlightWordAroundCursor: (a, b) => a || b,\n minSelectionLength: Math.min,\n maxMatches: Math.min\n });\n }\n});\n/**\nThis extension highlights text that matches the selection. It uses\nthe `\"cm-selectionMatch\"` class for the highlighting. When\n`highlightWordAroundCursor` is enabled, the word at the cursor\nitself will be highlighted with `\"cm-selectionMatch-main\"`.\n*/\nfunction highlightSelectionMatches(options) {\n let ext = [defaultTheme, matchHighlighter];\n if (options)\n ext.push(highlightConfig.of(options));\n return ext;\n}\nconst matchDeco = /*@__PURE__*/Decoration.mark({ class: \"cm-selectionMatch\" });\nconst mainMatchDeco = /*@__PURE__*/Decoration.mark({ class: \"cm-selectionMatch cm-selectionMatch-main\" });\n// Whether the characters directly outside the given positions are non-word characters\nfunction insideWordBoundaries(check, state, from, to) {\n return (from == 0 || check(state.sliceDoc(from - 1, from)) != CharCategory.Word) &&\n (to == state.doc.length || check(state.sliceDoc(to, to + 1)) != CharCategory.Word);\n}\n// Whether the characters directly at the given positions are word characters\nfunction insideWord(check, state, from, to) {\n return check(state.sliceDoc(from, from + 1)) == CharCategory.Word\n && check(state.sliceDoc(to - 1, to)) == CharCategory.Word;\n}\nconst matchHighlighter = /*@__PURE__*/ViewPlugin.fromClass(class {\n constructor(view) {\n this.decorations = this.getDeco(view);\n }\n update(update) {\n if (update.selectionSet || update.docChanged || update.viewportChanged)\n this.decorations = this.getDeco(update.view);\n }\n getDeco(view) {\n let conf = view.state.facet(highlightConfig);\n let { state } = view, sel = state.selection;\n if (sel.ranges.length > 1)\n return Decoration.none;\n let range = sel.main, query, check = null;\n if (range.empty) {\n if (!conf.highlightWordAroundCursor)\n return Decoration.none;\n let word = state.wordAt(range.head);\n if (!word)\n return Decoration.none;\n check = state.charCategorizer(range.head);\n query = state.sliceDoc(word.from, word.to);\n }\n else {\n let len = range.to - range.from;\n if (len < conf.minSelectionLength || len > 200)\n return Decoration.none;\n if (conf.wholeWords) {\n query = state.sliceDoc(range.from, range.to); // TODO: allow and include leading/trailing space?\n check = state.charCategorizer(range.head);\n if (!(insideWordBoundaries(check, state, range.from, range.to) &&\n insideWord(check, state, range.from, range.to)))\n return Decoration.none;\n }\n else {\n query = state.sliceDoc(range.from, range.to);\n if (!query)\n return Decoration.none;\n }\n }\n let deco = [];\n for (let part of view.visibleRanges) {\n let cursor = new SearchCursor(state.doc, query, part.from, part.to);\n while (!cursor.next().done) {\n let { from, to } = cursor.value;\n if (!check || insideWordBoundaries(check, state, from, to)) {\n if (range.empty && from <= range.from && to >= range.to)\n deco.push(mainMatchDeco.range(from, to));\n else if (from >= range.to || to <= range.from)\n deco.push(matchDeco.range(from, to));\n if (deco.length > conf.maxMatches)\n return Decoration.none;\n }\n }\n }\n return Decoration.set(deco);\n }\n}, {\n decorations: v => v.decorations\n});\nconst defaultTheme = /*@__PURE__*/EditorView.baseTheme({\n \".cm-selectionMatch\": { backgroundColor: \"#99ff7780\" },\n \".cm-searchMatch .cm-selectionMatch\": { backgroundColor: \"transparent\" }\n});\n// Select the words around the cursors.\nconst selectWord = ({ state, dispatch }) => {\n let { selection } = state;\n let newSel = EditorSelection.create(selection.ranges.map(range => state.wordAt(range.head) || EditorSelection.cursor(range.head)), selection.mainIndex);\n if (newSel.eq(selection))\n return false;\n dispatch(state.update({ selection: newSel }));\n return true;\n};\n// Find next occurrence of query relative to last cursor. Wrap around\n// the document if there are no more matches.\nfunction findNextOccurrence(state, query) {\n let { main, ranges } = state.selection;\n let word = state.wordAt(main.head), fullWord = word && word.from == main.from && word.to == main.to;\n for (let cycled = false, cursor = new SearchCursor(state.doc, query, ranges[ranges.length - 1].to);;) {\n cursor.next();\n if (cursor.done) {\n if (cycled)\n return null;\n cursor = new SearchCursor(state.doc, query, 0, Math.max(0, ranges[ranges.length - 1].from - 1));\n cycled = true;\n }\n else {\n if (cycled && ranges.some(r => r.from == cursor.value.from))\n continue;\n if (fullWord) {\n let word = state.wordAt(cursor.value.from);\n if (!word || word.from != cursor.value.from || word.to != cursor.value.to)\n continue;\n }\n return cursor.value;\n }\n }\n}\n/**\nSelect next occurrence of the current selection. Expand selection\nto the surrounding word when the selection is empty.\n*/\nconst selectNextOccurrence = ({ state, dispatch }) => {\n let { ranges } = state.selection;\n if (ranges.some(sel => sel.from === sel.to))\n return selectWord({ state, dispatch });\n let searchedText = state.sliceDoc(ranges[0].from, ranges[0].to);\n if (state.selection.ranges.some(r => state.sliceDoc(r.from, r.to) != searchedText))\n return false;\n let range = findNextOccurrence(state, searchedText);\n if (!range)\n return false;\n dispatch(state.update({\n selection: state.selection.addRange(EditorSelection.range(range.from, range.to), false),\n effects: EditorView.scrollIntoView(range.to)\n }));\n return true;\n};\n\nconst searchConfigFacet = /*@__PURE__*/Facet.define({\n combine(configs) {\n return combineConfig(configs, {\n top: false,\n caseSensitive: false,\n literal: false,\n regexp: false,\n wholeWord: false,\n createPanel: view => new SearchPanel(view),\n scrollToMatch: range => EditorView.scrollIntoView(range)\n });\n }\n});\n/**\nAdd search state to the editor configuration, and optionally\nconfigure the search extension.\n([`openSearchPanel`](https://codemirror.net/6/docs/ref/#search.openSearchPanel) will automatically\nenable this if it isn't already on).\n*/\nfunction search(config) {\n return config ? [searchConfigFacet.of(config), searchExtensions] : searchExtensions;\n}\n/**\nA search query. Part of the editor's search state.\n*/\nclass SearchQuery {\n /**\n Create a query object.\n */\n constructor(config) {\n this.search = config.search;\n this.caseSensitive = !!config.caseSensitive;\n this.literal = !!config.literal;\n this.regexp = !!config.regexp;\n this.replace = config.replace || \"\";\n this.valid = !!this.search && (!this.regexp || validRegExp(this.search));\n this.unquoted = this.unquote(this.search);\n this.wholeWord = !!config.wholeWord;\n }\n /**\n @internal\n */\n unquote(text) {\n return this.literal ? text :\n text.replace(/\\\\([nrt\\\\])/g, (_, ch) => ch == \"n\" ? \"\\n\" : ch == \"r\" ? \"\\r\" : ch == \"t\" ? \"\\t\" : \"\\\\\");\n }\n /**\n Compare this query to another query.\n */\n eq(other) {\n return this.search == other.search && this.replace == other.replace &&\n this.caseSensitive == other.caseSensitive && this.regexp == other.regexp &&\n this.wholeWord == other.wholeWord;\n }\n /**\n @internal\n */\n create() {\n return this.regexp ? new RegExpQuery(this) : new StringQuery(this);\n }\n /**\n Get a search cursor for this query, searching through the given\n range in the given state.\n */\n getCursor(state, from = 0, to) {\n let st = state.doc ? state : EditorState.create({ doc: state });\n if (to == null)\n to = st.doc.length;\n return this.regexp ? regexpCursor(this, st, from, to) : stringCursor(this, st, from, to);\n }\n}\nclass QueryType {\n constructor(spec) {\n this.spec = spec;\n }\n}\nfunction stringCursor(spec, state, from, to) {\n return new SearchCursor(state.doc, spec.unquoted, from, to, spec.caseSensitive ? undefined : x => x.toLowerCase(), spec.wholeWord ? stringWordTest(state.doc, state.charCategorizer(state.selection.main.head)) : undefined);\n}\nfunction stringWordTest(doc, categorizer) {\n return (from, to, buf, bufPos) => {\n if (bufPos > from || bufPos + buf.length < to) {\n bufPos = Math.max(0, from - 2);\n buf = doc.sliceString(bufPos, Math.min(doc.length, to + 2));\n }\n return (categorizer(charBefore(buf, from - bufPos)) != CharCategory.Word ||\n categorizer(charAfter(buf, from - bufPos)) != CharCategory.Word) &&\n (categorizer(charAfter(buf, to - bufPos)) != CharCategory.Word ||\n categorizer(charBefore(buf, to - bufPos)) != CharCategory.Word);\n };\n}\nclass StringQuery extends QueryType {\n constructor(spec) {\n super(spec);\n }\n nextMatch(state, curFrom, curTo) {\n let cursor = stringCursor(this.spec, state, curTo, state.doc.length).nextOverlapping();\n if (cursor.done) {\n let end = Math.min(state.doc.length, curFrom + this.spec.unquoted.length);\n cursor = stringCursor(this.spec, state, 0, end).nextOverlapping();\n }\n return cursor.done || cursor.value.from == curFrom && cursor.value.to == curTo ? null : cursor.value;\n }\n // Searching in reverse is, rather than implementing an inverted search\n // cursor, done by scanning chunk after chunk forward.\n prevMatchInRange(state, from, to) {\n for (let pos = to;;) {\n let start = Math.max(from, pos - 10000 /* FindPrev.ChunkSize */ - this.spec.unquoted.length);\n let cursor = stringCursor(this.spec, state, start, pos), range = null;\n while (!cursor.nextOverlapping().done)\n range = cursor.value;\n if (range)\n return range;\n if (start == from)\n return null;\n pos -= 10000 /* FindPrev.ChunkSize */;\n }\n }\n prevMatch(state, curFrom, curTo) {\n let found = this.prevMatchInRange(state, 0, curFrom);\n if (!found)\n found = this.prevMatchInRange(state, Math.max(0, curTo - this.spec.unquoted.length), state.doc.length);\n return found && (found.from != curFrom || found.to != curTo) ? found : null;\n }\n getReplacement(_result) { return this.spec.unquote(this.spec.replace); }\n matchAll(state, limit) {\n let cursor = stringCursor(this.spec, state, 0, state.doc.length), ranges = [];\n while (!cursor.next().done) {\n if (ranges.length >= limit)\n return null;\n ranges.push(cursor.value);\n }\n return ranges;\n }\n highlight(state, from, to, add) {\n let cursor = stringCursor(this.spec, state, Math.max(0, from - this.spec.unquoted.length), Math.min(to + this.spec.unquoted.length, state.doc.length));\n while (!cursor.next().done)\n add(cursor.value.from, cursor.value.to);\n }\n}\nfunction regexpCursor(spec, state, from, to) {\n return new RegExpCursor(state.doc, spec.search, {\n ignoreCase: !spec.caseSensitive,\n test: spec.wholeWord ? regexpWordTest(state.charCategorizer(state.selection.main.head)) : undefined\n }, from, to);\n}\nfunction charBefore(str, index) {\n return str.slice(findClusterBreak(str, index, false), index);\n}\nfunction charAfter(str, index) {\n return str.slice(index, findClusterBreak(str, index));\n}\nfunction regexpWordTest(categorizer) {\n return (_from, _to, match) => !match[0].length ||\n (categorizer(charBefore(match.input, match.index)) != CharCategory.Word ||\n categorizer(charAfter(match.input, match.index)) != CharCategory.Word) &&\n (categorizer(charAfter(match.input, match.index + match[0].length)) != CharCategory.Word ||\n categorizer(charBefore(match.input, match.index + match[0].length)) != CharCategory.Word);\n}\nclass RegExpQuery extends QueryType {\n nextMatch(state, curFrom, curTo) {\n let cursor = regexpCursor(this.spec, state, curTo, state.doc.length).next();\n if (cursor.done)\n cursor = regexpCursor(this.spec, state, 0, curFrom).next();\n return cursor.done ? null : cursor.value;\n }\n prevMatchInRange(state, from, to) {\n for (let size = 1;; size++) {\n let start = Math.max(from, to - size * 10000 /* FindPrev.ChunkSize */);\n let cursor = regexpCursor(this.spec, state, start, to), range = null;\n while (!cursor.next().done)\n range = cursor.value;\n if (range && (start == from || range.from > start + 10))\n return range;\n if (start == from)\n return null;\n }\n }\n prevMatch(state, curFrom, curTo) {\n return this.prevMatchInRange(state, 0, curFrom) ||\n this.prevMatchInRange(state, curTo, state.doc.length);\n }\n getReplacement(result) {\n return this.spec.unquote(this.spec.replace).replace(/\\$([$&]|\\d+)/g, (m, i) => {\n if (i == \"&\")\n return result.match[0];\n if (i == \"$\")\n return \"$\";\n for (let l = i.length; l > 0; l--) {\n let n = +i.slice(0, l);\n if (n > 0 && n < result.match.length)\n return result.match[n] + i.slice(l);\n }\n return m;\n });\n }\n matchAll(state, limit) {\n let cursor = regexpCursor(this.spec, state, 0, state.doc.length), ranges = [];\n while (!cursor.next().done) {\n if (ranges.length >= limit)\n return null;\n ranges.push(cursor.value);\n }\n return ranges;\n }\n highlight(state, from, to, add) {\n let cursor = regexpCursor(this.spec, state, Math.max(0, from - 250 /* RegExp.HighlightMargin */), Math.min(to + 250 /* RegExp.HighlightMargin */, state.doc.length));\n while (!cursor.next().done)\n add(cursor.value.from, cursor.value.to);\n }\n}\n/**\nA state effect that updates the current search query. Note that\nthis only has an effect if the search state has been initialized\n(by including [`search`](https://codemirror.net/6/docs/ref/#search.search) in your configuration or\nby running [`openSearchPanel`](https://codemirror.net/6/docs/ref/#search.openSearchPanel) at least\nonce).\n*/\nconst setSearchQuery = /*@__PURE__*/StateEffect.define();\nconst togglePanel = /*@__PURE__*/StateEffect.define();\nconst searchState = /*@__PURE__*/StateField.define({\n create(state) {\n return new SearchState(defaultQuery(state).create(), null);\n },\n update(value, tr) {\n for (let effect of tr.effects) {\n if (effect.is(setSearchQuery))\n value = new SearchState(effect.value.create(), value.panel);\n else if (effect.is(togglePanel))\n value = new SearchState(value.query, effect.value ? createSearchPanel : null);\n }\n return value;\n },\n provide: f => showPanel.from(f, val => val.panel)\n});\n/**\nGet the current search query from an editor state.\n*/\nfunction getSearchQuery(state) {\n let curState = state.field(searchState, false);\n return curState ? curState.query.spec : defaultQuery(state);\n}\n/**\nQuery whether the search panel is open in the given editor state.\n*/\nfunction searchPanelOpen(state) {\n var _a;\n return ((_a = state.field(searchState, false)) === null || _a === void 0 ? void 0 : _a.panel) != null;\n}\nclass SearchState {\n constructor(query, panel) {\n this.query = query;\n this.panel = panel;\n }\n}\nconst matchMark = /*@__PURE__*/Decoration.mark({ class: \"cm-searchMatch\" }), selectedMatchMark = /*@__PURE__*/Decoration.mark({ class: \"cm-searchMatch cm-searchMatch-selected\" });\nconst searchHighlighter = /*@__PURE__*/ViewPlugin.fromClass(class {\n constructor(view) {\n this.view = view;\n this.decorations = this.highlight(view.state.field(searchState));\n }\n update(update) {\n let state = update.state.field(searchState);\n if (state != update.startState.field(searchState) || update.docChanged || update.selectionSet || update.viewportChanged)\n this.decorations = this.highlight(state);\n }\n highlight({ query, panel }) {\n if (!panel || !query.spec.valid)\n return Decoration.none;\n let { view } = this;\n let builder = new RangeSetBuilder();\n for (let i = 0, ranges = view.visibleRanges, l = ranges.length; i < l; i++) {\n let { from, to } = ranges[i];\n while (i < l - 1 && to > ranges[i + 1].from - 2 * 250 /* RegExp.HighlightMargin */)\n to = ranges[++i].to;\n query.highlight(view.state, from, to, (from, to) => {\n let selected = view.state.selection.ranges.some(r => r.from == from && r.to == to);\n builder.add(from, to, selected ? selectedMatchMark : matchMark);\n });\n }\n return builder.finish();\n }\n}, {\n decorations: v => v.decorations\n});\nfunction searchCommand(f) {\n return view => {\n let state = view.state.field(searchState, false);\n return state && state.query.spec.valid ? f(view, state) : openSearchPanel(view);\n };\n}\n/**\nOpen the search panel if it isn't already open, and move the\nselection to the first match after the current main selection.\nWill wrap around to the start of the document when it reaches the\nend.\n*/\nconst findNext = /*@__PURE__*/searchCommand((view, { query }) => {\n let { to } = view.state.selection.main;\n let next = query.nextMatch(view.state, to, to);\n if (!next)\n return false;\n let selection = EditorSelection.single(next.from, next.to);\n let config = view.state.facet(searchConfigFacet);\n view.dispatch({\n selection,\n effects: [announceMatch(view, next), config.scrollToMatch(selection.main, view)],\n userEvent: \"select.search\"\n });\n selectSearchInput(view);\n return true;\n});\n/**\nMove the selection to the previous instance of the search query,\nbefore the current main selection. Will wrap past the start\nof the document to start searching at the end again.\n*/\nconst findPrevious = /*@__PURE__*/searchCommand((view, { query }) => {\n let { state } = view, { from } = state.selection.main;\n let prev = query.prevMatch(state, from, from);\n if (!prev)\n return false;\n let selection = EditorSelection.single(prev.from, prev.to);\n let config = view.state.facet(searchConfigFacet);\n view.dispatch({\n selection,\n effects: [announceMatch(view, prev), config.scrollToMatch(selection.main, view)],\n userEvent: \"select.search\"\n });\n selectSearchInput(view);\n return true;\n});\n/**\nSelect all instances of the search query.\n*/\nconst selectMatches = /*@__PURE__*/searchCommand((view, { query }) => {\n let ranges = query.matchAll(view.state, 1000);\n if (!ranges || !ranges.length)\n return false;\n view.dispatch({\n selection: EditorSelection.create(ranges.map(r => EditorSelection.range(r.from, r.to))),\n userEvent: \"select.search.matches\"\n });\n return true;\n});\n/**\nSelect all instances of the currently selected text.\n*/\nconst selectSelectionMatches = ({ state, dispatch }) => {\n let sel = state.selection;\n if (sel.ranges.length > 1 || sel.main.empty)\n return false;\n let { from, to } = sel.main;\n let ranges = [], main = 0;\n for (let cur = new SearchCursor(state.doc, state.sliceDoc(from, to)); !cur.next().done;) {\n if (ranges.length > 1000)\n return false;\n if (cur.value.from == from)\n main = ranges.length;\n ranges.push(EditorSelection.range(cur.value.from, cur.value.to));\n }\n dispatch(state.update({\n selection: EditorSelection.create(ranges, main),\n userEvent: \"select.search.matches\"\n }));\n return true;\n};\n/**\nReplace the current match of the search query.\n*/\nconst replaceNext = /*@__PURE__*/searchCommand((view, { query }) => {\n let { state } = view, { from, to } = state.selection.main;\n if (state.readOnly)\n return false;\n let match = query.nextMatch(state, from, from);\n if (!match)\n return false;\n let next = match;\n let changes = [], selection, replacement;\n let effects = [];\n if (next.from == from && next.to == to) {\n replacement = state.toText(query.getReplacement(next));\n changes.push({ from: next.from, to: next.to, insert: replacement });\n next = query.nextMatch(state, next.from, next.to);\n effects.push(EditorView.announce.of(state.phrase(\"replaced match on line $\", state.doc.lineAt(from).number) + \".\"));\n }\n if (next) {\n let off = changes.length == 0 || changes[0].from >= match.to ? 0 : match.to - match.from - replacement.length;\n selection = EditorSelection.single(next.from - off, next.to - off);\n effects.push(announceMatch(view, next));\n effects.push(state.facet(searchConfigFacet).scrollToMatch(selection.main, view));\n }\n view.dispatch({\n changes, selection, effects,\n userEvent: \"input.replace\"\n });\n return true;\n});\n/**\nReplace all instances of the search query with the given\nreplacement.\n*/\nconst replaceAll = /*@__PURE__*/searchCommand((view, { query }) => {\n if (view.state.readOnly)\n return false;\n let changes = query.matchAll(view.state, 1e9).map(match => {\n let { from, to } = match;\n return { from, to, insert: query.getReplacement(match) };\n });\n if (!changes.length)\n return false;\n let announceText = view.state.phrase(\"replaced $ matches\", changes.length) + \".\";\n view.dispatch({\n changes,\n effects: EditorView.announce.of(announceText),\n userEvent: \"input.replace.all\"\n });\n return true;\n});\nfunction createSearchPanel(view) {\n return view.state.facet(searchConfigFacet).createPanel(view);\n}\nfunction defaultQuery(state, fallback) {\n var _a, _b, _c, _d, _e;\n let sel = state.selection.main;\n let selText = sel.empty || sel.to > sel.from + 100 ? \"\" : state.sliceDoc(sel.from, sel.to);\n if (fallback && !selText)\n return fallback;\n let config = state.facet(searchConfigFacet);\n return new SearchQuery({\n search: ((_a = fallback === null || fallback === void 0 ? void 0 : fallback.literal) !== null && _a !== void 0 ? _a : config.literal) ? selText : selText.replace(/\\n/g, \"\\\\n\"),\n caseSensitive: (_b = fallback === null || fallback === void 0 ? void 0 : fallback.caseSensitive) !== null && _b !== void 0 ? _b : config.caseSensitive,\n literal: (_c = fallback === null || fallback === void 0 ? void 0 : fallback.literal) !== null && _c !== void 0 ? _c : config.literal,\n regexp: (_d = fallback === null || fallback === void 0 ? void 0 : fallback.regexp) !== null && _d !== void 0 ? _d : config.regexp,\n wholeWord: (_e = fallback === null || fallback === void 0 ? void 0 : fallback.wholeWord) !== null && _e !== void 0 ? _e : config.wholeWord\n });\n}\nfunction getSearchInput(view) {\n let panel = getPanel(view, createSearchPanel);\n return panel && panel.dom.querySelector(\"[main-field]\");\n}\nfunction selectSearchInput(view) {\n let input = getSearchInput(view);\n if (input && input == view.root.activeElement)\n input.select();\n}\n/**\nMake sure the search panel is open and focused.\n*/\nconst openSearchPanel = view => {\n let state = view.state.field(searchState, false);\n if (state && state.panel) {\n let searchInput = getSearchInput(view);\n if (searchInput && searchInput != view.root.activeElement) {\n let query = defaultQuery(view.state, state.query.spec);\n if (query.valid)\n view.dispatch({ effects: setSearchQuery.of(query) });\n searchInput.focus();\n searchInput.select();\n }\n }\n else {\n view.dispatch({ effects: [\n togglePanel.of(true),\n state ? setSearchQuery.of(defaultQuery(view.state, state.query.spec)) : StateEffect.appendConfig.of(searchExtensions)\n ] });\n }\n return true;\n};\n/**\nClose the search panel.\n*/\nconst closeSearchPanel = view => {\n let state = view.state.field(searchState, false);\n if (!state || !state.panel)\n return false;\n let panel = getPanel(view, createSearchPanel);\n if (panel && panel.dom.contains(view.root.activeElement))\n view.focus();\n view.dispatch({ effects: togglePanel.of(false) });\n return true;\n};\n/**\nDefault search-related key bindings.\n\n - Mod-f: [`openSearchPanel`](https://codemirror.net/6/docs/ref/#search.openSearchPanel)\n - F3, Mod-g: [`findNext`](https://codemirror.net/6/docs/ref/#search.findNext)\n - Shift-F3, Shift-Mod-g: [`findPrevious`](https://codemirror.net/6/docs/ref/#search.findPrevious)\n - Mod-Alt-g: [`gotoLine`](https://codemirror.net/6/docs/ref/#search.gotoLine)\n - Mod-d: [`selectNextOccurrence`](https://codemirror.net/6/docs/ref/#search.selectNextOccurrence)\n*/\nconst searchKeymap = [\n { key: \"Mod-f\", run: openSearchPanel, scope: \"editor search-panel\" },\n { key: \"F3\", run: findNext, shift: findPrevious, scope: \"editor search-panel\", preventDefault: true },\n { key: \"Mod-g\", run: findNext, shift: findPrevious, scope: \"editor search-panel\", preventDefault: true },\n { key: \"Escape\", run: closeSearchPanel, scope: \"editor search-panel\" },\n { key: \"Mod-Shift-l\", run: selectSelectionMatches },\n { key: \"Mod-Alt-g\", run: gotoLine },\n { key: \"Mod-d\", run: selectNextOccurrence, preventDefault: true },\n];\nclass SearchPanel {\n constructor(view) {\n this.view = view;\n let query = this.query = view.state.field(searchState).query.spec;\n this.commit = this.commit.bind(this);\n this.searchField = elt(\"input\", {\n value: query.search,\n placeholder: phrase(view, \"Find\"),\n \"aria-label\": phrase(view, \"Find\"),\n class: \"cm-textfield\",\n name: \"search\",\n form: \"\",\n \"main-field\": \"true\",\n onchange: this.commit,\n onkeyup: this.commit\n });\n this.replaceField = elt(\"input\", {\n value: query.replace,\n placeholder: phrase(view, \"Replace\"),\n \"aria-label\": phrase(view, \"Replace\"),\n class: \"cm-textfield\",\n name: \"replace\",\n form: \"\",\n onchange: this.commit,\n onkeyup: this.commit\n });\n this.caseField = elt(\"input\", {\n type: \"checkbox\",\n name: \"case\",\n form: \"\",\n checked: query.caseSensitive,\n onchange: this.commit\n });\n this.reField = elt(\"input\", {\n type: \"checkbox\",\n name: \"re\",\n form: \"\",\n checked: query.regexp,\n onchange: this.commit\n });\n this.wordField = elt(\"input\", {\n type: \"checkbox\",\n name: \"word\",\n form: \"\",\n checked: query.wholeWord,\n onchange: this.commit\n });\n function button(name, onclick, content) {\n return elt(\"button\", { class: \"cm-button\", name, onclick, type: \"button\" }, content);\n }\n this.dom = elt(\"div\", { onkeydown: (e) => this.keydown(e), class: \"cm-search\" }, [\n this.searchField,\n button(\"next\", () => findNext(view), [phrase(view, \"next\")]),\n button(\"prev\", () => findPrevious(view), [phrase(view, \"previous\")]),\n button(\"select\", () => selectMatches(view), [phrase(view, \"all\")]),\n elt(\"label\", null, [this.caseField, phrase(view, \"match case\")]),\n elt(\"label\", null, [this.reField, phrase(view, \"regexp\")]),\n elt(\"label\", null, [this.wordField, phrase(view, \"by word\")]),\n ...view.state.readOnly ? [] : [\n elt(\"br\"),\n this.replaceField,\n button(\"replace\", () => replaceNext(view), [phrase(view, \"replace\")]),\n button(\"replaceAll\", () => replaceAll(view), [phrase(view, \"replace all\")])\n ],\n elt(\"button\", {\n name: \"close\",\n onclick: () => closeSearchPanel(view),\n \"aria-label\": phrase(view, \"close\"),\n type: \"button\"\n }, [\"×\"])\n ]);\n }\n commit() {\n let query = new SearchQuery({\n search: this.searchField.value,\n caseSensitive: this.caseField.checked,\n regexp: this.reField.checked,\n wholeWord: this.wordField.checked,\n replace: this.replaceField.value,\n });\n if (!query.eq(this.query)) {\n this.query = query;\n this.view.dispatch({ effects: setSearchQuery.of(query) });\n }\n }\n keydown(e) {\n if (runScopeHandlers(this.view, e, \"search-panel\")) {\n e.preventDefault();\n }\n else if (e.keyCode == 13 && e.target == this.searchField) {\n e.preventDefault();\n (e.shiftKey ? findPrevious : findNext)(this.view);\n }\n else if (e.keyCode == 13 && e.target == this.replaceField) {\n e.preventDefault();\n replaceNext(this.view);\n }\n }\n update(update) {\n for (let tr of update.transactions)\n for (let effect of tr.effects) {\n if (effect.is(setSearchQuery) && !effect.value.eq(this.query))\n this.setQuery(effect.value);\n }\n }\n setQuery(query) {\n this.query = query;\n this.searchField.value = query.search;\n this.replaceField.value = query.replace;\n this.caseField.checked = query.caseSensitive;\n this.reField.checked = query.regexp;\n this.wordField.checked = query.wholeWord;\n }\n mount() {\n this.searchField.select();\n }\n get pos() { return 80; }\n get top() { return this.view.state.facet(searchConfigFacet).top; }\n}\nfunction phrase(view, phrase) { return view.state.phrase(phrase); }\nconst AnnounceMargin = 30;\nconst Break = /[\\s\\.,:;?!]/;\nfunction announceMatch(view, { from, to }) {\n let line = view.state.doc.lineAt(from), lineEnd = view.state.doc.lineAt(to).to;\n let start = Math.max(line.from, from - AnnounceMargin), end = Math.min(lineEnd, to + AnnounceMargin);\n let text = view.state.sliceDoc(start, end);\n if (start != line.from) {\n for (let i = 0; i < AnnounceMargin; i++)\n if (!Break.test(text[i + 1]) && Break.test(text[i])) {\n text = text.slice(i);\n break;\n }\n }\n if (end != lineEnd) {\n for (let i = text.length - 1; i > text.length - AnnounceMargin; i--)\n if (!Break.test(text[i - 1]) && Break.test(text[i])) {\n text = text.slice(0, i);\n break;\n }\n }\n return EditorView.announce.of(`${view.state.phrase(\"current match\")}. ${text} ${view.state.phrase(\"on line\")} ${line.number}.`);\n}\nconst baseTheme = /*@__PURE__*/EditorView.baseTheme({\n \".cm-panel.cm-search\": {\n padding: \"2px 6px 4px\",\n position: \"relative\",\n \"& [name=close]\": {\n position: \"absolute\",\n top: \"0\",\n right: \"4px\",\n backgroundColor: \"inherit\",\n border: \"none\",\n font: \"inherit\",\n padding: 0,\n margin: 0\n },\n \"& input, & button, & label\": {\n margin: \".2em .6em .2em 0\"\n },\n \"& input[type=checkbox]\": {\n marginRight: \".2em\"\n },\n \"& label\": {\n fontSize: \"80%\",\n whiteSpace: \"pre\"\n }\n },\n \"&light .cm-searchMatch\": { backgroundColor: \"#ffff0054\" },\n \"&dark .cm-searchMatch\": { backgroundColor: \"#00ffff8a\" },\n \"&light .cm-searchMatch-selected\": { backgroundColor: \"#ff6a0054\" },\n \"&dark .cm-searchMatch-selected\": { backgroundColor: \"#ff00ff8a\" }\n});\nconst searchExtensions = [\n searchState,\n /*@__PURE__*/Prec.low(searchHighlighter),\n baseTheme\n];\n\nexport { RegExpCursor, SearchCursor, SearchQuery, closeSearchPanel, findNext, findPrevious, getSearchQuery, gotoLine, highlightSelectionMatches, openSearchPanel, replaceAll, replaceNext, search, searchKeymap, searchPanelOpen, selectMatches, selectNextOccurrence, selectSelectionMatches, setSearchQuery };\n","import { Decoration, showPanel, EditorView, ViewPlugin, gutter, showTooltip, hoverTooltip, getPanel, logException, WidgetType, GutterMarker } from '@codemirror/view';\nimport { StateEffect, StateField, Facet, combineConfig, RangeSet, RangeSetBuilder } from '@codemirror/state';\nimport elt from 'crelt';\n\nclass SelectedDiagnostic {\n constructor(from, to, diagnostic) {\n this.from = from;\n this.to = to;\n this.diagnostic = diagnostic;\n }\n}\nclass LintState {\n constructor(diagnostics, panel, selected) {\n this.diagnostics = diagnostics;\n this.panel = panel;\n this.selected = selected;\n }\n static init(diagnostics, panel, state) {\n // Filter the list of diagnostics for which to create markers\n let markedDiagnostics = diagnostics;\n let diagnosticFilter = state.facet(lintConfig).markerFilter;\n if (diagnosticFilter)\n markedDiagnostics = diagnosticFilter(markedDiagnostics, state);\n let sorted = diagnostics.slice().sort((a, b) => a.from - b.from || a.to - b.to);\n let deco = new RangeSetBuilder(), active = [], pos = 0;\n for (let i = 0;;) {\n let next = i == sorted.length ? null : sorted[i];\n if (!next && !active.length)\n break;\n let from, to;\n if (active.length) {\n from = pos;\n to = active.reduce((p, d) => Math.min(p, d.to), next && next.from > from ? next.from : 1e8);\n }\n else {\n from = next.from;\n to = next.to;\n active.push(next);\n i++;\n }\n while (i < sorted.length) {\n let next = sorted[i];\n if (next.from == from && (next.to > next.from || next.to == from)) {\n active.push(next);\n i++;\n to = Math.min(next.to, to);\n }\n else {\n to = Math.min(next.from, to);\n break;\n }\n }\n let sev = maxSeverity(active);\n if (active.some(d => d.from == d.to || (d.from == d.to - 1 && state.doc.lineAt(d.from).to == d.from))) {\n deco.add(from, from, Decoration.widget({\n widget: new DiagnosticWidget(sev),\n diagnostics: active.slice()\n }));\n }\n else {\n let markClass = active.reduce((c, d) => d.markClass ? c + \" \" + d.markClass : c, \"\");\n deco.add(from, to, Decoration.mark({\n class: \"cm-lintRange cm-lintRange-\" + sev + markClass,\n diagnostics: active.slice(),\n inclusiveEnd: active.some(a => a.to > to)\n }));\n }\n pos = to;\n for (let i = 0; i < active.length; i++)\n if (active[i].to <= pos)\n active.splice(i--, 1);\n }\n let set = deco.finish();\n return new LintState(set, panel, findDiagnostic(set));\n }\n}\nfunction findDiagnostic(diagnostics, diagnostic = null, after = 0) {\n let found = null;\n diagnostics.between(after, 1e9, (from, to, { spec }) => {\n if (diagnostic && spec.diagnostics.indexOf(diagnostic) < 0)\n return;\n if (!found)\n found = new SelectedDiagnostic(from, to, diagnostic || spec.diagnostics[0]);\n else if (spec.diagnostics.indexOf(found.diagnostic) < 0)\n return false;\n else\n found = new SelectedDiagnostic(found.from, to, found.diagnostic);\n });\n return found;\n}\nfunction hideTooltip(tr, tooltip) {\n let from = tooltip.pos, to = tooltip.end || from;\n let result = tr.state.facet(lintConfig).hideOn(tr, from, to);\n if (result != null)\n return result;\n let line = tr.startState.doc.lineAt(tooltip.pos);\n return !!(tr.effects.some(e => e.is(setDiagnosticsEffect)) || tr.changes.touchesRange(line.from, Math.max(line.to, to)));\n}\nfunction maybeEnableLint(state, effects) {\n return state.field(lintState, false) ? effects : effects.concat(StateEffect.appendConfig.of(lintExtensions));\n}\n/**\nReturns a transaction spec which updates the current set of\ndiagnostics, and enables the lint extension if if wasn't already\nactive.\n*/\nfunction setDiagnostics(state, diagnostics) {\n return {\n effects: maybeEnableLint(state, [setDiagnosticsEffect.of(diagnostics)])\n };\n}\n/**\nThe state effect that updates the set of active diagnostics. Can\nbe useful when writing an extension that needs to track these.\n*/\nconst setDiagnosticsEffect = /*@__PURE__*/StateEffect.define();\nconst togglePanel = /*@__PURE__*/StateEffect.define();\nconst movePanelSelection = /*@__PURE__*/StateEffect.define();\nconst lintState = /*@__PURE__*/StateField.define({\n create() {\n return new LintState(Decoration.none, null, null);\n },\n update(value, tr) {\n if (tr.docChanged && value.diagnostics.size) {\n let mapped = value.diagnostics.map(tr.changes), selected = null, panel = value.panel;\n if (value.selected) {\n let selPos = tr.changes.mapPos(value.selected.from, 1);\n selected = findDiagnostic(mapped, value.selected.diagnostic, selPos) || findDiagnostic(mapped, null, selPos);\n }\n if (!mapped.size && panel && tr.state.facet(lintConfig).autoPanel)\n panel = null;\n value = new LintState(mapped, panel, selected);\n }\n for (let effect of tr.effects) {\n if (effect.is(setDiagnosticsEffect)) {\n let panel = !tr.state.facet(lintConfig).autoPanel ? value.panel : effect.value.length ? LintPanel.open : null;\n value = LintState.init(effect.value, panel, tr.state);\n }\n else if (effect.is(togglePanel)) {\n value = new LintState(value.diagnostics, effect.value ? LintPanel.open : null, value.selected);\n }\n else if (effect.is(movePanelSelection)) {\n value = new LintState(value.diagnostics, value.panel, effect.value);\n }\n }\n return value;\n },\n provide: f => [showPanel.from(f, val => val.panel),\n EditorView.decorations.from(f, s => s.diagnostics)]\n});\n/**\nReturns the number of active lint diagnostics in the given state.\n*/\nfunction diagnosticCount(state) {\n let lint = state.field(lintState, false);\n return lint ? lint.diagnostics.size : 0;\n}\nconst activeMark = /*@__PURE__*/Decoration.mark({ class: \"cm-lintRange cm-lintRange-active\" });\nfunction lintTooltip(view, pos, side) {\n let { diagnostics } = view.state.field(lintState);\n let found, start = -1, end = -1;\n diagnostics.between(pos - (side < 0 ? 1 : 0), pos + (side > 0 ? 1 : 0), (from, to, { spec }) => {\n if (pos >= from && pos <= to &&\n (from == to || ((pos > from || side > 0) && (pos < to || side < 0)))) {\n found = spec.diagnostics;\n start = from;\n end = to;\n return false;\n }\n });\n let diagnosticFilter = view.state.facet(lintConfig).tooltipFilter;\n if (found && diagnosticFilter)\n found = diagnosticFilter(found, view.state);\n if (!found)\n return null;\n return {\n pos: start,\n end: end,\n above: view.state.doc.lineAt(start).to < end,\n create() {\n return { dom: diagnosticsTooltip(view, found) };\n }\n };\n}\nfunction diagnosticsTooltip(view, diagnostics) {\n return elt(\"ul\", { class: \"cm-tooltip-lint\" }, diagnostics.map(d => renderDiagnostic(view, d, false)));\n}\n/**\nCommand to open and focus the lint panel.\n*/\nconst openLintPanel = (view) => {\n let field = view.state.field(lintState, false);\n if (!field || !field.panel)\n view.dispatch({ effects: maybeEnableLint(view.state, [togglePanel.of(true)]) });\n let panel = getPanel(view, LintPanel.open);\n if (panel)\n panel.dom.querySelector(\".cm-panel-lint ul\").focus();\n return true;\n};\n/**\nCommand to close the lint panel, when open.\n*/\nconst closeLintPanel = (view) => {\n let field = view.state.field(lintState, false);\n if (!field || !field.panel)\n return false;\n view.dispatch({ effects: togglePanel.of(false) });\n return true;\n};\n/**\nMove the selection to the next diagnostic.\n*/\nconst nextDiagnostic = (view) => {\n let field = view.state.field(lintState, false);\n if (!field)\n return false;\n let sel = view.state.selection.main, next = field.diagnostics.iter(sel.to + 1);\n if (!next.value) {\n next = field.diagnostics.iter(0);\n if (!next.value || next.from == sel.from && next.to == sel.to)\n return false;\n }\n view.dispatch({ selection: { anchor: next.from, head: next.to }, scrollIntoView: true });\n return true;\n};\n/**\nMove the selection to the previous diagnostic.\n*/\nconst previousDiagnostic = (view) => {\n let { state } = view, field = state.field(lintState, false);\n if (!field)\n return false;\n let sel = state.selection.main;\n let prevFrom, prevTo, lastFrom, lastTo;\n field.diagnostics.between(0, state.doc.length, (from, to) => {\n if (to < sel.to && (prevFrom == null || prevFrom < from)) {\n prevFrom = from;\n prevTo = to;\n }\n if (lastFrom == null || from > lastFrom) {\n lastFrom = from;\n lastTo = to;\n }\n });\n if (lastFrom == null || prevFrom == null && lastFrom == sel.from)\n return false;\n view.dispatch({ selection: { anchor: prevFrom !== null && prevFrom !== void 0 ? prevFrom : lastFrom, head: prevTo !== null && prevTo !== void 0 ? prevTo : lastTo }, scrollIntoView: true });\n return true;\n};\n/**\nA set of default key bindings for the lint functionality.\n\n- Ctrl-Shift-m (Cmd-Shift-m on macOS): [`openLintPanel`](https://codemirror.net/6/docs/ref/#lint.openLintPanel)\n- F8: [`nextDiagnostic`](https://codemirror.net/6/docs/ref/#lint.nextDiagnostic)\n*/\nconst lintKeymap = [\n { key: \"Mod-Shift-m\", run: openLintPanel, preventDefault: true },\n { key: \"F8\", run: nextDiagnostic }\n];\nconst lintPlugin = /*@__PURE__*/ViewPlugin.fromClass(class {\n constructor(view) {\n this.view = view;\n this.timeout = -1;\n this.set = true;\n let { delay } = view.state.facet(lintConfig);\n this.lintTime = Date.now() + delay;\n this.run = this.run.bind(this);\n this.timeout = setTimeout(this.run, delay);\n }\n run() {\n clearTimeout(this.timeout);\n let now = Date.now();\n if (now < this.lintTime - 10) {\n this.timeout = setTimeout(this.run, this.lintTime - now);\n }\n else {\n this.set = false;\n let { state } = this.view, { sources } = state.facet(lintConfig);\n if (sources.length)\n batchResults(sources.map(s => Promise.resolve(s(this.view))), annotations => {\n if (this.view.state.doc == state.doc)\n this.view.dispatch(setDiagnostics(this.view.state, annotations.reduce((a, b) => a.concat(b))));\n }, error => { logException(this.view.state, error); });\n }\n }\n update(update) {\n let config = update.state.facet(lintConfig);\n if (update.docChanged || config != update.startState.facet(lintConfig) ||\n config.needsRefresh && config.needsRefresh(update)) {\n this.lintTime = Date.now() + config.delay;\n if (!this.set) {\n this.set = true;\n this.timeout = setTimeout(this.run, config.delay);\n }\n }\n }\n force() {\n if (this.set) {\n this.lintTime = Date.now();\n this.run();\n }\n }\n destroy() {\n clearTimeout(this.timeout);\n }\n});\nfunction batchResults(promises, sink, error) {\n let collected = [], timeout = -1;\n for (let p of promises)\n p.then(value => {\n collected.push(value);\n clearTimeout(timeout);\n if (collected.length == promises.length)\n sink(collected);\n else\n timeout = setTimeout(() => sink(collected), 200);\n }, error);\n}\nconst lintConfig = /*@__PURE__*/Facet.define({\n combine(input) {\n return Object.assign({ sources: input.map(i => i.source).filter(x => x != null) }, combineConfig(input.map(i => i.config), {\n delay: 750,\n markerFilter: null,\n tooltipFilter: null,\n needsRefresh: null,\n hideOn: () => null,\n }, {\n needsRefresh: (a, b) => !a ? b : !b ? a : u => a(u) || b(u)\n }));\n }\n});\n/**\nGiven a diagnostic source, this function returns an extension that\nenables linting with that source. It will be called whenever the\neditor is idle (after its content changed). If `null` is given as\nsource, this only configures the lint extension.\n*/\nfunction linter(source, config = {}) {\n return [\n lintConfig.of({ source, config }),\n lintPlugin,\n lintExtensions\n ];\n}\n/**\nForces any linters [configured](https://codemirror.net/6/docs/ref/#lint.linter) to run when the\neditor is idle to run right away.\n*/\nfunction forceLinting(view) {\n let plugin = view.plugin(lintPlugin);\n if (plugin)\n plugin.force();\n}\nfunction assignKeys(actions) {\n let assigned = [];\n if (actions)\n actions: for (let { name } of actions) {\n for (let i = 0; i < name.length; i++) {\n let ch = name[i];\n if (/[a-zA-Z]/.test(ch) && !assigned.some(c => c.toLowerCase() == ch.toLowerCase())) {\n assigned.push(ch);\n continue actions;\n }\n }\n assigned.push(\"\");\n }\n return assigned;\n}\nfunction renderDiagnostic(view, diagnostic, inPanel) {\n var _a;\n let keys = inPanel ? assignKeys(diagnostic.actions) : [];\n return elt(\"li\", { class: \"cm-diagnostic cm-diagnostic-\" + diagnostic.severity }, elt(\"span\", { class: \"cm-diagnosticText\" }, diagnostic.renderMessage ? diagnostic.renderMessage(view) : diagnostic.message), (_a = diagnostic.actions) === null || _a === void 0 ? void 0 : _a.map((action, i) => {\n let fired = false, click = (e) => {\n e.preventDefault();\n if (fired)\n return;\n fired = true;\n let found = findDiagnostic(view.state.field(lintState).diagnostics, diagnostic);\n if (found)\n action.apply(view, found.from, found.to);\n };\n let { name } = action, keyIndex = keys[i] ? name.indexOf(keys[i]) : -1;\n let nameElt = keyIndex < 0 ? name : [name.slice(0, keyIndex),\n elt(\"u\", name.slice(keyIndex, keyIndex + 1)),\n name.slice(keyIndex + 1)];\n return elt(\"button\", {\n type: \"button\",\n class: \"cm-diagnosticAction\",\n onclick: click,\n onmousedown: click,\n \"aria-label\": ` Action: ${name}${keyIndex < 0 ? \"\" : ` (access key \"${keys[i]})\"`}.`\n }, nameElt);\n }), diagnostic.source && elt(\"div\", { class: \"cm-diagnosticSource\" }, diagnostic.source));\n}\nclass DiagnosticWidget extends WidgetType {\n constructor(sev) {\n super();\n this.sev = sev;\n }\n eq(other) { return other.sev == this.sev; }\n toDOM() {\n return elt(\"span\", { class: \"cm-lintPoint cm-lintPoint-\" + this.sev });\n }\n}\nclass PanelItem {\n constructor(view, diagnostic) {\n this.diagnostic = diagnostic;\n this.id = \"item_\" + Math.floor(Math.random() * 0xffffffff).toString(16);\n this.dom = renderDiagnostic(view, diagnostic, true);\n this.dom.id = this.id;\n this.dom.setAttribute(\"role\", \"option\");\n }\n}\nclass LintPanel {\n constructor(view) {\n this.view = view;\n this.items = [];\n let onkeydown = (event) => {\n if (event.keyCode == 27) { // Escape\n closeLintPanel(this.view);\n this.view.focus();\n }\n else if (event.keyCode == 38 || event.keyCode == 33) { // ArrowUp, PageUp\n this.moveSelection((this.selectedIndex - 1 + this.items.length) % this.items.length);\n }\n else if (event.keyCode == 40 || event.keyCode == 34) { // ArrowDown, PageDown\n this.moveSelection((this.selectedIndex + 1) % this.items.length);\n }\n else if (event.keyCode == 36) { // Home\n this.moveSelection(0);\n }\n else if (event.keyCode == 35) { // End\n this.moveSelection(this.items.length - 1);\n }\n else if (event.keyCode == 13) { // Enter\n this.view.focus();\n }\n else if (event.keyCode >= 65 && event.keyCode <= 90 && this.selectedIndex >= 0) { // A-Z\n let { diagnostic } = this.items[this.selectedIndex], keys = assignKeys(diagnostic.actions);\n for (let i = 0; i < keys.length; i++)\n if (keys[i].toUpperCase().charCodeAt(0) == event.keyCode) {\n let found = findDiagnostic(this.view.state.field(lintState).diagnostics, diagnostic);\n if (found)\n diagnostic.actions[i].apply(view, found.from, found.to);\n }\n }\n else {\n return;\n }\n event.preventDefault();\n };\n let onclick = (event) => {\n for (let i = 0; i < this.items.length; i++) {\n if (this.items[i].dom.contains(event.target))\n this.moveSelection(i);\n }\n };\n this.list = elt(\"ul\", {\n tabIndex: 0,\n role: \"listbox\",\n \"aria-label\": this.view.state.phrase(\"Diagnostics\"),\n onkeydown,\n onclick\n });\n this.dom = elt(\"div\", { class: \"cm-panel-lint\" }, this.list, elt(\"button\", {\n type: \"button\",\n name: \"close\",\n \"aria-label\": this.view.state.phrase(\"close\"),\n onclick: () => closeLintPanel(this.view)\n }, \"×\"));\n this.update();\n }\n get selectedIndex() {\n let selected = this.view.state.field(lintState).selected;\n if (!selected)\n return -1;\n for (let i = 0; i < this.items.length; i++)\n if (this.items[i].diagnostic == selected.diagnostic)\n return i;\n return -1;\n }\n update() {\n let { diagnostics, selected } = this.view.state.field(lintState);\n let i = 0, needsSync = false, newSelectedItem = null;\n let seen = new Set();\n diagnostics.between(0, this.view.state.doc.length, (_start, _end, { spec }) => {\n for (let diagnostic of spec.diagnostics) {\n if (seen.has(diagnostic))\n continue;\n seen.add(diagnostic);\n let found = -1, item;\n for (let j = i; j < this.items.length; j++)\n if (this.items[j].diagnostic == diagnostic) {\n found = j;\n break;\n }\n if (found < 0) {\n item = new PanelItem(this.view, diagnostic);\n this.items.splice(i, 0, item);\n needsSync = true;\n }\n else {\n item = this.items[found];\n if (found > i) {\n this.items.splice(i, found - i);\n needsSync = true;\n }\n }\n if (selected && item.diagnostic == selected.diagnostic) {\n if (!item.dom.hasAttribute(\"aria-selected\")) {\n item.dom.setAttribute(\"aria-selected\", \"true\");\n newSelectedItem = item;\n }\n }\n else if (item.dom.hasAttribute(\"aria-selected\")) {\n item.dom.removeAttribute(\"aria-selected\");\n }\n i++;\n }\n });\n while (i < this.items.length && !(this.items.length == 1 && this.items[0].diagnostic.from < 0)) {\n needsSync = true;\n this.items.pop();\n }\n if (this.items.length == 0) {\n this.items.push(new PanelItem(this.view, {\n from: -1, to: -1,\n severity: \"info\",\n message: this.view.state.phrase(\"No diagnostics\")\n }));\n needsSync = true;\n }\n if (newSelectedItem) {\n this.list.setAttribute(\"aria-activedescendant\", newSelectedItem.id);\n this.view.requestMeasure({\n key: this,\n read: () => ({ sel: newSelectedItem.dom.getBoundingClientRect(), panel: this.list.getBoundingClientRect() }),\n write: ({ sel, panel }) => {\n let scaleY = panel.height / this.list.offsetHeight;\n if (sel.top < panel.top)\n this.list.scrollTop -= (panel.top - sel.top) / scaleY;\n else if (sel.bottom > panel.bottom)\n this.list.scrollTop += (sel.bottom - panel.bottom) / scaleY;\n }\n });\n }\n else if (this.selectedIndex < 0) {\n this.list.removeAttribute(\"aria-activedescendant\");\n }\n if (needsSync)\n this.sync();\n }\n sync() {\n let domPos = this.list.firstChild;\n function rm() {\n let prev = domPos;\n domPos = prev.nextSibling;\n prev.remove();\n }\n for (let item of this.items) {\n if (item.dom.parentNode == this.list) {\n while (domPos != item.dom)\n rm();\n domPos = item.dom.nextSibling;\n }\n else {\n this.list.insertBefore(item.dom, domPos);\n }\n }\n while (domPos)\n rm();\n }\n moveSelection(selectedIndex) {\n if (this.selectedIndex < 0)\n return;\n let field = this.view.state.field(lintState);\n let selection = findDiagnostic(field.diagnostics, this.items[selectedIndex].diagnostic);\n if (!selection)\n return;\n this.view.dispatch({\n selection: { anchor: selection.from, head: selection.to },\n scrollIntoView: true,\n effects: movePanelSelection.of(selection)\n });\n }\n static open(view) { return new LintPanel(view); }\n}\nfunction svg(content, attrs = `viewBox=\"0 0 40 40\"`) {\n return `url('data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" ${attrs}>${encodeURIComponent(content)}</svg>')`;\n}\nfunction underline(color) {\n return svg(`<path d=\"m0 2.5 l2 -1.5 l1 0 l2 1.5 l1 0\" stroke=\"${color}\" fill=\"none\" stroke-width=\".7\"/>`, `width=\"6\" height=\"3\"`);\n}\nconst baseTheme = /*@__PURE__*/EditorView.baseTheme({\n \".cm-diagnostic\": {\n padding: \"3px 6px 3px 8px\",\n marginLeft: \"-1px\",\n display: \"block\",\n whiteSpace: \"pre-wrap\"\n },\n \".cm-diagnostic-error\": { borderLeft: \"5px solid #d11\" },\n \".cm-diagnostic-warning\": { borderLeft: \"5px solid orange\" },\n \".cm-diagnostic-info\": { borderLeft: \"5px solid #999\" },\n \".cm-diagnostic-hint\": { borderLeft: \"5px solid #66d\" },\n \".cm-diagnosticAction\": {\n font: \"inherit\",\n border: \"none\",\n padding: \"2px 4px\",\n backgroundColor: \"#444\",\n color: \"white\",\n borderRadius: \"3px\",\n marginLeft: \"8px\",\n cursor: \"pointer\"\n },\n \".cm-diagnosticSource\": {\n fontSize: \"70%\",\n opacity: .7\n },\n \".cm-lintRange\": {\n backgroundPosition: \"left bottom\",\n backgroundRepeat: \"repeat-x\",\n paddingBottom: \"0.7px\",\n },\n \".cm-lintRange-error\": { backgroundImage: /*@__PURE__*/underline(\"#d11\") },\n \".cm-lintRange-warning\": { backgroundImage: /*@__PURE__*/underline(\"orange\") },\n \".cm-lintRange-info\": { backgroundImage: /*@__PURE__*/underline(\"#999\") },\n \".cm-lintRange-hint\": { backgroundImage: /*@__PURE__*/underline(\"#66d\") },\n \".cm-lintRange-active\": { backgroundColor: \"#ffdd9980\" },\n \".cm-tooltip-lint\": {\n padding: 0,\n margin: 0\n },\n \".cm-lintPoint\": {\n position: \"relative\",\n \"&:after\": {\n content: '\"\"',\n position: \"absolute\",\n bottom: 0,\n left: \"-2px\",\n borderLeft: \"3px solid transparent\",\n borderRight: \"3px solid transparent\",\n borderBottom: \"4px solid #d11\"\n }\n },\n \".cm-lintPoint-warning\": {\n \"&:after\": { borderBottomColor: \"orange\" }\n },\n \".cm-lintPoint-info\": {\n \"&:after\": { borderBottomColor: \"#999\" }\n },\n \".cm-lintPoint-hint\": {\n \"&:after\": { borderBottomColor: \"#66d\" }\n },\n \".cm-panel.cm-panel-lint\": {\n position: \"relative\",\n \"& ul\": {\n maxHeight: \"100px\",\n overflowY: \"auto\",\n \"& [aria-selected]\": {\n backgroundColor: \"#ddd\",\n \"& u\": { textDecoration: \"underline\" }\n },\n \"&:focus [aria-selected]\": {\n background_fallback: \"#bdf\",\n backgroundColor: \"Highlight\",\n color_fallback: \"white\",\n color: \"HighlightText\"\n },\n \"& u\": { textDecoration: \"none\" },\n padding: 0,\n margin: 0\n },\n \"& [name=close]\": {\n position: \"absolute\",\n top: \"0\",\n right: \"2px\",\n background: \"inherit\",\n border: \"none\",\n font: \"inherit\",\n padding: 0,\n margin: 0\n }\n }\n});\nfunction severityWeight(sev) {\n return sev == \"error\" ? 4 : sev == \"warning\" ? 3 : sev == \"info\" ? 2 : 1;\n}\nfunction maxSeverity(diagnostics) {\n let sev = \"hint\", weight = 1;\n for (let d of diagnostics) {\n let w = severityWeight(d.severity);\n if (w > weight) {\n weight = w;\n sev = d.severity;\n }\n }\n return sev;\n}\nclass LintGutterMarker extends GutterMarker {\n constructor(diagnostics) {\n super();\n this.diagnostics = diagnostics;\n this.severity = maxSeverity(diagnostics);\n }\n toDOM(view) {\n let elt = document.createElement(\"div\");\n elt.className = \"cm-lint-marker cm-lint-marker-\" + this.severity;\n let diagnostics = this.diagnostics;\n let diagnosticsFilter = view.state.facet(lintGutterConfig).tooltipFilter;\n if (diagnosticsFilter)\n diagnostics = diagnosticsFilter(diagnostics, view.state);\n if (diagnostics.length)\n elt.onmouseover = () => gutterMarkerMouseOver(view, elt, diagnostics);\n return elt;\n }\n}\nfunction trackHoverOn(view, marker) {\n let mousemove = (event) => {\n let rect = marker.getBoundingClientRect();\n if (event.clientX > rect.left - 10 /* Hover.Margin */ && event.clientX < rect.right + 10 /* Hover.Margin */ &&\n event.clientY > rect.top - 10 /* Hover.Margin */ && event.clientY < rect.bottom + 10 /* Hover.Margin */)\n return;\n for (let target = event.target; target; target = target.parentNode) {\n if (target.nodeType == 1 && target.classList.contains(\"cm-tooltip-lint\"))\n return;\n }\n window.removeEventListener(\"mousemove\", mousemove);\n if (view.state.field(lintGutterTooltip))\n view.dispatch({ effects: setLintGutterTooltip.of(null) });\n };\n window.addEventListener(\"mousemove\", mousemove);\n}\nfunction gutterMarkerMouseOver(view, marker, diagnostics) {\n function hovered() {\n let line = view.elementAtHeight(marker.getBoundingClientRect().top + 5 - view.documentTop);\n const linePos = view.coordsAtPos(line.from);\n if (linePos) {\n view.dispatch({ effects: setLintGutterTooltip.of({\n pos: line.from,\n above: false,\n clip: false,\n create() {\n return {\n dom: diagnosticsTooltip(view, diagnostics),\n getCoords: () => marker.getBoundingClientRect()\n };\n }\n }) });\n }\n marker.onmouseout = marker.onmousemove = null;\n trackHoverOn(view, marker);\n }\n let { hoverTime } = view.state.facet(lintGutterConfig);\n let hoverTimeout = setTimeout(hovered, hoverTime);\n marker.onmouseout = () => {\n clearTimeout(hoverTimeout);\n marker.onmouseout = marker.onmousemove = null;\n };\n marker.onmousemove = () => {\n clearTimeout(hoverTimeout);\n hoverTimeout = setTimeout(hovered, hoverTime);\n };\n}\nfunction markersForDiagnostics(doc, diagnostics) {\n let byLine = Object.create(null);\n for (let diagnostic of diagnostics) {\n let line = doc.lineAt(diagnostic.from);\n (byLine[line.from] || (byLine[line.from] = [])).push(diagnostic);\n }\n let markers = [];\n for (let line in byLine) {\n markers.push(new LintGutterMarker(byLine[line]).range(+line));\n }\n return RangeSet.of(markers, true);\n}\nconst lintGutterExtension = /*@__PURE__*/gutter({\n class: \"cm-gutter-lint\",\n markers: view => view.state.field(lintGutterMarkers),\n widgetMarker: (view, widget, block) => {\n let diagnostics = [];\n view.state.field(lintGutterMarkers).between(block.from, block.to, (from, to, value) => {\n if (from > block.from && from < block.to)\n diagnostics.push(...value.diagnostics);\n });\n return diagnostics.length ? new LintGutterMarker(diagnostics) : null;\n }\n});\nconst lintGutterMarkers = /*@__PURE__*/StateField.define({\n create() {\n return RangeSet.empty;\n },\n update(markers, tr) {\n markers = markers.map(tr.changes);\n let diagnosticFilter = tr.state.facet(lintGutterConfig).markerFilter;\n for (let effect of tr.effects) {\n if (effect.is(setDiagnosticsEffect)) {\n let diagnostics = effect.value;\n if (diagnosticFilter)\n diagnostics = diagnosticFilter(diagnostics || [], tr.state);\n markers = markersForDiagnostics(tr.state.doc, diagnostics.slice(0));\n }\n }\n return markers;\n }\n});\nconst setLintGutterTooltip = /*@__PURE__*/StateEffect.define();\nconst lintGutterTooltip = /*@__PURE__*/StateField.define({\n create() { return null; },\n update(tooltip, tr) {\n if (tooltip && tr.docChanged)\n tooltip = hideTooltip(tr, tooltip) ? null : Object.assign(Object.assign({}, tooltip), { pos: tr.changes.mapPos(tooltip.pos) });\n return tr.effects.reduce((t, e) => e.is(setLintGutterTooltip) ? e.value : t, tooltip);\n },\n provide: field => showTooltip.from(field)\n});\nconst lintGutterTheme = /*@__PURE__*/EditorView.baseTheme({\n \".cm-gutter-lint\": {\n width: \"1.4em\",\n \"& .cm-gutterElement\": {\n padding: \".2em\"\n }\n },\n \".cm-lint-marker\": {\n width: \"1em\",\n height: \"1em\"\n },\n \".cm-lint-marker-info\": {\n content: /*@__PURE__*/svg(`<path fill=\"#aaf\" stroke=\"#77e\" stroke-width=\"6\" stroke-linejoin=\"round\" d=\"M5 5L35 5L35 35L5 35Z\"/>`)\n },\n \".cm-lint-marker-warning\": {\n content: /*@__PURE__*/svg(`<path fill=\"#fe8\" stroke=\"#fd7\" stroke-width=\"6\" stroke-linejoin=\"round\" d=\"M20 6L37 35L3 35Z\"/>`),\n },\n \".cm-lint-marker-error\": {\n content: /*@__PURE__*/svg(`<circle cx=\"20\" cy=\"20\" r=\"15\" fill=\"#f87\" stroke=\"#f43\" stroke-width=\"6\"/>`)\n },\n});\nconst lintExtensions = [\n lintState,\n /*@__PURE__*/EditorView.decorations.compute([lintState], state => {\n let { selected, panel } = state.field(lintState);\n return !selected || !panel || selected.from == selected.to ? Decoration.none : Decoration.set([\n activeMark.range(selected.from, selected.to)\n ]);\n }),\n /*@__PURE__*/hoverTooltip(lintTooltip, { hideOn: hideTooltip }),\n baseTheme\n];\nconst lintGutterConfig = /*@__PURE__*/Facet.define({\n combine(configs) {\n return combineConfig(configs, {\n hoverTime: 300 /* Hover.Time */,\n markerFilter: null,\n tooltipFilter: null\n });\n }\n});\n/**\nReturns an extension that installs a gutter showing markers for\neach line that has diagnostics, which can be hovered over to see\nthe diagnostics.\n*/\nfunction lintGutter(config = {}) {\n return [lintGutterConfig.of(config), lintGutterMarkers, lintGutterExtension, lintGutterTheme, lintGutterTooltip];\n}\n/**\nIterate over the marked diagnostics for the given editor state,\ncalling `f` for each of them. Note that, if the document changed\nsince the diagnostics were created, the `Diagnostic` object will\nhold the original outdated position, whereas the `to` and `from`\narguments hold the diagnostic's current position.\n*/\nfunction forEachDiagnostic(state, f) {\n let lState = state.field(lintState, false);\n if (lState && lState.diagnostics.size) {\n let pending = [], pendingStart = [], lastEnd = -1;\n for (let iter = RangeSet.iter([lState.diagnostics]);; iter.next()) {\n for (let i = 0; i < pending.length; i++)\n if (!iter.value || iter.value.spec.diagnostics.indexOf(pending[i]) < 0) {\n f(pending[i], pendingStart[i], lastEnd);\n pending.splice(i, 1);\n pendingStart.splice(i--, 1);\n }\n if (!iter.value)\n break;\n for (let d of iter.value.spec.diagnostics)\n if (pending.indexOf(d) < 0) {\n pending.push(d);\n pendingStart.push(iter.from);\n }\n lastEnd = iter.to;\n }\n }\n}\n\nexport { closeLintPanel, diagnosticCount, forEachDiagnostic, forceLinting, lintGutter, lintKeymap, linter, nextDiagnostic, openLintPanel, previousDiagnostic, setDiagnostics, setDiagnosticsEffect };\n","import { lineNumbers, highlightActiveLineGutter, highlightSpecialChars, drawSelection, dropCursor, rectangularSelection, crosshairCursor, highlightActiveLine, keymap } from '@codemirror/view';\nexport { EditorView } from '@codemirror/view';\nimport { EditorState } from '@codemirror/state';\nimport { foldGutter, indentOnInput, syntaxHighlighting, defaultHighlightStyle, bracketMatching, foldKeymap } from '@codemirror/language';\nimport { history, defaultKeymap, historyKeymap } from '@codemirror/commands';\nimport { highlightSelectionMatches, searchKeymap } from '@codemirror/search';\nimport { closeBrackets, autocompletion, closeBracketsKeymap, completionKeymap } from '@codemirror/autocomplete';\nimport { lintKeymap } from '@codemirror/lint';\n\n// (The superfluous function calls around the list of extensions work\n// around current limitations in tree-shaking software.)\n/**\nThis is an extension value that just pulls together a number of\nextensions that you might want in a basic editor. It is meant as a\nconvenient helper to quickly set up CodeMirror without installing\nand importing a lot of separate packages.\n\nSpecifically, it includes...\n\n - [the default command bindings](https://codemirror.net/6/docs/ref/#commands.defaultKeymap)\n - [line numbers](https://codemirror.net/6/docs/ref/#view.lineNumbers)\n - [special character highlighting](https://codemirror.net/6/docs/ref/#view.highlightSpecialChars)\n - [the undo history](https://codemirror.net/6/docs/ref/#commands.history)\n - [a fold gutter](https://codemirror.net/6/docs/ref/#language.foldGutter)\n - [custom selection drawing](https://codemirror.net/6/docs/ref/#view.drawSelection)\n - [drop cursor](https://codemirror.net/6/docs/ref/#view.dropCursor)\n - [multiple selections](https://codemirror.net/6/docs/ref/#state.EditorState^allowMultipleSelections)\n - [reindentation on input](https://codemirror.net/6/docs/ref/#language.indentOnInput)\n - [the default highlight style](https://codemirror.net/6/docs/ref/#language.defaultHighlightStyle) (as fallback)\n - [bracket matching](https://codemirror.net/6/docs/ref/#language.bracketMatching)\n - [bracket closing](https://codemirror.net/6/docs/ref/#autocomplete.closeBrackets)\n - [autocompletion](https://codemirror.net/6/docs/ref/#autocomplete.autocompletion)\n - [rectangular selection](https://codemirror.net/6/docs/ref/#view.rectangularSelection) and [crosshair cursor](https://codemirror.net/6/docs/ref/#view.crosshairCursor)\n - [active line highlighting](https://codemirror.net/6/docs/ref/#view.highlightActiveLine)\n - [active line gutter highlighting](https://codemirror.net/6/docs/ref/#view.highlightActiveLineGutter)\n - [selection match highlighting](https://codemirror.net/6/docs/ref/#search.highlightSelectionMatches)\n - [search](https://codemirror.net/6/docs/ref/#search.searchKeymap)\n - [linting](https://codemirror.net/6/docs/ref/#lint.lintKeymap)\n\n(You'll probably want to add some language package to your setup\ntoo.)\n\nThis extension does not allow customization. The idea is that,\nonce you decide you want to configure your editor more precisely,\nyou take this package's source (which is just a bunch of imports\nand an array literal), copy it into your own code, and adjust it\nas desired.\n*/\nconst basicSetup = /*@__PURE__*/(() => [\n lineNumbers(),\n highlightActiveLineGutter(),\n highlightSpecialChars(),\n history(),\n foldGutter(),\n drawSelection(),\n dropCursor(),\n EditorState.allowMultipleSelections.of(true),\n indentOnInput(),\n syntaxHighlighting(defaultHighlightStyle, { fallback: true }),\n bracketMatching(),\n closeBrackets(),\n autocompletion(),\n rectangularSelection(),\n crosshairCursor(),\n highlightActiveLine(),\n highlightSelectionMatches(),\n keymap.of([\n ...closeBracketsKeymap,\n ...defaultKeymap,\n ...searchKeymap,\n ...historyKeymap,\n ...foldKeymap,\n ...completionKeymap,\n ...lintKeymap\n ])\n])();\n/**\nA minimal set of extensions to create a functional editor. Only\nincludes [the default keymap](https://codemirror.net/6/docs/ref/#commands.defaultKeymap), [undo\nhistory](https://codemirror.net/6/docs/ref/#commands.history), [special character\nhighlighting](https://codemirror.net/6/docs/ref/#view.highlightSpecialChars), [custom selection\ndrawing](https://codemirror.net/6/docs/ref/#view.drawSelection), and [default highlight\nstyle](https://codemirror.net/6/docs/ref/#language.defaultHighlightStyle).\n*/\nconst minimalSetup = /*@__PURE__*/(() => [\n highlightSpecialChars(),\n history(),\n drawSelection(),\n syntaxHighlighting(defaultHighlightStyle, { fallback: true }),\n keymap.of([\n ...defaultKeymap,\n ...historyKeymap,\n ])\n])();\n\nexport { basicSetup, minimalSetup };\n"],"names":["crelt","elt","arguments","document","createElement","i","next","nodeType","Array","isArray","name","Object","prototype","hasOwnProperty","call","value","setAttribute","length","add","child","appendChild","createTextNode","RangeError","basicNormalize","String","normalize","x","SearchCursor","constructor","text","query","from","to","test","this","done","matches","buffer","bufferPos","iter","iterRange","bufferStart","peek","codePointAt","pop","nextOverlapping","str","fromCodePoint","start","codePointSize","norm","pos","code","charCodeAt","match","end","index","keep","splice","push","Symbol","iterator","empty","exec","baseFlags","unicode","RegExpCursor","options","curLine","MultilineRegExpCursor","re","RegExp","ignoreCase","startLine","lineAt","curLineStart","matchPos","toCharEnd","getLine","skip","lineBreak","slice","nextLine","off","lastIndex","flattened","WeakMap","FlattenedDoc","get","doc","cached","flat","sliceString","set","cachedFrom","chunkEnd","line","createLineDialog","view","input","class","state","selection","main","head","number","go","sign","ln","cl","percent","col","pc","lines","Math","round","docLine","max","min","EditorSelection","cursor","dispatch","effects","dialogEffect","of","EditorView","scrollIntoView","y","focus","dom","onkeydown","event","keyCode","preventDefault","onsubmit","phrase","type","onclick","StateEffect","define","dialogField","StateField","create","update","tr","e","is","provide","f","showPanel","val","baseTheme$1","baseTheme","padding","position","fontSize","top","bottom","right","backgroundColor","border","font","defaultHighlightOptions","highlightWordAroundCursor","minSelectionLength","maxMatches","wholeWords","highlightConfig","Facet","combine","combineConfig","a","b","matchDeco","Decoration","mark","mainMatchDeco","insideWordBoundaries","check","sliceDoc","CharCategory","Word","matchHighlighter","ViewPlugin","fromClass","decorations","getDeco","selectionSet","docChanged","viewportChanged","conf","facet","sel","ranges","none","range","word","wordAt","charCategorizer","len","insideWord","deco","part","visibleRanges","v","defaultTheme","searchConfigFacet","configs","caseSensitive","literal","regexp","wholeWord","createPanel","SearchPanel","scrollToMatch","SearchQuery","config","search","replace","valid","source","_a","validRegExp","unquoted","unquote","_","ch","eq","other","RegExpQuery","StringQuery","getCursor","st","EditorState","regexpCursor","stringCursor","QueryType","spec","undefined","toLowerCase","categorizer","buf","bufPos","charBefore","charAfter","super","nextMatch","curFrom","curTo","prevMatchInRange","prevMatch","found","getReplacement","_result","matchAll","limit","highlight","_from","_to","findClusterBreak","size","result","m","l","n","setSearchQuery","togglePanel","searchState","SearchState","defaultQuery","effect","panel","createSearchPanel","matchMark","selectedMatchMark","searchHighlighter","field","startState","builder","RangeSetBuilder","selected","some","r","finish","searchCommand","openSearchPanel","findNext","single","announceMatch","userEvent","selectSearchInput","findPrevious","prev","selectMatches","map","replaceNext","readOnly","replacement","changes","toText","insert","announce","replaceAll","announceText","fallback","_b","_c","_d","_e","selText","getSearchInput","getPanel","querySelector","root","activeElement","select","searchInput","appendConfig","searchExtensions","closeSearchPanel","contains","searchKeymap","key","run","scope","shift","cur","newSel","mainIndex","selectWord","searchedText","fullWord","cycled","findNextOccurrence","addRange","button","content","commit","bind","searchField","placeholder","form","onchange","onkeyup","replaceField","caseField","checked","reField","wordField","keydown","runScopeHandlers","target","shiftKey","transactions","setQuery","mount","AnnounceMargin","Break","lineEnd","margin","marginRight","whiteSpace","Prec","low","SelectedDiagnostic","diagnostic","LintState","diagnostics","init","markedDiagnostics","diagnosticFilter","lintConfig","markerFilter","sorted","sort","active","reduce","p","d","sev","maxSeverity","widget","DiagnosticWidget","markClass","c","inclusiveEnd","findDiagnostic","after","between","indexOf","setDiagnosticsEffect","movePanelSelection","lintState","mapped","selPos","mapPos","autoPanel","LintPanel","open","s","activeMark","lintTooltip","side","tooltipFilter","above","diagnosticsTooltip","renderDiagnostic","closeLintPanel","lintKeymap","concat","lintExtensions","anchor","assign","sources","filter","delay","needsRefresh","hideOn","u","assignKeys","actions","assigned","inPanel","keys","severity","renderMessage","message","action","fired","click","apply","keyIndex","nameElt","onmousedown","WidgetType","toDOM","PanelItem","id","floor","random","toString","items","list","tabIndex","role","moveSelection","selectedIndex","toUpperCase","needsSync","newSelectedItem","seen","Set","_start","_end","has","item","j","hasAttribute","removeAttribute","requestMeasure","read","getBoundingClientRect","write","scaleY","height","offsetHeight","scrollTop","sync","domPos","firstChild","rm","nextSibling","remove","parentNode","insertBefore","underline","color","attrs","encodeURIComponent","svg","marginLeft","display","borderLeft","borderRadius","opacity","backgroundPosition","backgroundRepeat","paddingBottom","backgroundImage","left","borderRight","borderBottom","borderBottomColor","maxHeight","overflowY","textDecoration","background_fallback","color_fallback","background","severityWeight","weight","w","compute","hoverTooltip","tooltip","touchesRange","basicSetup","lineNumbers","highlightActiveLineGutter","highlightSpecialChars","history","foldGutter","drawSelection","dropCursor","allowMultipleSelections","indentOnInput","syntaxHighlighting","defaultHighlightStyle","bracketMatching","closeBrackets","autocompletion","rectangularSelection","crosshairCursor","highlightActiveLine","keymap","closeBracketsKeymap","defaultKeymap","historyKeymap","foldKeymap","completionKeymap","minimalSetup"],"mappings":"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","x_google_ignoreList":[0,1,2,3]}
@@ -1,2 +0,0 @@
1
- import{P as t,N as O,a as e,D as i,b as s,T as n,I as r,c as a,t as o,L as h,s as l,d,e as Q,f as c,g as p,h as u,j as f}from"./codemirror_language-DbhkgEi1.js";import{i as T,c as g,s as S}from"./index-B25jxAgK.js";import"./codemirror_state-1UkzIAPK.js";import"./codemirror_view-BwC4I3hj.js";class m{constructor(t,O,e,i,s,n,r,a,o,h=0,l){this.p=t,this.stack=O,this.state=e,this.reducePos=i,this.pos=s,this.score=n,this.buffer=r,this.bufferBase=a,this.curContext=o,this.lookAhead=h,this.parent=l}toString(){return`[${this.stack.filter(((t,O)=>O%3==0)).concat(this.state)}]@${this.pos}${this.score?"!"+this.score:""}`}static start(t,O,e=0){let i=t.parser.context;return new m(t,[],O,e,e,0,[],0,i?new k(i,i.start):null,0,null)}get context(){return this.curContext?this.curContext.context:null}pushState(t,O){this.stack.push(this.state,O,this.bufferBase+this.buffer.length),this.state=t}reduce(t){var O;let e=t>>19,i=65535&t,{parser:s}=this.p,n=this.reducePos<this.pos-25;n&&this.setLookAhead(this.pos);let r=s.dynamicPrecedence(i);if(r&&(this.score+=r),0==e)return this.pushState(s.getGoto(this.state,i,!0),this.reducePos),i<s.minRepeatTerm&&this.storeNode(i,this.reducePos,this.reducePos,n?8:4,!0),void this.reduceContext(i,this.reducePos);let a=this.stack.length-3*(e-1)-(262144&t?6:0),o=a?this.stack[a-2]:this.p.ranges[0].from,h=this.reducePos-o;h>=2e3&&!(null===(O=this.p.parser.nodeSet.types[i])||void 0===O?void 0:O.isAnonymous)&&(o==this.p.lastBigReductionStart?(this.p.bigReductionCount++,this.p.lastBigReductionSize=h):this.p.lastBigReductionSize<h&&(this.p.bigReductionCount=1,this.p.lastBigReductionStart=o,this.p.lastBigReductionSize=h));let l=a?this.stack[a-1]:0,d=this.bufferBase+this.buffer.length-l;if(i<s.minRepeatTerm||131072&t){let t=s.stateFlag(this.state,1)?this.pos:this.reducePos;this.storeNode(i,o,t,d+4,!0)}if(262144&t)this.state=this.stack[a];else{let t=this.stack[a-3];this.state=s.getGoto(t,i,!0)}for(;this.stack.length>a;)this.stack.pop();this.reduceContext(i,o)}storeNode(t,O,e,i=4,s=!1){if(0==t&&(!this.stack.length||this.stack[this.stack.length-1]<this.buffer.length+this.bufferBase)){let t=this,i=this.buffer.length;if(0==i&&t.parent&&(i=t.bufferBase-t.parent.bufferBase,t=t.parent),i>0&&0==t.buffer[i-4]&&t.buffer[i-1]>-1){if(O==e)return;if(t.buffer[i-2]>=O)return void(t.buffer[i-2]=e)}}if(s&&this.pos!=e){let s=this.buffer.length;if(s>0&&0!=this.buffer[s-4]){let t=!1;for(let O=s;O>0&&this.buffer[O-2]>e;O-=4)if(this.buffer[O-1]>=0){t=!0;break}if(t)for(;s>0&&this.buffer[s-2]>e;)this.buffer[s]=this.buffer[s-4],this.buffer[s+1]=this.buffer[s-3],this.buffer[s+2]=this.buffer[s-2],this.buffer[s+3]=this.buffer[s-1],s-=4,i>4&&(i-=4)}this.buffer[s]=t,this.buffer[s+1]=O,this.buffer[s+2]=e,this.buffer[s+3]=i}else this.buffer.push(t,O,e,i)}shift(t,O,e,i){if(131072&t)this.pushState(65535&t,this.pos);else if(262144&t)this.pos=i,this.shiftContext(O,e),O<=this.p.parser.maxNode&&this.buffer.push(O,e,i,4);else{let s=t,{parser:n}=this.p;(i>this.pos||O<=n.maxNode)&&(this.pos=i,n.stateFlag(s,1)||(this.reducePos=i)),this.pushState(s,e),this.shiftContext(O,e),O<=n.maxNode&&this.buffer.push(O,e,i,4)}}apply(t,O,e,i){65536&t?this.reduce(t):this.shift(t,O,e,i)}useNode(t,O){let e=this.p.reused.length-1;(e<0||this.p.reused[e]!=t)&&(this.p.reused.push(t),e++);let i=this.pos;this.reducePos=this.pos=i+t.length,this.pushState(O,i),this.buffer.push(e,i,this.reducePos,-1),this.curContext&&this.updateContext(this.curContext.tracker.reuse(this.curContext.context,t,this,this.p.stream.reset(this.pos-t.length)))}split(){let t=this,O=t.buffer.length;for(;O>0&&t.buffer[O-2]>t.reducePos;)O-=4;let e=t.buffer.slice(O),i=t.bufferBase+O;for(;t&&i==t.bufferBase;)t=t.parent;return new m(this.p,this.stack.slice(),this.state,this.reducePos,this.pos,this.score,e,i,this.curContext,this.lookAhead,t)}recoverByDelete(t,O){let e=t<=this.p.parser.maxNode;e&&this.storeNode(t,this.pos,O,4),this.storeNode(0,this.pos,O,e?8:4),this.pos=this.reducePos=O,this.score-=190}canShift(t){for(let O=new P(this);;){let e=this.p.parser.stateSlot(O.state,4)||this.p.parser.hasAction(O.state,t);if(0==e)return!1;if(!(65536&e))return!0;O.reduce(e)}}recoverByInsert(t){if(this.stack.length>=300)return[];let O=this.p.parser.nextStates(this.state);if(O.length>8||this.stack.length>=120){let e=[];for(let i,s=0;s<O.length;s+=2)(i=O[s+1])!=this.state&&this.p.parser.hasAction(i,t)&&e.push(O[s],i);if(this.stack.length<120)for(let t=0;e.length<8&&t<O.length;t+=2){let i=O[t+1];e.some(((t,O)=>1&O&&t==i))||e.push(O[t],i)}O=e}let e=[];for(let t=0;t<O.length&&e.length<4;t+=2){let i=O[t+1];if(i==this.state)continue;let s=this.split();s.pushState(i,this.pos),s.storeNode(0,s.pos,s.pos,4,!0),s.shiftContext(O[t],this.pos),s.reducePos=this.pos,s.score-=200,e.push(s)}return e}forceReduce(){let{parser:t}=this.p,O=t.stateSlot(this.state,5);if(!(65536&O))return!1;if(!t.validAction(this.state,O)){let e=O>>19,i=65535&O,s=this.stack.length-3*e;if(s<0||t.getGoto(this.stack[s],i,!1)<0){let t=this.findForcedReduction();if(null==t)return!1;O=t}this.storeNode(0,this.pos,this.pos,4,!0),this.score-=100}return this.reducePos=this.pos,this.reduce(O),!0}findForcedReduction(){let{parser:t}=this.p,O=[],e=(i,s)=>{if(!O.includes(i))return O.push(i),t.allActions(i,(O=>{if(393216&O);else if(65536&O){let e=(O>>19)-s;if(e>1){let i=65535&O,s=this.stack.length-3*e;if(s>=0&&t.getGoto(this.stack[s],i,!1)>=0)return e<<19|65536|i}}else{let t=e(O,s+1);if(null!=t)return t}}))};return e(this.state,0)}forceAll(){for(;!this.p.parser.stateFlag(this.state,2);)if(!this.forceReduce()){this.storeNode(0,this.pos,this.pos,4,!0);break}return this}get deadEnd(){if(3!=this.stack.length)return!1;let{parser:t}=this.p;return 65535==t.data[t.stateSlot(this.state,1)]&&!t.stateSlot(this.state,4)}restart(){this.storeNode(0,this.pos,this.pos,4,!0),this.state=this.stack[0],this.stack.length=0}sameState(t){if(this.state!=t.state||this.stack.length!=t.stack.length)return!1;for(let O=0;O<this.stack.length;O+=3)if(this.stack[O]!=t.stack[O])return!1;return!0}get parser(){return this.p.parser}dialectEnabled(t){return this.p.parser.dialect.flags[t]}shiftContext(t,O){this.curContext&&this.updateContext(this.curContext.tracker.shift(this.curContext.context,t,this,this.p.stream.reset(O)))}reduceContext(t,O){this.curContext&&this.updateContext(this.curContext.tracker.reduce(this.curContext.context,t,this,this.p.stream.reset(O)))}emitContext(){let t=this.buffer.length-1;(t<0||-3!=this.buffer[t])&&this.buffer.push(this.curContext.hash,this.pos,this.pos,-3)}emitLookAhead(){let t=this.buffer.length-1;(t<0||-4!=this.buffer[t])&&this.buffer.push(this.lookAhead,this.pos,this.pos,-4)}updateContext(t){if(t!=this.curContext.context){let O=new k(this.curContext.tracker,t);O.hash!=this.curContext.hash&&this.emitContext(),this.curContext=O}}setLookAhead(t){t>this.lookAhead&&(this.emitLookAhead(),this.lookAhead=t)}close(){this.curContext&&this.curContext.tracker.strict&&this.emitContext(),this.lookAhead>0&&this.emitLookAhead()}}class k{constructor(t,O){this.tracker=t,this.context=O,this.hash=t.strict?t.hash(O):0}}class P{constructor(t){this.start=t,this.state=t.state,this.stack=t.stack,this.base=this.stack.length}reduce(t){let O=65535&t,e=t>>19;0==e?(this.stack==this.start.stack&&(this.stack=this.stack.slice()),this.stack.push(this.state,0,0),this.base+=3):this.base-=3*(e-1);let i=this.start.p.parser.getGoto(this.stack[this.base-3],O,!0);this.state=i}}class q{constructor(t,O,e){this.stack=t,this.pos=O,this.index=e,this.buffer=t.buffer,0==this.index&&this.maybeNext()}static create(t,O=t.bufferBase+t.buffer.length){return new q(t,O,O-t.bufferBase)}maybeNext(){let t=this.stack.parent;null!=t&&(this.index=this.stack.bufferBase-t.bufferBase,this.stack=t,this.buffer=t.buffer)}get id(){return this.buffer[this.index-4]}get start(){return this.buffer[this.index-3]}get end(){return this.buffer[this.index-2]}get size(){return this.buffer[this.index-1]}next(){this.index-=4,this.pos-=4,0==this.index&&this.maybeNext()}fork(){return new q(this.stack,this.pos,this.index)}}function $(t,O=Uint16Array){if("string"!=typeof t)return t;let e=null;for(let i=0,s=0;i<t.length;){let n=0;for(;;){let O=t.charCodeAt(i++),e=!1;if(126==O){n=65535;break}O>=92&&O--,O>=34&&O--;let s=O-32;if(s>=46&&(s-=46,e=!0),n+=s,e)break;n*=46}e?e[s++]=n:e=new O(n)}return e}class x{constructor(){this.start=-1,this.value=-1,this.end=-1,this.extended=-1,this.lookAhead=0,this.mask=0,this.context=0}}const v=new x;class y{constructor(t,O){this.input=t,this.ranges=O,this.chunk="",this.chunkOff=0,this.chunk2="",this.chunk2Pos=0,this.next=-1,this.token=v,this.rangeIndex=0,this.pos=this.chunkPos=O[0].from,this.range=O[0],this.end=O[O.length-1].to,this.readNext()}resolveOffset(t,O){let e=this.range,i=this.rangeIndex,s=this.pos+t;for(;s<e.from;){if(!i)return null;let t=this.ranges[--i];s-=e.from-t.to,e=t}for(;O<0?s>e.to:s>=e.to;){if(i==this.ranges.length-1)return null;let t=this.ranges[++i];s+=t.from-e.to,e=t}return s}clipPos(t){if(t>=this.range.from&&t<this.range.to)return t;for(let O of this.ranges)if(O.to>t)return Math.max(t,O.from);return this.end}peek(t){let O,e,i=this.chunkOff+t;if(i>=0&&i<this.chunk.length)O=this.pos+t,e=this.chunk.charCodeAt(i);else{let i=this.resolveOffset(t,1);if(null==i)return-1;if(O=i,O>=this.chunk2Pos&&O<this.chunk2Pos+this.chunk2.length)e=this.chunk2.charCodeAt(O-this.chunk2Pos);else{let t=this.rangeIndex,i=this.range;for(;i.to<=O;)i=this.ranges[++t];this.chunk2=this.input.chunk(this.chunk2Pos=O),O+this.chunk2.length>i.to&&(this.chunk2=this.chunk2.slice(0,i.to-O)),e=this.chunk2.charCodeAt(0)}}return O>=this.token.lookAhead&&(this.token.lookAhead=O+1),e}acceptToken(t,O=0){let e=O?this.resolveOffset(O,-1):this.pos;if(null==e||e<this.token.start)throw new RangeError("Token end out of bounds");this.token.value=t,this.token.end=e}acceptTokenTo(t,O){this.token.value=t,this.token.end=O}getChunk(){if(this.pos>=this.chunk2Pos&&this.pos<this.chunk2Pos+this.chunk2.length){let{chunk:t,chunkPos:O}=this;this.chunk=this.chunk2,this.chunkPos=this.chunk2Pos,this.chunk2=t,this.chunk2Pos=O,this.chunkOff=this.pos-this.chunkPos}else{this.chunk2=this.chunk,this.chunk2Pos=this.chunkPos;let t=this.input.chunk(this.pos),O=this.pos+t.length;this.chunk=O>this.range.to?t.slice(0,this.range.to-this.pos):t,this.chunkPos=this.pos,this.chunkOff=0}}readNext(){return this.chunkOff>=this.chunk.length&&(this.getChunk(),this.chunkOff==this.chunk.length)?this.next=-1:this.next=this.chunk.charCodeAt(this.chunkOff)}advance(t=1){for(this.chunkOff+=t;this.pos+t>=this.range.to;){if(this.rangeIndex==this.ranges.length-1)return this.setDone();t-=this.range.to-this.pos,this.range=this.ranges[++this.rangeIndex],this.pos=this.range.from}return this.pos+=t,this.pos>=this.token.lookAhead&&(this.token.lookAhead=this.pos+1),this.readNext()}setDone(){return this.pos=this.chunkPos=this.end,this.range=this.ranges[this.rangeIndex=this.ranges.length-1],this.chunk="",this.next=-1}reset(t,O){if(O?(this.token=O,O.start=t,O.lookAhead=t+1,O.value=O.extended=-1):this.token=v,this.pos!=t){if(this.pos=t,t==this.end)return this.setDone(),this;for(;t<this.range.from;)this.range=this.ranges[--this.rangeIndex];for(;t>=this.range.to;)this.range=this.ranges[++this.rangeIndex];t>=this.chunkPos&&t<this.chunkPos+this.chunk.length?this.chunkOff=t-this.chunkPos:(this.chunk="",this.chunkOff=0),this.readNext()}return this}read(t,O){if(t>=this.chunkPos&&O<=this.chunkPos+this.chunk.length)return this.chunk.slice(t-this.chunkPos,O-this.chunkPos);if(t>=this.chunk2Pos&&O<=this.chunk2Pos+this.chunk2.length)return this.chunk2.slice(t-this.chunk2Pos,O-this.chunk2Pos);if(t>=this.range.from&&O<=this.range.to)return this.input.read(t,O);let e="";for(let i of this.ranges){if(i.from>=O)break;i.to>t&&(e+=this.input.read(Math.max(i.from,t),Math.min(i.to,O)))}return e}}class z{constructor(t,O){this.data=t,this.id=O}token(t,O){let{parser:e}=O.p;!function(t,O,e,i,s,n){let r=0,a=1<<i,{dialect:o}=e.p.parser;t:for(;a&t[r];){let e=t[r+1];for(let i=r+3;i<e;i+=2)if((t[i+1]&a)>0){let e=t[i];if(o.allows(e)&&(-1==O.token.value||O.token.value==e||b(e,O.token.value,s,n))){O.acceptToken(e);break}}let i=O.next,h=0,l=t[r+2];if(!(O.next<0&&l>h&&65535==t[e+3*l-3])){for(;h<l;){let s=h+l>>1,n=e+s+(s<<1),a=t[n],o=t[n+1]||65536;if(i<a)l=s;else{if(!(i>=o)){r=t[n+2],O.advance();continue t}h=s+1}}break}r=t[e+3*l-1]}}(this.data,t,O,this.id,e.data,e.tokenPrecTable)}}z.prototype.contextual=z.prototype.fallback=z.prototype.extend=!1,z.prototype.fallback=z.prototype.extend=!1;class X{constructor(t,O={}){this.token=t,this.contextual=!!O.contextual,this.fallback=!!O.fallback,this.extend=!!O.extend}}function R(t,O,e){for(let i,s=O;65535!=(i=t[s]);s++)if(i==e)return s-O;return-1}function b(t,O,e,i){let s=R(e,i,O);return s<0||R(e,i,t)<s}const W="undefined"!=typeof process&&process.env&&/\bparse\b/.test(process.env.LOG);let _=null;function U(t,O,e){let i=t.cursor(r.IncludeAnonymous);for(i.moveTo(O);;)if(!(e<0?i.childBefore(O):i.childAfter(O)))for(;;){if((e<0?i.to<O:i.from>O)&&!i.type.isError)return e<0?Math.max(0,Math.min(i.to-1,O-25)):Math.min(t.length,Math.max(i.from+1,O+25));if(e<0?i.prevSibling():i.nextSibling())break;if(!i.parent())return e<0?0:t.length}}class w{constructor(t,O){this.fragments=t,this.nodeSet=O,this.i=0,this.fragment=null,this.safeFrom=-1,this.safeTo=-1,this.trees=[],this.start=[],this.index=[],this.nextFragment()}nextFragment(){let t=this.fragment=this.i==this.fragments.length?null:this.fragments[this.i++];if(t){for(this.safeFrom=t.openStart?U(t.tree,t.from+t.offset,1)-t.offset:t.from,this.safeTo=t.openEnd?U(t.tree,t.to+t.offset,-1)-t.offset:t.to;this.trees.length;)this.trees.pop(),this.start.pop(),this.index.pop();this.trees.push(t.tree),this.start.push(-t.offset),this.index.push(0),this.nextStart=this.safeFrom}else this.nextStart=1e9}nodeAt(t){if(t<this.nextStart)return null;for(;this.fragment&&this.safeTo<=t;)this.nextFragment();if(!this.fragment)return null;for(;;){let O=this.trees.length-1;if(O<0)return this.nextFragment(),null;let e=this.trees[O],i=this.index[O];if(i==e.children.length){this.trees.pop(),this.start.pop(),this.index.pop();continue}let r=e.children[i],a=this.start[O]+e.positions[i];if(a>t)return this.nextStart=a,null;if(r instanceof n){if(a==t){if(a<this.safeFrom)return null;let t=a+r.length;if(t<=this.safeTo){let O=r.prop(s.lookAhead);if(!O||t+O<this.fragment.to)return r}}this.index[O]++,a+r.length>=Math.max(this.safeFrom,t)&&(this.trees.push(r),this.start.push(a),this.index.push(0))}else this.index[O]++,this.nextStart=a+r.length}}}class V{constructor(t,O){this.stream=O,this.tokens=[],this.mainToken=null,this.actions=[],this.tokens=t.tokenizers.map((t=>new x))}getActions(t){let O=0,e=null,{parser:i}=t.p,{tokenizers:s}=i,n=i.stateSlot(t.state,3),r=t.curContext?t.curContext.hash:0,a=0;for(let i=0;i<s.length;i++){if(!(1<<i&n))continue;let o=s[i],h=this.tokens[i];if((!e||o.fallback)&&((o.contextual||h.start!=t.pos||h.mask!=n||h.context!=r)&&(this.updateCachedToken(h,o,t),h.mask=n,h.context=r),h.lookAhead>h.end+25&&(a=Math.max(h.lookAhead,a)),0!=h.value)){let i=O;if(h.extended>-1&&(O=this.addActions(t,h.extended,h.end,O)),O=this.addActions(t,h.value,h.end,O),!o.extend&&(e=h,O>i))break}}for(;this.actions.length>O;)this.actions.pop();return a&&t.setLookAhead(a),e||t.pos!=this.stream.end||(e=new x,e.value=t.p.parser.eofTerm,e.start=e.end=t.pos,O=this.addActions(t,e.value,e.end,O)),this.mainToken=e,this.actions}getMainToken(t){if(this.mainToken)return this.mainToken;let O=new x,{pos:e,p:i}=t;return O.start=e,O.end=Math.min(e+1,i.stream.end),O.value=e==i.stream.end?i.parser.eofTerm:0,O}updateCachedToken(t,O,e){let i=this.stream.clipPos(e.pos);if(O.token(this.stream.reset(i,t),e),t.value>-1){let{parser:O}=e.p;for(let i=0;i<O.specialized.length;i++)if(O.specialized[i]==t.value){let s=O.specializers[i](this.stream.read(t.start,t.end),e);if(s>=0&&e.p.parser.dialect.allows(s>>1)){1&s?t.extended=s>>1:t.value=s>>1;break}}}else t.value=0,t.end=this.stream.clipPos(i+1)}putAction(t,O,e,i){for(let O=0;O<i;O+=3)if(this.actions[O]==t)return i;return this.actions[i++]=t,this.actions[i++]=O,this.actions[i++]=e,i}addActions(t,O,e,i){let{state:s}=t,{parser:n}=t.p,{data:r}=n;for(let t=0;t<2;t++)for(let a=n.stateSlot(s,t?2:1);;a+=3){if(65535==r[a]){if(1!=r[a+1]){0==i&&2==r[a+1]&&(i=this.putAction(Y(r,a+2),O,e,i));break}a=Y(r,a+2)}r[a]==O&&(i=this.putAction(Y(r,a+1),O,e,i))}return i}}class G{constructor(t,O,e,i){this.parser=t,this.input=O,this.ranges=i,this.recovering=0,this.nextStackID=9812,this.minStackPos=0,this.reused=[],this.stoppedAt=null,this.lastBigReductionStart=-1,this.lastBigReductionSize=0,this.bigReductionCount=0,this.stream=new y(O,i),this.tokens=new V(t,this.stream),this.topTerm=t.top[1];let{from:s}=i[0];this.stacks=[m.start(this,t.top[0],s)],this.fragments=e.length&&this.stream.end-s>4*t.bufferLength?new w(e,t.nodeSet):null}get parsedPos(){return this.minStackPos}advance(){let t,O,e=this.stacks,i=this.minStackPos,s=this.stacks=[];if(this.bigReductionCount>300&&1==e.length){let[t]=e;for(;t.forceReduce()&&t.stack.length&&t.stack[t.stack.length-2]>=this.lastBigReductionStart;);this.bigReductionCount=this.lastBigReductionSize=0}for(let n=0;n<e.length;n++){let r=e[n];for(;;){if(this.tokens.mainToken=null,r.pos>i)s.push(r);else{if(this.advanceStack(r,s,e))continue;{t||(t=[],O=[]),t.push(r);let e=this.tokens.getMainToken(r);O.push(e.value,e.end)}}break}}if(!s.length){let O=t&&function(t){let O=null;for(let e of t){let t=e.p.stoppedAt;(e.pos==e.p.stream.end||null!=t&&e.pos>t)&&e.p.parser.stateFlag(e.state,2)&&(!O||O.score<e.score)&&(O=e)}return O}(t);if(O)return W&&console.log("Finish with "+this.stackID(O)),this.stackToTree(O);if(this.parser.strict)throw W&&t&&console.log("Stuck with token "+(this.tokens.mainToken?this.parser.getName(this.tokens.mainToken.value):"none")),new SyntaxError("No parse at "+i);this.recovering||(this.recovering=5)}if(this.recovering&&t){let e=null!=this.stoppedAt&&t[0].pos>this.stoppedAt?t[0]:this.runRecovery(t,O,s);if(e)return W&&console.log("Force-finish "+this.stackID(e)),this.stackToTree(e.forceAll())}if(this.recovering){let t=1==this.recovering?1:3*this.recovering;if(s.length>t)for(s.sort(((t,O)=>O.score-t.score));s.length>t;)s.pop();s.some((t=>t.reducePos>i))&&this.recovering--}else if(s.length>1){t:for(let t=0;t<s.length-1;t++){let O=s[t];for(let e=t+1;e<s.length;e++){let i=s[e];if(O.sameState(i)||O.buffer.length>500&&i.buffer.length>500){if(!((O.score-i.score||O.buffer.length-i.buffer.length)>0)){s.splice(t--,1);continue t}s.splice(e--,1)}}}s.length>12&&s.splice(12,s.length-12)}this.minStackPos=s[0].pos;for(let t=1;t<s.length;t++)s[t].pos<this.minStackPos&&(this.minStackPos=s[t].pos);return null}stopAt(t){if(null!=this.stoppedAt&&this.stoppedAt<t)throw new RangeError("Can't move stoppedAt forward");this.stoppedAt=t}advanceStack(t,O,e){let i=t.pos,{parser:r}=this,a=W?this.stackID(t)+" -> ":"";if(null!=this.stoppedAt&&i>this.stoppedAt)return t.forceReduce()?t:null;if(this.fragments){let O=t.curContext&&t.curContext.tracker.strict,e=O?t.curContext.hash:0;for(let o=this.fragments.nodeAt(i);o;){let i=this.parser.nodeSet.types[o.type.id]==o.type?r.getGoto(t.state,o.type.id):-1;if(i>-1&&o.length&&(!O||(o.prop(s.contextHash)||0)==e))return t.useNode(o,i),W&&console.log(a+this.stackID(t)+` (via reuse of ${r.getName(o.type.id)})`),!0;if(!(o instanceof n)||0==o.children.length||o.positions[0]>0)break;let h=o.children[0];if(!(h instanceof n&&0==o.positions[0]))break;o=h}}let o=r.stateSlot(t.state,4);if(o>0)return t.reduce(o),W&&console.log(a+this.stackID(t)+` (via always-reduce ${r.getName(65535&o)})`),!0;if(t.stack.length>=8400)for(;t.stack.length>6e3&&t.forceReduce(););let h=this.tokens.getActions(t);for(let s=0;s<h.length;){let n=h[s++],o=h[s++],l=h[s++],d=s==h.length||!e,Q=d?t:t.split(),c=this.tokens.mainToken;if(Q.apply(n,o,c?c.start:Q.pos,l),W&&console.log(a+this.stackID(Q)+` (via ${65536&n?`reduce of ${r.getName(65535&n)}`:"shift"} for ${r.getName(o)} @ ${i}${Q==t?"":", split"})`),d)return!0;Q.pos>i?O.push(Q):e.push(Q)}return!1}advanceFully(t,O){let e=t.pos;for(;;){if(!this.advanceStack(t,null,null))return!1;if(t.pos>e)return j(t,O),!0}}runRecovery(t,O,e){let i=null,s=!1;for(let n=0;n<t.length;n++){let r=t[n],a=O[n<<1],o=O[1+(n<<1)],h=W?this.stackID(r)+" -> ":"";if(r.deadEnd){if(s)continue;if(s=!0,r.restart(),W&&console.log(h+this.stackID(r)+" (restarted)"),this.advanceFully(r,e))continue}let l=r.split(),d=h;for(let t=0;l.forceReduce()&&t<10;t++){if(W&&console.log(d+this.stackID(l)+" (via force-reduce)"),this.advanceFully(l,e))break;W&&(d=this.stackID(l)+" -> ")}for(let t of r.recoverByInsert(a))W&&console.log(h+this.stackID(t)+" (via recover-insert)"),this.advanceFully(t,e);this.stream.end>r.pos?(o==r.pos&&(o++,a=0),r.recoverByDelete(a,o),W&&console.log(h+this.stackID(r)+` (via recover-delete ${this.parser.getName(a)})`),j(r,e)):(!i||i.score<r.score)&&(i=r)}return i}stackToTree(t){return t.close(),n.build({buffer:q.create(t),nodeSet:this.parser.nodeSet,topID:this.topTerm,maxBufferLength:this.parser.bufferLength,reused:this.reused,start:this.ranges[0].from,length:t.pos-this.ranges[0].from,minRepeatType:this.parser.minRepeatTerm})}stackID(t){let O=(_||(_=new WeakMap)).get(t);return O||_.set(t,O=String.fromCodePoint(this.nextStackID++)),O+t}}function j(t,O){for(let e=0;e<O.length;e++){let i=O[e];if(i.pos==t.pos&&i.sameState(t))return void(O[e].score<t.score&&(O[e]=t))}O.push(t)}class Z{constructor(t,O,e){this.source=t,this.flags=O,this.disabled=e}allows(t){return!this.disabled||0==this.disabled[t]}}const E=t=>t;class A extends t{constructor(t){if(super(),this.wrappers=[],14!=t.version)throw new RangeError(`Parser version (${t.version}) doesn't match runtime version (14)`);let n=t.nodeNames.split(" ");this.minRepeatTerm=n.length;for(let O=0;O<t.repeatNodeCount;O++)n.push("");let r=Object.keys(t.topRules).map((O=>t.topRules[O][1])),a=[];for(let t=0;t<n.length;t++)a.push([]);function o(t,O,e){a[t].push([O,O.deserialize(String(e))])}if(t.nodeProps)for(let O of t.nodeProps){let t=O[0];"string"==typeof t&&(t=s[t]);for(let e=1;e<O.length;){let i=O[e++];if(i>=0)o(i,t,O[e++]);else{let s=O[e+-i];for(let n=-i;n>0;n--)o(O[e++],t,s);e++}}}this.nodeSet=new O(n.map(((O,i)=>e.define({name:i>=this.minRepeatTerm?void 0:O,id:i,props:a[i],top:r.indexOf(i)>-1,error:0==i,skipped:t.skippedNodes&&t.skippedNodes.indexOf(i)>-1})))),t.propSources&&(this.nodeSet=this.nodeSet.extend(...t.propSources)),this.strict=!1,this.bufferLength=i;let h=$(t.tokenData);this.context=t.context,this.specializerSpecs=t.specialized||[],this.specialized=new Uint16Array(this.specializerSpecs.length);for(let t=0;t<this.specializerSpecs.length;t++)this.specialized[t]=this.specializerSpecs[t].term;this.specializers=this.specializerSpecs.map(C),this.states=$(t.states,Uint32Array),this.data=$(t.stateData),this.goto=$(t.goto),this.maxTerm=t.maxTerm,this.tokenizers=t.tokenizers.map((t=>"number"==typeof t?new z(h,t):t)),this.topRules=t.topRules,this.dialects=t.dialects||{},this.dynamicPrecedences=t.dynamicPrecedences||null,this.tokenPrecTable=t.tokenPrec,this.termNames=t.termNames||null,this.maxNode=this.nodeSet.types.length-1,this.dialect=this.parseDialect(),this.top=this.topRules[Object.keys(this.topRules)[0]]}createParse(t,O,e){let i=new G(this,t,O,e);for(let s of this.wrappers)i=s(i,t,O,e);return i}getGoto(t,O,e=!1){let i=this.goto;if(O>=i[0])return-1;for(let s=i[O+1];;){let O=i[s++],n=1&O,r=i[s++];if(n&&e)return r;for(let e=s+(O>>1);s<e;s++)if(i[s]==t)return r;if(n)return-1}}hasAction(t,O){let e=this.data;for(let i=0;i<2;i++)for(let s,n=this.stateSlot(t,i?2:1);;n+=3){if(65535==(s=e[n])){if(1!=e[n+1]){if(2==e[n+1])return Y(e,n+2);break}s=e[n=Y(e,n+2)]}if(s==O||0==s)return Y(e,n+1)}return 0}stateSlot(t,O){return this.states[6*t+O]}stateFlag(t,O){return(this.stateSlot(t,0)&O)>0}validAction(t,O){return!!this.allActions(t,(t=>t==O||null))}allActions(t,O){let e=this.stateSlot(t,4),i=e?O(e):void 0;for(let e=this.stateSlot(t,1);null==i;e+=3){if(65535==this.data[e]){if(1!=this.data[e+1])break;e=Y(this.data,e+2)}i=O(Y(this.data,e+1))}return i}nextStates(t){let O=[];for(let e=this.stateSlot(t,1);;e+=3){if(65535==this.data[e]){if(1!=this.data[e+1])break;e=Y(this.data,e+2)}if(!(1&this.data[e+2])){let t=this.data[e+1];O.some(((O,e)=>1&e&&O==t))||O.push(this.data[e],t)}}return O}configure(t){let O=Object.assign(Object.create(A.prototype),this);if(t.props&&(O.nodeSet=this.nodeSet.extend(...t.props)),t.top){let e=this.topRules[t.top];if(!e)throw new RangeError(`Invalid top rule name ${t.top}`);O.top=e}return t.tokenizers&&(O.tokenizers=this.tokenizers.map((O=>{let e=t.tokenizers.find((t=>t.from==O));return e?e.to:O}))),t.specializers&&(O.specializers=this.specializers.slice(),O.specializerSpecs=this.specializerSpecs.map(((e,i)=>{let s=t.specializers.find((t=>t.from==e.external));if(!s)return e;let n=Object.assign(Object.assign({},e),{external:s.to});return O.specializers[i]=C(n),n}))),t.contextTracker&&(O.context=t.contextTracker),t.dialect&&(O.dialect=this.parseDialect(t.dialect)),null!=t.strict&&(O.strict=t.strict),t.wrap&&(O.wrappers=O.wrappers.concat(t.wrap)),null!=t.bufferLength&&(O.bufferLength=t.bufferLength),O}hasWrappers(){return this.wrappers.length>0}getName(t){return this.termNames?this.termNames[t]:String(t<=this.maxNode&&this.nodeSet.types[t].name||t)}get eofTerm(){return this.maxNode+1}get topNode(){return this.nodeSet.types[this.top[1]]}dynamicPrecedence(t){let O=this.dynamicPrecedences;return null==O?0:O[t]||0}parseDialect(t){let O=Object.keys(this.dialects),e=O.map((()=>!1));if(t)for(let i of t.split(" ")){let t=O.indexOf(i);t>=0&&(e[t]=!0)}let i=null;for(let t=0;t<O.length;t++)if(!e[t])for(let e,s=this.dialects[O[t]];65535!=(e=this.data[s++]);)(i||(i=new Uint8Array(this.maxTerm+1)))[e]=1;return new Z(t,e,i)}static deserialize(t){return new A(t)}}function Y(t,O){return t[O]|t[O+1]<<16}function C(t){if(t.external){let O=t.extend?1:0;return(e,i)=>t.external(e,i)<<1|O}return t.get}const F=10,N=new Set([25,49,50,263,65,130,56,57,238,62,63,72,73,77,60,61,151,152,155,112]);function I(t){return t==F||13==t}function J(t){return t>=48&&t<=57||t>=65&&t<=70||t>=97&&t<=102}const D=new X(((t,O)=>{let e;if(t.next<0)t.acceptToken(199);else if(O.context.flags&L)I(t.next)&&t.acceptToken(198,1);else if(((e=t.peek(-1))<0||I(e))&&O.canShift(197)){let O=0;for(;32==t.next||9==t.next;)t.advance(),O++;t.next!=F&&13!=t.next&&35!=t.next||t.acceptToken(197,-O)}else I(t.next)&&t.acceptToken(196,1)}),{contextual:!0}),B=new X(((t,O)=>{let e=O.context;if(e.flags)return;let i=t.peek(-1);if(i==F||13==i){let O=0,i=0;for(;;){if(32==t.next)O++;else{if(9!=t.next)break;O+=8-O%8}t.advance(),i++}O!=e.indent&&t.next!=F&&13!=t.next&&35!=t.next&&(O<e.indent?t.acceptToken(195,-i):t.acceptToken(194))}})),L=1,H=4,K=8,M=16,tt=32;function Ot(t,O,e){this.parent=t,this.indent=O,this.flags=e,this.hash=(t?t.hash+t.hash<<8:0)+O+(O<<4)+e+(e<<6)}const et=new Ot(null,0,0);const it=new Map([[241,0],[242,H],[243,K],[244,K|H],[245,M],[246,M|H],[247,M|K],[248,M|K|H],[249,tt],[250,tt|H],[251,tt|K],[252,tt|K|H],[253,tt|M],[254,tt|M|H],[255,tt|M|K],[256,tt|M|K|H]].map((([t,O])=>[t,2|O]))),st=new class{constructor(t){this.start=t.start,this.shift=t.shift||E,this.reduce=t.reduce||E,this.reuse=t.reuse||E,this.hash=t.hash||(()=>0),this.strict=!1!==t.strict}}({start:et,reduce:(t,O,e,i)=>t.flags&L&&N.has(O)||(71==O||72==O)&&2&t.flags?t.parent:t,shift:(t,O,e,i)=>194==O?new Ot(t,function(t){let O=0;for(let e=0;e<t.length;e++)O+=9==t.charCodeAt(e)?8-O%8:1;return O}(i.read(i.pos,e.pos)),0):195==O?t.parent:24==O||55==O||59==O||3==O?new Ot(t,0,L):it.has(O)?new Ot(t,0,it.get(O)|t.flags&L):t,hash:t=>t.hash}),nt=new X((t=>{for(let O=0;O<5;O++){if(t.next!="print".charCodeAt(O))return;t.advance()}if(!/\w/.test(String.fromCharCode(t.next)))for(let O=0;;O++){let e=t.peek(O);if(32!=e&&9!=e)return void(40!=e&&46!=e&&e!=F&&13!=e&&35!=e&&t.acceptToken(1))}})),rt=new X(((t,O)=>{let{flags:e}=O.context,i=e&H?34:39,s=(e&K)>0,n=!(e&M),r=(e&tt)>0,a=t.pos;for(;!(t.next<0);)if(r&&123==t.next){if(123!=t.peek(1)){if(t.pos==a)return void t.acceptToken(3,1);break}t.advance(2)}else{if(n&&92==t.next){if(t.pos==a){t.advance();let O=t.next;return O>=0&&(t.advance(),at(t,O)),void t.acceptToken(2)}break}if(t.next==i&&(!s||t.peek(1)==i&&t.peek(2)==i)){if(t.pos==a)return void t.acceptToken(201,s?3:1);break}if(t.next==F){if(s)t.advance();else if(t.pos==a)return void t.acceptToken(201);break}t.advance()}t.pos>a&&t.acceptToken(200)}));function at(t,O){if(111==O)for(let O=0;O<2&&t.next>=48&&t.next<=55;O++)t.advance();else if(120==O)for(let O=0;O<2&&J(t.next);O++)t.advance();else if(117==O)for(let O=0;O<4&&J(t.next);O++)t.advance();else if(85==O)for(let O=0;O<8&&J(t.next);O++)t.advance();else if(78==O&&123==t.next){for(t.advance();t.next>=0&&125!=t.next&&39!=t.next&&34!=t.next&&t.next!=F;)t.advance();125==t.next&&t.advance()}}const ot=a({'async "*" "**" FormatConversion FormatSpec':o.modifier,"for while if elif else try except finally return raise break continue with pass assert await yield match case":o.controlKeyword,"in not and or is del":o.operatorKeyword,"from def class global nonlocal lambda":o.definitionKeyword,import:o.moduleKeyword,"with as print":o.keyword,Boolean:o.bool,None:o.null,VariableName:o.variableName,"CallExpression/VariableName":o.function(o.variableName),"FunctionDefinition/VariableName":o.function(o.definition(o.variableName)),"ClassDefinition/VariableName":o.definition(o.className),PropertyName:o.propertyName,"CallExpression/MemberExpression/PropertyName":o.function(o.propertyName),Comment:o.lineComment,Number:o.number,String:o.string,FormatString:o.special(o.string),Escape:o.escape,UpdateOp:o.updateOperator,"ArithOp!":o.arithmeticOperator,BitOp:o.bitwiseOperator,CompareOp:o.compareOperator,AssignOp:o.definitionOperator,Ellipsis:o.punctuation,At:o.meta,"( )":o.paren,"[ ]":o.squareBracket,"{ }":o.brace,".":o.derefOperator,", ;":o.separator}),ht={__proto__:null,await:44,or:54,and:56,in:60,not:62,is:64,if:70,else:72,lambda:76,yield:94,from:96,async:102,for:104,None:162,True:164,False:164,del:178,pass:182,break:186,continue:190,return:194,raise:202,import:206,as:208,global:212,nonlocal:214,assert:218,type:223,elif:236,while:240,try:246,except:248,finally:250,with:254,def:258,class:268,match:279,case:285},lt=A.deserialize({version:14,states:"##jO`QeOOP$}OSOOO&WQtO'#HUOOQS'#Co'#CoOOQS'#Cp'#CpO'vQdO'#CnO*UQtO'#HTOOQS'#HU'#HUOOQS'#DU'#DUOOQS'#HT'#HTO*rQdO'#D_O+VQdO'#DfO+gQdO'#DjO+zOWO'#DuO,VOWO'#DvO.[QtO'#GuOOQS'#Gu'#GuO'vQdO'#GtO0ZQtO'#GtOOQS'#Eb'#EbO0rQdO'#EcOOQS'#Gs'#GsO0|QdO'#GrOOQV'#Gr'#GrO1XQdO'#FYOOQS'#G^'#G^O1^QdO'#FXOOQV'#IS'#ISOOQV'#Gq'#GqOOQV'#Fq'#FqQ`QeOOO'vQdO'#CqO1lQdO'#C}O1sQdO'#DRO2RQdO'#HYO2cQtO'#EVO'vQdO'#EWOOQS'#EY'#EYOOQS'#E['#E[OOQS'#E^'#E^O2wQdO'#E`O3_QdO'#EdO3rQdO'#EfO3zQtO'#EfO1XQdO'#EiO0rQdO'#ElO1XQdO'#EnO0rQdO'#EtO0rQdO'#EwO4VQdO'#EyO4^QdO'#FOO4iQdO'#EzO0rQdO'#FOO1XQdO'#FQO1XQdO'#FVO4nQdO'#F[P4uOdO'#GpPOOO)CBd)CBdOOQS'#Ce'#CeOOQS'#Cf'#CfOOQS'#Cg'#CgOOQS'#Ch'#ChOOQS'#Ci'#CiOOQS'#Cj'#CjOOQS'#Cl'#ClO'vQdO,59OO'vQdO,59OO'vQdO,59OO'vQdO,59OO'vQdO,59OO'vQdO,59OO5TQdO'#DoOOQS,5:Y,5:YO5hQdO'#HdOOQS,5:],5:]O5uQ!fO,5:]O5zQtO,59YO1lQdO,59bO1lQdO,59bO1lQdO,59bO8jQdO,59bO8oQdO,59bO8vQdO,59jO8}QdO'#HTO:TQdO'#HSOOQS'#HS'#HSOOQS'#D['#D[O:lQdO,59aO'vQdO,59aO:zQdO,59aOOQS,59y,59yO;PQdO,5:RO'vQdO,5:ROOQS,5:Q,5:QO;_QdO,5:QO;dQdO,5:XO'vQdO,5:XO'vQdO,5:VOOQS,5:U,5:UO;uQdO,5:UO;zQdO,5:WOOOW'#Fy'#FyO<POWO,5:aOOQS,5:a,5:aO<[QdO'#HwOOOW'#Dw'#DwOOOW'#Fz'#FzO<lOWO,5:bOOQS,5:b,5:bOOQS'#F}'#F}O<zQtO,5:iO?lQtO,5=`O@VQ#xO,5=`O@vQtO,5=`OOQS,5:},5:}OA_QeO'#GWOBqQdO,5;^OOQV,5=^,5=^OB|QtO'#IPOCkQdO,5;tOOQS-E:[-E:[OOQV,5;s,5;sO4dQdO'#FQOOQV-E9o-E9oOCsQtO,59]OEzQtO,59iOFeQdO'#HVOFpQdO'#HVO1XQdO'#HVOF{QdO'#DTOGTQdO,59mOGYQdO'#HZO'vQdO'#HZO0rQdO,5=tOOQS,5=t,5=tO0rQdO'#EROOQS'#ES'#ESOGwQdO'#GPOHXQdO,58|OHXQdO,58|O*xQdO,5:oOHgQtO'#H]OOQS,5:r,5:rOOQS,5:z,5:zOHzQdO,5;OOI]QdO'#IOO1XQdO'#H}OOQS,5;Q,5;QOOQS'#GT'#GTOIqQtO,5;QOJPQdO,5;QOJUQdO'#IQOOQS,5;T,5;TOJdQdO'#H|OOQS,5;W,5;WOJuQdO,5;YO4iQdO,5;`O4iQdO,5;cOJ}QtO'#ITO'vQdO'#ITOKXQdO,5;eO4VQdO,5;eO0rQdO,5;jO1XQdO,5;lOK^QeO'#EuOLjQgO,5;fO!!kQdO'#IUO4iQdO,5;jO!!vQdO,5;lO!#OQdO,5;qO!#ZQtO,5;vO'vQdO,5;vPOOO,5=[,5=[P!#bOSO,5=[P!#jOdO,5=[O!&bQtO1G.jO!&iQtO1G.jO!)YQtO1G.jO!)dQtO1G.jO!+}QtO1G.jO!,bQtO1G.jO!,uQdO'#HcO!-TQtO'#GuO0rQdO'#HcO!-_QdO'#HbOOQS,5:Z,5:ZO!-gQdO,5:ZO!-lQdO'#HeO!-wQdO'#HeO!.[QdO,5>OOOQS'#Ds'#DsOOQS1G/w1G/wOOQS1G.|1G.|O!/[QtO1G.|O!/cQtO1G.|O1lQdO1G.|O!0OQdO1G/UOOQS'#DZ'#DZO0rQdO,59tOOQS1G.{1G.{O!0VQdO1G/eO!0gQdO1G/eO!0oQdO1G/fO'vQdO'#H[O!0tQdO'#H[O!0yQtO1G.{O!1ZQdO,59iO!2aQdO,5=zO!2qQdO,5=zO!2yQdO1G/mO!3OQtO1G/mOOQS1G/l1G/lO!3`QdO,5=uO!4VQdO,5=uO0rQdO1G/qO!4tQdO1G/sO!4yQtO1G/sO!5ZQtO1G/qOOQS1G/p1G/pOOQS1G/r1G/rOOOW-E9w-E9wOOQS1G/{1G/{O!5kQdO'#HxO0rQdO'#HxO!5|QdO,5>cOOOW-E9x-E9xOOQS1G/|1G/|OOQS-E9{-E9{O!6[Q#xO1G2zO!6{QtO1G2zO'vQdO,5<jOOQS,5<j,5<jOOQS-E9|-E9|OOQS,5<r,5<rOOQS-E:U-E:UOOQV1G0x1G0xO1XQdO'#GRO!7dQtO,5>kOOQS1G1`1G1`O!8RQdO1G1`OOQS'#DV'#DVO0rQdO,5=qOOQS,5=q,5=qO!8WQdO'#FrO!8cQdO,59oO!8kQdO1G/XO!8uQtO,5=uOOQS1G3`1G3`OOQS,5:m,5:mO!9fQdO'#GtOOQS,5<k,5<kOOQS-E9}-E9}O!9wQdO1G.hOOQS1G0Z1G0ZO!:VQdO,5=wO!:gQdO,5=wO0rQdO1G0jO0rQdO1G0jO!:xQdO,5>jO!;ZQdO,5>jO1XQdO,5>jO!;lQdO,5>iOOQS-E:R-E:RO!;qQdO1G0lO!;|QdO1G0lO!<RQdO,5>lO!<aQdO,5>lO!<oQdO,5>hO!=VQdO,5>hO!=hQdO'#EpO0rQdO1G0tO!=sQdO1G0tO!=xQgO1G0zO!AvQgO1G0}O!EqQdO,5>oO!E{QdO,5>oO!FTQtO,5>oO0rQdO1G1PO!F_QdO1G1PO4iQdO1G1UO!!vQdO1G1WOOQV,5;a,5;aO!FdQfO,5;aO!FiQgO1G1QO!JjQdO'#GZO4iQdO1G1QO4iQdO1G1QO!JzQdO,5>pO!KXQdO,5>pO1XQdO,5>pOOQV1G1U1G1UO!KaQdO'#FSO!KrQ!fO1G1WO!KzQdO1G1WOOQV1G1]1G1]O4iQdO1G1]O!LPQdO1G1]O!LXQdO'#F^OOQV1G1b1G1bO!#ZQtO1G1bPOOO1G2v1G2vP!L^OSO1G2vOOQS,5=},5=}OOQS'#Dp'#DpO0rQdO,5=}O!LfQdO,5=|O!LyQdO,5=|OOQS1G/u1G/uO!MRQdO,5>PO!McQdO,5>PO!MkQdO,5>PO!NOQdO,5>PO!N`QdO,5>POOQS1G3j1G3jOOQS7+$h7+$hO!8kQdO7+$pO#!RQdO1G.|O#!YQdO1G.|OOQS1G/`1G/`OOQS,5<`,5<`O'vQdO,5<`OOQS7+%P7+%PO#!aQdO7+%POOQS-E9r-E9rOOQS7+%Q7+%QO#!qQdO,5=vO'vQdO,5=vOOQS7+$g7+$gO#!vQdO7+%PO##OQdO7+%QO##TQdO1G3fOOQS7+%X7+%XO##eQdO1G3fO##mQdO7+%XOOQS,5<_,5<_O'vQdO,5<_O##rQdO1G3aOOQS-E9q-E9qO#$iQdO7+%]OOQS7+%_7+%_O#$wQdO1G3aO#%fQdO7+%_O#%kQdO1G3gO#%{QdO1G3gO#&TQdO7+%]O#&YQdO,5>dO#&sQdO,5>dO#&sQdO,5>dOOQS'#Dx'#DxO#'UO&jO'#DzO#'aO`O'#HyOOOW1G3}1G3}O#'fQdO1G3}O#'nQdO1G3}O#'yQ#xO7+(fO#(jQtO1G2UP#)TQdO'#GOOOQS,5<m,5<mOOQS-E:P-E:POOQS7+&z7+&zOOQS1G3]1G3]OOQS,5<^,5<^OOQS-E9p-E9pOOQS7+$s7+$sO#)bQdO,5=`O#){QdO,5=`O#*^QtO,5<aO#*qQdO1G3cOOQS-E9s-E9sOOQS7+&U7+&UO#+RQdO7+&UO#+aQdO,5<nO#+uQdO1G4UOOQS-E:Q-E:QO#,WQdO1G4UOOQS1G4T1G4TOOQS7+&W7+&WO#,iQdO7+&WOOQS,5<p,5<pO#,tQdO1G4WOOQS-E:S-E:SOOQS,5<l,5<lO#-SQdO1G4SOOQS-E:O-E:OO1XQdO'#EqO#-jQdO'#EqO#-uQdO'#IRO#-}QdO,5;[OOQS7+&`7+&`O0rQdO7+&`O#.SQgO7+&fO!JmQdO'#GXO4iQdO7+&fO4iQdO7+&iO#2QQtO,5<tO'vQdO,5<tO#2[QdO1G4ZOOQS-E:W-E:WO#2fQdO1G4ZO4iQdO7+&kO0rQdO7+&kOOQV7+&p7+&pO!KrQ!fO7+&rO!KzQdO7+&rO`QeO1G0{OOQV-E:X-E:XO4iQdO7+&lO4iQdO7+&lOOQV,5<u,5<uO#2nQdO,5<uO!JmQdO,5<uOOQV7+&l7+&lO#2yQgO7+&lO#6tQdO,5<vO#7PQdO1G4[OOQS-E:Y-E:YO#7^QdO1G4[O#7fQdO'#IWO#7tQdO'#IWO1XQdO'#IWOOQS'#IW'#IWO#8PQdO'#IVOOQS,5;n,5;nO#8XQdO,5;nO0rQdO'#FUOOQV7+&r7+&rO4iQdO7+&rOOQV7+&w7+&wO4iQdO7+&wO#8^QfO,5;xOOQV7+&|7+&|POOO7+(b7+(bO#8cQdO1G3iOOQS,5<c,5<cO#8qQdO1G3hOOQS-E9u-E9uO#9UQdO,5<dO#9aQdO,5<dO#9tQdO1G3kOOQS-E9v-E9vO#:UQdO1G3kO#:^QdO1G3kO#:nQdO1G3kO#:UQdO1G3kOOQS<<H[<<H[O#:yQtO1G1zOOQS<<Hk<<HkP#;WQdO'#FtO8vQdO1G3bO#;eQdO1G3bO#;jQdO<<HkOOQS<<Hl<<HlO#;zQdO7+)QOOQS<<Hs<<HsO#<[QtO1G1yP#<{QdO'#FsO#=YQdO7+)RO#=jQdO7+)RO#=rQdO<<HwO#=wQdO7+({OOQS<<Hy<<HyO#>nQdO,5<bO'vQdO,5<bOOQS-E9t-E9tOOQS<<Hw<<HwOOQS,5<g,5<gO0rQdO,5<gO#>sQdO1G4OOOQS-E9y-E9yO#?^QdO1G4OO<[QdO'#H{OOOO'#D{'#D{OOOO'#F|'#F|O#?oO&jO,5:fOOOW,5>e,5>eOOOW7+)i7+)iO#?zQdO7+)iO#@SQdO1G2zO#@mQdO1G2zP'vQdO'#FuO0rQdO<<IpO1XQdO1G2YP1XQdO'#GSO#AOQdO7+)pO#AaQdO7+)pOOQS<<Ir<<IrP1XQdO'#GUP0rQdO'#GQOOQS,5;],5;]O#ArQdO,5>mO#BQQdO,5>mOOQS1G0v1G0vOOQS<<Iz<<IzOOQV-E:V-E:VO4iQdO<<JQOOQV,5<s,5<sO4iQdO,5<sOOQV<<JQ<<JQOOQV<<JT<<JTO#BYQtO1G2`P#BdQdO'#GYO#BkQdO7+)uO#BuQgO<<JVO4iQdO<<JVOOQV<<J^<<J^O4iQdO<<J^O!KrQ!fO<<J^O#FpQgO7+&gOOQV<<JW<<JWO#FzQgO<<JWOOQV1G2a1G2aO1XQdO1G2aO#JuQdO1G2aO4iQdO<<JWO1XQdO1G2bP0rQdO'#G[O#KQQdO7+)vO#K_QdO7+)vOOQS'#FT'#FTO0rQdO,5>rO#KgQdO,5>rO#KrQdO,5>rO#K}QdO,5>qO#L`QdO,5>qOOQS1G1Y1G1YOOQS,5;p,5;pOOQV<<Jc<<JcO#LhQdO1G1dOOQS7+)T7+)TP#LmQdO'#FwO#L}QdO1G2OO#MbQdO1G2OO#MrQdO1G2OP#M}QdO'#FxO#N[QdO7+)VO#NlQdO7+)VO#NlQdO7+)VO#NtQdO7+)VO$ UQdO7+(|O8vQdO7+(|OOQSAN>VAN>VO$ oQdO<<LmOOQSAN>cAN>cO0rQdO1G1|O$!PQtO1G1|P$!ZQdO'#FvOOQS1G2R1G2RP$!hQdO'#F{O$!uQdO7+)jO$#`QdO,5>gOOOO-E9z-E9zOOOW<<MT<<MTO$#nQdO7+(fOOQSAN?[AN?[OOQS7+'t7+'tO$$XQdO<<M[OOQS,5<q,5<qO$$jQdO1G4XOOQS-E:T-E:TOOQVAN?lAN?lOOQV1G2_1G2_O4iQdOAN?qO$$xQgOAN?qOOQVAN?xAN?xO4iQdOAN?xOOQV<<JR<<JRO4iQdOAN?rO4iQdO7+'{OOQV7+'{7+'{O1XQdO7+'{OOQVAN?rAN?rOOQS7+'|7+'|O$(sQdO<<MbOOQS1G4^1G4^O0rQdO1G4^OOQS,5<w,5<wO$)QQdO1G4]OOQS-E:Z-E:ZOOQU'#G_'#G_O$)cQfO7+'OO$)nQdO'#F_O$*uQdO7+'jO$+VQdO7+'jOOQS7+'j7+'jO$+bQdO<<LqO$+rQdO<<LqO$+rQdO<<LqO$+zQdO'#H^OOQS<<Lh<<LhO$,UQdO<<LhOOQS7+'h7+'hOOQS'#D|'#D|OOOO1G4R1G4RO$,oQdO1G4RO$,wQdO1G4RP!=hQdO'#GVOOQVG25]G25]O4iQdOG25]OOQVG25dG25dOOQVG25^G25^OOQV<<Kg<<KgO4iQdO<<KgOOQS7+)x7+)xP$-SQdO'#G]OOQU-E:]-E:]OOQV<<Jj<<JjO$-vQtO'#FaOOQS'#Fc'#FcO$.WQdO'#FbO$.xQdO'#FbOOQS'#Fb'#FbO$.}QdO'#IYO$)nQdO'#FiO$)nQdO'#FiO$/fQdO'#FjO$)nQdO'#FkO$/mQdO'#IZOOQS'#IZ'#IZO$0[QdO,5;yOOQS<<KU<<KUO$0dQdO<<KUO$0tQdOANB]O$1UQdOANB]O$1^QdO'#H_OOQS'#H_'#H_O1sQdO'#DcO$1wQdO,5=xOOQSANBSANBSOOOO7+)m7+)mO$2`QdO7+)mOOQVLD*wLD*wOOQVANARANARO5uQ!fO'#GaO$2hQtO,5<SO$)nQdO'#FmOOQS,5<W,5<WOOQS'#Fd'#FdO$3YQdO,5;|O$3_QdO,5;|OOQS'#Fg'#FgO$)nQdO'#G`O$4PQdO,5<QO$4kQdO,5>tO$4{QdO,5>tO1XQdO,5<PO$5^QdO,5<TO$5cQdO,5<TO$)nQdO'#I[O$5hQdO'#I[O$5mQdO,5<UOOQS,5<V,5<VO'vQdO'#FpOOQU1G1e1G1eO4iQdO1G1eOOQSAN@pAN@pO$5rQdOG27wO$6SQdO,59}OOQS1G3d1G3dOOOO<<MX<<MXOOQS,5<{,5<{OOQS-E:_-E:_O$6XQtO'#FaO$6`QdO'#I]O$6nQdO'#I]O$6vQdO,5<XOOQS1G1h1G1hO$6{QdO1G1hO$7QQdO,5<zOOQS-E:^-E:^O$7lQdO,5=OO$8TQdO1G4`OOQS-E:b-E:bOOQS1G1k1G1kOOQS1G1o1G1oO$8eQdO,5>vO$)nQdO,5>vOOQS1G1p1G1pO$8sQtO,5<[OOQU7+'P7+'PO$+zQdO1G/iO$)nQdO,5<YO$8zQdO,5>wO$9RQdO,5>wOOQS1G1s1G1sOOQS7+'S7+'SP$)nQdO'#GdO$9ZQdO1G4bO$9eQdO1G4bO$9mQdO1G4bOOQS7+%T7+%TO$9{QdO1G1tO$:ZQtO'#FaO$:bQdO,5<}OOQS,5<},5<}O$:pQdO1G4cOOQS-E:a-E:aO$)nQdO,5<|O$:wQdO,5<|O$:|QdO7+)|OOQS-E:`-E:`O$;WQdO7+)|O$)nQdO,5<ZP$)nQdO'#GcO$;`QdO1G2hO$)nQdO1G2hP$;nQdO'#GbO$;uQdO<<MhO$<PQdO1G1uO$<_QdO7+(SO8vQdO'#C}O8vQdO,59bO8vQdO,59bO8vQdO,59bO$<mQtO,5=`O8vQdO1G.|O0rQdO1G/XO0rQdO7+$pP$=QQdO'#GOO'vQdO'#GtO$=_QdO,59bO$=dQdO,59bO$=kQdO,59mO$=pQdO1G/UO1sQdO'#DRO8vQdO,59j",stateData:"$>Z~O%cOS%^OSSOS%]PQ~OPdOVaOfoOhYOopOs!POvqO!PrO!Q{O!T!SO!U!RO!XZO!][O!h`O!r`O!s`O!t`O!{tO!}uO#PvO#RwO#TxO#XyO#ZzO#^|O#_|O#a}O#c!OO#l!QO#o!TO#s!UO#u!VO#z!WO#}hO$P!XO%oRO%pRO%tSO%uWO&Z]O&[]O&]]O&^]O&_]O&`]O&a]O&b]O&c^O&d^O&e^O&f^O&g^O&h^O&i^O&j^O~O%]!YO~OV!aO_!aOa!bOh!iO!X!kO!f!mO%j![O%k!]O%l!^O%m!_O%n!_O%o!`O%p!`O%q!aO%r!aO%s!aO~Ok%xXl%xXm%xXn%xXo%xXp%xXs%xXz%xX{%xX!x%xX#g%xX%[%xX%_%xX%z%xXg%xX!T%xX!U%xX%{%xX!W%xX![%xX!Q%xX#[%xXt%xX!m%xX~P%SOfoOhYO!XZO!][O!h`O!r`O!s`O!t`O%oRO%pRO%tSO%uWO&Z]O&[]O&]]O&^]O&_]O&`]O&a]O&b]O&c^O&d^O&e^O&f^O&g^O&h^O&i^O&j^O~Oz%wX{%wX#g%wX%[%wX%_%wX%z%wX~Ok!pOl!qOm!oOn!oOo!rOp!sOs!tO!x%wX~P)pOV!zOg!|Oo0cOv0qO!PrO~P'vOV#OOo0cOv0qO!W#PO~P'vOV#SOa#TOo0cOv0qO![#UO~P'vOQ#XO%`#XO%a#ZO~OQ#^OR#[O%`#^O%a#`O~OV%iX_%iXa%iXh%iXk%iXl%iXm%iXn%iXo%iXp%iXs%iXz%iX!X%iX!f%iX%j%iX%k%iX%l%iX%m%iX%n%iX%o%iX%p%iX%q%iX%r%iX%s%iXg%iX!T%iX!U%iX~O&Z]O&[]O&]]O&^]O&_]O&`]O&a]O&b]O&c^O&d^O&e^O&f^O&g^O&h^O&i^O&j^O{%iX!x%iX#g%iX%[%iX%_%iX%z%iX%{%iX!W%iX![%iX!Q%iX#[%iXt%iX!m%iX~P,eOz#dO{%hX!x%hX#g%hX%[%hX%_%hX%z%hX~Oo0cOv0qO~P'vO#g#gO%[#iO%_#iO~O%uWO~O!T#nO#u!VO#z!WO#}hO~OopO~P'vOV#sOa#tO%uWO{wP~OV#xOo0cOv0qO!Q#yO~P'vO{#{O!x$QO%z#|O#g!yX%[!yX%_!yX~OV#xOo0cOv0qO#g#SX%[#SX%_#SX~P'vOo0cOv0qO#g#WX%[#WX%_#WX~P'vOh$WO%uWO~O!f$YO!r$YO%uWO~OV$eO~P'vO!U$gO#s$hO#u$iO~O{$jO~OV$qO~P'vOS$sO%[$rO%_$rO%c$tO~OV$}Oa$}Og%POo0cOv0qO~P'vOo0cOv0qO{%SO~P'vO&Y%UO~Oa!bOh!iO!X!kO!f!mOVba_bakbalbambanbaobapbasbazba{ba!xba#gba%[ba%_ba%jba%kba%lba%mba%nba%oba%pba%qba%rba%sba%zbagba!Tba!Uba%{ba!Wba![ba!Qba#[batba!mba~On%ZO~Oo%ZO~P'vOo0cO~P'vOk0eOl0fOm0dOn0dOo0mOp0nOs0rOg%wX!T%wX!U%wX%{%wX!W%wX![%wX!Q%wX#[%wX!m%wX~P)pO%{%]Og%vXz%vX!T%vX!U%vX!W%vX{%vX~Og%_Oz%`O!T%dO!U%cO~Og%_O~Oz%gO!T%dO!U%cO!W&SX~O!W%kO~Oz%lO{%nO!T%dO!U%cO![%}X~O![%rO~O![%sO~OQ#XO%`#XO%a%uO~OV%wOo0cOv0qO!PrO~P'vOQ#^OR#[O%`#^O%a%zO~OV!qa_!qaa!qah!qak!qal!qam!qan!qao!qap!qas!qaz!qa{!qa!X!qa!f!qa!x!qa#g!qa%[!qa%_!qa%j!qa%k!qa%l!qa%m!qa%n!qa%o!qa%p!qa%q!qa%r!qa%s!qa%z!qag!qa!T!qa!U!qa%{!qa!W!qa![!qa!Q!qa#[!qat!qa!m!qa~P#yOz%|O{%ha!x%ha#g%ha%[%ha%_%ha%z%ha~P%SOV&OOopOvqO{%ha!x%ha#g%ha%[%ha%_%ha%z%ha~P'vOz%|O{%ha!x%ha#g%ha%[%ha%_%ha%z%ha~OPdOVaOopOvqO!PrO!Q{O!{tO!}uO#PvO#RwO#TxO#XyO#ZzO#^|O#_|O#a}O#c!OO#g$zX%[$zX%_$zX~P'vO#g#gO%[&TO%_&TO~O!f&UOh&sX%[&sXz&sX#[&sX#g&sX%_&sX#Z&sXg&sX~Oh!iO%[&WO~Okealeameaneaoeapeaseazea{ea!xea#gea%[ea%_ea%zeagea!Tea!Uea%{ea!Wea![ea!Qea#[eatea!mea~P%SOsqazqa{qa#gqa%[qa%_qa%zqa~Ok!pOl!qOm!oOn!oOo!rOp!sO!xqa~PEcO%z&YOz%yX{%yX~O%uWOz%yX{%yX~Oz&]O{wX~O{&_O~Oz%lO#g%}X%[%}X%_%}Xg%}X{%}X![%}X!m%}X%z%}X~OV0lOo0cOv0qO!PrO~P'vO%z#|O#gUa%[Ua%_Ua~Oz&hO#g&PX%[&PX%_&PXn&PX~P%SOz&kO!Q&jO#g#Wa%[#Wa%_#Wa~Oz&lO#[&nO#g&rX%[&rX%_&rXg&rX~O!f$YO!r$YO#Z&qO%uWO~O#Z&qO~Oz&sO#g&tX%[&tX%_&tX~Oz&uO#g&pX%[&pX%_&pX{&pX~O!X&wO%z&xO~Oz&|On&wX~P%SOn'PO~OPdOVaOopOvqO!PrO!Q{O!{tO!}uO#PvO#RwO#TxO#XyO#ZzO#^|O#_|O#a}O#c!OO%['UO~P'vOt'YO#p'WO#q'XOP#naV#naf#nah#nao#nas#nav#na!P#na!Q#na!T#na!U#na!X#na!]#na!h#na!r#na!s#na!t#na!{#na!}#na#P#na#R#na#T#na#X#na#Z#na#^#na#_#na#a#na#c#na#l#na#o#na#s#na#u#na#z#na#}#na$P#na%X#na%o#na%p#na%t#na%u#na&Z#na&[#na&]#na&^#na&_#na&`#na&a#na&b#na&c#na&d#na&e#na&f#na&g#na&h#na&i#na&j#na%Z#na%_#na~Oz'ZO#[']O{&xX~Oh'_O!X&wO~Oh!iO{$jO!X&wO~O{'eO~P%SO%['hO%_'hO~OS'iO%['hO%_'hO~OV!aO_!aOa!bOh!iO!X!kO!f!mO%l!^O%m!_O%n!_O%o!`O%p!`O%q!aO%r!aO%s!aOkWilWimWinWioWipWisWizWi{Wi!xWi#gWi%[Wi%_Wi%jWi%zWigWi!TWi!UWi%{Wi!WWi![Wi!QWi#[WitWi!mWi~O%k!]O~P!#uO%kWi~P!#uOV!aO_!aOa!bOh!iO!X!kO!f!mO%o!`O%p!`O%q!aO%r!aO%s!aOkWilWimWinWioWipWisWizWi{Wi!xWi#gWi%[Wi%_Wi%jWi%kWi%lWi%zWigWi!TWi!UWi%{Wi!WWi![Wi!QWi#[WitWi!mWi~O%m!_O%n!_O~P!&pO%mWi%nWi~P!&pOa!bOh!iO!X!kO!f!mOkWilWimWinWioWipWisWizWi{Wi!xWi#gWi%[Wi%_Wi%jWi%kWi%lWi%mWi%nWi%oWi%pWi%zWigWi!TWi!UWi%{Wi!WWi![Wi!QWi#[WitWi!mWi~OV!aO_!aO%q!aO%r!aO%s!aO~P!)nOVWi_Wi%qWi%rWi%sWi~P!)nO!T%dO!U%cOg&VXz&VX~O%z'kO%{'kO~P,eOz'mOg&UX~Og'oO~Oz'pO{'rO!W&XX~Oo0cOv0qOz'pO{'sO!W&XX~P'vO!W'uO~Om!oOn!oOo!rOp!sOkjisjizji{ji!xji#gji%[ji%_ji%zji~Ol!qO~P!.aOlji~P!.aOk0eOl0fOm0dOn0dOo0mOp0nO~Ot'wO~P!/jOV'|Og'}Oo0cOv0qO~P'vOg'}Oz(OO~Og(QO~O!U(SO~Og(TOz(OO!T%dO!U%cO~P%SOk0eOl0fOm0dOn0dOo0mOp0nOgqa!Tqa!Uqa%{qa!Wqa![qa!Qqa#[qatqa!mqa~PEcOV'|Oo0cOv0qO!W&Sa~P'vOz(WO!W&Sa~O!W(XO~Oz(WO!T%dO!U%cO!W&Sa~P%SOV(]Oo0cOv0qO![%}a#g%}a%[%}a%_%}ag%}a{%}a!m%}a%z%}a~P'vOz(^O![%}a#g%}a%[%}a%_%}ag%}a{%}a!m%}a%z%}a~O![(aO~Oz(^O!T%dO!U%cO![%}a~P%SOz(dO!T%dO!U%cO![&Ta~P%SOz(gO{&lX![&lX!m&lX%z&lX~O{(kO![(mO!m(nO%z(jO~OV&OOopOvqO{%hi!x%hi#g%hi%[%hi%_%hi%z%hi~P'vOz(pO{%hi!x%hi#g%hi%[%hi%_%hi%z%hi~O!f&UOh&sa%[&saz&sa#[&sa#g&sa%_&sa#Z&sag&sa~O%[(uO~OV#sOa#tO%uWO~Oz&]O{wa~OopOvqO~P'vOz(^O#g%}a%[%}a%_%}ag%}a{%}a![%}a!m%}a%z%}a~P%SOz(zO#g%hX%[%hX%_%hX%z%hX~O%z#|O#gUi%[Ui%_Ui~O#g&Pa%[&Pa%_&Pan&Pa~P'vOz(}O#g&Pa%[&Pa%_&Pan&Pa~O%uWO#g&ra%[&ra%_&rag&ra~Oz)SO#g&ra%[&ra%_&rag&ra~Og)VO~OV)WOh$WO%uWO~O#Z)XO~O%uWO#g&ta%[&ta%_&ta~Oz)ZO#g&ta%[&ta%_&ta~Oo0cOv0qO#g&pa%[&pa%_&pa{&pa~P'vOz)^O#g&pa%[&pa%_&pa{&pa~OV)`Oa)`O%uWO~O%z)eO~Ot)hO#j)gOP#hiV#hif#hih#hio#his#hiv#hi!P#hi!Q#hi!T#hi!U#hi!X#hi!]#hi!h#hi!r#hi!s#hi!t#hi!{#hi!}#hi#P#hi#R#hi#T#hi#X#hi#Z#hi#^#hi#_#hi#a#hi#c#hi#l#hi#o#hi#s#hi#u#hi#z#hi#}#hi$P#hi%X#hi%o#hi%p#hi%t#hi%u#hi&Z#hi&[#hi&]#hi&^#hi&_#hi&`#hi&a#hi&b#hi&c#hi&d#hi&e#hi&f#hi&g#hi&h#hi&i#hi&j#hi%Z#hi%_#hi~Ot)iOP#kiV#kif#kih#kio#kis#kiv#ki!P#ki!Q#ki!T#ki!U#ki!X#ki!]#ki!h#ki!r#ki!s#ki!t#ki!{#ki!}#ki#P#ki#R#ki#T#ki#X#ki#Z#ki#^#ki#_#ki#a#ki#c#ki#l#ki#o#ki#s#ki#u#ki#z#ki#}#ki$P#ki%X#ki%o#ki%p#ki%t#ki%u#ki&Z#ki&[#ki&]#ki&^#ki&_#ki&`#ki&a#ki&b#ki&c#ki&d#ki&e#ki&f#ki&g#ki&h#ki&i#ki&j#ki%Z#ki%_#ki~OV)kOn&wa~P'vOz)lOn&wa~Oz)lOn&wa~P%SOn)pO~O%Y)tO~Ot)wO#p'WO#q)vOP#niV#nif#nih#nio#nis#niv#ni!P#ni!Q#ni!T#ni!U#ni!X#ni!]#ni!h#ni!r#ni!s#ni!t#ni!{#ni!}#ni#P#ni#R#ni#T#ni#X#ni#Z#ni#^#ni#_#ni#a#ni#c#ni#l#ni#o#ni#s#ni#u#ni#z#ni#}#ni$P#ni%X#ni%o#ni%p#ni%t#ni%u#ni&Z#ni&[#ni&]#ni&^#ni&_#ni&`#ni&a#ni&b#ni&c#ni&d#ni&e#ni&f#ni&g#ni&h#ni&i#ni&j#ni%Z#ni%_#ni~OV)zOo0cOv0qO{$jO~P'vOo0cOv0qO{&xa~P'vOz*OO{&xa~OV*SOa*TOg*WO%q*UO%uWO~O{$jO&{*YO~Oh'_O~Oh!iO{$jO~O%[*_O~O%[*aO%_*aO~OV$}Oa$}Oo0cOv0qOg&Ua~P'vOz*dOg&Ua~Oo0cOv0qO{*gO!W&Xa~P'vOz*hO!W&Xa~Oo0cOv0qOz*hO{*kO!W&Xa~P'vOo0cOv0qOz*hO!W&Xa~P'vOz*hO{*kO!W&Xa~Om0dOn0dOo0mOp0nOgjikjisjizji!Tji!Uji%{ji!Wji{ji![ji#gji%[ji%_ji!Qji#[jitji!mji%zji~Ol0fO~P!NkOlji~P!NkOV'|Og*pOo0cOv0qO~P'vOn*rO~Og*pOz*tO~Og*uO~OV'|Oo0cOv0qO!W&Si~P'vOz*vO!W&Si~O!W*wO~OV(]Oo0cOv0qO![%}i#g%}i%[%}i%_%}ig%}i{%}i!m%}i%z%}i~P'vOz*zO!T%dO!U%cO![&Ti~Oz*}O![%}i#g%}i%[%}i%_%}ig%}i{%}i!m%}i%z%}i~O![+OO~Oa+QOo0cOv0qO![&Ti~P'vOz*zO![&Ti~O![+SO~OV+UOo0cOv0qO{&la![&la!m&la%z&la~P'vOz+VO{&la![&la!m&la%z&la~O!]+YO&n+[O![!nX~O![+^O~O{(kO![+_O~O{(kO![+_O!m+`O~OV&OOopOvqO{%hq!x%hq#g%hq%[%hq%_%hq%z%hq~P'vOz$ri{$ri!x$ri#g$ri%[$ri%_$ri%z$ri~P%SOV&OOopOvqO~P'vOV&OOo0cOv0qO#g%ha%[%ha%_%ha%z%ha~P'vOz+aO#g%ha%[%ha%_%ha%z%ha~Oz$ia#g$ia%[$ia%_$ian$ia~P%SO#g&Pi%[&Pi%_&Pin&Pi~P'vOz+dO#g#Wq%[#Wq%_#Wq~O#[+eOz$va#g$va%[$va%_$vag$va~O%uWO#g&ri%[&ri%_&rig&ri~Oz+gO#g&ri%[&ri%_&rig&ri~OV+iOh$WO%uWO~O%uWO#g&ti%[&ti%_&ti~Oo0cOv0qO#g&pi%[&pi%_&pi{&pi~P'vO{#{Oz#eX!W#eX~Oz+mO!W&uX~O!W+oO~Ot+rO#j)gOP#hqV#hqf#hqh#hqo#hqs#hqv#hq!P#hq!Q#hq!T#hq!U#hq!X#hq!]#hq!h#hq!r#hq!s#hq!t#hq!{#hq!}#hq#P#hq#R#hq#T#hq#X#hq#Z#hq#^#hq#_#hq#a#hq#c#hq#l#hq#o#hq#s#hq#u#hq#z#hq#}#hq$P#hq%X#hq%o#hq%p#hq%t#hq%u#hq&Z#hq&[#hq&]#hq&^#hq&_#hq&`#hq&a#hq&b#hq&c#hq&d#hq&e#hq&f#hq&g#hq&h#hq&i#hq&j#hq%Z#hq%_#hq~On$|az$|a~P%SOV)kOn&wi~P'vOz+yOn&wi~Oz,TO{$jO#[,TO~O#q,VOP#nqV#nqf#nqh#nqo#nqs#nqv#nq!P#nq!Q#nq!T#nq!U#nq!X#nq!]#nq!h#nq!r#nq!s#nq!t#nq!{#nq!}#nq#P#nq#R#nq#T#nq#X#nq#Z#nq#^#nq#_#nq#a#nq#c#nq#l#nq#o#nq#s#nq#u#nq#z#nq#}#nq$P#nq%X#nq%o#nq%p#nq%t#nq%u#nq&Z#nq&[#nq&]#nq&^#nq&_#nq&`#nq&a#nq&b#nq&c#nq&d#nq&e#nq&f#nq&g#nq&h#nq&i#nq&j#nq%Z#nq%_#nq~O#[,WOz%Oa{%Oa~Oo0cOv0qO{&xi~P'vOz,YO{&xi~O{#{O%z,[Og&zXz&zX~O%uWOg&zXz&zX~Oz,`Og&yX~Og,bO~O%Y,eO~O!T%dO!U%cOg&Viz&Vi~OV$}Oa$}Oo0cOv0qOg&Ui~P'vO{,hOz$la!W$la~Oo0cOv0qO{,iOz$la!W$la~P'vOo0cOv0qO{*gO!W&Xi~P'vOz,lO!W&Xi~Oo0cOv0qOz,lO!W&Xi~P'vOz,lO{,oO!W&Xi~Og$hiz$hi!W$hi~P%SOV'|Oo0cOv0qO~P'vOn,qO~OV'|Og,rOo0cOv0qO~P'vOV'|Oo0cOv0qO!W&Sq~P'vOz$gi![$gi#g$gi%[$gi%_$gig$gi{$gi!m$gi%z$gi~P%SOV(]Oo0cOv0qO~P'vOa+QOo0cOv0qO![&Tq~P'vOz,sO![&Tq~O![,tO~OV(]Oo0cOv0qO![%}q#g%}q%[%}q%_%}qg%}q{%}q!m%}q%z%}q~P'vO{,uO~OV+UOo0cOv0qO{&li![&li!m&li%z&li~P'vOz,zO{&li![&li!m&li%z&li~O!]+YO&n+[O![!na~O{(kO![,}O~OV&OOo0cOv0qO#g%hi%[%hi%_%hi%z%hi~P'vOz-OO#g%hi%[%hi%_%hi%z%hi~O%uWO#g&rq%[&rq%_&rqg&rq~Oz-RO#g&rq%[&rq%_&rqg&rq~OV)`Oa)`O%uWO!W&ua~Oz-TO!W&ua~On$|iz$|i~P%SOV)kO~P'vOV)kOn&wq~P'vOt-XOP#myV#myf#myh#myo#mys#myv#my!P#my!Q#my!T#my!U#my!X#my!]#my!h#my!r#my!s#my!t#my!{#my!}#my#P#my#R#my#T#my#X#my#Z#my#^#my#_#my#a#my#c#my#l#my#o#my#s#my#u#my#z#my#}#my$P#my%X#my%o#my%p#my%t#my%u#my&Z#my&[#my&]#my&^#my&_#my&`#my&a#my&b#my&c#my&d#my&e#my&f#my&g#my&h#my&i#my&j#my%Z#my%_#my~O%Z-]O%_-]O~P`O#q-^OP#nyV#nyf#nyh#nyo#nys#nyv#ny!P#ny!Q#ny!T#ny!U#ny!X#ny!]#ny!h#ny!r#ny!s#ny!t#ny!{#ny!}#ny#P#ny#R#ny#T#ny#X#ny#Z#ny#^#ny#_#ny#a#ny#c#ny#l#ny#o#ny#s#ny#u#ny#z#ny#}#ny$P#ny%X#ny%o#ny%p#ny%t#ny%u#ny&Z#ny&[#ny&]#ny&^#ny&_#ny&`#ny&a#ny&b#ny&c#ny&d#ny&e#ny&f#ny&g#ny&h#ny&i#ny&j#ny%Z#ny%_#ny~Oz-aO{$jO#[-aO~Oo0cOv0qO{&xq~P'vOz-dO{&xq~O%z,[Og&zaz&za~O{#{Og&zaz&za~OV*SOa*TO%q*UO%uWOg&ya~Oz-hOg&ya~O$S-lO~OV$}Oa$}Oo0cOv0qO~P'vOo0cOv0qO{-mOz$li!W$li~P'vOo0cOv0qOz$li!W$li~P'vO{-mOz$li!W$li~Oo0cOv0qO{*gO~P'vOo0cOv0qO{*gO!W&Xq~P'vOz-pO!W&Xq~Oo0cOv0qOz-pO!W&Xq~P'vOs-sO!T%dO!U%cOg&Oq!W&Oq![&Oqz&Oq~P!/jOa+QOo0cOv0qO![&Ty~P'vOz$ji![$ji~P%SOa+QOo0cOv0qO~P'vOV+UOo0cOv0qO~P'vOV+UOo0cOv0qO{&lq![&lq!m&lq%z&lq~P'vO{(kO![-xO!m-yO%z-wO~OV&OOo0cOv0qO#g%hq%[%hq%_%hq%z%hq~P'vO%uWO#g&ry%[&ry%_&ryg&ry~OV)`Oa)`O%uWO!W&ui~Ot-}OP#m!RV#m!Rf#m!Rh#m!Ro#m!Rs#m!Rv#m!R!P#m!R!Q#m!R!T#m!R!U#m!R!X#m!R!]#m!R!h#m!R!r#m!R!s#m!R!t#m!R!{#m!R!}#m!R#P#m!R#R#m!R#T#m!R#X#m!R#Z#m!R#^#m!R#_#m!R#a#m!R#c#m!R#l#m!R#o#m!R#s#m!R#u#m!R#z#m!R#}#m!R$P#m!R%X#m!R%o#m!R%p#m!R%t#m!R%u#m!R&Z#m!R&[#m!R&]#m!R&^#m!R&_#m!R&`#m!R&a#m!R&b#m!R&c#m!R&d#m!R&e#m!R&f#m!R&g#m!R&h#m!R&i#m!R&j#m!R%Z#m!R%_#m!R~Oo0cOv0qO{&xy~P'vOV*SOa*TO%q*UO%uWOg&yi~O$S-lO%Z.VO%_.VO~OV.aOh._O!X.^O!].`O!h.YO!s.[O!t.[O%p.XO%uWO&Z]O&[]O&]]O&^]O&_]O&`]O&a]O&b]O~Oo0cOv0qOz$lq!W$lq~P'vO{.fOz$lq!W$lq~Oo0cOv0qO{*gO!W&Xy~P'vOz.gO!W&Xy~Oo0cOv.kO~P'vOs-sO!T%dO!U%cOg&Oy!W&Oy![&Oyz&Oy~P!/jO{(kO![.nO~O{(kO![.nO!m.oO~OV*SOa*TO%q*UO%uWO~Oh.tO!f.rOz$TX#[$TX%j$TXg$TX~Os$TX{$TX!W$TX![$TX~P$-bO%o.vO%p.vOs$UXz$UX{$UX#[$UX%j$UX!W$UXg$UX![$UX~O!h.xO~Oz.|O#[/OO%j.yOs&|X{&|X!W&|Xg&|X~Oa/RO~P$)zOh.tOs&}Xz&}X{&}X#[&}X%j&}X!W&}Xg&}X![&}X~Os/VO{$jO~Oo0cOv0qOz$ly!W$ly~P'vOo0cOv0qO{*gO!W&X!R~P'vOz/ZO!W&X!R~Og&RXs&RX!T&RX!U&RX!W&RX![&RXz&RX~P!/jOs-sO!T%dO!U%cOg&Qa!W&Qa![&Qaz&Qa~O{(kO![/^O~O!f.rOh$[as$[az$[a{$[a#[$[a%j$[a!W$[ag$[a![$[a~O!h/eO~O%o.vO%p.vOs$Uaz$Ua{$Ua#[$Ua%j$Ua!W$Uag$Ua![$Ua~O%j.yOs$Yaz$Ya{$Ya#[$Ya!W$Yag$Ya![$Ya~Os&|a{&|a!W&|ag&|a~P$)nOz/jOs&|a{&|a!W&|ag&|a~O!W/mO~Og/mO~O{/oO~O![/pO~Oo0cOv0qO{*gO!W&X!Z~P'vO{/sO~O%z/tO~P$-bOz/uO#[/OO%j.yOg'PX~Oz/uOg'PX~Og/wO~O!h/xO~O#[/OOs%Saz%Sa{%Sa%j%Sa!W%Sag%Sa![%Sa~O#[/OO%j.yOs%Waz%Wa{%Wa!W%Wag%Wa~Os&|i{&|i!W&|ig&|i~P$)nOz/zO#[/OO%j.yO!['Oa~O{$da~P%SOg'Pa~P$)nOz0SOg'Pa~Oa0UO!['Oi~P$)zOz0WO!['Oi~Oz0WO#[/OO%j.yO!['Oi~O#[/OO%j.yOg$biz$bi~O%z0ZO~P$-bO#[/OO%j.yOg%Vaz%Va~Og'Pi~P$)nO{0^O~Oa0UO!['Oq~P$)zOz0`O!['Oq~O#[/OO%j.yOz%Ui![%Ui~Oa0UO~P$)zOa0UO!['Oy~P$)zO#[/OO%j.yOg$ciz$ci~O#[/OO%j.yOz%Uq![%Uq~Oz+aO#g%ha%[%ha%_%ha%z%ha~P%SOV&OOo0cOv0qO~P'vOn0hO~Oo0hO~P'vO{0iO~Ot0jO~P!/jO&]&Z&j&h&i&g&f&d&e&c&b&`&a&_&^&[%u~",goto:"!=o'QPPPPPP'RP'Z*s+]+v,b,}-kP.YP'Z.y.y'ZPPP'Z2cPPPPPP2c5VPP5VP7g7p=xPP={>m>pPP'Z'ZPP?PPP'Z'ZPP'Z'Z'Z'Z'Z?T?}'ZP@QP@WD_G{HPPHSH^Hb'ZPPPHeHq'RP'R'RP'RP'RP'RP'RP'R'R'RP'RPP'RPP'RP'RPHwITI]PIdIjPIdPIdIdPPPIdPKxPLRL]LcKxPIdLlPIdPLsLyPL}McNQNkL}L}Nq! OL}L}L}L}! d! j! m! r! u!!P!!V!!c!!u!!{!#V!#]!#y!$P!$V!$a!$g!$m!%P!%Z!%a!%g!%q!%w!%}!&T!&Z!&a!&k!&q!&{!'R!'[!'b!'q!'y!(T!([PPPPPPPPPPP!(b!(e!(k!(t!)O!)ZPPPPPPPPPPPP!-}!/c!3c!6sPP!6{!7[!7e!8^!8T!8g!8m!8p!8s!8v!9O!9oPPPPPPPPPPPPPPPPP!9r!9v!9|P!:b!:f!:r!:{!;X!;o!;r!;u!;{!<R!<X!<[P!<d!<m!=i!=l]eOn#g$j)t,P'}`OTYZ[adnoprtxy}!P!Q!R!U!X!c!d!e!f!g!h!i!k!o!p!q!s!t!z#O#S#T#[#d#g#x#y#{#}$Q$e$g$h$j$q$}%S%Z%^%`%c%g%l%n%w%|&O&Z&_&h&j&k&u&x&|'P'W'Z'l'm'p'r's'w'|(O(S(W(](^(d(g(p(r(z(})^)e)g)k)l)p)t)z*O*Y*d*g*h*k*q*r*t*v*y*z*}+Q+U+V+Y+a+c+d+k+x+y,P,X,Y,],g,h,i,k,l,o,q,s,u,w,y,z-O-d-f-m-p-s.f.g/V/Z/s0c0d0e0f0h0i0j0k0l0n0r}!cQ#c#p$R$d$p%e%j%p%q&`'O'g(q(|)j*o*x+w,v/q0g!P!dQ#c#p$R$d$p$u%e%j%p%q&`'O'g(q(|)j*o*x+w,v/q0g!R!eQ#c#p$R$d$p$u$v%e%j%p%q&`'O'g(q(|)j*o*x+w,v/q0g!T!fQ#c#p$R$d$p$u$v$w%e%j%p%q&`'O'g(q(|)j*o*x+w,v/q0g!V!gQ#c#p$R$d$p$u$v$w$x%e%j%p%q&`'O'g(q(|)j*o*x+w,v/q0g!X!hQ#c#p$R$d$p$u$v$w$x$y%e%j%p%q&`'O'g(q(|)j*o*x+w,v/q0g!]!hQ!n#c#p$R$d$p$u$v$w$x$y$z%e%j%p%q&`'O'g(q(|)j*o*x+w,v/q0g'}TOTYZ[adnoprtxy}!P!Q!R!U!X!c!d!e!f!g!h!i!k!o!p!q!s!t!z#O#S#T#[#d#g#x#y#{#}$Q$e$g$h$j$q$}%S%Z%^%`%c%g%l%n%w%|&O&Z&_&h&j&k&u&x&|'P'W'Z'l'm'p'r's'w'|(O(S(W(](^(d(g(p(r(z(})^)e)g)k)l)p)t)z*O*Y*d*g*h*k*q*r*t*v*y*z*}+Q+U+V+Y+a+c+d+k+x+y,P,X,Y,],g,h,i,k,l,o,q,s,u,w,y,z-O-d-f-m-p-s.f.g/V/Z/s0c0d0e0f0h0i0j0k0l0n0r&cVOYZ[dnprxy}!P!Q!U!i!k!o!p!q!s!t#[#d#g#y#{#}$Q$h$j$}%S%Z%^%`%g%l%n%w%|&Z&_&j&k&u&x'P'W'Z'l'm'p'r's'w(O(W(^(d(g(p(r(z)^)e)g)p)t)z*O*Y*d*g*h*k*q*r*t*v*y*z*}+U+V+Y+a+d+k,P,X,Y,],g,h,i,k,l,o,q,s,u,w,y,z-O-d-f-m-p-s.f.g/Z/s0c0d0e0f0h0i0j0k0n0r%mXOYZ[dnrxy}!P!Q!U!i!k#[#d#g#y#{#}$Q$h$j$}%S%^%`%g%l%n%w%|&Z&_&j&k&u&x'P'W'Z'l'm'p'r's'w(O(W(^(d(g(p(r(z)^)e)g)p)t)z*O*Y*d*g*h*k*q*t*v*y*z*}+U+V+Y+a+d+k,P,X,Y,],g,h,i,k,l,o,s,u,w,y,z-O-d-f-m-p.f.g/Z0i0j0kQ#vqQ/[.kR0o0q't`OTYZ[adnoprtxy}!P!Q!R!U!X!c!d!e!f!g!h!k!o!p!q!s!t!z#O#S#T#[#d#g#x#y#{#}$Q$e$g$h$j$q$}%S%Z%^%`%c%g%l%n%w%|&O&Z&_&h&j&k&u&x&|'P'W'Z'l'p'r's'w'|(O(S(W(](^(d(g(p(r(z(})^)e)g)k)l)p)t)z*O*Y*g*h*k*q*r*t*v*y*z*}+Q+U+V+Y+a+c+d+k+x+y,P,X,Y,],h,i,k,l,o,q,s,u,w,y,z-O-d-f-m-p-s.f.g/V/Z/s0c0d0e0f0h0i0j0k0l0n0rh#jhz{$W$Z&l&q)S)X+f+g-RW#rq&].k0qQ$]|Q$a!OQ$n!VQ$o!WW$|!i'm*d,gS&[#s#tQ'S$iQ(s&UQ)U&nU)Y&s)Z+jW)a&w+m-T-{Q*Q']W*R'_,`-h.TQ+l)`S,_*S*TQ-Q+eQ-_,TQ-c,WQ.R-al.W-l.^._.a.z.|/R/j/o/t/y0U0Z0^Q/S.`Q/a.tQ/l/OU0P/u0S0[X0V/z0W0_0`R&Z#r!_!wYZ!P!Q!k%S%`%g'p'r's(O(W)g*g*h*k*q*t*v,h,i,k,l,o-m-p.f.g/ZR%^!vQ!{YQ%x#[Q&d#}Q&g$QR,{+YT.j-s/s![!jQ!n#c#p$R$d$p$u$v$w$x$y$z%e%j%p%q&`'O'g(q(|)j*o*x+w,v/q0gQ&X#kQ'c$oR*^'dR'l$|Q%V!mR/_.r'|_OTYZ[adnoprtxy}!P!Q!R!U!X!c!d!e!f!g!h!i!k!o!p!q!s!t!z#O#S#T#[#d#g#x#y#{#}$Q$e$g$h$j$q$}%S%Z%^%`%c%g%l%n%w%|&O&Z&_&h&j&k&u&x&|'P'W'Z'l'm'p'r's'w'|(O(S(W(](^(d(g(p(r(z(})^)e)g)k)l)p)t)z*O*Y*d*g*h*k*q*r*t*v*y*z*}+Q+U+V+Y+a+c+d+k+x+y,P,X,Y,],g,h,i,k,l,o,q,s,u,w,y,z-O-d-f-m-p-s.f.g/V/Z/s0c0d0e0f0h0i0j0k0l0n0rS#a_#b!P.[-l.^._.`.a.t.z.|/R/j/o/t/u/y/z0S0U0W0Z0[0^0_0`'|_OTYZ[adnoprtxy}!P!Q!R!U!X!c!d!e!f!g!h!i!k!o!p!q!s!t!z#O#S#T#[#d#g#x#y#{#}$Q$e$g$h$j$q$}%S%Z%^%`%c%g%l%n%w%|&O&Z&_&h&j&k&u&x&|'P'W'Z'l'm'p'r's'w'|(O(S(W(](^(d(g(p(r(z(})^)e)g)k)l)p)t)z*O*Y*d*g*h*k*q*r*t*v*y*z*}+Q+U+V+Y+a+c+d+k+x+y,P,X,Y,],g,h,i,k,l,o,q,s,u,w,y,z-O-d-f-m-p-s.f.g/V/Z/s0c0d0e0f0h0i0j0k0l0n0rT#a_#bT#^^#_R(o%xa(l%x(n(o+`,{-y-z.oT+[(k+]R-z,{Q$PsQ+l)aQ,^*RR-e,_X#}s$O$P&fQ&y$aQ'a$nQ'd$oR)s'SQ)b&wV-S+m-T-{ZgOn$j)t,PXkOn)t,PQ$k!TQ&z$bQ&{$cQ'^$mQ'b$oQ)q'RQ)x'WQ){'XQ)|'YQ*Z'`S*]'c'dQ+s)gQ+u)hQ+v)iQ+z)oS+|)r*[Q,Q)vQ,R)wS,S)y)zQ,d*^Q-V+rQ-W+tQ-Y+{S-Z+},OQ-`,UQ-b,VQ-|-XQ.O-[Q.P-^Q.Q-_Q.p-}Q.q.RQ/W.dR/r/XWkOn)t,PR#mjQ'`$nS)r'S'aR,O)sQ,]*RR-f,^Q*['`Q+})rR-[,OZiOjn)t,PQ'f$pR*`'gT-j,e-ku.c-l.^._.a.t.z.|/R/j/o/t/u/y0S0U0Z0[0^t.c-l.^._.a.t.z.|/R/j/o/t/u/y0S0U0Z0[0^Q/S.`X0V/z0W0_0`!P.Z-l.^._.`.a.t.z.|/R/j/o/t/u/y/z0S0U0W0Z0[0^0_0`Q.w.YR/f.xg.z.].{/b/i/n/|0O0Q0]0a0bu.b-l.^._.a.t.z.|/R/j/o/t/u/y0S0U0Z0[0^X.u.W.b/a0PR/c.tV0R/u0S0[R/X.dQnOS#on,PR,P)tQ&^#uR(x&^S%m#R#wS(_%m(bT(b%p&`Q%a!yQ%h!}W(P%a%h(U(YQ(U%eR(Y%jQ&i$RR)O&iQ(e%qQ*{(`T+R(e*{Q'n%OR*e'nS'q%R%SY*i'q*j,m-q.hU*j'r's'tU,m*k*l*mS-q,n,oR.h-rQ#Y]R%t#YQ#_^R%y#_Q(h%vS+W(h+XR+X(iQ+](kR,|+]Q#b_R%{#bQ#ebQ%}#cW&Q#e%}({+bQ({&cR+b0gQ$OsS&e$O&fR&f$PQ&v$_R)_&vQ&V#jR(t&VQ&m$VS)T&m+hR+h)UQ$Z{R&p$ZQ&t$]R)[&tQ+n)bR-U+nQ#hfR&S#hQ)f&zR+q)fQ&}$dS)m&})nR)n'OQ'V$kR)u'VQ'[$lS*P'[,ZR,Z*QQ,a*VR-i,aWjOn)t,PR#ljQ-k,eR.U-kd.{.]/b/i/n/|0O0Q0]0a0bR/h.{U.s.W/a0PR/`.sQ/{/nS0X/{0YR0Y/|S/v/b/cR0T/vQ.}.]R/k.}R!ZPXmOn)t,PWlOn)t,PR'T$jYfOn$j)t,PR&R#g[sOn#g$j)t,PR&d#}&bQOYZ[dnprxy}!P!Q!U!i!k!o!p!q!s!t#[#d#g#y#{#}$Q$h$j$}%S%Z%^%`%g%l%n%w%|&Z&_&j&k&u&x'P'W'Z'l'm'p'r's'w(O(W(^(d(g(p(r(z)^)e)g)p)t)z*O*Y*d*g*h*k*q*r*t*v*y*z*}+U+V+Y+a+d+k,P,X,Y,],g,h,i,k,l,o,q,s,u,w,y,z-O-d-f-m-p-s.f.g/Z/s0c0d0e0f0h0i0j0k0n0rQ!nTQ#caQ#poU$Rt%c(SS$d!R$gQ$p!XQ$u!cQ$v!dQ$w!eQ$x!fQ$y!gQ$z!hQ%e!zQ%j#OQ%p#SQ%q#TQ&`#xQ'O$eQ'g$qQ(q&OU(|&h(}+cW)j&|)l+x+yQ*o'|Q*x(]Q+w)kQ,v+QQ/q/VR0g0lQ!yYQ!}ZQ$b!PQ$c!QQ%R!kQ't%S^'{%`%g(O(W*q*t*v^*f'p*h,k,l-p.g/ZQ*l'rQ*m'sQ+t)gQ,j*gQ,n*kQ-n,hQ-o,iQ-r,oQ.e-mR/Y.f[bOn#g$j)t,P!^!vYZ!P!Q!k%S%`%g'p'r's(O(W)g*g*h*k*q*t*v,h,i,k,l,o-m-p.f.g/ZQ#R[Q#fdS#wrxQ$UyW$_}$Q'P)pS$l!U$hW${!i'm*d,gS%v#[+Y`&P#d%|(p(r(z+a-O0kQ&a#yQ&b#{Q&c#}Q'j$}Q'z%^W([%l(^*y*}Q(`%nQ(i%wQ(v&ZS(y&_0iQ)P&jQ)Q&kU)]&u)^+kQ)d&xQ)y'WY)}'Z*O,X,Y-dQ*b'lS*n'w0jW+P(d*z,s,wW+T(g+V,y,zQ+p)eQ,U)zQ,c*YQ,x+UQ-P+dQ-e,]Q-v,uR.S-fhUOn#d#g$j%|&_'w(p(r)t,P%S!uYZ[drxy}!P!Q!U!i!k#[#y#{#}$Q$h$}%S%^%`%g%l%n%w&Z&j&k&u&x'P'W'Z'l'm'p'r's(O(W(^(d(g(z)^)e)g)p)z*O*Y*d*g*h*k*q*t*v*y*z*}+U+V+Y+a+d+k,X,Y,],g,h,i,k,l,o,s,u,w,y,z-O-d-f-m-p.f.g/Z0i0j0kQ#qpW%W!o!s0d0nQ%X!pQ%Y!qQ%[!tQ%f0cS'v%Z0hQ'x0eQ'y0fQ,p*rQ-u,qS.i-s/sR0p0rU#uq.k0qR(w&][cOn#g$j)t,PZ!xY#[#}$Q+YQ#W[Q#zrR$TxQ%b!yQ%i!}Q%o#RQ'j${Q(V%eQ(Z%jQ(c%pQ(f%qQ*|(`Q,f*bQ-t,pQ.m-uR/].lQ$StQ(R%cR*s(SQ.l-sR/}/sR#QZR#V[R%Q!iQ%O!iV*c'm*d,g!]!lQ!n#c#p$R$d$p$u$v$w$x$y$z%e%j%p%q&`'O'g(q(|)j*o*x+w,v/q0gR%T!kT#]^#_Q%x#[R,{+YQ(m%xS+_(n(oQ,}+`Q-x,{S.n-y-zR/^.oT+Z(k+]Q$`}Q&g$QQ)o'PR+{)pQ$XzQ)W&qR+i)XQ$XzQ&o$WQ)W&qR+i)XQ#khW$Vz$W&q)XQ$[{Q&r$ZZ)R&l)S+f+g-RR$^|R)c&wXlOn)t,PQ$f!RR'Q$gQ$m!UR'R$hR*X'_Q*V'_V-g,`-h.TQ.d-lQ/P.^R/Q._U.]-l.^._Q/U.aQ/b.tQ/g.zU/i.|/j/yQ/n/RQ/|/oQ0O/tU0Q/u0S0[Q0]0UQ0a0ZR0b0^R/T.`R/d.t",nodeNames:"⚠ print Escape { Comment Script AssignStatement * BinaryExpression BitOp BitOp BitOp BitOp ArithOp ArithOp @ ArithOp ** UnaryExpression ArithOp BitOp AwaitExpression await ) ( ParenthesizedExpression BinaryExpression or and CompareOp in not is UnaryExpression ConditionalExpression if else LambdaExpression lambda ParamList VariableName AssignOp , : NamedExpression AssignOp YieldExpression yield from TupleExpression ComprehensionExpression async for LambdaExpression ] [ ArrayExpression ArrayComprehensionExpression } { DictionaryExpression DictionaryComprehensionExpression SetExpression SetComprehensionExpression CallExpression ArgList AssignOp MemberExpression . PropertyName Number String FormatString FormatReplacement FormatSelfDoc FormatConversion FormatSpec FormatReplacement FormatSelfDoc ContinuedString Ellipsis None Boolean TypeDef AssignOp UpdateStatement UpdateOp ExpressionStatement DeleteStatement del PassStatement pass BreakStatement break ContinueStatement continue ReturnStatement return YieldStatement PrintStatement RaiseStatement raise ImportStatement import as ScopeStatement global nonlocal AssertStatement assert TypeDefinition type TypeParamList TypeParam StatementGroup ; IfStatement Body elif WhileStatement while ForStatement TryStatement try except finally WithStatement with FunctionDefinition def ParamList AssignOp TypeDef ClassDefinition class DecoratedStatement Decorator At MatchStatement match MatchBody MatchClause case CapturePattern LiteralPattern ArithOp ArithOp AsPattern OrPattern LogicOp AttributePattern SequencePattern MappingPattern StarPattern ClassPattern PatternArgList KeywordPattern KeywordPattern Guard",maxTerm:277,context:st,nodeProps:[["isolate",-5,4,71,72,73,77,""],["group",-15,6,85,87,88,90,92,94,96,98,99,100,102,105,108,110,"Statement Statement",-22,8,18,21,25,40,49,50,56,57,60,61,62,63,64,67,70,71,72,79,80,81,82,"Expression",-10,114,116,119,121,122,126,128,133,135,138,"Statement",-9,143,144,147,148,150,151,152,153,154,"Pattern"],["openedBy",23,"(",54,"[",58,"{"],["closedBy",24,")",55,"]",59,"}"]],propSources:[ot],skippedNodes:[0,4],repeatNodeCount:34,tokenData:"!2|~R!`OX%TXY%oY[%T[]%o]p%Tpq%oqr'ars)Yst*xtu%Tuv,dvw-hwx.Uxy/tyz0[z{0r{|2S|}2p}!O3W!O!P4_!P!Q:Z!Q!R;k!R![>_![!]Do!]!^Es!^!_FZ!_!`Gk!`!aHX!a!b%T!b!cIf!c!dJU!d!eK^!e!hJU!h!i!#f!i!tJU!t!u!,|!u!wJU!w!x!.t!x!}JU!}#O!0S#O#P&o#P#Q!0j#Q#R!1Q#R#SJU#S#T%T#T#UJU#U#VK^#V#YJU#Y#Z!#f#Z#fJU#f#g!,|#g#iJU#i#j!.t#j#oJU#o#p!1n#p#q!1s#q#r!2a#r#s!2f#s$g%T$g;'SJU;'S;=`KW<%lOJU`%YT&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%T`%lP;=`<%l%To%v]&n`%c_OX%TXY%oY[%T[]%o]p%Tpq%oq#O%T#O#P&o#P#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%To&tX&n`OY%TYZ%oZ]%T]^%o^#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tc'f[&n`O!_%T!_!`([!`#T%T#T#U(r#U#f%T#f#g(r#g#h(r#h#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tc(cTmR&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tc(yT!mR&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk)aV&n`&[ZOr%Trs)vs#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk){V&n`Or%Trs*bs#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk*iT&n`&^ZO#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%To+PZS_&n`OY*xYZ%TZ]*x]^%T^#o*x#o#p+r#p#q*x#q#r+r#r;'S*x;'S;=`,^<%lO*x_+wTS_OY+rZ]+r^;'S+r;'S;=`,W<%lO+r_,ZP;=`<%l+ro,aP;=`<%l*xj,kV%rQ&n`O!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tj-XT!xY&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tj-oV%lQ&n`O!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk.]V&n`&ZZOw%Twx.rx#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk.wV&n`Ow%Twx/^x#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk/eT&n`&]ZO#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk/{ThZ&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tc0cTgR&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk0yXVZ&n`Oz%Tz{1f{!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk1mVaR&n`O!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk2ZV%oZ&n`O!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tc2wTzR&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%To3_W%pZ&n`O!_%T!_!`-Q!`!a3w!a#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Td4OT&{S&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk4fX!fQ&n`O!O%T!O!P5R!P!Q%T!Q![6T![#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk5WV&n`O!O%T!O!P5m!P#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk5tT!rZ&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Ti6[a!hX&n`O!Q%T!Q![6T![!g%T!g!h7a!h!l%T!l!m9s!m#R%T#R#S6T#S#X%T#X#Y7a#Y#^%T#^#_9s#_#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Ti7fZ&n`O{%T{|8X|}%T}!O8X!O!Q%T!Q![8s![#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Ti8^V&n`O!Q%T!Q![8s![#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Ti8z]!hX&n`O!Q%T!Q![8s![!l%T!l!m9s!m#R%T#R#S8s#S#^%T#^#_9s#_#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Ti9zT!hX&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk:bX%qR&n`O!P%T!P!Q:}!Q!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tj;UV%sQ&n`O!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Ti;ro!hX&n`O!O%T!O!P=s!P!Q%T!Q![>_![!d%T!d!e?q!e!g%T!g!h7a!h!l%T!l!m9s!m!q%T!q!rA]!r!z%T!z!{Bq!{#R%T#R#S>_#S#U%T#U#V?q#V#X%T#X#Y7a#Y#^%T#^#_9s#_#c%T#c#dA]#d#l%T#l#mBq#m#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Ti=xV&n`O!Q%T!Q![6T![#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Ti>fc!hX&n`O!O%T!O!P=s!P!Q%T!Q![>_![!g%T!g!h7a!h!l%T!l!m9s!m#R%T#R#S>_#S#X%T#X#Y7a#Y#^%T#^#_9s#_#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Ti?vY&n`O!Q%T!Q!R@f!R!S@f!S#R%T#R#S@f#S#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Ti@mY!hX&n`O!Q%T!Q!R@f!R!S@f!S#R%T#R#S@f#S#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TiAbX&n`O!Q%T!Q!YA}!Y#R%T#R#SA}#S#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TiBUX!hX&n`O!Q%T!Q!YA}!Y#R%T#R#SA}#S#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TiBv]&n`O!Q%T!Q![Co![!c%T!c!iCo!i#R%T#R#SCo#S#T%T#T#ZCo#Z#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TiCv]!hX&n`O!Q%T!Q![Co![!c%T!c!iCo!i#R%T#R#SCo#S#T%T#T#ZCo#Z#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%ToDvV{_&n`O!_%T!_!`E]!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TcEdT%{R&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TkEzT#gZ&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TkFbXmR&n`O!^%T!^!_F}!_!`([!`!a([!a#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TjGUV%mQ&n`O!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TkGrV%zZ&n`O!_%T!_!`([!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TkH`WmR&n`O!_%T!_!`([!`!aHx!a#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TjIPV%nQ&n`O!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TkIoV_Q#}P&n`O!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%ToJ_]&n`&YS%uZO!Q%T!Q![JU![!c%T!c!}JU!}#R%T#R#SJU#S#T%T#T#oJU#p#q%T#r$g%T$g;'SJU;'S;=`KW<%lOJUoKZP;=`<%lJUoKge&n`&YS%uZOr%Trs)Ysw%Twx.Ux!Q%T!Q![JU![!c%T!c!tJU!t!uLx!u!}JU!}#R%T#R#SJU#S#T%T#T#fJU#f#gLx#g#oJU#p#q%T#r$g%T$g;'SJU;'S;=`KW<%lOJUoMRa&n`&YS%uZOr%TrsNWsw%Twx! vx!Q%T!Q![JU![!c%T!c!}JU!}#R%T#R#SJU#S#T%T#T#oJU#p#q%T#r$g%T$g;'SJU;'S;=`KW<%lOJUkN_V&n`&`ZOr%TrsNts#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%TkNyV&n`Or%Trs! `s#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk! gT&n`&bZO#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk! }V&n`&_ZOw%Twx!!dx#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!!iV&n`Ow%Twx!#Ox#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!#VT&n`&aZO#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%To!#oe&n`&YS%uZOr%Trs!%Qsw%Twx!&px!Q%T!Q![JU![!c%T!c!tJU!t!u!(`!u!}JU!}#R%T#R#SJU#S#T%T#T#fJU#f#g!(`#g#oJU#p#q%T#r$g%T$g;'SJU;'S;=`KW<%lOJUk!%XV&n`&dZOr%Trs!%ns#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!%sV&n`Or%Trs!&Ys#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!&aT&n`&fZO#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!&wV&n`&cZOw%Twx!'^x#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!'cV&n`Ow%Twx!'xx#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!(PT&n`&eZO#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%To!(ia&n`&YS%uZOr%Trs!)nsw%Twx!+^x!Q%T!Q![JU![!c%T!c!}JU!}#R%T#R#SJU#S#T%T#T#oJU#p#q%T#r$g%T$g;'SJU;'S;=`KW<%lOJUk!)uV&n`&hZOr%Trs!*[s#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!*aV&n`Or%Trs!*vs#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!*}T&n`&jZO#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!+eV&n`&gZOw%Twx!+zx#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!,PV&n`Ow%Twx!,fx#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tk!,mT&n`&iZO#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%To!-Vi&n`&YS%uZOr%TrsNWsw%Twx! vx!Q%T!Q![JU![!c%T!c!dJU!d!eLx!e!hJU!h!i!(`!i!}JU!}#R%T#R#SJU#S#T%T#T#UJU#U#VLx#V#YJU#Y#Z!(`#Z#oJU#p#q%T#r$g%T$g;'SJU;'S;=`KW<%lOJUo!.}a&n`&YS%uZOr%Trs)Ysw%Twx.Ux!Q%T!Q![JU![!c%T!c!}JU!}#R%T#R#SJU#S#T%T#T#oJU#p#q%T#r$g%T$g;'SJU;'S;=`KW<%lOJUk!0ZT!XZ&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tc!0qT!WR&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%Tj!1XV%kQ&n`O!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%T~!1sO!]~k!1zV%jR&n`O!_%T!_!`-Q!`#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%T~!2fO![~i!2mT%tX&n`O#o%T#p#q%T#r;'S%T;'S;=`%i<%lO%T",tokenizers:[nt,B,D,rt,0,1,2,3,4],topRules:{Script:[0,5]},specialized:[{term:221,get:t=>ht[t]||-1}],tokenPrec:7675}),dt=new f,Qt=new Set(["Script","Body","FunctionDefinition","ClassDefinition","LambdaExpression","ForStatement","MatchClause"]);function ct(t){return(O,e,i)=>{if(i)return!1;let s=O.node.getChild("VariableName");return s&&e(s,t),!0}}const pt={FunctionDefinition:ct("function"),ClassDefinition:ct("class"),ForStatement(t,O,e){if(e)for(let e=t.node.firstChild;e;e=e.nextSibling)if("VariableName"==e.name)O(e,"variable");else if("in"==e.name)break},ImportStatement(t,O){var e,i;let{node:s}=t,n="from"==(null===(e=s.firstChild)||void 0===e?void 0:e.name);for(let t=s.getChild("import");t;t=t.nextSibling)"VariableName"==t.name&&"as"!=(null===(i=t.nextSibling)||void 0===i?void 0:i.name)&&O(t,n?"variable":"namespace")},AssignStatement(t,O){for(let e=t.node.firstChild;e;e=e.nextSibling)if("VariableName"==e.name)O(e,"variable");else if(":"==e.name||"AssignOp"==e.name)break},ParamList(t,O){for(let e=null,i=t.node.firstChild;i;i=i.nextSibling)"VariableName"!=i.name||e&&/\*|AssignOp/.test(e.name)||O(i,"variable"),e=i},CapturePattern:ct("variable"),AsPattern:ct("variable"),__proto__:null};function ut(t,O){let e=dt.get(O);if(e)return e;let i=[],s=!0;function n(O,e){let s=t.sliceString(O.from,O.to);i.push({label:s,type:e})}return O.cursor(r.IncludeAnonymous).iterate((O=>{if(O.name){let t=pt[O.name];if(t&&t(O,n,s)||!s&&Qt.has(O.name))return!1;s=!1}else if(O.to-O.from>8192){for(let e of ut(t,O.node))i.push(e);return!1}})),dt.set(O,i),i}const ft=/^[\w\xa1-\uffff][\w\d\xa1-\uffff]*$/,Tt=["String","FormatString","Comment","PropertyName"];function gt(t){let O=l(t.state).resolveInner(t.pos,-1);if(Tt.indexOf(O.name)>-1)return null;let e="VariableName"==O.name||O.to-O.from<20&&ft.test(t.state.sliceDoc(O.from,O.to));if(!e&&!t.explicit)return null;let i=[];for(let e=O;e;e=e.parent)Qt.has(e.name)&&(i=i.concat(ut(t.state.doc,e)));return{options:i,from:e?O.from:t.pos,validFor:ft}}const St=["__annotations__","__builtins__","__debug__","__doc__","__import__","__name__","__loader__","__package__","__spec__","False","None","True"].map((t=>({label:t,type:"constant"}))).concat(["ArithmeticError","AssertionError","AttributeError","BaseException","BlockingIOError","BrokenPipeError","BufferError","BytesWarning","ChildProcessError","ConnectionAbortedError","ConnectionError","ConnectionRefusedError","ConnectionResetError","DeprecationWarning","EOFError","Ellipsis","EncodingWarning","EnvironmentError","Exception","FileExistsError","FileNotFoundError","FloatingPointError","FutureWarning","GeneratorExit","IOError","ImportError","ImportWarning","IndentationError","IndexError","InterruptedError","IsADirectoryError","KeyError","KeyboardInterrupt","LookupError","MemoryError","ModuleNotFoundError","NameError","NotADirectoryError","NotImplemented","NotImplementedError","OSError","OverflowError","PendingDeprecationWarning","PermissionError","ProcessLookupError","RecursionError","ReferenceError","ResourceWarning","RuntimeError","RuntimeWarning","StopAsyncIteration","StopIteration","SyntaxError","SyntaxWarning","SystemError","SystemExit","TabError","TimeoutError","TypeError","UnboundLocalError","UnicodeDecodeError","UnicodeEncodeError","UnicodeError","UnicodeTranslateError","UnicodeWarning","UserWarning","ValueError","Warning","ZeroDivisionError"].map((t=>({label:t,type:"type"})))).concat(["bool","bytearray","bytes","classmethod","complex","float","frozenset","int","list","map","memoryview","object","range","set","staticmethod","str","super","tuple","type"].map((t=>({label:t,type:"class"})))).concat(["abs","aiter","all","anext","any","ascii","bin","breakpoint","callable","chr","compile","delattr","dict","dir","divmod","enumerate","eval","exec","exit","filter","format","getattr","globals","hasattr","hash","help","hex","id","input","isinstance","issubclass","iter","len","license","locals","max","min","next","oct","open","ord","pow","print","property","quit","repr","reversed","round","setattr","slice","sorted","sum","vars","zip"].map((t=>({label:t,type:"function"})))),mt=[S("def ${name}(${params}):\n\t${}",{label:"def",detail:"function",type:"keyword"}),S("for ${name} in ${collection}:\n\t${}",{label:"for",detail:"loop",type:"keyword"}),S("while ${}:\n\t${}",{label:"while",detail:"loop",type:"keyword"}),S("try:\n\t${}\nexcept ${error}:\n\t${}",{label:"try",detail:"/ except block",type:"keyword"}),S("if ${}:\n\t\n",{label:"if",detail:"block",type:"keyword"}),S("if ${}:\n\t${}\nelse:\n\t${}",{label:"if",detail:"/ else block",type:"keyword"}),S("class ${name}:\n\tdef __init__(self, ${params}):\n\t\t\t${}",{label:"class",detail:"definition",type:"keyword"}),S("import ${module}",{label:"import",detail:"statement",type:"keyword"}),S("from ${module} import ${names}",{label:"from",detail:"import",type:"keyword"})],kt=T(Tt,g(St.concat(mt)));function Pt(t){let{node:O,pos:e}=t,i=t.lineIndent(e,-1),s=null;for(;;){let n=O.childBefore(e);if(!n)break;if("Comment"==n.name)e=n.from;else if("Body"==n.name||"MatchBody"==n.name)t.baseIndentFor(n)+t.unit<=i&&(s=n),O=n;else if("MatchClause"==n.name)O=n;else{if(!n.type.is("Statement"))break;O=n}}return s}function qt(t,O){let e=t.baseIndentFor(O),i=t.lineAt(t.pos,-1),s=i.from+i.text.length;return/^\s*($|#)/.test(i.text)&&t.node.to<s+100&&!/\S/.test(t.state.sliceDoc(s,t.node.to))&&t.lineIndent(t.pos,-1)<=e||/^\s*(else:|elif |except |finally:|case\s+[^=:]+:)/.test(t.textAfter)&&t.lineIndent(t.pos,-1)>e?null:e+t.unit}const $t=h.define({name:"python",parser:lt.configure({props:[Q.add({Body:t=>{var O;return null!==(O=qt(t,Pt(t)||t.node))&&void 0!==O?O:t.continue()},MatchBody:t=>{var O;return null!==(O=qt(t,Pt(t)||t.node))&&void 0!==O?O:t.continue()},IfStatement:t=>/^\s*(else:|elif )/.test(t.textAfter)?t.baseIndent:t.continue(),"ForStatement WhileStatement":t=>/^\s*else:/.test(t.textAfter)?t.baseIndent:t.continue(),TryStatement:t=>/^\s*(except |finally:|else:)/.test(t.textAfter)?t.baseIndent:t.continue(),MatchStatement:t=>/^\s*case /.test(t.textAfter)?t.baseIndent+t.unit:t.continue(),"TupleExpression ComprehensionExpression ParamList ArgList ParenthesizedExpression":p({closing:")"}),"DictionaryExpression DictionaryComprehensionExpression SetExpression SetComprehensionExpression":p({closing:"}"}),"ArrayExpression ArrayComprehensionExpression":p({closing:"]"}),"String FormatString":()=>null,Script:t=>{var O;let e=Pt(t);return null!==(O=e&&qt(t,e))&&void 0!==O?O:t.continue()}}),c.add({"ArrayExpression DictionaryExpression SetExpression TupleExpression":u,Body:(t,O)=>({from:t.from+1,to:t.to-(t.to==O.doc.length?0:1)})})]}),languageData:{closeBrackets:{brackets:["(","[","{","'",'"',"'''",'"""'],stringPrefixes:["f","fr","rf","r","u","b","br","rb","F","FR","RF","R","U","B","BR","RB"]},commentTokens:{line:"#"},indentOnInput:/^\s*([\}\]\)]|else:|elif |except |finally:|case\s+[^:]*:?)$/}});function xt(){return new d($t,[$t.data.of({autocomplete:gt}),$t.data.of({autocomplete:kt})])}export{kt as globalCompletion,gt as localCompletionSource,xt as python,$t as pythonLanguage};
2
- //# sourceMappingURL=codemirror_lang-python-CdfPcWbg.js.map